the MORE menu exists now, but ... it doesn't show up with the right style, nor in the right place. Work continues.

This commit is contained in:
Doug Bell 2008-06-10 05:29:22 +00:00
parent d77fec01c0
commit 38a6fbef48
2 changed files with 110 additions and 87 deletions

View file

@ -147,70 +147,79 @@ sub getSearchPaginator {
#----------------------------------------------------------------------------
=head2 getMoreMenu ( asset, label )
=head2 getMoreMenu ( session, label )
Gets the "More" menu with the specified label.
=cut
sub getMoreMenu {
my $asset = shift;
my $session = shift;
my $label = shift || "More";
my $userUiLevel = $asset->session->user->profileField("uiLevel");
my $toolbarUiLevel = $asset->session->config->get("assetToolbarUiLevel");
my $i18n = WebGUI::International->new( $asset->session, "Asset" );
my $userUiLevel = $session->user->profileField("uiLevel");
my $toolbarUiLevel = $session->config->get("assetToolbarUiLevel");
my $i18n = WebGUI::International->new( $session, "Asset" );
### The More menu
my @more_fields = (); # The fields to fill in the more menu
my $more_markup = q{<span class="moreMenu"><a href="#">} . $label . q{</a>}
. q{<ul>}
;
my @more_fields = ();
# These links are shown based on UI level
if ( $userUiLevel >= $toolbarUiLevel->{ "changeUrl" } ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl( 'func=changeUrl;proceed=manageAssets' ), $i18n->get( 'change url' );
push @more_fields, {
url => '<url>?func=changeUrl;proceed=manageAssets',
label => $i18n->get( 'change url' ),
};
}
if ( $userUiLevel >= $toolbarUiLevel->{ "editBranch" } ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl( 'func=editBranch' ), $i18n->get( 'edit branch' );
push @more_fields, {
url => '<url>?func=editBranch',
label => $i18n->get( 'edit branch' ),
};
}
if ( $userUiLevel >= $toolbarUiLevel->{ "shortcut" } ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl( 'func=createShortcut;proceed=manageAssets' ), $i18n->get( 'create shortcut' );
push @more_fields, {
url => '<url>?func=createShortcut;proceed=manageAssets',
label => $i18n->get( 'create shortcut' ),
};
}
if ( $userUiLevel >= $toolbarUiLevel->{ "revisions" } ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl( 'func=manageRevisions' ), $i18n->get( 'revisions' );
push @more_fields, {
url => '<url>?func=manageRevisions',
label => $i18n->get( 'revisions' ),
};
}
if ( $userUiLevel >= $toolbarUiLevel->{ "view" } ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl, $i18n->get( 'view' );
push @more_fields, {
url => '<url>',
label => $i18n->get( 'view' ),
};
}
if ( $userUiLevel >= $toolbarUiLevel->{ "edit" } ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl( 'func=edit;proceed=manageAssets' ), $i18n->get( 'edit' );
push @more_fields, {
url => '<url>?func=edit;proceed=manageAssets',
label => $i18n->get( 'edit' ),
};
}
if ( $userUiLevel >= $toolbarUiLevel->{ "lock" } ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl( 'func=lock;proceed=manageAssets' ), $i18n->get( 'lock' );
push @more_fields, {
url => '<url>?func=lock;proceed=manageAssets',
label => $i18n->get( 'lock' ),
};
}
if ( $asset->session->config->get("exportPath") && $userUiLevel >= $toolbarUiLevel->{"export"} ) {
$more_markup .= q{<li><a href="%s">%s</a></li>};
push @more_fields, $asset->getUrl( 'func=export' ), $i18n->get( 'Export Page' );
if ( $session->config->get("exportPath") && $userUiLevel >= $toolbarUiLevel->{"export"} ) {
push @more_fields, {
url => '<url>?func=export',
label => $i18n->get( 'Export Page' ),
};
}
$more_markup .= q{</ul>}
. q{</span>}
;
return sprintf $more_markup, @more_fields;
return to_json \@more_fields;
}
#----------------------------------------------------------------------------
@ -362,6 +371,7 @@ sub www_manage {
# Show the page
$session->style->setLink( $session->url->extras('yui/build/datatable/assets/skins/sam/datatable.css'), {rel=>'stylesheet', type=>'text/css'});
$session->style->setLink( $session->url->extras('yui/build/menu/assets/skins/sam/menu.css'), {rel=>'stylesheet', type=>'text/css'});
$session->style->setLink( $session->url->extras( 'yui-webgui/build/assetManager/assetManager.css' ), { rel => "stylesheet", type => 'text/css' } );
$session->style->setScript( $session->url->extras( 'yui/build/yahoo/yahoo.js' ) );
$session->style->setScript( $session->url->extras( 'yui/build/dom/dom.js' ) );
@ -370,6 +380,8 @@ sub www_manage {
$session->style->setScript( $session->url->extras( 'yui/build/connection/connection-min.js ' ) );
$session->style->setScript( $session->url->extras( 'yui/build/datasource/datasource-beta.js ' ) );
$session->style->setScript( $session->url->extras( 'yui/build/datatable/datatable-beta.js ' ) );
$session->style->setScript( $session->url->extras( 'yui/build/container/container-min.js' ) );
$session->style->setScript( $session->url->extras( 'yui/build/menu/menu-min.js' ) );
$session->style->setScript( $session->url->extras( 'yui-webgui/build/assetManager/assetManager.js' ) );
$session->style->setScript( $session->url->extras( 'yui-webgui/build/form/form.js' ) );
my $extras = $session->url->extras;
@ -382,7 +394,7 @@ ENDHTML
my $output = '<div id="assetManager">' . getHeader( $session );
### Crumbtrail
my $crumb_markup = '<li> &gt; <a href="%s">%s</a></li>';
my $crumb_markup = '<li><a href="%s">%s</a> &gt;</li>';
my $ancestors = $currentAsset->getLineage( ['ancestors'], { returnObjects => 1 } );
$output .= '<ol id="crumbtrail">';
@ -394,13 +406,14 @@ ENDHTML
}
# And ourself
$output .= sprintf '<li> &gt; %s</li>',
getMoreMenu( $currentAsset, $currentAsset->get( "menuTitle" ) ),
$output .= sprintf q{<li><a href="#" onclick="WebGUI.AssetManager.showMoreMenu('%s')">%s</a></li>},
$currentAsset->getUrl,
$currentAsset->get( "menuTitle" ),
;
$output .= '</ol>';
### The page of assets
$output .= q{<div class="yui-skin-sam">}
$output .= q{<div class="yui-skin-sam" id="assetManager" >}
. q{<form>}
. q{<input type="hidden" name="op" value="assetManager" />}
. q{<input type="hidden" name="method" value="manage" />}
@ -496,8 +509,12 @@ ENDHTML
$output .= q{</div>};
### Write the JavaScript that will take over
$output .= '<script type="text/javascript">'
. 'WebGUI.AssetManager.MoreMenuItems = ' . getMoreMenu( $session ) . ';'
;
$output .= <<'ENDJS';
<script type='text/javascript'>
// Initialize the datatable and datasource
YAHOO.util.Event.onDOMReady(function () {
// Start the data source
WebGUI.AssetManager.DataSource
@ -580,10 +597,7 @@ ENDJS
{ key: 'className', label: ") . $i18n->get( 'type' ) . q(", sortable: true, formatter: WebGUI.AssetManager.formatClassName },
{ key: 'revisionDate', label: ") . $i18n->get( 'revision date' ) . q(", formatter: WebGUI.AssetManager.formatRevisionDate, sortable: true },
{ key: 'assetSize', label: ") . $i18n->get( 'size' ) . q(", formatter: WebGUI.AssetManager.formatAssetSize, sortable: true },
{ key: 'lockedBy', label: ") . $i18n->get( 'locked' ) . q(", formatter: WebGUI.AssetManager.formatLockedBy },
{ key: 'icon' },
{ key: 'url' },
{ key: 'childCount' }
{ key: 'lockedBy', label: ") . $i18n->get( 'locked' ) . q(", formatter: WebGUI.AssetManager.formatLockedBy }
];
);
@ -601,11 +615,6 @@ ENDJS
}
);
// Hide columns
WebGUI.AssetManager.DataTable.hideColumn( 'icon' );
WebGUI.AssetManager.DataTable.hideColumn( 'url' );
WebGUI.AssetManager.DataTable.hideColumn( 'childCount' );
// Override function for custom server-side sorting
WebGUI.AssetManager.DataTable.sortColumn = function(oColumn) {
// Default ascending

View file

@ -13,6 +13,8 @@ if ( typeof WebGUI.AssetManager == "undefined" ) {
// The extras folder
WebGUI.AssetManager.extrasUrl = '/extras/';
// Keep track of the open more menus
WebGUI.AssetManager.MoreMenusDisplayed = {};
/*---------------------------------------------------------------------------
WebGUI.AssetManager.addHighlightToRow ( child )
@ -50,8 +52,37 @@ WebGUI.AssetManager.formatActions
= function ( elCell, oRecord, oColumn, orderNumber ) {
elCell.innerHTML
= '<a href="' + oRecord.getData( 'url' ) + '?func=edit">Edit</a>'
+ ' | More '
+ ' | '
;
var more = document.createElement( 'a' );
elCell.appendChild( more );
more.appendChild( document.createTextNode( 'More' ) );
more.href = '#';
// Build a more menu
var rawItems = WebGUI.AssetManager.MoreMenuItems;
var menuItems = [];
for ( var i = 0; i < rawItems.length; i++ ) {
var itemUrl = rawItems[i].url.match( /<url>/ )
? rawItems[i].url.replace( "<url>", oRecord.getData( 'url' ) )
: oRecord.getData( 'url' ) + rawItems[i].url
;
menuItems.push( '<li><a href="' + itemUrl + '">' + rawItems[i].label + "</a></li>" );
}
var options = {
"zindex" : 100,
"clicktohide" : true,
"constraintoviewport" : true,
"position" : "dynamic",
"xy" : [ more.clientLeft, more.clientTop ],
"itemdata" : menuItems
};
var menu = new YAHOO.widget.Menu( "moreMenu" + oRecord.getData( 'assetId' ), options );
menu.render( document.getElementById( 'assetManager' ) );
YAHOO.util.Event.addListener( more, "click", menu.show, null, menu );
};
/*---------------------------------------------------------------------------
@ -142,18 +173,6 @@ WebGUI.AssetManager.formatTitle
;
};
/*---------------------------------------------------------------------------
WebGUI.AssetManager.hideMoreMenu ( event, element )
Hide the more menu located inside element after a short delay.
*/
WebGUI.AssetManager.hideMoreMenu
= function ( event, element ) {
var ul = element.getElementsByTagName( "ul" )[0];
// Store the timeout in the element itself (bad, yes)
element.menuTimeout
= setTimeout( function () { ul.style.display = "none"; }, 100 );
};
/*---------------------------------------------------------------------------
WebGUI.AssetManager.initManager ( )
Initialize the www_manage page
@ -161,26 +180,6 @@ WebGUI.AssetManager.hideMoreMenu
WebGUI.AssetManager.initManager
= function () {
WebGUI.AssetManager.initMoreMenus();
};
/*---------------------------------------------------------------------------
WebGUI.AssetManager.initMoreMenus ( )
Initialize the more menus in an asset manager page
*/
WebGUI.AssetManager.initMoreMenus
= function () {
// Initialize the more menus
var moreMenus = YAHOO.util.Dom.getElementsByClassName( "moreMenu" );
for ( var i = 0; i < moreMenus.length; i++ ) {
var a = moreMenus[ i ].getElementsByTagName( "a" );
for ( var h = 0; h < a.length; h++ ) {
YAHOO.util.Event.addListener( a[ h ], "mouseover", WebGUI.AssetManager.showMoreMenu, moreMenus[ i ] );
YAHOO.util.Event.addListener( a[ h ], "mouseout", WebGUI.AssetManager.hideMoreMenu, moreMenus[ i ] );
}
}
};
/*---------------------------------------------------------------------------
@ -190,9 +189,6 @@ WebGUI.AssetManager.initMoreMenus
WebGUI.AssetManager.initSearch
= function () {
WebGUI.AssetManager.initMoreMenus();
};
/*---------------------------------------------------------------------------
@ -229,16 +225,34 @@ WebGUI.AssetManager.selectRow
};
/*---------------------------------------------------------------------------
WebGUI.AssetManager.showMoreMenu ( event, element )
WebGUI.AssetManager.showMoreMenu ( event, url )
Show the more menu located inside element.
*/
WebGUI.AssetManager.showMoreMenu
= function ( event, element ) {
if ( element.menuTimeout ) {
clearTimeout( element.menuTimeout );
= function ( event, url ) {
var rawItems = WebGUI.AssetManager.MoreMenuItems;
var menuItems = [];
for ( var i = 0; i < rawItems.length; i++ ) {
var itemUrl = rawItems[i].url.match( /<url>/ )
? rawItems[i].url.replace( "<url>", url )
: url + rawItems[i].url
;
menuItems.push( '<li><a href="' + itemUrl + '">' + rawItems[i].label + "</a></li>" );
}
var ul = element.getElementsByTagName( "ul" )[0];
ul.style.display = "block";
var options = {
"zindex" : 1000,
"clicktohide" : true,
"constraintoviewport" : true,
"xy" : [ event.clientX, event.clientY ],
"itemdata" : menuItems
};
var menu = new YAHOO.widget.Menu( "moreMenu", options );
menu.render( document.getElementById( 'assetManager' ) );
menu.show();
menu.focus();
};
/*---------------------------------------------------------------------------