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 = {
|
||||
DB_FILE : 'scholar.sdb',
|
||||
DB_VERSION : 1,
|
||||
DEBUG_LOGGING : true
|
||||
GUID: 'scholar@chnm',
|
||||
DB_FILE: 'scholar.sqlite',
|
||||
DB_VERSION: 2,
|
||||
DB_REBUILD: false, // erase DB and recreate from schema
|
||||
DEBUG_LOGGING: true
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -12,9 +14,10 @@ var Scholar = {
|
|||
* Initialize the extension
|
||||
*/
|
||||
init: function() {
|
||||
scholarDB.updateSchema();
|
||||
Scholar_DB.updateSchema();
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
* Debug logging function
|
||||
*
|
||||
|
@ -47,7 +50,160 @@ var Scholar = {
|
|||
dump('scholar(' + level + '): ' + message);
|
||||
}
|
||||
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);
|
||||
|
|
Loading…
Reference in a new issue