new admin bar

This commit is contained in:
JT Smith 2005-03-30 03:23:34 +00:00
parent 4e4afa83cf
commit 124b62f960
11 changed files with 441 additions and 19 deletions

View file

@ -0,0 +1,3 @@
insert into webguiVersion values ('6.5.5','upgrade',unix_timestamp());
update template set template='^StyleSheet(^Extras;/slidePanel/slidePanel.css);\r\n^JavaScript(^Extras;/slidePanel/slidePanel.js);\r\n\r\n<script type=\"text/javascript\">\r\n\r\n var slider = new createSlidePanelBar(\'WebGUIAdminBar\');\r\n var panel;\r\n\r\n panel = new createPanel(\'adminconsole\',\'Admin Console\');\r\n<tmpl_loop adminConsole_loop>\r\n <tmpl_if canUse>\r\n panel.addLink(\'<tmpl_var icon.small>\',\'<tmpl_var title>\',\"<tmpl_var url>\");\r\n </tmpl_if>\r\n</tmpl_loop>\r\n slider.addPanel(panel);\r\n\r\n panel = new createPanel(\'clipboard\',\'Clipboard\');\r\n<tmpl_loop clipboard_loop>\r\n panel.addLink(\'<tmpl_var icon.small>\',\'<tmpl_var label>\',\"<tmpl_var url>\");\r\n</tmpl_loop>\r\n slider.addPanel(panel);\r\n\r\n panel = new createPanel(\'packages\',\'Packages\');\r\n<tmpl_loop package_loop>\r\n panel.addLink(\'<tmpl_var icon.small>\',\'<tmpl_var label>\',\"<tmpl_var url>\");\r\n</tmpl_loop>\r\n slider.addPanel(panel);\r\n\r\n\r\n panel = new createPanel(\'assets\',\'New Content\');\r\n <tmpl_loop container_loop>\r\n panel.addLink(\'<tmpl_var icon.small>\',\'<tmpl_var label>\',\"<tmpl_var url>\");\r\n</tmpl_loop>\r\n <tmpl_loop contentTypes_loop>\r\n panel.addLink(\'<tmpl_var icon.small>\',\'<tmpl_var label>\',\"<tmpl_var url>\");\r\n</tmpl_loop>\r\n slider.addPanel(panel);\r\n slider.draw();\r\n\r\n\r\n</script>\r\n' where assetId='PBtmpl0000000000000090';

View file

@ -77,6 +77,7 @@ sub _formatFunction {
return {
title=>WebGUI::International::get($function->{title}{id}, $function->{title}{namespace}),
icon=>$session{config}{extrasURL}."/adminConsole/".$function->{icon},
'icon.small'=>$session{config}{extrasURL}."/adminConsole/small/".$function->{icon},
url=>$url,
canUse=>WebGUI::Grouping::isInGroup($function->{group})
};

View file

@ -706,7 +706,9 @@ sub getAssetAdderLinks {
} else {
my $url = $self->getUrl("func=add&class=".$class);
$url = WebGUI::URL::append($url,$addToUrl) if ($addToUrl);
$links{$label} = $url;
$links{$label}{url} = $url;
$links{$label}{icon} = $class->getIcon;
$links{$label}{'icon.small'} = $class->getIcon(1);
}
}
}
@ -721,13 +723,17 @@ sub getAssetAdderLinks {
my $asset = WebGUI::Asset->newByDynamicClass($id,$class);
my $url = $self->getUrl("func=add&class=".$class."&prototype=".$id);
$url = WebGUI::URL::append($url,$addToUrl) if ($addToUrl);
$links{$asset->get("title")} = $url;
$links{$asset->get("title")}{url} = $url;
$links{$asset->get("title")}{icon} = $asset->getIcon;
$links{$asset->get("title")}{'icon.small'} = $asset->getIcon(1);
}
my @sortedLinks;
foreach my $label (sort keys %links) {
push(@sortedLinks,{
label=>$label,
url=>$links{$label}
url=>$links{$label}{url},
icon=>$links{$label}{icon},
'icon.small'=>$links{$label}{'icon.small'}
});
}
return \@sortedLinks;

