Method: Wedge.javascript

Defined in:
lib/wedge.rb

.javascript(path_name = 'wedge', options = {}, promise = false) ⇒ Object

Return the opal javascript.



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/wedge.rb', line 84

def javascript(path_name = 'wedge', options = {}, promise = false)
  if server?
    if path_name == 'wedge'
      @wedge_javascript ||= begin
        @wedge_javascript_loaded = true
        requires = {}

        @javascript_cache ||= {}

        components.to_h.each do |k, v|
          requires[k] = v.klass.wedge_config.get_requires
          javascript(v.klass.wedge_opts[:path_name])
        end

        compiled_requires = Base64.encode64 requires.to_json
        assets_key        = opts.assets_key
        cache_assets      = opts.cache_assets

        js = build(path_name, options).javascript
        js << Opal.compile("Wedge.instance_variable_set(:@requires, JSON.parse(Base64.decode64('#{compiled_requires}')))")
        # fix: we need to just merge in all config opts and just reject
        # certain ones
        js << Opal.compile("Wedge.config.assets_key('#{assets_key}')") if assets_key
        js << Opal.compile("Wedge.config.cache_assets('#{cache_assets}')") if cache_assets
        ##############################################################
        js
      end
    else
      @javascript_cache[path_name] ||= begin
        js = build(path_name, options).javascript
        comp_name = components.to_h.select { |k, v| v.path_name == path_name }.first.last.name
        comp = Wedge[comp_name]
        options = comp.client_wedge_opts
        compiled_opts = Base64.encode64 options.to_json
        js << Opal.compile("Wedge.components[:#{comp_name}].klass.instance_variable_set(:@wedge_config, Wedge::Config.new(Wedge.components[:#{comp_name}].klass.wedge_config.opts_dup.merge(JSON.parse(Base64.decode64('#{compiled_opts}')))))")
      end
    end
  else
    Wedge.loaded_requires ||= []
    Wedge.loaded_requires_events ||= []
    reqs     = Wedge.requires[options[:name].to_sym].dup
    promise  = Promise.new
    requires = get_requires(reqs)

    load_requires(requires.dup, promise)

    promise.then do
      load_comp(options).then do
        method_called = options[:method_called]
        method_args   = options[:method_args]
        name          = options[:name]
        comp          = Wedge[name, options]

        Document.ready? do
          trigger_requires_events requires.dup
          comp.send(method_called, *method_args) if method_called
          comp.wedge_trigger :browser_events
        end
      end
    end
  end
end