Index: main/plugin-web/pages/properties/view.xsl
===================================================================
--- main/plugin-web/pages/properties/view.xsl	(revision 0)
+++ main/plugin-web/pages/properties/view.xsl	(revision 0)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<xsl:stylesheet version="1.0" 
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+	xmlns:xalan="http://xml.apache.org/xalan"
+	xmlns:resolver="org.ametys.cms.transformation.xslt.ResolveURIComponent"
+	xmlns:ametys="org.ametys.cms.transformation.xslt.AmetysXSLTHelper"
+	xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
+	exclude-result-prefixes="i18n xalan resolver">
+	
+	<xsl:import href="plugin:cms://pages/properties/view.xsl"/>
+
+	
+	<xsl:template match="/view">
+		<xml>
+			<xsl:call-template name="card"/>
+			
+			<xsl:apply-templates select="content/metadataSet" mode="metadata-set">
+				<xsl:with-param name="nodes" select="xalan:nodeset(content/metadata/*)"/>
+			</xsl:apply-templates>
+			
+			<xsl:if test="content/referencing-contents/referencing-content">
+				<div class="referencing-contents">
+					<p><strong><i18n:text i18n:key='UITOOL_DETAILS_REFERENCING_CONTENTS'/></strong></p>
+					<ul>
+						<xsl:for-each select="content/referencing-contents/referencing-content">
+							<li><a href="{resolver:resolve ('content', @id)}"><xsl:value-of select="@title"/></a></li>
+						</xsl:for-each>
+					</ul>
+				</div>
+			</xsl:if>
+			
+			<xsl:if test="content/pages/page">
+				<div class="content-pages">
+					<p><strong><i18n:text i18n:key='UITOOL_DETAILS_REFERENCED_PAGES' i18n:catalogue="plugin.web"/></strong></p>
+					<ul>
+						<xsl:for-each select="content/pages/page">
+							<li><a href="{resolver:resolve ('page', @id)}"><xsl:value-of select="@title"/></a></li>
+						</xsl:for-each>
+					</ul>
+				</div>
+			</xsl:if>
+			
+			<xsl:if test="content/initial-content/page">
+				<div class="content-initial-content">
+					<p><strong><i18n:text i18n:key='UITOOL_DETAILS_CONTENT_IS_SHARED' i18n:catalogue="plugin.web"/></strong></p>
+					<ul>
+						<xsl:for-each select="content/initial-content/page">
+							<li><a href="{resolver:resolve ('page', @id)}"><xsl:value-of select="@title"/></a></li>
+						</xsl:for-each>
+					</ul>
+				</div>
+			</xsl:if>
+			
+			<xsl:if test="content/share/page">
+				<div class="content-share">
+					<p><strong><i18n:text i18n:key='UITOOL_DETAILS_CONTENT_HAS_SHARES' i18n:catalogue="plugin.web"/></strong></p>
+					<ul>
+						<xsl:for-each select="content/share/page">
+							<li><a href="{resolver:resolve ('page', @id)}"><xsl:value-of select="@title"/></a></li>
+						</xsl:for-each>
+					</ul>
+				</div>
+			</xsl:if>
+		</xml>
+	</xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-web/plugin.xml
===================================================================
--- main/plugin-web/plugin.xml	(revision 32644)
+++ main/plugin-web/plugin.xml	(working copy)
@@ -2080,23 +2080,29 @@
    
    <feature name="userinterface.details">
     	<extensions>
