diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index 566025bd7..68609da3f 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -21,6 +21,9 @@
- fixed: Cash available as a payment option to everyone
- fixed: Web::Form::Asset can now accept assets with '|" in their names.
- fixed: Shop: remove an item and Apache segfaults
+ - Converted asset context menus to YUI menus
+ - fixed: asset context menu is positioned incorrectly on RTL pages
+ - fixed: asset context menu broken if the only asset is a navigation included by AssetProxy
7.5.17
- fixed: Payment Methods Hover Help Incomplete
diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm
index 3601f1cdb..3c1e413e5 100644
--- a/lib/WebGUI/Asset.pm
+++ b/lib/WebGUI/Asset.pm
@@ -1271,76 +1271,107 @@ Returns a toolbar with a set of icons that hyperlink to functions that delete, e
=cut
sub getToolbar {
- my $self = shift;
- return undef unless $self->canEdit;
- return $self->{_toolbar} if (exists $self->{_toolbar});
- my $userUiLevel = $self->session->user->profileField("uiLevel");
- my $uiLevels = $self->session->config->get("assetToolbarUiLevel");
- my $i18n = WebGUI::International->new($self->session, "Asset");
- my $toolbar = "";
- my $commit;
- if ($self->canEditIfLocked) {
- $toolbar .= $self->session->icon->delete('func=delete',$self->get("url"),$i18n->get(43)) if ($userUiLevel >= $uiLevels->{"delete"});
- $toolbar .= $self->session->icon->edit('func=edit',$self->get("url")) if ($userUiLevel >= $uiLevels->{"edit"});
- } else {
- $toolbar .= $self->session->icon->locked('func=manageRevisions',$self->get("url")) if ($userUiLevel >= $uiLevels->{"revisions"});
- }
- $toolbar .= $self->session->icon->cut('func=cut',$self->get("url")) if ($userUiLevel >= $uiLevels->{"cut"});
+ my $self = shift;
+ return undef unless $self->canEdit;
+ return $self->{_toolbar}
+ if (exists $self->{_toolbar});
+ my $userUiLevel = $self->session->user->profileField("uiLevel");
+ my $uiLevels = $self->session->config->get("assetToolbarUiLevel");
+ my $i18n = WebGUI::International->new($self->session, "Asset");
+ my $toolbar = "";
+ my $commit;
+ if ($self->canEditIfLocked) {
+ $toolbar .= $self->session->icon->delete('func=delete',$self->get("url"),$i18n->get(43))
+ if ($userUiLevel >= $uiLevels->{"delete"});
+ $toolbar .= $self->session->icon->edit('func=edit',$self->get("url"))
+ if ($userUiLevel >= $uiLevels->{"edit"});
+ }
+ else {
+ $toolbar .= $self->session->icon->locked('func=manageRevisions',$self->get("url"))
+ if ($userUiLevel >= $uiLevels->{"revisions"});
+ }
+ $toolbar .= $self->session->icon->cut('func=cut',$self->get("url"))
+ if ($userUiLevel >= $uiLevels->{"cut"});
+ if ($userUiLevel >= $uiLevels->{"copy"}) {
+ $toolbar .= $self->session->icon->copy('func=copy',$self->get("url"));
# if this asset has children, create a more full-featured menu for copying
if ($self->getChildCount) {
- my $copy = '';
- $toolbar .= $copy;
+ $toolbar
+ .= '
';
}
- else {
- $toolbar .= $self->session->icon->copy('func=copy',$self->get("url")) if ($userUiLevel >= $uiLevels->{"copy"});
- }
-
- $toolbar .= $self->session->icon->shortcut('func=createShortcut',$self->get("url")) if ($userUiLevel >= $uiLevels->{"shortcut"} && !($self->get("className") =~ /Shortcut/));
- $self->session->style->setLink($self->session->url->extras('contextMenu/contextMenu.css'), {rel=>"stylesheet",type=>"text/css"});
- $self->session->style->setScript($self->session->url->extras('contextMenu/contextMenu.js'), {type=>"text/javascript"});
- my $output = ''.$toolbar;
- return $output;
+ }
+ $toolbar .= $self->session->icon->shortcut('func=createShortcut',$self->get("url"))
+ if ($userUiLevel >= $uiLevels->{"shortcut"} && !$self->isa('WebGUI::Asset::Shortcut'));
+
+ $self->session->style->setLink($self->session->url->extras('contextMenu/contextMenu.css'), {rel=>"stylesheet",type=>"text/css"});
+ $self->session->style->setLink($self->session->url->extras('yui/build/menu/assets/skins/sam/menu.css'), {rel=>"stylesheet",type=>"text/css"});
+ $self->session->style->setScript($self->session->url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js'), {type=>"text/javascript"});
+ $self->session->style->setScript($self->session->url->extras('yui/build/container/container_core-min.js'), {type=>"text/javascript"});
+ $self->session->style->setScript($self->session->url->extras('yui/build/menu/menu-min.js'), {type=>"text/javascript"});
+ $self->session->style->setScript($self->session->url->extras('contextMenu/contextMenu.js'), {type=>"text/javascript"});
+ my $output
+ = ''
+ . '
 . ')
'
+ . '' . $toolbar . '
';
+ return $output;
}
#-------------------------------------------------------------------
diff --git a/lib/WebGUI/Asset/Wobject/Navigation.pm b/lib/WebGUI/Asset/Wobject/Navigation.pm
index c14e6fa50..2e3544ae1 100644
--- a/lib/WebGUI/Asset/Wobject/Navigation.pm
+++ b/lib/WebGUI/Asset/Wobject/Navigation.pm
@@ -300,24 +300,38 @@ sub getToolbar {
return
unless $self->canEdit;
if ($self->getToolbarState) {
- my $returnUrl;
- if ($self->session->asset) {
- $returnUrl = ";proceed=goBackToPage;returnUrl=".$self->session->url->escape($self->session->asset->getUrl);
- }
- my $toolbar;
- if (!$self->isLocked || $self->get("isLockedBy") eq $self->session->user->userId) {
- $toolbar = $self->session->icon->edit('func=edit'.$returnUrl,$self->get("url"));
- }
- my $i18n = WebGUI::International->new($self->session, "Asset");
- return ''.$toolbar;
- }
- return $self->SUPER::getToolbar();
+ my $toolbar = '';
+ if ($self->canEditIfLocked) {
+ my $userUiLevel = $self->session->user->profileField("uiLevel");
+ my $uiLevels = $self->session->config->get("assetToolbarUiLevel");
+ my $returnUrl = '';
+ if ($self->session->asset) {
+ $returnUrl = ";proceed=goBackToPage;returnUrl=".$self->session->url->escape($self->session->asset->getUrl);
+ }
+ $toolbar = $self->session->icon->edit('func=edit'.$returnUrl,$self->get("url"))
+ if ($userUiLevel >= $uiLevels->{"edit"});
+ }
+ $self->session->style->setLink($self->session->url->extras('contextMenu/contextMenu.css'), {rel=>"stylesheet",type=>"text/css"});
+ $self->session->style->setLink($self->session->url->extras('yui/build/menu/assets/skins/sam/menu.css'), {rel=>"stylesheet",type=>"text/css"});
+ $self->session->style->setScript($self->session->url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js'), {type=>"text/javascript"});
+ $self->session->style->setScript($self->session->url->extras('yui/build/container/container_core-min.js'), {type=>"text/javascript"});
+ $self->session->style->setScript($self->session->url->extras('yui/build/menu/menu-min.js'), {type=>"text/javascript"});
+ $self->session->style->setScript($self->session->url->extras('contextMenu/contextMenu.js'), {type=>"text/javascript"});
+ my $i18n = WebGUI::International->new($self->session, "Asset");
+ return ''
+ . '
 . ')
'
+ . '$toolbar
";
+ }
+ return $self->SUPER::getToolbar;
}
diff --git a/www/extras/contextMenu/contextMenu.css b/www/extras/contextMenu/contextMenu.css
index efcc47c06..43ad6b08d 100644
--- a/www/extras/contextMenu/contextMenu.css
+++ b/www/extras/contextMenu/contextMenu.css
@@ -1,37 +1,9 @@
-.contextMenu_skin {
- position:absolute;
- border:2px outset #eeeeee;
- font-family: helvetica, arial, sans-serif;
- line-height:18px;
- width: 100px;
- cursor: default;
- font-size:10px;
- z-index:100;
- visibility:hidden;
- padding: 4px;
- font-weight: normal;
- text-align: left;
- background-color:#F0F0F0;
- border-bottom: 3px groove #999999;
- border-top: 0px groove #999999;
- border-right: 3px groove #999999;
- border-left: 0px groove #999999;
-}
-.contextMenu_skin A, .contextMenu_skin A:link, .contextMenu_skin A:visited {
- font-weight: normal;
- width: 100%;
- color: black;
- text-decoration: none;
- margin: 1px;
- font-size: 10px;
-}
-.contextMenu_skin A:hover {
- text-decoration: none;
- font-weight: normal;
- color: #154c66;
- margin: 0px;
- background-color: #c3cfd4;
- border: 1px solid #F0F0F0;
- width: 100%;
+.wg-contextmenu {
+ position: absolute;
+ visibility: hidden;
+ font-family: helvetica, arial, sans-serif;
}
+.wg-contextmenu .yuimenuitemlabel {
+ font-size: 10px
+}
diff --git a/www/extras/contextMenu/contextMenu.js b/www/extras/contextMenu/contextMenu.js
index bcab2a8b6..821eb9c58 100755
--- a/www/extras/contextMenu/contextMenu.js
+++ b/www/extras/contextMenu/contextMenu.js
@@ -1,107 +1,21 @@
-var ie5=document.all&&document.getElementById
-var contextMenu_items = new Array();
-
-if (contextMenu_old == undefined)
-{
- var contextMenu_old = (document.onclick) ? document.onclick : function () {};
- document.onclick= function () {contextMenu_old();contextMenu_hide();};
-}
-
-function contextMenu_renderLeftClick(menuId,e) {
- contextMenu_hide(e);
- contextMenu_show(menuId,e);
- e.cancelBubble=true;
- e.returnValue=false;
- return false;
-}
-
-
-function contextMenu_show(menuId,e){
- var menuobj=document.getElementById(menuId)
- var posx = 0;
- var posy = 0;
- var yoffset = 0;
- var xoffset = 0;
-var firedobj = ie5?e.srcElement:e.target;
- while (firedobj!=null && firedobj.tagName!="HTML"){
- //this is a hack, need to revisit
- if (firedobj.tagName == "DIV") {
- xoffset+=firedobj.offsetLeft;
- yoffset+=firedobj.offsetTop;}
- firedobj=firedobj.offsetParent;
- }
- var el = (document.documentElement && document.documentElement.scrollTop)
- ? document.documentElement : document.body;
- posx = e.clientX - xoffset + (ie5? el.scrollLeft : window.pageXOffset);
- posy = e.clientY - yoffset + (ie5? el.scrollTop : window.pageYOffset);
- menuobj.style.left=posx + "px";
- menuobj.style.top=posy + "px";
- menuobj.style.visibility="visible"
- return false
-}
-
-function contextMenu_hide(){
- for (i=0;i