Module: OMF::Web::Widget
- Defined in:
- lib/omf_web.rb,
lib/omf-web/widget.rb,
lib/omf-web/widget/layout.rb,
lib/omf-web/widget/code_widget.rb,
lib/omf-web/widget/data_widget.rb,
lib/omf-web/widget/abstract_widget.rb,
lib/omf-web/widget/mustache_widget.rb,
lib/omf-web/widget/UNUSED/code/code.rb,
lib/omf-web/widget/text/text_widget.rb
Defined Under Namespace
Modules: Code, Graph, Layout, Log, Text
Classes: AbstractWidget, CodeWidget, DataWidget, MustacheWidget, TextWidget
Constant Summary
collapse
- @@widgets =
{}
- @@descriptions =
{}
- @@type2class =
{}
Class Method Summary
collapse
Class Method Details
._init ⇒ Object
104
105
106
|
# File 'lib/omf-web/widget.rb', line 104
def self._init()
register_widget
end
|
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/omf-web/widget.rb', line 56
def self.create_widget(name)
if name.is_a? Array
wdescr = { :type => 'layout/stacked', :widgets => name}
elsif name.is_a? Hash
wdescr = name
else
unless wdescr = @@descriptions[name.to_sym]
raise "Can't create unknown widget '#{name}':(#{@@descriptions.keys.inspect})"
end
end
if (id_ref = wdescr[:id_ref])
unless wd = @@descriptions[id_ref.to_sym]
raise "Can't find referenced widget '#{id_ref}':(#{@@descriptions.keys.inspect})"
end
wdescr = wd.dup.merge(wdescr) wdescr.delete(:id_ref)
end
unless wdescr.key? :id
wdescr[:id] = "wid_#{wdescr.object_id}"
end
if w = @@widgets[wdescr[:id]]
return w
end
case type = (wdescr[:type] || wdescr['type']).to_s
when /^data/
require 'omf-web/widget/data_widget'
w = OMF::Web::Widget::DataWidget.new(wdescr)
when /^layout/
require 'omf-web/widget/layout'
w = OMF::Web::Widget::Layout.create_layout_widget(type, wdescr)
when /^text/
require 'omf-web/widget/text/text_widget'
w = OMF::Web::Widget::TextWidget.create_text_widget(type, wdescr)
when /^code/
require 'omf-web/widget/code_widget'
w = OMF::Web::Widget::CodeWidget.create_code_widget(type, wdescr)
when /^moustache/
require 'omf-web/widget/mustache_widget'
w = OMF::Web::Widget::MustacheWidget.create_mustache_widget(type, wdescr)
else
raise "Unknown widget type '#{type}' (#{wdescr.inspect})"
end
@@widgets[wdescr[:id]] = w
end
|
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/omf-web/widget.rb', line 11
def self.register_widget(wdescr)
unless id = wdescr[:id]
raise "Missing 'id' for widget '#{wdescr.inspect}'"
end
id = id.to_sym
if (@@descriptions.key? id)
raise "Repeated try to register widget '#{id}'"
end
@@descriptions[id] = wdescr
end
|
26
27
28
29
30
31
32
|
# File 'lib/omf-web/widget.rb', line 26
def self.register_widget_type(id, widget_class)
id = id.to_sym
if (@@type2class.key? id)
raise "Repeated try to register widget type '#{id}'"
end
@@type2class[id] = widget_class
end
|
22
23
24
|
# File 'lib/omf-web/widget.rb', line 22
def self.registered_widgets()
@@descriptions
end
|
Return the number of top level widgets. If ‘restrict_to’ is an array, only return those.
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/omf-web/widget.rb', line 38
def self.toplevel_widgets(restrict_to = nil)
if restrict_to
wa = restrict_to.map do |name|
unless w = @@descriptions[name.to_sym]
raise "Unknown top level widget '#{name}'"
end
w
end
else
wa = @@descriptions.map do |id, w|
w[:top_level] ? w : nil
end.compact
end
wa.sort do |a, b|
(b[:priority] || 100) <=> (a[:priority] || 100)
end
end
|