-    		<!-- <extension id="org.ametys.web.Details"
-    				   point="org.ametys.core.ui.RibbonControlsManager"
-    				   class="org.ametys.core.ui.StaticClientSideElement">
-				<action class="org.ametys.ribbon.control.button.UniqueInstanceToolAndSelectionButton">
-					<param name="role">uitool-web-details</param>
-					<param name="target-type">^content$</param>
-					
-					<param name="label" i18n="true">plugin.cms:UITOOL_DETAILS_LABEL</param>
-					<param name="default-description" i18n="true">plugin.cms:UITOOL_DETAILS_DESCRIPTION</param>
-					<param name="footer" i18n="true">plugin.cms:UITOOL_DETAILS_FOOTER</param>
-					<param name="icon-small" file="true" plugin="cms">img/details/properties_16.png</param>
-					<param name="icon-medium" file="true" plugin="cms">img/details/properties_32.png</param>
-					<param name="icon-large" file="true" plugin="cms">img/details/properties_32.png</param>
-				</action>    				   
-    		</extension>
+            <extension id="org.ametys.web.Details"
+                       point="org.ametys.core.ui.RibbonControlsManager"
+                       class="org.ametys.core.ui.StaticClientSideElement">
+                <class name="Ametys.ribbon.element.ui.button.OpenToolButtonController">
+                    <opentool-role>uitool-properties</opentool-role>
+                    <opentool-params>
+                        <contentPluginName>web</contentPluginName>
+                        <contentUrl>content/properties/view.xml</contentUrl>
+                    </opentool-params>
+                    <label i18n="true">plugin.cms:UITOOL_DETAILS_LABEL</label>
+                    <default-description i18n="true">plugin.cms:UITOOL_DETAILS_DESCRIPTION</default-description>
+                    <help>org.ametys.cms.content.properties</help>
+                    <selection-target-type>^content|simple-content$</selection-target-type>
+                    <selection-description-empty i18n="true">plugin.cms:UITOOL_DETAILS_SELECTION_EMPTY</selection-description-empty>
+                    <selection-description-nomatch i18n="true">plugin.cms:UITOOL_DETAILS_SELECTION_EMPTY</selection-description-nomatch>
+                    <selection-description-multiselectionforbidden i18n="true">plugin.cms:UITOOL_DETAILS_SELECTION_MULTI_FORBIDDEN</selection-description-multiselectionforbidden>
+                    <icon-small file="true" plugin="cms">img/details/properties_16.png</icon-small>
+                    <icon-medium file="true" plugin="cms">img/details/properties_32.png</icon-medium>
+                    <icon-large file="true" plugin="cms">img/details/properties_48.png</icon-large>
+                </class>
+            </extension>
     		
-    		<extension id="org.ametys.web.DetailsFactory"
+    		<!-- <extension id="org.ametys.web.DetailsFactory"
     				   point="org.ametys.core.ui.UIToolsFactoriesManager"
     				   class="org.ametys.core.ui.StaticClientSideElement">
 				<action class="org.ametys.web.tool.details.DetailsToolFactory">

Index: main/plugin-web/sitemap-back.xmap
===================================================================
--- main/plugin-web/sitemap-back.xmap   (revision 32644)
+++ main/plugin-web/sitemap-back.xmap   (working copy)
@@ -82,6 +82,7 @@
             <map:generator name="admin-skin-actions" src="org.ametys.web.skin.generators.AdminSkinActionsGenerator" label="xml" logger="org.ametys.web.skin.generators" />
             <map:generator name="menu-skin-actions" src="org.ametys.web.skin.generators.MenuSkinActionsGenerator" label="xml" logger="org.ametys.web.skin.generators" />
             <map:generator name="skin-export" src="org.ametys.web.skin.generators.ZipArchiveGenerator" logger="org.ametys.web.skin.generators" />
+            <map:generator name="additional-web-content-info" src="org.ametys.web.content.AdditionalWebContentPropertiesGenerator" logger="org.ametys.web.content.AdditionalWebContentPropertiesGenerator"/>
         </map:generators>
 
         <map:transformers>
@@ -1105,6 +1106,28 @@
                 <map:generate type="rights-profiles-context" />
                 <map:serialize type="xml" />
             </map:match>
+
+            <map:match pattern="content/properties/view.xml">
+                <map:aggregate element="view" label="xml">
+                    <map:part src="cocoon://_content.xml"/>
+                    <map:part src="cocoon://_metadataSet.xml"/>
+                    <map:part src="cocoon:/content/additional-web-content-info.xml"/>
+                </map:aggregate>
+                <map:transform src="pages/properties/view.xsl" type="xslt">
+                    <map:parameter name="contextPath" value="{request:contextPath}"/>
+                </map:transform>
+                <map:transform type="i18n">
+                    <map:parameter name="locale" value="{locale:locale}"/>
+                     <map:parameter name="default-catalogue-id" value="plugin.cms"/>
+                </map:transform>
+                <map:serialize type="xml"/>
+            </map:match>
+            
+            <map:match pattern="content/additional-web-content-info.xml">
+                <map:generate type="additional-web-content-info"/>
+                <map:serialize type="xml"/>
+            </map:match>
+
         </map:pipeline>
     </map:pipelines>
 </map:sitemap>
