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: