diff --git a/lib/WebGUI/Admin.pm b/lib/WebGUI/Admin.pm index 1b5f73e1a..284189dc8 100644 --- a/lib/WebGUI/Admin.pm +++ b/lib/WebGUI/Admin.pm @@ -134,35 +134,6 @@ sub getTreePaginator { } -#---------------------------------------------------------------------- - -=head2 getVersionTagTemplateVars - -=cut - -sub getVersionTagTemplateVars { - my ( $self ) = @_; - my $session = $self->session; - my ( $user ) = $session->quick(qw( user )); - my $vars = []; - - my $working = WebGUI::VersionTag->getWorking( $session, "nocreate" ); - my $tags = WebGUI::VersionTag->getOpenTags($session); - if ( @$tags ) { - for my $tag ( @$tags ) { - next unless $user->isInGroup( $tag->get("groupToUse") ); - push @$vars, { - name => $tag->get("name"), - isWorking => ( $working && $working->getId eq $tag->getId ) ? 1 : 0, - joinUrl => $tag->getJoinUrl, - editUrl => $tag->getEditUrl, - }; - } - } - - return $vars; -} - #---------------------------------------------------------------------- =head2 www_getClipboard ( ) @@ -293,6 +264,44 @@ sub www_getTreeData { #---------------------------------------------------------------------- +=head2 www_getVersionTags + +Get the current version tags a user can join + +=cut + +sub www_getVersionTags { + my ( $self ) = @_; + my $session = $self->session; + my ( $user ) = $session->quick(qw( user )); + my $vars = []; + + my $current = WebGUI::VersionTag->getWorking( $session, "nocreate" ); + my $tags = WebGUI::VersionTag->getOpenTags($session); + if ( @$tags ) { + for my $tag ( @$tags ) { + next unless $user->isInGroup( $tag->get("groupToUse") ); + my $isCurrent = ( $current && $current->getId eq $tag->getId ) ? 1 : 0; + my $icon = $isCurrent + ? $session->url->extras( 'icon/tag_green.png' ) + : $session->url->extras( 'icon/tag_blue.png' ) + ; + push @$vars, { + tagId => $tag->getId, + name => $tag->get("name"), + isCurrent => $isCurrent, + joinUrl => $tag->getJoinUrl, + editUrl => $tag->getEditUrl, + icon => $icon, + }; + } + } + + return JSON->new->encode( $vars ); +} + +#---------------------------------------------------------------------- + =head2 www_processAssetHelper ( ) Process the given asset helper with the given asset @@ -329,7 +338,6 @@ sub www_view { # Add vars for AdminBar $var->{adminPlugins} = $self->getAdminPluginTemplateVars; - $var->{versionTags} = $self->getVersionTagTemplateVars; $var->{newContentTabs} = $self->getNewContentTemplateVars; # Add vars for current user @@ -393,6 +401,7 @@ __DATA__
Version Tags (i18n)
+
Clipboard (i18n)
diff --git a/www/extras/admin/admin.css b/www/extras/admin/admin.css index 408140c56..635aff899 100644 --- a/www/extras/admin/admin.css +++ b/www/extras/admin/admin.css @@ -142,7 +142,7 @@ a:link { padding: 0; } -#clipboardItems a { +#clipboardItems a, #versionTagItems a { display: block; padding: 2px; } diff --git a/www/extras/admin/admin.js b/www/extras/admin/admin.js index c279d8057..198e1f352 100644 --- a/www/extras/admin/admin.js +++ b/www/extras/admin/admin.js @@ -250,7 +250,7 @@ WebGUI.Admin.prototype.updateAdminBar } else if ( id == "versionTags" ) { - + admin.requestUpdateVersionTags.call( admin ); } }; @@ -327,6 +327,81 @@ WebGUI.Admin.prototype.pasteAsset this.gotoAsset( url ); }; +/** + * requestUpdateVersionTags( ) + * Request the new set of version tags from the server + */ +WebGUI.Admin.prototype.requestUpdateVersionTags += function ( ) { + var callback = { + success : function (o) { + var versionTags = YAHOO.lang.JSON.parse( o.responseText ); + this.updateVersionTags( versionTags ); + }, + failure : function (o) { + + }, + scope: this + }; + + var ajax = YAHOO.util.Connect.asyncRequest( 'GET', '?op=admin;method=getVersionTags', callback ); +}; + +/** + * updateVersionTags( tags ) + * Update the version tag list with the given tags + */ +WebGUI.Admin.prototype.updateVersionTags += function ( tags ) { + // Clear out the old tags + var div = document.getElementById( 'versionTagItems' ); + while ( div.childNodes.length > 0 ) { + div.removeChild( div.childNodes[0] ); + } + + for ( var i = 0; i < tags.length; i++ ) { + var tag = tags[i]; + var a = document.createElement('a'); + var icon = document.createElement('img'); + icon.src = tag.icon; + a.appendChild( icon ); + a.appendChild( document.createTextNode( tag.name ) ); + div.appendChild( a ); + this.addJoinTagHandler( a, tag.tagId ); + if ( tag.isCurrent ) { + this.updateCurrentVersionTag( tag ); + } + } +}; + +/** + * addJoinTagHandler( elem, tagId ) + * Add an onclick handler to join a version tag + */ +WebGUI.Admin.prototype.addJoinTagHandler += function ( elem, tagId ) { + var self = this; + YAHOO.util.Event.on( elem, "click", function(){ + // Update version tags after join in case paste fails + var updateAfterJoin = function(){ + this.requestUpdateVersionTags(); + this.afterNavigate.unsubscribe( updateAfterJoin ); + }; + self.afterNavigate.subscribe(updateAfterJoin, self ); + self.joinTag( tagId ); + }, self ); +}; + +/** + * joinTag( id ) + * Join a new version tag + */ +WebGUI.Admin.prototype.joinTag += function ( id ) { + var url = appendToUrl( this.currentAssetDef.url, 'op=setWorkingVersionTag;tagId=' + id ); + this.gotoAsset( url ); +}; + /** * updateAssetHelpers( assetDef ) * Update the asset helpers. assetDef must contain: