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:
parent
d77fec01c0
commit
38a6fbef48
2 changed files with 110 additions and 87 deletions
|
|
@ -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> > <a href="%s">%s</a></li>';
|
||||
my $crumb_markup = '<li><a href="%s">%s</a> ></li>';
|
||||
my $ancestors = $currentAsset->getLineage( ['ancestors'], { returnObjects => 1 } );
|
||||
|
||||
$output .= '<ol id="crumbtrail">';
|
||||
|
|
@ -394,13 +406,14 @@ ENDHTML
|
|||
}
|
||||
|
||||
# And ourself
|
||||
$output .= sprintf '<li> > %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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue