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 + = '
' + . '' . $self->getName . '' + . '
' + . '
' + . '
' . $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 '
' + . '' . $self->getName . '' + . '
' + . '
$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'; - for (i=0;i" + this.linkLabels[i] + "
"; - } - output += ''; - if (this.type == "image") { - if (this.addContext) - output += '

'; - output += '' + this.name + '' + this.name + ''; - } - return output; -} - -function contextMenu_print(){ - document.write(this.draw()); -} - -function contextMenu_addLink(linkUrl,linkLabel){ - this.linkUrls.push(linkUrl); - this.linkLabels.push(linkLabel); -} - - +function initWGContextMenus() { + var menus = YAHOO.util.Dom.getElementsByClassName('wg-contextmenu'); + for (var i = menus.length; i--; ) { + var menu = menus[i]; + if (menu.initialized) { + continue; + } + var ctx = menu.previousSibling; + var myMenu = new YAHOO.widget.Menu(menu, { + context : [ctx, "tl", "bl"] + }); + myMenu.render(); + YAHOO.util.Event.addListener(ctx, "click", function (e, menu) { + YAHOO.util.Event.preventDefault(e); + menu.align("tl", "bl"); + menu.show(); + }, myMenu); + } +} +YAHOO.util.Event.onDOMReady(initWGContextMenus); +