Renamed DB to scholar.sqlite, since that seems to be the current fashion
Added some new core functions: - Scholar.varDump(), after PHP's var_dump() - Scholar.flattenArguments(), to flatten mixed array/literal argument lists into a single array - Scholar.join() -- a version of join() that operates externally, for use on, for example, the arguments object (safer than extending Object) - Scholar.Hash, a slightly smarter associative array -- not perfect, but brings a proper length property and a few convenience methods (and allows for other additions) -- should probably be limited to places where the length property or other additional additions are needed, since its use is a little non-standard (e.g. you have to remember to do _for (i in arr.items)_ rather than just _for (i in arr)_, to use set(), etc.)
This commit is contained in:
		
					parent
					
						
							
								50eddb05ee
							
						
					
				
			
			
				commit
				
					
						b88b767b0b
					
				
			
		
					 1 changed files with 161 additions and 5 deletions
				
			
		|  | @ -1,7 +1,9 @@ | ||||||
| const SCHOLAR_CONFIG = { | const SCHOLAR_CONFIG = { | ||||||
| 	DB_FILE : 'scholar.sdb', | 	GUID: 'scholar@chnm', | ||||||
| 	DB_VERSION : 1, | 	DB_FILE: 'scholar.sqlite', | ||||||
| 	DEBUG_LOGGING : true | 	DB_VERSION: 2, | ||||||
|  | 	DB_REBUILD: false, // erase DB and recreate from schema
 | ||||||
|  | 	DEBUG_LOGGING: true | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
|  | @ -12,9 +14,10 @@ var Scholar = { | ||||||
| 	 * Initialize the extension | 	 * Initialize the extension | ||||||
| 	 */ | 	 */ | ||||||
| 	init: function() { | 	init: function() { | ||||||
| 		scholarDB.updateSchema(); | 		Scholar_DB.updateSchema(); | ||||||
| 	}, | 	}, | ||||||
| 	 | 	 | ||||||
|  | 	 | ||||||
| 	/* | 	/* | ||||||
| 	 * Debug logging function | 	 * Debug logging function | ||||||
| 	 * | 	 * | ||||||
|  | @ -47,7 +50,160 @@ var Scholar = { | ||||||
| 			dump('scholar(' + level + '): ' + message); | 			dump('scholar(' + level + '): ' + message); | ||||||
| 		} | 		} | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	}, | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
|  | 	/** | ||||||
|  | 	 * PHP var_dump equivalent for JS | ||||||
|  | 	 * | ||||||
|  | 	 * Adapted from http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html
 | ||||||
|  | 	 */ | ||||||
|  | 	varDump: function(arr,level) { | ||||||
|  | 		var dumped_text = ""; | ||||||
|  | 		if (!level){ | ||||||
|  | 			level = 0; | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		// The padding given at the beginning of the line.
 | ||||||
|  | 		var level_padding = ""; | ||||||
|  | 		for (var j=0;j<level+1;j++){ | ||||||
|  | 			level_padding += "    "; | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		if (typeof(arr) == 'object') { // Array/Hashes/Objects
 | ||||||
|  | 			for (var item in arr) { | ||||||
|  | 				var value = arr[item]; | ||||||
|  | 				 | ||||||
|  | 				if (typeof(value) == 'object') { // If it is an array,
 | ||||||
|  | 					dumped_text += level_padding + "'" + item + "' ...\n"; | ||||||
|  | 					dumped_text += arguments.callee(value,level+1); | ||||||
|  | 				} | ||||||
|  | 				else { | ||||||
|  | 					if (typeof value == 'function'){ | ||||||
|  | 						dumped_text += level_padding + "'" + item + "' => function(...){...} \n"; | ||||||
|  | 					} | ||||||
|  | 					else { | ||||||
|  | 						dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n"; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		else { // Stings/Chars/Numbers etc.
 | ||||||
|  | 			dumped_text = "===>"+arr+"<===("+typeof(arr)+")"; | ||||||
|  | 		} | ||||||
|  | 		return dumped_text; | ||||||
|  | 	}, | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
|  | 	/* | ||||||
|  | 	 * Flattens mixed arrays/values in a passed _arguments_ object and returns | ||||||
|  | 	 * an array of values -- allows for functions to accept both arrays of | ||||||
|  | 	 * values and/or an arbitrary number of individual values | ||||||
|  | 	 */ | ||||||
|  | 	flattenArguments: function(args){ | ||||||
|  | 		var returns = new Array(); | ||||||
|  | 		 | ||||||
|  | 		for (var i=0; i<args.length; i++){ | ||||||
|  | 			if (typeof args[i]=='object'){ | ||||||
|  | 				for (var j=0; j<args[i].length; j++){ | ||||||
|  | 					returns.push(args[i][j]); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				returns.push(args[i]); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		return returns; | ||||||
|  | 	}, | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
|  | 	/* | ||||||
|  | 	 * A version of join() that operates externally for use on objects other | ||||||
|  | 	 * than arrays (e.g. _arguments_) | ||||||
|  | 	 * | ||||||
|  | 	 * Note that this is safer than extending Object() | ||||||
|  | 	 */ | ||||||
|  | 	join: function(obj, delim){ | ||||||
|  | 		var a = []; | ||||||
|  | 		for (var i=0, len=obj.length; i<len; i++){ | ||||||
|  | 			a.push(obj[i]); | ||||||
|  | 		} | ||||||
|  | 		return a.join(delim); | ||||||
|  | 	}, | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
|  | 	/* | ||||||
|  | 	 * Class for creating hash arrays that behave a bit more sanely | ||||||
|  | 	 * | ||||||
|  | 	 *   Hashes can be created in the constructor by alternating key and val: | ||||||
|  | 	 * | ||||||
|  | 	 *   var hasharray = new Scholar.Hash('foo','foovalue','bar','barvalue'); | ||||||
|  | 	 * | ||||||
|  | 	 *   Or using hasharray.set(key, val) | ||||||
|  | 	 * | ||||||
|  | 	 *   _val_ defaults to true if not provided | ||||||
|  | 	 * | ||||||
|  | 	 *   If using foreach-style looping, be sure to use _for (i in arr.items)_ | ||||||
|  | 	 *   rather than just _for (i in arr)_, or else you'll end up with the | ||||||
|  | 	 *   methods and members instead of the hash items | ||||||
|  | 	 * | ||||||
|  | 	 *   Most importantly, hasharray.length will work as expected, even with | ||||||
|  | 	 *   non-numeric keys | ||||||
|  | 	 * | ||||||
|  | 	 * Adapated from http://www.mojavelinux.com/articles/javascript_hashes.html
 | ||||||
|  | 	 * (c) Mojavelinux, Inc. | ||||||
|  | 	 * License: Creative Commons | ||||||
|  | 	 */ | ||||||
|  | 	 Hash: function(){ | ||||||
|  | 		 this.length = 0; | ||||||
|  | 		 this.items = new Array(); | ||||||
|  | 		  | ||||||
|  | 		 // Public methods defined on prototype below
 | ||||||
|  | 		  | ||||||
|  | 		 for (var i = 0; i < arguments.length; i += 2) { | ||||||
|  | 			 if (typeof(arguments[i + 1]) != 'undefined') { | ||||||
|  | 				 this.items[arguments[i]] = arguments[i + 1]; | ||||||
|  | 				 this.length++; | ||||||
|  | 			 } | ||||||
|  | 		 } | ||||||
|  | 	 } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Scholar.Hash.prototype.get = function(in_key){ | ||||||
|  | 	return this.items[in_key]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | Scholar.Hash.prototype.set = function(in_key, in_value){ | ||||||
|  | 	// Default to a boolean hash if value not provided
 | ||||||
|  | 	if (typeof(in_value) == 'undefined'){ | ||||||
|  | 		in_value = true; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	if (typeof(this.items[in_key]) == 'undefined') { | ||||||
|  | 		this.length++; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	this.items[in_key] = in_value; | ||||||
|  | 	 | ||||||
|  | 	return in_value; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Scholar.Hash.prototype.remove = function(in_key){ | ||||||
|  | 	var tmp_value; | ||||||
|  | 	if (typeof(this.items[in_key]) != 'undefined') { | ||||||
|  | 		this.length--; | ||||||
|  | 		var tmp_value = this.items[in_key]; | ||||||
|  | 		delete this.items[in_key]; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	return tmp_value; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Scholar.Hash.prototype.has = function(in_key){ | ||||||
|  | 	return typeof(this.items[in_key]) != 'undefined'; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| window.addEventListener("load", function(e) { Scholar.init(e); }, false); | window.addEventListener("load", function(e) { Scholar.init(e); }, false); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Stillman
				Dan Stillman