diff --git a/lib/zendesk_apps_tools/theme.rb b/lib/zendesk_apps_tools/theme.rb
index 27389fbe..40a878f5 100644
--- a/lib/zendesk_apps_tools/theme.rb
+++ b/lib/zendesk_apps_tools/theme.rb
@@ -90,38 +90,66 @@ def generate_payload
identifier = template.match(IDENTIFIER_REGEX)['identifier'].to_s
templates_payload[identifier] = File.read(template)
end
+ script_location = 'document_head'
+ style_location = 'document_head'
+ livereload_location = 'document_head'
+
+ #theming_v2 based theme should have script.js
+ # injected at the end of the page
+ if metadata_hash['api_version'] == 2
+ script_location = 'footer'
+ end
+
payload['templates'] = templates_payload
- payload['templates']['document_head'] = inject_external_tags(payload['templates']['document_head'])
+ #inject tag in either document_head (theming_v1 based themes), or footer (theming_v2 based themes)
+ payload['templates'][script_location] = inject_external_tags(payload['templates'][script_location],
+ js_tag_hash['html'])
+ payload['templates'][style_location] = inject_external_tags(payload['templates'][style_location],
+ css_tag_hash['html'], true)
+ payload['templates'][livereload_location] = inject_external_tags(payload['templates'][livereload_location],
+ live_reload_script_tag_hash['html'])
payload['templates']['css'] = ''
payload['templates']['js'] = ''
- payload['templates']['assets'] = assets
- payload['templates']['variables'] = settings_hash
+ payload['templates']['assets'] = assets(base_url)
+ payload['templates']['variables'] = settings_hash(base_url)
payload['templates']['metadata'] = metadata_hash
payload
end
- def inject_external_tags(head_template)
- live_reload_script_tag = <<-html
+ def base_url
+ "http://localhost:#{options[:port]}"
+ end
+
+ def live_reload_script_tag_hash
+ { 'html' => <<-html
-
- html
-
- js_tag = <<-html
-
- html
-
- css_tag = <<-html
-
- html
-
- template = StringIO.new
- template << css_tag
- template << head_template
- template << js_tag
- template << live_reload_script_tag
- template.string
+
+ html
+ }
+ end
+
+ def js_tag_hash
+ { 'html' => <<-html
+
+ html
+ }
+ end
+
+ def css_tag_hash
+ { 'html' => <<-html
+
+ html
+ }
+ end
+
+ def inject_external_tags(template, tag_html, top=false)
+ _template = StringIO.new
+ _template << tag_html if top
+ _template << template
+ _template << tag_html unless top
+ _template.string
end
alias_method :ensure_manifest!, :manifest
@@ -140,9 +168,10 @@ def start_server(callbacks_after_upload)
server.set :root, app_dir
server.set :public_folder, app_dir
server.set :livereload, options[:livereload]
+ server.set :base_url, base_url
server.set :callbacks_after_load, callbacks_after_upload
server.set :callback_map, {}
- server.use Rack::LiveReload, live_reload_port: 4567 if options[:livereload]
+ server.use Rack::LiveReload, live_reload_port: options[:port] if options[:livereload]
server.run!
end
end
diff --git a/lib/zendesk_apps_tools/theming/common.rb b/lib/zendesk_apps_tools/theming/common.rb
index dfeb8a1f..aa0cca80 100644
--- a/lib/zendesk_apps_tools/theming/common.rb
+++ b/lib/zendesk_apps_tools/theming/common.rb
@@ -5,26 +5,26 @@ def theme_package_path(*file)
File.expand_path(File.join(app_dir, *file))
end
- def url_for(package_file)
+ def path_for(package_file)
relative_path = relative_path_for(package_file)
path_parts = recursive_pathname_split(relative_path)
path_parts.shift
- "http://localhost:4567/guide/#{path_parts.join('/')}"
+ "/guide/#{path_parts.join('/')}"
end
def relative_path_for(filename)
Pathname.new(filename).relative_path_from(Pathname.new(File.expand_path(app_dir))).cleanpath
end
- def assets
+ def assets(base_url)
assets = Dir.glob(theme_package_path('assets', '*'))
assets.each_with_object({}) do |asset, asset_payload|
- asset_payload[File.basename(asset)] = url_for(asset)
+ asset_payload[File.basename(asset)] = "#{base_url}#{path_for(asset)}"
end
end
- def assets_hash
- assets.each_with_object({}) do |(k,v), h|
+ def assets_hash(base_url)
+ assets(base_url).each_with_object({}) do |(k,v), h|
parametrized = k.gsub(/[^a-z0-9\-_]+/, '-')
h["assets-#{parametrized}"] = v
end
@@ -39,9 +39,11 @@ def manifest
say_error_and_exit "The manifest file is invalid at #{full_manifest_path}"
end
- def settings_hash
+ def settings_hash(base_url)
manifest['settings'].flat_map { |setting_group| setting_group['variables'] }.each_with_object({}) do |variable, result|
- result[variable.fetch('identifier')] = value_for_setting(variable)
+ value = value_for_setting(variable)
+ value = "#{base_url}#{path_for(value)}" if variable.fetch('type') == 'file'
+ result[variable.fetch('identifier')] = value
end
end
@@ -49,12 +51,10 @@ def metadata_hash
{ 'api_version' => manifest['api_version'] }
end
- def value_for_setting(variable)
+ def value_for_setting(variable, base_url='')
return variable.fetch('value') unless variable.fetch('type') == 'file'
-
files = Dir.glob(theme_package_path('settings', '*.*'))
- file = files.find { |f| File.basename(f, '.*') == variable.fetch('identifier') }
- url_for(file)
+ files.find { |f| File.basename(f, '.*') == variable.fetch('identifier') }
end
def recursive_pathname_split(relative_path)
@@ -63,6 +63,7 @@ def recursive_pathname_split(relative_path)
return split_path if split_path[0] == joined_directories.split[0]
[*recursive_pathname_split(joined_directories), split_path[1]]
end
+
end
end
end
diff --git a/lib/zendesk_apps_tools/theming/server.rb b/lib/zendesk_apps_tools/theming/server.rb
index a5553783..57632834 100644
--- a/lib/zendesk_apps_tools/theming/server.rb
+++ b/lib/zendesk_apps_tools/theming/server.rb
@@ -57,7 +57,7 @@ class Server < Sinatra::Base
raise Sinatra::NotFound unless File.exist?(style_css)
zass_source = File.read(style_css)
require 'zendesk_apps_tools/theming/zass_formatter'
- response = ZassFormatter.format(zass_source, settings_hash.merge(assets_hash))
+ response = ZassFormatter.format(zass_source, settings_hash(settings.base_url).merge(assets_hash(settings.base_url)))
response
end