www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit bc8a340c30be53177af0fe27e26d621a745fae36
parent 5ee40f6601415c61a9ed61a7ee283640905524f5
Author: Aurimas Vinckevicius <aurimas.dev@gmail.com>
Date:   Wed, 29 Oct 2014 19:22:52 -0500

Virtualize data objects

Diffstat:
Mchrome/content/zotero/xpcom/data/collection.js | 17++++++++++-------
Mchrome/content/zotero/xpcom/data/dataObject.js | 21+++++----------------
Mchrome/content/zotero/xpcom/data/item.js | 41+++++++++++++++++++++++++++--------------
Mchrome/content/zotero/xpcom/search.js | 15+++++++++------
4 files changed, 51 insertions(+), 43 deletions(-)

diff --git a/chrome/content/zotero/xpcom/data/collection.js b/chrome/content/zotero/xpcom/data/collection.js @@ -24,12 +24,7 @@ */ Zotero.Collection = function() { - let dataTypes = [ - 'primaryData', - 'childCollections', - 'childItems' - ]; - Zotero.DataObject.apply(this, ['collection', dataTypes]); + Zotero.Collection._super.apply(this); this._name = null; this._parentID = null; @@ -42,9 +37,17 @@ Zotero.Collection = function() { this._childItems = []; } -Zotero.Collection.prototype = Object.create(Zotero.DataObject.prototype); +Zotero.Collection._super = Zotero.DataObject; +Zotero.Collection.prototype = Object.create(Zotero.Collection._super.prototype); Zotero.Collection.constructor = Zotero.Collection; +Zotero.Collection.prototype._objectType = 'collection'; +Zotero.Collection.prototype._dataTypes = Zotero.Collection._super.prototype._dataTypes.concat([ + 'primaryData', + 'childCollections', + 'childItems' +]); + Zotero.Collection.prototype.__defineGetter__('id', function () { return this._get('id'); }); Zotero.Collection.prototype.__defineSetter__('id', function (val) { this._set('id', val); }); Zotero.Collection.prototype.__defineGetter__('libraryID', function () { return this._get('libraryID'); }); diff --git a/chrome/content/zotero/xpcom/data/dataObject.js b/chrome/content/zotero/xpcom/data/dataObject.js @@ -24,21 +24,16 @@ */ /** - * - * @param {String} objectType - * @param {String[]} dataTypes A set of data types that can be loaded for this data object - * * @property {String} (readOnly) objectType * @property {String} (readOnly) libraryKey * @property {String|null} parentKey Null if no parent * @property {Integer|false|undefined} parentID False if no parent. Undefined if not applicable (e.g. search objects) */ -Zotero.DataObject = function (objectType, dataTypes) { - this._objectType = objectType; +Zotero.DataObject = function () { + let objectType = this._objectType; this._ObjectType = objectType[0].toUpperCase() + objectType.substr(1); this._objectTypePlural = Zotero.DataObjectUtilities.getObjectTypePlural(objectType); - this._dataTypes = dataTypes; this._id = null; this._libraryID = null; @@ -57,6 +52,9 @@ Zotero.DataObject = function (objectType, dataTypes) { this._clearChanged(); }; +Zotero.DataObject.prototype._objectType = 'dataObject'; +Zotero.DataObject.prototype._dataTypes = []; + Zotero.Utilities.Internal.defineProperty(Zotero.DataObject, 'objectType', { get: function() this._objectType }); @@ -74,10 +72,6 @@ Zotero.Utilities.Internal.defineProperty(Zotero.DataObject, 'parentID', { Zotero.DataObject.prototype._get = function (field) { - if (this._objectType == 'item') { - throw new Error("_get is not valid for items"); - } - if (this['_' + field] !== null) { return this['_' + field]; } @@ -166,11 +160,6 @@ Zotero.DataObject.prototype._setParentID = function (id) { * @return {Boolean} True if changed, false if stayed the same */ Zotero.DataObject.prototype._setParentKey = function(key) { - if (this._objectType == 'item') { - if (!this.isNote() && !this.isAttachment()) { - throw new Error("_setParentKey() can only be called on items of type 'note' or 'attachment'"); - } - } key = Zotero.DataObjectUtilities.checkKey(key); if (this._parentKey == key) { diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js @@ -32,18 +32,7 @@ Zotero.Item = function(itemTypeOrID) { throw ("Zotero.Item constructor only takes one parameter"); } - var dataTypes = [ - 'primaryData', - 'itemData', - 'note', - 'creators', - 'childItems', - 'relatedItems', // TODO: remove - 'tags', - 'collections', - 'relations' - ]; - Zotero.DataObject.apply(this, ['item', dataTypes]); + Zotero.Item._super.apply(this); this._disabled = false; @@ -100,10 +89,23 @@ Zotero.Item = function(itemTypeOrID) { } } -Zotero.Item.prototype = Object.create(Zotero.DataObject.prototype); +Zotero.Item._super = Zotero.DataObject; +Zotero.Item.prototype = Object.create(Zotero.Item._super.prototype); Zotero.Item.constructor = Zotero.Item; -Zotero.Item.prototype.__defineGetter__('objectType', function () { return 'item'; }); +Zotero.Item.prototype._objectType = 'item'; +Zotero.Item.prototype._dataTypes = Zotero.Item._super.prototype._dataTypes.concat([ + 'primaryData', + 'itemData', + 'note', + 'creators', + 'childItems', + 'relatedItems', // TODO: remove + 'tags', + 'collections', + 'relations' +]); + Zotero.Item.prototype.__defineGetter__('id', function () this._id); Zotero.Item.prototype.__defineGetter__('itemID', function () { Zotero.debug("Item.itemID is deprecated -- use Item.id"); @@ -149,6 +151,17 @@ Zotero.Item.prototype.isPrimaryField = function (fieldName) { return Zotero.Items.isPrimaryField(fieldName); } +Zotero.Item.prototype._get = function (fieldName) { + throw new Error("_get is not valid for items"); +} + +Zotero.Item.prototype._setParentKey = function() { + if (!this.isNote() && !this.isAttachment()) { + throw new Error("_setParentKey() can only be called on items of type 'note' or 'attachment'"); + } + + Zotero.Item._super.prototype._setParentKey.apply(this, arguments); +} ////////////////////////////////////////////////////////////////////////////// // diff --git a/chrome/content/zotero/xpcom/search.js b/chrome/content/zotero/xpcom/search.js @@ -24,11 +24,7 @@ */ Zotero.Search = function() { - var dataTypes = [ - 'primaryData', - 'conditions' - ]; - Zotero.DataObject.apply(this, ['search', dataTypes]); + Zotero.Search._super.apply(this); this._name = null; @@ -41,9 +37,16 @@ Zotero.Search = function() { this._hasPrimaryConditions = false; } -Zotero.Search.prototype = Object.create(Zotero.DataObject.prototype); +Zotero.Search._super = Zotero.DataObject; +Zotero.Search.prototype = Object.create(Zotero.Search._super.prototype); Zotero.Search.constructor = Zotero.Search; +Zotero.Search.prototype._objectType = 'search'; +Zotero.Search.prototype._dataTypes = Zotero.Search._super.prototype._dataTypes.concat([ + 'primaryData', + 'conditions' +]); + Zotero.Search.prototype.getID = function(){ Zotero.debug('Zotero.Search.getName() is deprecated -- use Search.id'); return this._id;