gloo-web 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,208 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
+ #
4
+ # A partial page.
5
+ #
6
+
7
+ module Objs
8
+ class Partial < Gloo::Core::Obj
9
+
10
+ KEYWORD = 'partial'.freeze
11
+ KEYWORD_SHORT = 'part'.freeze
12
+
13
+ # Events
14
+ ON_RENDER = 'on_render'.freeze
15
+ AFTER_RENDER = 'after_render'.freeze
16
+
17
+ # Parameters used during render.
18
+ PARAMS = 'params'.freeze
19
+
20
+ # Content
21
+ CONTENT = 'content'.freeze
22
+
23
+
24
+ #
25
+ # The name of the object type.
26
+ #
27
+ def self.typename
28
+ return KEYWORD
29
+ end
30
+
31
+ #
32
+ # The short name of the object type.
33
+ #
34
+ def self.short_typename
35
+ return KEYWORD_SHORT
36
+ end
37
+
38
+ #
39
+ # Set the value with any necessary type conversions.
40
+ #
41
+ def set_value( new_value )
42
+ self.value = new_value.to_s
43
+ end
44
+
45
+ #
46
+ # Does this object support multi-line values?
47
+ # Initially only true for scripts.
48
+ #
49
+ def multiline_value?
50
+ return false
51
+ end
52
+
53
+ #
54
+ # Get the content obj.
55
+ #
56
+ def content
57
+ return find_child CONTENT
58
+ end
59
+
60
+ #
61
+ # Get the params hash from the child object.
62
+ # Returns nil if there is none.
63
+ #
64
+ def params_hash
65
+ params_can = find_child PARAMS
66
+ return nil unless params_can
67
+
68
+ h = {}
69
+ params_can.children.each do |o|
70
+ h[ o.name ] = o.value
71
+ end
72
+
73
+ return h
74
+ end
75
+
76
+
77
+ # ---------------------------------------------------------------------
78
+ # Events
79
+ # ---------------------------------------------------------------------
80
+
81
+ #
82
+ # Run the on render script if there is one.
83
+ #
84
+ def run_on_render
85
+ o = find_child ON_RENDER
86
+ return unless o
87
+
88
+ Gloo::Exec::Dispatch.message( @engine, 'run', o )
89
+ end
90
+
91
+ #
92
+ # Run the on rendered script if there is one.
93
+ #
94
+ def run_after_render
95
+ o = find_child AFTER_RENDER
96
+ return unless o
97
+
98
+ Gloo::Exec::Dispatch.message( @engine, 'run', o )
99
+ end
100
+
101
+
102
+ # ---------------------------------------------------------------------
103
+ # Children
104
+ # ---------------------------------------------------------------------
105
+
106
+ #
107
+ # Does this object have children to add when an object
108
+ # is created in interactive mode?
109
+ # This does not apply during obj load, etc.
110
+ #
111
+ def add_children_on_create?
112
+ return true
113
+ end
114
+
115
+ #
116
+ # Add children to this object.
117
+ # This is used by containers to add children needed
118
+ # for default configurations.
119
+ #
120
+ def add_default_children
121
+ fac = @engine.factory
122
+
123
+ fac.create_script ON_RENDER, '', self
124
+ fac.create_script AFTER_RENDER, '', self
125
+
126
+ fac.create_can PARAMS, self
127
+ fac.create_can CONTENT, self
128
+ end
129
+
130
+
131
+ # ---------------------------------------------------------------------
132
+ # Messages
133
+ # ---------------------------------------------------------------------
134
+
135
+ #
136
+ # Get a list of message names that this object receives.
137
+ #
138
+ def self.messages
139
+ return super + [ 'render' ]
140
+ end
141
+
142
+ #
143
+ # Get the expiration date for the certificate.
144
+ #
145
+ def msg_render
146
+ part_content = self.render
147
+ @engine.heap.it.set_to part_content
148
+ return part_content
149
+ end
150
+
151
+
152
+ # ---------------------------------------------------------------------
153
+ # Render
154
+ # ---------------------------------------------------------------------
155
+
156
+ #
157
+ # Render the page.
158
+ # Use the specified render function or HTML by default.
159
+ #
160
+ def render( render_ƒ = :render_html )
161
+ run_on_render
162
+
163
+ part_content = ''
164
+ data = content
165
+ if data.children.empty?
166
+ part_content = data.value
167
+ else
168
+ data.children.each do |e|
169
+ part_content << e.send( render_ƒ )
170
+ end
171
+ end
172
+
173
+ # part_content = Page.render_params part_content, params_hash
174
+ part_content = @engine.running_app.obj.embedded_renderer.render part_content, params_hash
175
+
176
+ run_after_render
177
+ return part_content
178
+ end
179
+
180
+ #
181
+ # Render the layout with the body and head params.
182
+ #
183
+ def render_layout( head, body )
184
+ run_on_render
185
+
186
+ part_content = ''
187
+ content.children.each do |e|
188
+ e = Gloo::Objs::Alias.resolve_alias( @engine, e )
189
+
190
+ obj = e.find_child CONTENT
191
+ e = obj if obj
192
+
193
+ part_content << Element.render_obj( e, :render_html, @engine )
194
+ end
195
+
196
+ params = params_hash || {}
197
+ params[ 'head' ] = head
198
+ params[ 'body' ] = body
199
+
200
+ # part_content = Page.render_params part_content, params
201
+ part_content = @engine.running_app.obj.embedded_renderer.render part_content, params
202
+
203
+ run_after_render
204
+ return part_content
205
+ end
206
+
207
+ end
208
+ end