debian-mirror-gitlab/app/helpers/webpack_helper.rb

76 lines
2.1 KiB
Ruby
Raw Normal View History

2018-10-15 14:42:47 +05:30
require 'gitlab/webpack/manifest'
2017-08-17 22:00:37 +05:30
module WebpackHelper
2018-10-15 14:42:47 +05:30
def webpack_bundle_tag(bundle)
javascript_include_tag(*webpack_entrypoint_paths(bundle))
2018-03-17 18:26:18 +05:30
end
def webpack_controller_bundle_tags
2018-10-15 14:42:47 +05:30
chunks = []
2018-03-17 18:26:18 +05:30
2018-03-27 19:54:05 +05:30
action = case controller.action_name
when 'create' then 'new'
when 'update' then 'edit'
else controller.action_name
end
route = [*controller.controller_path.split('/'), action].compact
2018-10-15 14:42:47 +05:30
until chunks.any? || route.empty?
entrypoint = "pages.#{route.join('.')}"
2018-03-17 18:26:18 +05:30
begin
2018-10-15 14:42:47 +05:30
chunks = webpack_entrypoint_paths(entrypoint, extension: 'js')
rescue Gitlab::Webpack::Manifest::AssetMissingError
2018-03-17 18:26:18 +05:30
# no bundle exists for this path
end
2018-03-27 19:54:05 +05:30
route.pop
2018-03-17 18:26:18 +05:30
end
2018-10-15 14:42:47 +05:30
if chunks.empty?
chunks = webpack_entrypoint_paths("default", extension: 'js')
end
javascript_include_tag(*chunks)
2017-08-17 22:00:37 +05:30
end
2018-10-15 14:42:47 +05:30
def webpack_entrypoint_paths(source, extension: nil, exclude_duplicates: true)
2017-08-17 22:00:37 +05:30
return "" unless source.present?
2018-10-15 14:42:47 +05:30
paths = Gitlab::Webpack::Manifest.entrypoint_paths(source)
2017-08-17 22:00:37 +05:30
if extension
2017-09-10 17:25:29 +05:30
paths.select! { |p| p.ends_with? ".#{extension}" }
2017-08-17 22:00:37 +05:30
end
2018-10-15 14:42:47 +05:30
force_host = webpack_public_host
if force_host
paths.map! { |p| "#{force_host}#{p}" }
2017-09-10 17:25:29 +05:30
end
2018-10-15 14:42:47 +05:30
if exclude_duplicates
@used_paths ||= []
new_paths = paths - @used_paths
@used_paths += new_paths
new_paths
else
paths
end
2017-09-10 17:25:29 +05:30
end
def webpack_public_host
2017-08-17 22:00:37 +05:30
if Rails.env.test? && Rails.configuration.webpack.dev_server.enabled
host = Rails.configuration.webpack.dev_server.host
port = Rails.configuration.webpack.dev_server.port
protocol = Rails.configuration.webpack.dev_server.https ? 'https' : 'http'
2017-09-10 17:25:29 +05:30
"#{protocol}://#{host}:#{port}"
else
ActionController::Base.asset_host.try(:chomp, '/')
2017-08-17 22:00:37 +05:30
end
2017-09-10 17:25:29 +05:30
end
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
def webpack_public_path
relative_path = Rails.application.config.relative_url_root
webpack_path = Rails.application.config.webpack.public_path
File.join(webpack_public_host.to_s, relative_path.to_s, webpack_path.to_s, '')
2017-08-17 22:00:37 +05:30
end
end