class Wedge::Component
Constants
- REJECTED_CLIENT_OPTS
Public Class Methods
client_wedge_opts()
click to toggle source
# File lib/wedge/component.rb, line 170 def client_wedge_opts wedge_config.opts_dup.reject {|k, v| REJECTED_CLIENT_OPTS.include? k } end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/wedge/component.rb, line 162 def method_missing(method, *args, &block) if wedge_opts.scope.respond_to?(method, true) wedge_opts.scope.send method, *args, &block else super end end
new(*args, &block)
click to toggle source
Override the default new behaviour
# File lib/wedge/component.rb, line 9 def new(*args, &block) obj = allocate obj.wedge_opts.js = args.delete(:js) obj.wedge_opts.init = args.delete(:init) # Merge other args into opts args.each { |a| a.each {|k, v| obj.wedge_opts[k] = v } } if args.any? obj.wedge_opts.events.scope = obj # Set all the on events obj.wedge_opts.on.each do |*a, &b| obj.wedge_opts.events.add(*a.first.first, &a.first.last) end wedge_opts.added_class_events = true if obj.wedge_opts.init if obj.wedge_opts.init.is_a? Array obj.send :initialize, *obj.wedge_opts.init, &block else obj.send :initialize, obj.wedge_opts.init, &block end else obj.send :initialize, &block end unless wedge_opts.methods_wrapped obj.wedge_opts.methods_wrapped = wedge_opts.methods_wrapped = true public_instance_methods(false).each do |meth| alias_method :"wedge_original_#{meth}", :"#{meth}" define_method "#{meth}" do |*d_args, &blk| if server? && !wedge_opts.method_called && wedge_opts.js wedge_opts.method_called = meth wedge_opts.method_args = *d_args end o_name = "wedge_original_#{meth}" if client? || method(o_name).parameters.length > 0 result = send(o_name, *d_args, &blk) else result = send(o_name, &blk) end # Append the initialize javscript if server? && opts.js result = result.to_html if result.is_a? DOM result << wedge_javascript if result.is_a? String end result end end end obj end
wedge_components()
click to toggle source
Shortcut for Wedge.components
@return [Hash, Wedge.components
]
# File lib/wedge/component.rb, line 113 def wedge_components Wedge.components ||= {} end
Also aliased as: components
wedge_config()
click to toggle source
# File lib/wedge/component.rb, line 126 def wedge_config @wedge_config ||= begin args = Wedge.config.opts_dup.merge(klass: self, object_events: {}) unless RUBY_ENGINE == 'opal' args[:file_path] = caller.first.gsub(/(?<=\.rb):.*/, '') args[:path_name] = args[:file_path] .gsub(%r{(#{Dir.pwd}/|.*(?=wedge))}, '') .gsub(/\.rb$/, '') end c = Config.new(args) # If extending from a plugin it will automatically require it. ancestors.each do |klass| next if klass.to_s == name.to_s if klass.method_defined?(:wedge_opts) && klass.wedge_opts.name.to_s =~ /_plugin$/ c.requires klass.wedge_opts.name end end c end end
Also aliased as: config
wedge_dom()
click to toggle source
# File lib/wedge/component.rb, line 105 def wedge_dom @wedge_dom ||= DOM.new wedge_opts.html end
Also aliased as: dom
wedge_on(*args, &block)
click to toggle source
# File lib/wedge/component.rb, line 153 def wedge_on(*args, &block) if args.first.to_s != 'server' wedge_opts.on << [args, block] else wedge_on_server(&block) end end
Also aliased as: on
wedge_on_server() { || ... }
click to toggle source
# File lib/wedge/component.rb, line 174 def wedge_on_server(&block) if server? yield else m = Module.new(&block) m.public_instance_methods(false).each do |meth| wedge_opts.on_server_methods << meth.to_s define_method "#{meth}" do |*args, &blk| path_name = wedge_opts.path_name # event_id = "comp-event-#{$faye.generate_id}" payload = client_wedge_opts.reject do |k, _| %w(html tmpl requires plugins object_events js_loaded).include? k end payload[:method_called] = meth payload[:method_args] = args HTTP.post("/#{wedge_opts.assets_url}/#{path_name}.call", headers: { 'X-CSRF-TOKEN' => Element.find('meta[name=_csrf]').attr('content') }, payload: payload) do |response| # We set the new csrf token xhr = Native(response.xhr) csrf = xhr.getResponseHeader('BIO-CSRF-TOKEN') Element.find('meta[name=_csrf]').attr 'content', csrf ########################### res = JSON.from_object(`response`) blk.call res[:body], res end true end end include m end end
wedge_opts()
click to toggle source
Shortcut for the Config#opts
@return [Openstruct, Config#opts
]
# File lib/wedge/component.rb, line 121 def wedge_opts wedge_config.opts end
Also aliased as: opts
wedge_setup(&block)
click to toggle source
Used to setup the component with default options.
@example
class SomeComponent < Component setup do |config| config.name :some end end
@yield [Config]
# File lib/wedge/component.rb, line 78 def wedge_setup(&block) block.call wedge_config end
Also aliased as: setup
wedge_tmpl(name, dom = false, remove = true)
click to toggle source
Set templates
@example
tmpl :some_name, dom.find('#some-div')
@return dom [DOM]
# File lib/wedge/component.rb, line 88 def wedge_tmpl(name, dom = false, remove = true) if dom dom = remove ? dom.remove : dom wedge_opts.tmpl[name] = { dom: dom, html: dom.to_html } elsif t = wedge_opts.tmpl[name] dom = DOM.new t[:html] else false end dom end
Also aliased as: tmpl
Public Instance Methods
client_wedge_opts()
click to toggle source
# File lib/wedge/component.rb, line 297 def client_wedge_opts wedge_config.opts_dup.reject {|k, v| REJECTED_CLIENT_OPTS.include? k } end
Also aliased as: client_opts
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/wedge/component.rb, line 313 def method_missing(method, *args, &block) if wedge_opts.scope.respond_to?(method, true) wedge_opts.scope.send method, *args, &block else super end end
wedge(*args)
click to toggle source
# File lib/wedge/component.rb, line 308 def wedge(*args) Wedge[*args] end
wedge_config()
click to toggle source
Duplicate of class condig [Config] @return config [Config]
# File lib/wedge/component.rb, line 221 def wedge_config @wedge_config ||= begin c = Config.new(self.class.wedge_config.opts_dup.merge(events: Events.new)) c.opts.events.object_events = c.opts.object_events.dup c.opts.object_events = {} c end end
Also aliased as: config
wedge_dom()
click to toggle source
Dom @return wedge_dom
[Dom]
# File lib/wedge/component.rb, line 247 def wedge_dom @wedge_dom ||= begin if server? DOM.new self.class.wedge_dom.to_html else DOM.new(Element) end end end
Also aliased as: dom
wedge_function(*args, &block)
click to toggle source
Special method that acts like the javascript equivalent @example
foo = { bar: function { |moo| moo.call 'something' } }.to_n
# File lib/wedge/component.rb, line 265 def wedge_function(*args, &block) args.any? && raise(ArgumentError, '`function` does not accept arguments') block || raise(ArgumentError, 'block required') proc do |*a| a.map! {|x| Native(`x`)} @this = Native(`this`) %x{ var bs = block.$$s, result; block.$$s = null; result = block.apply(self, a); block.$$s = bs; return result; } end end
Also aliased as: function
wedge_javascript()
click to toggle source
# File lib/wedge/component.rb, line 284 def wedge_javascript return unless server? compiled_opts = Base64.encode64 client_wedge_opts.to_json name = wedge_opts.file_path.gsub("#{Dir.pwd}/", '').gsub(/\.rb$/, '') javascript = <<-JS Wedge.javascript('#{name}', JSON.parse(Base64.decode64('#{compiled_opts}'))) JS "<script>#{Opal.compile(javascript)}</script>" end
Also aliased as: javscript
wedge_opts()
click to toggle source
Duplicated of config.opts [Config#opts] @return opts [Config#opts]
# File lib/wedge/component.rb, line 233 def wedge_opts wedge_config.opts end
Also aliased as: opts
wedge_tmpl(name)
click to toggle source
Grab a copy of the template @return dom [DOM]
# File lib/wedge/component.rb, line 240 def wedge_tmpl(name) self.class.wedge_tmpl name end
Also aliased as: tmpl
wedge_trigger(*args)
click to toggle source
# File lib/wedge/component.rb, line 302 def wedge_trigger(*args) wedge_opts.events.trigger(*args) end
Also aliased as: trigger