Module: Conjoin::Widgets
- Defined in:
- lib/conjoin/widgets.rb
Defined Under Namespace
Modules: ClassMethods
Classes: App, Base, Events, Routes
Class Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Class Attribute Details
.app ⇒ Object
Returns the value of attribute app.
6
7
8
|
# File 'lib/conjoin/widgets.rb', line 6
def app
@app
end
|
Class Method Details
.setup(app) ⇒ Object
9
10
11
12
13
14
15
|
# 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
|
Instance Method Details
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# 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
|
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# 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
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
|
#url_for_event(event, options = {}) ⇒ Object
75
76
77
78
|
# 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
|
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# 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
|
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/conjoin/widgets.rb', line 17
def widgets list = false
widget_name, incoming_event, event = load_widgets
if incoming_event
res.["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
|
30
31
32
|
# File 'lib/conjoin/widgets.rb', line 30
def widgets_root
settings[:widgets_root]
end
|