Index: main/plugin-web/src/org/ametys/web/content/AdditionalWebContentPropertiesGenerator.java
===================================================================
--- main/plugin-web/src/org/ametys/web/content/AdditionalWebContentPropertiesGenerator.java	(revision 0)
+++ main/plugin-web/src/org/ametys/web/content/AdditionalWebContentPropertiesGenerator.java	(revision 0)
@@ -0,0 +1,217 @@
+package org.ametys.web.content;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Set;
+
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.xml.AttributesImpl;
+import org.apache.cocoon.xml.XMLUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.xml.sax.SAXException;
+
+import org.ametys.cms.content.AdditionalContentPropertiesGenerator;
+import org.ametys.cms.repository.Content;
+import org.ametys.plugins.repository.AmetysRepositoryException;
+import org.ametys.plugins.repository.version.VersionableAmetysObject;
+import org.ametys.web.repository.content.SharedContent;
+import org.ametys.web.repository.content.WebContent;
+import org.ametys.web.repository.content.shared.SharedContentManager;
+import org.ametys.web.repository.page.Page;
+import org.ametys.web.repository.page.Zone;
+import org.ametys.web.repository.page.ZoneItem;
+
+/**
+ * Generates addition information on web content
+ */
+public class AdditionalWebContentPropertiesGenerator extends AdditionalContentPropertiesGenerator
+{
+
+    /** The shared content helper. */
+    protected SharedContentManager _sharedContentComponent;
+
+    @Override
+    public void service(ServiceManager serviceManager) throws ServiceException
+    {
+        super.service(serviceManager);
+        _sharedContentComponent = (SharedContentManager) serviceManager.lookup(SharedContentManager.ROLE);
+    }
+
+    @Override
+    public void generate() throws IOException, SAXException, ProcessingException
+    {
+        Request request = ObjectModelHelper.getRequest(objectModel);
+
+        String contentId = parameters.getParameter("contentId", request.getParameter("contentId"));
+
+        Content content = null;
+        if (StringUtils.isNotEmpty(contentId))
+        {
+            content = _resolver.resolveById(contentId);
+        }
+        else
+        {
+            content = (Content) request.getAttribute(Content.class.getName());
+        }
+
+        contentHandler.startDocument();
+
+        AttributesImpl attrs = new AttributesImpl();
+        attrs.addCDATAAttribute("id", content.getId());
+        XMLUtils.startElement(contentHandler, "content", attrs);
+
+        // Take the HEAD revision
+        String revision = null;
+        if (content instanceof VersionableAmetysObject)
+        {
+            revision = ((VersionableAmetysObject) content).getRevision();
+            ((VersionableAmetysObject) content).switchToRevision(null);
+        }
+
+        _saxContentTypesHierarchy (content);
+        _saxMixinsHierarchy(content);
+        _saxReferencingContents(content);
+        _saxContentPages(content);
+        _saxSharedContent(content);
+
+        if (content instanceof VersionableAmetysObject && revision != null)
+        {
+            ((VersionableAmetysObject) content).switchToRevision(revision);
+        }
+
+        XMLUtils.endElement(contentHandler, "content");
+
+        contentHandler.endDocument();
+    }
+
+    private void _saxSharedContent(Content content) throws SAXException
+    {
+        Set<SharedContent> sharedContents = _sharedContentComponent.getSharedContents(content);
+
+        if (content instanceof SharedContent)
+        {
+            Content initialContent = ((SharedContent) content).getInitialContent();
+
+            if (initialContent != null)
+            {
+                AttributesImpl icAttrs = new AttributesImpl();
+
+                icAttrs.addCDATAAttribute("id", initialContent.getId());
+                icAttrs.addCDATAAttribute("title", initialContent.getTitle());
+
+                XMLUtils.startElement(contentHandler, "initial-content", icAttrs);
+
+                if (initialContent instanceof WebContent)
+                {
+                    Collection<Page> pages = ((WebContent) initialContent).getReferencingPages();
+                    for (Page page : pages)
+                    {
+                        _saxPage(page, null, null);
+                    }
+                }
+
+                XMLUtils.endElement(contentHandler, "initial-content");
+            }
+        }
+
+        for (SharedContent sharedContent : sharedContents)
+        {
+            AttributesImpl sharedAttrs = new AttributesImpl();
+            sharedAttrs.addCDATAAttribute("contentId", sharedContent.getId());
+            sharedAttrs.addCDATAAttribute("title", sharedContent.getTitle());
+
+            XMLUtils.startElement(contentHandler, "share", sharedAttrs);
+
+            for (Page page : sharedContent.getReferencingPages())
+            {
+                _saxPage(page, null, null);
+            }
+
+            XMLUtils.endElement(contentHandler, "share");
+        }
+    }
+
+    private void _saxContentPages(Content content) throws SAXException
+    {
+        XMLUtils.startElement(contentHandler, "pages");
+
+        if (content instanceof WebContent)
+        {
+            Collection<ZoneItem> zoneItems = ((WebContent) content).getReferencingZoneItems();
+
+            // For a shared content, we are mainly interrested in refereces of the initial content!
+            if (content instanceof SharedContent && ((SharedContent) content).getInitialContent() instanceof WebContent)
+            {
+                zoneItems.addAll(((WebContent)((SharedContent) content).getInitialContent()).getReferencingZoneItems());
+            }
+
+            for (ZoneItem zoneItem : zoneItems)
+            {
+                Zone zone = zoneItem.getZone();
+                Page page = zone.getPage();
+
+                _saxPage(page, zone, zoneItem);
+            }
+        }
+
+        XMLUtils.endElement(contentHandler, "pages");
+    }
+
+    private String _escape(String target)
+    {
+        if (target == null)
+        {
+            return "";
+        }
+        return target.replaceAll("&", "&amp;").replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\\\"").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
+    }
+
+    /**
+     * SAX a content's page.
+     * @param page the page to SAX.
+     * @param zone the zone the content is in.
+     * @param zoneItem the the zone item the content belongs to.
+     * @throws SAXException if an error occurs.
+     */
+    protected void _saxPage(Page page, Zone zone, ZoneItem zoneItem) throws SAXException
+    {
+        AttributesImpl cAttsPage = new AttributesImpl();
+        cAttsPage.addCDATAAttribute("id", _escape(page.getId()));
+        cAttsPage.addCDATAAttribute("name", _escape(page.getName()));
+        cAttsPage.addCDATAAttribute("path", _escape(page.getPathInSitemap()));
+        cAttsPage.addCDATAAttribute("title", _escape(page.getTitle()));
+        cAttsPage.addCDATAAttribute("long-title", _escape(page.getLongTitle()));
+        cAttsPage.addCDATAAttribute("lang", _escape(page.getSitemap().getName()));
+        cAttsPage.addCDATAAttribute("site", _escape(page.getSite().getName()));
+        if (zone != null)
+        {
+            cAttsPage.addCDATAAttribute("zone", _escape(zone.getName()));
+        }
+        if (zoneItem != null)
+        {
+            cAttsPage.addCDATAAttribute("metadataSetName", _escape(StringUtils.defaultString(zoneItem.getMetadataSetName(), "main")));
+        }
+        _saxTags (page, cAttsPage);
+
+        XMLUtils.createElement(contentHandler, "page", cAttsPage);
+    }
+
+    /**
+     * SAX page's tags
+     * @param page the page  
+     * @param attrs the attributes to SAX into
+     * @throws AmetysRepositoryException
+     */
+    protected void _saxTags(Page page, AttributesImpl attrs) throws AmetysRepositoryException
+    {
+        for (String tag : page.getTags())
+        {
+            // FIXME use nested element not this dirty XML
+            attrs.addCDATAAttribute("PLUGIN_TAGS_" + tag, "empty");
+        }
+    }
+}
Index: main/plugin-web/src/org/ametys/web/editor/PageURIResolver.java
===================================================================
--- main/plugin-web/src/org/ametys/web/editor/PageURIResolver.java	(revision 32644)
+++ main/plugin-web/src/org/ametys/web/editor/PageURIResolver.java	(working copy)
@@ -132,7 +132,7 @@
             }
             else // back
             {
-                return "javascript:parent.org.ametys.uitool.ToolsManager.getInstance().openTool('uitool-page', {id:'" + uri + "'});";
+                return "javascript:Ametys.tool.ToolsManager.openTool('uitool-page', {id:'" + uri + "'});";
             }
         }
         catch (Exception e)
