Browse Source

Mostly working layout

Nicolas Petton 11 years ago
parent
commit
559405e4bb

+ 100 - 3
css/helios.css

@@ -1,7 +1,104 @@
-body {
-    padding-top: 40px;
+.clearfix:after {
+	content: ".";
+	display: block;
+	clear: both;
+	visibility: hidden;
+	line-height: 0;
+	height: 0;
+}
+ 
+.clearfix {
+	display: inline-block;
+}
+ 
+html[xmlns] .clearfix {
+	display: block;
+}
+ 
+* html .clearfix {
+	height: 1%;
 }
 
 a {
     cursor: pointer;
-}
+}
+
+.navbar-fixed-top i {
+    opacity: 0.2;
+    margin-right: 10px;
+}
+
+.navbar-fixed-top .active i {
+    opacity: 0.6;
+}
+
+.nav-pills.nav-stacked > li > a {
+    border-radius: 0;
+    -webkit-border-radius: 0;
+    -moz-border-radius: 0;
+    padding: 3px 0;
+    margin: 0;
+}
+
+#container {
+    position: fixed;
+    top: 40px;
+    bottom: 0;
+    left: 0;
+    right: 0;
+}
+
+#container .panes {
+    height: 100%;
+    width: 100%;
+    overflow: hidden;
+}
+
+#container .panes .pane {
+    overflow: auto;
+}
+
+#container .panes .pane {
+    overflow: auto;
+}
+
+#container .panes.horizontal > .pane {
+    height: 50%;
+    min-height: 50px;
+}
+
+#container .panes.vertical > .pane {
+    width: 50%;
+    display: inline;
+    float: left;
+    height: 100%;
+}
+
+#container .splitter {
+    z-index: 10;
+    background: #E6E6E6;
+    outline: 1px solid #bbb;
+}
+
+#container .splitter.vertical {
+    width: 6px;
+    height: 100%;
+    float: left;
+    cursor: e-resize;
+    background-image: url('/images/vsplitter.png');
+    background-repeat: no-repeat;
+    background-position: center;
+}
+
+#container .splitter.horizontal {
+    height: 5px;
+    cursor: s-resize;
+    background-image: url('/images/hsplitter.png');
+    background-repeat: no-repeat;
+    background-position: center;
+}
+
+.hl_widget.focused {
+    background: #ffe;
+}
+

+ 2 - 1
helios.html

@@ -8,12 +8,13 @@
     <link rel="stylesheet" type="text/css" href='js/lib/bootstrap/css/bootstrap.css' /> 
     <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico"/> 
     <script type='text/javascript' src='js/lib/jQuery/jquery-1.8.2.min.js'></script> 
+    <script type='text/javascript' src='js/lib/jQuery/jquery-ui-1.8.24.custom.min.js'></script> 
     <script type='text/javascript' src='js/lib/bootstrap/js/bootstrap.js'></script> 
     <script type='text/javascript' src='js/amber.js'></script> 
   </head> 
   <body> 
     
-    <script type='text/javascript'> loadAmber({packages: ['Spaces', 'Helios']}) </script> 
+    <script type='text/javascript'> loadAmber({packages: ['Spaces', 'Helios-Layout', 'Helios-Widgets', 'Helios-Announcements']}) </script> 
     
   </body> 
 </html> 

BIN
images/hsplitter.png


BIN
images/vsplitter.png


+ 4 - 0
js/Helios-Announcements.deploy.js

@@ -0,0 +1,4 @@
+smalltalk.addPackage('Helios-Announcements', {});
+smalltalk.addClass('HLAnnouncement', smalltalk.Object, [], 'Helios-Announcements');
+
+

+ 4 - 0
js/Helios-Announcements.js

@@ -0,0 +1,4 @@
+smalltalk.addPackage('Helios-Announcements', {});
+smalltalk.addClass('HLAnnouncement', smalltalk.Object, [], 'Helios-Announcements');
+
+

+ 354 - 0
js/Helios-Layout.deploy.js

