module Conjoin::Widgets
Attributes
app[RW]
Public Class Methods
setup(app)
click to toggle source
# File lib/conjoin/widgets.rb, line 9 def self.setup app self.app = app app.settings[:widgets_root] ||= "#{app.root}/app/widgets" app.settings[:widgets] ||= {} Dir["#{app.root}/app/widgets/**/*.rb"].each { |rb| require rb } end
Public Instance Methods
load_widgets()
click to toggle source
# File lib/conjoin/widgets.rb, line 80 def load_widgets req.env[:loaded_widgets] ||= {} event = Events.new res, req, settings if incoming_event = req.params["widget_event"] widget_name = req.params["widget_name"] opts = { from_event: true } else opts = {} end settings[:widgets].each do |name, widget| req.env[:loaded_widgets][name] = widget.constantize.new(self, res, req, settings, event, name, opts) end [widget_name, incoming_event, event] end
render_widget(*args)
click to toggle source
# File lib/conjoin/widgets.rb, line 34 def render_widget *args load_widgets unless req.env[:loaded_widgets] 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] if widget.method(state).parameters.length > 0 widget.send state, opts.to_ostruct else widget.send state end end
Also aliased as: widget_render
url_for_event(event, options = {})
click to toggle source
# File lib/conjoin/widgets.rb, line 75 def url_for_event event, options = {} widget_name = options.delete(:widget_name) || req.env[:widget_name] "#{Conjoin.env.mounted?? settings[:mounted_url] : ''}/widgets?widget_event=#{event}&widget_name=#{widget_name}" + (options.any?? '&' + URI.encode_www_form(options) : '') end
widget_div(opts = {})
click to toggle source
# File lib/conjoin/widgets.rb, line 58 def widget_div opts = {}, &block defaults = { id: "#{req.env[:widget_name]}_#{req.env[:widget_state]}" }.merge opts name = req.env[:widget_name] widget = req.env[:loaded_widgets][name] html = block.call(widget) mab do div defaults do text! html end end end
widgets(list = false)
click to toggle source
# File lib/conjoin/widgets.rb, line 17 def widgets list = false widget_name, incoming_event, event = load_widgets if incoming_event res.headers["Content-Type"] = "text/javascript; charset=utf-8" event.trigger incoming_event.to_sym, widget_name, req.params res.write "$('head > meta[name=csrf-token]').attr('content', '#{csrf_token}');" res.write '$(document).trigger("page:change");' end true end
widgets_root()
click to toggle source
# File lib/conjoin/widgets.rb, line 30 def widgets_root settings[:widgets_root] end