Share Repository Browser support for xpath starting location. See comments in "RepositoryLibrary" section of share-config-custom.xml.sample.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@24021 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mike Hatfield
2010-11-26 18:11:33 +00:00
parent c06e01826a
commit 7570a28d8d
8 changed files with 130 additions and 84 deletions

View File

@@ -1,17 +1,17 @@
function tagQuery() function tagQuery()
{ {
var nodeRef = args.n, var rootNode = args.n,
maxResults = args.m, maxResults = args.m,
sortOrder = args.s, sortOrder = args.s,
tags = [], tags = [],
countMin = Number.MAX_VALUE, countMin = Number.MAX_VALUE,
countMax = 0; countMax = 0;
/* nodeRef input */ /* rootNode input */
var node = null; var node = null;
if ((nodeRef !== null) && (nodeRef !== "")) if ((rootNode !== null) && (rootNode !== ""))
{ {
node = resolveVirtualNodeRef(nodeRef) || search.findNode(nodeRef); node = resolveVirtualNodeRef(rootNode) || resolveXPath(rootNode) || search.findNode(rootNode);
} }
if (node === null) if (node === null)
{ {
@@ -144,4 +144,25 @@ function resolveVirtualNodeRef(nodeRef)
return node; return node;
} }
/**
* Resolve xpath location
*
* @method resolveXPath
* @param xpath {string} xpath expression
* @return {ScriptNode|null} First node corresponding to supplied xpath expression. Results null if xpath doesn't resolve.
*/
function resolveXPath(xpath)
{
var node = null;
try
{
node = companyhome.childrenByXPath(xpath)[0];
}
catch(e)
{
return null;
}
return node;
}
model.tagQuery = tagQuery(); model.tagQuery = tagQuery();

View File

@@ -1,3 +1,5 @@
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/parse-args.lib.js">
/** /**
* Copyright (C) 2005-2010 Alfresco Software Limited. * Copyright (C) 2005-2010 Alfresco Software Limited.
* *
@@ -47,7 +49,7 @@ function main()
id = url.templateArgs.id; id = url.templateArgs.id;
nodeRef = storeType + "://" + storeId + "/" + id; nodeRef = storeType + "://" + storeId + "/" + id;
rootNode = resolveVirtualNodeRef(nodeRef); rootNode = ParseArgs.resolveNode(nodeRef);
if (rootNode == null) if (rootNode == null)
{ {
rootNode = search.findNode(nodeRef); rootNode = search.findNode(nodeRef);
@@ -119,31 +121,6 @@ function main()
} }
} }
/**
* Resolve "virtual" nodeRefs into nodes
*
* @method resolveVirtualNodeRef
* @param virtualNodeRef {string} nodeRef
* @return {ScriptNode|null} Node corresponding to supplied virtual nodeRef. Returns null if supplied nodeRef isn't a "virtual" type
*/
function resolveVirtualNodeRef(nodeRef)
{
var node = null;
if (nodeRef == "alfresco://company/home")
{
node = companyhome;
}
else if (nodeRef == "alfresco://user/home")
{
node = userhome;
}
else if (nodeRef == "alfresco://sites/home")
{
node = companyhome.childrenByXPath("st:sites")[0];
}
return node;
}
/** /**
* Get multiple input values * Get multiple input values
* *

View File

@@ -112,7 +112,7 @@ var ParseArgs =
id = url.templateArgs.id; id = url.templateArgs.id;
nodeRef = storeType + "://" + storeId + "/" + id; nodeRef = storeType + "://" + storeId + "/" + id;
rootNode = ParseArgs.resolveVirtualNodeRef(nodeRef); rootNode = ParseArgs.resolveNode(nodeRef);
if (rootNode == null) if (rootNode == null)
{ {
rootNode = search.findNode(nodeRef); rootNode = search.findNode(nodeRef);
@@ -203,23 +203,53 @@ var ParseArgs =
* Resolve "virtual" nodeRefs into nodes * Resolve "virtual" nodeRefs into nodes
* *
* @method resolveVirtualNodeRef * @method resolveVirtualNodeRef
* @param virtualNodeRef {string} nodeRef * @deprecated for ParseArgs.resolveNode
* @return {ScriptNode|null} Node corresponding to supplied virtual nodeRef. Returns null if supplied nodeRef isn't a "virtual" type
*/ */
resolveVirtualNodeRef: function ParseArgs_resolveVirtualNodeRef(nodeRef) resolveVirtualNodeRef: function ParseArgs_resolveVirtualNodeRef(nodeRef)
{
if (logger.isLoggingEnabled())
{
logger.log("WARNING: ParseArgs.resolveVirtualNodeRef is deprecated for ParseArgs.resolveNode");
}
return ParseArgs.resolveNode(nodeRef);
},
/**
* Resolve "virtual" nodeRefs, nodeRefs and xpath expressions into nodes
*
* @method resolveNode
* @param reference {string} "virtual" nodeRef, nodeRef or xpath expressions
* @return {ScriptNode|null} Node corresponding to supplied expression. Returns null if node cannot be resolved.
*/
resolveNode: function ParseArgs_resolveNode(reference)
{ {
var node = null; var node = null;
if (nodeRef == "alfresco://company/home") try
{ {
node = companyhome; if (reference == "alfresco://company/home")
{
node = companyhome;
}
else if (reference == "alfresco://user/home")
{
node = userhome;
}
else if (reference == "alfresco://sites/home")
{
node = companyhome.childrenByXPath("st:sites")[0];
}
else if (reference.indexOf("://") > 0)
{
node = search.findNode(reference);
}
else if (reference.substring(0, 1) == "/")
{
node = search.xpathSearch(reference)[0];
}
} }
else if (nodeRef == "alfresco://user/home") catch (e)
{ {
node = userhome; return null;
}
else if (nodeRef == "alfresco://sites/home")
{
node = companyhome.childrenByXPath("st:sites")[0];
} }
return node; return node;
} }

View File

@@ -1,3 +1,5 @@
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js">
/** /**
* Document List Component: action * Document List Component: action
* *
@@ -225,24 +227,11 @@ function getNodeRefInputParams()
id = url.templateArgs.id; id = url.templateArgs.id;
var nodeRef = storeType + "://" + storeId + "/" + id, var nodeRef = storeType + "://" + storeId + "/" + id,
rootNode = null; rootNode = ParseArgs.resolveNode(nodeRef);
if (nodeRef == "alfresco://company/home") if (rootNode === null)
{ {
rootNode = companyhome; return "'" + nodeRef + "' is not a valid nodeRef.";
}
else if (nodeRef == "alfresco://user/home")
{
rootNode = userhome;
}
else
{
rootNode = search.findNode(nodeRef);
if (rootNode === null)
{
return "'" + nodeRef + "' is not a valid nodeRef.";
}
} }
// Populate the return object // Populate the return object

View File

@@ -15,12 +15,15 @@ function getDoclist()
{ {
return; return;
} }
parsedArgs.pathNode = ParseArgs.resolveNode(parsedArgs.nodeRef);
parsedArgs.location = Common.getLocation(parsedArgs.pathNode, parsedArgs.libraryRoot);
var filter = args.filter, var filter = args.filter,
items = []; items = [];
var favourites = Common.getFavourites(), var favourites = Common.getFavourites(),
node = parsedArgs.rootNode, node = parsedArgs.pathNode,
parent = parent =
{ {
node: node.parent, node: node.parent,

View File

@@ -274,6 +274,12 @@ var ParseArgs =
nodeRef = null, nodeRef = null,
path = ""; path = "";
// Is this library rooted from a non-site nodeRef?
if (libraryRoot !== null)
{
libraryRoot = ParseArgs.resolveNode(libraryRoot);
}
if (url.templateArgs.store_type !== null) if (url.templateArgs.store_type !== null)
{ {
/** /**
@@ -284,15 +290,11 @@ var ParseArgs =
id = url.templateArgs.id; id = url.templateArgs.id;
nodeRef = storeType + "://" + storeId + "/" + id; nodeRef = storeType + "://" + storeId + "/" + id;
rootNode = ParseArgs.resolveVirtualNodeRef(nodeRef); rootNode = libraryRoot || ParseArgs.resolveNode(nodeRef);
if (rootNode == null) if (rootNode == null)
{ {
rootNode = search.findNode(nodeRef); status.setCode(status.STATUS_NOT_FOUND, "Not a valid nodeRef: '" + nodeRef + "'");
if (rootNode === null) return null;
{
status.setCode(status.STATUS_NOT_FOUND, "Not a valid nodeRef: '" + nodeRef + "'");
return null;
}
} }
// Special case: make sure filter picks up correct mode // Special case: make sure filter picks up correct mode
@@ -345,19 +347,13 @@ var ParseArgs =
// Path input? // Path input?
path = url.templateArgs.path || ""; path = url.templateArgs.path || "";
pathNode = path.length > 0 ? rootNode.childByNamePath(path) : rootNode; pathNode = path.length > 0 ? rootNode.childByNamePath(path) : (pathNode || rootNode);
if (pathNode === null) if (pathNode === null)
{ {
status.setCode(status.STATUS_NOT_FOUND, "Path not found: '" + path + "'"); status.setCode(status.STATUS_NOT_FOUND, "Path not found: '" + path + "'");
return null; return null;
} }
// Is this library rooted from a non-site nodeRef?
if (libraryRoot !== null)
{
libraryRoot = ParseArgs.resolveVirtualNodeRef(libraryRoot) || search.findNode(libraryRoot);
}
var objRet = var objRet =
{ {
rootNode: rootNode, rootNode: rootNode,
@@ -383,23 +379,53 @@ var ParseArgs =
* Resolve "virtual" nodeRefs into nodes * Resolve "virtual" nodeRefs into nodes
* *
* @method resolveVirtualNodeRef * @method resolveVirtualNodeRef
* @param virtualNodeRef {string} nodeRef * @deprecated for ParseArgs.resolveNode
* @return {ScriptNode|null} Node corresponding to supplied virtual nodeRef. Returns null if supplied nodeRef isn't a "virtual" type
*/ */
resolveVirtualNodeRef: function ParseArgs_resolveVirtualNodeRef(nodeRef) resolveVirtualNodeRef: function ParseArgs_resolveVirtualNodeRef(nodeRef)
{
if (logger.isLoggingEnabled())
{
logger.log("WARNING: ParseArgs.resolveVirtualNodeRef is deprecated for ParseArgs.resolveNode");
}
return ParseArgs.resolveNode(nodeRef);
},
/**
* Resolve "virtual" nodeRefs, nodeRefs and xpath expressions into nodes
*
* @method resolveNode
* @param reference {string} "virtual" nodeRef, nodeRef or xpath expressions
* @return {ScriptNode|null} Node corresponding to supplied expression. Returns null if node cannot be resolved.
*/
resolveNode: function ParseArgs_resolveNode(reference)
{ {
var node = null; var node = null;
if (nodeRef == "alfresco://company/home") try
{ {
node = companyhome; if (reference == "alfresco://company/home")
{
node = companyhome;
}
else if (reference == "alfresco://user/home")
{
node = userhome;
}
else if (reference == "alfresco://sites/home")
{
node = companyhome.childrenByXPath("st:sites")[0];
}
else if (reference.indexOf("://") > 0)
{
node = search.findNode(reference);
}
else if (reference.substring(0, 1) == "/")
{
node = search.xpathSearch(reference)[0];
}
} }
else if (nodeRef == "alfresco://user/home") catch (e)
{ {
node = userhome; return null;
}
else if (nodeRef == "alfresco://sites/home")
{
node = companyhome.childrenByXPath("st:sites")[0];
} }
return node; return node;
}, },

View File

@@ -14,7 +14,7 @@ function getPermissions()
storeId = url.templateArgs.store_id, storeId = url.templateArgs.store_id,
id = url.templateArgs.id, id = url.templateArgs.id,
nodeRef = storeType + "://" + storeId + "/" + id, nodeRef = storeType + "://" + storeId + "/" + id,
node = ParseArgs.resolveVirtualNodeRef(nodeRef); node = ParseArgs.resolveNode(nodeRef);
if (node == null) if (node == null)
{ {

View File

@@ -15,7 +15,7 @@ function main()
storeId = url.templateArgs.store_id, storeId = url.templateArgs.store_id,
id = url.templateArgs.id, id = url.templateArgs.id,
nodeRef = storeType + "://" + storeId + "/" + id, nodeRef = storeType + "://" + storeId + "/" + id,
node = ParseArgs.resolveVirtualNodeRef(nodeRef); node = ParseArgs.resolveNode(nodeRef);
if (node == null) if (node == null)
{ {