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

69 lines
2 KiB
Ruby
Raw Normal View History

2017-08-17 22:00:37 +05:30
require 'webpack/rails/manifest'
module WebpackHelper
2018-03-17 18:26:18 +05:30
def webpack_bundle_tag(bundle, force_same_domain: false)
javascript_include_tag(*gitlab_webpack_asset_paths(bundle, force_same_domain: force_same_domain))
end
def webpack_controller_bundle_tags
bundles = []
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
until route.empty?
2018-03-17 18:26:18 +05:30
begin
2018-03-27 19:54:05 +05:30
asset_paths = gitlab_webpack_asset_paths("pages.#{route.join('.')}", extension: 'js')
2018-03-17 18:26:18 +05:30
bundles.unshift(*asset_paths)
rescue Webpack::Rails::Manifest::EntryPointMissingError
# 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
javascript_include_tag(*bundles)
2017-08-17 22:00:37 +05:30
end
# override webpack-rails gem helper until changes can make it upstream
2018-03-17 18:26:18 +05:30
def gitlab_webpack_asset_paths(source, extension: nil, force_same_domain: false)
2017-08-17 22:00:37 +05:30
return "" unless source.present?
paths = Webpack::Rails::Manifest.asset_paths(source)
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-03-17 18:26:18 +05:30
unless force_same_domain
force_host = webpack_public_host
if force_host
paths.map! { |p| "#{force_host}#{p}" }
end
2017-09-10 17:25:29 +05:30
end
paths
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