Mostly working layout

This commit is contained in:
Nicolas Petton 2012-10-03 18:16:36 +02:00
parent de90b3db98
commit 559405e4bb
17 changed files with 4643 additions and 942 deletions

View File

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

View File

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

BIN
images/hsplitter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 B

BIN
images/vsplitter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

View File

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

View File

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

354
js/Helios-Layout.deploy.js Normal file
View File

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

474
js/Helios-Layout.js Normal file
View File

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

1188
js/Helios-Widgets.deploy.js Normal file

File diff suppressed because it is too large Load Diff

1613
js/Helios-Widgets.js Normal file

File diff suppressed because it is too large Load Diff

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

191
st/Helios-Layout.st Normal file
View File

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

583
st/Helios-Widgets.st Normal file
View File

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

View File

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