diff --git a/docs/upgrades/upgrade_6.5.5-6.6.0.sql b/docs/upgrades/upgrade_6.5.5-6.6.0.sql new file mode 100644 index 000000000..60e1b1096 --- /dev/null +++ b/docs/upgrades/upgrade_6.5.5-6.6.0.sql @@ -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\r\n' where assetId='PBtmpl0000000000000090'; + diff --git a/lib/WebGUI/AdminConsole.pm b/lib/WebGUI/AdminConsole.pm index ab2fdc413..bec31f7e1 100644 --- a/lib/WebGUI/AdminConsole.pm +++ b/lib/WebGUI/AdminConsole.pm @@ -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}) }; diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index 41b75fbda..26e9f0bb4 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -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; diff --git a/lib/WebGUI/Asset/File.pm b/lib/WebGUI/Asset/File.pm index 40636ad90..371cb4823 100644 --- a/lib/WebGUI/Asset/File.pm +++ b/lib/WebGUI/Asset/File.pm @@ -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'; diff --git a/lib/WebGUI/Macro/AdminBar.pm b/lib/WebGUI/Macro/AdminBar.pm index 92af6561a..62ddaaefd 100644 --- a/lib/WebGUI/Macro/AdminBar.pm +++ b/lib/WebGUI/Macro/AdminBar.pm @@ -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), ); diff --git a/www/extras/assetManager/Asset.js b/www/extras/assetManager/Asset.js index 1a1c326dd..ecc518384 100644 --- a/www/extras/assetManager/Asset.js +++ b/www/extras/assetManager/Asset.js @@ -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) diff --git a/www/extras/slidePanel/arrowdown.gif b/www/extras/slidePanel/arrowdown.gif new file mode 100644 index 000000000..904f99864 Binary files /dev/null and b/www/extras/slidePanel/arrowdown.gif differ diff --git a/www/extras/slidePanel/arrowup.gif b/www/extras/slidePanel/arrowup.gif new file mode 100644 index 000000000..5598a7b16 Binary files /dev/null and b/www/extras/slidePanel/arrowup.gif differ diff --git a/www/extras/slidePanel/slidePanel.css b/www/extras/slidePanel/slidePanel.css new file mode 100644 index 000000000..52f832940 --- /dev/null +++ b/www/extras/slidePanel/slidePanel.css @@ -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; +} + diff --git a/www/extras/slidePanel/slidePanel.html b/www/extras/slidePanel/slidePanel.html new file mode 100644 index 000000000..eb5c2e9a2 --- /dev/null +++ b/www/extras/slidePanel/slidePanel.html @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/www/extras/slidePanel/slidePanel.js b/www/extras/slidePanel/slidePanel.js new file mode 100644 index 000000000..322695aea --- /dev/null +++ b/www/extras/slidePanel/slidePanel.js @@ -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)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('
'); + document.write('
»
»
»
»
»
'); + //slide panel . + document.write('
'); + h=this.height-((this.panels.length-1)*panelButtonHeight) + + //one layer for every panel... + for (i=0;i'); + t=t+panelButtonHeight; + + //one layer to host the panel links + document.write('
'); + mtop=0 + + for (j=0;j'); + document.write('icon'); + document.write(' '+this.panels[i].lbl[j]); + document.write('
'); + mtop=mtop+this.buttonspace; + } + + document.write('
'); + + document.write('') + + // scroll-up + document.write(''); + + // scroll-down + document.write(''); + + document.write('
') + + } + document.write(''); + + for (i=0;i') + 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;inr) { + 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="»
»
»
»
»
"; +} + +function pullengine(){ + if (parseInt(themenu.left)leftboundary) + themenu.left=parseInt(themenu.left)-10+"px"; + else if (window.drawit){ + themenu.left=leftboundary; + clearInterval(drawit); + } +} +