Browse Source

Quite some improvements here

Nicolas Petton 12 years ago
parent
commit
7c75c1e190

+ 123 - 7
css/helios.css

@@ -1,3 +1,7 @@
+body {
+    font-size: 13px;
+}
+
 .clearfix:after {
 	content: ".";
 	display: block;
@@ -23,6 +27,19 @@ a {
     cursor: pointer;
 }
 
+.btn, .btn-group > .btn, .btn-group > .dropdown-menu {
+    font-size: 13px;
+    padding: 2px 13px;
+}
+
+.navbar-inner {
+    min-height: 30px;
+}
+
+.navbar .nav > li > a {
+    padding: 5px 15px;
+}
+
 .navbar-fixed-top i {
     opacity: 0.2;
     margin-right: 10px;
@@ -36,13 +53,33 @@ a {
     border-radius: 0;
     -webkit-border-radius: 0;
     -moz-border-radius: 0;
-    padding: 3px 0;
+    padding: 3px;
     margin: 0;
 }
 
+[class^="icon-"], [class*=" icon-"] {
+    margin-right: 2px;
+}
+
+/* .nav-pills.nav-stacked > li > a { */
+/*     width: 14px; */
+/*     height: 14px; */
+/*     display: inline-block; */
+/*     margin-right: 4px; */
+/* } */
+
+.nav-pills > .active > a, .nav-pills > .active > a:hover {
+    background: #ccc;
+}
+
+.focused .nav-pills > .active > a, .nav-pills > .active > a:hover {
+    background: #08C;
+}
+
+
 #container {
     position: fixed;
-    top: 40px;
+    top: 30px;
     bottom: 0;
     left: 0;
     right: 0;
@@ -62,6 +99,66 @@ a {
     overflow: auto;
 }
 
+#container .panes .pane > div {
+    height: 100%;
+    position: relative;
+}
+
+#container .panes .pane .nav-pills {
+    position: absolute;
+    overflow-y: scroll;
+    top: 0;
+    bottom: 37px;
+    width: 100%;
+    margin: 0;
+}
+
+#container .panes .pane .pane_actions {
+    position: absolute;
+    overflow: hidden;
+    width: 100%;
+    height: 26px;
+    bottom: 0;
+    background: #E5E5E5;
+    border-top: 1px solid #bbb;
+    padding: 5px 0;
+    margin: 0;
+    text-align: center;
+}
+
+#container .panes .pane .pane_actions .info {
+    padding: 10px 5px 5px;
+    font-weight: bold;
+    color: #666;
+    line-height: 20px;
+}
+
+
+#container .panes .pane .pane_actions .btn-group {
+    display: inline;
+    margin-left: 5px;
+}
+
+#container .panes .pane .pane_actions .btn-group .btn {
+    margin: 0;
+}
+
+#container .panes .pane .pane_actions .btn-group.switch .btn.active:first-child {
+    background: #5AD;
+    color: white;
+    text-shadow: 0 1px 0 #333;
+}
+
+#container .panes .pane .pane_actions .btn {
+    margin-left: 5px;
+}
+
+#container .panes .pane .class_side .nav-pills {
+    font-weight: bold;
+    background: #ffd;
+}
+
+
 #container .panes.horizontal > .pane {
     height: 50%;
     min-height: 50px;
@@ -77,11 +174,11 @@ a {
 #container .splitter {
     z-index: 10;
     background: #E6E6E6;
-    outline: 1px solid #bbb;
+    border: 1px solid #bbb;
 }
 
 #container .splitter.vertical {
-    width: 6px;
+    width: 4px;
     height: 100%;
     float: left;
     cursor: e-resize;
@@ -91,14 +188,33 @@ a {
 }
 
 #container .splitter.horizontal {
-    height: 5px;
+    height: 4px;
     cursor: s-resize;
     background-image: url('/images/hsplitter.png');
     background-repeat: no-repeat;
     background-position: center;
 }
 