View file

@ -156,7 +156,9 @@ sub getFileIconUrl {
sub getIcon {
my $self = shift;
my $small = shift;
if ($small) {
if ($small && ref($self) eq '') {
return $session{config}{extrasURL}.'/assets/small/file.gif';
} elsif ($small) {
return $self->getFileIconUrl;
}
return $session{config}{extrasURL}.'/assets/file.gif';

View file

@ -37,33 +37,36 @@ sub process {
$var{'packages.canAdd'} = ($session{user}{uiLevel} >= 7);
$var{'packages.label'} = WebGUI::International::get(376);
$var{'contentTypes.label'} = WebGUI::International::get(1083);
$var{'addcontent.label'} = WebGUI::International::get(1);
$var{'clipboard.label'} = WebGUI::International::get(1082);
if (exists $session{asset}) {
foreach my $package (@{$session{asset}->getPackageList}) {
my $title = $package->{title};
$title =~ s/'//g; # stops it from breaking the javascript menus
my $asset = WebGUI::Asset->newByDynamicClass($package->{assetId},$package->{className});
push(@{$var{'package_loop'}},{
'package.url'=>$session{asset}->getUrl("func=deployPackage&assetId=".$package->{assetId}),
'package.label'=>$title
'url'=>$session{asset}->getUrl("func=deployPackage&assetId=".$package->{assetId}),
'label'=>$title,
'icon.small'=>$asset->getIcon(1),
'icon'=>$asset->getIcon()
});
}
foreach my $link (@{$session{asset}->getAssetAdderLinks}) {
push(@{$var{'contenttypes_loop'}},{'contenttype.url'=>$link->{url},'contenttype.label'=>$link->{label}});
}
foreach my $link (@{$session{asset}->getAssetAdderLinks(undef,1)}) {
push(@{$var{'container_loop'}},{'container.url'=>$link->{url},'container.label'=>$link->{label}});
}
$var{contentTypes_loop} = $session{asset}->getAssetAdderLinks;
$var{container_loop} = $session{asset}->getAssetAdderLinks(undef,1);
foreach my $item (@{$session{asset}->getAssetsInClipboard(1)}) {
my $title = $item->{title};
$title =~ s/'//g; # stops it from breaking the javascript menus
my $asset = WebGUI::Asset->newByDynamicClass($item->{assetId},$item->{className});
push(@{$var{clipboard_loop}}, {
'clipboard.label'=>$title,
'clipboard.url'=>$session{asset}->getUrl("func=paste&assetId=".$item->{assetId})
'label'=>$title,
'url'=>$session{asset}->getUrl("func=paste&assetId=".$item->{assetId}),
'icon.small'=>$asset->getIcon(1),
'icon'=>$asset->getIcon()
});
}
}
}
#--admin functions
$var{adminConsole_loop} = WebGUI::AdminConsole->getAdminFunction;
return WebGUI::Asset::Template->new($templateId)->process(\%var);
%hash = (
'http://validator.w3.org/check?uri=referer'=>WebGUI::International::get(399),
);

View file

@ -58,10 +58,13 @@ function Asset() {
//---------Method Implementations -------------
this.registerEvents = function() {
this.div.ondblclick=Asset_doubleClick;
this.div.onmousedown=Asset_mouseDown;
this.div.oncontextmenu=Asset_rightClick;
//if there is a div associated with the asset, register event handlers
if (this.div) {
this.div.ondblclick=Asset_doubleClick;
this.div.onmousedown=Asset_mouseDown;
this.div.oncontextmenu=Asset_rightClick;
}
}
//Moving to a new parent (move)

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 B

View file

@ -0,0 +1,77 @@
#slidePanelBar {
position:absolute;
font:bold 12px Verdana;
line-height:20px;
}
#slidePanelBarHandle {
z-index: 100000;
position: absolute;
top: 0px;
right: 3px;
line-height: 100px;
}
.panelButton {
width:300;
text-align:center;
font-family:arial;
font-size:11px;
cursor:hand;
border-width:2;
border-style:outset;
border-color: #dddddd;
background-color:#dddddd;
position:absolute;
left:0;
top: 0;
}
.panelButton A {
text-decoration: none;
color: black;
}
.scrollPanelUp {
position:absolute;
top:40;
z-index: 100;
}
.scrollPanelDown {
position: absolute;
z-index: 100;
}
.slidePanel {
position:absolute;
background-color: #eeeeee;
}
.panel, .panelLinkHolder {
position:absolute;
left:0;
background-color: #eeeeee;
}
.panelLinkOut {
position:absolute;
overflow: hidden;
height: 20px;
cursor: hand;
left:0;
border: 1px solid #eeeeee;
font-size: 11px;
font-family: helvetica, arial, sans;
}
.panelLinkIn {
position:absolute;
height: 20px;
overflow: hidden;
cursor: hand;
left:0;
border: 1px solid orange;
font-size: 11px;
font-family: helvetica, arial, sans;
}

View file

@ -0,0 +1,36 @@
<html>
<head>
</head>
<body>
<script type="text/javascript">
var slider = new createSlidePanelBar('WebGUIAdminBar');
var panel;
panel = new createPanel('adminconsole','Admin Console');
panel.addLink('/extras/adminConsole/users.gif','Users',"/index.pl/home?op=add");
slider.addPanel(panel);
panel = new createPanel('clipboard','Clipboard');
slider.addPanel(panel);
panel = new createPanel('packages','Packages');
slider.addPanel(panel);
panel = new createPanel('prototypes','Prototypes');
slider.addPanel(panel);
panel = new createPanel('assets','New Content');
panel.addLink('/extras/assets/small/article.gif','Article',"/index.pl/home?op=add");
panel.addLink('/extras/assets/small/article.gif','Collaboration System',"/index.pl/home?op=add");
panel.addLink('/extras/assets/small/article.gif','Rediculously long tile for an asset',"/index.pl/home?op=add");
panel.addLink('/extras/assets/small/article.gif','Article',"/index.pl/home?op=add");
slider.addPanel(panel);
slider.draw();
</script>
</body>
</html>

View file

@ -0,0 +1,291 @@
var panelButtonHeight = 23;
var panelLinkTop = 25;
//create a crossbrowser layer object
function createLayerObject(name) {
this.name=name;
this.obj=document.getElementById(name);
this.cssobj.style;
this.x=parseInt(this.css.left);
this.y=parseInt(this.css.top);
this.show=b_show;
this.hide=b_hide;
this.moveTo=b_moveTo;
this.moveBy=b_moveBy;
this.writeText=b_writeText;
return this;
}
//crossbrowser show
function b_show(){
this.css.visibility='visible';
}
//crossbrowser hide
function b_hide(){
this.css.visibility='hidden';
}
//crossbrowser move absolute
function b_moveTo(x,y){
this.x = x;
this.y = y;
this.css.left=x;
this.css.top=y;
}
//crossbrowser move relative
function b_moveBy(x,y){
this.moveTo(this.x+x, this.y+y)
}
//write text into a layer
function b_writeText(text) {
this.obj.innerHTML=text;
}
//add one button to a panel
function b_addLink(img, label, action) {
this.img[this.img.length]=img;
this.lbl[this.lbl.length]=label;
this.act[this.act.length]=action;
this.sta[this.sta.length]=0;
return this
}
//test if scroll buttons should be visible
function b_testScroll() {
var i=parseInt(this.obj.style.height);
var j=parseInt(this.objf.style.height);
var k=parseInt(this.objf.style.top);
if (k==panelLinkTop)
this.objm1.style.visibility='hidden';
else
this.objm1.style.visibility='visible';
if ((j+k)<i)
this.objm2.style.visibility='hidden';
else
this.objm2.style.visibility='visible';
}
//scroll the panel content up
function b_up(nr) {
this.ftop = this.ftop - 5;
this.objf.style.top=this.ftop;
nr--
if (nr>0)
setTimeout(this.v+'.up('+nr+');',10);
else
this.testScroll();
}
//scroll the panel content down
function b_down(nr) {
this.ftop = this.ftop + 5;
if (this.ftop>=panelLinkTop) {
this.ftop=panelLinkTop;
nr=0;
}
this.objf.style.top=this.ftop;
nr--
if (nr>0)
setTimeout(this.v+'.down('+nr+');',10);
else
this.testScroll();
}
//create one panel
function createPanel(name,caption) {
this.name=name; // panel layer ID
this.ftop=panelLinkTop; // actual panel scroll position
this.obj=null; // panel layer object
this.objc=null; // caption layer object
this.objf=null; // panel field layer object
this.objm1=null; // scroll button up
this.objm2=null; // scroll button down
this.caption=caption; // panel caption
this.img=new Array(); // button images
this.lbl=new Array(); // button labels
this.act=new Array(); // button actions
this.sta=new Array(); // button status (internal)
this.addLink=b_addLink; // add one button to panel
this.testScroll=b_testScroll; // test if scroll buttons should be visible
this.up=b_up; // scroll panel buttons up
this.down=b_down; // scroll panel buttons down
this.v = this.name + "var"; // global var of 'this'
eval(this.v + "=this");
return this
}
//add one panel to the slider
function b_addPanel(panel) {
panel.name=this.name+'_panel'+this.panels.length
this.panels[this.panels.length] = panel;
}
// Draw the slider
function b_draw() {
var i;
var j;
var t=0;
var h;
var c=3;
//slide panel bar
var slidemenu_width='160px' //specify width of menu (in pixels)
var slidemenu_reveal='15px' //specify amount that menu should protrude initially
var slidemenu_top='0px' //specify vertical offset of menu on page
document.write('<div id="slidePanelBar" style="left:'+((parseInt(slidemenu_width)-parseInt(slidemenu_reveal))*-1)+'px; top:'+slidemenu_top+'; width:'+slidemenu_width+'" onmouseover="pullSlidePanelBar()" onmouseout="pushSlidePanelBar()">');
document.write('<div id="slidePanelBarHandle">&raquo;<br />&raquo;<br />&raquo;<br />&raquo;<br />&raquo;<br /></div>');
//slide panel .
document.write('<div class="slidePanel" id='+this.name+' style="left:');
document.write(this.xpos+'; top:'+this.ypos+'; width:'+this.width);
document.write('; height:'+this.height+'; ')
document.write('; clip:rect(0,'+this.width+','+this.height+',0)">');
h=this.height-((this.panels.length-1)*panelButtonHeight)
//one layer for every panel...
for (i=0;i<this.panels.length;i++) {
document.write('<div class="panel" id='+this.name+'_panel'+i);
document.write(' style="top:'+t);
document.write('; width:'+this.width+'; height:'+h+'; clip:rect(0px, ');
document.write(this.width+'px, '+h+'px, 0px);">');
t=t+panelButtonHeight;
//one layer to host the panel links
document.write('<div class="panelLinkHolder" id='+this.name+'_panel'+i);
document.write('_f style="top:'+panelLinkTop+'; width:');
document.write(this.width+'; height:');
document.write((this.panels[i].img.length*this.buttonspace)+';">');
mtop=0
for (j=0;j<this.panels[i].img.length;j++) {
document.write('<div id="'+this.name+'_panel'+i+'_b'+j+'" class="panelLinkOut" style="top:'+mtop+';width:'+this.width+';" onmouseover="this.className=\'panelLinkIn\';" onmouseup="document.location=\''+this.panels[i].act[j]+'\';" onmouseout="this.className=\'panelLinkOut\';">');
document.write('<img src="'+this.panels[i].img[j]+'" align="middle" border="0" alt="icon" />');
document.write(' '+this.panels[i].lbl[j]);
document.write('</div>');
mtop=mtop+this.buttonspace;
}
document.write('</div>');
document.write('<div id='+this.name+'_panel'+i+'_c class="panelButton" ');
document.write('onClick="javascript:'+this.v+'.showPanel('+i);
document.write(');" style="width:');
document.write((this.width-c)+'; height:'+(panelButtonHeight-c)+';"><a href="#" ');
document.write('onClick="'+this.v+'.showPanel('+i+');this.blur();');
document.write('return false;">');
document.write(this.panels[i].caption);
document.write('</a></div>')
// scroll-up
document.write('<div id='+this.name+'_panel'+i);
document.write('_m1 class="scrollPanelUp" style="left:');
document.write((this.width-20)+';"><a href="#" onclick="');
document.write(this.panels[i].v+'.down(16);this.blur();return false;" >');
document.write('<img src="'+getWebguiProperty("extrasURL")+'/slidePanel/arrowup.gif" border="0" alt="scroll up" />');
document.write('</a></div>');
// scroll-down
document.write('<div class="scrollPanelDown" id='+this.name+'_panel'+i);
document.write('_m2 style="top:');
document.write((this.height-(this.panels.length)*panelButtonHeight)+'; left:');
document.write((this.width-20)+';"><a href="#" onclick="');
document.write(this.panels[i].v+'.up(16);this.blur();return false">');
document.write('<img src="'+getWebguiProperty("extrasURL")+'/slidePanel/arrowdown.gif" border="0" alt="scroll down" />');
document.write('</a></div>');
document.write('</div>')
}
document.write('</div>');
for (i=0;i<this.panels.length;i++) {
this.panels[i].obj=document.getElementById(this.name+'_panel'+i);
this.panels[i].objc=document.getElementById(this.name+'_panel'+i+'_c');
this.panels[i].objf=document.getElementById(this.name+'_panel'+i+'_f');
this.panels[i].objm1=document.getElementById(this.name+'_panel'+i+'_m1');
this.panels[i].objm2=document.getElementById(this.name+'_panel'+i+'_m2');
this.panels[i].testScroll();
}
rightboundary=0
leftboundary=(parseInt(slidemenu_width)-parseInt(slidemenu_reveal))*-1
document.write('</div>')
themenu=document.getElementById("slidePanelBar").style;
//activate last panel
//actual panel is saved in a cookie
if (document.cookie)
this.showPanel(document.cookie);
else
this.showPanel(0);
}
function b_showPanel(nr) {
var i
var l
var o
document.cookie=nr;
this.aktPanel=nr;
l = this.panels.length;
for (i=0;i<l;i++) {
if (i>nr) {
this.panels[i].obj.style.top=this.height-((l-i)*panelButtonHeight);
} else {
this.panels[i].obj.style.top=i*panelButtonHeight;
}
}
}
function createSlidePanelBar(name) {
this.aktPanel=0; // last open panel
this.name=name // name
this.xpos=0; // bar x-pos
this.ypos=0; // bar y-pos
this.width=160; // bar width
this.height=((navigator.appVersion.indexOf("MSIE ") == -1)?innerHeight:document.body.offsetHeight)-10; // bar height
this.buttonspace=25 // distance of panel buttons
this.panels=new Array() // panels
this.addPanel=b_addPanel; // add new panel to bar
this.draw=b_draw; // write HTML code of bar
this.showPanel=b_showPanel; // make a panel visible
this.v = name + "var"; // global var of 'this'
eval(this.v + "=this");
return this
}
function pullSlidePanelBar(){
if (window.drawit)
clearInterval(drawit);
pullit=setInterval("pullengine()",10);
document.getElementById("slidePanelBarHandle").innerHTML="";
}
function pushSlidePanelBar(){
clearInterval(pullit);
drawit=setInterval("drawengine()",10);
document.getElementById("slidePanelBarHandle").innerHTML="&raquo;<br />&raquo;<br />&raquo;<br />&raquo;<br />&raquo;<br />";
}
function pullengine(){
if (parseInt(themenu.left)<rightboundary)
themenu.left=parseInt(themenu.left)+10+"px";
else if (window.pullit){
themenu.left=0;
clearInterval(pullit);
}
}
function drawengine(){
if (parseInt(themenu.left)>leftboundary)
themenu.left=parseInt(themenu.left)-10+"px";
else if (window.drawit){
themenu.left=leftboundary;
clearInterval(drawit);
}
}