resin 0.2.2 → 0.2.3
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.
- data/amber/css/amber-normalize.css +73 -73
- data/amber/css/amber-normalize.less +1 -1
- data/amber/css/amber.css +106 -106
- data/amber/css/helios.css +242 -0
- data/amber/images/hsplitter.png +0 -0
- data/amber/images/vsplitter.png +0 -0
- data/amber/js/Benchfib.deploy.js +116 -38
- data/amber/js/Benchfib.js +120 -42
- data/amber/js/Canvas.deploy.js +674 -403
- data/amber/js/Canvas.js +682 -411
- data/amber/js/Compiler-AST.deploy.js +1150 -0
- data/amber/js/Compiler-AST.js +1591 -0
- data/amber/js/Compiler-Core.deploy.js +1562 -0
- data/amber/js/Compiler-Core.js +1972 -0
- data/amber/js/Compiler-Exceptions.deploy.js +114 -0
- data/amber/js/Compiler-Exceptions.js +161 -0
- data/amber/js/Compiler-IR.deploy.js +2326 -0
- data/amber/js/Compiler-IR.js +3146 -0
- data/amber/js/Compiler-Inlining.deploy.js +1147 -0
- data/amber/js/Compiler-Inlining.js +1514 -0
- data/amber/js/Compiler-Semantic.deploy.js +1207 -0
- data/amber/js/Compiler-Semantic.js +1628 -0
- data/amber/js/Compiler-Tests.deploy.js +646 -60
- data/amber/js/Compiler-Tests.js +843 -82
- data/amber/js/Compiler.deploy.js +1097 -159
- data/amber/js/Compiler.js +1414 -161
- data/amber/js/Examples.deploy.js +31 -15
- data/amber/js/Examples.js +33 -17
- data/amber/js/Helios-Announcements.deploy.js +127 -0
- data/amber/js/Helios-Announcements.js +157 -0
- data/amber/js/Helios-Browser.deploy.js +1473 -0
- data/amber/js/Helios-Browser.js +1953 -0
- data/amber/js/Helios-Commands.deploy.js +403 -0
- data/amber/js/Helios-Commands.js +563 -0
- data/amber/js/Helios-Core.deploy.js +1070 -0
- data/amber/js/Helios-Core.js +1445 -0
- data/amber/js/Helios-Environments.deploy.js +132 -0
- data/amber/js/Helios-Environments.js +179 -0
- data/amber/js/Helios-Inspector.deploy.js +855 -0
- data/amber/js/Helios-Inspector.js +1155 -0
- data/amber/js/Helios-KeyBindings.deploy.js +753 -0
- data/amber/js/Helios-KeyBindings.js +1023 -0
- data/amber/js/Helios-Layout.deploy.js +383 -0
- data/amber/js/Helios-Layout.js +523 -0
- data/amber/js/Helios-Workspace.deploy.js +799 -0
- data/amber/js/Helios-Workspace.js +1074 -0
- data/amber/js/IDE.deploy.js +2541 -1490
- data/amber/js/IDE.js +2721 -1660
- data/amber/js/Importer-Exporter.deploy.js +671 -0
- data/amber/js/Importer-Exporter.js +816 -0
- data/amber/js/Kernel-Announcements.deploy.js +137 -20
- data/amber/js/Kernel-Announcements.js +176 -22
- data/amber/js/Kernel-Classes.deploy.js +555 -168
- data/amber/js/Kernel-Classes.js +662 -205
- data/amber/js/Kernel-Collections.deploy.js +1403 -618
- data/amber/js/Kernel-Collections.js +1545 -690
- data/amber/js/Kernel-Exceptions.deploy.js +109 -45
- data/amber/js/Kernel-Exceptions.js +123 -49
- data/amber/js/Kernel-Methods.deploy.js +196 -81
- data/amber/js/Kernel-Methods.js +214 -89
- data/amber/js/Kernel-Objects.deploy.js +1542 -1117
- data/amber/js/Kernel-Objects.js +1593 -1148
- data/amber/js/Kernel-Tests.deploy.js +1725 -772
- data/amber/js/Kernel-Tests.js +2301 -1123
- data/amber/js/Kernel-Transcript.deploy.js +23 -25
- data/amber/js/Kernel-Transcript.js +24 -26
- data/amber/js/SUnit.deploy.js +204 -131
- data/amber/js/SUnit.js +222 -139
- data/amber/js/Spaces.deploy.js +240 -0
- data/amber/js/Spaces.js +326 -0
- data/amber/js/amber.js +26 -7
- data/amber/js/boot.js +65 -47
- data/amber/js/init.js +1 -1
- data/amber/js/lib/CodeMirror/amber.css +21 -21
- data/amber/js/lib/CodeMirror/codemirror.css +119 -13
- data/amber/js/lib/CodeMirror/codemirror.js +2219 -1220
- data/amber/js/lib/CodeMirror/smalltalk.js +134 -129
- data/amber/js/lib/bootstrap/css/bootstrap.css +5837 -0
- data/amber/js/lib/bootstrap/css/bootstrap.min.css +841 -0
- data/amber/js/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/amber/js/lib/bootstrap/img/glyphicons-halflings.png +0 -0
- data/amber/js/lib/bootstrap/js/bootstrap.js +2038 -0
- data/amber/js/lib/bootstrap/js/bootstrap.min.js +7 -0
- data/amber/js/lib/jQuery/jquery-1.8.2.min.js +2 -0
- data/amber/js/lib/jQuery/jquery-ui-1.8.24.custom.min.js +125 -0
- data/amber/st/Compiler-AST.st +505 -0
- data/amber/st/Compiler-Core.st +835 -0
- data/amber/st/Compiler-Exceptions.st +87 -0
- data/amber/st/Compiler-IR.st +1097 -0
- data/amber/st/Compiler-Inlining.st +650 -0
- data/amber/st/Compiler-Semantic.st +558 -0
- data/amber/st/Compiler-Tests.st +285 -381
- data/amber/st/Compiler.st +725 -2
- data/amber/st/Helios-Announcements.st +104 -0
- data/amber/st/Helios-Browser.st +708 -0
- data/amber/st/Helios-Commands.st +223 -0
- data/amber/st/Helios-Core.st +532 -0
- data/amber/st/Helios-Environments.st +98 -0
- data/amber/st/Helios-Inspector.st +367 -0
- data/amber/st/Helios-KeyBindings.st +337 -0
- data/amber/st/Helios-Layout.st +199 -0
- data/amber/st/Helios-Workspace.st +367 -0
- data/amber/st/IDE.st +75 -53
- data/amber/st/Importer-Exporter.st +386 -0
- data/amber/st/Kernel-Announcements.st +92 -0
- data/amber/st/Kernel-Classes.st +137 -15
- data/amber/st/Kernel-Collections.st +137 -47
- data/amber/st/Kernel-Exceptions.st +14 -0
- data/amber/st/Kernel-Methods.st +9 -1
- data/amber/st/Kernel-Objects.st +29 -5
- data/amber/st/Kernel-Tests.st +545 -199
- data/amber/st/SUnit.st +10 -0
- data/amber/st/Spaces.st +142 -0
- data/lib/resin/app.rb +1 -1
- metadata +86 -31
- data/amber/js/lib/jQuery/jquery-1.4.4.min.js +0 -167
- data/amber/js/lib/jQuery/jquery-1.6.4.min.js +0 -4
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
Smalltalk current createPackage: 'Helios-Commands' properties: #{}!
|
|
2
|
+
Object subclass: #HLCommand
|
|
3
|
+
instanceVariableNames: ''
|
|
4
|
+
package: 'Helios-Commands'!
|
|
5
|
+
|
|
6
|
+
!HLCommand methodsFor: 'accessing'!
|
|
7
|
+
|
|
8
|
+
documentation
|
|
9
|
+
^ self class documentation
|
|
10
|
+
!
|
|
11
|
+
|
|
12
|
+
key
|
|
13
|
+
^ self class key
|
|
14
|
+
!
|
|
15
|
+
|
|
16
|
+
label
|
|
17
|
+
^ self class label
|
|
18
|
+
! !
|
|
19
|
+
|
|
20
|
+
!HLCommand methodsFor: 'converting'!
|
|
21
|
+
|
|
22
|
+
asBinding
|
|
23
|
+
^ (HLBindingAction on: self key labelled: self label)
|
|
24
|
+
callback: [ self execute ]
|
|
25
|
+
! !
|
|
26
|
+
|
|
27
|
+
!HLCommand methodsFor: 'executing'!
|
|
28
|
+
|
|
29
|
+
execute
|
|
30
|
+
! !
|
|
31
|
+
|
|
32
|
+
!HLCommand class methodsFor: 'accessing'!
|
|
33
|
+
|
|
34
|
+
bindingGroup
|
|
35
|
+
^ nil
|
|
36
|
+
!
|
|
37
|
+
|
|
38
|
+
documentation
|
|
39
|
+
^ ''
|
|
40
|
+
!
|
|
41
|
+
|
|
42
|
+
key
|
|
43
|
+
^ nil
|
|
44
|
+
!
|
|
45
|
+
|
|
46
|
+
label
|
|
47
|
+
^ ''
|
|
48
|
+
! !
|
|
49
|
+
|
|
50
|
+
HLCommand subclass: #HLBrowserCommand
|
|
51
|
+
instanceVariableNames: 'model'
|
|
52
|
+
package: 'Helios-Commands'!
|
|
53
|
+
|
|
54
|
+
!HLBrowserCommand methodsFor: 'accessing'!
|
|
55
|
+
|
|
56
|
+
model
|
|
57
|
+
^ model
|
|
58
|
+
!
|
|
59
|
+
|
|
60
|
+
model: aBrowserModel
|
|
61
|
+
model := aBrowserModel
|
|
62
|
+
! !
|
|
63
|
+
|
|
64
|
+
!HLBrowserCommand class methodsFor: 'instance creation'!
|
|
65
|
+
|
|
66
|
+
on: aBrowserModel
|
|
67
|
+
^ self new
|
|
68
|
+
model: aBrowserModel;
|
|
69
|
+
yourself
|
|
70
|
+
! !
|
|
71
|
+
|
|
72
|
+
HLBrowserCommand subclass: #HLGoToCommand
|
|
73
|
+
instanceVariableNames: ''
|
|
74
|
+
package: 'Helios-Commands'!
|
|
75
|
+
|
|
76
|
+
!HLGoToCommand class methodsFor: 'accessing'!
|
|
77
|
+
|
|
78
|
+
bindingGroup
|
|
79
|
+
^ 'Go to'
|
|
80
|
+
! !
|
|
81
|
+
|
|
82
|
+
HLGoToCommand subclass: #HLGoToClassesCommand
|
|
83
|
+
instanceVariableNames: ''
|
|
84
|
+
package: 'Helios-Commands'!
|
|
85
|
+
|
|
86
|
+
!HLGoToClassesCommand methodsFor: 'executing'!
|
|
87
|
+
|
|
88
|
+
execute
|
|
89
|
+
self model selectedClass: self model selectedClass
|
|
90
|
+
! !
|
|
91
|
+
|
|
92
|
+
!HLGoToClassesCommand class methodsFor: 'accessing'!
|
|
93
|
+
|
|
94
|
+
key
|
|
95
|
+
"c"
|
|
96
|
+
|
|
97
|
+
^ 67
|
|
98
|
+
!
|
|
99
|
+
|
|
100
|
+
label
|
|
101
|
+
^ 'Classes'
|
|
102
|
+
! !
|
|
103
|
+
|
|
104
|
+
HLGoToCommand subclass: #HLGoToMethodsCommand
|
|
105
|
+
instanceVariableNames: ''
|
|
106
|
+
package: 'Helios-Commands'!
|
|
107
|
+
|
|
108
|
+
!HLGoToMethodsCommand methodsFor: 'executing'!
|
|
109
|
+
|
|
110
|
+
execute
|
|
111
|
+
self model selectedMethod: self model selectedMethod
|
|
112
|
+
! !
|
|
113
|
+
|
|
114
|
+
!HLGoToMethodsCommand class methodsFor: 'accessing'!
|
|
115
|
+
|
|
116
|
+
key
|
|
117
|
+
"m"
|
|
118
|
+
|
|
119
|
+
^ 77
|
|
120
|
+
!
|
|
121
|
+
|
|
122
|
+
label
|
|
123
|
+
^ 'Methods'
|
|
124
|
+
! !
|
|
125
|
+
|
|
126
|
+
HLGoToCommand subclass: #HLGoToPackagesCommand
|
|
127
|
+
instanceVariableNames: ''
|
|
128
|
+
package: 'Helios-Commands'!
|
|
129
|
+
|
|
130
|
+
!HLGoToPackagesCommand methodsFor: 'executing'!
|
|
131
|
+
|
|
132
|
+
execute
|
|
133
|
+
self model selectedPackage: self model selectedPackage
|
|
134
|
+
! !
|
|
135
|
+
|
|
136
|
+
!HLGoToPackagesCommand class methodsFor: 'accessing'!
|
|
137
|
+
|
|
138
|
+
key
|
|
139
|
+
"p"
|
|
140
|
+
|
|
141
|
+
^ 80
|
|
142
|
+
!
|
|
143
|
+
|
|
144
|
+
label
|
|
145
|
+
^ 'Packages'
|
|
146
|
+
! !
|
|
147
|
+
|
|
148
|
+
HLGoToCommand subclass: #HLGoToProtocolsCommand
|
|
149
|
+
instanceVariableNames: ''
|
|
150
|
+
package: 'Helios-Commands'!
|
|
151
|
+
|
|
152
|
+
!HLGoToProtocolsCommand methodsFor: 'executing'!
|
|
153
|
+
|
|
154
|
+
execute
|
|
155
|
+
self model selectedProtocol: self model selectedProtocol
|
|
156
|
+
! !
|
|
157
|
+
|
|
158
|
+
!HLGoToProtocolsCommand class methodsFor: 'accessing'!
|
|
159
|
+
|
|
160
|
+
key
|
|
161
|
+
"p"
|
|
162
|
+
|
|
163
|
+
^ 84
|
|
164
|
+
!
|
|
165
|
+
|
|
166
|
+
label
|
|
167
|
+
^ 'Protocols'
|
|
168
|
+
! !
|
|
169
|
+
|
|
170
|
+
HLBrowserCommand subclass: #HLToggleCommand
|
|
171
|
+
instanceVariableNames: ''
|
|
172
|
+
package: 'Helios-Commands'!
|
|
173
|
+
|
|
174
|
+
!HLToggleCommand class methodsFor: 'accessing'!
|
|
175
|
+
|
|
176
|
+
bindingGroup
|
|
177
|
+
^ 'Toggle'
|
|
178
|
+
! !
|
|
179
|
+
|
|
180
|
+
HLToggleCommand subclass: #HLToggleClassSideCommand
|
|
181
|
+
instanceVariableNames: ''
|
|
182
|
+
package: 'Helios-Commands'!
|
|
183
|
+
|
|
184
|
+
!HLToggleClassSideCommand methodsFor: 'executing'!
|
|
185
|
+
|
|
186
|
+
execute
|
|
187
|
+
self model showInstance: false
|
|
188
|
+
! !
|
|
189
|
+
|
|
190
|
+
!HLToggleClassSideCommand class methodsFor: 'accessing'!
|
|
191
|
+
|
|
192
|
+
key
|
|
193
|
+
"c"
|
|
194
|
+
|
|
195
|
+
^ 67
|
|
196
|
+
!
|
|
197
|
+
|
|
198
|
+
label
|
|
199
|
+
^ 'Class side'
|
|
200
|
+
! !
|
|
201
|
+
|
|
202
|
+
HLToggleCommand subclass: #HLToggleInstanceSideCommand
|
|
203
|
+
instanceVariableNames: ''
|
|
204
|
+
package: 'Helios-Commands'!
|
|
205
|
+
|
|
206
|
+
!HLToggleInstanceSideCommand methodsFor: 'executing'!
|
|
207
|
+
|
|
208
|
+
execute
|
|
209
|
+
self model showInstance: true
|
|
210
|
+
! !
|
|
211
|
+
|
|
212
|
+
!HLToggleInstanceSideCommand class methodsFor: 'accessing'!
|
|
213
|
+
|
|
214
|
+
key
|
|
215
|
+
"i"
|
|
216
|
+
|
|
217
|
+
^ 73
|
|
218
|
+
!
|
|
219
|
+
|
|
220
|
+
label
|
|
221
|
+
^ 'Instance side'
|
|
222
|
+
! !
|
|
223
|
+
|
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
Smalltalk current createPackage: 'Helios-Core' properties: #{}!
|
|
2
|
+
Object subclass: #HLTab
|
|
3
|
+
instanceVariableNames: 'widget label'
|
|
4
|
+
package: 'Helios-Core'!
|
|
5
|
+
|
|
6
|
+
!HLTab methodsFor: 'accessing'!
|
|
7
|
+
|
|
8
|
+
activate
|
|
9
|
+
self manager activate: self
|
|
10
|
+
!
|
|
11
|
+
|
|
12
|
+
add
|
|
13
|
+
self manager addTab: self
|
|
14
|
+
!
|
|
15
|
+
|
|
16
|
+
label
|
|
17
|
+
^ label ifNil: [ '' ]
|
|
18
|
+
!
|
|
19
|
+
|
|
20
|
+
label: aString
|
|
21
|
+
label := aString
|
|
22
|
+
!
|
|
23
|
+
|
|
24
|
+
manager
|
|
25
|
+
^ HLManager current
|
|
26
|
+
!
|
|
27
|
+
|
|
28
|
+
widget
|
|
29
|
+
^ widget
|
|
30
|
+
!
|
|
31
|
+
|
|
32
|
+
widget: aWidget
|
|
33
|
+
widget := aWidget
|
|
34
|
+
! !
|
|
35
|
+
|
|
36
|
+
!HLTab methodsFor: 'testing'!
|
|
37
|
+
|
|
38
|
+
isActive
|
|
39
|
+
^ self manager activeTab = self
|
|
40
|
+
! !
|
|
41
|
+
|
|
42
|
+
!HLTab class methodsFor: 'instance creation'!
|
|
43
|
+
|
|
44
|
+
on: aWidget labelled: aString
|
|
45
|
+
^ self new
|
|
46
|
+
widget: aWidget;
|
|
47
|
+
label: aString;
|
|
48
|
+
yourself
|
|
49
|
+
! !
|
|
50
|
+
|
|
51
|
+
Widget subclass: #HLWidget
|
|
52
|
+
instanceVariableNames: 'wrapper'
|
|
53
|
+
package: 'Helios-Core'!
|
|
54
|
+
|
|
55
|
+
!HLWidget methodsFor: 'accessing'!
|
|
56
|
+
|
|
57
|
+
manager
|
|
58
|
+
^ HLManager current
|
|
59
|
+
!
|
|
60
|
+
|
|
61
|
+
wrapper
|
|
62
|
+
^ wrapper
|
|
63
|
+
! !
|
|
64
|
+
|
|
65
|
+
!HLWidget methodsFor: 'keybindings'!
|
|
66
|
+
|
|
67
|
+
registerBindings
|
|
68
|
+
self registerBindingsOn: self manager keyBinder bindings
|
|
69
|
+
!
|
|
70
|
+
|
|
71
|
+
registerBindingsOn: aBindingGroup
|
|
72
|
+
! !
|
|
73
|
+
|
|
74
|
+
!HLWidget methodsFor: 'rendering'!
|
|
75
|
+
|
|
76
|
+
renderContentOn: html
|
|
77
|
+
!
|
|
78
|
+
|
|
79
|
+
renderOn: html
|
|
80
|
+
self registerBindings.
|
|
81
|
+
|
|
82
|
+
wrapper := html div.
|
|
83
|
+
[ :renderer | self renderContentOn: renderer ] appendToJQuery: wrapper asJQuery
|
|
84
|
+
! !
|
|
85
|
+
|
|
86
|
+
!HLWidget methodsFor: 'updating'!
|
|
87
|
+
|
|
88
|
+
refresh
|
|
89
|
+
self wrapper ifNil: [ ^ self ].
|
|
90
|
+
|
|
91
|
+
self wrapper asJQuery empty.
|
|
92
|
+
[ :html | self renderContentOn: html ] appendToJQuery: self wrapper asJQuery
|
|
93
|
+
! !
|
|
94
|
+
|
|
95
|
+
!HLWidget class methodsFor: 'accessing'!
|
|
96
|
+
|
|
97
|
+
openAsTab
|
|
98
|
+
HLManager current addTab: (HLTab on: self new labelled: self tabLabel)
|
|
99
|
+
!
|
|
100
|
+
|
|
101
|
+
tabLabel
|
|
102
|
+
^ 'Tab'
|
|
103
|
+
!
|
|
104
|
+
|
|
105
|
+
tabPriority
|
|
106
|
+
^ 500
|
|
107
|
+
! !
|
|
108
|
+
|
|
109
|
+
!HLWidget class methodsFor: 'testing'!
|
|
110
|
+
|
|
111
|
+
canBeOpenAsTab
|
|
112
|
+
^ false
|
|
113
|
+
! !
|
|
114
|
+
|
|
115
|
+
HLWidget subclass: #HLDebugger
|
|
116
|
+
instanceVariableNames: ''
|
|
117
|
+
package: 'Helios-Core'!
|
|
118
|
+
|
|
119
|
+
HLWidget subclass: #HLFocusableWidget
|
|
120
|
+
instanceVariableNames: 'hiddenInput'
|
|
121
|
+
package: 'Helios-Core'!
|
|
122
|
+
|
|
123
|
+
!HLFocusableWidget methodsFor: 'accessing'!
|
|
124
|
+
|
|
125
|
+
focusClass
|
|
126
|
+
^ 'focused'
|
|
127
|
+
! !
|
|
128
|
+
|
|
129
|
+
!HLFocusableWidget methodsFor: 'events'!
|
|
130
|
+
|
|
131
|
+
blur
|
|
132
|
+
hiddenInput asJQuery blur
|
|
133
|
+
!
|
|
134
|
+
|
|
135
|
+
focus
|
|
136
|
+
hiddenInput asJQuery focus
|
|
137
|
+
!
|
|
138
|
+
|
|
139
|
+
hasFocus
|
|
140
|
+
^ self wrapper notNil and: [ self wrapper asJQuery hasClass: self focusClass ]
|
|
141
|
+
! !
|
|
142
|
+
|
|
143
|
+
!HLFocusableWidget methodsFor: 'rendering'!
|
|
144
|
+
|
|
145
|
+
renderContentOn: html
|
|
146
|
+
!
|
|
147
|
+
|
|
148
|
+
renderHiddenInputOn: html
|
|
149
|
+
hiddenInput := html input
|
|
150
|
+
style: 'position: absolute; left: -100000px;';
|
|
151
|
+
onBlur: [ self wrapper asJQuery removeClass: self focusClass ];
|
|
152
|
+
onFocus: [ self wrapper asJQuery addClass: self focusClass ]
|
|
153
|
+
!
|
|
154
|
+
|
|
155
|
+
renderOn: html
|
|
156
|
+
self registerBindings.
|
|
157
|
+
self renderHiddenInputOn: html.
|
|
158
|
+
|
|
159
|
+
wrapper := html div
|
|
160
|
+
class: 'hl_widget';
|
|
161
|
+
onClick: [ hiddenInput asJQuery focus ];
|
|
162
|
+
with: [
|
|
163
|
+
self renderContentOn: html ]
|
|
164
|
+
! !
|
|
165
|
+
|
|
166
|
+
HLFocusableWidget subclass: #HLListWidget
|
|
167
|
+
instanceVariableNames: 'items selectedItem'
|
|
168
|
+
package: 'Helios-Core'!
|
|
169
|
+
|
|
170
|
+
!HLListWidget methodsFor: 'accessing'!
|
|
171
|
+
|
|
172
|
+
cssClassForItem: anObject
|
|
173
|
+
^ self selectedItem = anObject
|
|
174
|
+
ifTrue: [ 'active' ]
|
|
175
|
+
ifFalse: [ 'inactive' ]
|
|
176
|
+
!
|
|
177
|
+
|
|
178
|
+
iconForItem: anObject
|
|
179
|
+
^ ''
|
|
180
|
+
!
|
|
181
|
+
|
|
182
|
+
items
|
|
183
|
+
^ items ifNil: [ items := self defaultItems ]
|
|
184
|
+
!
|
|
185
|
+
|
|
186
|
+
items: aCollection
|
|
187
|
+
items := aCollection
|
|
188
|
+
!
|
|
189
|
+
|
|
190
|
+
selectedItem
|
|
191
|
+
^ selectedItem
|
|
192
|
+
!
|
|
193
|
+
|
|
194
|
+
selectedItem: anObject
|
|
195
|
+
selectedItem := anObject
|
|
196
|
+
! !
|
|
197
|
+
|
|
198
|
+
!HLListWidget methodsFor: 'actions'!
|
|
199
|
+
|
|
200
|
+
activateFirstListItem
|
|
201
|
+
self activateListItem: (window jQuery: ((wrapper asJQuery find: 'li') get: 0))
|
|
202
|
+
!
|
|
203
|
+
|
|
204
|
+
activateListItem: aListItem
|
|
205
|
+
| parent position |
|
|
206
|
+
|
|
207
|
+
(aListItem get: 0) ifNil: [ ^self ].
|
|
208
|
+
|
|
209
|
+
<position = aListItem.parent().children().get().indexOf(aListItem.get(0)) + 1>.
|
|
210
|
+
|
|
211
|
+
parent := aListItem parent.
|
|
212
|
+
parent children removeClass: 'active'.
|
|
213
|
+
aListItem addClass: 'active'.
|
|
214
|
+
|
|
215
|
+
"Move the scrollbar to show the active element"
|
|
216
|
+
aListItem position top < 0 ifTrue: [
|
|
217
|
+
(parent get: 0) scrollTop: ((parent get: 0) scrollTop + aListItem position top - 10) ].
|
|
218
|
+
aListItem position top + aListItem height > parent height ifTrue: [
|
|
219
|
+
(parent get: 0) scrollTop: ((parent get: 0) scrollTop + aListItem height - (parent height - aListItem position top)) +10 ].
|
|
220
|
+
|
|
221
|
+
"Activate the corresponding item"
|
|
222
|
+
self selectItem: (self items at: (aListItem attr: 'list-data') asNumber)
|
|
223
|
+
!
|
|
224
|
+
|
|
225
|
+
focus
|
|
226
|
+
super focus.
|
|
227
|
+
self items isEmpty ifFalse: [
|
|
228
|
+
self selectedItem ifNil: [ self activateFirstListItem ] ]
|
|
229
|
+
!
|
|
230
|
+
|
|
231
|
+
selectItem: anObject
|
|
232
|
+
self selectedItem: anObject
|
|
233
|
+
! !
|
|
234
|
+
|
|
235
|
+
!HLListWidget methodsFor: 'defaults'!
|
|
236
|
+
|
|
237
|
+
defaultItems
|
|
238
|
+
^ #()
|
|
239
|
+
! !
|
|
240
|
+
|
|
241
|
+
!HLListWidget methodsFor: 'events'!
|
|
242
|
+
|
|
243
|
+
setupKeyBindings
|
|
244
|
+
| next |
|
|
245
|
+
hiddenInput asJQuery unbind: 'keydown'.
|
|
246
|
+
|
|
247
|
+
hiddenInput asJQuery keydown: [ :e | | selected |
|
|
248
|
+
selected := window jQuery: '.focused .nav-pills .active'.
|
|
249
|
+
e which = 38 ifTrue: [
|
|
250
|
+
self activateListItem: selected prev ].
|
|
251
|
+
e which = 40 ifTrue: [
|
|
252
|
+
next := selected next.
|
|
253
|
+
(next get: 0) ifNil: [ next := window jQuery: '.focused .nav-pills li:first-child' ].
|
|
254
|
+
self activateListItem: next ] ]
|
|
255
|
+
! !
|
|
256
|
+
|
|
257
|
+
!HLListWidget methodsFor: 'rendering'!
|
|
258
|
+
|
|
259
|
+
renderButtonsOn: html
|
|
260
|
+
!
|
|
261
|
+
|
|
262
|
+
renderContentOn: html
|
|
263
|
+
html ul
|
|
264
|
+
class: 'nav nav-pills nav-stacked';
|
|
265
|
+
with: [ self renderListOn: html ].
|
|
266
|
+
html div class: 'pane_actions form-actions'; with: [
|
|
267
|
+
self renderButtonsOn: html ].
|
|
268
|
+
|
|
269
|
+
self setupKeyBindings
|
|
270
|
+
!
|
|
271
|
+
|
|
272
|
+
renderItem: anObject on: html
|
|
273
|
+
| li |
|
|
274
|
+
|
|
275
|
+
li := html li.
|
|
276
|
+
li
|
|
277
|
+
class: (self cssClassForItem: anObject);
|
|
278
|
+
at: 'list-data' put: (self items indexOf: anObject) asString;
|
|
279
|
+
with: [
|
|
280
|
+
html a
|
|
281
|
+
with: [
|
|
282
|
+
(html tag: 'i') class: (self iconForItem: anObject).
|
|
283
|
+
self renderItemLabel: anObject on: html ];
|
|
284
|
+
onClick: [
|
|
285
|
+
self activateListItem: li asJQuery ] ]
|
|
286
|
+
!
|
|
287
|
+
|
|
288
|
+
renderItemLabel: anObject on: html
|
|
289
|
+
html with: anObject asString
|
|
290
|
+
!
|
|
291
|
+
|
|
292
|
+
renderListOn: html
|
|
293
|
+
self items do: [ :each |
|
|
294
|
+
self renderItem: each on: html ]
|
|
295
|
+
! !
|
|
296
|
+
|
|
297
|
+
HLListWidget subclass: #HLNavigationListWidget
|
|
298
|
+
instanceVariableNames: 'previous next'
|
|
299
|
+
package: 'Helios-Core'!
|
|
300
|
+
|
|
301
|
+
!HLNavigationListWidget methodsFor: 'accessing'!
|
|
302
|
+
|
|
303
|
+
next
|
|
304
|
+
^ next
|
|
305
|
+
!
|
|
306
|
+
|
|
307
|
+
next: aWidget
|
|
308
|
+
next := aWidget.
|
|
309
|
+
aWidget previous = self ifFalse: [ aWidget previous: self ]
|
|
310
|
+
!
|
|
311
|
+
|
|
312
|
+
previous
|
|
313
|
+
^ previous
|
|
314
|
+
!
|
|
315
|
+
|
|
316
|
+
previous: aWidget
|
|
317
|
+
previous := aWidget.
|
|
318
|
+
aWidget next = self ifFalse: [ aWidget next: self ]
|
|
319
|
+
! !
|
|
320
|
+
|
|
321
|
+
!HLNavigationListWidget methodsFor: 'actions'!
|
|
322
|
+
|
|
323
|
+
nextFocus
|
|
324
|
+
self next ifNotNil: [ self next focus ]
|
|
325
|
+
!
|
|
326
|
+
|
|
327
|
+
previousFocus
|
|
328
|
+
self previous ifNotNil: [ self previous focus ]
|
|
329
|
+
! !
|
|
330
|
+
|
|
331
|
+
!HLNavigationListWidget methodsFor: 'events'!
|
|
332
|
+
|
|
333
|
+
setupKeyBindings
|
|
334
|
+
super setupKeyBindings.
|
|
335
|
+
|
|
336
|
+
hiddenInput asJQuery keydown: [ :e |
|
|
337
|
+
e which = 39 ifTrue: [
|
|
338
|
+
self nextFocus ].
|
|
339
|
+
e which = 37 ifTrue: [
|
|
340
|
+
self previousFocus ] ]
|
|
341
|
+
! !
|
|
342
|
+
|
|
343
|
+
HLWidget subclass: #HLManager
|
|
344
|
+
instanceVariableNames: 'tabs activeTab keyBinder environment'
|
|
345
|
+
package: 'Helios-Core'!
|
|
346
|
+
|
|
347
|
+
!HLManager methodsFor: 'accessing'!
|
|
348
|
+
|
|
349
|
+
activeTab
|
|
350
|
+
^ activeTab
|
|
351
|
+
!
|
|
352
|
+
|
|
353
|
+
environment
|
|
354
|
+
"The default environment used by all Helios objects"
|
|
355
|
+
|
|
356
|
+
^ environment ifNil: [ environment := self defaultEnvironment ]
|
|
357
|
+
!
|
|
358
|
+
|
|
359
|
+
environment: anEnvironment
|
|
360
|
+
environment := anEnvironment
|
|
361
|
+
!
|
|
362
|
+
|
|
363
|
+
keyBinder
|
|
364
|
+
^ keyBinder ifNil: [ keyBinder := HLKeyBinder new ]
|
|
365
|
+
!
|
|
366
|
+
|
|
367
|
+
tabs
|
|
368
|
+
^ tabs ifNil: [ tabs := OrderedCollection new ]
|
|
369
|
+
! !
|
|
370
|
+
|
|
371
|
+
!HLManager methodsFor: 'actions'!
|
|
372
|
+
|
|
373
|
+
activate: aTab
|
|
374
|
+
self keyBinder flushBindings.
|
|
375
|
+
activeTab := aTab.
|
|
376
|
+
|
|
377
|
+
self
|
|
378
|
+
refresh;
|
|
379
|
+
show: aTab
|
|
380
|
+
!
|
|
381
|
+
|
|
382
|
+
addTab: aTab
|
|
383
|
+
self tabs add: aTab.
|
|
384
|
+
self activate: aTab
|
|
385
|
+
!
|
|
386
|
+
|
|
387
|
+
removeTab: aTab
|
|
388
|
+
"Todo: activate the previously activated tab. Keep a history of tabs selection"
|
|
389
|
+
|
|
390
|
+
(self tabs includes: aTab) ifFalse: [ ^ self ].
|
|
391
|
+
|
|
392
|
+
self tabs remove: aTab.
|
|
393
|
+
self refresh
|
|
394
|
+
! !
|
|
395
|
+
|
|
396
|
+
!HLManager methodsFor: 'defaults'!
|
|
397
|
+
|
|
398
|
+
defaultEnvironment
|
|
399
|
+
^ HLLocalEnvironment new
|
|
400
|
+
! !
|
|
401
|
+
|
|
402
|
+
!HLManager methodsFor: 'initialization'!
|
|
403
|
+
|
|
404
|
+
initialize
|
|
405
|
+
super initialize.
|
|
406
|
+
self keyBinder setupEvents
|
|
407
|
+
! !
|
|
408
|
+
|
|
409
|
+
!HLManager methodsFor: 'rendering'!
|
|
410
|
+
|
|
411
|
+
refresh
|
|
412
|
+
(window jQuery: '.navbar') remove.
|
|
413
|
+
(window jQuery: '#container') remove.
|
|
414
|
+
self appendToJQuery: 'body' asJQuery
|
|
415
|
+
!
|
|
416
|
+
|
|
417
|
+
renderAddOn: html
|
|
418
|
+
html li
|
|
419
|
+
class: 'dropdown';
|
|
420
|
+
with: [
|
|
421
|
+
html a
|
|
422
|
+
class: 'dropdown-toggle';
|
|
423
|
+
at: 'data-toggle' put: 'dropdown';
|
|
424
|
+
with: [
|
|
425
|
+
html with: 'Open...'.
|
|
426
|
+
(html tag: 'b') class: 'caret' ].
|
|
427
|
+
html ul
|
|
428
|
+
class: 'dropdown-menu';
|
|
429
|
+
with: [
|
|
430
|
+
((HLWidget withAllSubclasses
|
|
431
|
+
select: [ :each | each canBeOpenAsTab ])
|
|
432
|
+
sorted: [ :a :b | a tabPriority < b tabPriority ])
|
|
433
|
+
do: [ :each |
|
|
434
|
+
html li with: [
|
|
435
|
+
html a
|
|
436
|
+
with: each tabLabel;
|
|
437
|
+
onClick: [ each openAsTab ] ] ] ] ]
|
|
438
|
+
!
|
|
439
|
+
|
|
440
|
+
renderContentOn: html
|
|
441
|
+
html div
|
|
442
|
+
class: 'navbar navbar-fixed-top';
|
|
443
|
+
with: [ html div
|
|
444
|
+
class: 'navbar-inner';
|
|
445
|
+
with: [ self renderTabsOn: html ] ].
|
|
446
|
+
html div id: 'container'
|
|
447
|
+
!
|
|
448
|
+
|
|
449
|
+
renderTabsOn: html
|
|
450
|
+
html ul
|
|
451
|
+
class: 'nav';
|
|
452
|
+
with: [
|
|
453
|
+
self tabs do: [ :each |
|
|
454
|
+
html li
|
|
455
|
+
class: (each isActive ifTrue: [ 'active' ] ifFalse: [ 'inactive' ]);
|
|
456
|
+
with: [
|
|
457
|
+
html a
|
|
458
|
+
with: [
|
|
459
|
+
((html tag: 'i') class: 'icon-remove-circle')
|
|
460
|
+
onClick: [ self removeTab: each ].
|
|
461
|
+
html with: each label ];
|
|
462
|
+
onClick: [ each activate ] ] ].
|
|
463
|
+
self renderAddOn: html ]
|
|
464
|
+
!
|
|
465
|
+
|
|
466
|
+
show: aTab
|
|
467
|
+
(window jQuery: '#container') empty.
|
|
468
|
+
aTab widget appendToJQuery: '#container' asJQuery
|
|
469
|
+
! !
|
|
470
|
+
|
|
471
|
+
HLManager class instanceVariableNames: 'current'!
|
|
472
|
+
|
|
473
|
+
!HLManager class methodsFor: 'accessing'!
|
|
474
|
+
|
|
475
|
+
current
|
|
476
|
+
^ current ifNil: [ current := self basicNew initialize ]
|
|
477
|
+
! !
|
|
478
|
+
|
|
479
|
+
!HLManager class methodsFor: 'initialization'!
|
|
480
|
+
|
|
481
|
+
initialize
|
|
482
|
+
self current appendToJQuery: 'body' asJQuery
|
|
483
|
+
! !
|
|
484
|
+
|
|
485
|
+
!HLManager class methodsFor: 'instance creation'!
|
|
486
|
+
|
|
487
|
+
new
|
|
488
|
+
"Use current instead"
|
|
489
|
+
|
|
490
|
+
self shouldNotImplement
|
|
491
|
+
! !
|
|
492
|
+
|
|
493
|
+
HLWidget subclass: #HLSUnit
|
|
494
|
+
instanceVariableNames: ''
|
|
495
|
+
package: 'Helios-Core'!
|
|
496
|
+
|
|
497
|
+
!HLSUnit class methodsFor: 'accessing'!
|
|
498
|
+
|
|
499
|
+
tabLabel
|
|
500
|
+
^ 'SUnit'
|
|
501
|
+
!
|
|
502
|
+
|
|
503
|
+
tabPriority
|
|
504
|
+
^ 1000
|
|
505
|
+
! !
|
|
506
|
+
|
|
507
|
+
!HLSUnit class methodsFor: 'testing'!
|
|
508
|
+
|
|
509
|
+
canBeOpenAsTab
|
|
510
|
+
^ true
|
|
511
|
+
! !
|
|
512
|
+
|
|
513
|
+
HLWidget subclass: #HLTranscript
|
|
514
|
+
instanceVariableNames: ''
|
|
515
|
+
package: 'Helios-Core'!
|
|
516
|
+
|
|
517
|
+
!HLTranscript class methodsFor: 'accessing'!
|
|
518
|
+
|
|
519
|
+
tabLabel
|
|
520
|
+
^ 'Transcript'
|
|
521
|
+
!
|
|
522
|
+
|
|
523
|
+
tabPriority
|
|
524
|
+
^ 600
|
|
525
|
+
! !
|
|
526
|
+
|
|
527
|
+
!HLTranscript class methodsFor: 'testing'!
|
|
528
|
+
|
|
529
|
+
canBeOpenAsTab
|
|
530
|
+
^ true
|
|
531
|
+
! !
|
|
532
|
+
|