module Dominate::Widget::Helper
Public Class Methods
initialize()
click to toggle source
# File lib/dominate/widget/helper.rb, line 9 def initialize # Load the widgets Dir.glob("#{Dominate.config.widget_path}/**/*.rb").each do |w| require w end if defined?(Slim) && defined?(Slim::Engine) Slim::Engine.set_default_options \ disable_escape: true, use_html_safe: false, disable_capture: false end end
setup(app)
click to toggle source
# File lib/dominate/widget/helper.rb, line 5 def setup app initialize end
Public Instance Methods
render_widget(*args)
click to toggle source
# File lib/dominate/widget/helper.rb, line 24 def render_widget *args @dominate_widgets ||= Widget.load_all(self, Event.new, req, res) if args.first.kind_of? Hash opts = args.first name = req.env[:widget_name] else name = args.first opts = args.length > 1 ? args.last : {} end # set the current state (the method that will get called on render_widget) state = opts[:state] || 'display' widget = req.env[:loaded_widgets][name] # begin if widget.method(state).parameters.length > 0 resp = widget.send state, opts.to_deep_ostruct else resp = widget.send state end if resp.is_a? Dominate::Dom html = "<div id='#{widget.id_for(state)}'>#{resp.html}</div>" # resp.reset_html # resp.doc.inner_html = html # resp.html html elsif resp.is_a? String html = "<div id='#{widget.id_for(state)}'>#{resp}</div>" html else resp end # rescue NoMethodError # raise "Please add ##{state} to #{widget.class}." # end end
url_for_event(event, options = {})
click to toggle source
# File lib/dominate/widget/helper.rb, line 64 def url_for_event event, options = {} widget_name = options.delete(:widget_name) "http#{req.env['SERVER_PORT'] == '443' ? 's' : ''}://#{req.env['HTTP_HOST']}#{Dominate.config.widget_url}?widget_event=#{event}&widget_name=#{widget_name}" + (options.any?? '&' + URI.encode_www_form(options) : '') end