@@ -0,0 +1,354 @@
+smalltalk.addPackage('Helios-Layout', {});
+smalltalk.addClass('HLContainer', smalltalk.Widget, ['splitter'], 'Helios-Layout');
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+fn: function (html){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_id_",["container"]);
+$2=smalltalk.send($1,"_with_",[smalltalk.send(self,"_splitter",[])]);
+smalltalk.send(smalltalk.send(window,"_jQuery_",[window]),"_bind_do_",["resize",(function(){
+return smalltalk.send(smalltalk.send(self,"_splitter",[]),"_resize",[]);
+})]);
+return self}
+}),
+smalltalk.HLContainer);
+
+smalltalk.addMethod(
+"_splitter",
+smalltalk.method({
+selector: "splitter",
+fn: function (){
+var self=this;
+return self["@splitter"];
+}
+}),
+smalltalk.HLContainer);
+
+smalltalk.addMethod(
+"_splitter_",
+smalltalk.method({
+selector: "splitter:",
+fn: function (aSplitter){
+var self=this;
+self["@splitter"]=aSplitter;
+return self}
+}),
+smalltalk.HLContainer);
+
+
+smalltalk.addMethod(
+"_with_",
+smalltalk.method({
+selector: "with:",
+fn: function (aSplitter){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_splitter_",[aSplitter]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLContainer.klass);
+
+
+smalltalk.addClass('HLPane', smalltalk.Widget, [], 'Helios-Layout');
+
+
+smalltalk.addClass('HLHorizontalPane', smalltalk.HLPane, [], 'Helios-Layout');
+
+
+smalltalk.addClass('HLVerticalPane', smalltalk.HLPane, [], 'Helios-Layout');
+
+
+smalltalk.addClass('HLSplitter', smalltalk.Widget, ['firstWidget', 'secondWidget', 'firstPane', 'secondPane', 'splitter'], 'Helios-Layout');
+smalltalk.addMethod(
+"_cssClass",
+smalltalk.method({
+selector: "cssClass",
+fn: function (){
+var self=this;
+return "splitter";
+}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_firstWidget",
+smalltalk.method({
+selector: "firstWidget",
+fn: function (){
+var self=this;
+return self["@firstWidget"];
+}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_firstWidget_",
+smalltalk.method({
+selector: "firstWidget:",
+fn: function (aWidget){
+var self=this;
+self["@firstWidget"]=aWidget;
+return self}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_isHeliosSplitter",
+smalltalk.method({
+selector: "isHeliosSplitter",
+fn: function (){
+var self=this;
+return true;
+}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_panesCssClass",
+smalltalk.method({
+selector: "panesCssClass",
+fn: function (){
+var self=this;
+return "panes";
+}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+fn: function (html){
+var self=this;
+var $1,$3,$4,$5,$6,$2,$7;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_class_",[smalltalk.send(self,"_panesCssClass",[])]);
+$2=smalltalk.send($1,"_with_",[(function(){
+$3=smalltalk.send(html,"_div",[]);
+smalltalk.send($3,"_class_",["pane"]);
+$4=smalltalk.send($3,"_with_",[smalltalk.send(self,"_firstWidget",[])]);
+self["@firstPane"]=$4;
+self["@firstPane"];
+self["@splitter"]=smalltalk.send(smalltalk.send(html,"_div",[]),"_class_",[smalltalk.send(self,"_cssClass",[])]);
+self["@splitter"];
+$5=smalltalk.send(html,"_div",[]);
+smalltalk.send($5,"_class_",["pane"]);
+$6=smalltalk.send($5,"_with_",[smalltalk.send(self,"_secondWidget",[])]);
+self["@secondPane"]=$6;
+return self["@secondPane"];
+})]);
+smalltalk.send(self,"_setupSplitter",[]);
+$7=smalltalk.send(self,"_resize",[]);
+return self}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_resize",
+smalltalk.method({
+selector: "resize",
+fn: function (){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(smalltalk.send(self,"_firstWidget",[]),"_isHeliosSplitter",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(smalltalk.send(self,"_firstWidget",[]),"_resize",[]);
+};
+$2=smalltalk.send(smalltalk.send(self,"_secondWidget",[]),"_isHeliosSplitter",[]);
+if(smalltalk.assert($2)){
+smalltalk.send(smalltalk.send(self,"_secondWidget",[]),"_resize",[]);
+};
+return self}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_secondWidget",
+smalltalk.method({
+selector: "secondWidget",
+fn: function (){
+var self=this;
+return self["@secondWidget"];
+}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_secondWidget_",
+smalltalk.method({
+selector: "secondWidget:",
+fn: function (aWidget){
+var self=this;
+self["@secondWidget"]=aWidget;
+return self}
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_setupSplitter",
+smalltalk.method({
+selector: "setupSplitter",
+fn: function (){
+var self=this;
+return self}
+}),
+smalltalk.HLSplitter);
+
+
+smalltalk.addMethod(
+"_with_with_",
+smalltalk.method({
+selector: "with:with:",
+fn: function (aWidget,anotherWidget){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_firstWidget_",[aWidget]);
+smalltalk.send($2,"_secondWidget_",[anotherWidget]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLSplitter.klass);
+
+
+smalltalk.addClass('HLHorizontalSplitter', smalltalk.HLSplitter, [], 'Helios-Layout');
+smalltalk.addMethod(
+"_cssClass",
+smalltalk.method({
+selector: "cssClass",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_cssClass",[],smalltalk.HLSplitter),"__comma",[" horizontal"]);
+return $1;
+}
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_panesCssClass",
+smalltalk.method({
+selector: "panesCssClass",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_panesCssClass",[],smalltalk.HLSplitter),"__comma",[" horizontal"]);
+return $1;
+}
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_resize",
+smalltalk.method({
+selector: "resize",
+fn: function (){
+var self=this;
+var container;
+var position;
+container=smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_parent",[]);
+position=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_top",[]),"__minus",[smalltalk.send(smalltalk.send(container,"_offset",[]),"_top",[])]);
+smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_height_",[smalltalk.send(smalltalk.send(position,"_min_",[smalltalk.send(smalltalk.send(container,"_height",[]),"__minus",[(100)])]),"_max_",[(100)])]);
+smalltalk.send(smalltalk.send(self["@secondPane"],"_asJQuery",[]),"_height_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(container,"_height",[]),"__minus",[position]),"_min_",[smalltalk.send(smalltalk.send(container,"_height",[]),"__minus",[(100)])]),"_max_",[(100)]),"__minus",[(6)])]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_css_value_",["top",(0)]);
+smalltalk.send(self,"_resize",[],smalltalk.HLSplitter);
+return self}
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_setupSplitter",
+smalltalk.method({
+selector: "setupSplitter",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["y"]),smalltalk.send("stop","__minus_gt",[(function(){
+return smalltalk.send(self,"_resize",[]);
+})])])]);
+return self}
+}),
+smalltalk.HLHorizontalSplitter);
+
+
+
+smalltalk.addClass('HLVerticalSplitter', smalltalk.HLSplitter, [], 'Helios-Layout');
+smalltalk.addMethod(
+"_cssClass",
+smalltalk.method({
+selector: "cssClass",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_cssClass",[],smalltalk.HLSplitter),"__comma",[" vertical"]);
+return $1;
+}
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_panesCssClass",
+smalltalk.method({
+selector: "panesCssClass",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_panesCssClass",[],smalltalk.HLSplitter),"__comma",[" vertical"]);
+return $1;
+}
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_resize",
+smalltalk.method({
+selector: "resize",
+fn: function (){
+var self=this;
+var container;
+var position;
+container=smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_parent",[]);
+position=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_left",[]),"__minus",[smalltalk.send(smalltalk.send(container,"_offset",[]),"_left",[])]);
+smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_width_",[smalltalk.send(smalltalk.send(position,"_min_",[smalltalk.send(smalltalk.send(container,"_width",[]),"__minus",[(100)])]),"_max_",[(100)])]);
+smalltalk.send(smalltalk.send(self["@secondPane"],"_asJQuery",[]),"_width_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(container,"_width",[]),"__minus",[position]),"_min_",[smalltalk.send(smalltalk.send(container,"_width",[]),"__minus",[(100)])]),"_max_",[(100)]),"__minus",[(6)])]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_css_value_",["left",(0)]);
+smalltalk.send(self,"_resize",[],smalltalk.HLSplitter);
+return self}
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_setupSplitter",
+smalltalk.method({
+selector: "setupSplitter",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["x"]),smalltalk.send("stop","__minus_gt",[(function(){
+return smalltalk.send(self,"_resize",[]);
+})])])]);
+return self}
+}),
+smalltalk.HLVerticalSplitter);
+
+
+
+smalltalk.addMethod(
+"_isHeliosSplitter",
+smalltalk.method({
+selector: "isHeliosSplitter",
+fn: function (){
+var self=this;
+return false;
+}
+}),
+smalltalk.Object);
+

+ 474 - 0
js/Helios-Layout.js

@@ -0,0 +1,474 @@
+smalltalk.addPackage('Helios-Layout', {});
+smalltalk.addClass('HLContainer', smalltalk.Widget, ['splitter'], 'Helios-Layout');
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_id_",["container"]);
+$2=smalltalk.send($1,"_with_",[smalltalk.send(self,"_splitter",[])]);
+smalltalk.send(smalltalk.send(window,"_jQuery_",[window]),"_bind_do_",["resize",(function(){
+return smalltalk.send(smalltalk.send(self,"_splitter",[]),"_resize",[]);
+})]);
+return self},
+args: ["html"],
+source: "renderOn: html\x0a\x09html div \x0a    \x09id: 'container'; \x0a        with: self splitter.\x0a        \x0a   (window jQuery: window) bind: 'resize' do: [ self splitter resize ]",
+messageSends: ["id:", "div", "with:", "splitter", "bind:do:", "resize", "jQuery:"],
+referencedClasses: []
+}),
+smalltalk.HLContainer);
+
+smalltalk.addMethod(
+"_splitter",
+smalltalk.method({
+selector: "splitter",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@splitter"];
+},
+args: [],
+source: "splitter\x0a\x09^ splitter",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLContainer);
+
+smalltalk.addMethod(
+"_splitter_",
+smalltalk.method({
+selector: "splitter:",
+category: 'accessing',
+fn: function (aSplitter){
+var self=this;
+self["@splitter"]=aSplitter;
+return self},
+args: ["aSplitter"],
+source: "splitter: aSplitter\x0a\x09splitter := aSplitter",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLContainer);
+
+
+smalltalk.addMethod(
+"_with_",
+smalltalk.method({
+selector: "with:",
+category: 'instance creation',
+fn: function (aSplitter){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_splitter_",[aSplitter]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["aSplitter"],
+source: "with: aSplitter\x0a\x09^ self new \x0a    \x09splitter: aSplitter; \x0a        yourself",
+messageSends: ["splitter:", "new", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLContainer.klass);
+
+
+smalltalk.addClass('HLPane', smalltalk.Widget, [], 'Helios-Layout');
+
+
+smalltalk.addClass('HLHorizontalPane', smalltalk.HLPane, [], 'Helios-Layout');
+
+
+smalltalk.addClass('HLVerticalPane', smalltalk.HLPane, [], 'Helios-Layout');
+
+
+smalltalk.addClass('HLSplitter', smalltalk.Widget, ['firstWidget', 'secondWidget', 'firstPane', 'secondPane', 'splitter'], 'Helios-Layout');
+smalltalk.addMethod(
+"_cssClass",
+smalltalk.method({
+selector: "cssClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+return "splitter";
+},
+args: [],
+source: "cssClass\x0a\x09^ 'splitter'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_firstWidget",
+smalltalk.method({
+selector: "firstWidget",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@firstWidget"];
+},
+args: [],
+source: "firstWidget\x0a\x09^ firstWidget",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_firstWidget_",
+smalltalk.method({
+selector: "firstWidget:",
+category: 'accessing',
+fn: function (aWidget){
+var self=this;
+self["@firstWidget"]=aWidget;
+return self},
+args: ["aWidget"],
+source: "firstWidget: aWidget\x0a\x09firstWidget := aWidget",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_isHeliosSplitter",
+smalltalk.method({
+selector: "isHeliosSplitter",
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+},
+args: [],
+source: "isHeliosSplitter\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_panesCssClass",
+smalltalk.method({
+selector: "panesCssClass",
+category: 'rendering',
+fn: function (){
+var self=this;
+return "panes";
+},
+args: [],
+source: "panesCssClass\x0a\x09^ 'panes'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$3,$4,$5,$6,$2,$7;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_class_",[smalltalk.send(self,"_panesCssClass",[])]);
+$2=smalltalk.send($1,"_with_",[(function(){
+$3=smalltalk.send(html,"_div",[]);
+smalltalk.send($3,"_class_",["pane"]);
+$4=smalltalk.send($3,"_with_",[smalltalk.send(self,"_firstWidget",[])]);
+self["@firstPane"]=$4;
+self["@firstPane"];
+self["@splitter"]=smalltalk.send(smalltalk.send(html,"_div",[]),"_class_",[smalltalk.send(self,"_cssClass",[])]);
+self["@splitter"];
+$5=smalltalk.send(html,"_div",[]);
+smalltalk.send($5,"_class_",["pane"]);
+$6=smalltalk.send($5,"_with_",[smalltalk.send(self,"_secondWidget",[])]);
+self["@secondPane"]=$6;
+return self["@secondPane"];
+})]);
+smalltalk.send(self,"_setupSplitter",[]);
+$7=smalltalk.send(self,"_resize",[]);
+return self},
+args: ["html"],
+source: "renderOn: html\x0a\x09html div class: self panesCssClass; with: [\x0a\x09\x09firstPane := html div class: 'pane'; with: self firstWidget.\x0a    \x09splitter := html div class: self cssClass.\x0a    \x09secondPane := html div class: 'pane'; with: self secondWidget ].\x0a        \x0a\x09self \x0a    \x09setupSplitter;\x0a        resize",
+messageSends: ["class:", "panesCssClass", "div", "with:", "firstWidget", "cssClass", "secondWidget", "setupSplitter", "resize"],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_resize",
+smalltalk.method({
+selector: "resize",
+category: 'rendering',
+fn: function (){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(smalltalk.send(self,"_firstWidget",[]),"_isHeliosSplitter",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(smalltalk.send(self,"_firstWidget",[]),"_resize",[]);
+};
+$2=smalltalk.send(smalltalk.send(self,"_secondWidget",[]),"_isHeliosSplitter",[]);
+if(smalltalk.assert($2)){
+smalltalk.send(smalltalk.send(self,"_secondWidget",[]),"_resize",[]);
+};
+return self},
+args: [],
+source: "resize\x0a\x09self firstWidget isHeliosSplitter ifTrue: [ self firstWidget resize ].\x0a    self secondWidget isHeliosSplitter ifTrue: [ self secondWidget resize ]\x0a    \x0a    ",
+messageSends: ["ifTrue:", "resize", "firstWidget", "isHeliosSplitter", "secondWidget"],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_secondWidget",
+smalltalk.method({
+selector: "secondWidget",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@secondWidget"];
+},
+args: [],
+source: "secondWidget\x0a\x09^ secondWidget",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_secondWidget_",
+smalltalk.method({
+selector: "secondWidget:",
+category: 'accessing',
+fn: function (aWidget){
+var self=this;
+self["@secondWidget"]=aWidget;
+return self},
+args: ["aWidget"],
+source: "secondWidget: aWidget\x0a\x09secondWidget := aWidget",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+smalltalk.addMethod(
+"_setupSplitter",
+smalltalk.method({
+selector: "setupSplitter",
+category: 'rendering',
+fn: function (){
+var self=this;
+return self},
+args: [],
+source: "setupSplitter",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSplitter);
+
+
+smalltalk.addMethod(
+"_with_with_",
+smalltalk.method({
+selector: "with:with:",
+category: 'instance creation',
+fn: function (aWidget,anotherWidget){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_firstWidget_",[aWidget]);
+smalltalk.send($2,"_secondWidget_",[anotherWidget]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["aWidget", "anotherWidget"],
+source: "with: aWidget with: anotherWidget\x0a\x09^ self new\x0a    \x09\x09firstWidget: aWidget;\x0a            secondWidget: anotherWidget;\x0a            yourself",
+messageSends: ["firstWidget:", "new", "secondWidget:", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLSplitter.klass);
+
+
+smalltalk.addClass('HLHorizontalSplitter', smalltalk.HLSplitter, [], 'Helios-Layout');
+smalltalk.addMethod(
+"_cssClass",
+smalltalk.method({
+selector: "cssClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_cssClass",[],smalltalk.HLSplitter),"__comma",[" horizontal"]);
+return $1;
+},
+args: [],
+source: "cssClass\x0a\x09^ super cssClass, ' horizontal'",
+messageSends: [",", "cssClass"],
+referencedClasses: []
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_panesCssClass",
+smalltalk.method({
+selector: "panesCssClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_panesCssClass",[],smalltalk.HLSplitter),"__comma",[" horizontal"]);
+return $1;
+},
+args: [],
+source: "panesCssClass\x0a\x09^ super panesCssClass, ' horizontal'",
+messageSends: [",", "panesCssClass"],
+referencedClasses: []
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_resize",
+smalltalk.method({
+selector: "resize",
+category: 'actions',
+fn: function (){
+var self=this;
+var container;
+var position;
+container=smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_parent",[]);
+position=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_top",[]),"__minus",[smalltalk.send(smalltalk.send(container,"_offset",[]),"_top",[])]);
+smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_height_",[smalltalk.send(smalltalk.send(position,"_min_",[smalltalk.send(smalltalk.send(container,"_height",[]),"__minus",[(100)])]),"_max_",[(100)])]);
+smalltalk.send(smalltalk.send(self["@secondPane"],"_asJQuery",[]),"_height_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(container,"_height",[]),"__minus",[position]),"_min_",[smalltalk.send(smalltalk.send(container,"_height",[]),"__minus",[(100)])]),"_max_",[(100)]),"__minus",[(6)])]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_css_value_",["top",(0)]);
+smalltalk.send(self,"_resize",[],smalltalk.HLSplitter);
+return self},
+args: [],
+source: "resize\x0a\x09| container position |\x0a    \x0a    container := firstPane asJQuery parent.\x0a    position := splitter asJQuery offset top - container offset top.\x0a    \x0a\x09firstPane asJQuery height: ((position min: container height - 100) max: 100).\x0a    secondPane asJQuery height: (((container height - position) min: container height - 100) max: 100) - 6.\x0a    \x0a   \x22Put the splitter div back to a relative position\x22 \x0a    splitter asJQuery css: 'top' value: 0.\x0a    \x0a    super resize",
+messageSends: ["parent", "asJQuery", "-", "top", "offset", "height:", "max:", "min:", "height", "css:value:", "resize"],
+referencedClasses: []
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_setupSplitter",
+smalltalk.method({
+selector: "setupSplitter",
+category: 'rendering',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["y"]),smalltalk.send("stop","__minus_gt",[(function(){
+return smalltalk.send(self,"_resize",[]);
+})])])]);
+return self},
+args: [],
+source: "setupSplitter\x0a\x09splitter asJQuery draggable: #{ 'axis' -> 'y'. 'stop' -> [ self resize ] }",
+messageSends: ["draggable:", "->", "resize", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLHorizontalSplitter);
+
+
+
+smalltalk.addClass('HLVerticalSplitter', smalltalk.HLSplitter, [], 'Helios-Layout');
+smalltalk.addMethod(
+"_cssClass",
+smalltalk.method({
+selector: "cssClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_cssClass",[],smalltalk.HLSplitter),"__comma",[" vertical"]);
+return $1;
+},
+args: [],
+source: "cssClass\x0a\x09^ super cssClass, ' vertical'",
+messageSends: [",", "cssClass"],
+referencedClasses: []
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_panesCssClass",
+smalltalk.method({
+selector: "panesCssClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_panesCssClass",[],smalltalk.HLSplitter),"__comma",[" vertical"]);
+return $1;
+},
+args: [],
+source: "panesCssClass\x0a\x09^ super panesCssClass, ' vertical'",
+messageSends: [",", "panesCssClass"],
+referencedClasses: []
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_resize",
+smalltalk.method({
+selector: "resize",
+category: 'actions',
+fn: function (){
+var self=this;
+var container;
+var position;
+container=smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_parent",[]);
+position=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_left",[]),"__minus",[smalltalk.send(smalltalk.send(container,"_offset",[]),"_left",[])]);
+smalltalk.send(smalltalk.send(self["@firstPane"],"_asJQuery",[]),"_width_",[smalltalk.send(smalltalk.send(position,"_min_",[smalltalk.send(smalltalk.send(container,"_width",[]),"__minus",[(100)])]),"_max_",[(100)])]);
+smalltalk.send(smalltalk.send(self["@secondPane"],"_asJQuery",[]),"_width_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(container,"_width",[]),"__minus",[position]),"_min_",[smalltalk.send(smalltalk.send(container,"_width",[]),"__minus",[(100)])]),"_max_",[(100)]),"__minus",[(6)])]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_css_value_",["left",(0)]);
+smalltalk.send(self,"_resize",[],smalltalk.HLSplitter);
+return self},
+args: [],
+source: "resize\x0a\x09| container position |\x0a    \x0a    container := firstPane asJQuery parent.\x0a    position := splitter asJQuery offset left - container offset left.\x0a    \x0a\x09firstPane asJQuery width: ((position min: container width - 100) max: 100).\x0a    secondPane asJQuery width: (((container width - position) min: container width - 100) max: 100) - 6.\x0a    \x0a   \x22Put the splitter div back to a relative position\x22 \x0a    splitter asJQuery css: 'left' value: 0.\x0a    \x0a    super resize",
+messageSends: ["parent", "asJQuery", "-", "left", "offset", "width:", "max:", "min:", "width", "css:value:", "resize"],
+referencedClasses: []
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_setupSplitter",
+smalltalk.method({
+selector: "setupSplitter",
+category: 'rendering',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["x"]),smalltalk.send("stop","__minus_gt",[(function(){
+return smalltalk.send(self,"_resize",[]);
+})])])]);
+return self},
+args: [],
+source: "setupSplitter\x0a\x09splitter asJQuery draggable: #{ 'axis' -> 'x'. 'stop' -> [ self resize ] }",
+messageSends: ["draggable:", "->", "resize", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLVerticalSplitter);
+
+
+
+smalltalk.addMethod(
+"_isHeliosSplitter",
+smalltalk.method({
+selector: "isHeliosSplitter",
+category: '*Helios-Layout',
+fn: function (){
+var self=this;
+return false;
+},
+args: [],
+source: "isHeliosSplitter\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+

+ 1188 - 0
js/Helios-Widgets.deploy.js

@@ -0,0 +1,1188 @@
+smalltalk.addPackage('Helios-Widgets', {});
+smalltalk.addClass('HLTab', smalltalk.Object, ['widget', 'label'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_activate",
+smalltalk.method({
+selector: "activate",
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_manager", []), "_activate_", [self]);
+    return self;
+}
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_add",
+smalltalk.method({
+selector: "add",
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_manager", []), "_addTab_", [self]);
+    return self;
+}
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_isActive",
+smalltalk.method({
+selector: "isActive",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(smalltalk.send(self, "_manager", []), "_activeTab", []), "__eq", [self]);
+    return $1;
+}
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_label",
+smalltalk.method({
+selector: "label",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@label']) == nil || $receiver == undefined) {
+        $1 = "";
+    } else {
+        $1 = self['@label'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_label_",
+smalltalk.method({
+selector: "label:",
+fn: function (aString) {
+    var self = this;
+    self['@label'] = aString;
+    return self;
+}
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_manager",
+smalltalk.method({
+selector: "manager",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.HLTabManager || HLTabManager, "_current", []);
+    return $1;
+}
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_widget",
+smalltalk.method({
+selector: "widget",
+fn: function () {
+    var self = this;
+    return self['@widget'];
+}
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_widget_",
+smalltalk.method({
+selector: "widget:",
+fn: function (aWidget) {
+    var self = this;
+    self['@widget'] = aWidget;
+    return self;
+}
+}),
+smalltalk.HLTab);
+
+
+smalltalk.addMethod(
+"_on_labelled_",
+smalltalk.method({
+selector: "on:labelled:",
+fn: function (aWidget, aString) {
+    var self = this;
+    var $2, $3, $1;
+    $2 = smalltalk.send(self, "_new", []);
+    smalltalk.send($2, "_widget_", [aWidget]);
+    smalltalk.send($2, "_label_", [aString]);
+    $3 = smalltalk.send($2, "_yourself", []);
+    $1 = $3;
+    return $1;
+}
+}),
+smalltalk.HLTab.klass);
+
+
+smalltalk.addClass('HLWidget', smalltalk.Widget, ['rootDiv'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_announce_",
+smalltalk.method({
+selector: "announce:",
+fn: function (anObject) {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_announcer", []), "_announce_", [anObject]);
+    return self;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_manager", []), "_announcer", []);
+    return $1;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+fn: function () {
+    var self = this;
+    smalltalk.send(self, "_initialize", [], smalltalk.Widget);
+    smalltalk.send(self, "_subscribe", []);
+    return self;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_manager",
+smalltalk.method({
+selector: "manager",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.HLTabManager || HLTabManager, "_current", []);
+    return $1;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_on_do_",
+smalltalk.method({
+selector: "on:do:",
+fn: function (anAnnouncement, aBlock) {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_announcer", []), "_on_do_", [anAnnouncement, aBlock]);
+    return self;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_refresh",
+smalltalk.method({
+selector: "refresh",
+fn: function () {
+    var self = this;
+    if (($receiver = self['@rootDiv']) == nil || $receiver == undefined) {
+        return self;
+    } else {
+        self['@rootDiv'];
+    }
+    smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_empty", []);
+    smalltalk.send(function (html) {return smalltalk.send(self, "_renderContentOn_", [html]);}, "_appendToJQuery_", [smalltalk.send(self['@rootDiv'], "_asJQuery", [])]);
+    return self;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html) {
+    var self = this;
+    return self;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+fn: function (html) {
+    var self = this;
+    self['@rootDiv'] = smalltalk.send(smalltalk.send(html, "_div", []), "_with_", [function () {return smalltalk.send(self, "_renderContentOn_", [html]);}]);
+    return self;
+}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_subscribe",
+smalltalk.method({
+selector: "subscribe",
+fn: function () {
+    var self = this;
+    return self;
+}
+}),
+smalltalk.HLWidget);
+
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+fn: function () {
+    var self = this;
+    return false;
+}
+}),
+smalltalk.HLWidget.klass);
+
+smalltalk.addMethod(
+"_openAsTab",
+smalltalk.method({
+selector: "openAsTab",
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(smalltalk.HLTabManager || HLTabManager, "_current", []), "_addTab_", [smalltalk.send(smalltalk.HLTab || HLTab, "_on_labelled_", [smalltalk.send(self, "_new", []), smalltalk.send(self, "_tabLabel", [])])]);
+    return self;
+}
+}),
+smalltalk.HLWidget.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+fn: function () {
+    var self = this;
+    return "Tab";
+}
+}),
+smalltalk.HLWidget.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+fn: function () {
+    var self = this;
+    return 500;
+}
+}),
+smalltalk.HLWidget.klass);
+
+
+smalltalk.addClass('HLBrowser', smalltalk.HLWidget, ['environment', 'selectedPackage', 'selectedClass', 'packagesListWidget', 'classesListWidget'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_classesListWidget",
+smalltalk.method({
+selector: "classesListWidget",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@classesListWidget']) == nil ||
+        $receiver == undefined) {
+        self['@classesListWidget'] = smalltalk.send(smalltalk.HLClassesListWidget || HLClassesListWidget, "_on_", [self]);
+        $1 = self['@classesListWidget'];
+    } else {
+        $1 = self['@classesListWidget'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@environment']) == nil || $receiver == undefined) {
+        self['@environment'] = smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []);
+        $1 = self['@environment'];
+    } else {
+        $1 = self['@environment'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_environment_",
+smalltalk.method({
+selector: "environment:",
+fn: function (anEnvironment) {
+    var self = this;
+    self['@environment'] = anEnvironment;
+    return self;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_packagesListWidget",
+smalltalk.method({
+selector: "packagesListWidget",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@packagesListWidget']) == nil ||
+        $receiver == undefined) {
+        self['@packagesListWidget'] = smalltalk.send(smalltalk.HLPackagesListWidget || HLPackagesListWidget, "_on_", [self]);
+        $1 = self['@packagesListWidget'];
+    } else {
+        $1 = self['@packagesListWidget'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+smalltalk.send(html,"_with_",[smalltalk.send((smalltalk.HLContainer || HLContainer),"_with_",[smalltalk.send((smalltalk.HLHorizontalSplitter || HLHorizontalSplitter),"_with_with_",[smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",[smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",[smalltalk.send(self,"_packagesListWidget",[]),smalltalk.send(self,"_classesListWidget",[])]),smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",["Protocols","Methods"])]),"Source Code"])])]);
+return self}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_renderTopPanesOn_",
+smalltalk.method({
+selector: "renderTopPanesOn:",
+fn: function (html) {
+    var self = this;
+    var $1, $2, $3, $4, $5, $6, $7, $8;
+    $1 = smalltalk.send(html, "_div", []);
+    smalltalk.send($1, "_class_", ["pane"]);
+    $2 = smalltalk.send($1, "_with_", [smalltalk.send(self, "_packagesListWidget", [])]);
+    $3 = smalltalk.send(html, "_div", []);
+    smalltalk.send($3, "_class_", ["pane"]);
+    $4 = smalltalk.send($3, "_with_", [smalltalk.send(self, "_classesListWidget", [])]);
+    $5 = smalltalk.send(html, "_div", []);
+    smalltalk.send($5, "_class_", ["pane"]);
+    $6 = smalltalk.send($5, "_with_", ["hello"]);
+    $7 = smalltalk.send(html, "_div", []);
+    smalltalk.send($7, "_class_", ["pane"]);
+    $8 = smalltalk.send($7, "_with_", ["world"]);
+    return self;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_selectPackage_",
+smalltalk.method({
+selector: "selectPackage:",
+fn: function (aPackage) {
+    var self = this;
+    self['@selectedPackage'] = aPackage;
+    self['@selectedClass'] = nil;
+    smalltalk.send(smalltalk.send(self, "_classesListWidget", []), "_package_", [aPackage]);
+    return self;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_selectedPackage",
+smalltalk.method({
+selector: "selectedPackage",
+fn: function () {
+    var self = this;
+    return self['@selectedPackage'];
+}
+}),
+smalltalk.HLBrowser);
+
+
+smalltalk.HLBrowser.klass.iVarNames = ['nextId'];
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+fn: function () {
+    var self = this;
+    return true;
+}
+}),
+smalltalk.HLBrowser.klass);
+
+smalltalk.addMethod(
+"_nextId",
+smalltalk.method({
+selector: "nextId",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@nextId']) == nil || $receiver == undefined) {
+        self['@nextId'] = 0;
+        self['@nextId'];
+    } else {
+        self['@nextId'];
+    }
+    $1 = smalltalk.send("browser_", "__comma", [smalltalk.send(smalltalk.send(self['@nextId'], "__plus", [1]), "_asString", [])]);
+    return $1;
+}
+}),
+smalltalk.HLBrowser.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+fn: function () {
+    var self = this;
+    return "Browser";
+}
+}),
+smalltalk.HLBrowser.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+fn: function () {
+    var self = this;
+    return 0;
+}
+}),
+smalltalk.HLBrowser.klass);
+
+
+smalltalk.addClass('HLDebugger', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+
+smalltalk.addClass('HLFocusableWidget', smalltalk.HLWidget, ['hiddenInput'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_blur",
+smalltalk.method({
+selector: "blur",
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_removeClass_", [smalltalk.send(self, "_focusClass", [])]);
+    return self;
+}
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_focus",
+smalltalk.method({
+selector: "focus",
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_addClass_", [smalltalk.send(self, "_focusClass", [])]);
+    return self;
+}
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_focusClass",
+smalltalk.method({
+selector: "focusClass",
+fn: function () {
+    var self = this;
+    return "focused";
+}
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_hasFocus",
+smalltalk.method({
+selector: "hasFocus",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self['@rootDiv'], "_notNil", []), "_and_", [function () {return smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_hasClass_", [smalltalk.send(self, "_focusClass", [])]);}]);
+    return $1;
+}
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html) {
+    var self = this;
+    return self;
+}
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_renderHiddenInputOn_",
+smalltalk.method({
+selector: "renderHiddenInputOn:",
+fn: function (html) {
+    var self = this;
+    var $1, $2;
+    $1 = smalltalk.send(html, "_input", []);
+    smalltalk.send($1, "_style_", ["position: absolute; left: -100000px;"]);
+    smalltalk.send($1, "_onBlur_", [function () {return smalltalk.send(self, "_blur", []);}]);
+    $2 = smalltalk.send($1, "_onFocus_", [function () {return smalltalk.send(self, "_focus", []);}]);
+    self['@hiddenInput'] = $2;
+    return self;
+}
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+fn: function (html) {
+    var self = this;
+    var $1, $2;
+    smalltalk.send(self, "_renderHiddenInputOn_", [html]);
+    $1 = smalltalk.send(html, "_div", []);
+    smalltalk.send($1, "_class_", ["hl_widget"]);
+    smalltalk.send($1, "_onClick_", [function () {return smalltalk.send(smalltalk.send(self['@hiddenInput'], "_asJQuery", []), "_focus", []);}]);
+    $2 = smalltalk.send($1, "_with_", [function () {return smalltalk.send(self, "_renderContentOn_", [html]);}]);
+    self['@rootDiv'] = $2;
+    return self;
+}
+}),
+smalltalk.HLFocusableWidget);
+
+
+
+smalltalk.addClass('HLListWidget', smalltalk.HLFocusableWidget, ['items', 'selectedItem'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_activateListItem_",
+smalltalk.method({
+selector: "activateListItem:",
+fn: function (aListItem) {
+    var self = this;
+    smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aListItem, "_asJQuery", []), "_parent", []), "_children", []), "_removeClass_", ["active"]);
+    smalltalk.send(smalltalk.send(aListItem, "_asJQuery", []), "_addClass_", ["active"]);
+    return self;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_cssClassForItem_",
+smalltalk.method({
+selector: "cssClassForItem:",
+fn: function (anObject) {
+    var self = this;
+    var $2, $1;
+    $2 = smalltalk.send(smalltalk.send(self, "_selectedItem", []), "__eq", [anObject]);
+    if (smalltalk.assert($2)) {
+        $1 = "active";
+    } else {
+        $1 = "inactive";
+    }
+    return $1;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(self, "_subclassResponsibility", []);
+    return $1;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html) {
+    var self = this;
+    var $1, $2;
+    $1 = smalltalk.send(html, "_ul", []);
+    smalltalk.send($1, "_class_", ["nav nav-pills nav-stacked"]);
+    $2 = smalltalk.send($1, "_with_", [function () {return smalltalk.send(smalltalk.send(self, "_items", []), "_do_", [function (each) {return smalltalk.send(self, "_renderItem_on_", [each, html]);}]);}]);
+    return self;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderItem_on_",
+smalltalk.method({
+selector: "renderItem:on:",
+fn: function (anObject, html) {
+    var self = this;
+    var $2, $3, $1;
+    var li;
+    li = smalltalk.send(html, "_li", []);
+    smalltalk.send(li, "_class_", [smalltalk.send(self, "_cssClassForItem_", [anObject])]);
+    $1 = smalltalk.send(li, "_with_", [function () {$2 = smalltalk.send(html, "_a", []);smalltalk.send($2, "_with_", [function () {smalltalk.send(smalltalk.send(html, "_tag_", ["i"]), "_class_", [smalltalk.send(anObject, "_heliosListIcon", [])]);return smalltalk.send(self, "_renderItemLabel_on_", [anObject, html]);}]);$3 = smalltalk.send($2, "_onClick_", [function () {smalltalk.send(self, "_activateListItem_", [li]);return smalltalk.send(self, "_selectItem_", [anObject]);}]);return $3;}]);
+    return self;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_on_",
+smalltalk.method({
+selector: "renderItemLabel:on:",
+fn: function (anObject, html) {
+    var self = this;
+    smalltalk.send(html, "_with_", [smalltalk.send(anObject, "_asString", [])]);
+    return self;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+fn: function (anObject) {
+    var self = this;
+    smalltalk.send(self, "_selectedItem_", [anObject]);
+    return self;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_selectedItem",
+smalltalk.method({
+selector: "selectedItem",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@selectedItem']) == nil ||
+        $receiver == undefined) {
+        $1 = smalltalk.send(smalltalk.send(self, "_items", []), "_ifNotEmpty_", [function () {return smalltalk.send(smalltalk.send(self, "_items", []), "_first", []);}]);
+    } else {
+        $1 = self['@selectedItem'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_selectedItem_",
+smalltalk.method({
+selector: "selectedItem:",
+fn: function (anObject) {
+    var self = this;
+    self['@selectedItem'] = anObject;
+    return self;
+}
+}),
+smalltalk.HLListWidget);
+
+
+
+smalltalk.addClass('HLBrowserListWidget', smalltalk.HLListWidget, ['browser'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_browser",
+smalltalk.method({
+selector: "browser",
+fn: function () {
+    var self = this;
+    return self['@browser'];
+}
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_browser_",
+smalltalk.method({
+selector: "browser:",
+fn: function (aBrowser) {
+    var self = this;
+    self['@browser'] = aBrowser;
+    return self;
+}
+}),
+smalltalk.HLBrowserListWidget);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+fn: function (aBrowser) {
+    var self = this;
+    var $2, $3, $1;
+    $2 = smalltalk.send(self, "_new", []);
+    smalltalk.send($2, "_browser_", [aBrowser]);
+    $3 = smalltalk.send($2, "_yourself", []);
+    $1 = $3;
+    return $1;
+}
+}),
+smalltalk.HLBrowserListWidget.klass);
+
+
+smalltalk.addClass('HLClassesListWidget', smalltalk.HLBrowserListWidget, ['package'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+fn: function () {
+    var self = this;
+    var $2, $1;
+    $2 = smalltalk.send(self, "_package", []);
+    if (($receiver = $2) == nil || $receiver == undefined) {
+        $1 = [];
+    } else {
+        $1 = smalltalk.send(smalltalk.send(self, "_package", []), "_classes", []);
+    }
+    return $1;
+}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_package",
+smalltalk.method({
+selector: "package",
+fn: function () {
+    var self = this;
+    return self['@package'];
+}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_package_",
+smalltalk.method({
+selector: "package:",
+fn: function (aPackage) {
+    var self = this;
+    self['@package'] = aPackage;
+    smalltalk.send(self, "_refresh", []);
+    return self;
+}
+}),
+smalltalk.HLClassesListWidget);
+
+
+
+smalltalk.addClass('HLPackagesListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Widgets');
+smalltalk.addMethod(
+"_browser",
+smalltalk.method({
+selector: "browser",
+fn: function () {
+    var self = this;
+    return self['@browser'];
+}
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_browser_",
+smalltalk.method({
+selector: "browser:",
+fn: function (aBrowser) {
+    var self = this;
+    self['@browser'] = aBrowser;
+    return self;
+}
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_browser", []), "_environment", []);
+    return $1;
+}
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_environment", []), "_packages", []);
+    return $1;
+}
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+fn: function (aPackage) {
+    var self = this;
+    smalltalk.send(self, "_selectItem_", [aPackage], smalltalk.HLBrowserListWidget);
+    smalltalk.send(smalltalk.send(self, "_browser", []), "_selectPackage_", [aPackage]);
+    return self;
+}
+}),
+smalltalk.HLPackagesListWidget);
+
+
+
+smalltalk.addClass('HLInspector', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+
+smalltalk.addClass('HLSUnit', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+fn: function () {
+    var self = this;
+    return true;
+}
+}),
+smalltalk.HLSUnit.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+fn: function () {
+    var self = this;
+    return "SUnit";
+}
+}),
+smalltalk.HLSUnit.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+fn: function () {
+    var self = this;
+    return 1000;
+}
+}),
+smalltalk.HLSUnit.klass);
+
+
+smalltalk.addClass('HLTabManager', smalltalk.HLWidget, ['tabs', 'activeTab', 'announcer'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_activate_",
+smalltalk.method({
+selector: "activate:",
+fn: function (aTab) {
+    var self = this;
+    var $1;
+    self['@activeTab'] = aTab;
+    smalltalk.send(self, "_refresh", []);
+    $1 = smalltalk.send(self, "_show_", [aTab]);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_activeTab",
+smalltalk.method({
+selector: "activeTab",
+fn: function () {
+    var self = this;
+    return self['@activeTab'];
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_addTab_",
+smalltalk.method({
+selector: "addTab:",
+fn: function (aTab) {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_tabs", []), "_add_", [aTab]);
+    smalltalk.send(self, "_activate_", [aTab]);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@announcer']) == nil || $receiver == undefined) {
+        self['@announcer'] = smalltalk.send(smalltalk.Announcer || Announcer, "_new", []);
+        $1 = self['@announcer'];
+    } else {
+        $1 = self['@announcer'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_refresh",
+smalltalk.method({
+selector: "refresh",
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(window, "_jQuery_", [".navbar"]), "_remove", []);
+    smalltalk.send(smalltalk.send(window, "_jQuery_", ["#container"]), "_remove", []);
+    smalltalk.send(self, "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_removeTab_",
+smalltalk.method({
+selector: "removeTab:",
+fn: function (aTab) {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_tabs", []), "_includes_", [aTab]);
+    if (!smalltalk.assert($1)) {
+        return self;
+    }
+    smalltalk.send(smalltalk.send(self, "_tabs", []), "_remove_", [aTab]);
+    smalltalk.send(self, "_refresh", []);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_renderAddOn_",
+smalltalk.method({
+selector: "renderAddOn:",
+fn: function (html) {
+    var self = this;
+    var $1, $3, $4, $5, $7, $8, $6, $2;
+    $1 = smalltalk.send(html, "_li", []);
+    smalltalk.send($1, "_class_", ["dropdown"]);
+    $2 = smalltalk.send($1, "_with_", [function () {$3 = smalltalk.send(html, "_a", []);smalltalk.send($3, "_class_", ["dropdown-toggle"]);smalltalk.send($3, "_at_put_", ["data-toggle", "dropdown"]);$4 = smalltalk.send($3, "_with_", [function () {smalltalk.send(html, "_with_", ["Open..."]);return smalltalk.send(smalltalk.send(html, "_tag_", ["b"]), "_class_", ["caret"]);}]);$4;$5 = smalltalk.send(html, "_ul", []);smalltalk.send($5, "_class_", ["dropdown-menu"]);$6 = smalltalk.send($5, "_with_", [function () {return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.HLWidget || HLWidget, "_withAllSubclasses", []), "_select_", [function (each) {return smalltalk.send(each, "_canBeOpenAsTab", []);}]), "_sorted_", [function (a, b) {return smalltalk.send(smalltalk.send(a, "_tabPriority", []), "__lt", [smalltalk.send(b, "_tabPriority", [])]);}]), "_do_", [function (each) {return smalltalk.send(smalltalk.send(html, "_li", []), "_with_", [function () {$7 = smalltalk.send(html, "_a", []);smalltalk.send($7, "_with_", [smalltalk.send(each, "_tabLabel", [])]);$8 = smalltalk.send($7, "_onClick_", [function () {return smalltalk.send(each, "_openAsTab", []);}]);return $8;}]);}]);}]);return $6;}]);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html) {
+    var self = this;
+    var $1, $3, $4, $2;
+    $1 = smalltalk.send(html, "_div", []);
+    smalltalk.send($1, "_class_", ["navbar navbar-fixed-top"]);
+    $2 = smalltalk.send($1, "_with_", [function () {$3 = smalltalk.send(html, "_div", []);smalltalk.send($3, "_class_", ["navbar-inner"]);$4 = smalltalk.send($3, "_with_", [function () {return smalltalk.send(self, "_renderTabsOn_", [html]);}]);return $4;}]);
+    smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["container"]);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_renderTabsOn_",
+smalltalk.method({
+selector: "renderTabsOn:",
+fn: function (html) {
+    var self = this;
+    var $1, $3, $5, $4, $7, $8, $6, $2;
+    $1 = smalltalk.send(html, "_ul", []);
+    smalltalk.send($1, "_class_", ["nav"]);
+    $2 = smalltalk.send($1, "_with_", [function () {smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [function (each) {$3 = smalltalk.send(html, "_li", []);$5 = smalltalk.send(each, "_isActive", []);if (smalltalk.assert($5)) {$4 = "active";} else {$4 = "inactive";}smalltalk.send($3, "_class_", [$4]);$6 = smalltalk.send($3, "_with_", [function () {$7 = smalltalk.send(html, "_a", []);smalltalk.send($7, "_with_", [function () {smalltalk.send(smalltalk.send(smalltalk.send(html, "_tag_", ["i"]), "_class_", ["icon-remove-circle"]), "_onClick_", [function () {return smalltalk.send(self, "_removeTab_", [each]);}]);return smalltalk.send(html, "_with_", [smalltalk.send(each, "_label", [])]);}]);$8 = smalltalk.send($7, "_onClick_", [function () {return smalltalk.send(each, "_activate", []);}]);return $8;}]);return $6;}]);return smalltalk.send(self, "_renderAddOn_", [html]);}]);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_show_",
+smalltalk.method({
+selector: "show:",
+fn: function (aTab) {
+    var self = this;
+    smalltalk.send(smalltalk.send(window, "_jQuery_", ["#container"]), "_empty", []);
+    smalltalk.send(smalltalk.send(aTab, "_widget", []), "_appendToJQuery_", [smalltalk.send("#container", "_asJQuery", [])]);
+    return self;
+}
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_tabs",
+smalltalk.method({
+selector: "tabs",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@tabs']) == nil || $receiver == undefined) {
+        self['@tabs'] = smalltalk.send(smalltalk.OrderedCollection || OrderedCollection, "_new", []);
+        $1 = self['@tabs'];
+    } else {
+        $1 = self['@tabs'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLTabManager);
+
+
+smalltalk.HLTabManager.klass.iVarNames = ['current'];
+smalltalk.addMethod(
+"_current",
+smalltalk.method({
+selector: "current",
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@current']) == nil || $receiver == undefined) {
+        self['@current'] = smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
+        $1 = self['@current'];
+    } else {
+        $1 = self['@current'];
+    }
+    return $1;
+}
+}),
+smalltalk.HLTabManager.klass);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_current", []), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]);
+    return self;
+}
+}),
+smalltalk.HLTabManager.klass);
+
+smalltalk.addMethod(
+"_new",
+smalltalk.method({
+selector: "new",
+fn: function () {
+    var self = this;
+    smalltalk.send(self, "_shouldNotImplement", []);
+    return self;
+}
+}),
+smalltalk.HLTabManager.klass);
+
+
+smalltalk.addClass('HLTranscript', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+fn: function () {
+    var self = this;
+    return true;
+}
+}),
+smalltalk.HLTranscript.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+fn: function () {
+    var self = this;
+    return "Transcript";
+}
+}),
+smalltalk.HLTranscript.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+fn: function () {
+    var self = this;
+    return 600;
+}
+}),
+smalltalk.HLTranscript.klass);
+
+
+smalltalk.addClass('HLWorkspace', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+fn: function () {
+    var self = this;
+    return true;
+}
+}),
+smalltalk.HLWorkspace.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+fn: function () {
+    var self = this;
+    return "Workspace";
+}
+}),
+smalltalk.HLWorkspace.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+fn: function () {
+    var self = this;
+    return 10;
+}
+}),
+smalltalk.HLWorkspace.klass);
+
+
+smalltalk.addMethod(
+"_heliosListIcon",
+smalltalk.method({
+selector: "heliosListIcon",
+fn: function () {
+    var self = this;
+    return "";
+}
+}),
+smalltalk.Object);
+

+ 1613 - 0
js/Helios-Widgets.js

@@ -0,0 +1,1613 @@
+smalltalk.addPackage('Helios-Widgets', {});
+smalltalk.addClass('HLTab', smalltalk.Object, ['widget', 'label'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_activate",
+smalltalk.method({
+selector: "activate",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_manager", []), "_activate_", [self]);
+    return self;
+},
+args: [],
+source: "activate\x0a\x09self manager activate: self",
+messageSends: ["activate:", "manager"],
+referencedClasses: []
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_add",
+smalltalk.method({
+selector: "add",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_manager", []), "_addTab_", [self]);
+    return self;
+},
+args: [],
+source: "add\x0a\x09self manager addTab: self",
+messageSends: ["addTab:", "manager"],
+referencedClasses: []
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_isActive",
+smalltalk.method({
+selector: "isActive",
+category: 'testing',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(smalltalk.send(self, "_manager", []), "_activeTab", []), "__eq", [self]);
+    return $1;
+},
+args: [],
+source: "isActive\x0a\x09^ self manager activeTab = self",
+messageSends: ["=", "activeTab", "manager"],
+referencedClasses: []
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_label",
+smalltalk.method({
+selector: "label",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@label']) == nil || $receiver == undefined) {
+        $1 = "";
+    } else {
+        $1 = self['@label'];
+    }
+    return $1;
+},
+args: [],
+source: "label\x0a\x09^ label ifNil: [ '' ]",
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_label_",
+smalltalk.method({
+selector: "label:",
+category: 'accessing',
+fn: function (aString) {
+    var self = this;
+    self['@label'] = aString;
+    return self;
+},
+args: ["aString"],
+source: "label: aString\x0a\x09label := aString",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_manager",
+smalltalk.method({
+selector: "manager",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.HLTabManager || HLTabManager, "_current", []);
+    return $1;
+},
+args: [],
+source: "manager\x0a\x09^ HLTabManager current",
+messageSends: ["current"],
+referencedClasses: ["HLTabManager"]
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_widget",
+smalltalk.method({
+selector: "widget",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return self['@widget'];
+},
+args: [],
+source: "widget\x0a\x09^ widget",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLTab);
+
+smalltalk.addMethod(
+"_widget_",
+smalltalk.method({
+selector: "widget:",
+category: 'accessing',
+fn: function (aWidget) {
+    var self = this;
+    self['@widget'] = aWidget;
+    return self;
+},
+args: ["aWidget"],
+source: "widget: aWidget\x0a\x09widget := aWidget",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLTab);
+
+
+smalltalk.addMethod(
+"_on_labelled_",
+smalltalk.method({
+selector: "on:labelled:",
+category: 'instance creation',
+fn: function (aWidget, aString) {
+    var self = this;
+    var $2, $3, $1;
+    $2 = smalltalk.send(self, "_new", []);
+    smalltalk.send($2, "_widget_", [aWidget]);
+    smalltalk.send($2, "_label_", [aString]);
+    $3 = smalltalk.send($2, "_yourself", []);
+    $1 = $3;
+    return $1;
+},
+args: ["aWidget", "aString"],
+source: "on: aWidget labelled: aString\x0a\x09^ self new\x0a\x09\x09widget: aWidget;\x0a\x09\x09label: aString;\x0a\x09\x09yourself",
+messageSends: ["widget:", "new", "label:", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLTab.klass);
+
+
+smalltalk.addClass('HLWidget', smalltalk.Widget, ['rootDiv'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_announce_",
+smalltalk.method({
+selector: "announce:",
+category: 'announces',
+fn: function (anObject) {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_announcer", []), "_announce_", [anObject]);
+    return self;
+},
+args: ["anObject"],
+source: "announce: anObject\x0a\x09self announcer announce: anObject",
+messageSends: ["announce:", "announcer"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_manager", []), "_announcer", []);
+    return $1;
+},
+args: [],
+source: "announcer\x0a\x09^ self manager announcer",
+messageSends: ["announcer", "manager"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+category: 'initialization',
+fn: function () {
+    var self = this;
+    smalltalk.send(self, "_initialize", [], smalltalk.Widget);
+    smalltalk.send(self, "_subscribe", []);
+    return self;
+},
+args: [],
+source: "initialize\x0a\x09super initialize.\x0a    self subscribe",
+messageSends: ["initialize", "subscribe"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_manager",
+smalltalk.method({
+selector: "manager",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.HLTabManager || HLTabManager, "_current", []);
+    return $1;
+},
+args: [],
+source: "manager\x0a\x09^ HLTabManager current",
+messageSends: ["current"],
+referencedClasses: ["HLTabManager"]
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_on_do_",
+smalltalk.method({
+selector: "on:do:",
+category: 'announces',
+fn: function (anAnnouncement, aBlock) {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_announcer", []), "_on_do_", [anAnnouncement, aBlock]);
+    return self;
+},
+args: ["anAnnouncement", "aBlock"],
+source: "on: anAnnouncement do: aBlock\x0a\x09self announcer on: anAnnouncement do: aBlock",
+messageSends: ["on:do:", "announcer"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_refresh",
+smalltalk.method({
+selector: "refresh",
+category: 'updating',
+fn: function () {
+    var self = this;
+    if (($receiver = self['@rootDiv']) == nil || $receiver == undefined) {
+        return self;
+    } else {
+        self['@rootDiv'];
+    }
+    smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_empty", []);
+    smalltalk.send(function (html) {return smalltalk.send(self, "_renderContentOn_", [html]);}, "_appendToJQuery_", [smalltalk.send(self['@rootDiv'], "_asJQuery", [])]);
+    return self;
+},
+args: [],
+source: "refresh\x0a\x09rootDiv ifNil: [ ^ self ].\x0a    \x0a\x09rootDiv asJQuery empty.\x0a    [ :html | self renderContentOn: html ] appendToJQuery: rootDiv asJQuery",
+messageSends: ["ifNil:", "empty", "asJQuery", "appendToJQuery:", "renderContentOn:"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    return self;
+},
+args: ["html"],
+source: "renderContentOn: html\x0a",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    self['@rootDiv'] = smalltalk.send(smalltalk.send(html, "_div", []), "_with_", [function () {return smalltalk.send(self, "_renderContentOn_", [html]);}]);
+    return self;
+},
+args: ["html"],
+source: "renderOn: html\x0a\x09rootDiv := html div with: [\x0a    \x09self renderContentOn: html ]",
+messageSends: ["with:", "renderContentOn:", "div"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_subscribe",
+smalltalk.method({
+selector: "subscribe",
+category: 'initialization',
+fn: function () {
+    var self = this;
+    return self;
+},
+args: [],
+source: "subscribe",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+category: 'testing',
+fn: function () {
+    var self = this;
+    return false;
+},
+args: [],
+source: "canBeOpenAsTab\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWidget.klass);
+
+smalltalk.addMethod(
+"_openAsTab",
+smalltalk.method({
+selector: "openAsTab",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(smalltalk.HLTabManager || HLTabManager, "_current", []), "_addTab_", [smalltalk.send(smalltalk.HLTab || HLTab, "_on_labelled_", [smalltalk.send(self, "_new", []), smalltalk.send(self, "_tabLabel", [])])]);
+    return self;
+},
+args: [],
+source: "openAsTab\x0a\x09HLTabManager current addTab: (HLTab on: self new labelled: self tabLabel)",
+messageSends: ["addTab:", "on:labelled:", "new", "tabLabel", "current"],
+referencedClasses: ["HLTab", "HLTabManager"]
+}),
+smalltalk.HLWidget.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return "Tab";
+},
+args: [],
+source: "tabLabel\x0a\x09^ 'Tab'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWidget.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return 500;
+},
+args: [],
+source: "tabPriority\x0a\x09^ 500",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWidget.klass);
+
+
+smalltalk.addClass('HLBrowser', smalltalk.HLWidget, ['environment', 'selectedPackage', 'selectedClass', 'packagesListWidget', 'classesListWidget'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_classesListWidget",
+smalltalk.method({
+selector: "classesListWidget",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@classesListWidget']) == nil ||
+        $receiver == undefined) {
+        self['@classesListWidget'] = smalltalk.send(smalltalk.HLClassesListWidget || HLClassesListWidget, "_on_", [self]);
+        $1 = self['@classesListWidget'];
+    } else {
+        $1 = self['@classesListWidget'];
+    }
+    return $1;
+},
+args: [],
+source: "classesListWidget\x0a\x09^ classesListWidget ifNil: [\x0a      \x09classesListWidget := HLClassesListWidget on: self ]",
+messageSends: ["ifNil:", "on:"],
+referencedClasses: ["HLClassesListWidget"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@environment']) == nil || $receiver == undefined) {
+        self['@environment'] = smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []);
+        $1 = self['@environment'];
+    } else {
+        $1 = self['@environment'];
+    }
+    return $1;
+},
+args: [],
+source: "environment\x0a\x09^ environment ifNil: [ environment := Smalltalk current ]",
+messageSends: ["ifNil:", "current"],
+referencedClasses: ["Smalltalk"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_environment_",
+smalltalk.method({
+selector: "environment:",
+category: 'accessing',
+fn: function (anEnvironment) {
+    var self = this;
+    self['@environment'] = anEnvironment;
+    return self;
+},
+args: ["anEnvironment"],
+source: "environment: anEnvironment\x0a\x09environment := anEnvironment",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_packagesListWidget",
+smalltalk.method({
+selector: "packagesListWidget",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@packagesListWidget']) == nil ||
+        $receiver == undefined) {
+        self['@packagesListWidget'] = smalltalk.send(smalltalk.HLPackagesListWidget || HLPackagesListWidget, "_on_", [self]);
+        $1 = self['@packagesListWidget'];
+    } else {
+        $1 = self['@packagesListWidget'];
+    }
+    return $1;
+},
+args: [],
+source: "packagesListWidget\x0a\x09^ packagesListWidget ifNil: [\x0a      \x09packagesListWidget := HLPackagesListWidget on: self ]",
+messageSends: ["ifNil:", "on:"],
+referencedClasses: ["HLPackagesListWidget"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(html,"_with_",[smalltalk.send((smalltalk.HLContainer || HLContainer),"_with_",[smalltalk.send((smalltalk.HLHorizontalSplitter || HLHorizontalSplitter),"_with_with_",[smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",[smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",[smalltalk.send(self,"_packagesListWidget",[]),smalltalk.send(self,"_classesListWidget",[])]),smalltalk.send((smalltalk.HLVerticalSplitter || HLVerticalSplitter),"_with_with_",["Protocols","Methods"])]),"Source Code"])])]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09html with: (HLContainer with: (HLHorizontalSplitter \x0a    \x09with: (HLVerticalSplitter\x0a        \x09with: (HLVerticalSplitter\x0a            \x09with: self packagesListWidget\x0a                with: self classesListWidget)\x0a            with: (HLVerticalSplitter\x0a            \x09with: 'Protocols'\x0a                with: 'Methods')) \x0a        with: 'Source Code'))",
+messageSends: ["with:", "with:with:", "packagesListWidget", "classesListWidget"],
+referencedClasses: ["HLVerticalSplitter", "HLHorizontalSplitter", "HLContainer"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_renderTopPanesOn_",
+smalltalk.method({
+selector: "renderTopPanesOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    var $1, $2, $3, $4, $5, $6, $7, $8;
+    $1 = smalltalk.send(html, "_div", []);
+    smalltalk.send($1, "_class_", ["pane"]);
+    $2 = smalltalk.send($1, "_with_", [smalltalk.send(self, "_packagesListWidget", [])]);
+    $3 = smalltalk.send(html, "_div", []);
+    smalltalk.send($3, "_class_", ["pane"]);
+    $4 = smalltalk.send($3, "_with_", [smalltalk.send(self, "_classesListWidget", [])]);
+    $5 = smalltalk.send(html, "_div", []);
+    smalltalk.send($5, "_class_", ["pane"]);
+    $6 = smalltalk.send($5, "_with_", ["hello"]);
+    $7 = smalltalk.send(html, "_div", []);
+    smalltalk.send($7, "_class_", ["pane"]);
+    $8 = smalltalk.send($7, "_with_", ["world"]);
+    return self;
+},
+args: ["html"],
+source: "renderTopPanesOn: html\x0a\x09html div class: 'pane'; with: self packagesListWidget.\x0a\x09html div class: 'pane'; with: self classesListWidget.\x0a    html div class: 'pane'; with: 'hello'.\x0a\x09html div class: 'pane'; with: 'world'",
+messageSends: ["class:", "div", "with:", "packagesListWidget", "classesListWidget"],
+referencedClasses: []
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_selectPackage_",
+smalltalk.method({
+selector: "selectPackage:",
+category: 'accessing',
+fn: function (aPackage) {
+    var self = this;
+    self['@selectedPackage'] = aPackage;
+    self['@selectedClass'] = nil;
+    smalltalk.send(smalltalk.send(self, "_classesListWidget", []), "_package_", [aPackage]);
+    return self;
+},
+args: ["aPackage"],
+source: "selectPackage: aPackage\x0a\x09selectedPackage := aPackage.\x0a    selectedClass := nil.\x0a    \x0a    self classesListWidget package: aPackage.",
+messageSends: ["package:", "classesListWidget"],
+referencedClasses: []
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_selectedPackage",
+smalltalk.method({
+selector: "selectedPackage",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return self['@selectedPackage'];
+},
+args: [],
+source: "selectedPackage\x0a\x09^ selectedPackage",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowser);
+
+
+smalltalk.HLBrowser.klass.iVarNames = ['nextId'];
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+category: 'testing',
+fn: function () {
+    var self = this;
+    return true;
+},
+args: [],
+source: "canBeOpenAsTab\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowser.klass);
+
+smalltalk.addMethod(
+"_nextId",
+smalltalk.method({
+selector: "nextId",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@nextId']) == nil || $receiver == undefined) {
+        self['@nextId'] = 0;
+        self['@nextId'];
+    } else {
+        self['@nextId'];
+    }
+    $1 = smalltalk.send("browser_", "__comma", [smalltalk.send(smalltalk.send(self['@nextId'], "__plus", [1]), "_asString", [])]);
+    return $1;
+},
+args: [],
+source: "nextId\x0a\x09nextId ifNil: [ nextId := 0 ].\x0a    ^ 'browser_', (nextId + 1) asString",
+messageSends: ["ifNil:", ",", "asString", "+"],
+referencedClasses: []
+}),
+smalltalk.HLBrowser.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return "Browser";
+},
+args: [],
+source: "tabLabel\x0a\x09^ 'Browser'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowser.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return 0;
+},
+args: [],
+source: "tabPriority\x0a\x09^ 0",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowser.klass);
+
+
+smalltalk.addClass('HLDebugger', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+
+smalltalk.addClass('HLFocusableWidget', smalltalk.HLWidget, ['hiddenInput'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_blur",
+smalltalk.method({
+selector: "blur",
+category: 'events',
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_removeClass_", [smalltalk.send(self, "_focusClass", [])]);
+    return self;
+},
+args: [],
+source: "blur\x0a\x09rootDiv asJQuery removeClass: self focusClass.",
+messageSends: ["removeClass:", "focusClass", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_focus",
+smalltalk.method({
+selector: "focus",
+category: 'events',
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_addClass_", [smalltalk.send(self, "_focusClass", [])]);
+    return self;
+},
+args: [],
+source: "focus\x0a\x09rootDiv asJQuery addClass: self focusClass",
+messageSends: ["addClass:", "focusClass", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_focusClass",
+smalltalk.method({
+selector: "focusClass",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return "focused";
+},
+args: [],
+source: "focusClass\x0a\x09^ 'focused'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_hasFocus",
+smalltalk.method({
+selector: "hasFocus",
+category: 'events',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self['@rootDiv'], "_notNil", []), "_and_", [function () {return smalltalk.send(smalltalk.send(self['@rootDiv'], "_asJQuery", []), "_hasClass_", [smalltalk.send(self, "_focusClass", [])]);}]);
+    return $1;
+},
+args: [],
+source: "hasFocus\x0a\x09^ rootDiv notNil and: [ rootDiv asJQuery hasClass: self focusClass ]",
+messageSends: ["and:", "hasClass:", "focusClass", "asJQuery", "notNil"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    return self;
+},
+args: ["html"],
+source: "renderContentOn: html",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_renderHiddenInputOn_",
+smalltalk.method({
+selector: "renderHiddenInputOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    var $1, $2;
+    $1 = smalltalk.send(html, "_input", []);
+    smalltalk.send($1, "_style_", ["position: absolute; left: -100000px;"]);
+    smalltalk.send($1, "_onBlur_", [function () {return smalltalk.send(self, "_blur", []);}]);
+    $2 = smalltalk.send($1, "_onFocus_", [function () {return smalltalk.send(self, "_focus", []);}]);
+    self['@hiddenInput'] = $2;
+    return self;
+},
+args: ["html"],
+source: "renderHiddenInputOn: html\x0a\x09hiddenInput := html input\x0a    \x09style: 'position: absolute; left: -100000px;';\x0a    \x09onBlur: [ self blur ];\x0a        onFocus: [ self focus ]",
+messageSends: ["style:", "input", "onBlur:", "blur", "onFocus:", "focus"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    var $1, $2;
+    smalltalk.send(self, "_renderHiddenInputOn_", [html]);
+    $1 = smalltalk.send(html, "_div", []);
+    smalltalk.send($1, "_class_", ["hl_widget"]);
+    smalltalk.send($1, "_onClick_", [function () {return smalltalk.send(smalltalk.send(self['@hiddenInput'], "_asJQuery", []), "_focus", []);}]);
+    $2 = smalltalk.send($1, "_with_", [function () {return smalltalk.send(self, "_renderContentOn_", [html]);}]);
+    self['@rootDiv'] = $2;
+    return self;
+},
+args: ["html"],
+source: "renderOn: html\x0a\x09self renderHiddenInputOn: html.\x0a    \x0a    rootDiv := html div \x0a    \x09class: 'hl_widget'; \x0a        onClick: [ hiddenInput asJQuery focus ];\x0a        with: [\x0a\x09\x09\x09self renderContentOn: html ]",
+messageSends: ["renderHiddenInputOn:", "class:", "div", "onClick:", "focus", "asJQuery", "with:", "renderContentOn:"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+
+
+smalltalk.addClass('HLListWidget', smalltalk.HLFocusableWidget, ['items', 'selectedItem'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_activateListItem_",
+smalltalk.method({
+selector: "activateListItem:",
+category: 'actions',
+fn: function (aListItem) {
+    var self = this;
+    smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aListItem, "_asJQuery", []), "_parent", []), "_children", []), "_removeClass_", ["active"]);
+    smalltalk.send(smalltalk.send(aListItem, "_asJQuery", []), "_addClass_", ["active"]);
+    return self;
+},
+args: ["aListItem"],
+source: "activateListItem: aListItem\x0a\x09aListItem asJQuery parent children removeClass: 'active'.\x0a\x09aListItem asJQuery addClass: 'active'",
+messageSends: ["removeClass:", "children", "parent", "asJQuery", "addClass:"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_cssClassForItem_",
+smalltalk.method({
+selector: "cssClassForItem:",
+category: 'accessing',
+fn: function (anObject) {
+    var self = this;
+    var $2, $1;
+    $2 = smalltalk.send(smalltalk.send(self, "_selectedItem", []), "__eq", [anObject]);
+    if (smalltalk.assert($2)) {
+        $1 = "active";
+    } else {
+        $1 = "inactive";
+    }
+    return $1;
+},
+args: ["anObject"],
+source: "cssClassForItem: anObject\x0a\x09^ self selectedItem = anObject\x0a\x09\x09\x09ifTrue: [ 'active' ]\x0a\x09\x09\x09ifFalse: [ 'inactive' ]",
+messageSends: ["ifTrue:ifFalse:", "=", "selectedItem"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(self, "_subclassResponsibility", []);
+    return $1;
+},
+args: [],
+source: "items\x0a\x09^ self subclassResponsibility",
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    var $1, $2;
+    $1 = smalltalk.send(html, "_ul", []);
+    smalltalk.send($1, "_class_", ["nav nav-pills nav-stacked"]);
+    $2 = smalltalk.send($1, "_with_", [function () {return smalltalk.send(smalltalk.send(self, "_items", []), "_do_", [function (each) {return smalltalk.send(self, "_renderItem_on_", [each, html]);}]);}]);
+    return self;
+},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09html ul \x0a    \x09class: 'nav nav-pills nav-stacked';\x0a        with: [ \x0a        \x09self items do: [ :each | \x0a            \x09self renderItem: each on: html ] ]",
+messageSends: ["class:", "ul", "with:", "do:", "renderItem:on:", "items"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderItem_on_",
+smalltalk.method({
+selector: "renderItem:on:",
+category: 'rendering',
+fn: function (anObject, html) {
+    var self = this;
+    var $2, $3, $1;
+    var li;
+    li = smalltalk.send(html, "_li", []);
+    smalltalk.send(li, "_class_", [smalltalk.send(self, "_cssClassForItem_", [anObject])]);
+    $1 = smalltalk.send(li, "_with_", [function () {$2 = smalltalk.send(html, "_a", []);smalltalk.send($2, "_with_", [function () {smalltalk.send(smalltalk.send(html, "_tag_", ["i"]), "_class_", [smalltalk.send(anObject, "_heliosListIcon", [])]);return smalltalk.send(self, "_renderItemLabel_on_", [anObject, html]);}]);$3 = smalltalk.send($2, "_onClick_", [function () {smalltalk.send(self, "_activateListItem_", [li]);return smalltalk.send(self, "_selectItem_", [anObject]);}]);return $3;}]);
+    return self;
+},
+args: ["anObject", "html"],
+source: "renderItem: anObject on: html\x0a\x09| li |\x0a    \x0a\x09li := html li.\x0a    li\x0a    \x09class: (self cssClassForItem: anObject);\x0a        with: [ \x0a        \x09html a\x0a            \x09with: [ \x0a            \x09\x09(html tag: 'i') class: anObject heliosListIcon.\x0a  \x09\x09\x09\x09\x09self renderItemLabel: anObject on: html ];\x0a\x09\x09\x09\x09onClick: [\x0a                  \x09self activateListItem: li.\x0a                \x09self selectItem: anObject ] ]",
+messageSends: ["li", "class:", "cssClassForItem:", "with:", "heliosListIcon", "tag:", "renderItemLabel:on:", "a", "onClick:", "activateListItem:", "selectItem:"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_on_",
+smalltalk.method({
+selector: "renderItemLabel:on:",
+category: 'rendering',
+fn: function (anObject, html) {
+    var self = this;
+    smalltalk.send(html, "_with_", [smalltalk.send(anObject, "_asString", [])]);
+    return self;
+},
+args: ["anObject", "html"],
+source: "renderItemLabel: anObject on: html\x0a\x09html with: anObject asString",
+messageSends: ["with:", "asString"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+category: 'actions',
+fn: function (anObject) {
+    var self = this;
+    smalltalk.send(self, "_selectedItem_", [anObject]);
+    return self;
+},
+args: ["anObject"],
+source: "selectItem: anObject\x0a\x09self selectedItem: anObject",
+messageSends: ["selectedItem:"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_selectedItem",
+smalltalk.method({
+selector: "selectedItem",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@selectedItem']) == nil ||
+        $receiver == undefined) {
+        $1 = smalltalk.send(smalltalk.send(self, "_items", []), "_ifNotEmpty_", [function () {return smalltalk.send(smalltalk.send(self, "_items", []), "_first", []);}]);
+    } else {
+        $1 = self['@selectedItem'];
+    }
+    return $1;
+},
+args: [],
+source: "selectedItem\x0a\x09^ selectedItem ifNil: [ \x0a    \x09self items ifNotEmpty: [ self items first ] ]",
+messageSends: ["ifNil:", "ifNotEmpty:", "first", "items"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_selectedItem_",
+smalltalk.method({
+selector: "selectedItem:",
+category: 'accessing',
+fn: function (anObject) {
+    var self = this;
+    self['@selectedItem'] = anObject;
+    return self;
+},
+args: ["anObject"],
+source: "selectedItem: anObject\x0a\x09selectedItem := anObject",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+
+
+smalltalk.addClass('HLBrowserListWidget', smalltalk.HLListWidget, ['browser'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_browser",
+smalltalk.method({
+selector: "browser",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return self['@browser'];
+},
+args: [],
+source: "browser\x0a\x09^ browser",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_browser_",
+smalltalk.method({
+selector: "browser:",
+category: 'accessing',
+fn: function (aBrowser) {
+    var self = this;
+    self['@browser'] = aBrowser;
+    return self;
+},
+args: ["aBrowser"],
+source: "browser: aBrowser\x0a\x09browser := aBrowser",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+category: 'instance creation',
+fn: function (aBrowser) {
+    var self = this;
+    var $2, $3, $1;
+    $2 = smalltalk.send(self, "_new", []);
+    smalltalk.send($2, "_browser_", [aBrowser]);
+    $3 = smalltalk.send($2, "_yourself", []);
+    $1 = $3;
+    return $1;
+},
+args: ["aBrowser"],
+source: "on: aBrowser\x0a\x09^ self new\x0a    \x09browser: aBrowser;\x0a        yourself",
+messageSends: ["browser:", "new", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget.klass);
+
+
+smalltalk.addClass('HLClassesListWidget', smalltalk.HLBrowserListWidget, ['package'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $2, $1;
+    $2 = smalltalk.send(self, "_package", []);
+    if (($receiver = $2) == nil || $receiver == undefined) {
+        $1 = [];
+    } else {
+        $1 = smalltalk.send(smalltalk.send(self, "_package", []), "_classes", []);
+    }
+    return $1;
+},
+args: [],
+source: "items\x0a\x09^ self package \x0a    \x09ifNil: [ #() ]\x0a  \x09\x09ifNotNil: [ self package classes ]",
+messageSends: ["ifNil:ifNotNil:", "classes", "package"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_package",
+smalltalk.method({
+selector: "package",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return self['@package'];
+},
+args: [],
+source: "package\x0a\x09^ package",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_package_",
+smalltalk.method({
+selector: "package:",
+category: 'accessing',
+fn: function (aPackage) {
+    var self = this;
+    self['@package'] = aPackage;
+    smalltalk.send(self, "_refresh", []);
+    return self;
+},
+args: ["aPackage"],
+source: "package: aPackage\x0a\x09package := aPackage.\x0a    self refresh",
+messageSends: ["refresh"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+
+
+smalltalk.addClass('HLPackagesListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Widgets');
+smalltalk.addMethod(
+"_browser",
+smalltalk.method({
+selector: "browser",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return self['@browser'];
+},
+args: [],
+source: "browser\x0a\x09^ browser",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_browser_",
+smalltalk.method({
+selector: "browser:",
+category: 'accessing',
+fn: function (aBrowser) {
+    var self = this;
+    self['@browser'] = aBrowser;
+    return self;
+},
+args: ["aBrowser"],
+source: "browser: aBrowser\x0a\x09browser := aBrowser",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_browser", []), "_environment", []);
+    return $1;
+},
+args: [],
+source: "environment\x0a\x09^ self browser environment",
+messageSends: ["environment", "browser"],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_environment", []), "_packages", []);
+    return $1;
+},
+args: [],
+source: "items\x0a\x09^ self environment packages",
+messageSends: ["packages", "environment"],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+category: 'actions',
+fn: function (aPackage) {
+    var self = this;
+    smalltalk.send(self, "_selectItem_", [aPackage], smalltalk.HLBrowserListWidget);
+    smalltalk.send(smalltalk.send(self, "_browser", []), "_selectPackage_", [aPackage]);
+    return self;
+},
+args: ["aPackage"],
+source: "selectItem: aPackage\x0a\x09super selectItem: aPackage.\x0a    self browser selectPackage: aPackage",
+messageSends: ["selectItem:", "selectPackage:", "browser"],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+
+
+smalltalk.addClass('HLInspector', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+
+smalltalk.addClass('HLSUnit', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+category: 'testing',
+fn: function () {
+    var self = this;
+    return true;
+},
+args: [],
+source: "canBeOpenAsTab\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSUnit.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return "SUnit";
+},
+args: [],
+source: "tabLabel\x0a\x09^ 'SUnit'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSUnit.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return 1000;
+},
+args: [],
+source: "tabPriority\x0a\x09^ 1000",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSUnit.klass);
+
+
+smalltalk.addClass('HLTabManager', smalltalk.HLWidget, ['tabs', 'activeTab', 'announcer'], 'Helios-Widgets');
+smalltalk.addMethod(
+"_activate_",
+smalltalk.method({
+selector: "activate:",
+category: 'accessing',
+fn: function (aTab) {
+    var self = this;
+    var $1;
+    self['@activeTab'] = aTab;
+    smalltalk.send(self, "_refresh", []);
+    $1 = smalltalk.send(self, "_show_", [aTab]);
+    return self;
+},
+args: ["aTab"],
+source: "activate: aTab\x0a\x09activeTab := aTab.\x0a\x09self \x0a\x09\x09refresh;\x0a\x09\x09show: aTab",
+messageSends: ["refresh", "show:"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_activeTab",
+smalltalk.method({
+selector: "activeTab",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return self['@activeTab'];
+},
+args: [],
+source: "activeTab\x0a\x09^ activeTab",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_addTab_",
+smalltalk.method({
+selector: "addTab:",
+category: 'accessing',
+fn: function (aTab) {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_tabs", []), "_add_", [aTab]);
+    smalltalk.send(self, "_activate_", [aTab]);
+    return self;
+},
+args: ["aTab"],
+source: "addTab: aTab\x0a\x09self tabs add: aTab.\x0a    self activate: aTab",
+messageSends: ["add:", "tabs", "activate:"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@announcer']) == nil || $receiver == undefined) {
+        self['@announcer'] = smalltalk.send(smalltalk.Announcer || Announcer, "_new", []);
+        $1 = self['@announcer'];
+    } else {
+        $1 = self['@announcer'];
+    }
+    return $1;
+},
+args: [],
+source: "announcer\x0a\x09^ announcer ifNil: [ announcer := Announcer new ]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["Announcer"]
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_refresh",
+smalltalk.method({
+selector: "refresh",
+category: 'rendering',
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(window, "_jQuery_", [".navbar"]), "_remove", []);
+    smalltalk.send(smalltalk.send(window, "_jQuery_", ["#container"]), "_remove", []);
+    smalltalk.send(self, "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]);
+    return self;
+},
+args: [],
+source: "refresh\x0a\x09(window jQuery: '.navbar') remove.\x0a\x09(window jQuery: '#container') remove.\x0a\x09self appendToJQuery: 'body' asJQuery",
+messageSends: ["remove", "jQuery:", "appendToJQuery:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_removeTab_",
+smalltalk.method({
+selector: "removeTab:",
+category: 'accessing',
+fn: function (aTab) {
+    var self = this;
+    var $1;
+    $1 = smalltalk.send(smalltalk.send(self, "_tabs", []), "_includes_", [aTab]);
+    if (!smalltalk.assert($1)) {
+        return self;
+    }
+    smalltalk.send(smalltalk.send(self, "_tabs", []), "_remove_", [aTab]);
+    smalltalk.send(self, "_refresh", []);
+    return self;
+},
+args: ["aTab"],
+source: "removeTab: aTab\x0a\x09\x22Todo: activate the previously activated tab. Keep a history of tabs selection\x22\x0a\x0a\x09(self tabs includes: aTab) ifFalse: [ ^ self ].\x0a\x0a\x09self tabs remove: aTab.\x0a\x09self refresh",
+messageSends: ["ifFalse:", "includes:", "tabs", "remove:", "refresh"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_renderAddOn_",
+smalltalk.method({
+selector: "renderAddOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    var $1, $3, $4, $5, $7, $8, $6, $2;
+    $1 = smalltalk.send(html, "_li", []);
+    smalltalk.send($1, "_class_", ["dropdown"]);
+    $2 = smalltalk.send($1, "_with_", [function () {$3 = smalltalk.send(html, "_a", []);smalltalk.send($3, "_class_", ["dropdown-toggle"]);smalltalk.send($3, "_at_put_", ["data-toggle", "dropdown"]);$4 = smalltalk.send($3, "_with_", [function () {smalltalk.send(html, "_with_", ["Open..."]);return smalltalk.send(smalltalk.send(html, "_tag_", ["b"]), "_class_", ["caret"]);}]);$4;$5 = smalltalk.send(html, "_ul", []);smalltalk.send($5, "_class_", ["dropdown-menu"]);$6 = smalltalk.send($5, "_with_", [function () {return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.HLWidget || HLWidget, "_withAllSubclasses", []), "_select_", [function (each) {return smalltalk.send(each, "_canBeOpenAsTab", []);}]), "_sorted_", [function (a, b) {return smalltalk.send(smalltalk.send(a, "_tabPriority", []), "__lt", [smalltalk.send(b, "_tabPriority", [])]);}]), "_do_", [function (each) {return smalltalk.send(smalltalk.send(html, "_li", []), "_with_", [function () {$7 = smalltalk.send(html, "_a", []);smalltalk.send($7, "_with_", [smalltalk.send(each, "_tabLabel", [])]);$8 = smalltalk.send($7, "_onClick_", [function () {return smalltalk.send(each, "_openAsTab", []);}]);return $8;}]);}]);}]);return $6;}]);
+    return self;
+},
+args: ["html"],
+source: "renderAddOn: html\x0a    html li \x0a    \x09class: 'dropdown';\x0a        with: [ \x0a\x09\x09\x09html a \x0a        \x09\x09class: 'dropdown-toggle';\x0a           \x09 \x09at: 'data-toggle' put: 'dropdown';\x0a            \x09with: [ \x0a            \x09\x09html with: 'Open...'.\x0a  \x09\x09\x09\x09\x09(html tag: 'b') class: 'caret' ].\x0a           html ul \x0a           \x09\x09class: 'dropdown-menu';\x0a                with: [\x0a                  \x09((HLWidget withAllSubclasses\x0a                    \x09select: [ :each | each canBeOpenAsTab ])\x0a                        sorted: [ :a :b | a tabPriority < b tabPriority ])\x0a                        do: [ :each |\x0a  \x09\x09\x09\x09\x09\x09\x09html li with: [\x0a                      \x09\x09\x09html a \x0a                                \x09with: each tabLabel;\x0a      \x09\x09\x09\x09\x09\x09\x09\x09onClick: [ each openAsTab ] ] ] ] ]",
+messageSends: ["class:", "li", "with:", "a", "at:put:", "tag:", "ul", "do:", "tabLabel", "onClick:", "openAsTab", "sorted:", "<", "tabPriority", "select:", "canBeOpenAsTab", "withAllSubclasses"],
+referencedClasses: ["HLWidget"]
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    var $1, $3, $4, $2;
+    $1 = smalltalk.send(html, "_div", []);
+    smalltalk.send($1, "_class_", ["navbar navbar-fixed-top"]);
+    $2 = smalltalk.send($1, "_with_", [function () {$3 = smalltalk.send(html, "_div", []);smalltalk.send($3, "_class_", ["navbar-inner"]);$4 = smalltalk.send($3, "_with_", [function () {return smalltalk.send(self, "_renderTabsOn_", [html]);}]);return $4;}]);
+    smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["container"]);
+    return self;
+},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09html div \x0a\x09\x09class: 'navbar navbar-fixed-top';\x0a\x09\x09with: [ html div \x0a\x09\x09\x09class: 'navbar-inner';\x0a\x09\x09\x09with: [ self renderTabsOn: html ] ].\x0a\x09html div id: 'container'",
+messageSends: ["class:", "div", "with:", "renderTabsOn:", "id:"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_renderTabsOn_",
+smalltalk.method({
+selector: "renderTabsOn:",
+category: 'rendering',
+fn: function (html) {
+    var self = this;
+    var $1, $3, $5, $4, $7, $8, $6, $2;
+    $1 = smalltalk.send(html, "_ul", []);
+    smalltalk.send($1, "_class_", ["nav"]);
+    $2 = smalltalk.send($1, "_with_", [function () {smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [function (each) {$3 = smalltalk.send(html, "_li", []);$5 = smalltalk.send(each, "_isActive", []);if (smalltalk.assert($5)) {$4 = "active";} else {$4 = "inactive";}smalltalk.send($3, "_class_", [$4]);$6 = smalltalk.send($3, "_with_", [function () {$7 = smalltalk.send(html, "_a", []);smalltalk.send($7, "_with_", [function () {smalltalk.send(smalltalk.send(smalltalk.send(html, "_tag_", ["i"]), "_class_", ["icon-remove-circle"]), "_onClick_", [function () {return smalltalk.send(self, "_removeTab_", [each]);}]);return smalltalk.send(html, "_with_", [smalltalk.send(each, "_label", [])]);}]);$8 = smalltalk.send($7, "_onClick_", [function () {return smalltalk.send(each, "_activate", []);}]);return $8;}]);return $6;}]);return smalltalk.send(self, "_renderAddOn_", [html]);}]);
+    return self;
+},
+args: ["html"],
+source: "renderTabsOn: html\x0a\x09html ul \x0a\x09\x09class: 'nav';\x0a\x09\x09with: [ \x0a        \x09self tabs do: [ :each |\x0a\x09\x09\x09\x09html li \x0a\x09\x09\x09\x09\x09class: (each isActive ifTrue: [ 'active' ] ifFalse: [ 'inactive' ]);\x0a\x09\x09\x09\x09\x09with: [\x0a\x09\x09\x09\x09\x09\x09html a\x0a\x09\x09\x09\x09\x09\x09\x09with: [\x0a      \x09\x09\x09\x09\x09\x09\x09((html tag: 'i') class: 'icon-remove-circle')\x0a  \x09\x09\x09\x09\x09\x09\x09\x09\x09onClick: [ self removeTab: each ].\x0a                              \x09html with: each label ];\x0a\x09\x09\x09\x09\x09\x09\x09onClick: [ each activate ] ] ].\x0a\x09\x09\x09self renderAddOn: html ]",
+messageSends: ["class:", "ul", "with:", "do:", "ifTrue:ifFalse:", "isActive", "li", "onClick:", "removeTab:", "tag:", "label", "a", "activate", "tabs", "renderAddOn:"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_show_",
+smalltalk.method({
+selector: "show:",
+category: 'rendering',
+fn: function (aTab) {
+    var self = this;
+    smalltalk.send(smalltalk.send(window, "_jQuery_", ["#container"]), "_empty", []);
+    smalltalk.send(smalltalk.send(aTab, "_widget", []), "_appendToJQuery_", [smalltalk.send("#container", "_asJQuery", [])]);
+    return self;
+},
+args: ["aTab"],
+source: "show: aTab\x0a\x09(window jQuery: '#container') empty.\x0a\x09aTab widget appendToJQuery: '#container' asJQuery",
+messageSends: ["empty", "jQuery:", "appendToJQuery:", "asJQuery", "widget"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager);
+
+smalltalk.addMethod(
+"_tabs",
+smalltalk.method({
+selector: "tabs",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@tabs']) == nil || $receiver == undefined) {
+        self['@tabs'] = smalltalk.send(smalltalk.OrderedCollection || OrderedCollection, "_new", []);
+        $1 = self['@tabs'];
+    } else {
+        $1 = self['@tabs'];
+    }
+    return $1;
+},
+args: [],
+source: "tabs\x0a\x09^ tabs ifNil: [ tabs := OrderedCollection new ]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["OrderedCollection"]
+}),
+smalltalk.HLTabManager);
+
+
+smalltalk.HLTabManager.klass.iVarNames = ['current'];
+smalltalk.addMethod(
+"_current",
+smalltalk.method({
+selector: "current",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    var $1;
+    if (($receiver = self['@current']) == nil || $receiver == undefined) {
+        self['@current'] = smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
+        $1 = self['@current'];
+    } else {
+        $1 = self['@current'];
+    }
+    return $1;
+},
+args: [],
+source: "current\x0a\x09^ current ifNil: [ current := self basicNew initialize ]",
+messageSends: ["ifNil:", "initialize", "basicNew"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager.klass);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+category: 'initialization',
+fn: function () {
+    var self = this;
+    smalltalk.send(smalltalk.send(self, "_current", []), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]);
+    return self;
+},
+args: [],
+source: "initialize\x0a\x09self current appendToJQuery: 'body' asJQuery",
+messageSends: ["appendToJQuery:", "asJQuery", "current"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager.klass);
+
+smalltalk.addMethod(
+"_new",
+smalltalk.method({
+selector: "new",
+category: 'instance creation',
+fn: function () {
+    var self = this;
+    smalltalk.send(self, "_shouldNotImplement", []);
+    return self;
+},
+args: [],
+source: "new\x0a\x09\x22Use current instead\x22\x0a\x0a\x09self shouldNotImplement",
+messageSends: ["shouldNotImplement"],
+referencedClasses: []
+}),
+smalltalk.HLTabManager.klass);
+
+
+smalltalk.addClass('HLTranscript', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+category: 'testing',
+fn: function () {
+    var self = this;
+    return true;
+},
+args: [],
+source: "canBeOpenAsTab\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLTranscript.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return "Transcript";
+},
+args: [],
+source: "tabLabel\x0a\x09^ 'Transcript'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLTranscript.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return 600;
+},
+args: [],
+source: "tabPriority\x0a\x09^ 600",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLTranscript.klass);
+
+
+smalltalk.addClass('HLWorkspace', smalltalk.HLWidget, [], 'Helios-Widgets');
+
+smalltalk.addMethod(
+"_canBeOpenAsTab",
+smalltalk.method({
+selector: "canBeOpenAsTab",
+category: 'testing',
+fn: function () {
+    var self = this;
+    return true;
+},
+args: [],
+source: "canBeOpenAsTab\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWorkspace.klass);
+
+smalltalk.addMethod(
+"_tabLabel",
+smalltalk.method({
+selector: "tabLabel",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return "Workspace";
+},
+args: [],
+source: "tabLabel\x0a\x09^ 'Workspace'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWorkspace.klass);
+
+smalltalk.addMethod(
+"_tabPriority",
+smalltalk.method({
+selector: "tabPriority",
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return 10;
+},
+args: [],
+source: "tabPriority\x0a\x09^ 10",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLWorkspace.klass);
+
+
+smalltalk.addMethod(
+"_heliosListIcon",
+smalltalk.method({
+selector: "heliosListIcon",
+category: '*Helios-Widgets',
+fn: function () {
+    var self = this;
+    return "";
+},
+args: [],
+source: "heliosListIcon\x0a\x09^ ''",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+

+ 0 - 334
js/Helios.deploy.js

@@ -1,334 +0,0 @@
-smalltalk.addPackage('Helios', {});
-smalltalk.addClass('HLBrowser', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLDebugger', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLInspector', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLSUnit', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLTab', smalltalk.Object, ['widget', 'label'], 'Helios');
-smalltalk.addMethod(
-"_activate",
-smalltalk.method({
-selector: "activate",
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_manager",[]),"_activate_",[self]);
-return self}
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_add",
-smalltalk.method({
-selector: "add",
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_manager",[]),"_addTab_",[self]);
-return self}
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_isActive",
-smalltalk.method({
-selector: "isActive",
-fn: function (){
-var self=this;
-var $1;
-$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_manager",[]),"_activeTab",[]),"__eq",[self]);
-return $1;
-}
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_label",
-smalltalk.method({
-selector: "label",
-fn: function (){
-var self=this;
-var $1;
-if(($receiver = self["@label"]) == nil || $receiver == undefined){
-$1="";
-} else {
-$1=self["@label"];
-};
-return $1;
-}
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_label_",
-smalltalk.method({
-selector: "label:",
-fn: function (aString){
-var self=this;
-self["@label"]=aString;
-return self}
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_manager",
-smalltalk.method({
-selector: "manager",
-fn: function (){
-var self=this;
-var $1;
-$1=smalltalk.send((smalltalk.HLTabManager || HLTabManager),"_current",[]);
-return $1;
-}
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_widget",
-smalltalk.method({
-selector: "widget",
-fn: function (){
-var self=this;
-return self["@widget"];
-}
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_widget_",
-smalltalk.method({
-selector: "widget:",
-fn: function (aWidget){
-var self=this;
-self["@widget"]=aWidget;
-return self}
-}),
-smalltalk.HLTab);
-
-
-smalltalk.addMethod(
-"_on_labelled_",
-smalltalk.method({
-selector: "on:labelled:",
-fn: function (aWidget,aString){
-var self=this;
-var $2,$3,$1;
-$2=smalltalk.send(self,"_new",[]);
-smalltalk.send($2,"_widget_",[aWidget]);
-smalltalk.send($2,"_label_",[aString]);
-$3=smalltalk.send($2,"_yourself",[]);
-$1=$3;
-return $1;
-}
-}),
-smalltalk.HLTab.klass);
-
-
-smalltalk.addClass('HLTabManager', smalltalk.Widget, ['tabs', 'activeTab'], 'Helios');
-smalltalk.addMethod(
-"_activate_",
-smalltalk.method({
-selector: "activate:",
-fn: function (aTab){
-var self=this;
-var $1;
-self["@activeTab"]=aTab;
-smalltalk.send(self,"_refresh",[]);
-$1=smalltalk.send(self,"_show_",[aTab]);
-return self}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_activeTab",
-smalltalk.method({
-selector: "activeTab",
-fn: function (){
-var self=this;
-return self["@activeTab"];
-}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_addTab_",
-smalltalk.method({
-selector: "addTab:",
-fn: function (aTab){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_tabs",[]),"_add_",[aTab]);
-smalltalk.send(self,"_refresh",[]);
-return self}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_refresh",
-smalltalk.method({
-selector: "refresh",
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(window,"_jQuery_",[".navbar"]),"_remove",[]);
-smalltalk.send(smalltalk.send(window,"_jQuery_",["#container"]),"_remove",[]);
-smalltalk.send(self,"_appendToJQuery_",[smalltalk.send("body","_asJQuery",[])]);
-return self}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_removeTab_",
-smalltalk.method({
-selector: "removeTab:",
-fn: function (aTab){
-var self=this;
-var $1;
-$1=smalltalk.send(smalltalk.send(self,"_tabs",[]),"_includes_",[aTab]);
-if(! smalltalk.assert($1)){
-return self;
-};
-smalltalk.send(smalltalk.send(self,"_tabs",[]),"_remove_",[aTab]);
-smalltalk.send(self,"_refresh",[]);
-return self}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_renderOn_",
-smalltalk.method({
-selector: "renderOn:",
-fn: function (html){
-var self=this;
-var $1,$3,$4,$2;
-$1=smalltalk.send(html,"_div",[]);
-smalltalk.send($1,"_class_",["navbar navbar-fixed-top"]);
-$2=smalltalk.send($1,"_with_",[(function(){
-$3=smalltalk.send(html,"_div",[]);
-smalltalk.send($3,"_class_",["navbar-inner"]);
-$4=smalltalk.send($3,"_with_",[(function(){
-return smalltalk.send(self,"_renderTabsOn_",[html]);
-})]);
-return $4;
-})]);
-smalltalk.send(smalltalk.send(html,"_div",[]),"_id_",["container"]);
-return self}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_renderTabsOn_",
-smalltalk.method({
-selector: "renderTabsOn:",
-fn: function (html){
-var self=this;
-var $1,$3,$5,$4,$7,$8,$6,$2;
-$1=smalltalk.send(html,"_ul",[]);
-smalltalk.send($1,"_class_",["nav"]);
-$2=smalltalk.send($1,"_with_",[(function(){
-return smalltalk.send(smalltalk.send(self,"_tabs",[]),"_do_",[(function(each){
-$3=smalltalk.send(html,"_li",[]);
-$5=smalltalk.send(each,"_isActive",[]);
-if(smalltalk.assert($5)){
-$4="active";
-} else {
-$4="inactive";
-};
-smalltalk.send($3,"_class_",[$4]);
-$6=smalltalk.send($3,"_with_",[(function(){
-$7=smalltalk.send(html,"_a",[]);
-smalltalk.send($7,"_with_",[smalltalk.send(each,"_label",[])]);
-$8=smalltalk.send($7,"_onClick_",[(function(){
-return smalltalk.send(each,"_activate",[]);
-})]);
-return $8;
-})]);
-return $6;
-})]);
-})]);
-return self}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_show_",
-smalltalk.method({
-selector: "show:",
-fn: function (aTab){
-var self=this;
-smalltalk.send(smalltalk.send(window,"_jQuery_",["#container"]),"_empty",[]);
-smalltalk.send(smalltalk.send(aTab,"_widget",[]),"_appendToJQuery_",[smalltalk.send("#container","_asJQuery",[])]);
-return self}
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_tabs",
-smalltalk.method({
-selector: "tabs",
-fn: function (){
-var self=this;
-var $1;
-if(($receiver = self["@tabs"]) == nil || $receiver == undefined){
-self["@tabs"]=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_new",[]);
-$1=self["@tabs"];
-} else {
-$1=self["@tabs"];
-};
-return $1;
-}
-}),
-smalltalk.HLTabManager);
-
-
-smalltalk.HLTabManager.klass.iVarNames = ['current'];
-smalltalk.addMethod(
-"_current",
-smalltalk.method({
-selector: "current",
-fn: function (){
-var self=this;
-var $1;
-if(($receiver = self["@current"]) == nil || $receiver == undefined){
-self["@current"]=smalltalk.send(smalltalk.send(self,"_basicNew",[]),"_initialize",[]);
-$1=self["@current"];
-} else {
-$1=self["@current"];
-};
-return $1;
-}
-}),
-smalltalk.HLTabManager.klass);
-
-smalltalk.addMethod(
-"_initialize",
-smalltalk.method({
-selector: "initialize",
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_current",[]),"_appendToJQuery_",[smalltalk.send("body","_asJQuery",[])]);
-return self}
-}),
-smalltalk.HLTabManager.klass);
-
-smalltalk.addMethod(
-"_new",
-smalltalk.method({
-selector: "new",
-fn: function (){
-var self=this;
-smalltalk.send(self,"_shouldNotImplement",[]);
-return self}
-}),
-smalltalk.HLTabManager.klass);
-
-
-smalltalk.addClass('HLTranscript', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLWorkspace', smalltalk.Widget, [], 'Helios');
-
-

+ 0 - 439
js/Helios.js

@@ -1,439 +0,0 @@
-smalltalk.addPackage('Helios', {});
-smalltalk.addClass('HLBrowser', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLDebugger', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLInspector', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLSUnit', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLTab', smalltalk.Object, ['widget', 'label'], 'Helios');
-smalltalk.addMethod(
-"_activate",
-smalltalk.method({
-selector: "activate",
-category: 'accessing',
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_manager",[]),"_activate_",[self]);
-return self},
-args: [],
-source: "activate\x0a\x09self manager activate: self",
-messageSends: ["activate:", "manager"],
-referencedClasses: []
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_add",
-smalltalk.method({
-selector: "add",
-category: 'accessing',
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_manager",[]),"_addTab_",[self]);
-return self},
-args: [],
-source: "add\x0a\x09self manager addTab: self",
-messageSends: ["addTab:", "manager"],
-referencedClasses: []
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_isActive",
-smalltalk.method({
-selector: "isActive",
-category: 'testing',
-fn: function (){
-var self=this;
-var $1;
-$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_manager",[]),"_activeTab",[]),"__eq",[self]);
-return $1;
-},
-args: [],
-source: "isActive\x0a\x09^ self manager activeTab = self",
-messageSends: ["=", "activeTab", "manager"],
-referencedClasses: []
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_label",
-smalltalk.method({
-selector: "label",
-category: 'accessing',
-fn: function (){
-var self=this;
-var $1;
-if(($receiver = self["@label"]) == nil || $receiver == undefined){
-$1="";
-} else {
-$1=self["@label"];
-};
-return $1;
-},
-args: [],
-source: "label\x0a\x09^ label ifNil: [ '' ]",
-messageSends: ["ifNil:"],
-referencedClasses: []
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_label_",
-smalltalk.method({
-selector: "label:",
-category: 'accessing',
-fn: function (aString){
-var self=this;
-self["@label"]=aString;
-return self},
-args: ["aString"],
-source: "label: aString\x0a\x09label := aString",
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_manager",
-smalltalk.method({
-selector: "manager",
-category: 'accessing',
-fn: function (){
-var self=this;
-var $1;
-$1=smalltalk.send((smalltalk.HLTabManager || HLTabManager),"_current",[]);
-return $1;
-},
-args: [],
-source: "manager\x0a\x09^ HLTabManager current",
-messageSends: ["current"],
-referencedClasses: ["HLTabManager"]
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_widget",
-smalltalk.method({
-selector: "widget",
-category: 'accessing',
-fn: function (){
-var self=this;
-return self["@widget"];
-},
-args: [],
-source: "widget\x0a\x09^ widget",
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.HLTab);
-
-smalltalk.addMethod(
-"_widget_",
-smalltalk.method({
-selector: "widget:",
-category: 'accessing',
-fn: function (aWidget){
-var self=this;
-self["@widget"]=aWidget;
-return self},
-args: ["aWidget"],
-source: "widget: aWidget\x0a\x09widget := aWidget",
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.HLTab);
-
-
-smalltalk.addMethod(
-"_on_labelled_",
-smalltalk.method({
-selector: "on:labelled:",
-category: 'instance creation',
-fn: function (aWidget,aString){
-var self=this;
-var $2,$3,$1;
-$2=smalltalk.send(self,"_new",[]);
-smalltalk.send($2,"_widget_",[aWidget]);
-smalltalk.send($2,"_label_",[aString]);
-$3=smalltalk.send($2,"_yourself",[]);
-$1=$3;
-return $1;
-},
-args: ["aWidget", "aString"],
-source: "on: aWidget labelled: aString\x0a\x09^ self new\x0a\x09\x09widget: aWidget;\x0a\x09\x09label: aString;\x0a\x09\x09yourself",
-messageSends: ["widget:", "new", "label:", "yourself"],
-referencedClasses: []
-}),
-smalltalk.HLTab.klass);
-
-
-smalltalk.addClass('HLTabManager', smalltalk.Widget, ['tabs', 'activeTab'], 'Helios');
-smalltalk.addMethod(
-"_activate_",
-smalltalk.method({
-selector: "activate:",
-category: 'accessing',
-fn: function (aTab){
-var self=this;
-var $1;
-self["@activeTab"]=aTab;
-smalltalk.send(self,"_refresh",[]);
-$1=smalltalk.send(self,"_show_",[aTab]);
-return self},
-args: ["aTab"],
-source: "activate: aTab\x0a\x09activeTab := aTab.\x0a\x09self \x0a\x09\x09refresh;\x0a\x09\x09show: aTab",
-messageSends: ["refresh", "show:"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_activeTab",
-smalltalk.method({
-selector: "activeTab",
-category: 'accessing',
-fn: function (){
-var self=this;
-return self["@activeTab"];
-},
-args: [],
-source: "activeTab\x0a\x09^ activeTab",
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_addTab_",
-smalltalk.method({
-selector: "addTab:",
-category: 'accessing',
-fn: function (aTab){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_tabs",[]),"_add_",[aTab]);
-smalltalk.send(self,"_refresh",[]);
-return self},
-args: ["aTab"],
-source: "addTab: aTab\x0a\x09self tabs add: aTab.\x0a\x09self refresh",
-messageSends: ["add:", "tabs", "refresh"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_refresh",
-smalltalk.method({
-selector: "refresh",
-category: 'rendering',
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(window,"_jQuery_",[".navbar"]),"_remove",[]);
-smalltalk.send(smalltalk.send(window,"_jQuery_",["#container"]),"_remove",[]);
-smalltalk.send(self,"_appendToJQuery_",[smalltalk.send("body","_asJQuery",[])]);
-return self},
-args: [],
-source: "refresh\x0a\x09(window jQuery: '.navbar') remove.\x0a\x09(window jQuery: '#container') remove.\x0a\x09self appendToJQuery: 'body' asJQuery",
-messageSends: ["remove", "jQuery:", "appendToJQuery:", "asJQuery"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_removeTab_",
-smalltalk.method({
-selector: "removeTab:",
-category: 'accessing',
-fn: function (aTab){
-var self=this;
-var $1;
-$1=smalltalk.send(smalltalk.send(self,"_tabs",[]),"_includes_",[aTab]);
-if(! smalltalk.assert($1)){
-return self;
-};
-smalltalk.send(smalltalk.send(self,"_tabs",[]),"_remove_",[aTab]);
-smalltalk.send(self,"_refresh",[]);
-return self},
-args: ["aTab"],
-source: "removeTab: aTab\x0a\x09\x22Todo: activate the previously activated tab. Keep a history of tabs selection\x22\x0a\x0a\x09(self tabs includes: aTab) ifFalse: [ ^ self ].\x0a\x0a\x09self tabs remove: aTab.\x0a\x09self refresh",
-messageSends: ["ifFalse:", "includes:", "tabs", "remove:", "refresh"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_renderOn_",
-smalltalk.method({
-selector: "renderOn:",
-category: 'rendering',
-fn: function (html){
-var self=this;
-var $1,$3,$4,$2;
-$1=smalltalk.send(html,"_div",[]);
-smalltalk.send($1,"_class_",["navbar navbar-fixed-top"]);
-$2=smalltalk.send($1,"_with_",[(function(){
-$3=smalltalk.send(html,"_div",[]);
-smalltalk.send($3,"_class_",["navbar-inner"]);
-$4=smalltalk.send($3,"_with_",[(function(){
-return smalltalk.send(self,"_renderTabsOn_",[html]);
-})]);
-return $4;
-})]);
-smalltalk.send(smalltalk.send(html,"_div",[]),"_id_",["container"]);
-return self},
-args: ["html"],
-source: "renderOn: html\x0a\x09html div \x0a\x09\x09class: 'navbar navbar-fixed-top';\x0a\x09\x09with: [ html div \x0a\x09\x09\x09class: 'navbar-inner';\x0a\x09\x09\x09with: [ self renderTabsOn: html ] ].\x0a\x09html div id: 'container'",
-messageSends: ["class:", "div", "with:", "renderTabsOn:", "id:"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_renderTabsOn_",
-smalltalk.method({
-selector: "renderTabsOn:",
-category: 'rendering',
-fn: function (html){
-var self=this;
-var $1,$3,$5,$4,$7,$8,$6,$2;
-$1=smalltalk.send(html,"_ul",[]);
-smalltalk.send($1,"_class_",["nav"]);
-$2=smalltalk.send($1,"_with_",[(function(){
-return smalltalk.send(smalltalk.send(self,"_tabs",[]),"_do_",[(function(each){
-$3=smalltalk.send(html,"_li",[]);
-$5=smalltalk.send(each,"_isActive",[]);
-if(smalltalk.assert($5)){
-$4="active";
-} else {
-$4="inactive";
-};
-smalltalk.send($3,"_class_",[$4]);
-$6=smalltalk.send($3,"_with_",[(function(){
-$7=smalltalk.send(html,"_a",[]);
-smalltalk.send($7,"_with_",[smalltalk.send(each,"_label",[])]);
-$8=smalltalk.send($7,"_onClick_",[(function(){
-return smalltalk.send(each,"_activate",[]);
-})]);
-return $8;
-})]);
-return $6;
-})]);
-})]);
-return self},
-args: ["html"],
-source: "renderTabsOn: html\x0a\x09html ul \x0a\x09\x09class: 'nav';\x0a\x09\x09with: [ self tabs do: [ :each |\x0a\x09\x09\x09html li \x0a\x09\x09\x09\x09class: (each isActive ifTrue: [ 'active' ] ifFalse: [ 'inactive' ]);\x0a\x09\x09\x09\x09with: [\x0a\x09\x09\x09\x09\x09html a\x0a\x09\x09\x09\x09\x09\x09with: each label;\x0a\x09\x09\x09\x09\x09\x09onClick: [ each activate ] ] ] ]",
-messageSends: ["class:", "ul", "with:", "do:", "ifTrue:ifFalse:", "isActive", "li", "label", "a", "onClick:", "activate", "tabs"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_show_",
-smalltalk.method({
-selector: "show:",
-category: 'rendering',
-fn: function (aTab){
-var self=this;
-smalltalk.send(smalltalk.send(window,"_jQuery_",["#container"]),"_empty",[]);
-smalltalk.send(smalltalk.send(aTab,"_widget",[]),"_appendToJQuery_",[smalltalk.send("#container","_asJQuery",[])]);
-return self},
-args: ["aTab"],
-source: "show: aTab\x0a\x09(window jQuery: '#container') empty.\x0a\x09aTab widget appendToJQuery: '#container' asJQuery",
-messageSends: ["empty", "jQuery:", "appendToJQuery:", "asJQuery", "widget"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager);
-
-smalltalk.addMethod(
-"_tabs",
-smalltalk.method({
-selector: "tabs",
-category: 'accessing',
-fn: function (){
-var self=this;
-var $1;
-if(($receiver = self["@tabs"]) == nil || $receiver == undefined){
-self["@tabs"]=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_new",[]);
-$1=self["@tabs"];
-} else {
-$1=self["@tabs"];
-};
-return $1;
-},
-args: [],
-source: "tabs\x0a\x09^ tabs ifNil: [ tabs := OrderedCollection new ]",
-messageSends: ["ifNil:", "new"],
-referencedClasses: ["OrderedCollection"]
-}),
-smalltalk.HLTabManager);
-
-
-smalltalk.HLTabManager.klass.iVarNames = ['current'];
-smalltalk.addMethod(
-"_current",
-smalltalk.method({
-selector: "current",
-category: 'accessing',
-fn: function (){
-var self=this;
-var $1;
-if(($receiver = self["@current"]) == nil || $receiver == undefined){
-self["@current"]=smalltalk.send(smalltalk.send(self,"_basicNew",[]),"_initialize",[]);
-$1=self["@current"];
-} else {
-$1=self["@current"];
-};
-return $1;
-},
-args: [],
-source: "current\x0a\x09^ current ifNil: [ current := self basicNew initialize ]",
-messageSends: ["ifNil:", "initialize", "basicNew"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager.klass);
-
-smalltalk.addMethod(
-"_initialize",
-smalltalk.method({
-selector: "initialize",
-category: 'initialization',
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self,"_current",[]),"_appendToJQuery_",[smalltalk.send("body","_asJQuery",[])]);
-return self},
-args: [],
-source: "initialize\x0a\x09self current appendToJQuery: 'body' asJQuery",
-messageSends: ["appendToJQuery:", "asJQuery", "current"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager.klass);
-
-smalltalk.addMethod(
-"_new",
-smalltalk.method({
-selector: "new",
-category: 'instance creation',
-fn: function (){
-var self=this;
-smalltalk.send(self,"_shouldNotImplement",[]);
-return self},
-args: [],
-source: "new\x0a\x09\x22Use current instead\x22\x0a\x0a\x09self shouldNotImplement",
-messageSends: ["shouldNotImplement"],
-referencedClasses: []
-}),
-smalltalk.HLTabManager.klass);
-
-
-smalltalk.addClass('HLTranscript', smalltalk.Widget, [], 'Helios');
-
-
-smalltalk.addClass('HLWorkspace', smalltalk.Widget, [], 'Helios');
-
-

File diff suppressed because it is too large
+ 4 - 0
js/lib/jQuery/jquery-ui-1.8.24.custom.min.js


+ 5 - 0
st/Helios-Announcements.st

@@ -0,0 +1,5 @@
+Smalltalk current createPackage: 'Helios-Announcements' properties: #{}!
+Object subclass: #HLAnnouncement
+	instanceVariableNames: ''
+	package: 'Helios-Announcements'!
+

+ 191 - 0
st/Helios-Layout.st

@@ -0,0 +1,191 @@
+Smalltalk current createPackage: 'Helios-Layout' properties: #{}!
+Widget subclass: #HLContainer
+	instanceVariableNames: 'splitter'
+	package: 'Helios-Layout'!
+
+!HLContainer methodsFor: 'accessing'!
+
+splitter
+	^ splitter
+!
+
+splitter: aSplitter
+	splitter := aSplitter
+! !
+
+!HLContainer methodsFor: 'rendering'!
+
+renderOn: html
+	html div 
+    	id: 'container'; 
+        with: self splitter.
+        
+   (window jQuery: window) bind: 'resize' do: [ self splitter resize ]
+! !
+
+!HLContainer class methodsFor: 'instance creation'!
+
+with: aSplitter
+	^ self new 
+    	splitter: aSplitter; 
+        yourself
+! !
+
+Widget subclass: #HLPane
+	instanceVariableNames: ''
+	package: 'Helios-Layout'!
+
+HLPane subclass: #HLHorizontalPane
+	instanceVariableNames: ''
+	package: 'Helios-Layout'!
+
+HLPane subclass: #HLVerticalPane
+	instanceVariableNames: ''
+	package: 'Helios-Layout'!
+
+Widget subclass: #HLSplitter
+	instanceVariableNames: 'firstWidget secondWidget firstPane secondPane splitter'
+	package: 'Helios-Layout'!
+
+!HLSplitter methodsFor: 'accessing'!
+
+cssClass
+	^ 'splitter'
+!
+
+firstWidget
+	^ firstWidget
+!
+
+firstWidget: aWidget
+	firstWidget := aWidget
+!
+
+secondWidget
+	^ secondWidget
+!
+
+secondWidget: aWidget
+	secondWidget := aWidget
+! !
+
+!HLSplitter methodsFor: 'rendering'!
+
+panesCssClass
+	^ 'panes'
+!
+
+renderOn: html
+	html div class: self panesCssClass; with: [
+		firstPane := html div class: 'pane'; with: self firstWidget.
+    	splitter := html div class: self cssClass.
+    	secondPane := html div class: 'pane'; with: self secondWidget ].
+        
+	self 
+    	setupSplitter;
+        resize
+!
+
+resize
+	self firstWidget isHeliosSplitter ifTrue: [ self firstWidget resize ].
+    self secondWidget isHeliosSplitter ifTrue: [ self secondWidget resize ]
+!
+
+setupSplitter
+! !
+
+!HLSplitter methodsFor: 'testing'!
+
+isHeliosSplitter
+	^ true
+! !
+
+!HLSplitter class methodsFor: 'instance creation'!
+
+with: aWidget with: anotherWidget
+	^ self new
+    		firstWidget: aWidget;
+            secondWidget: anotherWidget;
+            yourself
+! !
+
+HLSplitter subclass: #HLHorizontalSplitter
+	instanceVariableNames: ''
+	package: 'Helios-Layout'!
+
+!HLHorizontalSplitter methodsFor: 'accessing'!
+
+cssClass
+	^ super cssClass, ' horizontal'
+!
+
+panesCssClass
+	^ super panesCssClass, ' horizontal'
+! !
+
+!HLHorizontalSplitter methodsFor: 'actions'!
+
+resize
+	| container position |
+    
+    container := firstPane asJQuery parent.
+    position := splitter asJQuery offset top - container offset top.
+    
+	firstPane asJQuery height: ((position min: container height - 100) max: 100).
+    secondPane asJQuery height: (((container height - position) min: container height - 100) max: 100) - 6.
+    
+   "Put the splitter div back to a relative position" 
+    splitter asJQuery css: 'top' value: 0.
+    
+    super resize
+! !
+
+!HLHorizontalSplitter methodsFor: 'rendering'!
+
+setupSplitter
+	splitter asJQuery draggable: #{ 'axis' -> 'y'. 'stop' -> [ self resize ] }
+! !
+
+HLSplitter subclass: #HLVerticalSplitter
+	instanceVariableNames: ''
+	package: 'Helios-Layout'!
+
+!HLVerticalSplitter methodsFor: 'accessing'!
+
+cssClass
+	^ super cssClass, ' vertical'
+!
+
+panesCssClass
+	^ super panesCssClass, ' vertical'
+! !
+
+!HLVerticalSplitter methodsFor: 'actions'!
+
+resize
+	| container position |
+    
+    container := firstPane asJQuery parent.
+    position := splitter asJQuery offset left - container offset left.
+    
+	firstPane asJQuery width: ((position min: container width - 100) max: 100).
+    secondPane asJQuery width: (((container width - position) min: container width - 100) max: 100) - 6.
+    
+   "Put the splitter div back to a relative position" 
+    splitter asJQuery css: 'left' value: 0.
+    
+    super resize
+! !
+
+!HLVerticalSplitter methodsFor: 'rendering'!
+
+setupSplitter
+	splitter asJQuery draggable: #{ 'axis' -> 'x'. 'stop' -> [ self resize ] }
+! !
+
+!Object methodsFor: '*Helios-Layout'!
+
+isHeliosSplitter
+	^ false
+! !
+

+ 583 - 0
st/Helios-Widgets.st

@@ -0,0 +1,583 @@
+Smalltalk current createPackage: 'Helios-Widgets' properties: #{}!
+Object subclass: #HLTab
+	instanceVariableNames: 'widget label'
+	package: 'Helios-Widgets'!
+
+!HLTab methodsFor: 'accessing'!
+
+activate
+	self manager activate: self
+!
+
+add
+	self manager addTab: self
+!
+
+label
+	^ label ifNil: [ '' ]
+!
+
+label: aString
+	label := aString
+!
+
+manager
+	^ HLTabManager current
+!
+
+widget
+	^ widget
+!
+
+widget: aWidget
+	widget := aWidget
+! !
+
+!HLTab methodsFor: 'testing'!
+
+isActive
+	^ self manager activeTab = self
+! !
+
+!HLTab class methodsFor: 'instance creation'!
+
+on: aWidget labelled: aString
+	^ self new
+		widget: aWidget;
+		label: aString;
+		yourself
+! !
+
+Widget subclass: #HLWidget
+	instanceVariableNames: 'rootDiv'
+	package: 'Helios-Widgets'!
+
+!HLWidget methodsFor: 'accessing'!
+
+announcer
+	^ self manager announcer
+!
+
+manager
+	^ HLTabManager current
+! !
+
+!HLWidget methodsFor: 'announces'!
+
+announce: anObject
+	self announcer announce: anObject
+!
+
+on: anAnnouncement do: aBlock
+	self announcer on: anAnnouncement do: aBlock
+! !
+
+!HLWidget methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+    self subscribe
+!
+
+subscribe
+! !
+
+!HLWidget methodsFor: 'rendering'!
+
+renderContentOn: html
+!
+
+renderOn: html
+	rootDiv := html div with: [
+    	self renderContentOn: html ]
+! !
+
+!HLWidget methodsFor: 'updating'!
+
+refresh
+	rootDiv ifNil: [ ^ self ].
+    
+	rootDiv asJQuery empty.
+    [ :html | self renderContentOn: html ] appendToJQuery: rootDiv asJQuery
+! !
+
+!HLWidget class methodsFor: 'accessing'!
+
+openAsTab
+	HLTabManager current addTab: (HLTab on: self new labelled: self tabLabel)
+!
+
+tabLabel
+	^ 'Tab'
+!
+
+tabPriority
+	^ 500
+! !
+
+!HLWidget class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ false
+! !
+
+HLWidget subclass: #HLBrowser
+	instanceVariableNames: 'environment selectedPackage selectedClass packagesListWidget classesListWidget'
+	package: 'Helios-Widgets'!
+
+!HLBrowser methodsFor: 'accessing'!
+
+classesListWidget
+	^ classesListWidget ifNil: [
+      	classesListWidget := HLClassesListWidget on: self ]
+!
+
+environment
+	^ environment ifNil: [ environment := Smalltalk current ]
+!
+
+environment: anEnvironment
+	environment := anEnvironment
+!
+
+packagesListWidget
+	^ packagesListWidget ifNil: [
+      	packagesListWidget := HLPackagesListWidget on: self ]
+!
+
+selectPackage: aPackage
+	selectedPackage := aPackage.
+    selectedClass := nil.
+    
+    self classesListWidget package: aPackage.
+!
+
+selectedPackage
+	^ selectedPackage
+! !
+
+!HLBrowser methodsFor: 'rendering'!
+
+renderContentOn: html
+	html with: (HLContainer with: (HLHorizontalSplitter 
+    	with: (HLVerticalSplitter
+        	with: (HLVerticalSplitter
+            	with: self packagesListWidget
+                with: self classesListWidget)
+            with: (HLVerticalSplitter
+            	with: 'Protocols'
+                with: 'Methods')) 
+        with: 'Source Code'))
+!
+
+renderTopPanesOn: html
+	html div class: 'pane'; with: self packagesListWidget.
+	html div class: 'pane'; with: self classesListWidget.
+    html div class: 'pane'; with: 'hello'.
+	html div class: 'pane'; with: 'world'
+! !
+
+HLBrowser class instanceVariableNames: 'nextId'!
+
+!HLBrowser class methodsFor: 'accessing'!
+
+nextId
+	nextId ifNil: [ nextId := 0 ].
+    ^ 'browser_', (nextId + 1) asString
+!
+
+tabLabel
+	^ 'Browser'
+!
+
+tabPriority
+	^ 0
+! !
+
+!HLBrowser class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ true
+! !
+
+HLWidget subclass: #HLDebugger
+	instanceVariableNames: ''
+	package: 'Helios-Widgets'!
+
+HLWidget subclass: #HLFocusableWidget
+	instanceVariableNames: 'hiddenInput'
+	package: 'Helios-Widgets'!
+
+!HLFocusableWidget methodsFor: 'accessing'!
+
+focusClass
+	^ 'focused'
+! !
+
+!HLFocusableWidget methodsFor: 'events'!
+
+blur
+	rootDiv asJQuery removeClass: self focusClass.
+!
+
+focus
+	rootDiv asJQuery addClass: self focusClass
+!
+
+hasFocus
+	^ rootDiv notNil and: [ rootDiv asJQuery hasClass: self focusClass ]
+! !
+
+!HLFocusableWidget methodsFor: 'rendering'!
+
+renderContentOn: html
+!
+
+renderHiddenInputOn: html
+	hiddenInput := html input
+    	style: 'position: absolute; left: -100000px;';
+    	onBlur: [ self blur ];
+        onFocus: [ self focus ]
+!
+
+renderOn: html
+	self renderHiddenInputOn: html.
+    
+    rootDiv := html div 
+    	class: 'hl_widget'; 
+        onClick: [ hiddenInput asJQuery focus ];
+        with: [
+			self renderContentOn: html ]
+! !
+
+HLFocusableWidget subclass: #HLListWidget
+	instanceVariableNames: 'items selectedItem'
+	package: 'Helios-Widgets'!
+
+!HLListWidget methodsFor: 'accessing'!
+
+cssClassForItem: anObject
+	^ self selectedItem = anObject
+			ifTrue: [ 'active' ]
+			ifFalse: [ 'inactive' ]
+!
+
+items
+	^ self subclassResponsibility
+!
+
+selectedItem
+	^ selectedItem ifNil: [ 
+    	self items ifNotEmpty: [ self items first ] ]
+!
+
+selectedItem: anObject
+	selectedItem := anObject
+! !
+
+!HLListWidget methodsFor: 'actions'!
+
+activateListItem: aListItem
+	aListItem asJQuery parent children removeClass: 'active'.
+	aListItem asJQuery addClass: 'active'
+!
+
+selectItem: anObject
+	self selectedItem: anObject
+! !
+
+!HLListWidget methodsFor: 'rendering'!
+
+renderContentOn: html
+	html ul 
+    	class: 'nav nav-pills nav-stacked';
+        with: [ 
+        	self items do: [ :each | 
+            	self renderItem: each on: html ] ]
+!
+
+renderItem: anObject on: html
+	| li |
+    
+	li := html li.
+    li
+    	class: (self cssClassForItem: anObject);
+        with: [ 
+        	html a
+            	with: [ 
+            		(html tag: 'i') class: anObject heliosListIcon.
+  					self renderItemLabel: anObject on: html ];
+				onClick: [
+                  	self activateListItem: li.
+                	self selectItem: anObject ] ]
+!
+
+renderItemLabel: anObject on: html
+	html with: anObject asString
+! !
+
+HLListWidget subclass: #HLBrowserListWidget
+	instanceVariableNames: 'browser'
+	package: 'Helios-Widgets'!
+
+!HLBrowserListWidget methodsFor: 'accessing'!
+
+browser
+	^ browser
+!
+
+browser: aBrowser
+	browser := aBrowser
+! !
+
+!HLBrowserListWidget class methodsFor: 'instance creation'!
+
+on: aBrowser
+	^ self new
+    	browser: aBrowser;
+        yourself
+! !
+
+HLBrowserListWidget subclass: #HLClassesListWidget
+	instanceVariableNames: 'package'
+	package: 'Helios-Widgets'!
+
+!HLClassesListWidget methodsFor: 'accessing'!
+
+items
+	^ self package 
+    	ifNil: [ #() ]
+  		ifNotNil: [ self package classes ]
+!
+
+package
+	^ package
+!
+
+package: aPackage
+	package := aPackage.
+    self refresh
+! !
+
+HLBrowserListWidget subclass: #HLPackagesListWidget
+	instanceVariableNames: ''
+	package: 'Helios-Widgets'!
+
+!HLPackagesListWidget methodsFor: 'accessing'!
+
+browser
+	^ browser
+!
+
+browser: aBrowser
+	browser := aBrowser
+!
+
+environment
+	^ self browser environment
+!
+
+items
+	^ self environment packages
+! !
+
+!HLPackagesListWidget methodsFor: 'actions'!
+
+selectItem: aPackage
+	super selectItem: aPackage.
+    self browser selectPackage: aPackage
+! !
+
+HLWidget subclass: #HLInspector
+	instanceVariableNames: ''
+	package: 'Helios-Widgets'!
+
+HLWidget subclass: #HLSUnit
+	instanceVariableNames: ''
+	package: 'Helios-Widgets'!
+
+!HLSUnit class methodsFor: 'accessing'!
+
+tabLabel
+	^ 'SUnit'
+!
+
+tabPriority
+	^ 1000
+! !
+
+!HLSUnit class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ true
+! !
+
+HLWidget subclass: #HLTabManager
+	instanceVariableNames: 'tabs activeTab announcer'
+	package: 'Helios-Widgets'!
+
+!HLTabManager methodsFor: 'accessing'!
+
+activate: aTab
+	activeTab := aTab.
+	self 
+		refresh;
+		show: aTab
+!
+
+activeTab
+	^ activeTab
+!
+
+addTab: aTab
+	self tabs add: aTab.
+    self activate: aTab
+!
+
+announcer
+	^ announcer ifNil: [ announcer := Announcer new ]
+!
+
+removeTab: aTab
+	"Todo: activate the previously activated tab. Keep a history of tabs selection"
+
+	(self tabs includes: aTab) ifFalse: [ ^ self ].
+
+	self tabs remove: aTab.
+	self refresh
+!
+
+tabs
+	^ tabs ifNil: [ tabs := OrderedCollection new ]
+! !
+
+!HLTabManager methodsFor: 'rendering'!
+
+refresh
+	(window jQuery: '.navbar') remove.
+	(window jQuery: '#container') remove.
+	self appendToJQuery: 'body' asJQuery
+!
+
+renderAddOn: html
+    html li 
+    	class: 'dropdown';
+        with: [ 
+			html a 
+        		class: 'dropdown-toggle';
+           	 	at: 'data-toggle' put: 'dropdown';
+            	with: [ 
+            		html with: 'Open...'.
+  					(html tag: 'b') class: 'caret' ].
+           html ul 
+           		class: 'dropdown-menu';
+                with: [
+                  	((HLWidget withAllSubclasses
+                    	select: [ :each | each canBeOpenAsTab ])
+                        sorted: [ :a :b | a tabPriority < b tabPriority ])
+                        do: [ :each |
+  							html li with: [
+                      			html a 
+                                	with: each tabLabel;
+      								onClick: [ each openAsTab ] ] ] ] ]
+!
+
+renderContentOn: html
+	html div 
+		class: 'navbar navbar-fixed-top';
+		with: [ html div 
+			class: 'navbar-inner';
+			with: [ self renderTabsOn: html ] ].
+	html div id: 'container'
+!
+
+renderTabsOn: html
+	html ul 
+		class: 'nav';
+		with: [ 
+        	self tabs do: [ :each |
+				html li 
+					class: (each isActive ifTrue: [ 'active' ] ifFalse: [ 'inactive' ]);
+					with: [
+						html a
+							with: [
+      							((html tag: 'i') class: 'icon-remove-circle')
+  									onClick: [ self removeTab: each ].
+                              	html with: each label ];
+							onClick: [ each activate ] ] ].
+			self renderAddOn: html ]
+!
+
+show: aTab
+	(window jQuery: '#container') empty.
+	aTab widget appendToJQuery: '#container' asJQuery
+! !
+
+HLTabManager class instanceVariableNames: 'current'!
+
+!HLTabManager class methodsFor: 'accessing'!
+
+current
+	^ current ifNil: [ current := self basicNew initialize ]
+! !
+
+!HLTabManager class methodsFor: 'initialization'!
+
+initialize
+	self current appendToJQuery: 'body' asJQuery
+! !
+
+!HLTabManager class methodsFor: 'instance creation'!
+
+new
+	"Use current instead"
+
+	self shouldNotImplement
+! !
+
+HLWidget subclass: #HLTranscript
+	instanceVariableNames: ''
+	package: 'Helios-Widgets'!
+
+!HLTranscript class methodsFor: 'accessing'!
+
+tabLabel
+	^ 'Transcript'
+!
+
+tabPriority
+	^ 600
+! !
+
+!HLTranscript class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ true
+! !
+
+HLWidget subclass: #HLWorkspace
+	instanceVariableNames: ''
+	package: 'Helios-Widgets'!
+
+!HLWorkspace class methodsFor: 'accessing'!
+
+tabLabel
+	^ 'Workspace'
+!
+
+tabPriority
+	^ 10
+! !
+
+!HLWorkspace class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ true
+! !
+
+!Object methodsFor: '*Helios-Widgets'!
+
+heliosListIcon
+	^ ''
+! !
+

+ 0 - 165
st/Helios.st

@@ -1,165 +0,0 @@
-Smalltalk current createPackage: 'Helios' properties: #{}!
-Widget subclass: #HLBrowser
-	instanceVariableNames: ''
-	package: 'Helios'!
-
-Widget subclass: #HLDebugger
-	instanceVariableNames: ''
-	package: 'Helios'!
-
-Widget subclass: #HLInspector
-	instanceVariableNames: ''
-	package: 'Helios'!
-
-Widget subclass: #HLSUnit
-	instanceVariableNames: ''
-	package: 'Helios'!
-
-Object subclass: #HLTab
-	instanceVariableNames: 'widget label'
-	package: 'Helios'!
-
-!HLTab methodsFor: 'accessing'!
-
-activate
-	self manager activate: self
-!
-
-add
-	self manager addTab: self
-!
-
-label
-	^ label ifNil: [ '' ]
-!
-
-label: aString
-	label := aString
-!
-
-manager
-	^ HLTabManager current
-!
-
-widget
-	^ widget
-!
-
-widget: aWidget
-	widget := aWidget
-! !
-
-!HLTab methodsFor: 'testing'!
-
-isActive
-	^ self manager activeTab = self
-! !
-
-!HLTab class methodsFor: 'instance creation'!
-
-on: aWidget labelled: aString
-	^ self new
-		widget: aWidget;
-		label: aString;
-		yourself
-! !
-
-Widget subclass: #HLTabManager
-	instanceVariableNames: 'tabs activeTab'
-	package: 'Helios'!
-
-!HLTabManager methodsFor: 'accessing'!
-
-activate: aTab
-	activeTab := aTab.
-	self 
-		refresh;
-		show: aTab
-!
-
-activeTab
-	^ activeTab
-!
-
-addTab: aTab
-	self tabs add: aTab.
-	self refresh
-!
-
-removeTab: aTab
-	"Todo: activate the previously activated tab. Keep a history of tabs selection"
-
-	(self tabs includes: aTab) ifFalse: [ ^ self ].
-
-	self tabs remove: aTab.
-	self refresh
-!
-
-tabs
-	^ tabs ifNil: [ tabs := OrderedCollection new ]
-! !
-
-!HLTabManager methodsFor: 'rendering'!
-
-refresh
-	(window jQuery: '.navbar') remove.
-	(window jQuery: '#container') remove.
-	self appendToJQuery: 'body' asJQuery
-!
-
-renderOn: html
-	html div 
-		class: 'navbar navbar-fixed-top';
-		with: [ html div 
-			class: 'navbar-inner';
-			with: [ self renderTabsOn: html ] ].
-	html div id: 'container'
-!
-
-renderTabsOn: html
-	html ul 
-		class: 'nav';
-		with: [ self tabs do: [ :each |
-			html li 
-				class: (each isActive ifTrue: [ 'active' ] ifFalse: [ 'inactive' ]);
-				with: [
-					html a
-						with: each label;
-						onClick: [ each activate ] ] ] ]
-!
-
-show: aTab
-	(window jQuery: '#container') empty.
-	aTab widget appendToJQuery: '#container' asJQuery
-! !
-
-HLTabManager class instanceVariableNames: 'current'!
-
-!HLTabManager class methodsFor: 'accessing'!
-
-current
-	^ current ifNil: [ current := self basicNew initialize ]
-! !
-
-!HLTabManager class methodsFor: 'initialization'!
-
-initialize
-	self current appendToJQuery: 'body' asJQuery
-! !
-
-!HLTabManager class methodsFor: 'instance creation'!
-
-new
-	"Use current instead"
-
-	self shouldNotImplement
-! !
-
-Widget subclass: #HLTranscript
-	instanceVariableNames: ''
-	package: 'Helios'!
-
-Widget subclass: #HLWorkspace
-	instanceVariableNames: ''
-	package: 'Helios'!
-

Some files were not shown because too many files changed in this diff