Class: Volt::ViewProcessor

Inherits:
Opal::TiltTemplate
  • Object
show all
Defined in:
lib/volt/server/template_handlers/view_processor.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ ViewProcessor

Returns a new instance of ViewProcessor.



13
14
15
# File 'lib/volt/server/template_handlers/view_processor.rb', line 13

def initialize(client)
  @client = client
end

Class Method Details

.setup(sprockets = $volt_app.sprockets) ⇒ Object



86
87
88
89
90
91
# File 'lib/volt/server/template_handlers/view_processor.rb', line 86

def self.setup(sprockets=$volt_app.sprockets)
  exts = ComponentTemplates::Preprocessors.extensions.map{ |ext| ".#{ext}" }

  sprockets.register_mime_type 'application/vtemplate', extensions: exts
  sprockets.register_transformer 'application/vtemplate', 'application/javascript', Volt::ViewProcessor.new(true)
end

Instance Method Details

#app_referenceObject



17
18
19
20
21
22
23
# File 'lib/volt/server/template_handlers/view_processor.rb', line 17

def app_reference
  if @client
    'Volt.current_app'
  else
    'volt_app'
  end
end

#cache_keyObject



25
26
27
# File 'lib/volt/server/template_handlers/view_processor.rb', line 25

def cache_key
  @cache_key ||= "#{self.class.name}:0.2".freeze
end

#call(input) ⇒ Object

def evaluate(context, locals, &block)

binding.pry
@data = compile(@data)
super

end



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/volt/server/template_handlers/view_processor.rb', line 35

def call(input)
  context = input[:environment].context_class.new(input)
  # context.link_asset('main/assets/images/lombard.jpg')
  # puts context.asset_path('main/assets/images/lombard.jpg').inspect
  # pp input
  data = input[:data]

  # input[:accept] = 'application/javascript'
  # input[:content_type] = 'application/javascript'
  # input[:environment].content_type = 'application/javascript'
  compiled = false
  data, links = input[:cache].fetch([self.cache_key, data]) do
    compiled = true
    filename = input[:filename]
    # puts input[:data].inspect
    # Remove all semicolons from source
    # input[:content_type] = 'application/javascript'

    # Track the dependency
    context.[:dependencies] << Sprockets::URIUtils.build_file_digest_uri(input[:filename])

    compile(filename, input[:data], context)
  end

  unless compiled
    links.each do |link|
      context.link_asset(link)
    end
  end

  context..merge(data: data.to_str)
end

#compile(view_path, html, context) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/volt/server/template_handlers/view_processor.rb', line 68

def compile(view_path, html, context)
  exts = ComponentTemplates::Preprocessors.extensions
  template_path = view_path.split('/')[-4..-1].join('/').gsub('/views/', '/').gsub(/[.](#{exts.join('|')})$/, '')

  format = File.extname(view_path).downcase.delete('.').to_sym
  code = ''

  # Process template if we have a handler for this file type
  if handler = ComponentTemplates.handler_for_extension(format)
    html = handler.call(html)

    parser = ViewParser.new(html, template_path, context)
    code = parser.code(app_reference)
  end

  return [Opal.compile(code), parser.links]
end