Changed core, DB, and data access methods to create everything under a global Scholar object that can be shared across windows

Added include.js for use in non-browser.xul windows to bring in the SCHOLAR_CONFIG and Scholar objects

Adjusted sidebar to use shared object

Added test line (displayable by clicking "Hello, World" before and after sidebar load to demonstrate cross-window access
This commit is contained in:
Dan Stillman 2006-03-20 21:47:22 +00:00
parent dc4f276297
commit 9abad678fe
7 changed files with 116 additions and 94 deletions

View file

@ -1,9 +1,9 @@
/* /*
* Constructor for Object object * Constructor for Object object
* *
* Generally should be called through Scholar_Objects rather than directly * Generally should be called through Scholar.Objects rather than directly
*/ */
function Scholar_Object(){ Scholar.Object = function(){
this._init(); this._init();
// Accept objectTypeID, folderID and orderIndex in constructor // Accept objectTypeID, folderID and orderIndex in constructor
@ -13,7 +13,7 @@ function Scholar_Object(){
} }
} }
Scholar_Object.prototype._init = function(){ Scholar.Object.prototype._init = function(){
// //
// Public members for access by public methods -- do not access directly // Public members for access by public methods -- do not access directly
// //
@ -33,16 +33,16 @@ Scholar_Object.prototype._init = function(){
/* /*
* Check if the specified field is a primary field from the objects table * Check if the specified field is a primary field from the objects table
*/ */
Scholar_Object.prototype.isPrimaryField = function(field){ Scholar.Object.prototype.isPrimaryField = function(field){
if (!Scholar_Object.primaryFields){ if (!Scholar.Object.primaryFields){
Scholar_Object.primaryFields = Scholar_DB.getColumnHash('objects'); Scholar.Object.primaryFields = Scholar.DB.getColumnHash('objects');
Scholar_Object.primaryFields['firstCreator'] = true; Scholar.Object.primaryFields['firstCreator'] = true;
} }
return !!Scholar_Object.primaryFields[field]; return !!Scholar.Object.primaryFields[field];
} }
Scholar_Object.editableFields = { Scholar.Object.editableFields = {
title: true, title: true,
source: true, source: true,
rights: true rights: true
@ -51,20 +51,20 @@ Scholar_Object.editableFields = {
/* /*
* Check if the specified primary field can be changed with setField() * Check if the specified primary field can be changed with setField()
*/ */
Scholar_Object.prototype.isEditableField = function(field){ Scholar.Object.prototype.isEditableField = function(field){
return !!Scholar_Object.editableFields[field]; return !!Scholar.Object.editableFields[field];
} }
/* /*
* Build object from database * Build object from database
*/ */
Scholar_Object.prototype.loadFromID = function(id){ Scholar.Object.prototype.loadFromID = function(id){
var sql = 'SELECT O.*, lastName AS firstCreator FROM objects O ' var sql = 'SELECT O.*, lastName AS firstCreator FROM objects O '
+ 'LEFT JOIN objectCreators OC USING (objectID) ' + 'LEFT JOIN objectCreators OC USING (objectID) '
+ 'LEFT JOIN creators USING (creatorID) ' + 'LEFT JOIN creators USING (creatorID) '
+ 'WHERE objectID=' + id + ' AND OC.orderIndex=0'; + 'WHERE objectID=' + id + ' AND OC.orderIndex=0';
var row = Scholar_DB.rowQuery(sql); var row = Scholar.DB.rowQuery(sql);
this.loadFromRow(row); this.loadFromRow(row);
} }
@ -72,7 +72,7 @@ Scholar_Object.prototype.loadFromID = function(id){
/* /*
* Populate basic object data from a database row * Populate basic object data from a database row
*/ */
Scholar_Object.prototype.loadFromRow = function(row){ Scholar.Object.prototype.loadFromRow = function(row){
this._init(); this._init();
for (col in row){ for (col in row){
if (this.isPrimaryField(col) || col=='firstCreator'){ if (this.isPrimaryField(col) || col=='firstCreator'){
@ -86,18 +86,18 @@ Scholar_Object.prototype.loadFromRow = function(row){
/* /*
* Check if any data fields have changed since last save * Check if any data fields have changed since last save
*/ */
Scholar_Object.prototype.hasChanged = function(){ Scholar.Object.prototype.hasChanged = function(){
return (this._changed.length || this._changedCreators.length || return (this._changed.length || this._changedCreators.length ||
this._changedObjectData.length); this._changedObjectData.length);
} }
Scholar_Object.prototype.getID = function(){ Scholar.Object.prototype.getID = function(){
return this._data['objectID'] ? this._data['objectID'] : false; return this._data['objectID'] ? this._data['objectID'] : false;
} }
Scholar_Object.prototype.getType = function(){ Scholar.Object.prototype.getType = function(){
return this._data['objectTypeID'] ? this._data['objectTypeID'] : false; return this._data['objectTypeID'] ? this._data['objectTypeID'] : false;
} }
@ -105,7 +105,7 @@ Scholar_Object.prototype.getType = function(){
/* /*
* Set or change the object's type * Set or change the object's type
*/ */
Scholar_Object.prototype.setType = function(objectTypeID){ Scholar.Object.prototype.setType = function(objectTypeID){
if (objectTypeID==this.getType()){ if (objectTypeID==this.getType()){
return true; return true;
} }
@ -116,7 +116,7 @@ Scholar_Object.prototype.setType = function(objectTypeID){
+ 'WHERE objectTypeID=' + this.getType() + ' AND fieldID NOT IN ' + 'WHERE objectTypeID=' + this.getType() + ' AND fieldID NOT IN '
+ '(SELECT fieldID FROM objectTypeFields WHERE objectTypeID=' + '(SELECT fieldID FROM objectTypeFields WHERE objectTypeID='
+ objectTypeID + ')'; + objectTypeID + ')';
var obsoleteFields = Scholar_DB.columnQuery(sql); var obsoleteFields = Scholar.DB.columnQuery(sql);
if (obsoleteFields){ if (obsoleteFields){
for (var i=0; i<obsoleteFields.length; i++){ for (var i=0; i<obsoleteFields.length; i++){
@ -134,7 +134,7 @@ Scholar_Object.prototype.setType = function(objectTypeID){
/* /*
* Returns the number of creators for this object * Returns the number of creators for this object
*/ */
Scholar_Object.prototype.numCreators = function(){ Scholar.Object.prototype.numCreators = function(){
if (this.getID() && !this._creatorsLoaded){ if (this.getID() && !this._creatorsLoaded){
this._loadCreators(); this._loadCreators();
} }
@ -144,7 +144,7 @@ Scholar_Object.prototype.numCreators = function(){
/* /*
* Returns an array of the creator data at the given position, or false if none * Returns an array of the creator data at the given position, or false if none
*/ */
Scholar_Object.prototype.getCreator = function(pos){ Scholar.Object.prototype.getCreator = function(pos){
if (this.getID() && !this._creatorsLoaded){ if (this.getID() && !this._creatorsLoaded){
this._loadCreators(); this._loadCreators();
} }
@ -159,7 +159,7 @@ Scholar_Object.prototype.getCreator = function(pos){
/* /*
* Set or update the creator at the specified position * Set or update the creator at the specified position
*/ */
Scholar_Object.prototype.setCreator = function(orderIndex, firstName, lastName, creatorTypeID){ Scholar.Object.prototype.setCreator = function(orderIndex, firstName, lastName, creatorTypeID){
if (this.getID() && !this._creatorsLoaded){ if (this.getID() && !this._creatorsLoaded){
this._loadCreators(); this._loadCreators();
} }
@ -193,7 +193,7 @@ Scholar_Object.prototype.setCreator = function(orderIndex, firstName, lastName,
/* /*
* Remove a creator and shift others down * Remove a creator and shift others down
*/ */
Scholar_Object.prototype.removeCreator = function(orderIndex){ Scholar.Object.prototype.removeCreator = function(orderIndex){
if (this.getID() && !this._creatorsLoaded){ if (this.getID() && !this._creatorsLoaded){
this._loadCreators(); this._loadCreators();
} }
@ -218,7 +218,7 @@ Scholar_Object.prototype.removeCreator = function(orderIndex){
* *
* Field can be passed as fieldID or fieldName * Field can be passed as fieldID or fieldName
*/ */
Scholar_Object.prototype.getField = function(field){ Scholar.Object.prototype.getField = function(field){
//Scholar.debug('Requesting field ' + field + ' for object ' + this.getID(), 4); //Scholar.debug('Requesting field ' + field + ' for object ' + this.getID(), 4);
if (this.isPrimaryField(field)){ if (this.isPrimaryField(field)){
return this._data[field] ? this._data[field] : ''; return this._data[field] ? this._data[field] : '';
@ -228,7 +228,7 @@ Scholar_Object.prototype.getField = function(field){
this._loadObjectData(); this._loadObjectData();
} }
var fieldID = Scholar_ObjectFields.getID(field); var fieldID = Scholar.ObjectFields.getID(field);
return this._objectData[fieldID] ? this._objectData[fieldID] : ''; return this._objectData[fieldID] ? this._objectData[fieldID] : '';
} }
@ -240,7 +240,7 @@ Scholar_Object.prototype.getField = function(field){
* *
* Field can be passed as fieldID or fieldName * Field can be passed as fieldID or fieldName
*/ */
Scholar_Object.prototype.setField = function(field, value, loadIn){ Scholar.Object.prototype.setField = function(field, value, loadIn){
// Primary field // Primary field
if (this.isPrimaryField(field)){ if (this.isPrimaryField(field)){
if (!this.isEditableField()){ if (!this.isEditableField()){
@ -267,13 +267,13 @@ Scholar_Object.prototype.setField = function(field, value, loadIn){
this._loadObjectData(); this._loadObjectData();
} }
var fieldID = Scholar_ObjectFields.getID(field); var fieldID = Scholar.ObjectFields.getID(field);
if (!fieldID){ if (!fieldID){
throw (field + ' is not a valid objectData field.'); throw (field + ' is not a valid objectData field.');
} }
if (!Scholar_ObjectFields.isValidForType(fieldID, this.getType())){ if (!Scholar.ObjectFields.isValidForType(fieldID, this.getType())){
throw (field + ' is not a valid field for this type.'); throw (field + ' is not a valid field for this type.');
} }
@ -296,7 +296,7 @@ Scholar_Object.prototype.setField = function(field, value, loadIn){
* N.B. This action updates the DB immediately and reloads all cached * N.B. This action updates the DB immediately and reloads all cached
* objects -- a save() is not required * objects -- a save() is not required
*/ */
Scholar_Object.prototype.setPosition = function(newFolder, newPos){ Scholar.Object.prototype.setPosition = function(newFolder, newPos){
var oldFolder = this.getField('folderID'); var oldFolder = this.getField('folderID');
var oldPos = this.getField('orderIndex'); var oldPos = this.getField('orderIndex');
@ -308,7 +308,7 @@ Scholar_Object.prototype.setPosition = function(newFolder, newPos){
// If no position provided, drop at end of folder // If no position provided, drop at end of folder
if (!newPos){ if (!newPos){
newPos = Scholar_DB.valueQuery('SELECT MAX(orderIndex)+1 FROM ' + newPos = Scholar.DB.valueQuery('SELECT MAX(orderIndex)+1 FROM ' +
'objects WHERE folderID=' + newFolder); 'objects WHERE folderID=' + newFolder);
} }
// Otherwise shift down above it in old folder and shift up at it or // Otherwise shift down above it in old folder and shift up at it or
@ -326,12 +326,12 @@ Scholar_Object.prototype.setPosition = function(newFolder, newPos){
sql += 'COMMIT;'; sql += 'COMMIT;';
Scholar_DB.query(sql); Scholar.DB.query(sql);
} }
this._data['folderID'] = newFolder; this._data['folderID'] = newFolder;
this._data['orderIndex'] = newPos; this._data['orderIndex'] = newPos;
Scholar_Objects.reloadAll(); Scholar.Objects.reloadAll();
return true; return true;
} }
@ -339,7 +339,7 @@ Scholar_Object.prototype.setPosition = function(newFolder, newPos){
/* /*
* Save changes back to database * Save changes back to database
*/ */
Scholar_Object.prototype.save = function(){ Scholar.Object.prototype.save = function(){
if (!this.hasChanged()){ if (!this.hasChanged()){
Scholar.debug('Object ' + this.getID() + ' has not changed', 4); Scholar.debug('Object ' + this.getID() + ' has not changed', 4);
return !!this.getID(); return !!this.getID();
@ -354,7 +354,7 @@ Scholar_Object.prototype.save = function(){
var objectID = this.getID(); var objectID = this.getID();
try { try {
Scholar_DB.beginTransaction(); Scholar.DB.beginTransaction();
// //
// Primary fields // Primary fields
@ -397,7 +397,7 @@ Scholar_Object.prototype.save = function(){
sql2 = 'DELETE FROM objectCreators ' sql2 = 'DELETE FROM objectCreators '
+ ' WHERE objectID=' + this.getID() + ' WHERE objectID=' + this.getID()
+ ' AND orderIndex=' + orderIndex; + ' AND orderIndex=' + orderIndex;
Scholar_DB.query(sql2); Scholar.DB.query(sql2);
continue; continue;
} }
@ -422,7 +422,7 @@ Scholar_Object.prototype.save = function(){
+ ' WHERE objectID=' + this.getID() + ' WHERE objectID=' + this.getID()
+ ' AND orderIndex=' + orderIndex; + ' AND orderIndex=' + orderIndex;
if (Scholar_DB.valueQuery(sql2)){ if (Scholar.DB.valueQuery(sql2)){
sql += 'UPDATE objectCreators SET creatorID=' sql += 'UPDATE objectCreators SET creatorID='
+ creatorID + ' WHERE objectID=' + this.getID() + creatorID + ' WHERE objectID=' + this.getID()
+ ' AND orderIndex=' + orderIndex + ";\n"; + ' AND orderIndex=' + orderIndex + ";\n";
@ -451,10 +451,10 @@ Scholar_Object.prototype.save = function(){
+ 'WHERE objectID=' + this.getID() + 'WHERE objectID=' + this.getID()
+ ' AND fieldID=' + fieldID; + ' AND fieldID=' + fieldID;
if (Scholar_DB.valueQuery(sql2)){ if (Scholar.DB.valueQuery(sql2)){
sql += "UPDATE objectData SET value="; sql += "UPDATE objectData SET value=";
// Take advantage of SQLite's manifest typing // Take advantage of SQLite's manifest typing
if (Scholar_ObjectFields.isInteger(fieldID)){ if (Scholar.ObjectFields.isInteger(fieldID)){
sql += this.getField(fieldID); sql += this.getField(fieldID);
} }
else { else {
@ -467,7 +467,7 @@ Scholar_Object.prototype.save = function(){
sql += 'INSERT INTO objectData VALUES (' sql += 'INSERT INTO objectData VALUES ('
+ this.getID() + ',' + fieldID + ','; + this.getID() + ',' + fieldID + ',';
if (Scholar_ObjectFields.isInteger(fieldID)){ if (Scholar.ObjectFields.isInteger(fieldID)){
sql += this.getField(fieldID); sql += this.getField(fieldID);
} }
else { else {
@ -491,11 +491,11 @@ Scholar_Object.prototype.save = function(){
} }
Scholar_DB.query(sql); Scholar.DB.query(sql);
Scholar_DB.commitTransaction(); Scholar.DB.commitTransaction();
} }
catch (e){ catch (e){
Scholar_DB.rollbackTransaction(); Scholar.DB.rollbackTransaction();
throw (e); throw (e);
} }
} }
@ -535,7 +535,7 @@ Scholar_Object.prototype.save = function(){
sqlValues.push({'int':newFolder}); sqlValues.push({'int':newFolder});
try { try {
Scholar_DB.beginTransaction(); Scholar.DB.beginTransaction();
// We set the index here within the transaction so that MAX()+1 // We set the index here within the transaction so that MAX()+1
// stays consistent through the INSERT // stays consistent through the INSERT
@ -544,7 +544,7 @@ Scholar_Object.prototype.save = function(){
sqlValues.push({'int':this.getField('orderIndex')}); sqlValues.push({'int':this.getField('orderIndex')});
} }
else { else {
var newPos = Scholar_DB.valueQuery('SELECT MAX(orderIndex)+1 ' var newPos = Scholar.DB.valueQuery('SELECT MAX(orderIndex)+1 '
+ 'FROM objects WHERE folderID=' + newFolder); + 'FROM objects WHERE folderID=' + newFolder);
sqlValues.push({'int': newPos}); sqlValues.push({'int': newPos});
} }
@ -597,14 +597,14 @@ Scholar_Object.prototype.save = function(){
} }
sql = sql.substring(0,sql.length-1) + ");\n"; sql = sql.substring(0,sql.length-1) + ");\n";
var objectID = Scholar_DB.query(sql,sqlValues); var objectID = Scholar.DB.query(sql,sqlValues);
if (this._changedObjectData.length){ if (this._changedObjectData.length){
sql = ''; sql = '';
for (fieldID in this._changedObjectData.items){ for (fieldID in this._changedObjectData.items){
sql += 'INSERT INTO objectData VALUES (' + sql += 'INSERT INTO objectData VALUES (' +
objectID + ',' + fieldID + ','; objectID + ',' + fieldID + ',';
if (Scholar_ObjectFields.isInteger(fieldID)){ if (Scholar.ObjectFields.isInteger(fieldID)){
sql += this.getField(fieldID); sql += this.getField(fieldID);
} }
else { else {
@ -614,22 +614,22 @@ Scholar_Object.prototype.save = function(){
} }
} }
Scholar_DB.query(sql); Scholar.DB.query(sql);
Scholar_DB.commitTransaction(); Scholar.DB.commitTransaction();
} }
catch (e){ catch (e){
Scholar_DB.rollbackTransaction(); Scholar.DB.rollbackTransaction();
throw (e); throw (e);
} }
} }
Scholar_Objects.reload(this.getID()); Scholar.Objects.reload(this.getID());
return isNew ? this.getID() : true; return isNew ? this.getID() : true;
} }
Scholar_Object.prototype.toString = function(){ Scholar.Object.prototype.toString = function(){
return this.getTitle(); return this.getTitle();
} }
@ -637,7 +637,7 @@ Scholar_Object.prototype.toString = function(){
/* /*
* Load in the creators from the database * Load in the creators from the database
*/ */
Scholar_Object.prototype._loadCreators = function(){ Scholar.Object.prototype._loadCreators = function(){
if (!this.getID()){ if (!this.getID()){
throw ('ObjectID not set for object before attempting to load creators'); throw ('ObjectID not set for object before attempting to load creators');
} }
@ -645,7 +645,7 @@ Scholar_Object.prototype._loadCreators = function(){
var sql = 'SELECT C.creatorID, C.*, orderIndex FROM objectCreators OC ' var sql = 'SELECT C.creatorID, C.*, orderIndex FROM objectCreators OC '
+ 'LEFT JOIN creators C USING (creatorID) ' + 'LEFT JOIN creators C USING (creatorID) '
+ 'WHERE objectID=' + this.getID() + ' ORDER BY orderIndex'; + 'WHERE objectID=' + this.getID() + ' ORDER BY orderIndex';
var creators = Scholar_DB.query(sql); var creators = Scholar.DB.query(sql);
this._creatorsLoaded = true; this._creatorsLoaded = true;
@ -669,7 +669,7 @@ Scholar_Object.prototype._loadCreators = function(){
/* /*
* Load in the field data from the database * Load in the field data from the database
*/ */
Scholar_Object.prototype._loadObjectData = function(){ Scholar.Object.prototype._loadObjectData = function(){
if (!this.getID()){ if (!this.getID()){
throw ('ObjectID not set for object before attempting to load data'); throw ('ObjectID not set for object before attempting to load data');
} }
@ -679,7 +679,7 @@ Scholar_Object.prototype._loadObjectData = function(){
+ 'objects WHERE objectID=?1) AND OTF.fieldID=OD.fieldID) ' + 'objects WHERE objectID=?1) AND OTF.fieldID=OD.fieldID) '
+ 'WHERE objectID=?1 ORDER BY orderIndex'; + 'WHERE objectID=?1 ORDER BY orderIndex';
var result = Scholar_DB.query(sql,[{'int':this._data['objectID']}]); var result = Scholar.DB.query(sql,[{'int':this._data['objectID']}]);
this._objectDataLoaded = true; this._objectDataLoaded = true;
@ -698,7 +698,7 @@ Scholar_Object.prototype._loadObjectData = function(){
var Scholar_Objects = new function(){ Scholar.Objects = new function(){
// Private members // Private members
var _objects = new Array(); var _objects = new Array();
@ -760,7 +760,7 @@ var Scholar_Objects = new function(){
// TODO: allow folders to intermingle with items, order-wise // TODO: allow folders to intermingle with items, order-wise
+ 'ORDER BY O.folderID=0, F.orderIndex, O.orderIndex'; + 'ORDER BY O.folderID=0, F.orderIndex, O.orderIndex';
var ids = Scholar_DB.columnQuery(sql); var ids = Scholar.DB.columnQuery(sql);
return this.get(ids); return this.get(ids);
} }
@ -799,7 +799,7 @@ var Scholar_Objects = new function(){
function add(data, objectTypeID, folderID, orderIndex){ function add(data, objectTypeID, folderID, orderIndex){
var insert = new Array(); var insert = new Array();
var obj = new Scholar_Object(objectTypeID, folderID, orderIndex); var obj = new Scholar.Object(objectTypeID, folderID, orderIndex);
for (field in data){ for (field in data){
obj.setField(data[field]); obj.setField(data[field]);
@ -825,11 +825,11 @@ var Scholar_Objects = new function(){
sql += ' AND O.objectID IN (' + Scholar.join(arguments,',') + ')'; sql += ' AND O.objectID IN (' + Scholar.join(arguments,',') + ')';
} }
var result = Scholar_DB.query(sql); var result = Scholar.DB.query(sql);
if (result){ if (result){
for (var i=0,len=result.length; i<len; i++){ for (var i=0,len=result.length; i<len; i++){
var obj = new Scholar_Object(); var obj = new Scholar.Object();
obj.loadFromRow(result[i]); obj.loadFromRow(result[i]);
_objects[result[i]['objectID']] = obj; _objects[result[i]['objectID']] = obj;
} }
@ -839,7 +839,7 @@ var Scholar_Objects = new function(){
} }
var Scholar_Creators = new function(){ Scholar.Creators = new function(){
var _creators = new Array; // indexed by first%%%last%%%creatorTypeID hash var _creators = new Array; // indexed by first%%%last%%%creatorTypeID hash
var _creatorsByID = new Array; // indexed by creatorID var _creatorsByID = new Array; // indexed by creatorID
@ -857,7 +857,7 @@ var Scholar_Creators = new function(){
} }
var sql = 'SELECT * FROM creators WHERE creatorID=' + creatorID; var sql = 'SELECT * FROM creators WHERE creatorID=' + creatorID;
var result = Scholar_DB.rowQuery(sql); var result = Scholar.DB.rowQuery(sql);
if (!result){ if (!result){
return false; return false;
@ -883,7 +883,7 @@ var Scholar_Creators = new function(){
var params = [ var params = [
{'string': firstName}, {'string': lastName}, {'int': creatorTypeID} {'string': firstName}, {'string': lastName}, {'int': creatorTypeID}
]; ];
var creatorID = Scholar_DB.valueQuery(sql,params); var creatorID = Scholar.DB.valueQuery(sql,params);
if (creatorID){ if (creatorID){
_creators[hash] = creatorID; _creators[hash] = creatorID;
@ -915,7 +915,7 @@ var Scholar_Creators = new function(){
} }
var rnd = Math.floor(Math.random()*max); var rnd = Math.floor(Math.random()*max);
var sql2 = 'SELECT COUNT(*) FROM creators WHERE creatorID=' + rnd; var sql2 = 'SELECT COUNT(*) FROM creators WHERE creatorID=' + rnd;
var exists = Scholar_DB.valueQuery(sql2); var exists = Scholar.DB.valueQuery(sql2);
tries--; tries--;
} }
while (exists); while (exists);
@ -924,7 +924,7 @@ var Scholar_Creators = new function(){
{'int': rnd}, {'int': creatorTypeID}, {'int': rnd}, {'int': creatorTypeID},
{'string': firstName}, {'string': lastName}, {'string': firstName}, {'string': lastName},
]; ];
return Scholar_DB.query(sql,params); return Scholar.DB.query(sql,params);
} }
@ -936,7 +936,7 @@ var Scholar_Creators = new function(){
function purge(returnSQL){ function purge(returnSQL){
var sql = 'SELECT creatorID FROM creators WHERE creatorID NOT IN ' var sql = 'SELECT creatorID FROM creators WHERE creatorID NOT IN '
+ '(SELECT creatorID FROM objectCreators);'; + '(SELECT creatorID FROM objectCreators);';
var toDelete = Scholar_DB.columnQuery(sql); var toDelete = Scholar.DB.columnQuery(sql);
if (!toDelete){ if (!toDelete){
return false; return false;
@ -946,7 +946,7 @@ var Scholar_Creators = new function(){
+ '(SELECT creatorID FROM objectCreators);'; + '(SELECT creatorID FROM objectCreators);';
if (!returnSQL){ if (!returnSQL){
var result = Scholar_DB.query(sql); var result = Scholar.DB.query(sql);
} }
// Clear creator entries in internal array // Clear creator entries in internal array
@ -971,7 +971,7 @@ var Scholar_Creators = new function(){
} }
var Scholar_ObjectFields = new function(){ Scholar.ObjectFields = new function(){
// Private members // Private members
var _fields = new Array(); var _fields = new Array();
var _fieldFormats = new Array(); var _fieldFormats = new Array();
@ -1034,7 +1034,7 @@ var Scholar_ObjectFields = new function(){
var sql = 'SELECT fieldID FROM objectTypeFields ' var sql = 'SELECT fieldID FROM objectTypeFields '
+ 'WHERE objectTypeID=' + objectTypeID + ' ORDER BY orderIndex'; + 'WHERE objectTypeID=' + objectTypeID + ' ORDER BY orderIndex';
_objectTypeFields[objectTypeID] = Scholar_DB.columnQuery(sql); _objectTypeFields[objectTypeID] = Scholar.DB.columnQuery(sql);
return _objectTypeFields[objectTypeID]; return _objectTypeFields[objectTypeID];
} }
@ -1045,7 +1045,7 @@ var Scholar_ObjectFields = new function(){
function _getFieldObjectTypes(){ function _getFieldObjectTypes(){
var sql = 'SELECT fieldID,objectTypeID FROM objectTypeFields'; var sql = 'SELECT fieldID,objectTypeID FROM objectTypeFields';
var results = Scholar_DB.query(sql); var results = Scholar.DB.query(sql);
if (!results){ if (!results){
throw ('No fields in objectTypeFields!'); throw ('No fields in objectTypeFields!');
@ -1067,7 +1067,7 @@ var Scholar_ObjectFields = new function(){
function _loadFields(){ function _loadFields(){
var i,len; var i,len;
var result = Scholar_DB.query('SELECT * FROM fieldFormats'); var result = Scholar.DB.query('SELECT * FROM fieldFormats');
for (i=0; i<result.length; i++){ for (i=0; i<result.length; i++){
_fieldFormats[result[i]['fieldFormatID']] = { _fieldFormats[result[i]['fieldFormatID']] = {
@ -1076,7 +1076,7 @@ var Scholar_ObjectFields = new function(){
}; };
} }
result = Scholar_DB.query('SELECT * FROM fields'); result = Scholar.DB.query('SELECT * FROM fields');
if (!result.length){ if (!result.length){
throw ('No fields in database!'); throw ('No fields in database!');
@ -1098,7 +1098,7 @@ var Scholar_ObjectFields = new function(){
} }
/* /*
var objects = Scholar_Objects.getAll(); var objects = Scholar.Objects.getAll();
var obj = objects[9]; var obj = objects[9];
for (var i=0,len=obj.numCreators(); i<len; i++){ for (var i=0,len=obj.numCreators(); i<len; i++){

View file

@ -1,7 +1,7 @@
/* /*
* DB connection and schema management class * DB connection and schema management class
*/ */
var Scholar_DB = new function(){ Scholar.DB = new function(){
// Private members // Private members
var _connection; var _connection;

View file

@ -0,0 +1,6 @@
var Scholar_browserWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
const SCHOLAR_CONFIG = Scholar_browserWindow.SCHOLAR_CONFIG;
var Scholar = Scholar_browserWindow.Scholar;

View file

@ -9,13 +9,29 @@ const SCHOLAR_CONFIG = {
/* /*
* Core functions * Core functions
*/ */
var Scholar = { var Scholar = new function(){
var _initialized = false
this.testString = 'Sidebar is not registered';
this.init = init;
this.debug = debug;
this.varDump = varDump;
this.flattenArguments = flattenArguments;
this.join = join;
this.Hash = Hash;
/* /*
* Initialize the extension * Initialize the extension
*/ */
init: function() { function init(){
Scholar_DB.updateSchema(); if (!_initialized){
}, Scholar.DB.updateSchema();
_initialized = true;
return true;
}
return false;
}
/* /*
@ -26,7 +42,7 @@ var Scholar = {
* *
* Defaults to log level 3 if level not provided * Defaults to log level 3 if level not provided
*/ */
debug: function(message, level) { function debug(message, level) {
if (!SCHOLAR_CONFIG['DEBUG_LOGGING']){ if (!SCHOLAR_CONFIG['DEBUG_LOGGING']){
return false; return false;
} }
@ -50,7 +66,7 @@ var Scholar = {
dump('scholar(' + level + '): ' + message); dump('scholar(' + level + '): ' + message);
} }
return true; return true;
}, }
/** /**
@ -58,7 +74,7 @@ var Scholar = {
* *
* Adapted from http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html * Adapted from http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html
*/ */
varDump: function(arr,level) { function varDump(arr,level) {
var dumped_text = ""; var dumped_text = "";
if (!level){ if (!level){
level = 0; level = 0;
@ -92,7 +108,7 @@ var Scholar = {
dumped_text = "===>"+arr+"<===("+typeof(arr)+")"; dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
} }
return dumped_text; return dumped_text;
}, }
/* /*
@ -100,7 +116,7 @@ var Scholar = {
* an array of values -- allows for functions to accept both arrays of * an array of values -- allows for functions to accept both arrays of
* values and/or an arbitrary number of individual values * values and/or an arbitrary number of individual values
*/ */
flattenArguments: function(args){ function flattenArguments(args){
var returns = new Array(); var returns = new Array();
for (var i=0; i<args.length; i++){ for (var i=0; i<args.length; i++){
@ -115,7 +131,7 @@ var Scholar = {
} }
return returns; return returns;
}, }
/* /*
@ -124,13 +140,13 @@ var Scholar = {
* *
* Note that this is safer than extending Object() * Note that this is safer than extending Object()
*/ */
join: function(obj, delim){ function join(obj, delim){
var a = []; var a = [];
for (var i=0, len=obj.length; i<len; i++){ for (var i=0, len=obj.length; i<len; i++){
a.push(obj[i]); a.push(obj[i]);
} }
return a.join(delim); return a.join(delim);
}, }
/* /*
@ -155,7 +171,7 @@ var Scholar = {
* (c) Mojavelinux, Inc. * (c) Mojavelinux, Inc.
* License: Creative Commons * License: Creative Commons
*/ */
Hash: function(){ function Hash(){
this.length = 0; this.length = 0;
this.items = new Array(); this.items = new Array();
@ -205,5 +221,4 @@ Scholar.Hash.prototype.has = function(in_key){
return typeof(this.items[in_key]) != 'undefined'; 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);

View file

@ -10,7 +10,7 @@
<script src="data_access.js"/> <script src="data_access.js"/>
<statusbar id="status-bar"> <statusbar id="status-bar">
<statusbarpanel id="my-panel" label="&statusbarpanel.helloworld;"/> <statusbarpanel onclick="alert(Scholar.testString)" id="my-panel" label="&statusbarpanel.helloworld;"/>
</statusbar> </statusbar>
<menupopup id="viewSidebarMenu"> <menupopup id="viewSidebarMenu">

View file

@ -23,7 +23,7 @@ var treeView = {
}, },
setTree: function(treebox){ setTree: function(treebox){
this.treebox = treebox; this.treebox = treebox;
this.dataObjects = Scholar_Objects.getAll(); this.dataObjects = Scholar.Objects.getAll();
}, },
isContainer: function(row){ return false; }, isContainer: function(row){ return false; },
isSeparator: function(row){ return false; }, isSeparator: function(row){ return false; },
@ -99,4 +99,6 @@ function setView()
{ {
ScholarLocalizedStrings = document.getElementById('scholar-strings'); ScholarLocalizedStrings = document.getElementById('scholar-strings');
document.getElementById('scholar-sidebar-items').view=treeView; document.getElementById('scholar-sidebar-items').view=treeView;
} }
Scholar.testString = 'Sidebar is registered.';

View file

@ -8,10 +8,9 @@
onload="setView()" onload="setView()"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" > xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
<script src="include.js"/>
<script src="sidebar.js"/> <script src="sidebar.js"/>
<script src="scholar.js"/>
<script src="db.js"/>
<script src="data_access.js"/>
<stringbundle id="scholar-strings" src="chrome://scholar/locale/scholar.properties"/> <stringbundle id="scholar-strings" src="chrome://scholar/locale/scholar.properties"/>
<tree <tree