You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2010/09/10 19:43:58 UTC

svn commit: r995895 - /sling/trunk/bundles/servlets/post/src/main/resources/system/sling.js

Author: justin
Date: Fri Sep 10 17:43:57 2010
New Revision: 995895

URL: http://svn.apache.org/viewvc?rev=995895&view=rev
Log:
tabs -> spaces

Modified:
    sling/trunk/bundles/servlets/post/src/main/resources/system/sling.js

Modified: sling/trunk/bundles/servlets/post/src/main/resources/system/sling.js
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/resources/system/sling.js?rev=995895&r1=995894&r2=995895&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/post/src/main/resources/system/sling.js (original)
+++ sling/trunk/bundles/servlets/post/src/main/resources/system/sling.js Fri Sep 10 17:43:57 2010
@@ -16,9 +16,9 @@
  */
 
 /**
- * 	The sling javascript client gives access to a JCR repository
- *	from client-side java code, using the sling post servlet as a back-end.	   
- *	 
+ *  The sling javascript client gives access to a JCR repository
+ *  from client-side java code, using the sling post servlet as a back-end.    
+ *   
  * @version $Rev: $, $Date: 2007-03-27 16:30:52 +0200 (Tue, 27 Mar 2007) $
  */
 
@@ -27,310 +27,310 @@ var Sling = null;
 // start sling code scope
 (function() {
 
-	Sling = new Object();
-	Sling.NAME_OF_THIS_FILE = "sling.js";
-	Sling.PATH_OF_THIS_FILE = "/system/sling.js";
-	
-	/** This method tries to figure out what to do with a page */
-	Sling.wizard = function() {
-	    //TODO add lots of magic here
-	    var form=document.getElementById("slingform");
-	    if (!form) form=document.forms[0];
-	    if (form) {
-	        var sp=new Object();
-	        sp.formElement=form;
-	        Sling.setupPage(sp);
-	    }
-	
-	}
-	/** Call this to merge sling data in an HTML page
-		TODO deprecate other functions
-	*/
-	Sling.setupPage = function(options) {
-	  var tree = Sling.getContent(Sling._getJsonUrl(),1);
-	  
-	  if(options.formElement) {
-		Sling._setFormValues(options.formElement,Sling._getJsonUrl(),tree);
-	  }
-	  
-	  if(options.displayElement) {
-	  	Sling.displayValues(options.displayElement,tree);
-	  }
-	}
-	
-	/**
-	 * HTTP GET XHR Helper
-	 * @param {String} url The URL
-	 * @return the XHR object, use .responseText for the data
-	 * @type String
-	 */
-	Sling.httpGet = function(url) {
-	    var httpcon = Sling.getXHR();
-	    if (httpcon) {
-			httpcon.open('GET', url, false);
-			httpcon.send(null);
-			return httpcon;
-	    } else {
-			return null;
-	    }
-	}
-	/**
-	 * Produces a "sort-of-json" string representation of a object
-	 * for debugging purposes only
-	 * @param {Object} obj The object
-	 * @param {int} level The indentation level
-	 * @return The result
-	 * @type String
-	 */
-	Sling.dumpObj = function(obj, level) {
-		var res="";
-		for (var a in obj) {
-			if (typeof(obj[a])!="object") {
-				res+=a+":"+obj[a]+"  ";
-			} else {
-				res+=a+": { ";
-				res+=Sling.dumpObj(obj[a])+"} ";
-			}
-		}
-		return (res);
-	}
-	
-	/** Produces an aggregate of get all the property names used
-	 * in a tree as a helper for table oriented display
-	 * @param {Object} obj The Content Tree object
-	 * @param {Object} names internal object used for collecting all
-	 *  the names during the recursion
-	 * @return An Array of names of properties that exist in a tree
-	 * @type Array
-	 */
-	Sling.getAllPropNames = function(obj, names) {
-		var root=false;
-	    if (!names) {
-	        names=new Object();
-	        root=true;
-	    }
-	    for (var a in obj) {
-			if (typeof(obj[a])!="object") {
-	            names[a]="1";
-			} else {
-				getAllPropNames(obj[a], names);
-			}
-	    }
-	    if (root) {
-	        var ar=new Array();
-	        var i=0;
-	        for (var a in ar) {
-	            ar[i]=a;
-	            i++;
-	        }
-	        names=ar;
-	    }
-	    return (names);
-	}
-	
-	/** Reads a tree of items given a maxlevel from the repository as JSON
-	 * @param {String} path Path into the current workspace
-	 * @param {int} maxlevel maximum depth to traverse to
-	 * @param {Array} filters filter only these properties
-	 * @return An Object tree of content nodes and properties, null if not found
-	 * @type Object
-	 */
-	Sling.getContent = function(path, maxlevels, filter) {
-	    var obj=new Object();
-	    if (!path)  {
-	        path=Sling.currentPath;
-	    }
-	    if (path.indexOf("/")==0) {
-			/*
-			this assumes that paths that start with a slash
-			are meant to be workspace paths rather than URLs
-			and therefore need some additions before they are sent
-			to the server
-			*/
-			if(maxlevels == "0" || maxlevels) {
-			  maxlevels = "." + maxlevels;
-			} else {
-			  maxlevels = "";
-			}
-			path=Sling.baseurl + path + maxlevels + ".json";
-		}
-	    //checking for a trailing "/*"
-	    if (path.indexOf("/*")>=0) return obj;
-	
-		// TODO for now we explicitely defeat caching on this...there must be a better way
-		// but in tests IE6 tends to cache too much
-		var passThroughCacheParam = "?clock=" + new Date().getTime();
-	    var res=Sling.httpGet(path + passThroughCacheParam + (maxlevels?"&maxlevels="+maxlevels:""));
-	    
-	    if(res.status == 200) {
-	    	var obj=Sling.evalString(res.responseText);
-			if (!filter) {
-				for (var a in obj) {
-					if (a.indexOf("jcr:")==0) delete(obj[a]);
-				}
-			}
-			return obj;
-	    }
-	    return null; 
-	}
-	
-	/** Remove content by path */
-	Sling.removeContent = function(path) {
-		var httpcon = Sling.getXHR();
-		if (httpcon) {
-			var params = ":operation=delete";
-			httpcon.open('POST', Sling.baseurl + path, false);
+    Sling = new Object();
+    Sling.NAME_OF_THIS_FILE = "sling.js";
+    Sling.PATH_OF_THIS_FILE = "/system/sling.js";
+    
+    /** This method tries to figure out what to do with a page */
+    Sling.wizard = function() {
+        //TODO add lots of magic here
+        var form=document.getElementById("slingform");
+        if (!form) form=document.forms[0];
+        if (form) {
+            var sp=new Object();
+            sp.formElement=form;
+            Sling.setupPage(sp);
+        }
+    
+    }
+    /** Call this to merge sling data in an HTML page
+        TODO deprecate other functions
+    */
+    Sling.setupPage = function(options) {
+      var tree = Sling.getContent(Sling._getJsonUrl(),1);
+      
+      if(options.formElement) {
+        Sling._setFormValues(options.formElement,Sling._getJsonUrl(),tree);
+      }
+      
+      if(options.displayElement) {
+        Sling.displayValues(options.displayElement,tree);
+      }
+    }
+    
+    /**
+     * HTTP GET XHR Helper
+     * @param {String} url The URL
+     * @return the XHR object, use .responseText for the data
+     * @type String
+     */
+    Sling.httpGet = function(url) {
+        var httpcon = Sling.getXHR();
+        if (httpcon) {
+            httpcon.open('GET', url, false);
+            httpcon.send(null);
+            return httpcon;
+        } else {
+            return null;
+        }
+    }
+    /**
+     * Produces a "sort-of-json" string representation of a object
+     * for debugging purposes only
+     * @param {Object} obj The object
+     * @param {int} level The indentation level
+     * @return The result
+     * @type String
+     */
+    Sling.dumpObj = function(obj, level) {
+        var res="";
+        for (var a in obj) {
+            if (typeof(obj[a])!="object") {
+                res+=a+":"+obj[a]+"  ";
+            } else {
+                res+=a+": { ";
+                res+=Sling.dumpObj(obj[a])+"} ";
+            }
+        }
+        return (res);
+    }
+    
+    /** Produces an aggregate of get all the property names used
+     * in a tree as a helper for table oriented display
+     * @param {Object} obj The Content Tree object
+     * @param {Object} names internal object used for collecting all
+     *  the names during the recursion
+     * @return An Array of names of properties that exist in a tree
+     * @type Array
+     */
+    Sling.getAllPropNames = function(obj, names) {
+        var root=false;
+        if (!names) {
+            names=new Object();
+            root=true;
+        }
+        for (var a in obj) {
+            if (typeof(obj[a])!="object") {
+                names[a]="1";
+            } else {
+                getAllPropNames(obj[a], names);
+            }
+        }
+        if (root) {
+            var ar=new Array();
+            var i=0;
+            for (var a in ar) {
+                ar[i]=a;
+                i++;
+            }
+            names=ar;
+        }
+        return (names);
+    }
+    
+    /** Reads a tree of items given a maxlevel from the repository as JSON
+     * @param {String} path Path into the current workspace
+     * @param {int} maxlevel maximum depth to traverse to
+     * @param {Array} filters filter only these properties
+     * @return An Object tree of content nodes and properties, null if not found
+     * @type Object
+     */
+    Sling.getContent = function(path, maxlevels, filter) {
+        var obj=new Object();
+        if (!path)  {
+            path=Sling.currentPath;
+        }
+        if (path.indexOf("/")==0) {
+            /*
+            this assumes that paths that start with a slash
+            are meant to be workspace paths rather than URLs
+            and therefore need some additions before they are sent
+            to the server
+            */
+            if(maxlevels == "0" || maxlevels) {
+              maxlevels = "." + maxlevels;
+            } else {
+              maxlevels = "";
+            }
+            path=Sling.baseurl + path + maxlevels + ".json";
+        }
+        //checking for a trailing "/*"
+        if (path.indexOf("/*")>=0) return obj;
+    
+        // TODO for now we explicitely defeat caching on this...there must be a better way
+        // but in tests IE6 tends to cache too much
+        var passThroughCacheParam = "?clock=" + new Date().getTime();
+        var res=Sling.httpGet(path + passThroughCacheParam + (maxlevels?"&maxlevels="+maxlevels:""));
+        
+        if(res.status == 200) {
+            var obj=Sling.evalString(res.responseText);
+            if (!filter) {
+                for (var a in obj) {
+                    if (a.indexOf("jcr:")==0) delete(obj[a]);
+                }
+            }
+            return obj;
+        }
+        return null; 
+    }
+    
+    /** Remove content by path */
+    Sling.removeContent = function(path) {
+        var httpcon = Sling.getXHR();
+        if (httpcon) {
+            var params = ":operation=delete";
+            httpcon.open('POST', Sling.baseurl + path, false);
 
-			// Send the proper header information along with the request
-			httpcon.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
-			httpcon.setRequestHeader("Content-length", params.length);
-			httpcon.setRequestHeader("Connection", "close");
-			httpcon.send(params);
-			return httpcon;
-		} else {
-			return false;
-		}
-	}
-	
-	/** eval str, accepting various object delimiters */
-	Sling.evalString = function(str) {
-		var obj = null;
-	    if(str.indexOf('[')==0) {
-		    eval("obj="+str);
-	    } else if(str.indexOf('{')==0) {
-	        eval("obj="+str);
-	    } else {
-		    eval("obj={"+str+"}");
-		}
-		return obj;
-	}
-	 
-	/** Get "session info" from repository. Mainly answers the question: "Who am I"
-	 *  and "Which workspace am I logged into.
-	 * @return An Object tree containing the session information, null if server status <> 200
-	 * @type Object
-	 */
-	Sling.getSessionInfo = function() {
-	    var res=Sling.httpGet(Sling.baseurl+"/system/sling/info.sessionInfo.json");
-	    if(res.status == 200) {
-	    	return Sling.evalString(res.responseText);
-	    }
-	    return null;
-	}
-	
-	/** Replace extension in a path */
-	Sling._replaceExtension = function(path,newExtension) {
-		var i = path.lastIndexOf(".");
-		if(i >= 0) path = path.substring(0,i);
-		i = path.lastIndexOf(".");
-		if(i >= 0) path = path.substring(0,i);
-		return path + newExtension;
-	}
-	
-	/** Get the JSON data URL that for the current page
-	 *	(assuming a .extension for the current page, .html or something else)	
-	 */
-	Sling._getJsonUrl = function() {
-	  return Sling._replaceExtension(window.location.href,".json");
-	}
-	
-	/** Get the content repository path from the URL
-	 *	(assuming a .extension for the current page, .html or something else)
-	 */
-	Sling._getPath = function() {
-	
-	    var noextensions=Sling._replaceExtension(window.location.href,"");
-	    var path=noextensions.substring(Sling.baseurl.length);
-	    return (path);
-	}
-	
-	/** Display values inside a container: an element inside given container,
-	 *	with an id like ./stuff, has its innerHTML set to the value of stuff
-	 *	in the tree, if it exists.
-	 */
-	Sling.displayValues = function(container,tree) {
-	  if(!tree) {
-	    tree = Sling.getContent(Sling._getJsonUrl(),1);
-	  }
-	  
-	  var elements = container.getElementsByTagName("*"); 
-	  var toSet = new Array();
-	  for (var i = 0; i < elements.length; i++) { 
-	    var value = Sling._getElementValue(elements[i],tree);
-	    if(value) {
-	      toSet[toSet.length] = { e:elements[i], v:value };
-	    }
-	  }
-	  
-	  for(var i = 0; i < toSet.length; i++) {
-	    toSet[i].e.innerHTML = toSet[i].v;
-	  }
-	}
-	
-	/** If e has an ID that matches a property of tree, set e's innerHTML accordingly */
-	Sling._getElementValue = function(e,tree) {
-	  var id = e.getAttribute("id");
-	  if(id) {
-	    return tree[id.substring(2)];
-	  }
-	}
-	
-	  
-	/** Set form elements based on the tree of items passed into the method
-	 * @param {IdOrElement} form the Form element to set, or its id
-	 * @param {String} path passes a string specifying the path
-	 * @param {Object} tree optionally pass the content that you want the
-	 * form to be populated with. This assumes an item tree as returned by
-	 * getContent().
-	 * Returns an object indicating whether data was found on the server.
-	 *
-	 */
-	Sling._setFormValues = function(form, path, tree) {
-		var result = new Object();
-		
-	    /** TODO: deal with abolute paths?
-	     *  TODO: deal with @ValueFrom
-	     */
-	    if (!path) return;
-	
-	    form.setAttribute("action", path);
-	
-	    if (!tree) {
-			tree=Sling.getContent(path,1);
-	    }
-	
-	    var elems=form.elements;
-	    var i=0;
-	    formfieldprefix="";
-	
-	    while (elems.length > i) {
-	        var elem=elems[i];
-	        var a=elem.name;
-	        if (a.indexOf("./")==0) {
-	            formfieldprefix="./";
-	            break;
-	        }
-	        i++;
-	    }
-	
-	    var i=0;
-	    while (elems.length > i) {
-	        var elem=elems[i];
-	        var a=elem.name;
-	        
-			if (a.indexOf("/")==0) {
-				var nodepath=a.substring(0,a.lastIndexOf("/"));
-				var propname=a.substring(a.lastIndexOf("/")+1);
-				var node=Sling.getContent(nodepath);
-				var propval=node[propname];
-			} else if (a.indexOf(formfieldprefix)==0) {
-	            var propname=a.substring(formfieldprefix.length);
-				var propval=tree[propname];
-			}
-			
-			if (propval) {
-            	if (elem.type == "file") {
-            		// cannot edit uplodaded files for now
+            // Send the proper header information along with the request
+            httpcon.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+            httpcon.setRequestHeader("Content-length", params.length);
+            httpcon.setRequestHeader("Connection", "close");
+            httpcon.send(params);
+            return httpcon;
+        } else {
+            return false;
+        }
+    }
+    
+    /** eval str, accepting various object delimiters */
+    Sling.evalString = function(str) {
+        var obj = null;
+        if(str.indexOf('[')==0) {
+            eval("obj="+str);
+        } else if(str.indexOf('{')==0) {
+            eval("obj="+str);
+        } else {
+            eval("obj={"+str+"}");
+        }
+        return obj;
+    }
+     
+    /** Get "session info" from repository. Mainly answers the question: "Who am I"
+     *  and "Which workspace am I logged into.
+     * @return An Object tree containing the session information, null if server status <> 200
+     * @type Object
+     */
+    Sling.getSessionInfo = function() {
+        var res=Sling.httpGet(Sling.baseurl+"/system/sling/info.sessionInfo.json");
+        if(res.status == 200) {
+            return Sling.evalString(res.responseText);
+        }
+        return null;
+    }
+    
+    /** Replace extension in a path */
+    Sling._replaceExtension = function(path,newExtension) {
+        var i = path.lastIndexOf(".");
+        if(i >= 0) path = path.substring(0,i);
+        i = path.lastIndexOf(".");
+        if(i >= 0) path = path.substring(0,i);
+        return path + newExtension;
+    }
+    
+    /** Get the JSON data URL that for the current page
+     *  (assuming a .extension for the current page, .html or something else)   
+     */
+    Sling._getJsonUrl = function() {
+      return Sling._replaceExtension(window.location.href,".json");
+    }
+    
+    /** Get the content repository path from the URL
+     *  (assuming a .extension for the current page, .html or something else)
+     */
+    Sling._getPath = function() {
+    
+        var noextensions=Sling._replaceExtension(window.location.href,"");
+        var path=noextensions.substring(Sling.baseurl.length);
+        return (path);
+    }
+    
+    /** Display values inside a container: an element inside given container,
+     *  with an id like ./stuff, has its innerHTML set to the value of stuff
+     *  in the tree, if it exists.
+     */
+    Sling.displayValues = function(container,tree) {
+      if(!tree) {
+        tree = Sling.getContent(Sling._getJsonUrl(),1);
+      }
+      
+      var elements = container.getElementsByTagName("*"); 
+      var toSet = new Array();
+      for (var i = 0; i < elements.length; i++) { 
+        var value = Sling._getElementValue(elements[i],tree);
+        if(value) {
+          toSet[toSet.length] = { e:elements[i], v:value };
+        }
+      }
+      
+      for(var i = 0; i < toSet.length; i++) {
+        toSet[i].e.innerHTML = toSet[i].v;
+      }
+    }
+    
+    /** If e has an ID that matches a property of tree, set e's innerHTML accordingly */
+    Sling._getElementValue = function(e,tree) {
+      var id = e.getAttribute("id");
+      if(id) {
+        return tree[id.substring(2)];
+      }
+    }
+    
+      
+    /** Set form elements based on the tree of items passed into the method
+     * @param {IdOrElement} form the Form element to set, or its id
+     * @param {String} path passes a string specifying the path
+     * @param {Object} tree optionally pass the content that you want the
+     * form to be populated with. This assumes an item tree as returned by
+     * getContent().
+     * Returns an object indicating whether data was found on the server.
+     *
+     */
+    Sling._setFormValues = function(form, path, tree) {
+        var result = new Object();
+        
+        /** TODO: deal with abolute paths?
+         *  TODO: deal with @ValueFrom
+         */
+        if (!path) return;
+    
+        form.setAttribute("action", path);
+    
+        if (!tree) {
+            tree=Sling.getContent(path,1);
+        }
+    
+        var elems=form.elements;
+        var i=0;
+        formfieldprefix="";
+    
+        while (elems.length > i) {
+            var elem=elems[i];
+            var a=elem.name;
+            if (a.indexOf("./")==0) {
+                formfieldprefix="./";
+                break;
+            }
+            i++;
+        }
+    
+        var i=0;
+        while (elems.length > i) {
+            var elem=elems[i];
+            var a=elem.name;
+            
+            if (a.indexOf("/")==0) {
+                var nodepath=a.substring(0,a.lastIndexOf("/"));
+                var propname=a.substring(a.lastIndexOf("/")+1);
+                var node=Sling.getContent(nodepath);
+                var propval=node[propname];
+            } else if (a.indexOf(formfieldprefix)==0) {
+                var propname=a.substring(formfieldprefix.length);
+                var propval=tree[propname];
+            }
+            
+            if (propval) {
+                if (elem.type == "file") {
+                    // cannot edit uplodaded files for now
                 } else if (elem.type == "checkbox") {
                     var vals;
                     if (typeof(propval)=="object") vals=propval;
@@ -346,76 +346,76 @@ var Sling = null;
                  } else {
                     elem.value=propval;
                  }
-	        }
-	        i++;
-	    }
-	    
-	}
-	
-	/** return Path as specified as the URL Parameter
-	 *  @param URL
-	 *  @return The Path parameter isolated from the URL
-	 *  @type String
-	 */
-	Sling.TODO_NOT_USED_isolatePathFromUrl = function(url) {
-	  var pattern = "[\\?&]Path=([^&#]*)";
-	  var regex = new RegExp( pattern );
-	  var results = regex.exec( url );
-	  if( results == null )
-	        // none found
-	        return "";
-	  else
-	        // found
-	        return unescape(results[1]);
-	}
-	
-	/**
-	 *	Get an XMLHttpRequest in a portable way
-	 *		
-	 */
-	Sling.getXHR = function () {
-		var xhr=null;
-		
-		if(!xhr) {
-			try {
-				// built-in (firefox, recent Opera versions, etc)
-				xhr=new XMLHttpRequest();
-			} catch (e) {
-				// ignore
-			}
-		}
-		
-		if(!xhr) {
-			try {
-				// IE, newer versions
-				xhr=new ActiveXObject("Msxml2.XMLHTTP");
-			} catch (e) {
-				// ignore
-			}
-		}
-		
-		if(!xhr) {
-			try {
-				// IE, older versions
-				xhr=new ActiveXObject("Microsoft.XMLHTTP");
-			} catch (e) {
-				// ignore
-			}
-		}
-		
-		if(!xhr) {
-			alert("Unable to access XMLHttpRequest object, sling will not work!");
-		}
-		
-		return xhr;
-	}
-	
-	// obtain the base_url to communicate with sling on the server
-	var scripts = document.getElementsByTagName("SCRIPT")
-	var script = scripts[scripts.length-1].src
-	Sling.baseurl = script.substring(0,script.length - Sling.PATH_OF_THIS_FILE.length);
-	Sling.currentPath = Sling._getPath();
-	Sling.isNew  = (Sling.currentPath.indexOf("/*")>=0)?true:false;
+            }
+            i++;
+        }
+        
+    }
+    
+    /** return Path as specified as the URL Parameter
+     *  @param URL
+     *  @return The Path parameter isolated from the URL
+     *  @type String
+     */
+    Sling.TODO_NOT_USED_isolatePathFromUrl = function(url) {
+      var pattern = "[\\?&]Path=([^&#]*)";
+      var regex = new RegExp( pattern );
+      var results = regex.exec( url );
+      if( results == null )
+            // none found
+            return "";
+      else
+            // found
+            return unescape(results[1]);
+    }
+    
+    /**
+     *  Get an XMLHttpRequest in a portable way
+     *      
+     */
+    Sling.getXHR = function () {
+        var xhr=null;
+        
+        if(!xhr) {
+            try {
+                // built-in (firefox, recent Opera versions, etc)
+                xhr=new XMLHttpRequest();
+            } catch (e) {
+                // ignore
+            }
+        }
+        
+        if(!xhr) {
+            try {
+                // IE, newer versions
+                xhr=new ActiveXObject("Msxml2.XMLHTTP");
+            } catch (e) {
+                // ignore
+            }
+        }
+        
+        if(!xhr) {
+            try {
+                // IE, older versions
+                xhr=new ActiveXObject("Microsoft.XMLHTTP");
+            } catch (e) {
+                // ignore
+            }
+        }
+        
+        if(!xhr) {
+            alert("Unable to access XMLHttpRequest object, sling will not work!");
+        }
+        
+        return xhr;
+    }
+    
+    // obtain the base_url to communicate with sling on the server
+    var scripts = document.getElementsByTagName("SCRIPT")
+    var script = scripts[scripts.length-1].src
+    Sling.baseurl = script.substring(0,script.length - Sling.PATH_OF_THIS_FILE.length);
+    Sling.currentPath = Sling._getPath();
+    Sling.isNew  = (Sling.currentPath.indexOf("/*")>=0)?true:false;
 
-// end sling code scope	
+// end sling code scope 
 })();