1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
# frozen_string_literal: true
module Sprockets
# Public: JST transformer.
#
# Exports server side compiled templates to an object.
#
# Name your template "users/show.ejs", "users/new.eco", etc.
#
# To accept the default options
#
# environment.register_transformer
# 'application/javascript+function',
# 'application/javascript', JstProcessor
#
# Change the default namespace.
#
# environment.register_transformer
# 'application/javascript+function',
# 'application/javascript', JstProcessor.new(namespace: 'App.templates')
#
class JstProcessor
def self.default_namespace
'this.JST'
end
# Public: Return singleton instance with default options.
#
# Returns JstProcessor object.
def self.instance
@instance ||= new
end
def self.call(input)
instance.call(input)
end
def initialize(namespace: self.class.default_namespace)
@namespace = namespace
end
def call(input)
data = input[:data].gsub(/$(.)/m, "\\1 ").strip
key = input[:name]
<<-JST
(function() { #{@namespace} || (#{@namespace} = {}); #{@namespace}[#{key.inspect}] = #{data};
}).call(this);
JST
end
end
end
|