-.hl_widget.focused {
-    background: #ffe;
+
+.key_helper {
+    z-index: 20;
+    position: fixed;
+    bottom: 0px;
+    background: #EEE;
+    width: 100%;
+    border-top: 1px solid #AAA;
+    font-size: 11px;
+}
+
+.key_helper .command {
+    padding: 0 10px;
+}
+
+.key_helper .label {
+    padding: 0 4px;
 }
 
+.key_helper .action {
+    padding: 0 5px;
+    color: #666;
+}

+ 2 - 2
helios.html

@@ -4,8 +4,8 @@
     <title>Helios IDE</title> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
     <meta name="author" content="Nicolas Petton" /> 
-    <link rel="stylesheet" type="text/css" href='css/helios.css' /> 
     <link rel="stylesheet" type="text/css" href='js/lib/bootstrap/css/bootstrap.css' /> 
+    <link rel="stylesheet" type="text/css" href='css/helios.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> 
@@ -14,7 +14,7 @@
   </head> 
   <body> 
     
-    <script type='text/javascript'> loadAmber({packages: ['Spaces', 'Helios-Layout', 'Helios-Widgets', 'Helios-Announcements']}) </script> 
+    <script type='text/javascript'> loadAmber({packages: ['Spaces', 'Helios-Core', 'Helios-Layout','Helios-KeyBindings', 'Helios-Browser', 'Helios-Announcements']}) </script> 
     
   </body> 
 </html> 

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

@@ -2,3 +2,62 @@ smalltalk.addPackage('Helios-Announcements', {});
 smalltalk.addClass('HLAnnouncement', smalltalk.Object, [], 'Helios-Announcements');
 
 
+smalltalk.addClass('HLItemSelected', smalltalk.HLAnnouncement, ['item'], 'Helios-Announcements');
+smalltalk.addMethod(
+"_item",
+smalltalk.method({
+selector: "item",
+fn: function (){
+var self=this;
+return self["@item"];
+}
+}),
+smalltalk.HLItemSelected);
+
+smalltalk.addMethod(
+"_item_",
+smalltalk.method({
+selector: "item:",
+fn: function (anObject){
+var self=this;
+self["@item"]=anObject;
+return self}
+}),
+smalltalk.HLItemSelected);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+fn: function (anItem){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_item_",[anItem]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLItemSelected.klass);
+
+
+smalltalk.addClass('HLClassSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLMethodSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLPackageSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLProtocolSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLShowCommentToggled', smalltalk.HLAnnouncement, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLShowInstanceToggled', smalltalk.HLAnnouncement, [], 'Helios-Announcements');
+
+

+ 74 - 0
js/Helios-Announcements.js

@@ -2,3 +2,77 @@ smalltalk.addPackage('Helios-Announcements', {});
 smalltalk.addClass('HLAnnouncement', smalltalk.Object, [], 'Helios-Announcements');
 
 
+smalltalk.addClass('HLItemSelected', smalltalk.HLAnnouncement, ['item'], 'Helios-Announcements');
+smalltalk.addMethod(
+"_item",
+smalltalk.method({
+selector: "item",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@item"];
+},
+args: [],
+source: "item\x0a\x09^ item",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLItemSelected);
+
+smalltalk.addMethod(
+"_item_",
+smalltalk.method({
+selector: "item:",
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+self["@item"]=anObject;
+return self},
+args: ["anObject"],
+source: "item: anObject\x0a\x09item := anObject",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLItemSelected);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+category: 'instance creation',
+fn: function (anItem){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_item_",[anItem]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["anItem"],
+source: "on: anItem\x0a\x09^ self new\x0a    \x09item: anItem;\x0a        yourself",
+messageSends: ["item:", "new", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLItemSelected.klass);
+
+
+smalltalk.addClass('HLClassSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLMethodSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLPackageSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLProtocolSelected', smalltalk.HLItemSelected, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLShowCommentToggled', smalltalk.HLAnnouncement, [], 'Helios-Announcements');
+
+
+smalltalk.addClass('HLShowInstanceToggled', smalltalk.HLAnnouncement, [], 'Helios-Announcements');
+
+

+ 1443 - 0
js/Helios-Browser.deploy.js

@@ -0,0 +1,1443 @@
+smalltalk.addPackage('Helios-Browser', {});
+smalltalk.addClass('HLBrowser', smalltalk.HLWidget, ['model', 'packagesListWidget', 'classesListWidget', 'protocolsListWidget', 'methodsListWidget', 'sourceWidget'], 'Helios-Browser');
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]);
+return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+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_",[smalltalk.send(self,"_model",[])]);
+self["@classesListWidget"];
+$1=smalltalk.send(self["@classesListWidget"],"_next_",[smalltalk.send(self,"_protocolsListWidget",[])]);
+} else {
+$1=self["@classesListWidget"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_environment",[]);
+return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_methodsListWidget",
+smalltalk.method({
+selector: "methodsListWidget",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@methodsListWidget"]) == nil || $receiver == undefined){
+self["@methodsListWidget"]=smalltalk.send((smalltalk.HLMethodsListWidget || HLMethodsListWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+$1=self["@methodsListWidget"];
+} else {
+$1=self["@methodsListWidget"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@model"]) == nil || $receiver == undefined){
+self["@model"]=smalltalk.send((smalltalk.HLBrowserModel || HLBrowserModel),"_new",[]);
+$1=self["@model"];
+} else {
+$1=self["@model"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+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_",[smalltalk.send(self,"_model",[])]);
+self["@packagesListWidget"];
+$1=smalltalk.send(self["@packagesListWidget"],"_next_",[smalltalk.send(self,"_classesListWidget",[])]);
+} else {
+$1=self["@packagesListWidget"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_protocolsListWidget",
+smalltalk.method({
+selector: "protocolsListWidget",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@protocolsListWidget"]) == nil || $receiver == undefined){
+self["@protocolsListWidget"]=smalltalk.send((smalltalk.HLProtocolsListWidget || HLProtocolsListWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+self["@protocolsListWidget"];
+$1=smalltalk.send(self["@protocolsListWidget"],"_next_",[smalltalk.send(self,"_methodsListWidget",[])]);
+} else {
+$1=self["@protocolsListWidget"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_registerBindingsOn_",
+smalltalk.method({
+selector: "registerBindingsOn:",
+fn: function (aBindingGroup){
+var self=this;
+var $1;
+smalltalk.send(aBindingGroup,"_addGroupKey_labelled_",[(66),"Browse"]);
+$1=smalltalk.send(aBindingGroup,"_addGroupKey_labelled_",[(71),"Go to"]);
+return self}
+}),
+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_",[smalltalk.send(self,"_protocolsListWidget",[]),smalltalk.send(self,"_methodsListWidget",[])])]),smalltalk.send(self,"_sourceWidget",[])])])]);
+return self}
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_sourceWidget",
+smalltalk.method({
+selector: "sourceWidget",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@sourceWidget"]) == nil || $receiver == undefined){
+self["@sourceWidget"]=smalltalk.send((smalltalk.HLBrowserSourceWidget || HLBrowserSourceWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+$1=self["@sourceWidget"];
+} else {
+$1=self["@sourceWidget"];
+};
+return $1;
+}
+}),
+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('HLBrowserListWidget', smalltalk.HLNavigationListWidget, ['model'], 'Helios-Browser');
+smalltalk.addMethod(
+"_ensureSelection",
+smalltalk.method({
+selector: "ensureSelection",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_selectedItem",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+smalltalk.send(smalltalk.send(self,"_items",[]),"_ifNotEmpty_",[(function(){
+smalltalk.send(self,"_selectItem_",[smalltalk.send(smalltalk.send(self,"_items",[]),"_first",[])]);
+return smalltalk.send(self,"_refresh",[]);
+})]);
+} else {
+smalltalk.send(self,"_selectItem_",[smalltalk.send(self,"_selectedItem",[])]);
+};
+return self}
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_focus",
+smalltalk.method({
+selector: "focus",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_focus",[],smalltalk.HLNavigationListWidget);
+smalltalk.send(self,"_ensureSelection",[]);
+return self}
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+fn: function (){
+var self=this;
+return self["@model"];
+}
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+fn: function (aBrowserModel){
+var self=this;
+self["@model"]=aBrowserModel;
+smalltalk.send(self["@model"],"_subscribe_",[self]);
+return self}
+}),
+smalltalk.HLBrowserListWidget);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+fn: function (aModel){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_model_",[aModel]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLBrowserListWidget.klass);
+
+
+smalltalk.addClass('HLClassesListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Browser');
+smalltalk.addMethod(
+"_focusMethodsListWidget",
+smalltalk.method({
+selector: "focusMethodsListWidget",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLMethodsListFocus || HLMethodsListFocus),"_new",[])]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_focusProtocolsListWidget",
+smalltalk.method({
+selector: "focusProtocolsListWidget",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLProtocolsListFocus || HLProtocolsListFocus),"_new",[])]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_getChildrenOf_",
+smalltalk.method({
+selector: "getChildrenOf:",
+fn: function (aClass){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_items",[]),"_select_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_superclass",[]),"__eq",[aClass]);
+})]);
+return $1;
+}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_getRootClassesOf_",
+smalltalk.method({
+selector: "getRootClassesOf:",
+fn: function (aCollection){
+var self=this;
+var $1;
+$1=smalltalk.send(aCollection,"_select_",[(function(each){
+return smalltalk.send(smalltalk.send(smalltalk.send(each,"_allSuperclasses",[]),"_intersection_",[aCollection]),"_isEmpty",[]);
+})]);
+return $1;
+}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_iconForItem_",
+smalltalk.method({
+selector: "iconForItem:",
+fn: function (aClass){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(smalltalk.send(smalltalk.send(aClass,"_theNonMetaClass",[]),"_comment",[]),"_isEmpty",[]);
+if(smalltalk.assert($2)){
+$1="icon-question-sign";
+} else {
+$1="icon-none";
+};
+return $1;
+}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_packageSelected_",
+smalltalk.method({
+selector: "packageSelected:",
+fn: function (aPackage){
+var self=this;
+var $1;
+smalltalk.send(self,"_selectedItem_",[nil]);
+if(($receiver = aPackage) == nil || $receiver == undefined){
+$1=[];
+} else {
+$1=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aPackage,"_classes",[]),"_collect_",[(function(each){
+return smalltalk.send(each,"_theNonMetaClass",[]);
+})]),"_asSet",[]),"_asArray",[]);
+};
+smalltalk.send(self,"_items_",[$1]);
+smalltalk.send(self,"_refresh",[]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderButtonsOn_",
+smalltalk.method({
+selector: "renderButtonsOn:",
+fn: function (html){
+var self=this;
+var $1,$3,$4,$5,$6,$7,$8,$2,$9,$10;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_class_",["btn-group"]);
+smalltalk.send($1,"_at_put_",["data-toggle","buttons-radio"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+$3=smalltalk.send(html,"_button",[]);
+smalltalk.send($3,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+smalltalk.send(str,"_nextPutAll_",["btn"]);
+$4=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(smalltalk.assert($4)){
+return smalltalk.send(str,"_nextPutAll_",[" active"]);
+};
+})])]);
+smalltalk.send($3,"_with_",["Instance"]);
+$5=smalltalk.send($3,"_onClick_",[(function(){
+return smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance_",[true]);
+})]);
+$5;
+$6=smalltalk.send(html,"_button",[]);
+smalltalk.send($6,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+smalltalk.send(str,"_nextPutAll_",["btn"]);
+$7=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(! smalltalk.assert($7)){
+return smalltalk.send(str,"_nextPutAll_",[" active"]);
+};
+})])]);
+smalltalk.send($6,"_with_",["Class"]);
+$8=smalltalk.send($6,"_onClick_",[(function(){
+return smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance_",[false]);
+})]);
+return $8;
+})]);
+$9=smalltalk.send(html,"_button",[]);
+smalltalk.send($9,"_class_",["btn"]);
+smalltalk.send($9,"_at_put_",["data-toggle","button"]);
+$10=smalltalk.send($9,"_with_",["Comment"]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItem_level_on_",
+smalltalk.method({
+selector: "renderItem:level:on:",
+fn: function (aClass,anInteger,html){
+var self=this;
+var $2,$3,$1;
+var li;
+li=smalltalk.send(html,"_li",[]);
+smalltalk.send(li,"_at_put_",["list-data",smalltalk.send(smalltalk.send(self,"_items",[]),"_indexOf_",[aClass])]);
+smalltalk.send(li,"_class_",[smalltalk.send(self,"_cssClassForItem_",[aClass])]);
+$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(self,"_iconForItem_",[aClass])]);
+return smalltalk.send(self,"_renderItemLabel_level_on_",[aClass,anInteger,html]);
+})]);
+$3=smalltalk.send($2,"_onClick_",[(function(){
+return smalltalk.send(self,"_activateListItem_",[smalltalk.send(li,"_asJQuery",[])]);
+})]);
+return $3;
+})]);
+smalltalk.send(smalltalk.send(self,"_getChildrenOf_",[aClass]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_level_on_",[each,smalltalk.send(anInteger,"__plus",[(1)]),html]);
+})]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItem_on_",
+smalltalk.method({
+selector: "renderItem:on:",
+fn: function (aClass,html){
+var self=this;
+smalltalk.send(self,"_renderItem_on_",[aClass,html],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_getChildrenOf_",[aClass]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_level_on_",[each,(1),html]);
+})]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_level_on_",
+smalltalk.method({
+selector: "renderItemLabel:level:on:",
+fn: function (aClass,anInteger,html){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(html,"_span",[]),"_asJQuery",[]),"_html_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+smalltalk.send(anInteger,"_timesRepeat_",[(function(){
+return smalltalk.send(str,"_nextPutAll_",["&nbsp;&nbsp;&nbsp;&nbsp;"]);
+})]);
+return smalltalk.send(str,"_nextPutAll_",[smalltalk.send(aClass,"_name",[])]);
+})])]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_on_",
+smalltalk.method({
+selector: "renderItemLabel:on:",
+fn: function (aClass,html){
+var self=this;
+smalltalk.send(self,"_renderItemLabel_level_on_",[aClass,(0),html]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderListOn_",
+smalltalk.method({
+selector: "renderListOn:",
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_getRootClassesOf_",[smalltalk.send(self,"_items",[])]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_on_",[each,html]);
+})]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+fn: function (aClass){
+var self=this;
+smalltalk.send(self,"_selectItem_",[aClass],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass_",[aClass]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_showInstance_",
+smalltalk.method({
+selector: "showInstance:",
+fn: function (aBoolean){
+var self=this;
+var $1;
+$1=smalltalk.send(aBoolean,"__eq",[smalltalk.send(smalltalk.send(self,"_browser",[]),"_showInstance",[])]);
+if(! smalltalk.assert($1)){
+smalltalk.send(smalltalk.send(self,"_browser",[]),"_showInstance_",[aBoolean]);
+};
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLPackageSelected || HLPackageSelected),(function(ann){
+return smalltalk.send(self,"_packageSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+return self}
+}),
+smalltalk.HLClassesListWidget);
+
+
+
+smalltalk.addClass('HLMethodsListWidget', smalltalk.HLBrowserListWidget, ['selectorsCache'], 'Helios-Browser');
+smalltalk.addMethod(
+"_allProtocol",
+smalltalk.method({
+selector: "allProtocol",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_allProtocol",[]);
+return $1;
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_flushSelectorsCache",
+smalltalk.method({
+selector: "flushSelectorsCache",
+fn: function (){
+var self=this;
+self["@selectorsCache"]=smalltalk.send((smalltalk.Dictionary || Dictionary),"_new",[]);
+return self}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_iconForItem_",
+smalltalk.method({
+selector: "iconForItem:",
+fn: function (aCompiledMethod){
+var self=this;
+var $1;
+var override;
+var overriden;
+override=smalltalk.send(self,"_isOverride_",[aCompiledMethod]);
+overriden=smalltalk.send(self,"_isOverriden_",[aCompiledMethod]);
+if(smalltalk.assert(override)){
+if(smalltalk.assert(overriden)){
+$1="icon-resize-vertical";
+} else {
+$1="icon-arrow-up";
+};
+} else {
+if(smalltalk.assert(overriden)){
+$1="icon-arrow-down";
+} else {
+$1="icon-none";
+};
+};
+return $1;
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initialize",[],smalltalk.HLBrowserListWidget);
+smalltalk.send(self,"_flushSelectorsCache",[]);
+return self}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_isOverride_",
+smalltalk.method({
+selector: "isOverride:",
+fn: function (aMethod){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_overrideSelectors",[]),"_includes_",[smalltalk.send(aMethod,"_selector",[])]);
+return $1;
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_isOverriden_",
+smalltalk.method({
+selector: "isOverriden:",
+fn: function (aMethod){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_overridenSelectors",[]),"_includes_",[smalltalk.send(aMethod,"_selector",[])]);
+return $1;
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_methodsInProtocol_",
+smalltalk.method({
+selector: "methodsInProtocol:",
+fn: function (aString){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(aString,"__eq",[smalltalk.send(self,"_allProtocol",[])]);
+if(smalltalk.assert($2)){
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_methods",[]);
+} else {
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_methodsInProtocol_",[aString]);
+};
+return $1;
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_overrideSelectors",
+smalltalk.method({
+selector: "overrideSelectors",
+fn: function (){
+var self=this;
+var $2,$1;
+$1=smalltalk.send(smalltalk.send(self,"_selectorsCache",[]),"_at_ifAbsentPut_",["override",(function(){
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_allSuperclasses",[]),"_inject_into_",[smalltalk.send((smalltalk.Set || Set),"_new",[]),(function(acc,each){
+smalltalk.send(acc,"_addAll_",[smalltalk.send(each,"_selectors",[])]);
+$2=smalltalk.send(acc,"_yourself",[]);
+return $2;
+})]);
+})]);
+return $1;
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_overridenSelectors",
+smalltalk.method({
+selector: "overridenSelectors",
+fn: function (){
+var self=this;
+var $2,$1;
+$1=smalltalk.send(smalltalk.send(self,"_selectorsCache",[]),"_at_ifAbsentPut_",["overriden",(function(){
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_allSubclasses",[]),"_inject_into_",[smalltalk.send((smalltalk.Set || Set),"_new",[]),(function(acc,each){
+smalltalk.send(acc,"_addAll_",[smalltalk.send(each,"_selectors",[])]);
+$2=smalltalk.send(acc,"_yourself",[]);
+return $2;
+})]);
+})]);
+return $1;
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_protocolSelected_",
+smalltalk.method({
+selector: "protocolSelected:",
+fn: function (aString){
+var self=this;
+var $2,$1;
+smalltalk.send(self,"_selectedItem_",[nil]);
+$2=smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]);
+if(($receiver = $2) == nil || $receiver == undefined){
+$1=[];
+} else {
+if(($receiver = aString) == nil || $receiver == undefined){
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_methods",[]);
+} else {
+$1=smalltalk.send(self,"_methodsInProtocol_",[aString]);
+};
+};
+smalltalk.send(self,"_items_",[$1]);
+smalltalk.send(self,"_refresh",[]);
+return self}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+var $1,$2,$3;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+} else {
+$2=smalltalk.send(html,"_div",[]);
+smalltalk.send($2,"_class_",["class_side"]);
+$3=smalltalk.send($2,"_with_",[(function(){
+return smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+})]);
+$3;
+};
+smalltalk.send(self,"_flushSelectorsCache",[]);
+return self}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_on_",
+smalltalk.method({
+selector: "renderItemLabel:on:",
+fn: function (aCompiledMethod,html){
+var self=this;
+smalltalk.send(html,"_with_",[smalltalk.send(aCompiledMethod,"_selector",[])]);
+return self}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+fn: function (aCompiledMethod){
+var self=this;
+smalltalk.send(self,"_selectItem_",[aCompiledMethod],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedMethod_",[aCompiledMethod]);
+return self}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_selectorsCache",
+smalltalk.method({
+selector: "selectorsCache",
+fn: function (){
+var self=this;
+return self["@selectorsCache"];
+}
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLProtocolSelected || HLProtocolSelected),(function(ann){
+return smalltalk.send(self,"_protocolSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLShowInstanceToggled || HLShowInstanceToggled),(function(ann){
+return smalltalk.send(self,"_protocolSelected_",[nil]);
+})]);
+return self}
+}),
+smalltalk.HLMethodsListWidget);
+
+
+
+smalltalk.addClass('HLPackagesListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Browser');
+smalltalk.addMethod(
+"_focusClassesListWidget",
+smalltalk.method({
+selector: "focusClassesListWidget",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLClassesListFocus || HLClassesListFocus),"_new",[])]);
+return self}
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@items"]) == nil || $receiver == undefined){
+self["@items"]=smalltalk.send(smalltalk.send(self,"_model",[]),"_packages",[]);
+$1=self["@items"];
+} else {
+$1=self["@items"];
+};
+return $1;
+}
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_registerBindingsOn_",
+smalltalk.method({
+selector: "registerBindingsOn:",
+fn: function (aBindingGroup){
+var self=this;
+smalltalk.send(smalltalk.send(aBindingGroup,"_at_",["Go to"]),"_addActionKey_labelled_callback_",[(67),"Packages",(function(){
+return smalltalk.send(self,"_focus",[]);
+})]);
+return self}
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_renderButtonsOn_",
+smalltalk.method({
+selector: "renderButtonsOn:",
+fn: function (html){
+var self=this;
+var $1,$2,$3,$5,$6,$7,$8,$4,$9,$10;
+$1=smalltalk.send(html,"_span",[]);
+smalltalk.send($1,"_class_",["info"]);
+$2=smalltalk.send($1,"_with_",["Auto commit is"]);
+$3=smalltalk.send(html,"_div",[]);
+smalltalk.send($3,"_class_",["btn-group switch"]);
+smalltalk.send($3,"_at_put_",["data-toggle","buttons-radio"]);
+$4=smalltalk.send($3,"_with_",[(function(){
+$5=smalltalk.send(html,"_button",[]);
+smalltalk.send($5,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+return smalltalk.send(str,"_nextPutAll_",["btn"]);
+})])]);
+$6=smalltalk.send($5,"_with_",["On"]);
+$6;
+$7=smalltalk.send(html,"_button",[]);
+smalltalk.send($7,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+return smalltalk.send(str,"_nextPutAll_",["btn active"]);
+})])]);
+$8=smalltalk.send($7,"_with_",["Off"]);
+return $8;
+})]);
+$9=smalltalk.send(html,"_a",[]);
+smalltalk.send($9,"_class_",["btn"]);
+$10=smalltalk.send($9,"_with_",["Commit now"]);
+return self}
+}),
+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,"_model",[]),"_selectedPackage_",[aPackage]);
+return self}
+}),
+smalltalk.HLPackagesListWidget);
+
+
+
+smalltalk.addClass('HLProtocolsListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Browser');
+smalltalk.addMethod(
+"_allProtocol",
+smalltalk.method({
+selector: "allProtocol",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_allProtocol",[]);
+return $1;
+}
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_classSelected_",
+smalltalk.method({
+selector: "classSelected:",
+fn: function (aClass){
+var self=this;
+var $2,$3,$1;
+smalltalk.send(self,"_selectedItem_",[nil]);
+if(($receiver = aClass) == nil || $receiver == undefined){
+$1=smalltalk.send((smalltalk.Array || Array),"_with_",[smalltalk.send(self,"_allProtocol",[])]);
+} else {
+$2=smalltalk.send((smalltalk.Array || Array),"_with_",[smalltalk.send(self,"_allProtocol",[])]);
+smalltalk.send($2,"_addAll_",[smalltalk.send(aClass,"_protocols",[])]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+};
+smalltalk.send(self,"_items_",[$1]);
+smalltalk.send(self,"_refresh",[]);
+return self}
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+var $1,$2,$3;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+} else {
+$2=smalltalk.send(html,"_div",[]);
+smalltalk.send($2,"_class_",["class_side"]);
+$3=smalltalk.send($2,"_with_",[(function(){
+return smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+})]);
+$3;
+};
+return self}
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+fn: function (aString){
+var self=this;
+smalltalk.send(self,"_selectItem_",[aString],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedProtocol_",[aString]);
+return self}
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_selectedItem",
+smalltalk.method({
+selector: "selectedItem",
+fn: function (){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(self,"_selectedItem",[],smalltalk.HLBrowserListWidget);
+if(($receiver = $2) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_allProtocol",[]);
+} else {
+$1=$2;
+};
+return $1;
+}
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLClassSelected || HLClassSelected),(function(ann){
+return smalltalk.send(self,"_classSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLShowInstanceToggled || HLShowInstanceToggled),(function(ann){
+return smalltalk.send(self,"_classSelected_",[smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[])]);
+})]);
+return self}
+}),
+smalltalk.HLProtocolsListWidget);
+
+
+
+smalltalk.addClass('HLBrowserModel', smalltalk.Object, ['announcer', 'environment', 'selectedPackage', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'showInstance', 'showComment'], 'Helios-Browser');
+smalltalk.addMethod(
+"_allProtocol",
+smalltalk.method({
+selector: "allProtocol",
+fn: function (){
+var self=this;
+return "-- All --";
+}
+}),
+smalltalk.HLBrowserModel);
+
+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.HLBrowserModel);
+
+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.HLBrowserModel);
+
+smalltalk.addMethod(
+"_environment_",
+smalltalk.method({
+selector: "environment:",
+fn: function (anEnvironment){
+var self=this;
+self["@environment"]=anEnvironment;
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_packages",
+smalltalk.method({
+selector: "packages",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_environment",[]),"_packages",[]);
+return $1;
+}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedClass",
+smalltalk.method({
+selector: "selectedClass",
+fn: function (){
+var self=this;
+return self["@selectedClass"];
+}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedClass_",
+smalltalk.method({
+selector: "selectedClass:",
+fn: function (aClass){
+var self=this;
+var $1,$2;
+if(($receiver = aClass) == nil || $receiver == undefined){
+self["@selectedClass"]=nil;
+self["@selectedClass"];
+} else {
+$1=smalltalk.send(self,"_showInstance",[]);
+if(smalltalk.assert($1)){
+self["@selectedClass"]=smalltalk.send(aClass,"_theNonMetaClass",[]);
+self["@selectedClass"];
+} else {
+self["@selectedClass"]=smalltalk.send(aClass,"_theMetaClass",[]);
+self["@selectedClass"];
+};
+};
+smalltalk.send(self,"_selectedMethod_",[nil]);
+$2=smalltalk.send(self,"_selectedProtocol_",[nil]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLClassSelected || HLClassSelected),"_on_",[smalltalk.send(self,"_selectedClass",[])])]);
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedMethod",
+smalltalk.method({
+selector: "selectedMethod",
+fn: function (){
+var self=this;
+return self["@selectedMethod"];
+}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedMethod_",
+smalltalk.method({
+selector: "selectedMethod:",
+fn: function (aCompiledMethod){
+var self=this;
+self["@selectedMethod"]=aCompiledMethod;
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLMethodSelected || HLMethodSelected),"_on_",[aCompiledMethod])]);
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedPackage",
+smalltalk.method({
+selector: "selectedPackage",
+fn: function (){
+var self=this;
+return self["@selectedPackage"];
+}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedPackage_",
+smalltalk.method({
+selector: "selectedPackage:",
+fn: function (aPackage){
+var self=this;
+self["@selectedPackage"]=aPackage;
+smalltalk.send(self,"_selectedClass_",[nil]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLPackageSelected || HLPackageSelected),"_on_",[aPackage])]);
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedProtocol",
+smalltalk.method({
+selector: "selectedProtocol",
+fn: function (){
+var self=this;
+return self["@selectedProtocol"];
+}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedProtocol_",
+smalltalk.method({
+selector: "selectedProtocol:",
+fn: function (aString){
+var self=this;
+self["@selectedProtocol"]=aString;
+smalltalk.send(self,"_selectedMethod_",[nil]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLProtocolSelected || HLProtocolSelected),"_on_",[aString])]);
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showComment",
+smalltalk.method({
+selector: "showComment",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@showComment"]) == nil || $receiver == undefined){
+$1=false;
+} else {
+$1=self["@showComment"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showComment_",
+smalltalk.method({
+selector: "showComment:",
+fn: function (aBoolean){
+var self=this;
+self["@showComment"]=aBoolean;
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLShowCommentToggled || HLShowCommentToggled),"_new",[])]);
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showInstance",
+smalltalk.method({
+selector: "showInstance",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@showInstance"]) == nil || $receiver == undefined){
+$1=true;
+} else {
+$1=self["@showInstance"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showInstance_",
+smalltalk.method({
+selector: "showInstance:",
+fn: function (aBoolean){
+var self=this;
+var $1,$2;
+self["@showInstance"]=aBoolean;
+$1=smalltalk.send(self,"_selectedClass",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+if(smalltalk.assert(aBoolean)){
+$2=smalltalk.send(smalltalk.send(self,"_selectedClass",[]),"_theNonMetaClass",[]);
+} else {
+$2=smalltalk.send(smalltalk.send(self,"_selectedClass",[]),"_theMetaClass",[]);
+};
+smalltalk.send(self,"_selectedClass_",[$2]);
+};
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLShowInstanceToggled || HLShowInstanceToggled),"_new",[])]);
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_subscribe_",
+smalltalk.method({
+selector: "subscribe:",
+fn: function (aWidget){
+var self=this;
+smalltalk.send(aWidget,"_subscribeTo_",[smalltalk.send(self,"_announcer",[])]);
+return self}
+}),
+smalltalk.HLBrowserModel);
+
+
+
+smalltalk.addClass('HLBrowserSourceWidget', smalltalk.HLWidget, ['model', 'sourceArea'], 'Helios-Browser');
+smalltalk.addMethod(
+"_classSelected_",
+smalltalk.method({
+selector: "classSelected:",
+fn: function (aClass){
+var self=this;
+var $1;
+if(($receiver = aClass) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_contents_",[""]);
+return $1;
+} else {
+aClass;
+};
+smalltalk.send(self,"_contents_",[smalltalk.send(aClass,"_definition",[])]);
+return self}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_contents",
+smalltalk.method({
+selector: "contents",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_sourceArea",[]),"_contents",[]);
+return $1;
+}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_contents_",
+smalltalk.method({
+selector: "contents:",
+fn: function (aString){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_sourceArea",[]),"_contents_",[aString]);
+return self}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_methodSelected_",
+smalltalk.method({
+selector: "methodSelected:",
+fn: function (aCompiledMethod){
+var self=this;
+var $1;
+if(($receiver = aCompiledMethod) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_contents_",[""]);
+return $1;
+} else {
+aCompiledMethod;
+};
+smalltalk.send(self,"_contents_",[smalltalk.send(aCompiledMethod,"_source",[])]);
+return self}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+fn: function (){
+var self=this;
+return self["@model"];
+}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+fn: function (aBrowserModel){
+var self=this;
+self["@model"]=aBrowserModel;
+smalltalk.send(self["@model"],"_subscribe_",[self]);
+return self}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_protocolSelected_",
+smalltalk.method({
+selector: "protocolSelected:",
+fn: function (aString){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$2=smalltalk.send(self,"_contents_",[""]);
+return $2;
+} else {
+$1;
+};
+smalltalk.send(self,"_contents_",[smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_definition",[])]);
+return self}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_sourceArea",[]),"_renderOn_",[html]);
+return self}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_sourceArea",
+smalltalk.method({
+selector: "sourceArea",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@sourceArea"]) == nil || $receiver == undefined){
+self["@sourceArea"]=smalltalk.send((smalltalk.HLSourceArea || HLSourceArea),"_new",[]);
+$1=self["@sourceArea"];
+} else {
+$1=self["@sourceArea"];
+};
+return $1;
+}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLMethodSelected || HLMethodSelected),(function(ann){
+return smalltalk.send(self,"_methodSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLClassSelected || HLClassSelected),(function(ann){
+return smalltalk.send(self,"_classSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLProtocolSelected || HLProtocolSelected),(function(ann){
+return smalltalk.send(self,"_protocolSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+return self}
+}),
+smalltalk.HLBrowserSourceWidget);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+fn: function (aBrowserModel){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_model_",[aBrowserModel]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLBrowserSourceWidget.klass);
+
+

+ 1893 - 0
js/Helios-Browser.js

@@ -0,0 +1,1893 @@
+smalltalk.addPackage('Helios-Browser', {});
+smalltalk.addClass('HLBrowser', smalltalk.HLWidget, ['model', 'packagesListWidget', 'classesListWidget', 'protocolsListWidget', 'methodsListWidget', 'sourceWidget'], 'Helios-Browser');
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]);
+return $1;
+},
+args: [],
+source: "announcer\x0a\x09^ self model announcer",
+messageSends: ["announcer", "model"],
+referencedClasses: []
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_classesListWidget",
+smalltalk.method({
+selector: "classesListWidget",
+category: 'widgets',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@classesListWidget"]) == nil || $receiver == undefined){
+self["@classesListWidget"]=smalltalk.send((smalltalk.HLClassesListWidget || HLClassesListWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+self["@classesListWidget"];
+$1=smalltalk.send(self["@classesListWidget"],"_next_",[smalltalk.send(self,"_protocolsListWidget",[])]);
+} else {
+$1=self["@classesListWidget"];
+};
+return $1;
+},
+args: [],
+source: "classesListWidget\x0a\x09^ classesListWidget ifNil: [\x0a      \x09classesListWidget := HLClassesListWidget on: self model.\x0a\x09\x09classesListWidget next: self protocolsListWidget ]",
+messageSends: ["ifNil:", "on:", "model", "next:", "protocolsListWidget"],
+referencedClasses: ["HLClassesListWidget"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_environment",
+smalltalk.method({
+selector: "environment",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_environment",[]);
+return $1;
+},
+args: [],
+source: "environment\x0a\x09^ self model environment",
+messageSends: ["environment", "model"],
+referencedClasses: []
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_methodsListWidget",
+smalltalk.method({
+selector: "methodsListWidget",
+category: 'widgets',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@methodsListWidget"]) == nil || $receiver == undefined){
+self["@methodsListWidget"]=smalltalk.send((smalltalk.HLMethodsListWidget || HLMethodsListWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+$1=self["@methodsListWidget"];
+} else {
+$1=self["@methodsListWidget"];
+};
+return $1;
+},
+args: [],
+source: "methodsListWidget\x0a\x09^ methodsListWidget ifNil: [\x0a      \x09methodsListWidget := HLMethodsListWidget on: self model ]",
+messageSends: ["ifNil:", "on:", "model"],
+referencedClasses: ["HLMethodsListWidget"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@model"]) == nil || $receiver == undefined){
+self["@model"]=smalltalk.send((smalltalk.HLBrowserModel || HLBrowserModel),"_new",[]);
+$1=self["@model"];
+} else {
+$1=self["@model"];
+};
+return $1;
+},
+args: [],
+source: "model\x0a\x09^ model ifNil: [ model := HLBrowserModel new ]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["HLBrowserModel"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+category: 'accessing',
+fn: function (aModel){
+var self=this;
+self["@model"]=aModel;
+return self},
+args: ["aModel"],
+source: "model: aModel\x0a\x09model := aModel",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_packagesListWidget",
+smalltalk.method({
+selector: "packagesListWidget",
+category: 'widgets',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@packagesListWidget"]) == nil || $receiver == undefined){
+self["@packagesListWidget"]=smalltalk.send((smalltalk.HLPackagesListWidget || HLPackagesListWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+self["@packagesListWidget"];
+$1=smalltalk.send(self["@packagesListWidget"],"_next_",[smalltalk.send(self,"_classesListWidget",[])]);
+} else {
+$1=self["@packagesListWidget"];
+};
+return $1;
+},
+args: [],
+source: "packagesListWidget\x0a\x09^ packagesListWidget ifNil: [\x0a      \x09packagesListWidget := HLPackagesListWidget on: self model.\x0a\x09\x09packagesListWidget next: self classesListWidget ]",
+messageSends: ["ifNil:", "on:", "model", "next:", "classesListWidget"],
+referencedClasses: ["HLPackagesListWidget"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_protocolsListWidget",
+smalltalk.method({
+selector: "protocolsListWidget",
+category: 'widgets',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@protocolsListWidget"]) == nil || $receiver == undefined){
+self["@protocolsListWidget"]=smalltalk.send((smalltalk.HLProtocolsListWidget || HLProtocolsListWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+self["@protocolsListWidget"];
+$1=smalltalk.send(self["@protocolsListWidget"],"_next_",[smalltalk.send(self,"_methodsListWidget",[])]);
+} else {
+$1=self["@protocolsListWidget"];
+};
+return $1;
+},
+args: [],
+source: "protocolsListWidget\x0a\x09^ protocolsListWidget ifNil: [\x0a      \x09protocolsListWidget := HLProtocolsListWidget on: self model.\x0a\x09\x09protocolsListWidget next: self methodsListWidget ]",
+messageSends: ["ifNil:", "on:", "model", "next:", "methodsListWidget"],
+referencedClasses: ["HLProtocolsListWidget"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_registerBindingsOn_",
+smalltalk.method({
+selector: "registerBindingsOn:",
+category: 'keybindings',
+fn: function (aBindingGroup){
+var self=this;
+var $1;
+smalltalk.send(aBindingGroup,"_addGroupKey_labelled_",[(66),"Browse"]);
+$1=smalltalk.send(aBindingGroup,"_addGroupKey_labelled_",[(71),"Go to"]);
+return self},
+args: ["aBindingGroup"],
+source: "registerBindingsOn: aBindingGroup\x0a\x09aBindingGroup \x0a    \x09addGroupKey: 66 labelled: 'Browse';\x0a        addGroupKey: 71 labelled: 'Go to'",
+messageSends: ["addGroupKey:labelled:"],
+referencedClasses: []
+}),
+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_",[smalltalk.send(self,"_protocolsListWidget",[]),smalltalk.send(self,"_methodsListWidget",[])])]),smalltalk.send(self,"_sourceWidget",[])])])]);
+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: self protocolsListWidget\x0a                with: self methodsListWidget)) \x0a        with: self sourceWidget))",
+messageSends: ["with:", "with:with:", "packagesListWidget", "classesListWidget", "protocolsListWidget", "methodsListWidget", "sourceWidget"],
+referencedClasses: ["HLVerticalSplitter", "HLHorizontalSplitter", "HLContainer"]
+}),
+smalltalk.HLBrowser);
+
+smalltalk.addMethod(
+"_sourceWidget",
+smalltalk.method({
+selector: "sourceWidget",
+category: 'widgets',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@sourceWidget"]) == nil || $receiver == undefined){
+self["@sourceWidget"]=smalltalk.send((smalltalk.HLBrowserSourceWidget || HLBrowserSourceWidget),"_on_",[smalltalk.send(self,"_model",[])]);
+$1=self["@sourceWidget"];
+} else {
+$1=self["@sourceWidget"];
+};
+return $1;
+},
+args: [],
+source: "sourceWidget\x0a\x09^ sourceWidget ifNil: [\x0a      \x09sourceWidget := HLBrowserSourceWidget on: self model ]",
+messageSends: ["ifNil:", "on:", "model"],
+referencedClasses: ["HLBrowserSourceWidget"]
+}),
+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('HLBrowserListWidget', smalltalk.HLNavigationListWidget, ['model'], 'Helios-Browser');
+smalltalk.addMethod(
+"_ensureSelection",
+smalltalk.method({
+selector: "ensureSelection",
+category: 'actions',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_selectedItem",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+smalltalk.send(smalltalk.send(self,"_items",[]),"_ifNotEmpty_",[(function(){
+smalltalk.send(self,"_selectItem_",[smalltalk.send(smalltalk.send(self,"_items",[]),"_first",[])]);
+return smalltalk.send(self,"_refresh",[]);
+})]);
+} else {
+smalltalk.send(self,"_selectItem_",[smalltalk.send(self,"_selectedItem",[])]);
+};
+return self},
+args: [],
+source: "ensureSelection\x0a\x09self selectedItem \x0a    \x09ifNil: [\x0a      \x09\x09self items ifNotEmpty: [\x0a  \x09\x09\x09\x09self selectItem: self items first.\x0a  \x09\x09\x09\x09self refresh ] ]\x0a\x09\x09ifNotNil: [ self selectItem: self selectedItem ]",
+messageSends: ["ifNil:ifNotNil:", "ifNotEmpty:", "selectItem:", "first", "items", "refresh", "selectedItem"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_focus",
+smalltalk.method({
+selector: "focus",
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_focus",[],smalltalk.HLNavigationListWidget);
+smalltalk.send(self,"_ensureSelection",[]);
+return self},
+args: [],
+source: "focus\x0a\x09super focus.\x0a    self ensureSelection",
+messageSends: ["focus", "ensureSelection"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@model"];
+},
+args: [],
+source: "model\x0a\x09^ model",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+category: 'accessing',
+fn: function (aBrowserModel){
+var self=this;
+self["@model"]=aBrowserModel;
+smalltalk.send(self["@model"],"_subscribe_",[self]);
+return self},
+args: ["aBrowserModel"],
+source: "model: aBrowserModel\x0a\x09\x22TODO: unsubscribe from previous model\x22\x0a    \x0a\x09model := aBrowserModel.\x0a    model subscribe: self",
+messageSends: ["subscribe:"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+category: 'instance creation',
+fn: function (aModel){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_model_",[aModel]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["aModel"],
+source: "on: aModel\x0a\x09^ self new \x0a    \x09model: aModel;\x0a        yourself",
+messageSends: ["model:", "new", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserListWidget.klass);
+
+
+smalltalk.addClass('HLClassesListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Browser');
+smalltalk.addMethod(
+"_focusMethodsListWidget",
+smalltalk.method({
+selector: "focusMethodsListWidget",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLMethodsListFocus || HLMethodsListFocus),"_new",[])]);
+return self},
+args: [],
+source: "focusMethodsListWidget\x0a\x09self model announcer announce: HLMethodsListFocus new",
+messageSends: ["announce:", "new", "announcer", "model"],
+referencedClasses: ["HLMethodsListFocus"]
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_focusProtocolsListWidget",
+smalltalk.method({
+selector: "focusProtocolsListWidget",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLProtocolsListFocus || HLProtocolsListFocus),"_new",[])]);
+return self},
+args: [],
+source: "focusProtocolsListWidget\x0a\x09self model announcer announce: HLProtocolsListFocus new",
+messageSends: ["announce:", "new", "announcer", "model"],
+referencedClasses: ["HLProtocolsListFocus"]
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_getChildrenOf_",
+smalltalk.method({
+selector: "getChildrenOf:",
+category: 'accessing',
+fn: function (aClass){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_items",[]),"_select_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_superclass",[]),"__eq",[aClass]);
+})]);
+return $1;
+},
+args: ["aClass"],
+source: "getChildrenOf: aClass\x0a\x09^ self items select: [ :each | each superclass = aClass ]",
+messageSends: ["select:", "=", "superclass", "items"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_getRootClassesOf_",
+smalltalk.method({
+selector: "getRootClassesOf:",
+category: 'accessing',
+fn: function (aCollection){
+var self=this;
+var $1;
+$1=smalltalk.send(aCollection,"_select_",[(function(each){
+return smalltalk.send(smalltalk.send(smalltalk.send(each,"_allSuperclasses",[]),"_intersection_",[aCollection]),"_isEmpty",[]);
+})]);
+return $1;
+},
+args: ["aCollection"],
+source: "getRootClassesOf: aCollection\x0a\x09^ aCollection select: [ :each |\x0a    \x09(each allSuperclasses intersection: aCollection) isEmpty ]",
+messageSends: ["select:", "isEmpty", "intersection:", "allSuperclasses"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_iconForItem_",
+smalltalk.method({
+selector: "iconForItem:",
+category: 'accessing',
+fn: function (aClass){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(smalltalk.send(smalltalk.send(aClass,"_theNonMetaClass",[]),"_comment",[]),"_isEmpty",[]);
+if(smalltalk.assert($2)){
+$1="icon-question-sign";
+} else {
+$1="icon-none";
+};
+return $1;
+},
+args: ["aClass"],
+source: "iconForItem: aClass\x0a\x09^ aClass theNonMetaClass comment isEmpty\x0a    \x09ifFalse: [ 'icon-none' ]\x0a      \x09ifTrue: [ 'icon-question-sign' ]",
+messageSends: ["ifFalse:ifTrue:", "isEmpty", "comment", "theNonMetaClass"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_packageSelected_",
+smalltalk.method({
+selector: "packageSelected:",
+category: 'actions',
+fn: function (aPackage){
+var self=this;
+var $1;
+smalltalk.send(self,"_selectedItem_",[nil]);
+if(($receiver = aPackage) == nil || $receiver == undefined){
+$1=[];
+} else {
+$1=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aPackage,"_classes",[]),"_collect_",[(function(each){
+return smalltalk.send(each,"_theNonMetaClass",[]);
+})]),"_asSet",[]),"_asArray",[]);
+};
+smalltalk.send(self,"_items_",[$1]);
+smalltalk.send(self,"_refresh",[]);
+return self},
+args: ["aPackage"],
+source: "packageSelected: aPackage\x0a    self selectedItem: nil.\x0a    \x0a    self items: (aPackage \x0a    \x09ifNil: [ #() ]\x0a  \x09\x09ifNotNil: [ (aPackage classes \x0a        \x09collect: [ :each | each theNonMetaClass ]) asSet asArray ]).\x0a\x0a    self refresh",
+messageSends: ["selectedItem:", "items:", "ifNil:ifNotNil:", "asArray", "asSet", "collect:", "theNonMetaClass", "classes", "refresh"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderButtonsOn_",
+smalltalk.method({
+selector: "renderButtonsOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$3,$4,$5,$6,$7,$8,$2,$9,$10;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_class_",["btn-group"]);
+smalltalk.send($1,"_at_put_",["data-toggle","buttons-radio"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+$3=smalltalk.send(html,"_button",[]);
+smalltalk.send($3,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+smalltalk.send(str,"_nextPutAll_",["btn"]);
+$4=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(smalltalk.assert($4)){
+return smalltalk.send(str,"_nextPutAll_",[" active"]);
+};
+})])]);
+smalltalk.send($3,"_with_",["Instance"]);
+$5=smalltalk.send($3,"_onClick_",[(function(){
+return smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance_",[true]);
+})]);
+$5;
+$6=smalltalk.send(html,"_button",[]);
+smalltalk.send($6,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+smalltalk.send(str,"_nextPutAll_",["btn"]);
+$7=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(! smalltalk.assert($7)){
+return smalltalk.send(str,"_nextPutAll_",[" active"]);
+};
+})])]);
+smalltalk.send($6,"_with_",["Class"]);
+$8=smalltalk.send($6,"_onClick_",[(function(){
+return smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance_",[false]);
+})]);
+return $8;
+})]);
+$9=smalltalk.send(html,"_button",[]);
+smalltalk.send($9,"_class_",["btn"]);
+smalltalk.send($9,"_at_put_",["data-toggle","button"]);
+$10=smalltalk.send($9,"_with_",["Comment"]);
+return self},
+args: ["html"],
+source: "renderButtonsOn: html\x0a\x09html div \x0a        class: 'btn-group';\x0a\x09\x09at: 'data-toggle' put: 'buttons-radio';\x0a\x09\x09with: [ \x0a           \x09html button \x0a                class: (String streamContents: [ :str |\x0a                \x09str nextPutAll: 'btn'.\x0a                    self model showInstance ifTrue: [ \x0a                    \x09str nextPutAll: ' active'] ]);\x0a  \x09\x09\x09\x09with: 'Instance';\x0a                onClick: [ self model showInstance: true ].\x0a  \x09\x09\x09html button\x0a  \x09\x09\x09\x09class: (String streamContents: [ :str |\x0a                \x09str nextPutAll: 'btn'.\x0a                    self model showInstance ifFalse: [ \x0a                    \x09str nextPutAll: ' active'] ]);\x0a  \x09\x09\x09\x09with: 'Class';\x0a\x09\x09\x09\x09onClick: [ self model showInstance: false ] ].\x0a                 \x0a  \x09html button \x0a           \x09class: 'btn';\x0a            at: 'data-toggle' put: 'button';\x0a  \x09\x09\x09with: 'Comment'",
+messageSends: ["class:", "div", "at:put:", "with:", "streamContents:", "nextPutAll:", "ifTrue:", "showInstance", "model", "button", "onClick:", "showInstance:", "ifFalse:"],
+referencedClasses: ["String"]
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItem_level_on_",
+smalltalk.method({
+selector: "renderItem:level:on:",
+category: 'rendering',
+fn: function (aClass,anInteger,html){
+var self=this;
+var $2,$3,$1;
+var li;
+li=smalltalk.send(html,"_li",[]);
+smalltalk.send(li,"_at_put_",["list-data",smalltalk.send(smalltalk.send(self,"_items",[]),"_indexOf_",[aClass])]);
+smalltalk.send(li,"_class_",[smalltalk.send(self,"_cssClassForItem_",[aClass])]);
+$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(self,"_iconForItem_",[aClass])]);
+return smalltalk.send(self,"_renderItemLabel_level_on_",[aClass,anInteger,html]);
+})]);
+$3=smalltalk.send($2,"_onClick_",[(function(){
+return smalltalk.send(self,"_activateListItem_",[smalltalk.send(li,"_asJQuery",[])]);
+})]);
+return $3;
+})]);
+smalltalk.send(smalltalk.send(self,"_getChildrenOf_",[aClass]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_level_on_",[each,smalltalk.send(anInteger,"__plus",[(1)]),html]);
+})]);
+return self},
+args: ["aClass", "anInteger", "html"],
+source: "renderItem: aClass level: anInteger on: html\x0a\x09| li |\x0a    \x0a\x09li := html li.\x0a    li\x0a    \x09at: 'list-data' put: (self items indexOf: aClass);\x0a    \x09class: (self cssClassForItem: aClass);\x0a        with: [ \x0a        \x09html a\x0a            \x09with: [ \x0a            \x09\x09(html tag: 'i') class: (self iconForItem: aClass).\x0a  \x09\x09\x09\x09\x09self renderItemLabel: aClass level: anInteger on: html ];\x0a\x09\x09\x09\x09onClick: [\x0a                  \x09self activateListItem: li asJQuery ] ].\x0a                    \x0a    (self getChildrenOf: aClass) do: [ :each |\x0a    \x09self renderItem: each level: anInteger + 1 on: html ]",
+messageSends: ["li", "at:put:", "indexOf:", "items", "class:", "cssClassForItem:", "with:", "iconForItem:", "tag:", "renderItemLabel:level:on:", "a", "onClick:", "activateListItem:", "asJQuery", "do:", "renderItem:level:on:", "+", "getChildrenOf:"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItem_on_",
+smalltalk.method({
+selector: "renderItem:on:",
+category: 'rendering',
+fn: function (aClass,html){
+var self=this;
+smalltalk.send(self,"_renderItem_on_",[aClass,html],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_getChildrenOf_",[aClass]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_level_on_",[each,(1),html]);
+})]);
+return self},
+args: ["aClass", "html"],
+source: "renderItem: aClass on: html\x0a\x09super renderItem: aClass on: html.\x0a    \x09(self getChildrenOf: aClass) do: [ :each |\x0a    \x09\x09self renderItem: each level: 1 on: html ]",
+messageSends: ["renderItem:on:", "do:", "renderItem:level:on:", "getChildrenOf:"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_level_on_",
+smalltalk.method({
+selector: "renderItemLabel:level:on:",
+category: 'rendering',
+fn: function (aClass,anInteger,html){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(html,"_span",[]),"_asJQuery",[]),"_html_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+smalltalk.send(anInteger,"_timesRepeat_",[(function(){
+return smalltalk.send(str,"_nextPutAll_",["&nbsp;&nbsp;&nbsp;&nbsp;"]);
+})]);
+return smalltalk.send(str,"_nextPutAll_",[smalltalk.send(aClass,"_name",[])]);
+})])]);
+return self},
+args: ["aClass", "anInteger", "html"],
+source: "renderItemLabel: aClass level: anInteger on: html\x0a\x09html span asJQuery html: (String streamContents: [ :str |\x0a\x09\x09anInteger timesRepeat: [\x0a\x09\x09\x09str nextPutAll: '&nbsp;&nbsp;&nbsp;&nbsp;'].\x0a\x09\x09\x09str nextPutAll: aClass name ])",
+messageSends: ["html:", "streamContents:", "timesRepeat:", "nextPutAll:", "name", "asJQuery", "span"],
+referencedClasses: ["String"]
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_on_",
+smalltalk.method({
+selector: "renderItemLabel:on:",
+category: 'rendering',
+fn: function (aClass,html){
+var self=this;
+smalltalk.send(self,"_renderItemLabel_level_on_",[aClass,(0),html]);
+return self},
+args: ["aClass", "html"],
+source: "renderItemLabel: aClass on: html\x0a\x09self renderItemLabel: aClass level: 0 on: html",
+messageSends: ["renderItemLabel:level:on:"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_renderListOn_",
+smalltalk.method({
+selector: "renderListOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_getRootClassesOf_",[smalltalk.send(self,"_items",[])]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_on_",[each,html]);
+})]);
+return self},
+args: ["html"],
+source: "renderListOn: html\x0a\x09(self getRootClassesOf: self items)\x0a    \x09do: [ :each | self renderItem: each on: html ]",
+messageSends: ["do:", "renderItem:on:", "getRootClassesOf:", "items"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+category: 'actions',
+fn: function (aClass){
+var self=this;
+smalltalk.send(self,"_selectItem_",[aClass],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass_",[aClass]);
+return self},
+args: ["aClass"],
+source: "selectItem: aClass\x0a\x09super selectItem: aClass.\x0a    self model selectedClass: aClass",
+messageSends: ["selectItem:", "selectedClass:", "model"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_showInstance_",
+smalltalk.method({
+selector: "showInstance:",
+category: 'actions',
+fn: function (aBoolean){
+var self=this;
+var $1;
+$1=smalltalk.send(aBoolean,"__eq",[smalltalk.send(smalltalk.send(self,"_browser",[]),"_showInstance",[])]);
+if(! smalltalk.assert($1)){
+smalltalk.send(smalltalk.send(self,"_browser",[]),"_showInstance_",[aBoolean]);
+};
+return self},
+args: ["aBoolean"],
+source: "showInstance: aBoolean\x0a\x09aBoolean = self browser showInstance ifFalse: [\x0a\x09\x09self browser showInstance: aBoolean ]",
+messageSends: ["ifFalse:", "showInstance:", "browser", "=", "showInstance"],
+referencedClasses: []
+}),
+smalltalk.HLClassesListWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+category: 'announcements',
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLPackageSelected || HLPackageSelected),(function(ann){
+return smalltalk.send(self,"_packageSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+return self},
+args: ["anAnnouncer"],
+source: "subscribeTo: anAnnouncer\x0a\x09anAnnouncer on: HLPackageSelected do: [ :ann |\x0a    \x09self packageSelected: ann item ]\x0a    ",
+messageSends: ["on:do:", "packageSelected:", "item"],
+referencedClasses: ["HLPackageSelected"]
+}),
+smalltalk.HLClassesListWidget);
+
+
+
+smalltalk.addClass('HLMethodsListWidget', smalltalk.HLBrowserListWidget, ['selectorsCache'], 'Helios-Browser');
+smalltalk.addMethod(
+"_allProtocol",
+smalltalk.method({
+selector: "allProtocol",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_allProtocol",[]);
+return $1;
+},
+args: [],
+source: "allProtocol\x0a\x09^ self model allProtocol",
+messageSends: ["allProtocol", "model"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_flushSelectorsCache",
+smalltalk.method({
+selector: "flushSelectorsCache",
+category: 'cache',
+fn: function (){
+var self=this;
+self["@selectorsCache"]=smalltalk.send((smalltalk.Dictionary || Dictionary),"_new",[]);
+return self},
+args: [],
+source: "flushSelectorsCache\x0a\x09selectorsCache := Dictionary new",
+messageSends: ["new"],
+referencedClasses: ["Dictionary"]
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_iconForItem_",
+smalltalk.method({
+selector: "iconForItem:",
+category: 'accessing',
+fn: function (aCompiledMethod){
+var self=this;
+var $1;
+var override;
+var overriden;
+override=smalltalk.send(self,"_isOverride_",[aCompiledMethod]);
+overriden=smalltalk.send(self,"_isOverriden_",[aCompiledMethod]);
+if(smalltalk.assert(override)){
+if(smalltalk.assert(overriden)){
+$1="icon-resize-vertical";
+} else {
+$1="icon-arrow-up";
+};
+} else {
+if(smalltalk.assert(overriden)){
+$1="icon-arrow-down";
+} else {
+$1="icon-none";
+};
+};
+return $1;
+},
+args: ["aCompiledMethod"],
+source: "iconForItem: aCompiledMethod\x0a\x09| override overriden |\x0a    \x0a    override := self isOverride: aCompiledMethod.\x0a    overriden := self isOverriden: aCompiledMethod.\x0a    \x0a\x09^ override\x0a    \x09ifTrue: [ overriden\x0a\x09\x09\x09ifTrue: [ 'icon-resize-vertical' ]\x0a\x09\x09\x09ifFalse: [ 'icon-arrow-up' ] ]\x0a\x09\x09ifFalse: [\x0a\x09\x09\x09overriden\x0a\x09\x09\x09ifTrue: [ 'icon-arrow-down' ]\x0a\x09\x09\x09ifFalse: [ 'icon-none' ] ]",
+messageSends: ["isOverride:", "isOverriden:", "ifTrue:ifFalse:"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initialize",[],smalltalk.HLBrowserListWidget);
+smalltalk.send(self,"_flushSelectorsCache",[]);
+return self},
+args: [],
+source: "initialize\x0a\x09super initialize.\x0a    self flushSelectorsCache",
+messageSends: ["initialize", "flushSelectorsCache"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_isOverride_",
+smalltalk.method({
+selector: "isOverride:",
+category: 'testing',
+fn: function (aMethod){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_overrideSelectors",[]),"_includes_",[smalltalk.send(aMethod,"_selector",[])]);
+return $1;
+},
+args: ["aMethod"],
+source: "isOverride: aMethod\x0a\x0a   ^ self overrideSelectors includes: aMethod selector",
+messageSends: ["includes:", "selector", "overrideSelectors"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_isOverriden_",
+smalltalk.method({
+selector: "isOverriden:",
+category: 'testing',
+fn: function (aMethod){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_overridenSelectors",[]),"_includes_",[smalltalk.send(aMethod,"_selector",[])]);
+return $1;
+},
+args: ["aMethod"],
+source: "isOverriden: aMethod\x0a\x0a   ^ self overridenSelectors includes: aMethod selector",
+messageSends: ["includes:", "selector", "overridenSelectors"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_methodsInProtocol_",
+smalltalk.method({
+selector: "methodsInProtocol:",
+category: 'accessing',
+fn: function (aString){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(aString,"__eq",[smalltalk.send(self,"_allProtocol",[])]);
+if(smalltalk.assert($2)){
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_methods",[]);
+} else {
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_methodsInProtocol_",[aString]);
+};
+return $1;
+},
+args: ["aString"],
+source: "methodsInProtocol: aString\x0a\x09^ aString = self allProtocol\x0a    \x09ifTrue: [ self model selectedClass methods ]\x0a      \x09ifFalse: [ self model selectedClass methodsInProtocol: aString ]",
+messageSends: ["ifTrue:ifFalse:", "methods", "selectedClass", "model", "methodsInProtocol:", "=", "allProtocol"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_overrideSelectors",
+smalltalk.method({
+selector: "overrideSelectors",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$1;
+$1=smalltalk.send(smalltalk.send(self,"_selectorsCache",[]),"_at_ifAbsentPut_",["override",(function(){
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_allSuperclasses",[]),"_inject_into_",[smalltalk.send((smalltalk.Set || Set),"_new",[]),(function(acc,each){
+smalltalk.send(acc,"_addAll_",[smalltalk.send(each,"_selectors",[])]);
+$2=smalltalk.send(acc,"_yourself",[]);
+return $2;
+})]);
+})]);
+return $1;
+},
+args: [],
+source: "overrideSelectors\x0a\x09^ self selectorsCache \x0a    \x09at: 'override'\x0a        ifAbsentPut: [ \x0a        \x09self model selectedClass allSuperclasses\x0a\x09\x09\x09\x09inject: Set new into: [ :acc :each | acc addAll: each selectors; yourself ] ]",
+messageSends: ["at:ifAbsentPut:", "inject:into:", "new", "addAll:", "selectors", "yourself", "allSuperclasses", "selectedClass", "model", "selectorsCache"],
+referencedClasses: ["Set"]
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_overridenSelectors",
+smalltalk.method({
+selector: "overridenSelectors",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$1;
+$1=smalltalk.send(smalltalk.send(self,"_selectorsCache",[]),"_at_ifAbsentPut_",["overriden",(function(){
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_allSubclasses",[]),"_inject_into_",[smalltalk.send((smalltalk.Set || Set),"_new",[]),(function(acc,each){
+smalltalk.send(acc,"_addAll_",[smalltalk.send(each,"_selectors",[])]);
+$2=smalltalk.send(acc,"_yourself",[]);
+return $2;
+})]);
+})]);
+return $1;
+},
+args: [],
+source: "overridenSelectors\x0a\x09^ self selectorsCache \x0a    \x09at: 'overriden'\x0a        ifAbsentPut: [ \x0a        \x09self model selectedClass allSubclasses\x0a\x09\x09\x09\x09inject: Set new into: [ :acc :each | acc addAll: each selectors; yourself ] ]",
+messageSends: ["at:ifAbsentPut:", "inject:into:", "new", "addAll:", "selectors", "yourself", "allSubclasses", "selectedClass", "model", "selectorsCache"],
+referencedClasses: ["Set"]
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_protocolSelected_",
+smalltalk.method({
+selector: "protocolSelected:",
+category: 'actions',
+fn: function (aString){
+var self=this;
+var $2,$1;
+smalltalk.send(self,"_selectedItem_",[nil]);
+$2=smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]);
+if(($receiver = $2) == nil || $receiver == undefined){
+$1=[];
+} else {
+if(($receiver = aString) == nil || $receiver == undefined){
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_methods",[]);
+} else {
+$1=smalltalk.send(self,"_methodsInProtocol_",[aString]);
+};
+};
+smalltalk.send(self,"_items_",[$1]);
+smalltalk.send(self,"_refresh",[]);
+return self},
+args: ["aString"],
+source: "protocolSelected: aString\x0a    self selectedItem: nil.\x0a    \x0a    self items: (self model selectedClass \x0a    \x09ifNil: [ #() ]\x0a      \x09ifNotNil: [ aString\x0a    \x09\x09ifNil: [ self model selectedClass methods ]\x0a      \x09\x09ifNotNil: [ self methodsInProtocol: aString ] ]).\x0a        \x0a    self refresh",
+messageSends: ["selectedItem:", "items:", "ifNil:ifNotNil:", "methods", "selectedClass", "model", "methodsInProtocol:", "refresh"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$2,$3;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+} else {
+$2=smalltalk.send(html,"_div",[]);
+smalltalk.send($2,"_class_",["class_side"]);
+$3=smalltalk.send($2,"_with_",[(function(){
+return smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+})]);
+$3;
+};
+smalltalk.send(self,"_flushSelectorsCache",[]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09self model showInstance\x0a    \x09ifFalse: [ html div \x0a        \x09class: 'class_side'; \x0a            with: [ super renderContentOn: html ] ]\x0a      \x09ifTrue: [ super renderContentOn: html ].\x0a        \x0a    self flushSelectorsCache",
+messageSends: ["ifFalse:ifTrue:", "class:", "div", "with:", "renderContentOn:", "showInstance", "model", "flushSelectorsCache"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_renderItemLabel_on_",
+smalltalk.method({
+selector: "renderItemLabel:on:",
+category: 'rendering',
+fn: function (aCompiledMethod,html){
+var self=this;
+smalltalk.send(html,"_with_",[smalltalk.send(aCompiledMethod,"_selector",[])]);
+return self},
+args: ["aCompiledMethod", "html"],
+source: "renderItemLabel: aCompiledMethod on: html\x0a\x09html with: aCompiledMethod selector",
+messageSends: ["with:", "selector"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+category: 'actions',
+fn: function (aCompiledMethod){
+var self=this;
+smalltalk.send(self,"_selectItem_",[aCompiledMethod],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedMethod_",[aCompiledMethod]);
+return self},
+args: ["aCompiledMethod"],
+source: "selectItem: aCompiledMethod\x0a\x09super selectItem: aCompiledMethod.\x0a    self model selectedMethod: aCompiledMethod",
+messageSends: ["selectItem:", "selectedMethod:", "model"],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_selectorsCache",
+smalltalk.method({
+selector: "selectorsCache",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@selectorsCache"];
+},
+args: [],
+source: "selectorsCache\x0a\x09^ selectorsCache",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLMethodsListWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+category: 'announcements',
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLProtocolSelected || HLProtocolSelected),(function(ann){
+return smalltalk.send(self,"_protocolSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLShowInstanceToggled || HLShowInstanceToggled),(function(ann){
+return smalltalk.send(self,"_protocolSelected_",[nil]);
+})]);
+return self},
+args: ["anAnnouncer"],
+source: "subscribeTo: anAnnouncer\x0a\x09anAnnouncer on: HLProtocolSelected do: [ :ann |\x0a    \x09self protocolSelected: ann item ].\x0a    anAnnouncer on: HLShowInstanceToggled do: [ :ann |\x0a    \x09self protocolSelected: nil ]",
+messageSends: ["on:do:", "protocolSelected:", "item"],
+referencedClasses: ["HLProtocolSelected", "HLShowInstanceToggled"]
+}),
+smalltalk.HLMethodsListWidget);
+
+
+
+smalltalk.addClass('HLPackagesListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Browser');
+smalltalk.addMethod(
+"_focusClassesListWidget",
+smalltalk.method({
+selector: "focusClassesListWidget",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLClassesListFocus || HLClassesListFocus),"_new",[])]);
+return self},
+args: [],
+source: "focusClassesListWidget\x0a\x09self model announcer announce: HLClassesListFocus new",
+messageSends: ["announce:", "new", "announcer", "model"],
+referencedClasses: ["HLClassesListFocus"]
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@items"]) == nil || $receiver == undefined){
+self["@items"]=smalltalk.send(smalltalk.send(self,"_model",[]),"_packages",[]);
+$1=self["@items"];
+} else {
+$1=self["@items"];
+};
+return $1;
+},
+args: [],
+source: "items\x0a\x09^ items ifNil: [ items := self model packages ]",
+messageSends: ["ifNil:", "packages", "model"],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_registerBindingsOn_",
+smalltalk.method({
+selector: "registerBindingsOn:",
+category: 'keybindings',
+fn: function (aBindingGroup){
+var self=this;
+smalltalk.send(smalltalk.send(aBindingGroup,"_at_",["Go to"]),"_addActionKey_labelled_callback_",[(67),"Packages",(function(){
+return smalltalk.send(self,"_focus",[]);
+})]);
+return self},
+args: ["aBindingGroup"],
+source: "registerBindingsOn: aBindingGroup\x0a\x09(aBindingGroup at: 'Go to') \x0a    \x09addActionKey: 67 labelled: 'Packages' callback: [ self focus ]",
+messageSends: ["addActionKey:labelled:callback:", "focus", "at:"],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+smalltalk.addMethod(
+"_renderButtonsOn_",
+smalltalk.method({
+selector: "renderButtonsOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$2,$3,$5,$6,$7,$8,$4,$9,$10;
+$1=smalltalk.send(html,"_span",[]);
+smalltalk.send($1,"_class_",["info"]);
+$2=smalltalk.send($1,"_with_",["Auto commit is"]);
+$3=smalltalk.send(html,"_div",[]);
+smalltalk.send($3,"_class_",["btn-group switch"]);
+smalltalk.send($3,"_at_put_",["data-toggle","buttons-radio"]);
+$4=smalltalk.send($3,"_with_",[(function(){
+$5=smalltalk.send(html,"_button",[]);
+smalltalk.send($5,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+return smalltalk.send(str,"_nextPutAll_",["btn"]);
+})])]);
+$6=smalltalk.send($5,"_with_",["On"]);
+$6;
+$7=smalltalk.send(html,"_button",[]);
+smalltalk.send($7,"_class_",[smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(str){
+return smalltalk.send(str,"_nextPutAll_",["btn active"]);
+})])]);
+$8=smalltalk.send($7,"_with_",["Off"]);
+return $8;
+})]);
+$9=smalltalk.send(html,"_a",[]);
+smalltalk.send($9,"_class_",["btn"]);
+$10=smalltalk.send($9,"_with_",["Commit now"]);
+return self},
+args: ["html"],
+source: "renderButtonsOn: html\x0a\x0a\x09html span class: 'info'; with: 'Auto commit is'.\x0a\x09html div \x0a        class: 'btn-group switch';\x0a\x09\x09at: 'data-toggle' put: 'buttons-radio';\x0a\x09\x09with: [ \x0a           \x09html button \x0a                class: (String streamContents: [ :str |\x0a                \x09str nextPutAll: 'btn' ]);\x0a  \x09\x09\x09\x09with: 'On'.\x0a  \x09\x09\x09html button\x0a  \x09\x09\x09\x09class: (String streamContents: [ :str |\x0a                \x09str nextPutAll: 'btn active' ]);\x0a  \x09\x09\x09\x09with: 'Off' ].\x0a                \x0a    html a \x0a         \x09class: 'btn';\x0a\x09\x09\x09with: 'Commit now'.",
+messageSends: ["class:", "span", "with:", "div", "at:put:", "streamContents:", "nextPutAll:", "button", "a"],
+referencedClasses: ["String"]
+}),
+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,"_model",[]),"_selectedPackage_",[aPackage]);
+return self},
+args: ["aPackage"],
+source: "selectItem: aPackage\x0a\x09super selectItem: aPackage.\x0a    self model selectedPackage: aPackage",
+messageSends: ["selectItem:", "selectedPackage:", "model"],
+referencedClasses: []
+}),
+smalltalk.HLPackagesListWidget);
+
+
+
+smalltalk.addClass('HLProtocolsListWidget', smalltalk.HLBrowserListWidget, [], 'Helios-Browser');
+smalltalk.addMethod(
+"_allProtocol",
+smalltalk.method({
+selector: "allProtocol",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_allProtocol",[]);
+return $1;
+},
+args: [],
+source: "allProtocol\x0a\x09^ self model allProtocol",
+messageSends: ["allProtocol", "model"],
+referencedClasses: []
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_classSelected_",
+smalltalk.method({
+selector: "classSelected:",
+category: 'actions',
+fn: function (aClass){
+var self=this;
+var $2,$3,$1;
+smalltalk.send(self,"_selectedItem_",[nil]);
+if(($receiver = aClass) == nil || $receiver == undefined){
+$1=smalltalk.send((smalltalk.Array || Array),"_with_",[smalltalk.send(self,"_allProtocol",[])]);
+} else {
+$2=smalltalk.send((smalltalk.Array || Array),"_with_",[smalltalk.send(self,"_allProtocol",[])]);
+smalltalk.send($2,"_addAll_",[smalltalk.send(aClass,"_protocols",[])]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+};
+smalltalk.send(self,"_items_",[$1]);
+smalltalk.send(self,"_refresh",[]);
+return self},
+args: ["aClass"],
+source: "classSelected: aClass\x0a    self selectedItem: nil.\x0a    \x0a    self items: (aClass\x0a    \x09ifNil: [ Array with: self allProtocol ]\x0a      \x09ifNotNil: [ \x0a        \x09(Array with: self allProtocol) \x0a            \x09addAll: aClass protocols; \x0a                yourself ]).\x0a\x0a    self refresh",
+messageSends: ["selectedItem:", "items:", "ifNil:ifNotNil:", "with:", "allProtocol", "addAll:", "protocols", "yourself", "refresh"],
+referencedClasses: ["Array"]
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$2,$3;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_showInstance",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+} else {
+$2=smalltalk.send(html,"_div",[]);
+smalltalk.send($2,"_class_",["class_side"]);
+$3=smalltalk.send($2,"_with_",[(function(){
+return smalltalk.send(self,"_renderContentOn_",[html],smalltalk.HLBrowserListWidget);
+})]);
+$3;
+};
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09self model showInstance\x0a    \x09ifFalse: [ html div \x0a        \x09class: 'class_side'; \x0a            with: [ super renderContentOn: html ] ]\x0a      \x09ifTrue: [ super renderContentOn: html ]",
+messageSends: ["ifFalse:ifTrue:", "class:", "div", "with:", "renderContentOn:", "showInstance", "model"],
+referencedClasses: []
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_selectItem_",
+smalltalk.method({
+selector: "selectItem:",
+category: 'actions',
+fn: function (aString){
+var self=this;
+smalltalk.send(self,"_selectItem_",[aString],smalltalk.HLBrowserListWidget);
+smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedProtocol_",[aString]);
+return self},
+args: ["aString"],
+source: "selectItem: aString\x0a\x09super selectItem: aString.\x0a    self model selectedProtocol: aString",
+messageSends: ["selectItem:", "selectedProtocol:", "model"],
+referencedClasses: []
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_selectedItem",
+smalltalk.method({
+selector: "selectedItem",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(self,"_selectedItem",[],smalltalk.HLBrowserListWidget);
+if(($receiver = $2) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_allProtocol",[]);
+} else {
+$1=$2;
+};
+return $1;
+},
+args: [],
+source: "selectedItem\x0a\x09^ super selectedItem ifNil: [ self allProtocol ]",
+messageSends: ["ifNil:", "allProtocol", "selectedItem"],
+referencedClasses: []
+}),
+smalltalk.HLProtocolsListWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+category: 'announcements',
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLClassSelected || HLClassSelected),(function(ann){
+return smalltalk.send(self,"_classSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLShowInstanceToggled || HLShowInstanceToggled),(function(ann){
+return smalltalk.send(self,"_classSelected_",[smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[])]);
+})]);
+return self},
+args: ["anAnnouncer"],
+source: "subscribeTo: anAnnouncer\x0a\x09anAnnouncer on: HLClassSelected do: [ :ann |\x0a    \x09self classSelected: ann item ].\x0a    anAnnouncer on: HLShowInstanceToggled do: [ :ann |\x0a    \x09self classSelected: self model selectedClass ]",
+messageSends: ["on:do:", "classSelected:", "item", "selectedClass", "model"],
+referencedClasses: ["HLClassSelected", "HLShowInstanceToggled"]
+}),
+smalltalk.HLProtocolsListWidget);
+
+
+
+smalltalk.addClass('HLBrowserModel', smalltalk.Object, ['announcer', 'environment', 'selectedPackage', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'showInstance', 'showComment'], 'Helios-Browser');
+smalltalk.addMethod(
+"_allProtocol",
+smalltalk.method({
+selector: "allProtocol",
+category: 'accessing',
+fn: function (){
+var self=this;
+return "-- All --";
+},
+args: [],
+source: "allProtocol\x0a\x09^ '-- All --'",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_announcer",
+smalltalk.method({
+selector: "announcer",
+category: 'announcements',
+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.HLBrowserModel);
+
+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.HLBrowserModel);
+
+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.HLBrowserModel);
+
+smalltalk.addMethod(
+"_packages",
+smalltalk.method({
+selector: "packages",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_environment",[]),"_packages",[]);
+return $1;
+},
+args: [],
+source: "packages\x0a\x09^ self environment packages",
+messageSends: ["packages", "environment"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedClass",
+smalltalk.method({
+selector: "selectedClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@selectedClass"];
+},
+args: [],
+source: "selectedClass\x0a\x09^ selectedClass",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedClass_",
+smalltalk.method({
+selector: "selectedClass:",
+category: 'accessing',
+fn: function (aClass){
+var self=this;
+var $1,$2;
+if(($receiver = aClass) == nil || $receiver == undefined){
+self["@selectedClass"]=nil;
+self["@selectedClass"];
+} else {
+$1=smalltalk.send(self,"_showInstance",[]);
+if(smalltalk.assert($1)){
+self["@selectedClass"]=smalltalk.send(aClass,"_theNonMetaClass",[]);
+self["@selectedClass"];
+} else {
+self["@selectedClass"]=smalltalk.send(aClass,"_theMetaClass",[]);
+self["@selectedClass"];
+};
+};
+smalltalk.send(self,"_selectedMethod_",[nil]);
+$2=smalltalk.send(self,"_selectedProtocol_",[nil]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLClassSelected || HLClassSelected),"_on_",[smalltalk.send(self,"_selectedClass",[])])]);
+return self},
+args: ["aClass"],
+source: "selectedClass: aClass\x0a\x09aClass \x0a    \x09ifNil: [ selectedClass := nil ]\x0a      \x09ifNotNil: [\x0a\x09\x09\x09self showInstance \x0a    \x09\x09\x09ifTrue: [ selectedClass := aClass theNonMetaClass ]\x0a      \x09\x09\x09ifFalse: [ selectedClass := aClass theMetaClass ] ].\x0a    \x0a    self \x0a    \x09selectedMethod: nil;\x0a        selectedProtocol: nil.\x0a        \x0a   self announcer announce: (HLClassSelected on: self selectedClass)",
+messageSends: ["ifNil:ifNotNil:", "ifTrue:ifFalse:", "theNonMetaClass", "theMetaClass", "showInstance", "selectedMethod:", "selectedProtocol:", "announce:", "on:", "selectedClass", "announcer"],
+referencedClasses: ["HLClassSelected"]
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedMethod",
+smalltalk.method({
+selector: "selectedMethod",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@selectedMethod"];
+},
+args: [],
+source: "selectedMethod\x0a\x09^ selectedMethod",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedMethod_",
+smalltalk.method({
+selector: "selectedMethod:",
+category: 'accessing',
+fn: function (aCompiledMethod){
+var self=this;
+self["@selectedMethod"]=aCompiledMethod;
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLMethodSelected || HLMethodSelected),"_on_",[aCompiledMethod])]);
+return self},
+args: ["aCompiledMethod"],
+source: "selectedMethod: aCompiledMethod\x0a\x09selectedMethod := aCompiledMethod.\x0a    \x0a    self announcer announce: (HLMethodSelected on: aCompiledMethod)",
+messageSends: ["announce:", "on:", "announcer"],
+referencedClasses: ["HLMethodSelected"]
+}),
+smalltalk.HLBrowserModel);
+
+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.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedPackage_",
+smalltalk.method({
+selector: "selectedPackage:",
+category: 'accessing',
+fn: function (aPackage){
+var self=this;
+self["@selectedPackage"]=aPackage;
+smalltalk.send(self,"_selectedClass_",[nil]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLPackageSelected || HLPackageSelected),"_on_",[aPackage])]);
+return self},
+args: ["aPackage"],
+source: "selectedPackage: aPackage\x0a\x0a\x09selectedPackage := aPackage.\x0a    self selectedClass: nil.\x0a    \x0a    self announcer announce: (HLPackageSelected on: aPackage)",
+messageSends: ["selectedClass:", "announce:", "on:", "announcer"],
+referencedClasses: ["HLPackageSelected"]
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedProtocol",
+smalltalk.method({
+selector: "selectedProtocol",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@selectedProtocol"];
+},
+args: [],
+source: "selectedProtocol\x0a\x09^ selectedProtocol",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_selectedProtocol_",
+smalltalk.method({
+selector: "selectedProtocol:",
+category: 'accessing',
+fn: function (aString){
+var self=this;
+self["@selectedProtocol"]=aString;
+smalltalk.send(self,"_selectedMethod_",[nil]);
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLProtocolSelected || HLProtocolSelected),"_on_",[aString])]);
+return self},
+args: ["aString"],
+source: "selectedProtocol: aString\x0a\x09selectedProtocol := aString.\x0a    \x0a    self selectedMethod: nil.\x0a    \x0a    self announcer announce: (HLProtocolSelected on: aString)",
+messageSends: ["selectedMethod:", "announce:", "on:", "announcer"],
+referencedClasses: ["HLProtocolSelected"]
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showComment",
+smalltalk.method({
+selector: "showComment",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@showComment"]) == nil || $receiver == undefined){
+$1=false;
+} else {
+$1=self["@showComment"];
+};
+return $1;
+},
+args: [],
+source: "showComment\x0a\x09^ showComment ifNil: [ false ]",
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showComment_",
+smalltalk.method({
+selector: "showComment:",
+category: 'accessing',
+fn: function (aBoolean){
+var self=this;
+self["@showComment"]=aBoolean;
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLShowCommentToggled || HLShowCommentToggled),"_new",[])]);
+return self},
+args: ["aBoolean"],
+source: "showComment: aBoolean\x0a\x09showComment := aBoolean.\x0a    \x0a    self announcer announce: HLShowCommentToggled new",
+messageSends: ["announce:", "new", "announcer"],
+referencedClasses: ["HLShowCommentToggled"]
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showInstance",
+smalltalk.method({
+selector: "showInstance",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@showInstance"]) == nil || $receiver == undefined){
+$1=true;
+} else {
+$1=self["@showInstance"];
+};
+return $1;
+},
+args: [],
+source: "showInstance\x0a\x09^ showInstance ifNil: [ true ]",
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_showInstance_",
+smalltalk.method({
+selector: "showInstance:",
+category: 'accessing',
+fn: function (aBoolean){
+var self=this;
+var $1,$2;
+self["@showInstance"]=aBoolean;
+$1=smalltalk.send(self,"_selectedClass",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+if(smalltalk.assert(aBoolean)){
+$2=smalltalk.send(smalltalk.send(self,"_selectedClass",[]),"_theNonMetaClass",[]);
+} else {
+$2=smalltalk.send(smalltalk.send(self,"_selectedClass",[]),"_theMetaClass",[]);
+};
+smalltalk.send(self,"_selectedClass_",[$2]);
+};
+smalltalk.send(smalltalk.send(self,"_announcer",[]),"_announce_",[smalltalk.send((smalltalk.HLShowInstanceToggled || HLShowInstanceToggled),"_new",[])]);
+return self},
+args: ["aBoolean"],
+source: "showInstance: aBoolean\x0a\x09showInstance := aBoolean.\x0a    \x0a    self selectedClass ifNotNil: [\x0a    \x09self selectedClass: (aBoolean\x0a    \x09\x09ifTrue: [self selectedClass theNonMetaClass ]\x0a    \x09  \x09ifFalse: [ self selectedClass theMetaClass ]) ].\x0a    \x0a    self announcer announce: HLShowInstanceToggled new",
+messageSends: ["ifNotNil:", "selectedClass:", "ifTrue:ifFalse:", "theNonMetaClass", "selectedClass", "theMetaClass", "announce:", "new", "announcer"],
+referencedClasses: ["HLShowInstanceToggled"]
+}),
+smalltalk.HLBrowserModel);
+
+smalltalk.addMethod(
+"_subscribe_",
+smalltalk.method({
+selector: "subscribe:",
+category: 'announcements',
+fn: function (aWidget){
+var self=this;
+smalltalk.send(aWidget,"_subscribeTo_",[smalltalk.send(self,"_announcer",[])]);
+return self},
+args: ["aWidget"],
+source: "subscribe: aWidget\x0a\x09aWidget subscribeTo: self announcer",
+messageSends: ["subscribeTo:", "announcer"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserModel);
+
+
+
+smalltalk.addClass('HLBrowserSourceWidget', smalltalk.HLWidget, ['model', 'sourceArea'], 'Helios-Browser');
+smalltalk.addMethod(
+"_classSelected_",
+smalltalk.method({
+selector: "classSelected:",
+category: 'actions',
+fn: function (aClass){
+var self=this;
+var $1;
+if(($receiver = aClass) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_contents_",[""]);
+return $1;
+} else {
+aClass;
+};
+smalltalk.send(self,"_contents_",[smalltalk.send(aClass,"_definition",[])]);
+return self},
+args: ["aClass"],
+source: "classSelected: aClass\x0a\x09aClass ifNil: [ ^ self contents: '' ].\x0a    \x0a    self contents: aClass definition",
+messageSends: ["ifNil:", "contents:", "definition"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_contents",
+smalltalk.method({
+selector: "contents",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_sourceArea",[]),"_contents",[]);
+return $1;
+},
+args: [],
+source: "contents\x0a\x09^ self sourceArea contents",
+messageSends: ["contents", "sourceArea"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_contents_",
+smalltalk.method({
+selector: "contents:",
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_sourceArea",[]),"_contents_",[aString]);
+return self},
+args: ["aString"],
+source: "contents: aString\x0a\x09self sourceArea contents: aString",
+messageSends: ["contents:", "sourceArea"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_methodSelected_",
+smalltalk.method({
+selector: "methodSelected:",
+category: 'actions',
+fn: function (aCompiledMethod){
+var self=this;
+var $1;
+if(($receiver = aCompiledMethod) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_contents_",[""]);
+return $1;
+} else {
+aCompiledMethod;
+};
+smalltalk.send(self,"_contents_",[smalltalk.send(aCompiledMethod,"_source",[])]);
+return self},
+args: ["aCompiledMethod"],
+source: "methodSelected: aCompiledMethod\x0a\x09aCompiledMethod ifNil: [ ^ self contents: '' ].\x0a    \x0a    self contents: aCompiledMethod source",
+messageSends: ["ifNil:", "contents:", "source"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_model",
+smalltalk.method({
+selector: "model",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@model"];
+},
+args: [],
+source: "model\x0a\x09^ model",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_model_",
+smalltalk.method({
+selector: "model:",
+category: 'accessing',
+fn: function (aBrowserModel){
+var self=this;
+self["@model"]=aBrowserModel;
+smalltalk.send(self["@model"],"_subscribe_",[self]);
+return self},
+args: ["aBrowserModel"],
+source: "model: aBrowserModel\x0a\x09\x22TODO: unsubscribe from previous model\x22\x0a    \x0a\x09model := aBrowserModel.\x0a    model subscribe: self",
+messageSends: ["subscribe:"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_protocolSelected_",
+smalltalk.method({
+selector: "protocolSelected:",
+category: 'actions',
+fn: function (aString){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$2=smalltalk.send(self,"_contents_",[""]);
+return $2;
+} else {
+$1;
+};
+smalltalk.send(self,"_contents_",[smalltalk.send(smalltalk.send(smalltalk.send(self,"_model",[]),"_selectedClass",[]),"_definition",[])]);
+return self},
+args: ["aString"],
+source: "protocolSelected: aString\x0a\x09self model selectedClass ifNil: [ ^ self contents: '' ].\x0a    \x0a    self contents: self model selectedClass definition",
+messageSends: ["ifNil:", "contents:", "selectedClass", "model", "definition"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_sourceArea",[]),"_renderOn_",[html]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09self sourceArea renderOn: html",
+messageSends: ["renderOn:", "sourceArea"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_sourceArea",
+smalltalk.method({
+selector: "sourceArea",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@sourceArea"]) == nil || $receiver == undefined){
+self["@sourceArea"]=smalltalk.send((smalltalk.HLSourceArea || HLSourceArea),"_new",[]);
+$1=self["@sourceArea"];
+} else {
+$1=self["@sourceArea"];
+};
+return $1;
+},
+args: [],
+source: "sourceArea\x0a\x09^ sourceArea ifNil: [ sourceArea := HLSourceArea new ]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["HLSourceArea"]
+}),
+smalltalk.HLBrowserSourceWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+category: 'announcements',
+fn: function (anAnnouncer){
+var self=this;
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLMethodSelected || HLMethodSelected),(function(ann){
+return smalltalk.send(self,"_methodSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLClassSelected || HLClassSelected),(function(ann){
+return smalltalk.send(self,"_classSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+smalltalk.send(anAnnouncer,"_on_do_",[(smalltalk.HLProtocolSelected || HLProtocolSelected),(function(ann){
+return smalltalk.send(self,"_protocolSelected_",[smalltalk.send(ann,"_item",[])]);
+})]);
+return self},
+args: ["anAnnouncer"],
+source: "subscribeTo: anAnnouncer\x0a\x09anAnnouncer on: HLMethodSelected do: [ :ann |\x0a    \x09self methodSelected: ann item ].\x0a    anAnnouncer on: HLClassSelected do: [ :ann |\x0a    \x09self classSelected: ann item ].\x0a    anAnnouncer on: HLProtocolSelected do: [ :ann |\x0a    \x09self protocolSelected: ann item ]",
+messageSends: ["on:do:", "methodSelected:", "item", "classSelected:", "protocolSelected:"],
+referencedClasses: ["HLMethodSelected", "HLClassSelected", "HLProtocolSelected"]
+}),
+smalltalk.HLBrowserSourceWidget);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+category: 'instance creation',
+fn: function (aBrowserModel){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_model_",[aBrowserModel]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["aBrowserModel"],
+source: "on: aBrowserModel\x0a\x09^ self new\x0a    \x09model: aBrowserModel;\x0a        yourself",
+messageSends: ["model:", "new", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLBrowserSourceWidget.klass);
+
+

+ 1484 - 0
js/Helios-Core.deploy.js

@@ -0,0 +1,1484 @@
+smalltalk.addPackage('Helios-Core', {});
+smalltalk.addClass('HLSourceArea', smalltalk.Widget, ['editor', 'textarea', 'div', 'receiver', 'onDoIt'], 'Helios-Core');
+smalltalk.addMethod(
+"_clear",
+smalltalk.method({
+selector: "clear",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_contents_",[""]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_contents",
+smalltalk.method({
+selector: "contents",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getValue",[]);
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_contents_",
+smalltalk.method({
+selector: "contents:",
+fn: function (aString){
+var self=this;
+smalltalk.send(self["@editor"],"_setValue_",[aString]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_currentLine",
+smalltalk.method({
+selector: "currentLine",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getLine_",[smalltalk.send(smalltalk.send(self["@editor"],"_getCursor",[]),"_line",[])]);
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_currentLineOrSelection",
+smalltalk.method({
+selector: "currentLineOrSelection",
+fn: function (){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(self["@editor"],"_somethingSelected",[]);
+if(smalltalk.assert($2)){
+$1=smalltalk.send(self,"_selection",[]);
+} else {
+$1=smalltalk.send(self,"_currentLine",[]);
+};
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_doIt",
+smalltalk.method({
+selector: "doIt",
+fn: function (){
+var self=this;
+var $1;
+var result;
+result=smalltalk.send(self,"_eval_",[smalltalk.send(self,"_currentLineOrSelection",[])]);
+$1=smalltalk.send(self,"_onDoIt",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+smalltalk.send(smalltalk.send(self,"_onDoIt",[]),"_value",[]);
+};
+return result;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_editor",
+smalltalk.method({
+selector: "editor",
+fn: function (){
+var self=this;
+return self["@editor"];
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_eval_",
+smalltalk.method({
+selector: "eval:",
+fn: function (aString){
+var self=this;
+var $1,$2;
+var $early={};
+try {
+var compiler;
+compiler=smalltalk.send((smalltalk.Compiler || Compiler),"_new",[]);
+smalltalk.send((function(){
+return smalltalk.send(compiler,"_parseExpression_",[aString]);
+}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
+$1=smalltalk.send(window,"_alert_",[smalltalk.send(ex,"_messageText",[])]);
+throw $early=[$1];
+})]);
+$2=smalltalk.send(smalltalk.send(smalltalk.send(compiler,"_eval_",[smalltalk.send(compiler,"_compile_forClass_",[smalltalk.send(smalltalk.send("doIt ^[","__comma",[aString]),"__comma",["] value"]),(smalltalk.DoIt || DoIt)])]),"_fn",[]),"_applyTo_arguments_",[smalltalk.send(self,"_receiver",[]),[]]);
+return $2;
+}
+catch(e) {if(e===$early)return e[0]; throw e}
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_fileIn",
+smalltalk.method({
+selector: "fileIn",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send((smalltalk.Importer || Importer),"_new",[]),"_import_",[smalltalk.send(smalltalk.send(self,"_currentLineOrSelection",[]),"_readStream",[])]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_handleKeyDown_",
+smalltalk.method({
+selector: "handleKeyDown:",
+fn: function (anEvent){
+var self=this;
+if(anEvent.ctrlKey) {
+		if(anEvent.keyCode === 80) { //ctrl+p
+			self._printIt();
+			anEvent.preventDefault();
+			return false;
+		}
+		if(anEvent.keyCode === 68) { //ctrl+d
+			self._doIt();
+			anEvent.preventDefault();
+			return false;
+		}
+		if(anEvent.keyCode === 73) { //ctrl+i
+			self._inspectIt();
+			anEvent.preventDefault();
+			return false;
+		}
+	};
+;
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_inspectIt",
+smalltalk.method({
+selector: "inspectIt",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_doIt",[]),"_inspect",[]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onDoIt",
+smalltalk.method({
+selector: "onDoIt",
+fn: function (){
+var self=this;
+return self["@onDoIt"];
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onDoIt_",
+smalltalk.method({
+selector: "onDoIt:",
+fn: function (aBlock){
+var self=this;
+self["@onDoIt"]=aBlock;
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onKeyDown_",
+smalltalk.method({
+selector: "onKeyDown:",
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self["@div"],"_onKeyDown_",[aBlock]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onKeyUp_",
+smalltalk.method({
+selector: "onKeyUp:",
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self["@div"],"_onKeyUp_",[aBlock]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_print_",
+smalltalk.method({
+selector: "print:",
+fn: function (aString){
+var self=this;
+var start;
+var stop;
+start=smalltalk.send((smalltalk.HashedCollection || HashedCollection),"_new",[]);
+stop=smalltalk.send((smalltalk.HashedCollection || HashedCollection),"_new",[]);
+smalltalk.send(start,"_at_put_",["line",smalltalk.send(smalltalk.send(self["@editor"],"_getCursor_",[false]),"_line",[])]);
+smalltalk.send(start,"_at_put_",["ch",smalltalk.send(smalltalk.send(self["@editor"],"_getCursor_",[false]),"_ch",[])]);
+smalltalk.send(stop,"_at_put_",["line",smalltalk.send(start,"_at_",["line"])]);
+smalltalk.send(stop,"_at_put_",["ch",smalltalk.send(smalltalk.send(smalltalk.send(start,"_at_",["ch"]),"__plus",[smalltalk.send(aString,"_size",[])]),"__plus",[(2)])]);
+smalltalk.send(self["@editor"],"_replaceSelection_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self["@editor"],"_getSelection",[]),"__comma",[" "]),"__comma",[aString]),"__comma",[" "])]);
+smalltalk.send(self["@editor"],"_setCursor_",[smalltalk.send(self["@editor"],"_getCursor_",[true])]);
+smalltalk.send(self["@editor"],"_setSelection_end_",[stop,start]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_printIt",
+smalltalk.method({
+selector: "printIt",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_print_",[smalltalk.send(smalltalk.send(self,"_doIt",[]),"_printString",[])]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_receiver",
+smalltalk.method({
+selector: "receiver",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@receiver"]) == nil || $receiver == undefined){
+$1=smalltalk.send((smalltalk.DoIt || DoIt),"_new",[]);
+} else {
+$1=self["@receiver"];
+};
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_receiver_",
+smalltalk.method({
+selector: "receiver:",
+fn: function (anObject){
+var self=this;
+self["@receiver"]=anObject;
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+fn: function (html){
+var self=this;
+self["@div"]=smalltalk.send(smalltalk.send(html,"_div",[]),"_class_",["source"]);
+smalltalk.send(self["@div"],"_with_",[(function(){
+self["@textarea"]=smalltalk.send(html,"_textarea",[]);
+return self["@textarea"];
+})]);
+smalltalk.send(self,"_setEditorOn_",[smalltalk.send(self["@textarea"],"_element",[])]);
+smalltalk.send(self["@div"],"_onKeyDown_",[(function(e){
+return smalltalk.send(self,"_handleKeyDown_",[e]);
+})]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selection",
+smalltalk.method({
+selector: "selection",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getSelection",[]);
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionEnd",
+smalltalk.method({
+selector: "selectionEnd",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionEnd",[]);
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionEnd_",
+smalltalk.method({
+selector: "selectionEnd:",
+fn: function (anInteger){
+var self=this;
+smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionEnd_",[anInteger]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionStart",
+smalltalk.method({
+selector: "selectionStart",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionStart",[]);
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionStart_",
+smalltalk.method({
+selector: "selectionStart:",
+fn: function (anInteger){
+var self=this;
+smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionStart_",[anInteger]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_setEditorOn_",
+smalltalk.method({
+selector: "setEditorOn:",
+fn: function (aTextarea){
+var self=this;
+self['@editor'] = CodeMirror.fromTextArea(aTextarea, {
+		theme: 'amber',
+                lineNumbers: true,
+                enterMode: 'flat',
+                matchBrackets: true,
+                electricChars: false
+	});
+;
+return self}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_val",
+smalltalk.method({
+selector: "val",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getValue",[]);
+return $1;
+}
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_val_",
+smalltalk.method({
+selector: "val:",
+fn: function (aString){
+var self=this;
+smalltalk.send(self["@editor"],"_setValue_",[aString]);
+return self}
+}),
+smalltalk.HLSourceArea);
+
+
+
+smalltalk.addClass('HLTab', smalltalk.Object, ['widget', 'label'], 'Helios-Core');
+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.HLManager || HLManager),"_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-Core');
+smalltalk.addMethod(
+"_manager",
+smalltalk.method({
+selector: "manager",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send((smalltalk.HLManager || HLManager),"_current",[]);
+return $1;
+}
+}),
+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(
+"_registerBindings",
+smalltalk.method({
+selector: "registerBindings",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_registerBindingsOn_",[smalltalk.send(smalltalk.send(smalltalk.send(self,"_manager",[]),"_keyBinder",[]),"_bindings",[])]);
+return self}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_registerBindingsOn_",
+smalltalk.method({
+selector: "registerBindingsOn:",
+fn: function (aBindingGroup){
+var self=this;
+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;
+smalltalk.send(self,"_registerBindings",[]);
+self["@rootDiv"]=smalltalk.send(smalltalk.send(html,"_div",[]),"_with_",[(function(){
+return smalltalk.send(self,"_renderContentOn_",[html]);
+})]);
+return self}
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+fn: function (anAnnouncer){
+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.HLManager || HLManager),"_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('HLDebugger', smalltalk.HLWidget, [], 'Helios-Core');
+
+
+smalltalk.addClass('HLFocusableWidget', smalltalk.HLWidget, ['hiddenInput'], 'Helios-Core');
+smalltalk.addMethod(
+"_blur",
+smalltalk.method({
+selector: "blur",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_blur",[]);
+return self}
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_focus",
+smalltalk.method({
+selector: "focus",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_focus",[]);
+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(smalltalk.send(self["@rootDiv"],"_asJQuery",[]),"_removeClass_",[smalltalk.send(self,"_focusClass",[])]);
+})]);
+$2=smalltalk.send($1,"_onFocus_",[(function(){
+return smalltalk.send(smalltalk.send(self["@rootDiv"],"_asJQuery",[]),"_addClass_",[smalltalk.send(self,"_focusClass",[])]);
+})]);
+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,"_registerBindings",[]);
+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-Core');
+smalltalk.addMethod(
+"_activateListItem_",
+smalltalk.method({
+selector: "activateListItem:",
+fn: function (aListItem){
+var self=this;
+var $1,$2,$3;
+var parent;
+var position;
+$1=smalltalk.send(aListItem,"_get_",[(0)]);
+if(($receiver = $1) == nil || $receiver == undefined){
+return self;
+} else {
+$1;
+};
+position = aListItem.parent().children().get().indexOf(aListItem.get(0)) + 1;
+;
+parent=smalltalk.send(aListItem,"_parent",[]);
+smalltalk.send(smalltalk.send(parent,"_children",[]),"_removeClass_",["active"]);
+smalltalk.send(aListItem,"_addClass_",["active"]);
+$2=smalltalk.send(smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[]),"__lt",[(0)]);
+if(smalltalk.assert($2)){
+smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop",[]),"__plus",[smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[])]),"__minus",[(10)])]);
+};
+$3=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[]),"__plus",[smalltalk.send(aListItem,"_height",[])]),"__gt",[smalltalk.send(parent,"_height",[])]);
+if(smalltalk.assert($3)){
+smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop",[]),"__plus",[smalltalk.send(aListItem,"_height",[])]),"__minus",[smalltalk.send(smalltalk.send(parent,"_height",[]),"__minus",[smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[])])]),"__plus",[(10)])]);
+};
+smalltalk.send(self,"_selectItem_",[smalltalk.send(smalltalk.send(self,"_items",[]),"_at_",[smalltalk.send(smalltalk.send(aListItem,"_attr_",["list-data"]),"_asNumber",[])])]);
+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(
+"_iconForItem_",
+smalltalk.method({
+selector: "iconForItem:",
+fn: function (anObject){
+var self=this;
+return "";
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@items"]) == nil || $receiver == undefined){
+$1=[];
+} else {
+$1=self["@items"];
+};
+return $1;
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_items_",
+smalltalk.method({
+selector: "items:",
+fn: function (aCollection){
+var self=this;
+self["@items"]=aCollection;
+return self}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderButtonsOn_",
+smalltalk.method({
+selector: "renderButtonsOn:",
+fn: function (html){
+var self=this;
+return self}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+var $1,$2,$3,$4;
+$1=smalltalk.send(html,"_ul",[]);
+smalltalk.send($1,"_class_",["nav nav-pills nav-stacked"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+return smalltalk.send(self,"_renderListOn_",[html]);
+})]);
+$3=smalltalk.send(html,"_div",[]);
+smalltalk.send($3,"_class_",["pane_actions form-actions"]);
+$4=smalltalk.send($3,"_with_",[(function(){
+return smalltalk.send(self,"_renderButtonsOn_",[html]);
+})]);
+smalltalk.send(self,"_setupKeyBindings",[]);
+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])]);
+smalltalk.send(li,"_at_put_",["list-data",smalltalk.send(smalltalk.send(smalltalk.send(self,"_items",[]),"_indexOf_",[anObject]),"_asString",[])]);
+$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(self,"_iconForItem_",[anObject])]);
+return smalltalk.send(self,"_renderItemLabel_on_",[anObject,html]);
+})]);
+$3=smalltalk.send($2,"_onClick_",[(function(){
+return smalltalk.send(self,"_activateListItem_",[smalltalk.send(li,"_asJQuery",[])]);
+})]);
+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(
+"_renderListOn_",
+smalltalk.method({
+selector: "renderListOn:",
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_items",[]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_on_",[each,html]);
+})]);
+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;
+return self["@selectedItem"];
+}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_selectedItem_",
+smalltalk.method({
+selector: "selectedItem:",
+fn: function (anObject){
+var self=this;
+self["@selectedItem"]=anObject;
+return self}
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_setupKeyBindings",
+smalltalk.method({
+selector: "setupKeyBindings",
+fn: function (){
+var self=this;
+var $1,$2;
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_unbind_",["keydown"]);
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_keydown_",[(function(e){
+var selected;
+selected=smalltalk.send(window,"_jQuery_",[".focused .nav-pills .active"]);
+selected;
+$1=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(38)]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_activateListItem_",[smalltalk.send(selected,"_prev",[])]);
+};
+$2=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(40)]);
+if(smalltalk.assert($2)){
+return smalltalk.send(self,"_activateListItem_",[smalltalk.send(selected,"_next",[])]);
+};
+})]);
+return self}
+}),
+smalltalk.HLListWidget);
+
+
+
+smalltalk.addClass('HLNavigationListWidget', smalltalk.HLListWidget, ['previous', 'next'], 'Helios-Core');
+smalltalk.addMethod(
+"_next",
+smalltalk.method({
+selector: "next",
+fn: function (){
+var self=this;
+return self["@next"];
+}
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_next_",
+smalltalk.method({
+selector: "next:",
+fn: function (aWidget){
+var self=this;
+self["@next"]=aWidget;
+smalltalk.send(aWidget,"_previous_",[self]);
+return self}
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_nextFocus",
+smalltalk.method({
+selector: "nextFocus",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_next",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+smalltalk.send(smalltalk.send(self,"_next",[]),"_focus",[]);
+};
+return self}
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_previous",
+smalltalk.method({
+selector: "previous",
+fn: function (){
+var self=this;
+return self["@previous"];
+}
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_previous_",
+smalltalk.method({
+selector: "previous:",
+fn: function (aWidget){
+var self=this;
+self["@previous"]=aWidget;
+return self}
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_previousFocus",
+smalltalk.method({
+selector: "previousFocus",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_previous",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+smalltalk.send(smalltalk.send(self,"_previous",[]),"_focus",[]);
+};
+return self}
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_setupKeyBindings",
+smalltalk.method({
+selector: "setupKeyBindings",
+fn: function (){
+var self=this;
+var $1,$2;
+smalltalk.send(self,"_setupKeyBindings",[],smalltalk.HLListWidget);
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_keydown_",[(function(e){
+$1=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(39)]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_nextFocus",[]);
+};
+$2=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(37)]);
+if(smalltalk.assert($2)){
+return smalltalk.send(self,"_previousFocus",[]);
+};
+})]);
+return self}
+}),
+smalltalk.HLNavigationListWidget);
+
+
+
+smalltalk.addClass('HLInspector', smalltalk.HLWidget, [], 'Helios-Core');
+
+
+smalltalk.addClass('HLManager', smalltalk.HLWidget, ['tabs', 'activeTab', 'keyBinder'], 'Helios-Core');
+smalltalk.addMethod(
+"_activate_",
+smalltalk.method({
+selector: "activate:",
+fn: function (aTab){
+var self=this;
+var $1;
+smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_flushBindings",[]);
+self["@activeTab"]=aTab;
+smalltalk.send(self,"_refresh",[]);
+$1=smalltalk.send(self,"_show_",[aTab]);
+return self}
+}),
+smalltalk.HLManager);
+
+smalltalk.addMethod(
+"_activeTab",
+smalltalk.method({
+selector: "activeTab",
+fn: function (){
+var self=this;
+return self["@activeTab"];
+}
+}),
+smalltalk.HLManager);
+
+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.HLManager);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initialize",[],smalltalk.HLWidget);
+smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_setupEvents",[]);
+return self}
+}),
+smalltalk.HLManager);
+
+smalltalk.addMethod(
+"_keyBinder",
+smalltalk.method({
+selector: "keyBinder",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@keyBinder"]) == nil || $receiver == undefined){
+self["@keyBinder"]=smalltalk.send((smalltalk.HLKeyBinder || HLKeyBinder),"_new",[]);
+$1=self["@keyBinder"];
+} else {
+$1=self["@keyBinder"];
+};
+return $1;
+}
+}),
+smalltalk.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+
+smalltalk.HLManager.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.HLManager.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.HLManager.klass);
+
+smalltalk.addMethod(
+"_new",
+smalltalk.method({
+selector: "new",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_shouldNotImplement",[]);
+return self}
+}),
+smalltalk.HLManager.klass);
+
+
+smalltalk.addClass('HLSUnit', smalltalk.HLWidget, [], 'Helios-Core');
+
+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('HLTranscript', smalltalk.HLWidget, [], 'Helios-Core');
+
+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-Core');
+
+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);
+
+

+ 1984 - 0
js/Helios-Core.js

@@ -0,0 +1,1984 @@
+smalltalk.addPackage('Helios-Core', {});
+smalltalk.addClass('HLSourceArea', smalltalk.Widget, ['editor', 'textarea', 'div', 'receiver', 'onDoIt'], 'Helios-Core');
+smalltalk.addMethod(
+"_clear",
+smalltalk.method({
+selector: "clear",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_contents_",[""]);
+return self},
+args: [],
+source: "clear\x0a      self contents: ''",
+messageSends: ["contents:"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_contents",
+smalltalk.method({
+selector: "contents",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getValue",[]);
+return $1;
+},
+args: [],
+source: "contents\x0a    ^editor getValue",
+messageSends: ["getValue"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_contents_",
+smalltalk.method({
+selector: "contents:",
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self["@editor"],"_setValue_",[aString]);
+return self},
+args: ["aString"],
+source: "contents: aString\x0a    editor setValue: aString",
+messageSends: ["setValue:"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_currentLine",
+smalltalk.method({
+selector: "currentLine",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getLine_",[smalltalk.send(smalltalk.send(self["@editor"],"_getCursor",[]),"_line",[])]);
+return $1;
+},
+args: [],
+source: "currentLine\x0a    ^editor getLine: (editor getCursor line)",
+messageSends: ["getLine:", "line", "getCursor"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_currentLineOrSelection",
+smalltalk.method({
+selector: "currentLineOrSelection",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$1;
+$2=smalltalk.send(self["@editor"],"_somethingSelected",[]);
+if(smalltalk.assert($2)){
+$1=smalltalk.send(self,"_selection",[]);
+} else {
+$1=smalltalk.send(self,"_currentLine",[]);
+};
+return $1;
+},
+args: [],
+source: "currentLineOrSelection\x0a    ^editor somethingSelected\x0a\x09ifFalse: [self currentLine]\x0a\x09ifTrue: [self selection]",
+messageSends: ["ifFalse:ifTrue:", "currentLine", "selection", "somethingSelected"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_doIt",
+smalltalk.method({
+selector: "doIt",
+category: 'actions',
+fn: function (){
+var self=this;
+var $1;
+var result;
+result=smalltalk.send(self,"_eval_",[smalltalk.send(self,"_currentLineOrSelection",[])]);
+$1=smalltalk.send(self,"_onDoIt",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+smalltalk.send(smalltalk.send(self,"_onDoIt",[]),"_value",[]);
+};
+return result;
+},
+args: [],
+source: "doIt\x0a    | result |\x0a    result := self eval: self currentLineOrSelection.\x0a    self onDoIt ifNotNil: [self onDoIt value].\x0a    ^result",
+messageSends: ["eval:", "currentLineOrSelection", "ifNotNil:", "value", "onDoIt"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_editor",
+smalltalk.method({
+selector: "editor",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@editor"];
+},
+args: [],
+source: "editor\x0a\x09^editor",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_eval_",
+smalltalk.method({
+selector: "eval:",
+category: 'actions',
+fn: function (aString){
+var self=this;
+var $1,$2;
+var $early={};
+try {
+var compiler;
+compiler=smalltalk.send((smalltalk.Compiler || Compiler),"_new",[]);
+smalltalk.send((function(){
+return smalltalk.send(compiler,"_parseExpression_",[aString]);
+}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
+$1=smalltalk.send(window,"_alert_",[smalltalk.send(ex,"_messageText",[])]);
+throw $early=[$1];
+})]);
+$2=smalltalk.send(smalltalk.send(smalltalk.send(compiler,"_eval_",[smalltalk.send(compiler,"_compile_forClass_",[smalltalk.send(smalltalk.send("doIt ^[","__comma",[aString]),"__comma",["] value"]),(smalltalk.DoIt || DoIt)])]),"_fn",[]),"_applyTo_arguments_",[smalltalk.send(self,"_receiver",[]),[]]);
+return $2;
+}
+catch(e) {if(e===$early)return e[0]; throw e}
+},
+args: ["aString"],
+source: "eval: aString\x0a\x09| compiler  |\x0a\x09compiler := Compiler new.\x0a\x09[compiler parseExpression: aString] on: Error do: [:ex |\x0a\x09\x09^window alert: ex messageText].\x0a\x09^(compiler eval: (compiler compile: 'doIt ^[', aString, '] value' forClass: DoIt)) fn applyTo: self receiver arguments: #()",
+messageSends: ["new", "on:do:", "alert:", "messageText", "parseExpression:", "applyTo:arguments:", "receiver", "fn", "eval:", "compile:forClass:", ","],
+referencedClasses: ["Compiler", "Error", "DoIt"]
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_fileIn",
+smalltalk.method({
+selector: "fileIn",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send((smalltalk.Importer || Importer),"_new",[]),"_import_",[smalltalk.send(smalltalk.send(self,"_currentLineOrSelection",[]),"_readStream",[])]);
+return self},
+args: [],
+source: "fileIn\x0a    Importer new import: self currentLineOrSelection readStream",
+messageSends: ["import:", "readStream", "currentLineOrSelection", "new"],
+referencedClasses: ["Importer"]
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_handleKeyDown_",
+smalltalk.method({
+selector: "handleKeyDown:",
+category: 'actions',
+fn: function (anEvent){
+var self=this;
+if(anEvent.ctrlKey) {
+		if(anEvent.keyCode === 80) { //ctrl+p
+			self._printIt();
+			anEvent.preventDefault();
+			return false;
+		}
+		if(anEvent.keyCode === 68) { //ctrl+d
+			self._doIt();
+			anEvent.preventDefault();
+			return false;
+		}
+		if(anEvent.keyCode === 73) { //ctrl+i
+			self._inspectIt();
+			anEvent.preventDefault();
+			return false;
+		}
+	};
+;
+return self},
+args: ["anEvent"],
+source: "handleKeyDown: anEvent\x0a    <if(anEvent.ctrlKey) {\x0a\x09\x09if(anEvent.keyCode === 80) { //ctrl+p\x0a\x09\x09\x09self._printIt();\x0a\x09\x09\x09anEvent.preventDefault();\x0a\x09\x09\x09return false;\x0a\x09\x09}\x0a\x09\x09if(anEvent.keyCode === 68) { //ctrl+d\x0a\x09\x09\x09self._doIt();\x0a\x09\x09\x09anEvent.preventDefault();\x0a\x09\x09\x09return false;\x0a\x09\x09}\x0a\x09\x09if(anEvent.keyCode === 73) { //ctrl+i\x0a\x09\x09\x09self._inspectIt();\x0a\x09\x09\x09anEvent.preventDefault();\x0a\x09\x09\x09return false;\x0a\x09\x09}\x0a\x09}>",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_inspectIt",
+smalltalk.method({
+selector: "inspectIt",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_doIt",[]),"_inspect",[]);
+return self},
+args: [],
+source: "inspectIt\x0a    self doIt inspect",
+messageSends: ["inspect", "doIt"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onDoIt",
+smalltalk.method({
+selector: "onDoIt",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@onDoIt"];
+},
+args: [],
+source: "onDoIt\x0a\x09^onDoIt",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onDoIt_",
+smalltalk.method({
+selector: "onDoIt:",
+category: 'accessing',
+fn: function (aBlock){
+var self=this;
+self["@onDoIt"]=aBlock;
+return self},
+args: ["aBlock"],
+source: "onDoIt: aBlock\x0a\x09onDoIt := aBlock",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onKeyDown_",
+smalltalk.method({
+selector: "onKeyDown:",
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self["@div"],"_onKeyDown_",[aBlock]);
+return self},
+args: ["aBlock"],
+source: "onKeyDown: aBlock\x0a\x09div onKeyDown: aBlock",
+messageSends: ["onKeyDown:"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_onKeyUp_",
+smalltalk.method({
+selector: "onKeyUp:",
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self["@div"],"_onKeyUp_",[aBlock]);
+return self},
+args: ["aBlock"],
+source: "onKeyUp: aBlock\x0a\x09div onKeyUp: aBlock",
+messageSends: ["onKeyUp:"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_print_",
+smalltalk.method({
+selector: "print:",
+category: 'actions',
+fn: function (aString){
+var self=this;
+var start;
+var stop;
+start=smalltalk.send((smalltalk.HashedCollection || HashedCollection),"_new",[]);
+stop=smalltalk.send((smalltalk.HashedCollection || HashedCollection),"_new",[]);
+smalltalk.send(start,"_at_put_",["line",smalltalk.send(smalltalk.send(self["@editor"],"_getCursor_",[false]),"_line",[])]);
+smalltalk.send(start,"_at_put_",["ch",smalltalk.send(smalltalk.send(self["@editor"],"_getCursor_",[false]),"_ch",[])]);
+smalltalk.send(stop,"_at_put_",["line",smalltalk.send(start,"_at_",["line"])]);
+smalltalk.send(stop,"_at_put_",["ch",smalltalk.send(smalltalk.send(smalltalk.send(start,"_at_",["ch"]),"__plus",[smalltalk.send(aString,"_size",[])]),"__plus",[(2)])]);
+smalltalk.send(self["@editor"],"_replaceSelection_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self["@editor"],"_getSelection",[]),"__comma",[" "]),"__comma",[aString]),"__comma",[" "])]);
+smalltalk.send(self["@editor"],"_setCursor_",[smalltalk.send(self["@editor"],"_getCursor_",[true])]);
+smalltalk.send(self["@editor"],"_setSelection_end_",[stop,start]);
+return self},
+args: ["aString"],
+source: "print: aString\x0a\x09| start stop |\x0a\x09start := HashedCollection new.\x0a\x09stop := HashedCollection new.\x0a\x09start at: 'line' put: (editor getCursor: false) line.\x0a\x09start at: 'ch' put: (editor getCursor: false) ch.\x0a\x09stop at: 'line' put: (start at: 'line').\x0a\x09stop at: 'ch' put: ((start at: 'ch') + aString size + 2).\x0a\x09editor replaceSelection: (editor getSelection, ' ', aString, ' ').\x0a\x09editor setCursor: (editor getCursor: true).\x0a\x09editor setSelection: stop end: start",
+messageSends: ["new", "at:put:", "line", "getCursor:", "ch", "at:", "+", "size", "replaceSelection:", ",", "getSelection", "setCursor:", "setSelection:end:"],
+referencedClasses: ["HashedCollection"]
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_printIt",
+smalltalk.method({
+selector: "printIt",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_print_",[smalltalk.send(smalltalk.send(self,"_doIt",[]),"_printString",[])]);
+return self},
+args: [],
+source: "printIt\x0a    self print: self doIt printString",
+messageSends: ["print:", "printString", "doIt"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_receiver",
+smalltalk.method({
+selector: "receiver",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@receiver"]) == nil || $receiver == undefined){
+$1=smalltalk.send((smalltalk.DoIt || DoIt),"_new",[]);
+} else {
+$1=self["@receiver"];
+};
+return $1;
+},
+args: [],
+source: "receiver\x0a\x09^receiver ifNil: [DoIt new]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["DoIt"]
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_receiver_",
+smalltalk.method({
+selector: "receiver:",
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+self["@receiver"]=anObject;
+return self},
+args: ["anObject"],
+source: "receiver: anObject\x0a\x09receiver := anObject",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+self["@div"]=smalltalk.send(smalltalk.send(html,"_div",[]),"_class_",["source"]);
+smalltalk.send(self["@div"],"_with_",[(function(){
+self["@textarea"]=smalltalk.send(html,"_textarea",[]);
+return self["@textarea"];
+})]);
+smalltalk.send(self,"_setEditorOn_",[smalltalk.send(self["@textarea"],"_element",[])]);
+smalltalk.send(self["@div"],"_onKeyDown_",[(function(e){
+return smalltalk.send(self,"_handleKeyDown_",[e]);
+})]);
+return self},
+args: ["html"],
+source: "renderOn: html\x0a    div := html div class: 'source'.\x0a    div with: [textarea := html textarea].\x0a    self setEditorOn: textarea element.\x0a    div onKeyDown: [:e | self handleKeyDown: e]",
+messageSends: ["class:", "div", "with:", "textarea", "setEditorOn:", "element", "onKeyDown:", "handleKeyDown:"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selection",
+smalltalk.method({
+selector: "selection",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getSelection",[]);
+return $1;
+},
+args: [],
+source: "selection\x0a\x09^editor getSelection",
+messageSends: ["getSelection"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionEnd",
+smalltalk.method({
+selector: "selectionEnd",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionEnd",[]);
+return $1;
+},
+args: [],
+source: "selectionEnd\x0a   ^textarea element selectionEnd",
+messageSends: ["selectionEnd", "element"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionEnd_",
+smalltalk.method({
+selector: "selectionEnd:",
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionEnd_",[anInteger]);
+return self},
+args: ["anInteger"],
+source: "selectionEnd: anInteger\x0a   textarea element selectionEnd: anInteger",
+messageSends: ["selectionEnd:", "element"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionStart",
+smalltalk.method({
+selector: "selectionStart",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionStart",[]);
+return $1;
+},
+args: [],
+source: "selectionStart\x0a   ^textarea element selectionStart",
+messageSends: ["selectionStart", "element"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_selectionStart_",
+smalltalk.method({
+selector: "selectionStart:",
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+smalltalk.send(smalltalk.send(self["@textarea"],"_element",[]),"_selectionStart_",[anInteger]);
+return self},
+args: ["anInteger"],
+source: "selectionStart: anInteger\x0a   textarea element selectionStart: anInteger",
+messageSends: ["selectionStart:", "element"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_setEditorOn_",
+smalltalk.method({
+selector: "setEditorOn:",
+category: 'accessing',
+fn: function (aTextarea){
+var self=this;
+self['@editor'] = CodeMirror.fromTextArea(aTextarea, {
+		theme: 'amber',
+                lineNumbers: true,
+                enterMode: 'flat',
+                matchBrackets: true,
+                electricChars: false
+	});
+;
+return self},
+args: ["aTextarea"],
+source: "setEditorOn: aTextarea\x0a\x09<self['@editor'] = CodeMirror.fromTextArea(aTextarea, {\x0a\x09\x09theme: 'amber',\x0a                lineNumbers: true,\x0a                enterMode: 'flat',\x0a                matchBrackets: true,\x0a                electricChars: false\x0a\x09})>",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_val",
+smalltalk.method({
+selector: "val",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self["@editor"],"_getValue",[]);
+return $1;
+},
+args: [],
+source: "val\x0a    ^editor getValue",
+messageSends: ["getValue"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+smalltalk.addMethod(
+"_val_",
+smalltalk.method({
+selector: "val:",
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self["@editor"],"_setValue_",[aString]);
+return self},
+args: ["aString"],
+source: "val: aString\x0a    editor setValue: aString",
+messageSends: ["setValue:"],
+referencedClasses: []
+}),
+smalltalk.HLSourceArea);
+
+
+
+smalltalk.addClass('HLTab', smalltalk.Object, ['widget', 'label'], 'Helios-Core');
+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.HLManager || HLManager),"_current",[]);
+return $1;
+},
+args: [],
+source: "manager\x0a\x09^ HLManager current",
+messageSends: ["current"],
+referencedClasses: ["HLManager"]
+}),
+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-Core');
+smalltalk.addMethod(
+"_manager",
+smalltalk.method({
+selector: "manager",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send((smalltalk.HLManager || HLManager),"_current",[]);
+return $1;
+},
+args: [],
+source: "manager\x0a\x09^ HLManager current",
+messageSends: ["current"],
+referencedClasses: ["HLManager"]
+}),
+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(
+"_registerBindings",
+smalltalk.method({
+selector: "registerBindings",
+category: 'keybindings',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_registerBindingsOn_",[smalltalk.send(smalltalk.send(smalltalk.send(self,"_manager",[]),"_keyBinder",[]),"_bindings",[])]);
+return self},
+args: [],
+source: "registerBindings\x0a\x09self registerBindingsOn: self manager keyBinder bindings",
+messageSends: ["registerBindingsOn:", "bindings", "keyBinder", "manager"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_registerBindingsOn_",
+smalltalk.method({
+selector: "registerBindingsOn:",
+category: 'keybindings',
+fn: function (aBindingGroup){
+var self=this;
+return self},
+args: ["aBindingGroup"],
+source: "registerBindingsOn: aBindingGroup",
+messageSends: [],
+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;
+smalltalk.send(self,"_registerBindings",[]);
+self["@rootDiv"]=smalltalk.send(smalltalk.send(html,"_div",[]),"_with_",[(function(){
+return smalltalk.send(self,"_renderContentOn_",[html]);
+})]);
+return self},
+args: ["html"],
+source: "renderOn: html\x0a    self registerBindings.\x0a\x0a\x09rootDiv := html div with: [\x0a    \x09self renderContentOn: html ]",
+messageSends: ["registerBindings", "with:", "renderContentOn:", "div"],
+referencedClasses: []
+}),
+smalltalk.HLWidget);
+
+smalltalk.addMethod(
+"_subscribeTo_",
+smalltalk.method({
+selector: "subscribeTo:",
+category: 'announcements',
+fn: function (anAnnouncer){
+var self=this;
+return self},
+args: ["anAnnouncer"],
+source: "subscribeTo: anAnnouncer",
+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.HLManager || HLManager),"_current",[]),"_addTab_",[smalltalk.send((smalltalk.HLTab || HLTab),"_on_labelled_",[smalltalk.send(self,"_new",[]),smalltalk.send(self,"_tabLabel",[])])]);
+return self},
+args: [],
+source: "openAsTab\x0a\x09HLManager current addTab: (HLTab on: self new labelled: self tabLabel)",
+messageSends: ["addTab:", "on:labelled:", "new", "tabLabel", "current"],
+referencedClasses: ["HLTab", "HLManager"]
+}),
+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('HLDebugger', smalltalk.HLWidget, [], 'Helios-Core');
+
+
+smalltalk.addClass('HLFocusableWidget', smalltalk.HLWidget, ['hiddenInput'], 'Helios-Core');
+smalltalk.addMethod(
+"_blur",
+smalltalk.method({
+selector: "blur",
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_blur",[]);
+return self},
+args: [],
+source: "blur\x0a\x09hiddenInput asJQuery blur",
+messageSends: ["blur", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_focus",
+smalltalk.method({
+selector: "focus",
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_focus",[]);
+return self},
+args: [],
+source: "focus\x0a\x09hiddenInput asJQuery focus",
+messageSends: ["focus", "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(smalltalk.send(self["@rootDiv"],"_asJQuery",[]),"_removeClass_",[smalltalk.send(self,"_focusClass",[])]);
+})]);
+$2=smalltalk.send($1,"_onFocus_",[(function(){
+return smalltalk.send(smalltalk.send(self["@rootDiv"],"_asJQuery",[]),"_addClass_",[smalltalk.send(self,"_focusClass",[])]);
+})]);
+self["@hiddenInput"]=$2;
+return self},
+args: ["html"],
+source: "renderHiddenInputOn: html\x0a\x09hiddenInput := html input\x0a    \x09style: 'position: absolute; left: -100000px;';\x0a    \x09onBlur: [ rootDiv asJQuery removeClass: self focusClass ];\x0a        onFocus: [ rootDiv asJQuery addClass: self focusClass ]",
+messageSends: ["style:", "input", "onBlur:", "removeClass:", "focusClass", "asJQuery", "onFocus:", "addClass:"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+smalltalk.addMethod(
+"_renderOn_",
+smalltalk.method({
+selector: "renderOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$2;
+smalltalk.send(self,"_registerBindings",[]);
+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 registerBindings.\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: ["registerBindings", "renderHiddenInputOn:", "class:", "div", "onClick:", "focus", "asJQuery", "with:", "renderContentOn:"],
+referencedClasses: []
+}),
+smalltalk.HLFocusableWidget);
+
+
+
+smalltalk.addClass('HLListWidget', smalltalk.HLFocusableWidget, ['items', 'selectedItem'], 'Helios-Core');
+smalltalk.addMethod(
+"_activateListItem_",
+smalltalk.method({
+selector: "activateListItem:",
+category: 'actions',
+fn: function (aListItem){
+var self=this;
+var $1,$2,$3;
+var parent;
+var position;
+$1=smalltalk.send(aListItem,"_get_",[(0)]);
+if(($receiver = $1) == nil || $receiver == undefined){
+return self;
+} else {
+$1;
+};
+position = aListItem.parent().children().get().indexOf(aListItem.get(0)) + 1;
+;
+parent=smalltalk.send(aListItem,"_parent",[]);
+smalltalk.send(smalltalk.send(parent,"_children",[]),"_removeClass_",["active"]);
+smalltalk.send(aListItem,"_addClass_",["active"]);
+$2=smalltalk.send(smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[]),"__lt",[(0)]);
+if(smalltalk.assert($2)){
+smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop",[]),"__plus",[smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[])]),"__minus",[(10)])]);
+};
+$3=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[]),"__plus",[smalltalk.send(aListItem,"_height",[])]),"__gt",[smalltalk.send(parent,"_height",[])]);
+if(smalltalk.assert($3)){
+smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop_",[smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(parent,"_get_",[(0)]),"_scrollTop",[]),"__plus",[smalltalk.send(aListItem,"_height",[])]),"__minus",[smalltalk.send(smalltalk.send(parent,"_height",[]),"__minus",[smalltalk.send(smalltalk.send(aListItem,"_position",[]),"_top",[])])]),"__plus",[(10)])]);
+};
+smalltalk.send(self,"_selectItem_",[smalltalk.send(smalltalk.send(self,"_items",[]),"_at_",[smalltalk.send(smalltalk.send(aListItem,"_attr_",["list-data"]),"_asNumber",[])])]);
+return self},
+args: ["aListItem"],
+source: "activateListItem: aListItem\x0a\x09| parent position |\x0a    \x0a\x09(aListItem get: 0) ifNil: [ ^self ].\x0a\x0a\x09<position = aListItem.parent().children().get().indexOf(aListItem.get(0)) + 1>.\x0a\x0a    parent := aListItem parent.\x0a\x09parent children removeClass: 'active'.\x0a\x09aListItem addClass: 'active'.\x0a    \x0a    \x22Move the scrollbar to show the active element\x22\x0a    aListItem position top < 0 ifTrue: [\x0a\x09\x09(parent get: 0) scrollTop: ((parent get: 0) scrollTop + aListItem position top - 10) ].\x0a    aListItem position top + aListItem height > parent height ifTrue: [ \x0a\x09\x09(parent get: 0) scrollTop: ((parent get: 0) scrollTop + aListItem height - (parent height - aListItem position top)) +10 ].\x0a        \x0a   \x22Activate the corresponding item\x22\x0a   self selectItem: (self items at: (aListItem attr: 'list-data') asNumber)",
+messageSends: ["ifNil:", "get:", "parent", "removeClass:", "children", "addClass:", "ifTrue:", "scrollTop:", "-", "+", "top", "position", "scrollTop", "<", "height", ">", "selectItem:", "at:", "asNumber", "attr:", "items"],
+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(
+"_iconForItem_",
+smalltalk.method({
+selector: "iconForItem:",
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+return "";
+},
+args: ["anObject"],
+source: "iconForItem: anObject\x0a\x09^ ''",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_items",
+smalltalk.method({
+selector: "items",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@items"]) == nil || $receiver == undefined){
+$1=[];
+} else {
+$1=self["@items"];
+};
+return $1;
+},
+args: [],
+source: "items\x0a\x09^ items ifNil: [ #() ]",
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_items_",
+smalltalk.method({
+selector: "items:",
+category: 'accessing',
+fn: function (aCollection){
+var self=this;
+self["@items"]=aCollection;
+return self},
+args: ["aCollection"],
+source: "items: aCollection\x0a\x09items := aCollection",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderButtonsOn_",
+smalltalk.method({
+selector: "renderButtonsOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+return self},
+args: ["html"],
+source: "renderButtonsOn: html",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$2,$3,$4;
+$1=smalltalk.send(html,"_ul",[]);
+smalltalk.send($1,"_class_",["nav nav-pills nav-stacked"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+return smalltalk.send(self,"_renderListOn_",[html]);
+})]);
+$3=smalltalk.send(html,"_div",[]);
+smalltalk.send($3,"_class_",["pane_actions form-actions"]);
+$4=smalltalk.send($3,"_with_",[(function(){
+return smalltalk.send(self,"_renderButtonsOn_",[html]);
+})]);
+smalltalk.send(self,"_setupKeyBindings",[]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09html ul \x0a    \x09class: 'nav nav-pills nav-stacked';\x0a        with: [ self renderListOn: html ].\x0a    html div class: 'pane_actions form-actions'; with: [\x0a      \x09self renderButtonsOn: html ].\x0a        \x0a   self setupKeyBindings",
+messageSends: ["class:", "ul", "with:", "renderListOn:", "div", "renderButtonsOn:", "setupKeyBindings"],
+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])]);
+smalltalk.send(li,"_at_put_",["list-data",smalltalk.send(smalltalk.send(smalltalk.send(self,"_items",[]),"_indexOf_",[anObject]),"_asString",[])]);
+$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(self,"_iconForItem_",[anObject])]);
+return smalltalk.send(self,"_renderItemLabel_on_",[anObject,html]);
+})]);
+$3=smalltalk.send($2,"_onClick_",[(function(){
+return smalltalk.send(self,"_activateListItem_",[smalltalk.send(li,"_asJQuery",[])]);
+})]);
+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        at: 'list-data' put: (self items indexOf: anObject) asString;\x0a        with: [ \x0a        \x09html a\x0a            \x09with: [ \x0a            \x09\x09(html tag: 'i') class: (self iconForItem: anObject).\x0a  \x09\x09\x09\x09\x09self renderItemLabel: anObject on: html ];\x0a\x09\x09\x09\x09onClick: [\x0a                  \x09self activateListItem: li asJQuery.\x0a                \x09\x22self selectItem: anObject\x22 ] ]",
+messageSends: ["li", "class:", "cssClassForItem:", "at:put:", "asString", "indexOf:", "items", "with:", "iconForItem:", "tag:", "renderItemLabel:on:", "a", "onClick:", "activateListItem:", "asJQuery"],
+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(
+"_renderListOn_",
+smalltalk.method({
+selector: "renderListOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(self,"_items",[]),"_do_",[(function(each){
+return smalltalk.send(self,"_renderItem_on_",[each,html]);
+})]);
+return self},
+args: ["html"],
+source: "renderListOn: html\x0a\x09self items do: [ :each | \x0a    \x09self renderItem: each on: html ]",
+messageSends: ["do:", "renderItem:on:", "items"],
+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;
+return self["@selectedItem"];
+},
+args: [],
+source: "selectedItem\x0a\x09^ selectedItem",
+messageSends: [],
+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.addMethod(
+"_setupKeyBindings",
+smalltalk.method({
+selector: "setupKeyBindings",
+category: 'events',
+fn: function (){
+var self=this;
+var $1,$2;
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_unbind_",["keydown"]);
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_keydown_",[(function(e){
+var selected;
+selected=smalltalk.send(window,"_jQuery_",[".focused .nav-pills .active"]);
+selected;
+$1=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(38)]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_activateListItem_",[smalltalk.send(selected,"_prev",[])]);
+};
+$2=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(40)]);
+if(smalltalk.assert($2)){
+return smalltalk.send(self,"_activateListItem_",[smalltalk.send(selected,"_next",[])]);
+};
+})]);
+return self},
+args: [],
+source: "setupKeyBindings\x0a\x09hiddenInput asJQuery unbind: 'keydown'.\x0a\x0a\x09hiddenInput asJQuery keydown: [ :e | | selected |\x0a    \x09selected := window jQuery: '.focused .nav-pills .active'.\x0a        e which = 38 ifTrue: [ \x0a        \x09self activateListItem: selected prev ].\x0a      \x09e which = 40 ifTrue: [\x0a\x09\x09\x09self activateListItem: selected next ] ]",
+messageSends: ["unbind:", "asJQuery", "keydown:", "jQuery:", "ifTrue:", "activateListItem:", "prev", "=", "which", "next"],
+referencedClasses: []
+}),
+smalltalk.HLListWidget);
+
+
+
+smalltalk.addClass('HLNavigationListWidget', smalltalk.HLListWidget, ['previous', 'next'], 'Helios-Core');
+smalltalk.addMethod(
+"_next",
+smalltalk.method({
+selector: "next",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@next"];
+},
+args: [],
+source: "next\x0a\x09^ next",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_next_",
+smalltalk.method({
+selector: "next:",
+category: 'accessing',
+fn: function (aWidget){
+var self=this;
+self["@next"]=aWidget;
+smalltalk.send(aWidget,"_previous_",[self]);
+return self},
+args: ["aWidget"],
+source: "next: aWidget\x0a\x09next := aWidget.\x0a    aWidget previous: self",
+messageSends: ["previous:"],
+referencedClasses: []
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_nextFocus",
+smalltalk.method({
+selector: "nextFocus",
+category: 'actions',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_next",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+smalltalk.send(smalltalk.send(self,"_next",[]),"_focus",[]);
+};
+return self},
+args: [],
+source: "nextFocus\x0a\x09self next ifNotNil: [ self next focus ]",
+messageSends: ["ifNotNil:", "focus", "next"],
+referencedClasses: []
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_previous",
+smalltalk.method({
+selector: "previous",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@previous"];
+},
+args: [],
+source: "previous\x0a\x09^ previous",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_previous_",
+smalltalk.method({
+selector: "previous:",
+category: 'accessing',
+fn: function (aWidget){
+var self=this;
+self["@previous"]=aWidget;
+return self},
+args: ["aWidget"],
+source: "previous: aWidget\x0a\x09previous := aWidget",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_previousFocus",
+smalltalk.method({
+selector: "previousFocus",
+category: 'actions',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_previous",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+$1;
+} else {
+smalltalk.send(smalltalk.send(self,"_previous",[]),"_focus",[]);
+};
+return self},
+args: [],
+source: "previousFocus\x0a\x09self previous ifNotNil: [ self previous focus ]",
+messageSends: ["ifNotNil:", "focus", "previous"],
+referencedClasses: []
+}),
+smalltalk.HLNavigationListWidget);
+
+smalltalk.addMethod(
+"_setupKeyBindings",
+smalltalk.method({
+selector: "setupKeyBindings",
+category: 'events',
+fn: function (){
+var self=this;
+var $1,$2;
+smalltalk.send(self,"_setupKeyBindings",[],smalltalk.HLListWidget);
+smalltalk.send(smalltalk.send(self["@hiddenInput"],"_asJQuery",[]),"_keydown_",[(function(e){
+$1=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(39)]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_nextFocus",[]);
+};
+$2=smalltalk.send(smalltalk.send(e,"_which",[]),"__eq",[(37)]);
+if(smalltalk.assert($2)){
+return smalltalk.send(self,"_previousFocus",[]);
+};
+})]);
+return self},
+args: [],
+source: "setupKeyBindings\x0a\x09super setupKeyBindings.\x0a\x0a\x09hiddenInput asJQuery keydown: [ :e |\x0a        e which = 39 ifTrue: [ \x0a        \x09self nextFocus ].\x0a\x09\x09e which = 37 ifTrue: [ \x0a        \x09self previousFocus ] ]",
+messageSends: ["setupKeyBindings", "keydown:", "ifTrue:", "nextFocus", "=", "which", "previousFocus", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLNavigationListWidget);
+
+
+
+smalltalk.addClass('HLInspector', smalltalk.HLWidget, [], 'Helios-Core');
+
+
+smalltalk.addClass('HLManager', smalltalk.HLWidget, ['tabs', 'activeTab', 'keyBinder'], 'Helios-Core');
+smalltalk.addMethod(
+"_activate_",
+smalltalk.method({
+selector: "activate:",
+category: 'actions',
+fn: function (aTab){
+var self=this;
+var $1;
+smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_flushBindings",[]);
+self["@activeTab"]=aTab;
+smalltalk.send(self,"_refresh",[]);
+$1=smalltalk.send(self,"_show_",[aTab]);
+return self},
+args: ["aTab"],
+source: "activate: aTab\x0a\x09self keyBinder flushBindings.\x0a\x09activeTab := aTab.\x0a    \x0a\x09self \x0a\x09\x09refresh;\x0a\x09\x09show: aTab",
+messageSends: ["flushBindings", "keyBinder", "refresh", "show:"],
+referencedClasses: []
+}),
+smalltalk.HLManager);
+
+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.HLManager);
+
+smalltalk.addMethod(
+"_addTab_",
+smalltalk.method({
+selector: "addTab:",
+category: 'actions',
+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.HLManager);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initialize",[],smalltalk.HLWidget);
+smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_setupEvents",[]);
+return self},
+args: [],
+source: "initialize\x0a\x09super initialize.\x0a    self keyBinder setupEvents",
+messageSends: ["initialize", "setupEvents", "keyBinder"],
+referencedClasses: []
+}),
+smalltalk.HLManager);
+
+smalltalk.addMethod(
+"_keyBinder",
+smalltalk.method({
+selector: "keyBinder",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@keyBinder"]) == nil || $receiver == undefined){
+self["@keyBinder"]=smalltalk.send((smalltalk.HLKeyBinder || HLKeyBinder),"_new",[]);
+$1=self["@keyBinder"];
+} else {
+$1=self["@keyBinder"];
+};
+return $1;
+},
+args: [],
+source: "keyBinder\x0a\x09^ keyBinder ifNil: [ keyBinder := HLKeyBinder new ]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["HLKeyBinder"]
+}),
+smalltalk.HLManager);
+
+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.HLManager);
+
+smalltalk.addMethod(
+"_removeTab_",
+smalltalk.method({
+selector: "removeTab:",
+category: 'actions',
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+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.HLManager);
+
+
+smalltalk.HLManager.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.HLManager.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.HLManager.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.HLManager.klass);
+
+
+smalltalk.addClass('HLSUnit', smalltalk.HLWidget, [], 'Helios-Core');
+
+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('HLTranscript', smalltalk.HLWidget, [], 'Helios-Core');
+
+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-Core');
+
+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);
+
+

+ 615 - 0
js/Helios-KeyBindings.deploy.js

@@ -0,0 +1,615 @@
+smalltalk.addPackage('Helios-KeyBindings', {});
+smalltalk.addClass('HLBinding', smalltalk.Object, ['key', 'label'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_isBindingAction",
+smalltalk.method({
+selector: "isBindingAction",
+fn: function (){
+var self=this;
+return false;
+}
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_isBindingGroup",
+smalltalk.method({
+selector: "isBindingGroup",
+fn: function (){
+var self=this;
+return false;
+}
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_key",
+smalltalk.method({
+selector: "key",
+fn: function (){
+var self=this;
+return self["@key"];
+}
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_key_",
+smalltalk.method({
+selector: "key:",
+fn: function (anInteger){
+var self=this;
+self["@key"]=anInteger;
+return self}
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_label",
+smalltalk.method({
+selector: "label",
+fn: function (){
+var self=this;
+return self["@label"];
+}
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_label_",
+smalltalk.method({
+selector: "label:",
+fn: function (aString){
+var self=this;
+self["@label"]=aString;
+return self}
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_shortcut",
+smalltalk.method({
+selector: "shortcut",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send((smalltalk.String || String),"_fromCharCode_",[smalltalk.send(self,"_key",[])]);
+return $1;
+}
+}),
+smalltalk.HLBinding);
+
+
+smalltalk.addMethod(
+"_on_labelled_",
+smalltalk.method({
+selector: "on:labelled:",
+fn: function (anInteger,aString){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_key_",[anInteger]);
+smalltalk.send($2,"_label_",[aString]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLBinding.klass);
+
+
+smalltalk.addClass('HLBindingAction', smalltalk.HLBinding, ['callback'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_callback",
+smalltalk.method({
+selector: "callback",
+fn: function (){
+var self=this;
+return self["@callback"];
+}
+}),
+smalltalk.HLBindingAction);
+
+smalltalk.addMethod(
+"_callback_",
+smalltalk.method({
+selector: "callback:",
+fn: function (aBlock){
+var self=this;
+self["@callback"]=aBlock;
+return self}
+}),
+smalltalk.HLBindingAction);
+
+smalltalk.addMethod(
+"_isBindingAction",
+smalltalk.method({
+selector: "isBindingAction",
+fn: function (){
+var self=this;
+return true;
+}
+}),
+smalltalk.HLBindingAction);
+
+
+
+smalltalk.addClass('HLBindingGroup', smalltalk.HLBinding, ['bindings'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_add_",
+smalltalk.method({
+selector: "add:",
+fn: function (aBinding){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_add_",[aBinding]);
+return $1;
+}
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_addActionKey_labelled_callback_",
+smalltalk.method({
+selector: "addActionKey:labelled:callback:",
+fn: function (anInteger,aString,aBlock){
+var self=this;
+var $1,$2;
+$1=smalltalk.send((smalltalk.HLBindingAction || HLBindingAction),"_on_labelled_",[anInteger,aString]);
+smalltalk.send($1,"_callback_",[aBlock]);
+$2=smalltalk.send($1,"_yourself",[]);
+smalltalk.send(self,"_add_",[$2]);
+return self}
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_addGroupKey_labelled_",
+smalltalk.method({
+selector: "addGroupKey:labelled:",
+fn: function (anInteger,aString){
+var self=this;
+smalltalk.send(self,"_add_",[smalltalk.send((smalltalk.HLBindingGroup || HLBindingGroup),"_on_labelled_",[anInteger,aString])]);
+return self}
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_at_",
+smalltalk.method({
+selector: "at:",
+fn: function (aString){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_detect_ifNone_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_label",[]),"__eq",[aString]);
+}),(function(){
+return nil;
+})]);
+return $1;
+}
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_atkey_",
+smalltalk.method({
+selector: "atkey:",
+fn: function (anInteger){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_detect_ifNone_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_key",[]),"__eq",[anInteger]);
+}),(function(){
+return nil;
+})]);
+return $1;
+}
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_bindings",
+smalltalk.method({
+selector: "bindings",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@bindings"]) == nil || $receiver == undefined){
+self["@bindings"]=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_new",[]);
+$1=self["@bindings"];
+} else {
+$1=self["@bindings"];
+};
+return $1;
+}
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_isBindingGroup",
+smalltalk.method({
+selector: "isBindingGroup",
+fn: function (){
+var self=this;
+return true;
+}
+}),
+smalltalk.HLBindingGroup);
+
+
+
+smalltalk.addClass('HLKeyBinder', smalltalk.Object, ['modifierKey', 'active', 'helper', 'bindings', 'selectedBinding'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_activate",
+smalltalk.method({
+selector: "activate",
+fn: function (){
+var self=this;
+self["@active"]=true;
+smalltalk.send(smalltalk.send(self,"_helper",[]),"_show",[]);
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_applyBinding_",
+smalltalk.method({
+selector: "applyBinding:",
+fn: function (aBinding){
+var self=this;
+var $1;
+$1=smalltalk.send(aBinding,"_isBindingGroup",[]);
+if(smalltalk.assert($1)){
+self["@selectedBinding"]=aBinding;
+self["@selectedBinding"];
+smalltalk.send(smalltalk.send(self,"_helper",[]),"_refresh",[]);
+} else {
+smalltalk.send(smalltalk.send(aBinding,"_callback",[]),"_value",[]);
+smalltalk.send(self,"_deactivate",[]);
+};
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_bindings",
+smalltalk.method({
+selector: "bindings",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@bindings"]) == nil || $receiver == undefined){
+self["@bindings"]=smalltalk.send((smalltalk.HLBindingGroup || HLBindingGroup),"_new",[]);
+$1=self["@bindings"];
+} else {
+$1=self["@bindings"];
+};
+return $1;
+}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_deactivate",
+smalltalk.method({
+selector: "deactivate",
+fn: function (){
+var self=this;
+self["@active"]=false;
+self["@selectedBinding"]=nil;
+smalltalk.send(smalltalk.send(self,"_helper",[]),"_hide",[]);
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_flushBindings",
+smalltalk.method({
+selector: "flushBindings",
+fn: function (){
+var self=this;
+self["@bindings"]=nil;
+self["@helper"]=nil;
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleBindingFor_",
+smalltalk.method({
+selector: "handleBindingFor:",
+fn: function (anEvent){
+var self=this;
+var binding;
+binding=smalltalk.send(smalltalk.send(self,"_selectedBinding",[]),"_atKey_",[smalltalk.send(anEvent,"_which",[])]);
+if(($receiver = binding) == nil || $receiver == undefined){
+binding;
+} else {
+smalltalk.send(self,"_applyBinding_",[binding]);
+smalltalk.send(anEvent,"_preventDefault",[]);
+return false;
+};
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleBindingKey_",
+smalltalk.method({
+selector: "handleBindingKey:",
+fn: function (anInteger){
+var self=this;
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleKeyDown_",
+smalltalk.method({
+selector: "handleKeyDown:",
+fn: function (event){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(self,"_isActive",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_handleBindingKey_",[smalltalk.send(event,"_which",[])]);
+} else {
+$2=smalltalk.send(smalltalk.send(event,"_which",[]),"__eq",[smalltalk.send(self,"_modifierKey",[])]);
+if(smalltalk.assert($2)){
+smalltalk.send(self,"_activate",[]);
+smalltalk.send(event,"_preventDefault",[]);
+return false;
+};
+};
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleKeyUp_",
+smalltalk.method({
+selector: "handleKeyUp:",
+fn: function (event){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(event,"_which",[]),"__eq",[smalltalk.send(self,"_modifierKey",[])]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_deactivate",[]);
+};
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_helper",
+smalltalk.method({
+selector: "helper",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@helper"]) == nil || $receiver == undefined){
+self["@helper"]=smalltalk.send((smalltalk.HLKeyBinderHelper || HLKeyBinderHelper),"_on_",[self]);
+$1=self["@helper"];
+} else {
+$1=self["@helper"];
+};
+return $1;
+}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initialize",[],smalltalk.Object);
+self["@active"]=false;
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_isActive",
+smalltalk.method({
+selector: "isActive",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@active"]) == nil || $receiver == undefined){
+$1=false;
+} else {
+$1=self["@active"];
+};
+return $1;
+}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_modifierKey",
+smalltalk.method({
+selector: "modifierKey",
+fn: function (){
+var self=this;
+var $2,$1;
+if(($receiver = self["@modifierKey"]) == nil || $receiver == undefined){
+$2=smalltalk.send(self["@modifierKey"],"__eq",[smalltalk.send(smalltalk.send(navigator,"_platform",[]),"_match_",["Mac"])]);
+if(smalltalk.assert($2)){
+$1=(91);
+} else {
+$1=(17);
+};
+} else {
+$1=self["@modifierKey"];
+};
+return $1;
+}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_selectedBinding",
+smalltalk.method({
+selector: "selectedBinding",
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@selectedBinding"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_bindings",[]);
+} else {
+$1=self["@selectedBinding"];
+};
+return $1;
+}
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_setupEvents",
+smalltalk.method({
+selector: "setupEvents",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(window,"_jQuery_",["body"]),"_keydown_",[(function(event){
+return smalltalk.send(self,"_handleKeyDown_",[event]);
+})]);
+smalltalk.send(smalltalk.send(window,"_jQuery_",["body"]),"_keyup_",[(function(event){
+return smalltalk.send(self,"_handleKeyUp_",[event]);
+})]);
+return self}
+}),
+smalltalk.HLKeyBinder);
+
+
+
+smalltalk.addClass('HLKeyBinderHelper', smalltalk.HLWidget, ['keyBinder'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_hide",
+smalltalk.method({
+selector: "hide",
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(window,"_jQuery_",[".key_helper"]),"_remove",[]);
+return self}
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_keyBinder",
+smalltalk.method({
+selector: "keyBinder",
+fn: function (){
+var self=this;
+return self["@keyBinder"];
+}
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_keyBinder_",
+smalltalk.method({
+selector: "keyBinder:",
+fn: function (aKeyBinder){
+var self=this;
+self["@keyBinder"]=aKeyBinder;
+return self}
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_registerBindings",
+smalltalk.method({
+selector: "registerBindings",
+fn: function (){
+var self=this;
+return self}
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_renderBindingsOn_",
+smalltalk.method({
+selector: "renderBindingsOn:",
+fn: function (html){
+var self=this;
+var $1,$3,$4,$5,$6,$2;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_selectedBinding",[]),"_bindings",[]),"_do_",[(function(each){
+$1=smalltalk.send(html,"_span",[]);
+smalltalk.send($1,"_class_",["command"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+$3=smalltalk.send(html,"_span",[]);
+smalltalk.send($3,"_class_",["label"]);
+$4=smalltalk.send($3,"_with_",[smalltalk.send(smalltalk.send(each,"_shortcut",[]),"_asLowercase",[])]);
+$4;
+$5=smalltalk.send(html,"_span",[]);
+smalltalk.send($5,"_class_",["action"]);
+$6=smalltalk.send($5,"_with_",[smalltalk.send(each,"_label",[])]);
+return $6;
+})]);
+return $2;
+})]);
+return self}
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+fn: function (html){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_class_",["key_helper"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+return smalltalk.send(self,"_renderBindingsOn_",[html]);
+})]);
+return self}
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_selectedBinding",
+smalltalk.method({
+selector: "selectedBinding",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_selectedBinding",[]);
+return $1;
+}
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_show",
+smalltalk.method({
+selector: "show",
+fn: function (){
+var self=this;
+smalltalk.send(self,"_appendToJQuery_",[smalltalk.send("body","_asJQuery",[])]);
+return self}
+}),
+smalltalk.HLKeyBinderHelper);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+fn: function (aKeyBinder){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_keyBinder_",[aKeyBinder]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+}
+}),
+smalltalk.HLKeyBinderHelper.klass);
+
+

+ 825 - 0
js/Helios-KeyBindings.js

@@ -0,0 +1,825 @@
+smalltalk.addPackage('Helios-KeyBindings', {});
+smalltalk.addClass('HLBinding', smalltalk.Object, ['key', 'label'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_isBindingAction",
+smalltalk.method({
+selector: "isBindingAction",
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+},
+args: [],
+source: "isBindingAction\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_isBindingGroup",
+smalltalk.method({
+selector: "isBindingGroup",
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+},
+args: [],
+source: "isBindingGroup\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_key",
+smalltalk.method({
+selector: "key",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@key"];
+},
+args: [],
+source: "key\x0a\x09^ key",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_key_",
+smalltalk.method({
+selector: "key:",
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+self["@key"]=anInteger;
+return self},
+args: ["anInteger"],
+source: "key: anInteger\x0a\x09key := anInteger",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBinding);
+
+smalltalk.addMethod(
+"_label",
+smalltalk.method({
+selector: "label",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@label"];
+},
+args: [],
+source: "label\x0a\x09^ label",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBinding);
+
+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.HLBinding);
+
+smalltalk.addMethod(
+"_shortcut",
+smalltalk.method({
+selector: "shortcut",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send((smalltalk.String || String),"_fromCharCode_",[smalltalk.send(self,"_key",[])]);
+return $1;
+},
+args: [],
+source: "shortcut\x0a\x09^ String fromCharCode: self key",
+messageSends: ["fromCharCode:", "key"],
+referencedClasses: ["String"]
+}),
+smalltalk.HLBinding);
+
+
+smalltalk.addMethod(
+"_on_labelled_",
+smalltalk.method({
+selector: "on:labelled:",
+category: 'instance creation',
+fn: function (anInteger,aString){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_key_",[anInteger]);
+smalltalk.send($2,"_label_",[aString]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["anInteger", "aString"],
+source: "on: anInteger labelled: aString\x0a\x09^ self new\x0a    \x09key: anInteger;\x0a        label: aString;\x0a        yourself",
+messageSends: ["key:", "new", "label:", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLBinding.klass);
+
+
+smalltalk.addClass('HLBindingAction', smalltalk.HLBinding, ['callback'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_callback",
+smalltalk.method({
+selector: "callback",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@callback"];
+},
+args: [],
+source: "callback\x0a\x09^ callback",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBindingAction);
+
+smalltalk.addMethod(
+"_callback_",
+smalltalk.method({
+selector: "callback:",
+category: 'accessing',
+fn: function (aBlock){
+var self=this;
+self["@callback"]=aBlock;
+return self},
+args: ["aBlock"],
+source: "callback: aBlock\x0a\x09callback := aBlock",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBindingAction);
+
+smalltalk.addMethod(
+"_isBindingAction",
+smalltalk.method({
+selector: "isBindingAction",
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+},
+args: [],
+source: "isBindingAction\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBindingAction);
+
+
+
+smalltalk.addClass('HLBindingGroup', smalltalk.HLBinding, ['bindings'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_add_",
+smalltalk.method({
+selector: "add:",
+category: 'accessing',
+fn: function (aBinding){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_add_",[aBinding]);
+return $1;
+},
+args: ["aBinding"],
+source: "add: aBinding\x0a\x09^ self bindings add: aBinding",
+messageSends: ["add:", "bindings"],
+referencedClasses: []
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_addActionKey_labelled_callback_",
+smalltalk.method({
+selector: "addActionKey:labelled:callback:",
+category: 'accessing',
+fn: function (anInteger,aString,aBlock){
+var self=this;
+var $1,$2;
+$1=smalltalk.send((smalltalk.HLBindingAction || HLBindingAction),"_on_labelled_",[anInteger,aString]);
+smalltalk.send($1,"_callback_",[aBlock]);
+$2=smalltalk.send($1,"_yourself",[]);
+smalltalk.send(self,"_add_",[$2]);
+return self},
+args: ["anInteger", "aString", "aBlock"],
+source: "addActionKey: anInteger labelled: aString callback: aBlock\x0a\x09self add: ((HLBindingAction on: anInteger labelled: aString)\x0a    \x09callback: aBlock;\x0a        yourself)",
+messageSends: ["add:", "callback:", "on:labelled:", "yourself"],
+referencedClasses: ["HLBindingAction"]
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_addGroupKey_labelled_",
+smalltalk.method({
+selector: "addGroupKey:labelled:",
+category: 'accessing',
+fn: function (anInteger,aString){
+var self=this;
+smalltalk.send(self,"_add_",[smalltalk.send((smalltalk.HLBindingGroup || HLBindingGroup),"_on_labelled_",[anInteger,aString])]);
+return self},
+args: ["anInteger", "aString"],
+source: "addGroupKey: anInteger labelled: aString\x0a\x09self add: (HLBindingGroup on: anInteger labelled: aString)",
+messageSends: ["add:", "on:labelled:"],
+referencedClasses: ["HLBindingGroup"]
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_at_",
+smalltalk.method({
+selector: "at:",
+category: 'accessing',
+fn: function (aString){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_detect_ifNone_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_label",[]),"__eq",[aString]);
+}),(function(){
+return nil;
+})]);
+return $1;
+},
+args: ["aString"],
+source: "at: aString\x0a\x09^ self bindings \x0a    \x09detect: [ :each | each label = aString ]\x0a      \x09ifNone: [ nil ]",
+messageSends: ["detect:ifNone:", "=", "label", "bindings"],
+referencedClasses: []
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_atkey_",
+smalltalk.method({
+selector: "atkey:",
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_detect_ifNone_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_key",[]),"__eq",[anInteger]);
+}),(function(){
+return nil;
+})]);
+return $1;
+},
+args: ["anInteger"],
+source: "atkey: anInteger\x0a\x09^ self bindings \x0a    \x09detect: [ :each | each key = anInteger ]\x0a      \x09ifNone: [ nil ]",
+messageSends: ["detect:ifNone:", "=", "key", "bindings"],
+referencedClasses: []
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_bindings",
+smalltalk.method({
+selector: "bindings",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@bindings"]) == nil || $receiver == undefined){
+self["@bindings"]=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_new",[]);
+$1=self["@bindings"];
+} else {
+$1=self["@bindings"];
+};
+return $1;
+},
+args: [],
+source: "bindings\x0a\x09^ bindings ifNil: [ bindings := OrderedCollection new ]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["OrderedCollection"]
+}),
+smalltalk.HLBindingGroup);
+
+smalltalk.addMethod(
+"_isBindingGroup",
+smalltalk.method({
+selector: "isBindingGroup",
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+},
+args: [],
+source: "isBindingGroup\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLBindingGroup);
+
+
+
+smalltalk.addClass('HLKeyBinder', smalltalk.Object, ['modifierKey', 'active', 'helper', 'bindings', 'selectedBinding'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_activate",
+smalltalk.method({
+selector: "activate",
+category: 'actions',
+fn: function (){
+var self=this;
+self["@active"]=true;
+smalltalk.send(smalltalk.send(self,"_helper",[]),"_show",[]);
+return self},
+args: [],
+source: "activate\x0a\x09active := true.\x0a\x09self helper show",
+messageSends: ["show", "helper"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_applyBinding_",
+smalltalk.method({
+selector: "applyBinding:",
+category: 'actions',
+fn: function (aBinding){
+var self=this;
+var $1;
+$1=smalltalk.send(aBinding,"_isBindingGroup",[]);
+if(smalltalk.assert($1)){
+self["@selectedBinding"]=aBinding;
+self["@selectedBinding"];
+smalltalk.send(smalltalk.send(self,"_helper",[]),"_refresh",[]);
+} else {
+smalltalk.send(smalltalk.send(aBinding,"_callback",[]),"_value",[]);
+smalltalk.send(self,"_deactivate",[]);
+};
+return self},
+args: ["aBinding"],
+source: "applyBinding: aBinding\x0a    aBinding isBindingGroup\x0a    \x09ifTrue: [\x0a\x09\x09\x09selectedBinding := aBinding.\x0a    \x09\x09self helper refresh ]\x0a        ifFalse: [ \x0a\x09\x09\x09aBinding callback value.\x0a\x09\x09\x09self deactivate ]",
+messageSends: ["ifTrue:ifFalse:", "refresh", "helper", "value", "callback", "deactivate", "isBindingGroup"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_bindings",
+smalltalk.method({
+selector: "bindings",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@bindings"]) == nil || $receiver == undefined){
+self["@bindings"]=smalltalk.send((smalltalk.HLBindingGroup || HLBindingGroup),"_new",[]);
+$1=self["@bindings"];
+} else {
+$1=self["@bindings"];
+};
+return $1;
+},
+args: [],
+source: "bindings\x0a\x09^ bindings ifNil: [ bindings := HLBindingGroup new ]",
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["HLBindingGroup"]
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_deactivate",
+smalltalk.method({
+selector: "deactivate",
+category: 'actions',
+fn: function (){
+var self=this;
+self["@active"]=false;
+self["@selectedBinding"]=nil;
+smalltalk.send(smalltalk.send(self,"_helper",[]),"_hide",[]);
+return self},
+args: [],
+source: "deactivate\x0a\x09active := false.\x0a    selectedBinding := nil.\x0a\x09self helper hide",
+messageSends: ["hide", "helper"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_flushBindings",
+smalltalk.method({
+selector: "flushBindings",
+category: 'actions',
+fn: function (){
+var self=this;
+self["@bindings"]=nil;
+self["@helper"]=nil;
+return self},
+args: [],
+source: "flushBindings\x0a\x09bindings := nil.\x0a    helper := nil",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleBindingFor_",
+smalltalk.method({
+selector: "handleBindingFor:",
+category: 'events',
+fn: function (anEvent){
+var self=this;
+var binding;
+binding=smalltalk.send(smalltalk.send(self,"_selectedBinding",[]),"_atKey_",[smalltalk.send(anEvent,"_which",[])]);
+if(($receiver = binding) == nil || $receiver == undefined){
+binding;
+} else {
+smalltalk.send(self,"_applyBinding_",[binding]);
+smalltalk.send(anEvent,"_preventDefault",[]);
+return false;
+};
+return self},
+args: ["anEvent"],
+source: "handleBindingFor: anEvent\x0a\x09| binding |\x0a    binding := self selectedBinding atKey: anEvent which.\x0a    \x0a    binding ifNotNil: [ \x0a    \x09self applyBinding: binding.\x0a\x09\x09anEvent preventDefault.\x0a\x09\x09^ false ]",
+messageSends: ["atKey:", "which", "selectedBinding", "ifNotNil:", "applyBinding:", "preventDefault"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleBindingKey_",
+smalltalk.method({
+selector: "handleBindingKey:",
+category: 'events',
+fn: function (anInteger){
+var self=this;
+return self},
+args: ["anInteger"],
+source: "handleBindingKey: anInteger",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleKeyDown_",
+smalltalk.method({
+selector: "handleKeyDown:",
+category: 'events',
+fn: function (event){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(self,"_isActive",[]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_handleBindingKey_",[smalltalk.send(event,"_which",[])]);
+} else {
+$2=smalltalk.send(smalltalk.send(event,"_which",[]),"__eq",[smalltalk.send(self,"_modifierKey",[])]);
+if(smalltalk.assert($2)){
+smalltalk.send(self,"_activate",[]);
+smalltalk.send(event,"_preventDefault",[]);
+return false;
+};
+};
+return self},
+args: ["event"],
+source: "handleKeyDown: event\x0a\x09self isActive\x0a    \x09ifTrue: [ \x0a        \x09self handleBindingKey: event which ]\x0a      \x09ifFalse: [\x0a          \x09event which = self modifierKey ifTrue: [\x0a\x09\x09\x09\x09self activate. \x0a                event preventDefault. \x0a                ^ false ] ]",
+messageSends: ["ifTrue:ifFalse:", "handleBindingKey:", "which", "ifTrue:", "activate", "preventDefault", "=", "modifierKey", "isActive"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_handleKeyUp_",
+smalltalk.method({
+selector: "handleKeyUp:",
+category: 'events',
+fn: function (event){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(event,"_which",[]),"__eq",[smalltalk.send(self,"_modifierKey",[])]);
+if(smalltalk.assert($1)){
+smalltalk.send(self,"_deactivate",[]);
+};
+return self},
+args: ["event"],
+source: "handleKeyUp: event\x0a\x09event which = self modifierKey ifTrue: [\x0a      \x09self deactivate ]",
+messageSends: ["ifTrue:", "deactivate", "=", "modifierKey", "which"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_helper",
+smalltalk.method({
+selector: "helper",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@helper"]) == nil || $receiver == undefined){
+self["@helper"]=smalltalk.send((smalltalk.HLKeyBinderHelper || HLKeyBinderHelper),"_on_",[self]);
+$1=self["@helper"];
+} else {
+$1=self["@helper"];
+};
+return $1;
+},
+args: [],
+source: "helper\x0a\x09^ helper ifNil: [ helper := HLKeyBinderHelper on: self ]",
+messageSends: ["ifNil:", "on:"],
+referencedClasses: ["HLKeyBinderHelper"]
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_initialize",
+smalltalk.method({
+selector: "initialize",
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_initialize",[],smalltalk.Object);
+self["@active"]=false;
+return self},
+args: [],
+source: "initialize\x0a\x09super initialize.\x0a    active := false",
+messageSends: ["initialize"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_isActive",
+smalltalk.method({
+selector: "isActive",
+category: 'testing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@active"]) == nil || $receiver == undefined){
+$1=false;
+} else {
+$1=self["@active"];
+};
+return $1;
+},
+args: [],
+source: "isActive\x0a\x09^ active ifNil: [ false ]",
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_modifierKey",
+smalltalk.method({
+selector: "modifierKey",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$1;
+if(($receiver = self["@modifierKey"]) == nil || $receiver == undefined){
+$2=smalltalk.send(self["@modifierKey"],"__eq",[smalltalk.send(smalltalk.send(navigator,"_platform",[]),"_match_",["Mac"])]);
+if(smalltalk.assert($2)){
+$1=(91);
+} else {
+$1=(17);
+};
+} else {
+$1=self["@modifierKey"];
+};
+return $1;
+},
+args: [],
+source: "modifierKey\x0a\x09^ modifierKey ifNil: [\x0a\x09\x09modifierKey = (navigator platform match: 'Mac')\x0a\x09\x09\x09ifTrue: [ 91 ]\x0a\x09\x09\x09ifFalse: [ 17 ] ]",
+messageSends: ["ifNil:", "ifTrue:ifFalse:", "=", "match:", "platform"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_selectedBinding",
+smalltalk.method({
+selector: "selectedBinding",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+if(($receiver = self["@selectedBinding"]) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_bindings",[]);
+} else {
+$1=self["@selectedBinding"];
+};
+return $1;
+},
+args: [],
+source: "selectedBinding\x0a\x09^ selectedBinding ifNil: [ self bindings ]",
+messageSends: ["ifNil:", "bindings"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+smalltalk.addMethod(
+"_setupEvents",
+smalltalk.method({
+selector: "setupEvents",
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(window,"_jQuery_",["body"]),"_keydown_",[(function(event){
+return smalltalk.send(self,"_handleKeyDown_",[event]);
+})]);
+smalltalk.send(smalltalk.send(window,"_jQuery_",["body"]),"_keyup_",[(function(event){
+return smalltalk.send(self,"_handleKeyUp_",[event]);
+})]);
+return self},
+args: [],
+source: "setupEvents\x0a\x09(window jQuery: 'body') keydown: [ :event | self handleKeyDown: event ].\x0a    (window jQuery: 'body') keyup: [ :event | self handleKeyUp: event ]",
+messageSends: ["keydown:", "handleKeyDown:", "jQuery:", "keyup:", "handleKeyUp:"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinder);
+
+
+
+smalltalk.addClass('HLKeyBinderHelper', smalltalk.HLWidget, ['keyBinder'], 'Helios-KeyBindings');
+smalltalk.addMethod(
+"_hide",
+smalltalk.method({
+selector: "hide",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(window,"_jQuery_",[".key_helper"]),"_remove",[]);
+return self},
+args: [],
+source: "hide\x0a\x09(window jQuery: '.key_helper') remove",
+messageSends: ["remove", "jQuery:"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_keyBinder",
+smalltalk.method({
+selector: "keyBinder",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self["@keyBinder"];
+},
+args: [],
+source: "keyBinder\x0a\x09^ keyBinder",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_keyBinder_",
+smalltalk.method({
+selector: "keyBinder:",
+category: 'accessing',
+fn: function (aKeyBinder){
+var self=this;
+self["@keyBinder"]=aKeyBinder;
+return self},
+args: ["aKeyBinder"],
+source: "keyBinder: aKeyBinder\x0a\x09keyBinder := aKeyBinder",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_registerBindings",
+smalltalk.method({
+selector: "registerBindings",
+category: 'keyBindings',
+fn: function (){
+var self=this;
+return self},
+args: [],
+source: "registerBindings\x0a\x09\x22Do nothing\x22",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_renderBindingsOn_",
+smalltalk.method({
+selector: "renderBindingsOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$3,$4,$5,$6,$2;
+smalltalk.send(smalltalk.send(smalltalk.send(self,"_selectedBinding",[]),"_bindings",[]),"_do_",[(function(each){
+$1=smalltalk.send(html,"_span",[]);
+smalltalk.send($1,"_class_",["command"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+$3=smalltalk.send(html,"_span",[]);
+smalltalk.send($3,"_class_",["label"]);
+$4=smalltalk.send($3,"_with_",[smalltalk.send(smalltalk.send(each,"_shortcut",[]),"_asLowercase",[])]);
+$4;
+$5=smalltalk.send(html,"_span",[]);
+smalltalk.send($5,"_class_",["action"]);
+$6=smalltalk.send($5,"_with_",[smalltalk.send(each,"_label",[])]);
+return $6;
+})]);
+return $2;
+})]);
+return self},
+args: ["html"],
+source: "renderBindingsOn: html\x0a\x09self selectedBinding bindings do: [ :each |\x0a\x09\x09html span class: 'command'; with: [\x0a\x09\x09\x09html span class: 'label'; with: each shortcut asLowercase.\x0a  \x09\x09\x09html span class: 'action'; with: each label ] ]",
+messageSends: ["do:", "class:", "span", "with:", "asLowercase", "shortcut", "label", "bindings", "selectedBinding"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_renderContentOn_",
+smalltalk.method({
+selector: "renderContentOn:",
+category: 'rendering',
+fn: function (html){
+var self=this;
+var $1,$2;
+$1=smalltalk.send(html,"_div",[]);
+smalltalk.send($1,"_class_",["key_helper"]);
+$2=smalltalk.send($1,"_with_",[(function(){
+return smalltalk.send(self,"_renderBindingsOn_",[html]);
+})]);
+return self},
+args: ["html"],
+source: "renderContentOn: html\x0a\x09html div class: 'key_helper'; with: [\x0a      \x09self renderBindingsOn: html ]",
+messageSends: ["class:", "div", "with:", "renderBindingsOn:"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_selectedBinding",
+smalltalk.method({
+selector: "selectedBinding",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_selectedBinding",[]);
+return $1;
+},
+args: [],
+source: "selectedBinding\x0a\x09^ self keyBinder selectedBinding",
+messageSends: ["selectedBinding", "keyBinder"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+smalltalk.addMethod(
+"_show",
+smalltalk.method({
+selector: "show",
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self,"_appendToJQuery_",[smalltalk.send("body","_asJQuery",[])]);
+return self},
+args: [],
+source: "show\x0a\x09self appendToJQuery: 'body' asJQuery",
+messageSends: ["appendToJQuery:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper);
+
+
+smalltalk.addMethod(
+"_on_",
+smalltalk.method({
+selector: "on:",
+category: 'instance creation',
+fn: function (aKeyBinder){
+var self=this;
+var $2,$3,$1;
+$2=smalltalk.send(self,"_new",[]);
+smalltalk.send($2,"_keyBinder_",[aKeyBinder]);
+$3=smalltalk.send($2,"_yourself",[]);
+$1=$3;
+return $1;
+},
+args: ["aKeyBinder"],
+source: "on: aKeyBinder\x0a\x09^ self new\x0a    \x09keyBinder: aKeyBinder;\x0a        yourself",
+messageSends: ["keyBinder:", "new", "yourself"],
+referencedClasses: []
+}),
+smalltalk.HLKeyBinderHelper.klass);
+
+

+ 54 - 17
js/Helios-Layout.deploy.js

@@ -57,15 +57,6 @@ 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",
@@ -254,13 +245,23 @@ smalltalk.method({
 selector: "resize",
 fn: function (){
 var self=this;
+smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_top",[])]);
+return self}
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_resize_",
+smalltalk.method({
+selector: "resize:",
+fn: function (anInteger){
+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",[])]);
+position=smalltalk.send(anInteger,"__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}
 }),
@@ -272,13 +273,26 @@ 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",[]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["y"]),smalltalk.send("containment","__minus_gt",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_parent",[])]),smalltalk.send("helper","__minus_gt",["clone"]),smalltalk.send("start","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_startResizing_",[smalltalk.send(ui,"_helper",[])]);
+})]),smalltalk.send("drag","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(ui,"_offset",[]),"_top",[])]);
 })])])]);
 return self}
 }),
 smalltalk.HLHorizontalSplitter);
 
+smalltalk.addMethod(
+"_startResizing_",
+smalltalk.method({
+selector: "startResizing:",
+fn: function (aSplitter){
+var self=this;
+smalltalk.send(aSplitter,"_width_",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_width",[])]);
+return self}
+}),
+smalltalk.HLHorizontalSplitter);
+
 
 
 smalltalk.addClass('HLVerticalSplitter', smalltalk.HLSplitter, [], 'Helios-Layout');
@@ -314,13 +328,23 @@ smalltalk.method({
 selector: "resize",
 fn: function (){
 var self=this;
+smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_left",[])]);
+return self}
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_resize_",
+smalltalk.method({
+selector: "resize:",
+fn: function (anInteger){
+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",[])]);
+position=smalltalk.send(anInteger,"__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}
 }),
@@ -332,13 +356,26 @@ 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",[]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["x"]),smalltalk.send("containment","__minus_gt",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_parent",[])]),smalltalk.send("helper","__minus_gt",["clone"]),smalltalk.send("start","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_startResizing_",[smalltalk.send(ui,"_helper",[])]);
+})]),smalltalk.send("drag","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(ui,"_offset",[]),"_left",[])]);
 })])])]);
 return self}
 }),
 smalltalk.HLVerticalSplitter);
 
+smalltalk.addMethod(
+"_startResizing_",
+smalltalk.method({
+selector: "startResizing:",
+fn: function (aSplitter){
+var self=this;
+smalltalk.send(aSplitter,"_height_",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_height",[])]);
+return self}
+}),
+smalltalk.HLVerticalSplitter);
+
 
 
 smalltalk.addMethod(

+ 85 - 28
js/Helios-Layout.js

@@ -77,15 +77,6 @@ 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",
@@ -219,7 +210,7 @@ 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    ",
+source: "resize\x0a\x09self firstWidget isHeliosSplitter ifTrue: [ self firstWidget resize ].\x0a    self secondWidget isHeliosSplitter ifTrue: [ self secondWidget resize ]",
 messageSends: ["ifTrue:", "resize", "firstWidget", "isHeliosSplitter", "secondWidget"],
 referencedClasses: []
 }),
@@ -340,18 +331,33 @@ selector: "resize",
 category: 'actions',
 fn: function (){
 var self=this;
+smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_top",[])]);
+return self},
+args: [],
+source: "resize\x0a\x09self resize: splitter asJQuery offset top",
+messageSends: ["resize:", "top", "offset", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_resize_",
+smalltalk.method({
+selector: "resize:",
+category: 'actions',
+fn: function (anInteger){
+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",[])]);
+position=smalltalk.send(anInteger,"__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"],
+args: ["anInteger"],
+source: "resize: anInteger\x0a\x09| container position |\x0a    \x0a    container := firstPane asJQuery parent.\x0a    position := anInteger - 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    super resize",
+messageSends: ["parent", "asJQuery", "-", "top", "offset", "height:", "max:", "min:", "height", "resize"],
 referencedClasses: []
 }),
 smalltalk.HLHorizontalSplitter);
@@ -363,13 +369,31 @@ 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",[]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["y"]),smalltalk.send("containment","__minus_gt",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_parent",[])]),smalltalk.send("helper","__minus_gt",["clone"]),smalltalk.send("start","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_startResizing_",[smalltalk.send(ui,"_helper",[])]);
+})]),smalltalk.send("drag","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(ui,"_offset",[]),"_top",[])]);
 })])])]);
 return self},
 args: [],
-source: "setupSplitter\x0a\x09splitter asJQuery draggable: #{ 'axis' -> 'y'. 'stop' -> [ self resize ] }",
-messageSends: ["draggable:", "->", "resize", "asJQuery"],
+source: "setupSplitter\x0a\x09splitter asJQuery draggable: #{ \x0a    \x09'axis' -> 'y'. \x0a        'containment' -> splitter asJQuery parent.\x0a        'helper' -> 'clone'.\x0a        'start' -> [ :e :ui | self startResizing: ui helper ].\x0a        'drag' -> [ :e :ui | self resize: ui offset top ] }",
+messageSends: ["draggable:", "->", "parent", "asJQuery", "startResizing:", "helper", "resize:", "top", "offset"],
+referencedClasses: []
+}),
+smalltalk.HLHorizontalSplitter);
+
+smalltalk.addMethod(
+"_startResizing_",
+smalltalk.method({
+selector: "startResizing:",
+category: 'actions',
+fn: function (aSplitter){
+var self=this;
+smalltalk.send(aSplitter,"_width_",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_width",[])]);
+return self},
+args: ["aSplitter"],
+source: "startResizing: aSplitter\x0a\x09aSplitter width: splitter asJQuery width",
+messageSends: ["width:", "width", "asJQuery"],
 referencedClasses: []
 }),
 smalltalk.HLHorizontalSplitter);
@@ -420,18 +444,33 @@ selector: "resize",
 category: 'actions',
 fn: function (){
 var self=this;
+smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_offset",[]),"_left",[])]);
+return self},
+args: [],
+source: "resize\x0a\x09self resize: splitter asJQuery offset left",
+messageSends: ["resize:", "left", "offset", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_resize_",
+smalltalk.method({
+selector: "resize:",
+category: 'actions',
+fn: function (anInteger){
+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",[])]);
+position=smalltalk.send(anInteger,"__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"],
+args: ["anInteger"],
+source: "resize: anInteger\x0a\x09| container position |\x0a    \x0a    container := firstPane asJQuery parent.\x0a    position := anInteger - 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    super resize",
+messageSends: ["parent", "asJQuery", "-", "left", "offset", "width:", "max:", "min:", "width", "resize"],
 referencedClasses: []
 }),
 smalltalk.HLVerticalSplitter);
@@ -443,13 +482,31 @@ 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",[]);
+smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_draggable_",[smalltalk.HashedCollection._fromPairs_([smalltalk.send("axis","__minus_gt",["x"]),smalltalk.send("containment","__minus_gt",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_parent",[])]),smalltalk.send("helper","__minus_gt",["clone"]),smalltalk.send("start","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_startResizing_",[smalltalk.send(ui,"_helper",[])]);
+})]),smalltalk.send("drag","__minus_gt",[(function(e,ui){
+return smalltalk.send(self,"_resize_",[smalltalk.send(smalltalk.send(ui,"_offset",[]),"_left",[])]);
 })])])]);
 return self},
 args: [],
-source: "setupSplitter\x0a\x09splitter asJQuery draggable: #{ 'axis' -> 'x'. 'stop' -> [ self resize ] }",
-messageSends: ["draggable:", "->", "resize", "asJQuery"],
+source: "setupSplitter\x0a\x09splitter asJQuery draggable: #{ \x0a    \x09'axis' -> 'x'. \x0a        'containment' -> splitter asJQuery parent.\x0a        'helper' -> 'clone'.\x0a        'start' -> [ :e :ui | self startResizing: ui helper ].\x0a        'drag' -> [ :e :ui | self resize: ui offset left ] }",
+messageSends: ["draggable:", "->", "parent", "asJQuery", "startResizing:", "helper", "resize:", "left", "offset"],
+referencedClasses: []
+}),
+smalltalk.HLVerticalSplitter);
+
+smalltalk.addMethod(
+"_startResizing_",
+smalltalk.method({
+selector: "startResizing:",
+category: 'actions',
+fn: function (aSplitter){
+var self=this;
+smalltalk.send(aSplitter,"_height_",[smalltalk.send(smalltalk.send(self["@splitter"],"_asJQuery",[]),"_height",[])]);
+return self},
+args: ["aSplitter"],
+source: "startResizing: aSplitter\x0a\x09aSplitter height: splitter asJQuery height",
+messageSends: ["height:", "height", "asJQuery"],
 referencedClasses: []
 }),
 smalltalk.HLVerticalSplitter);

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

@@ -1,1188 +0,0 @@
-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);
-

+ 0 - 1613
js/Helios-Widgets.js

@@ -1,1613 +0,0 @@
-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);
-

+ 176 - 0
js/Kernel-Classes.deploy.js

@@ -48,6 +48,28 @@ return result;
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_allSuperclasses",
+smalltalk.method({
+selector: "allSuperclasses",
+fn: function (){
+var self=this;
+var $1,$3,$4,$2;
+$1=smalltalk.send(self,"_superclass",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+return [];
+} else {
+$1;
+};
+$3=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_with_",[smalltalk.send(self,"_superclass",[])]);
+smalltalk.send($3,"_addAll_",[smalltalk.send(smalltalk.send(self,"_superclass",[]),"_allSuperclasses",[])]);
+$4=smalltalk.send($3,"_yourself",[]);
+$2=$4;
+return $2;
+}
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_basicNew",
 smalltalk.method({
@@ -160,6 +182,17 @@ return self}
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_definition",
+smalltalk.method({
+selector: "definition",
+fn: function (){
+var self=this;
+return "";
+}
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_inheritsFrom_",
 smalltalk.method({
@@ -216,6 +249,19 @@ return self}
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_methods",
+smalltalk.method({
+selector: "methods",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_methodDictionary",[]),"_values",[]);
+return $1;
+}
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_methodsFor_",
 smalltalk.method({
@@ -245,6 +291,21 @@ return $1;
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_methodsInProtocol_",
+smalltalk.method({
+selector: "methodsInProtocol:",
+fn: function (aString){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_methodDictionary",[]),"_values",[]),"_select_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_protocol",[]),"__eq",[aString]);
+})]);
+return $1;
+}
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_name",
 smalltalk.method({
@@ -337,6 +398,19 @@ return self}
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_selectors",
+smalltalk.method({
+selector: "selectors",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_methodDictionary",[]),"_keys",[]);
+return $1;
+}
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_subclasses",
 smalltalk.method({
@@ -361,6 +435,30 @@ return self}
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_theMetaClass",
+smalltalk.method({
+selector: "theMetaClass",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_class",[]);
+return $1;
+}
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+"_theNonMetaClass",
+smalltalk.method({
+selector: "theNonMetaClass",
+fn: function (){
+var self=this;
+return self;
+}
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_withAllSubclasses",
 smalltalk.method({
@@ -411,6 +509,36 @@ return $1;
 }),
 smalltalk.Class);
 
+smalltalk.addMethod(
+"_definition",
+smalltalk.method({
+selector: "definition",
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$1=smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(stream){
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(smalltalk.send(self,"_superclass",[]),"_asString",[])]);
+smalltalk.send(stream,"_nextPutAll_",[" subclass: #"]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(self,"_name",[])]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(smalltalk.send((smalltalk.String || String),"_lf",[]),"__comma",[smalltalk.send((smalltalk.String || String),"_tab",[])])]);
+$2=smalltalk.send(stream,"_nextPutAll_",["instanceVariableNames: '"]);
+$2;
+smalltalk.send(smalltalk.send(self,"_instanceVariableNames",[]),"_do_separatedBy_",[(function(each){
+return smalltalk.send(stream,"_nextPutAll_",[each]);
+}),(function(){
+return smalltalk.send(stream,"_nextPutAll_",[" "]);
+})]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(smalltalk.send("'","__comma",[smalltalk.send((smalltalk.String || String),"_lf",[])]),"__comma",[smalltalk.send((smalltalk.String || String),"_tab",[])])]);
+smalltalk.send(stream,"_nextPutAll_",["package: '"]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(self,"_category",[])]);
+$3=smalltalk.send(stream,"_nextPutAll_",["'"]);
+return $3;
+})]);
+return $1;
+}
+}),
+smalltalk.Class);
+
 smalltalk.addMethod(
 "_isClass",
 smalltalk.method({
@@ -544,6 +672,30 @@ return $1;
 }),
 smalltalk.Metaclass);
 
+smalltalk.addMethod(
+"_definition",
+smalltalk.method({
+selector: "definition",
+fn: function (){
+var self=this;
+var $2,$1;
+$1=smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(stream){
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(self,"_asString",[])]);
+smalltalk.send(stream,"_nextPutAll_",[" class "]);
+$2=smalltalk.send(stream,"_nextPutAll_",["instanceVariableNames: '"]);
+$2;
+smalltalk.send(smalltalk.send(self,"_instanceVariableNames",[]),"_do_separatedBy_",[(function(each){
+return smalltalk.send(stream,"_nextPutAll_",[each]);
+}),(function(){
+return smalltalk.send(stream,"_nextPutAll_",[" "]);
+})]);
+return smalltalk.send(stream,"_nextPutAll_",["'"]);
+})]);
+return $1;
+}
+}),
+smalltalk.Metaclass);
+
 smalltalk.addMethod(
 "_instanceClass",
 smalltalk.method({
@@ -591,6 +743,30 @@ return $1;
 }),
 smalltalk.Metaclass);
 
+smalltalk.addMethod(
+"_theMetaClass",
+smalltalk.method({
+selector: "theMetaClass",
+fn: function (){
+var self=this;
+return self;
+}
+}),
+smalltalk.Metaclass);
+
+smalltalk.addMethod(
+"_theNonMetaClass",
+smalltalk.method({
+selector: "theNonMetaClass",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_instanceClass",[]);
+return $1;
+}
+}),
+smalltalk.Metaclass);
+
 
 
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');

+ 231 - 0
js/Kernel-Classes.js

@@ -64,6 +64,33 @@ referencedClasses: []
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_allSuperclasses",
+smalltalk.method({
+selector: "allSuperclasses",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1,$3,$4,$2;
+$1=smalltalk.send(self,"_superclass",[]);
+if(($receiver = $1) == nil || $receiver == undefined){
+return [];
+} else {
+$1;
+};
+$3=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_with_",[smalltalk.send(self,"_superclass",[])]);
+smalltalk.send($3,"_addAll_",[smalltalk.send(smalltalk.send(self,"_superclass",[]),"_allSuperclasses",[])]);
+$4=smalltalk.send($3,"_yourself",[]);
+$2=$4;
+return $2;
+},
+args: [],
+source: "allSuperclasses\x0a\x09\x0a    self superclass ifNil: [ ^ #() ].\x0a    \x0a\x09^ (OrderedCollection with: self superclass) \x0a    \x09addAll: self superclass allSuperclasses;\x0a        yourself",
+messageSends: ["ifNil:", "superclass", "addAll:", "allSuperclasses", "with:", "yourself"],
+referencedClasses: ["OrderedCollection"]
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_basicNew",
 smalltalk.method({
@@ -216,6 +243,22 @@ referencedClasses: ["Compiler"]
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_definition",
+smalltalk.method({
+selector: "definition",
+category: 'accessing',
+fn: function (){
+var self=this;
+return "";
+},
+args: [],
+source: "definition\x0a\x09^ ''",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_inheritsFrom_",
 smalltalk.method({
@@ -292,6 +335,24 @@ referencedClasses: []
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_methods",
+smalltalk.method({
+selector: "methods",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_methodDictionary",[]),"_values",[]);
+return $1;
+},
+args: [],
+source: "methods\x0a\x09^ self methodDictionary values",
+messageSends: ["values", "methodDictionary"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_methodsFor_",
 smalltalk.method({
@@ -331,6 +392,26 @@ referencedClasses: []
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_methodsInProtocol_",
+smalltalk.method({
+selector: "methodsInProtocol:",
+category: 'accessing',
+fn: function (aString){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(smalltalk.send(self,"_methodDictionary",[]),"_values",[]),"_select_",[(function(each){
+return smalltalk.send(smalltalk.send(each,"_protocol",[]),"__eq",[aString]);
+})]);
+return $1;
+},
+args: ["aString"],
+source: "methodsInProtocol: aString\x0a\x09^ self methodDictionary values select: [ :each | each protocol = aString ]",
+messageSends: ["select:", "=", "protocol", "values", "methodDictionary"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_name",
 smalltalk.method({
@@ -453,6 +534,24 @@ referencedClasses: []
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_selectors",
+smalltalk.method({
+selector: "selectors",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_methodDictionary",[]),"_keys",[]);
+return $1;
+},
+args: [],
+source: "selectors\x0a\x09^ self methodDictionary keys",
+messageSends: ["keys", "methodDictionary"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_subclasses",
 smalltalk.method({
@@ -487,6 +586,40 @@ referencedClasses: []
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+"_theMetaClass",
+smalltalk.method({
+selector: "theMetaClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_class",[]);
+return $1;
+},
+args: [],
+source: "theMetaClass\x0a\x09^ self class",
+messageSends: ["class"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+"_theNonMetaClass",
+smalltalk.method({
+selector: "theNonMetaClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self;
+},
+args: [],
+source: "theNonMetaClass\x0a\x09^ self",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 "_withAllSubclasses",
 smalltalk.method({
@@ -553,6 +686,41 @@ referencedClasses: []
 }),
 smalltalk.Class);
 
+smalltalk.addMethod(
+"_definition",
+smalltalk.method({
+selector: "definition",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$3,$1;
+$1=smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(stream){
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(smalltalk.send(self,"_superclass",[]),"_asString",[])]);
+smalltalk.send(stream,"_nextPutAll_",[" subclass: #"]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(self,"_name",[])]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(smalltalk.send((smalltalk.String || String),"_lf",[]),"__comma",[smalltalk.send((smalltalk.String || String),"_tab",[])])]);
+$2=smalltalk.send(stream,"_nextPutAll_",["instanceVariableNames: '"]);
+$2;
+smalltalk.send(smalltalk.send(self,"_instanceVariableNames",[]),"_do_separatedBy_",[(function(each){
+return smalltalk.send(stream,"_nextPutAll_",[each]);
+}),(function(){
+return smalltalk.send(stream,"_nextPutAll_",[" "]);
+})]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(smalltalk.send("'","__comma",[smalltalk.send((smalltalk.String || String),"_lf",[])]),"__comma",[smalltalk.send((smalltalk.String || String),"_tab",[])])]);
+smalltalk.send(stream,"_nextPutAll_",["package: '"]);
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(self,"_category",[])]);
+$3=smalltalk.send(stream,"_nextPutAll_",["'"]);
+return $3;
+})]);
+return $1;
+},
+args: [],
+source: "definition\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream \x0a\x09    \x09nextPutAll: self superclass asString;\x0a\x09    \x09nextPutAll: ' subclass: #';\x0a\x09    \x09nextPutAll: self name;\x0a\x09    \x09nextPutAll: String lf, String tab;\x0a\x09    \x09nextPutAll: 'instanceVariableNames: '''.\x0a\x09\x09self instanceVariableNames \x0a          \x09do: [ :each | stream nextPutAll: each ] \x0a\x09    \x09separatedBy: [ stream nextPutAll: ' ' ].\x0a\x09\x09stream\x0a\x09    \x09nextPutAll: '''', String lf, String tab;\x0a\x09    \x09nextPutAll: 'package: ''';\x0a\x09    \x09nextPutAll: self category;\x0a\x09    \x09nextPutAll: '''' ]",
+messageSends: ["streamContents:", "nextPutAll:", "asString", "superclass", "name", ",", "tab", "lf", "do:separatedBy:", "instanceVariableNames", "category"],
+referencedClasses: ["String"]
+}),
+smalltalk.Class);
+
 smalltalk.addMethod(
 "_isClass",
 smalltalk.method({
@@ -737,6 +905,35 @@ referencedClasses: []
 }),
 smalltalk.Metaclass);
 
+smalltalk.addMethod(
+"_definition",
+smalltalk.method({
+selector: "definition",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$1;
+$1=smalltalk.send((smalltalk.String || String),"_streamContents_",[(function(stream){
+smalltalk.send(stream,"_nextPutAll_",[smalltalk.send(self,"_asString",[])]);
+smalltalk.send(stream,"_nextPutAll_",[" class "]);
+$2=smalltalk.send(stream,"_nextPutAll_",["instanceVariableNames: '"]);
+$2;
+smalltalk.send(smalltalk.send(self,"_instanceVariableNames",[]),"_do_separatedBy_",[(function(each){
+return smalltalk.send(stream,"_nextPutAll_",[each]);
+}),(function(){
+return smalltalk.send(stream,"_nextPutAll_",[" "]);
+})]);
+return smalltalk.send(stream,"_nextPutAll_",["'"]);
+})]);
+return $1;
+},
+args: [],
+source: "definition\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream \x0a\x09   \x09 \x09nextPutAll: self asString;\x0a\x09    \x09nextPutAll: ' class ';\x0a\x09    \x09nextPutAll: 'instanceVariableNames: '''.\x0a\x09\x09self instanceVariableNames\x0a\x09    \x09do: [ :each | stream nextPutAll: each ]\x0a\x09    \x09separatedBy: [ stream nextPutAll: ' ' ].\x0a\x09\x09stream nextPutAll: '''' ]",
+messageSends: ["streamContents:", "nextPutAll:", "asString", "do:separatedBy:", "instanceVariableNames"],
+referencedClasses: ["String"]
+}),
+smalltalk.Metaclass);
+
 smalltalk.addMethod(
 "_instanceClass",
 smalltalk.method({
@@ -804,6 +1001,40 @@ referencedClasses: []
 }),
 smalltalk.Metaclass);
 
+smalltalk.addMethod(
+"_theMetaClass",
+smalltalk.method({
+selector: "theMetaClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+return self;
+},
+args: [],
+source: "theMetaClass\x0a\x09^ self",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Metaclass);
+
+smalltalk.addMethod(
+"_theNonMetaClass",
+smalltalk.method({
+selector: "theNonMetaClass",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_instanceClass",[]);
+return $1;
+},
+args: [],
+source: "theNonMetaClass\x0a\x09^ self instanceClass",
+messageSends: ["instanceClass"],
+referencedClasses: []
+}),
+smalltalk.Metaclass);
+
 
 
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');

+ 40 - 3
js/Kernel-Collections.deploy.js

@@ -411,6 +411,31 @@ return result;
 }),
 smalltalk.Collection);
 
+smalltalk.addMethod(
+"_intersection_",
+smalltalk.method({
+selector: "intersection:",
+fn: function (aCollection){
+var self=this;
+var $1,$2;
+var set;
+var outputSet;
+set=smalltalk.send(self,"_asSet",[]);
+outputSet=smalltalk.send((smalltalk.Set || Set),"_new",[]);
+smalltalk.send(aCollection,"_do_",[(function(each){
+$1=smalltalk.send(smalltalk.send(set,"_includes_",[each]),"_and_",[(function(){
+return smalltalk.send(smalltalk.send(outputSet,"_includes_",[each]),"_not",[]);
+})]);
+if(smalltalk.assert($1)){
+return smalltalk.send(outputSet,"_add_",[each]);
+};
+})]);
+$2=smalltalk.send(smalltalk.send(self,"_class",[]),"_withAll_",[smalltalk.send(outputSet,"_asArray",[])]);
+return $2;
+}
+}),
+smalltalk.Collection);
+
 smalltalk.addMethod(
 "_isEmpty",
 smalltalk.method({
@@ -1550,9 +1575,9 @@ selector: "indexOf:ifAbsent:",
 fn: function (anObject,aBlock){
 var self=this;
 
-		for(var i=0;i<self.length;i++){
-			if(self[i].__eq(anObject)) {return i+1}
-		}
+		for(var i=0;i<self.length;i++) {
+			if(smalltalk.send(self[i], '__eq', [anObject])) {return i+1}
+		};
 		return aBlock();
 	;
 ;
@@ -2797,6 +2822,18 @@ return self}
 }),
 smalltalk.String.klass);
 
+smalltalk.addMethod(
+"_fromCharCode_",
+smalltalk.method({
+selector: "fromCharCode:",
+fn: function (anInteger){
+var self=this;
+return String.fromCharCode(anInteger);
+;
+return self}
+}),
+smalltalk.String.klass);
+
 smalltalk.addMethod(
 "_fromString_",
 smalltalk.method({

+ 51 - 4
js/Kernel-Collections.js

@@ -551,6 +551,36 @@ referencedClasses: []
 }),
 smalltalk.Collection);
 
+smalltalk.addMethod(
+"_intersection_",
+smalltalk.method({
+selector: "intersection:",
+category: 'enumerating',
+fn: function (aCollection){
+var self=this;
+var $1,$2;
+var set;
+var outputSet;
+set=smalltalk.send(self,"_asSet",[]);
+outputSet=smalltalk.send((smalltalk.Set || Set),"_new",[]);
+smalltalk.send(aCollection,"_do_",[(function(each){
+$1=smalltalk.send(smalltalk.send(set,"_includes_",[each]),"_and_",[(function(){
+return smalltalk.send(smalltalk.send(outputSet,"_includes_",[each]),"_not",[]);
+})]);
+if(smalltalk.assert($1)){
+return smalltalk.send(outputSet,"_add_",[each]);
+};
+})]);
+$2=smalltalk.send(smalltalk.send(self,"_class",[]),"_withAll_",[smalltalk.send(outputSet,"_asArray",[])]);
+return $2;
+},
+args: ["aCollection"],
+source: "intersection: aCollection\x0a\x09\x22Answer the set theoretic intersection of two collections.\x22\x0a\x0a\x09| set outputSet |\x0a\x09\x0a\x09set := self asSet.\x0a\x09outputSet := Set new.\x0a\x09\x0a\x09aCollection do: [ :each |\x0a\x09\x09((set includes: each) and: [(outputSet includes: each) not])\x0a\x09\x09\x09ifTrue: [ \x0a\x09\x09\x09\x09outputSet add: each]].\x0a\x09\x09\x0a\x09^ self class withAll: outputSet asArray",
+messageSends: ["asSet", "new", "do:", "ifTrue:", "add:", "and:", "not", "includes:", "withAll:", "asArray", "class"],
+referencedClasses: ["Set"]
+}),
+smalltalk.Collection);
+
 smalltalk.addMethod(
 "_isEmpty",
 smalltalk.method({
@@ -2067,15 +2097,15 @@ category: 'accessing',
 fn: function (anObject,aBlock){
 var self=this;
 
-		for(var i=0;i<self.length;i++){
-			if(self[i].__eq(anObject)) {return i+1}
-		}
+		for(var i=0;i<self.length;i++) {
+			if(smalltalk.send(self[i], '__eq', [anObject])) {return i+1}
+		};
 		return aBlock();
 	;
 ;
 return self},
 args: ["anObject", "aBlock"],
-source: "indexOf: anObject ifAbsent: aBlock\x0a\x09<\x0a\x09\x09for(var i=0;i<self.length;i++){\x0a\x09\x09\x09if(self[i].__eq(anObject)) {return i+1}\x0a\x09\x09}\x0a\x09\x09return aBlock();\x0a\x09>",
+source: "indexOf: anObject ifAbsent: aBlock\x0a\x09<\x0a\x09\x09for(var i=0;i<self.length;i++) {\x0a\x09\x09\x09if(smalltalk.send(self[i], '__eq', [anObject])) {return i+1}\x0a\x09\x09};\x0a\x09\x09return aBlock();\x0a\x09>",
 messageSends: [],
 referencedClasses: []
 }),
@@ -3758,6 +3788,23 @@ referencedClasses: []
 }),
 smalltalk.String.klass);
 
+smalltalk.addMethod(
+"_fromCharCode_",
+smalltalk.method({
+selector: "fromCharCode:",
+category: 'instance creation',
+fn: function (anInteger){
+var self=this;
+return String.fromCharCode(anInteger);
+;
+return self},
+args: ["anInteger"],
+source: "fromCharCode: anInteger\x0a\x09<return String.fromCharCode(anInteger)>",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String.klass);
+
 smalltalk.addMethod(
 "_fromString_",
 smalltalk.method({

+ 13 - 0
js/Kernel-Methods.deploy.js

@@ -368,6 +368,19 @@ return $1;
 }),
 smalltalk.CompiledMethod);
 
+smalltalk.addMethod(
+"_protocol",
+smalltalk.method({
+selector: "protocol",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_category",[]);
+return $1;
+}
+}),
+smalltalk.CompiledMethod);
+
 smalltalk.addMethod(
 "_referencedClasses",
 smalltalk.method({

+ 18 - 0
js/Kernel-Methods.js

@@ -510,6 +510,24 @@ referencedClasses: []
 }),
 smalltalk.CompiledMethod);
 
+smalltalk.addMethod(
+"_protocol",
+smalltalk.method({
+selector: "protocol",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(self,"_category",[]);
+return $1;
+},
+args: [],
+source: "protocol\x0a\x09^ self category",
+messageSends: ["category"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
 smalltalk.addMethod(
 "_referencedClasses",
 smalltalk.method({

File diff suppressed because it is too large
+ 411 - 347
js/Kernel-Tests.deploy.js


File diff suppressed because it is too large
+ 411 - 347
js/Kernel-Tests.js


+ 46 - 0
st/Helios-Announcements.st

@@ -3,3 +3,49 @@ Object subclass: #HLAnnouncement
 	instanceVariableNames: ''
 	package: 'Helios-Announcements'!
 
+HLAnnouncement subclass: #HLItemSelected
+	instanceVariableNames: 'item'
+	package: 'Helios-Announcements'!
+
+!HLItemSelected methodsFor: 'accessing'!
+
+item
+	^ item
+!
+
+item: anObject
+	item := anObject
+! !
+
+!HLItemSelected class methodsFor: 'instance creation'!
+
+on: anItem
+	^ self new
+    	item: anItem;
+        yourself
+! !
+
+HLItemSelected subclass: #HLClassSelected
+	instanceVariableNames: ''
+	package: 'Helios-Announcements'!
+
+HLItemSelected subclass: #HLMethodSelected
+	instanceVariableNames: ''
+	package: 'Helios-Announcements'!
+
+HLItemSelected subclass: #HLPackageSelected
+	instanceVariableNames: ''
+	package: 'Helios-Announcements'!
+
+HLItemSelected subclass: #HLProtocolSelected
+	instanceVariableNames: ''
+	package: 'Helios-Announcements'!
+
+HLAnnouncement subclass: #HLShowCommentToggled
+	instanceVariableNames: ''
+	package: 'Helios-Announcements'!
+
+HLAnnouncement subclass: #HLShowInstanceToggled
+	instanceVariableNames: ''
+	package: 'Helios-Announcements'!
+

+ 678 - 0
st/Helios-Browser.st

@@ -0,0 +1,678 @@
+Smalltalk current createPackage: 'Helios-Browser' properties: #{}!
+HLWidget subclass: #HLBrowser
+	instanceVariableNames: 'model packagesListWidget classesListWidget protocolsListWidget methodsListWidget sourceWidget'
+	package: 'Helios-Browser'!
+
+!HLBrowser methodsFor: 'accessing'!
+
+announcer
+	^ self model announcer
+!
+
+environment
+	^ self model environment
+!
+
+model
+	^ model ifNil: [ model := HLBrowserModel new ]
+!
+
+model: aModel
+	model := aModel
+! !
+
+!HLBrowser methodsFor: 'keybindings'!
+
+registerBindingsOn: aBindingGroup
+	aBindingGroup 
+    	addGroupKey: 66 labelled: 'Browse';
+        addGroupKey: 71 labelled: 'Go to'
+! !
+
+!HLBrowser methodsFor: 'rendering'!
+
+renderContentOn: html
+	html with: (HLContainer with: (HLHorizontalSplitter 
+    	with: (HLVerticalSplitter
+        	with: (HLVerticalSplitter
+            	with: self packagesListWidget
+                with: self classesListWidget)
+            with: (HLVerticalSplitter
+            	with: self protocolsListWidget
+                with: self methodsListWidget)) 
+        with: self sourceWidget))
+! !
+
+!HLBrowser methodsFor: 'widgets'!
+
+classesListWidget
+	^ classesListWidget ifNil: [
+      	classesListWidget := HLClassesListWidget on: self model.
+		classesListWidget next: self protocolsListWidget ]
+!
+
+methodsListWidget
+	^ methodsListWidget ifNil: [
+      	methodsListWidget := HLMethodsListWidget on: self model ]
+!
+
+packagesListWidget
+	^ packagesListWidget ifNil: [
+      	packagesListWidget := HLPackagesListWidget on: self model.
+		packagesListWidget next: self classesListWidget ]
+!
+
+protocolsListWidget
+	^ protocolsListWidget ifNil: [
+      	protocolsListWidget := HLProtocolsListWidget on: self model.
+		protocolsListWidget next: self methodsListWidget ]
+!
+
+sourceWidget
+	^ sourceWidget ifNil: [
+      	sourceWidget := HLBrowserSourceWidget on: self model ]
+! !
+
+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
+! !
+
+HLNavigationListWidget subclass: #HLBrowserListWidget
+	instanceVariableNames: 'model'
+	package: 'Helios-Browser'!
+
+!HLBrowserListWidget methodsFor: 'accessing'!
+
+model
+	^ model
+!
+
+model: aBrowserModel
+	"TODO: unsubscribe from previous model"
+    
+	model := aBrowserModel.
+    model subscribe: self
+! !
+
+!HLBrowserListWidget methodsFor: 'actions'!
+
+ensureSelection
+	self selectedItem 
+    	ifNil: [
+      		self items ifNotEmpty: [
+  				self selectItem: self items first.
+  				self refresh ] ]
+		ifNotNil: [ self selectItem: self selectedItem ]
+! !
+
+!HLBrowserListWidget methodsFor: 'events'!
+
+focus
+	super focus.
+    self ensureSelection
+! !
+
+!HLBrowserListWidget class methodsFor: 'instance creation'!
+
+on: aModel
+	^ self new 
+    	model: aModel;
+        yourself
+! !
+
+HLBrowserListWidget subclass: #HLClassesListWidget
+	instanceVariableNames: ''
+	package: 'Helios-Browser'!
+
+!HLClassesListWidget methodsFor: 'accessing'!
+
+getChildrenOf: aClass
+	^ self items select: [ :each | each superclass = aClass ]
+!
+
+getRootClassesOf: aCollection
+	^ aCollection select: [ :each |
+    	(each allSuperclasses intersection: aCollection) isEmpty ]
+!
+
+iconForItem: aClass
+	^ aClass theNonMetaClass comment isEmpty
+    	ifFalse: [ 'icon-none' ]
+      	ifTrue: [ 'icon-question-sign' ]
+! !
+
+!HLClassesListWidget methodsFor: 'actions'!
+
+focusMethodsListWidget
+	self model announcer announce: HLMethodsListFocus new
+!
+
+focusProtocolsListWidget
+	self model announcer announce: HLProtocolsListFocus new
+!
+
+packageSelected: aPackage
+    self selectedItem: nil.
+    
+    self items: (aPackage 
+    	ifNil: [ #() ]
+  		ifNotNil: [ (aPackage classes 
+        	collect: [ :each | each theNonMetaClass ]) asSet asArray ]).
+
+    self refresh
+!
+
+selectItem: aClass
+	super selectItem: aClass.
+    self model selectedClass: aClass
+!
+
+showInstance: aBoolean
+	aBoolean = self browser showInstance ifFalse: [
+		self browser showInstance: aBoolean ]
+! !
+
+!HLClassesListWidget methodsFor: 'announcements'!
+
+subscribeTo: anAnnouncer
+	anAnnouncer on: HLPackageSelected do: [ :ann |
+    	self packageSelected: ann item ]
+! !
+
+!HLClassesListWidget methodsFor: 'rendering'!
+
+renderButtonsOn: html
+	html div 
+        class: 'btn-group';
+		at: 'data-toggle' put: 'buttons-radio';
+		with: [ 
+           	html button 
+                class: (String streamContents: [ :str |
+                	str nextPutAll: 'btn'.
+                    self model showInstance ifTrue: [ 
+                    	str nextPutAll: ' active'] ]);
+  				with: 'Instance';
+                onClick: [ self model showInstance: true ].
+  			html button
+  				class: (String streamContents: [ :str |
+                	str nextPutAll: 'btn'.
+                    self model showInstance ifFalse: [ 
+                    	str nextPutAll: ' active'] ]);
+  				with: 'Class';
+				onClick: [ self model showInstance: false ] ].
+                 
+  	html button 
+           	class: 'btn';
+            at: 'data-toggle' put: 'button';
+  			with: 'Comment'
+!
+
+renderItem: aClass level: anInteger on: html
+	| li |
+    
+	li := html li.
+    li
+    	at: 'list-data' put: (self items indexOf: aClass);
+    	class: (self cssClassForItem: aClass);
+        with: [ 
+        	html a
+            	with: [ 
+            		(html tag: 'i') class: (self iconForItem: aClass).
+  					self renderItemLabel: aClass level: anInteger on: html ];
+				onClick: [
+                  	self activateListItem: li asJQuery ] ].
+                    
+    (self getChildrenOf: aClass) do: [ :each |
+    	self renderItem: each level: anInteger + 1 on: html ]
+!
+
+renderItem: aClass on: html
+	super renderItem: aClass on: html.
+    	(self getChildrenOf: aClass) do: [ :each |
+    		self renderItem: each level: 1 on: html ]
+!
+
+renderItemLabel: aClass level: anInteger on: html
+	html span asJQuery html: (String streamContents: [ :str |
+		anInteger timesRepeat: [
+			str nextPutAll: '&nbsp;&nbsp;&nbsp;&nbsp;'].
+			str nextPutAll: aClass name ])
+!
+
+renderItemLabel: aClass on: html
+	self renderItemLabel: aClass level: 0 on: html
+!
+
+renderListOn: html
+	(self getRootClassesOf: self items)
+    	do: [ :each | self renderItem: each on: html ]
+! !
+
+HLBrowserListWidget subclass: #HLMethodsListWidget
+	instanceVariableNames: 'selectorsCache'
+	package: 'Helios-Browser'!
+
+!HLMethodsListWidget methodsFor: 'accessing'!
+
+allProtocol
+	^ self model allProtocol
+!
+
+iconForItem: aCompiledMethod
+	| override overriden |
+    
+    override := self isOverride: aCompiledMethod.
+    overriden := self isOverriden: aCompiledMethod.
+    
+	^ override
+    	ifTrue: [ overriden
+			ifTrue: [ 'icon-resize-vertical' ]
+			ifFalse: [ 'icon-arrow-up' ] ]
+		ifFalse: [
+			overriden
+			ifTrue: [ 'icon-arrow-down' ]
+			ifFalse: [ 'icon-none' ] ]
+!
+
+methodsInProtocol: aString
+	^ aString = self allProtocol
+    	ifTrue: [ self model selectedClass methods ]
+      	ifFalse: [ self model selectedClass methodsInProtocol: aString ]
+!
+
+overrideSelectors
+	^ self selectorsCache 
+    	at: 'override'
+        ifAbsentPut: [ 
+        	self model selectedClass allSuperclasses
+				inject: Set new into: [ :acc :each | acc addAll: each selectors; yourself ] ]
+!
+
+overridenSelectors
+	^ self selectorsCache 
+    	at: 'overriden'
+        ifAbsentPut: [ 
+        	self model selectedClass allSubclasses
+				inject: Set new into: [ :acc :each | acc addAll: each selectors; yourself ] ]
+!
+
+selectorsCache
+	^ selectorsCache
+! !
+
+!HLMethodsListWidget methodsFor: 'actions'!
+
+protocolSelected: aString
+    self selectedItem: nil.
+    
+    self items: (self model selectedClass 
+    	ifNil: [ #() ]
+      	ifNotNil: [ aString
+    		ifNil: [ self model selectedClass methods ]
+      		ifNotNil: [ self methodsInProtocol: aString ] ]).
+        
+    self refresh
+!
+
+selectItem: aCompiledMethod
+	super selectItem: aCompiledMethod.
+    self model selectedMethod: aCompiledMethod
+! !
+
+!HLMethodsListWidget methodsFor: 'announcements'!
+
+subscribeTo: anAnnouncer
+	anAnnouncer on: HLProtocolSelected do: [ :ann |
+    	self protocolSelected: ann item ].
+    anAnnouncer on: HLShowInstanceToggled do: [ :ann |
+    	self protocolSelected: nil ]
+! !
+
+!HLMethodsListWidget methodsFor: 'cache'!
+
+flushSelectorsCache
+	selectorsCache := Dictionary new
+! !
+
+!HLMethodsListWidget methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+    self flushSelectorsCache
+! !
+
+!HLMethodsListWidget methodsFor: 'rendering'!
+
+renderContentOn: html
+	self model showInstance
+    	ifFalse: [ html div 
+        	class: 'class_side'; 
+            with: [ super renderContentOn: html ] ]
+      	ifTrue: [ super renderContentOn: html ].
+        
+    self flushSelectorsCache
+!
+
+renderItemLabel: aCompiledMethod on: html
+	html with: aCompiledMethod selector
+! !
+
+!HLMethodsListWidget methodsFor: 'testing'!
+
+isOverride: aMethod
+
+   ^ self overrideSelectors includes: aMethod selector
+!
+
+isOverriden: aMethod
+
+   ^ self overridenSelectors includes: aMethod selector
+! !
+
+HLBrowserListWidget subclass: #HLPackagesListWidget
+	instanceVariableNames: ''
+	package: 'Helios-Browser'!
+
+!HLPackagesListWidget methodsFor: 'accessing'!
+
+items
+	^ items ifNil: [ items := self model packages ]
+! !
+
+!HLPackagesListWidget methodsFor: 'actions'!
+
+focusClassesListWidget
+	self model announcer announce: HLClassesListFocus new
+!
+
+selectItem: aPackage
+	super selectItem: aPackage.
+    self model selectedPackage: aPackage
+! !
+
+!HLPackagesListWidget methodsFor: 'keybindings'!
+
+registerBindingsOn: aBindingGroup
+	(aBindingGroup at: 'Go to') 
+    	addActionKey: 67 labelled: 'Packages' callback: [ self focus ]
+! !
+
+!HLPackagesListWidget methodsFor: 'rendering'!
+
+renderButtonsOn: html
+
+	html span class: 'info'; with: 'Auto commit is'.
+	html div 
+        class: 'btn-group switch';
+		at: 'data-toggle' put: 'buttons-radio';
+		with: [ 
+           	html button 
+                class: (String streamContents: [ :str |
+                	str nextPutAll: 'btn' ]);
+  				with: 'On'.
+  			html button
+  				class: (String streamContents: [ :str |
+                	str nextPutAll: 'btn active' ]);
+  				with: 'Off' ].
+                
+    html a 
+         	class: 'btn';
+			with: 'Commit now'.
+! !
+
+HLBrowserListWidget subclass: #HLProtocolsListWidget
+	instanceVariableNames: ''
+	package: 'Helios-Browser'!
+
+!HLProtocolsListWidget methodsFor: 'accessing'!
+
+allProtocol
+	^ self model allProtocol
+!
+
+selectedItem
+	^ super selectedItem ifNil: [ self allProtocol ]
+! !
+
+!HLProtocolsListWidget methodsFor: 'actions'!
+
+classSelected: aClass
+    self selectedItem: nil.
+    
+    self items: (aClass
+    	ifNil: [ Array with: self allProtocol ]
+      	ifNotNil: [ 
+        	(Array with: self allProtocol) 
+            	addAll: aClass protocols; 
+                yourself ]).
+
+    self refresh
+!
+
+selectItem: aString
+	super selectItem: aString.
+    self model selectedProtocol: aString
+! !
+
+!HLProtocolsListWidget methodsFor: 'announcements'!
+
+subscribeTo: anAnnouncer
+	anAnnouncer on: HLClassSelected do: [ :ann |
+    	self classSelected: ann item ].
+    anAnnouncer on: HLShowInstanceToggled do: [ :ann |
+    	self classSelected: self model selectedClass ]
+! !
+
+!HLProtocolsListWidget methodsFor: 'rendering'!
+
+renderContentOn: html
+	self model showInstance
+    	ifFalse: [ html div 
+        	class: 'class_side'; 
+            with: [ super renderContentOn: html ] ]
+      	ifTrue: [ super renderContentOn: html ]
+! !
+
+Object subclass: #HLBrowserModel
+	instanceVariableNames: 'announcer environment selectedPackage selectedClass selectedProtocol selectedMethod showInstance showComment'
+	package: 'Helios-Browser'!
+
+!HLBrowserModel methodsFor: 'accessing'!
+
+allProtocol
+	^ '-- All --'
+!
+
+environment
+	^ environment ifNil: [ environment := Smalltalk current ]
+!
+
+environment: anEnvironment
+	environment := anEnvironment
+!
+
+packages
+	^ self environment packages
+!
+
+selectedClass
+	^ selectedClass
+!
+
+selectedClass: aClass
+	aClass 
+    	ifNil: [ selectedClass := nil ]
+      	ifNotNil: [
+			self showInstance 
+    			ifTrue: [ selectedClass := aClass theNonMetaClass ]
+      			ifFalse: [ selectedClass := aClass theMetaClass ] ].
+    
+    self 
+    	selectedMethod: nil;
+        selectedProtocol: nil.
+        
+   self announcer announce: (HLClassSelected on: self selectedClass)
+!
+
+selectedMethod
+	^ selectedMethod
+!
+
+selectedMethod: aCompiledMethod
+	selectedMethod := aCompiledMethod.
+    
+    self announcer announce: (HLMethodSelected on: aCompiledMethod)
+!
+
+selectedPackage
+	^ selectedPackage
+!
+
+selectedPackage: aPackage
+
+	selectedPackage := aPackage.
+    self selectedClass: nil.
+    
+    self announcer announce: (HLPackageSelected on: aPackage)
+!
+
+selectedProtocol
+	^ selectedProtocol
+!
+
+selectedProtocol: aString
+	selectedProtocol := aString.
+    
+    self selectedMethod: nil.
+    
+    self announcer announce: (HLProtocolSelected on: aString)
+!
+
+showComment
+	^ showComment ifNil: [ false ]
+!
+
+showComment: aBoolean
+	showComment := aBoolean.
+    
+    self announcer announce: HLShowCommentToggled new
+!
+
+showInstance
+	^ showInstance ifNil: [ true ]
+!
+
+showInstance: aBoolean
+	showInstance := aBoolean.
+    
+    self selectedClass ifNotNil: [
+    	self selectedClass: (aBoolean
+    		ifTrue: [self selectedClass theNonMetaClass ]
+    	  	ifFalse: [ self selectedClass theMetaClass ]) ].
+    
+    self announcer announce: HLShowInstanceToggled new
+! !
+
+!HLBrowserModel methodsFor: 'announcements'!
+
+announcer
+	^ announcer ifNil: [ announcer := Announcer new ]
+!
+
+subscribe: aWidget
+	aWidget subscribeTo: self announcer
+! !
+
+HLWidget subclass: #HLBrowserSourceWidget
+	instanceVariableNames: 'model sourceArea'
+	package: 'Helios-Browser'!
+
+!HLBrowserSourceWidget methodsFor: 'accessing'!
+
+contents
+	^ self sourceArea contents
+!
+
+contents: aString
+	self sourceArea contents: aString
+!
+
+model
+	^ model
+!
+
+model: aBrowserModel
+	"TODO: unsubscribe from previous model"
+    
+	model := aBrowserModel.
+    model subscribe: self
+!
+
+sourceArea
+	^ sourceArea ifNil: [ sourceArea := HLSourceArea new ]
+! !
+
+!HLBrowserSourceWidget methodsFor: 'actions'!
+
+classSelected: aClass
+	aClass ifNil: [ ^ self contents: '' ].
+    
+    self contents: aClass definition
+!
+
+methodSelected: aCompiledMethod
+	aCompiledMethod ifNil: [ ^ self contents: '' ].
+    
+    self contents: aCompiledMethod source
+!
+
+protocolSelected: aString
+	self model selectedClass ifNil: [ ^ self contents: '' ].
+    
+    self contents: self model selectedClass definition
+! !
+
+!HLBrowserSourceWidget methodsFor: 'announcements'!
+
+subscribeTo: anAnnouncer
+	anAnnouncer on: HLMethodSelected do: [ :ann |
+    	self methodSelected: ann item ].
+    anAnnouncer on: HLClassSelected do: [ :ann |
+    	self classSelected: ann item ].
+    anAnnouncer on: HLProtocolSelected do: [ :ann |
+    	self protocolSelected: ann item ]
+! !
+
+!HLBrowserSourceWidget methodsFor: 'rendering'!
+
+renderContentOn: html
+	self sourceArea renderOn: html
+! !
+
+!HLBrowserSourceWidget class methodsFor: 'instance creation'!
+
+on: aBrowserModel
+	^ self new
+    	model: aBrowserModel;
+        yourself
+! !
+

+ 689 - 0
st/Helios-Core.st

@@ -0,0 +1,689 @@
+Smalltalk current createPackage: 'Helios-Core' properties: #{}!
+Widget subclass: #HLSourceArea
+	instanceVariableNames: 'editor textarea div receiver onDoIt'
+	package: 'Helios-Core'!
+
+!HLSourceArea methodsFor: 'accessing'!
+
+contents
+    ^editor getValue
+!
+
+contents: aString
+    editor setValue: aString
+!
+
+currentLine
+    ^editor getLine: (editor getCursor line)
+!
+
+currentLineOrSelection
+    ^editor somethingSelected
+	ifFalse: [self currentLine]
+	ifTrue: [self selection]
+!
+
+editor
+	^editor
+!
+
+onDoIt
+	^onDoIt
+!
+
+onDoIt: aBlock
+	onDoIt := aBlock
+!
+
+receiver
+	^receiver ifNil: [DoIt new]
+!
+
+receiver: anObject
+	receiver := anObject
+!
+
+selection
+	^editor getSelection
+!
+
+selectionEnd
+   ^textarea element selectionEnd
+!
+
+selectionEnd: anInteger
+   textarea element selectionEnd: anInteger
+!
+
+selectionStart
+   ^textarea element selectionStart
+!
+
+selectionStart: anInteger
+   textarea element selectionStart: anInteger
+!
+
+setEditorOn: aTextarea
+	<self['@editor'] = CodeMirror.fromTextArea(aTextarea, {
+		theme: 'amber',
+                lineNumbers: true,
+                enterMode: 'flat',
+                matchBrackets: true,
+                electricChars: false
+	})>
+!
+
+val
+    ^editor getValue
+!
+
+val: aString
+    editor setValue: aString
+! !
+
+!HLSourceArea methodsFor: 'actions'!
+
+clear
+      self contents: ''
+!
+
+doIt
+    | result |
+    result := self eval: self currentLineOrSelection.
+    self onDoIt ifNotNil: [self onDoIt value].
+    ^result
+!
+
+eval: aString
+	| compiler  |
+	compiler := Compiler new.
+	[compiler parseExpression: aString] on: Error do: [:ex |
+		^window alert: ex messageText].
+	^(compiler eval: (compiler compile: 'doIt ^[', aString, '] value' forClass: DoIt)) fn applyTo: self receiver arguments: #()
+!
+
+fileIn
+    Importer new import: self currentLineOrSelection readStream
+!
+
+handleKeyDown: anEvent
+    <if(anEvent.ctrlKey) {
+		if(anEvent.keyCode === 80) { //ctrl+p
+			self._printIt();
+			anEvent.preventDefault();
+			return false;
+		}
+		if(anEvent.keyCode === 68) { //ctrl+d
+			self._doIt();
+			anEvent.preventDefault();
+			return false;
+		}
+		if(anEvent.keyCode === 73) { //ctrl+i
+			self._inspectIt();
+			anEvent.preventDefault();
+			return false;
+		}
+	}>
+!
+
+inspectIt
+    self doIt inspect
+!
+
+print: aString
+	| start stop |
+	start := HashedCollection new.
+	stop := HashedCollection new.
+	start at: 'line' put: (editor getCursor: false) line.
+	start at: 'ch' put: (editor getCursor: false) ch.
+	stop at: 'line' put: (start at: 'line').
+	stop at: 'ch' put: ((start at: 'ch') + aString size + 2).
+	editor replaceSelection: (editor getSelection, ' ', aString, ' ').
+	editor setCursor: (editor getCursor: true).
+	editor setSelection: stop end: start
+!
+
+printIt
+    self print: self doIt printString
+! !
+
+!HLSourceArea methodsFor: 'events'!
+
+onKeyDown: aBlock
+	div onKeyDown: aBlock
+!
+
+onKeyUp: aBlock
+	div onKeyUp: aBlock
+! !
+
+!HLSourceArea methodsFor: 'rendering'!
+
+renderOn: html
+    div := html div class: 'source'.
+    div with: [textarea := html textarea].
+    self setEditorOn: textarea element.
+    div onKeyDown: [:e | self handleKeyDown: e]
+! !
+
+Object subclass: #HLTab
+	instanceVariableNames: 'widget label'
+	package: 'Helios-Core'!
+
+!HLTab methodsFor: 'accessing'!
+
+activate
+	self manager activate: self
+!
+
+add
+	self manager addTab: self
+!
+
+label
+	^ label ifNil: [ '' ]
+!
+
+label: aString
+	label := aString
+!
+
+manager
+	^ HLManager 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-Core'!
+
+!HLWidget methodsFor: 'accessing'!
+
+manager
+	^ HLManager current
+! !
+
+!HLWidget methodsFor: 'announcements'!
+
+subscribeTo: anAnnouncer
+! !
+
+!HLWidget methodsFor: 'keybindings'!
+
+registerBindings
+	self registerBindingsOn: self manager keyBinder bindings
+!
+
+registerBindingsOn: aBindingGroup
+! !
+
+!HLWidget methodsFor: 'rendering'!
+
+renderContentOn: html
+!
+
+renderOn: html
+    self registerBindings.
+
+	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
+	HLManager current addTab: (HLTab on: self new labelled: self tabLabel)
+!
+
+tabLabel
+	^ 'Tab'
+!
+
+tabPriority
+	^ 500
+! !
+
+!HLWidget class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ false
+! !
+
+HLWidget subclass: #HLDebugger
+	instanceVariableNames: ''
+	package: 'Helios-Core'!
+
+HLWidget subclass: #HLFocusableWidget
+	instanceVariableNames: 'hiddenInput'
+	package: 'Helios-Core'!
+
+!HLFocusableWidget methodsFor: 'accessing'!
+
+focusClass
+	^ 'focused'
+! !
+
+!HLFocusableWidget methodsFor: 'events'!
+
+blur
+	hiddenInput asJQuery blur
+!
+
+focus
+	hiddenInput asJQuery focus
+!
+
+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: [ rootDiv asJQuery removeClass: self focusClass ];
+        onFocus: [ rootDiv asJQuery addClass: self focusClass ]
+!
+
+renderOn: html
+	self registerBindings.
+	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-Core'!
+
+!HLListWidget methodsFor: 'accessing'!
+
+cssClassForItem: anObject
+	^ self selectedItem = anObject
+			ifTrue: [ 'active' ]
+			ifFalse: [ 'inactive' ]
+!
+
+iconForItem: anObject
+	^ ''
+!
+
+items
+	^ items ifNil: [ #() ]
+!
+
+items: aCollection
+	items := aCollection
+!
+
+selectedItem
+	^ selectedItem
+!
+
+selectedItem: anObject
+	selectedItem := anObject
+! !
+
+!HLListWidget methodsFor: 'actions'!
+
+activateListItem: aListItem
+	| parent position |
+    
+	(aListItem get: 0) ifNil: [ ^self ].
+
+	<position = aListItem.parent().children().get().indexOf(aListItem.get(0)) + 1>.
+
+    parent := aListItem parent.
+	parent children removeClass: 'active'.
+	aListItem addClass: 'active'.
+    
+    "Move the scrollbar to show the active element"
+    aListItem position top < 0 ifTrue: [
+		(parent get: 0) scrollTop: ((parent get: 0) scrollTop + aListItem position top - 10) ].
+    aListItem position top + aListItem height > parent height ifTrue: [ 
+		(parent get: 0) scrollTop: ((parent get: 0) scrollTop + aListItem height - (parent height - aListItem position top)) +10 ].
+        
+   "Activate the corresponding item"
+   self selectItem: (self items at: (aListItem attr: 'list-data') asNumber)
+!
+
+selectItem: anObject
+	self selectedItem: anObject
+! !
+
+!HLListWidget methodsFor: 'events'!
+
+setupKeyBindings
+	hiddenInput asJQuery unbind: 'keydown'.
+
+	hiddenInput asJQuery keydown: [ :e | | selected |
+    	selected := window jQuery: '.focused .nav-pills .active'.
+        e which = 38 ifTrue: [ 
+        	self activateListItem: selected prev ].
+      	e which = 40 ifTrue: [
+			self activateListItem: selected next ] ]
+! !
+
+!HLListWidget methodsFor: 'rendering'!
+
+renderButtonsOn: html
+!
+
+renderContentOn: html
+	html ul 
+    	class: 'nav nav-pills nav-stacked';
+        with: [ self renderListOn: html ].
+    html div class: 'pane_actions form-actions'; with: [
+      	self renderButtonsOn: html ].
+        
+   self setupKeyBindings
+!
+
+renderItem: anObject on: html
+	| li |
+    
+	li := html li.
+    li
+    	class: (self cssClassForItem: anObject);
+        at: 'list-data' put: (self items indexOf: anObject) asString;
+        with: [ 
+        	html a
+            	with: [ 
+            		(html tag: 'i') class: (self iconForItem: anObject).
+  					self renderItemLabel: anObject on: html ];
+				onClick: [
+                  	self activateListItem: li asJQuery.
+                	"self selectItem: anObject" ] ]
+!
+
+renderItemLabel: anObject on: html
+	html with: anObject asString
+!
+
+renderListOn: html
+	self items do: [ :each | 
+    	self renderItem: each on: html ]
+! !
+
+HLListWidget subclass: #HLNavigationListWidget
+	instanceVariableNames: 'previous next'
+	package: 'Helios-Core'!
+
+!HLNavigationListWidget methodsFor: 'accessing'!
+
+next
+	^ next
+!
+
+next: aWidget
+	next := aWidget.
+    aWidget previous: self
+!
+
+previous
+	^ previous
+!
+
+previous: aWidget
+	previous := aWidget
+! !
+
+!HLNavigationListWidget methodsFor: 'actions'!
+
+nextFocus
+	self next ifNotNil: [ self next focus ]
+!
+
+previousFocus
+	self previous ifNotNil: [ self previous focus ]
+! !
+
+!HLNavigationListWidget methodsFor: 'events'!
+
+setupKeyBindings
+	super setupKeyBindings.
+
+	hiddenInput asJQuery keydown: [ :e |
+        e which = 39 ifTrue: [ 
+        	self nextFocus ].
+		e which = 37 ifTrue: [ 
+        	self previousFocus ] ]
+! !
+
+HLWidget subclass: #HLInspector
+	instanceVariableNames: ''
+	package: 'Helios-Core'!
+
+HLWidget subclass: #HLManager
+	instanceVariableNames: 'tabs activeTab keyBinder'
+	package: 'Helios-Core'!
+
+!HLManager methodsFor: 'accessing'!
+
+activeTab
+	^ activeTab
+!
+
+keyBinder
+	^ keyBinder ifNil: [ keyBinder := HLKeyBinder new ]
+!
+
+tabs
+	^ tabs ifNil: [ tabs := OrderedCollection new ]
+! !
+
+!HLManager methodsFor: 'actions'!
+
+activate: aTab
+	self keyBinder flushBindings.
+	activeTab := aTab.
+    
+	self 
+		refresh;
+		show: aTab
+!
+
+addTab: aTab
+	self tabs add: aTab.
+    self activate: aTab
+!
+
+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
+! !
+
+!HLManager methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+    self keyBinder setupEvents
+! !
+
+!HLManager 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
+! !
+
+HLManager class instanceVariableNames: 'current'!
+
+!HLManager class methodsFor: 'accessing'!
+
+current
+	^ current ifNil: [ current := self basicNew initialize ]
+! !
+
+!HLManager class methodsFor: 'initialization'!
+
+initialize
+	self current appendToJQuery: 'body' asJQuery
+! !
+
+!HLManager class methodsFor: 'instance creation'!
+
+new
+	"Use current instead"
+
+	self shouldNotImplement
+! !
+
+HLWidget subclass: #HLSUnit
+	instanceVariableNames: ''
+	package: 'Helios-Core'!
+
+!HLSUnit class methodsFor: 'accessing'!
+
+tabLabel
+	^ 'SUnit'
+!
+
+tabPriority
+	^ 1000
+! !
+
+!HLSUnit class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ true
+! !
+
+HLWidget subclass: #HLTranscript
+	instanceVariableNames: ''
+	package: 'Helios-Core'!
+
+!HLTranscript class methodsFor: 'accessing'!
+
+tabLabel
+	^ 'Transcript'
+!
+
+tabPriority
+	^ 600
+! !
+
+!HLTranscript class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ true
+! !
+
+HLWidget subclass: #HLWorkspace
+	instanceVariableNames: ''
+	package: 'Helios-Core'!
+
+!HLWorkspace class methodsFor: 'accessing'!
+
+tabLabel
+	^ 'Workspace'
+!
+
+tabPriority
+	^ 10
+! !
+
+!HLWorkspace class methodsFor: 'testing'!
+
+canBeOpenAsTab
+	^ true
+! !
+

+ 266 - 0
st/Helios-KeyBindings.st

@@ -0,0 +1,266 @@
+Smalltalk current createPackage: 'Helios-KeyBindings' properties: #{}!
+Object subclass: #HLBinding
+	instanceVariableNames: 'key label'
+	package: 'Helios-KeyBindings'!
+
+!HLBinding methodsFor: 'accessing'!
+
+key
+	^ key
+!
+
+key: anInteger
+	key := anInteger
+!
+
+label
+	^ label
+!
+
+label: aString
+	label := aString
+!
+
+shortcut
+	^ String fromCharCode: self key
+! !
+
+!HLBinding methodsFor: 'testing'!
+
+isBindingAction
+	^ false
+!
+
+isBindingGroup
+	^ false
+! !
+
+!HLBinding class methodsFor: 'instance creation'!
+
+on: anInteger labelled: aString
+	^ self new
+    	key: anInteger;
+        label: aString;
+        yourself
+! !
+
+HLBinding subclass: #HLBindingAction
+	instanceVariableNames: 'callback'
+	package: 'Helios-KeyBindings'!
+
+!HLBindingAction methodsFor: 'accessing'!
+
+callback
+	^ callback
+!
+
+callback: aBlock
+	callback := aBlock
+! !
+
+!HLBindingAction methodsFor: 'testing'!
+
+isBindingAction
+	^ true
+! !
+
+HLBinding subclass: #HLBindingGroup
+	instanceVariableNames: 'bindings'
+	package: 'Helios-KeyBindings'!
+
+!HLBindingGroup methodsFor: 'accessing'!
+
+add: aBinding
+	^ self bindings add: aBinding
+!
+
+addActionKey: anInteger labelled: aString callback: aBlock
+	self add: ((HLBindingAction on: anInteger labelled: aString)
+    	callback: aBlock;
+        yourself)
+!
+
+addGroupKey: anInteger labelled: aString
+	self add: (HLBindingGroup on: anInteger labelled: aString)
+!
+
+at: aString
+	^ self bindings 
+    	detect: [ :each | each label = aString ]
+      	ifNone: [ nil ]
+!
+
+atkey: anInteger
+	^ self bindings 
+    	detect: [ :each | each key = anInteger ]
+      	ifNone: [ nil ]
+!
+
+bindings
+	^ bindings ifNil: [ bindings := OrderedCollection new ]
+! !
+
+!HLBindingGroup methodsFor: 'testing'!
+
+isBindingGroup
+	^ true
+! !
+
+Object subclass: #HLKeyBinder
+	instanceVariableNames: 'modifierKey active helper bindings selectedBinding'
+	package: 'Helios-KeyBindings'!
+
+!HLKeyBinder methodsFor: 'accessing'!
+
+bindings
+	^ bindings ifNil: [ bindings := HLBindingGroup new ]
+!
+
+helper
+	^ helper ifNil: [ helper := HLKeyBinderHelper on: self ]
+!
+
+modifierKey
+	^ modifierKey ifNil: [
+		modifierKey = (navigator platform match: 'Mac')
+			ifTrue: [ 91 ]
+			ifFalse: [ 17 ] ]
+!
+
+selectedBinding
+	^ selectedBinding ifNil: [ self bindings ]
+! !
+
+!HLKeyBinder methodsFor: 'actions'!
+
+activate
+	active := true.
+	self helper show
+!
+
+applyBinding: aBinding
+    aBinding isBindingGroup
+    	ifTrue: [
+			selectedBinding := aBinding.
+    		self helper refresh ]
+        ifFalse: [ 
+			aBinding callback value.
+			self deactivate ]
+!
+
+deactivate
+	active := false.
+    selectedBinding := nil.
+	self helper hide
+!
+
+flushBindings
+	bindings := nil.
+    helper := nil
+! !
+
+!HLKeyBinder methodsFor: 'events'!
+
+handleBindingFor: anEvent
+	| binding |
+    binding := self selectedBinding atKey: anEvent which.
+    
+    binding ifNotNil: [ 
+    	self applyBinding: binding.
+		anEvent preventDefault.
+		^ false ]
+!
+
+handleBindingKey: anInteger
+!
+
+handleKeyDown: event
+	self isActive
+    	ifTrue: [ 
+        	self handleBindingKey: event which ]
+      	ifFalse: [
+          	event which = self modifierKey ifTrue: [
+				self activate. 
+                event preventDefault. 
+                ^ false ] ]
+!
+
+handleKeyUp: event
+	event which = self modifierKey ifTrue: [
+      	self deactivate ]
+!
+
+setupEvents
+	(window jQuery: 'body') keydown: [ :event | self handleKeyDown: event ].
+    (window jQuery: 'body') keyup: [ :event | self handleKeyUp: event ]
+! !
+
+!HLKeyBinder methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+    active := false
+! !
+
+!HLKeyBinder methodsFor: 'testing'!
+
+isActive
+	^ active ifNil: [ false ]
+! !
+
+HLWidget subclass: #HLKeyBinderHelper
+	instanceVariableNames: 'keyBinder'
+	package: 'Helios-KeyBindings'!
+
+!HLKeyBinderHelper methodsFor: 'accessing'!
+
+keyBinder
+	^ keyBinder
+!
+
+keyBinder: aKeyBinder
+	keyBinder := aKeyBinder
+!
+
+selectedBinding
+	^ self keyBinder selectedBinding
+! !
+
+!HLKeyBinderHelper methodsFor: 'actions'!
+
+hide
+	(window jQuery: '.key_helper') remove
+!
+
+show
+	self appendToJQuery: 'body' asJQuery
+! !
+
+!HLKeyBinderHelper methodsFor: 'keyBindings'!
+
+registerBindings
+	"Do nothing"
+! !
+
+!HLKeyBinderHelper methodsFor: 'rendering'!
+
+renderBindingsOn: html
+	self selectedBinding bindings do: [ :each |
+		html span class: 'command'; with: [
+			html span class: 'label'; with: each shortcut asLowercase.
+  			html span class: 'action'; with: each label ] ]
+!
+
+renderContentOn: html
+	html div class: 'key_helper'; with: [
+      	self renderBindingsOn: html ]
+! !
+
+!HLKeyBinderHelper class methodsFor: 'instance creation'!
+
+on: aKeyBinder
+	^ self new
+    	keyBinder: aKeyBinder;
+        yourself
+! !
+

+ 30 - 22
st/Helios-Layout.st

@@ -31,18 +31,6 @@ with: 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'!
@@ -126,24 +114,34 @@ panesCssClass
 !HLHorizontalSplitter methodsFor: 'actions'!
 
 resize
+	self resize: splitter asJQuery offset top
+!
+
+resize: anInteger
 	| container position |
     
     container := firstPane asJQuery parent.
-    position := splitter asJQuery offset top - container offset top.
+    position := anInteger - 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
+!
+
+startResizing: aSplitter
+	aSplitter width: splitter asJQuery width
 ! !
 
 !HLHorizontalSplitter methodsFor: 'rendering'!
 
 setupSplitter
-	splitter asJQuery draggable: #{ 'axis' -> 'y'. 'stop' -> [ self resize ] }
+	splitter asJQuery draggable: #{ 
+    	'axis' -> 'y'. 
+        'containment' -> splitter asJQuery parent.
+        'helper' -> 'clone'.
+        'start' -> [ :e :ui | self startResizing: ui helper ].
+        'drag' -> [ :e :ui | self resize: ui offset top ] }
 ! !
 
 HLSplitter subclass: #HLVerticalSplitter
@@ -163,24 +161,34 @@ panesCssClass
 !HLVerticalSplitter methodsFor: 'actions'!
 
 resize
+	self resize: splitter asJQuery offset left
+!
+
+resize: anInteger
 	| container position |
     
     container := firstPane asJQuery parent.
-    position := splitter asJQuery offset left - container offset left.
+    position := anInteger - 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
+!
+
+startResizing: aSplitter
+	aSplitter height: splitter asJQuery height
 ! !
 
 !HLVerticalSplitter methodsFor: 'rendering'!
 
 setupSplitter
-	splitter asJQuery draggable: #{ 'axis' -> 'x'. 'stop' -> [ self resize ] }
+	splitter asJQuery draggable: #{ 
+    	'axis' -> 'x'. 
+        'containment' -> splitter asJQuery parent.
+        'helper' -> 'clone'.
+        'start' -> [ :e :ui | self startResizing: ui helper ].
+        'drag' -> [ :e :ui | self resize: ui offset left ] }
 ! !
 
 !Object methodsFor: '*Helios-Layout'!

+ 0 - 583
st/Helios-Widgets.st

@@ -1,583 +0,0 @@
-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
-	^ ''
-! !
-

+ 71 - 0
st/Kernel-Classes.st

@@ -29,6 +29,15 @@ allSubclasses
 	^result
 !
 
+allSuperclasses
+	
+    self superclass ifNil: [ ^ #() ].
+    
+	^ (OrderedCollection with: self superclass) 
+    	addAll: self superclass allSuperclasses;
+        yourself
+!
+
 comment
     ^(self basicAt: 'comment') ifNil: ['']
 !
@@ -47,6 +56,10 @@ commentStamp: aStamp prior: prior
         ^self commentStamp
 !
 
+definition
+	^ ''
+!
+
 instanceVariableNames
 	<return self.iVarNames>
 !
@@ -66,6 +79,10 @@ methodDictionary
 	return dict>
 !
 
+methods
+	^ self methodDictionary values
+!
+
 methodsFor: aString
 	^ClassCategoryReader new
 	    class: self category: aString;
@@ -77,6 +94,10 @@ methodsFor: aString stamp: aStamp
 	^self methodsFor: aString
 !
 
+methodsInProtocol: aString
+	^ self methodDictionary values select: [ :each | each protocol = aString ]
+!
+
 name
 	<return self.className || nil>
 !
@@ -107,6 +128,10 @@ prototype
 	<return self.fn.prototype>
 !
 
+selectors
+	^ self methodDictionary keys
+!
+
 subclasses
 	<return smalltalk.subclasses(self)>
 !
@@ -115,6 +140,14 @@ superclass
 	<return self.superclass || nil>
 !
 
+theMetaClass
+	^ self class
+!
+
+theNonMetaClass
+	^ self
+!
+
 withAllSubclasses
 	^(Array with: self) addAll: self allSubclasses; yourself
 ! !
@@ -177,6 +210,24 @@ category
 	^self package ifNil: ['Unclassified'] ifNotNil: [self package name]
 !
 
+definition
+	^ String streamContents: [ :stream |
+		stream 
+	    	nextPutAll: self superclass asString;
+	    	nextPutAll: ' subclass: #';
+	    	nextPutAll: self name;
+	    	nextPutAll: String lf, String tab;
+	    	nextPutAll: 'instanceVariableNames: '''.
+		self instanceVariableNames 
+          	do: [ :each | stream nextPutAll: each ] 
+	    	separatedBy: [ stream nextPutAll: ' ' ].
+		stream
+	    	nextPutAll: '''', String lf, String tab;
+	    	nextPutAll: 'package: ''';
+	    	nextPutAll: self category;
+	    	nextPutAll: '''' ]
+!
+
 package
 	<return self.pkg>
 !
@@ -245,6 +296,18 @@ Metaclass instances have a single instance, which they hold onto, which is the c
 
 !Metaclass methodsFor: 'accessing'!
 
+definition
+	^ String streamContents: [ :stream |
+		stream 
+	   	 	nextPutAll: self asString;
+	    	nextPutAll: ' class ';
+	    	nextPutAll: 'instanceVariableNames: '''.
+		self instanceVariableNames
+	    	do: [ :each | stream nextPutAll: each ]
+	    	separatedBy: [ stream nextPutAll: ' ' ].
+		stream nextPutAll: '''' ]
+!
+
 instanceClass
 	<return self.instanceClass>
 !
@@ -252,6 +315,14 @@ instanceClass
 instanceVariableNames: aCollection
 	ClassBuilder new
 	    class: self instanceVariableNames: aCollection
+!
+
+theMetaClass
+	^ self
+!
+
+theNonMetaClass
+	^ self instanceClass
 ! !
 
 !Metaclass methodsFor: 'converting'!

+ 23 - 3
st/Kernel-Collections.st

@@ -195,6 +195,22 @@ inject: anObject into: aBlock
 	^result
 !
 
+intersection: aCollection
+	"Answer the set theoretic intersection of two collections."
+
+	| set outputSet |
+	
+	set := self asSet.
+	outputSet := Set new.
+	
+	aCollection do: [ :each |
+		((set includes: each) and: [(outputSet includes: each) not])
+			ifTrue: [ 
+				outputSet add: each]].
+		
+	^ self class withAll: outputSet asArray
+!
+
 reject: aBlock
 	^self select: [:each | (aBlock value: each) = false]
 !
@@ -654,9 +670,9 @@ indexOf: anObject
 
 indexOf: anObject ifAbsent: aBlock
 	<
-		for(var i=0;i<self.length;i++){
-			if(self[i].__eq(anObject)) {return i+1}
-		}
+		for(var i=0;i<self.length;i++) {
+			if(smalltalk.send(self[i], '__eq', [anObject])) {return i+1}
+		};
 		return aBlock();
 	>
 !
@@ -1240,6 +1256,10 @@ tab
 
 !String class methodsFor: 'instance creation'!
 
+fromCharCode: anInteger
+	<return String.fromCharCode(anInteger)>
+!
+
 fromString: aString
 	    <return new self.fn(aString)>
 !

+ 4 - 0
st/Kernel-Methods.st

@@ -181,6 +181,10 @@ methodClass
 	^self basicAt: 'methodClass'
 !
 
+protocol
+	^ self category
+!
+
 referencedClasses
 	^self basicAt: 'referencedClasses'
 !

+ 5 - 1
st/Kernel-Tests.st

@@ -1092,7 +1092,11 @@ testInstVars
 testNilUndefined
 	"nil in Smalltalk is the undefined object in JS"
 
-	self assert: nil = undefined
+	| notDefined |
+    
+    <notDefined = undefined>.
+
+	self assert: nil = notDefined
 !
 
 testYourself

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