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()
{
var nodeRef = args.n,
var rootNode = args.n,
maxResults = args.m,
sortOrder = args.s,
tags = [],
countMin = Number.MAX_VALUE,
countMax = 0;
/* nodeRef input */
/* rootNode input */
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)
{
@@ -144,4 +144,25 @@ function resolveVirtualNodeRef(nodeRef)
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();

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.
*
@@ -47,7 +49,7 @@ function main()
id = url.templateArgs.id;
nodeRef = storeType + "://" + storeId + "/" + id;
rootNode = resolveVirtualNodeRef(nodeRef);
rootNode = ParseArgs.resolveNode(nodeRef);
if (rootNode == null)
{
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
*

View File

@@ -112,7 +112,7 @@ var ParseArgs =
id = url.templateArgs.id;
nodeRef = storeType + "://" + storeId + "/" + id;
rootNode = ParseArgs.resolveVirtualNodeRef(nodeRef);
rootNode = ParseArgs.resolveNode(nodeRef);
if (rootNode == null)
{
rootNode = search.findNode(nodeRef);
@@ -203,24 +203,54 @@ var ParseArgs =
* 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
* @deprecated for ParseArgs.resolveNode
*/
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;
if (nodeRef == "alfresco://company/home")
try
{
if (reference == "alfresco://company/home")
{
node = companyhome;
}
else if (nodeRef == "alfresco://user/home")
else if (reference == "alfresco://user/home")
{
node = userhome;
}
else if (nodeRef == "alfresco://sites/home")
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];
}
}
catch (e)
{
return null;
}
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
*
@@ -225,25 +227,12 @@ function getNodeRefInputParams()
id = url.templateArgs.id;
var nodeRef = storeType + "://" + storeId + "/" + id,
rootNode = null;
if (nodeRef == "alfresco://company/home")
{
rootNode = companyhome;
}
else if (nodeRef == "alfresco://user/home")
{
rootNode = userhome;
}
else
{
rootNode = search.findNode(nodeRef);
rootNode = ParseArgs.resolveNode(nodeRef);
if (rootNode === null)
{
return "'" + nodeRef + "' is not a valid nodeRef.";
}
}
// Populate the return object
params =

View File

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

View File

@@ -274,6 +274,12 @@ var ParseArgs =
nodeRef = null,
path = "";
// Is this library rooted from a non-site nodeRef?
if (libraryRoot !== null)
{
libraryRoot = ParseArgs.resolveNode(libraryRoot);
}
if (url.templateArgs.store_type !== null)
{
/**
@@ -284,16 +290,12 @@ var ParseArgs =
id = url.templateArgs.id;
nodeRef = storeType + "://" + storeId + "/" + id;
rootNode = ParseArgs.resolveVirtualNodeRef(nodeRef);
rootNode = libraryRoot || ParseArgs.resolveNode(nodeRef);
if (rootNode == null)
{
rootNode = search.findNode(nodeRef);
if (rootNode === null)
{
status.setCode(status.STATUS_NOT_FOUND, "Not a valid nodeRef: '" + nodeRef + "'");
return null;
}
}
// Special case: make sure filter picks up correct mode
if (type == null && args.filter == null)
@@ -345,19 +347,13 @@ var ParseArgs =
// Path input?
path = url.templateArgs.path || "";
pathNode = path.length > 0 ? rootNode.childByNamePath(path) : rootNode;
pathNode = path.length > 0 ? rootNode.childByNamePath(path) : (pathNode || rootNode);
if (pathNode === null)
{
status.setCode(status.STATUS_NOT_FOUND, "Path not found: '" + path + "'");
return null;
}
// Is this library rooted from a non-site nodeRef?
if (libraryRoot !== null)
{
libraryRoot = ParseArgs.resolveVirtualNodeRef(libraryRoot) || search.findNode(libraryRoot);
}
var objRet =
{
rootNode: rootNode,
@@ -383,24 +379,54 @@ var ParseArgs =
* 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
* @deprecated for ParseArgs.resolveNode
*/
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;
if (nodeRef == "alfresco://company/home")
try
{
if (reference == "alfresco://company/home")
{
node = companyhome;
}
else if (nodeRef == "alfresco://user/home")
else if (reference == "alfresco://user/home")
{
node = userhome;
}
else if (nodeRef == "alfresco://sites/home")
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];
}
}
catch (e)
{
return null;
}
return node;
},

View File

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

View File

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