Add Zotero.Item::topLevelItem and Zotero.Items.getTopLevel(items)
This commit is contained in:
parent
6646be66d0
commit
ca4ced1e9f
3 changed files with 41 additions and 1 deletions
|
@ -153,7 +153,16 @@ Zotero.defineProperty(Zotero.Item.prototype, 'parentItemKey', {
|
||||||
Zotero.defineProperty(Zotero.Item.prototype, 'parentItem', {
|
Zotero.defineProperty(Zotero.Item.prototype, 'parentItem', {
|
||||||
get: function() { return Zotero.Items.get(this.parentID) || undefined; },
|
get: function() { return Zotero.Items.get(this.parentID) || undefined; },
|
||||||
});
|
});
|
||||||
|
Zotero.defineProperty(Zotero.Item.prototype, 'topLevelItem', {
|
||||||
|
get: function () {
|
||||||
|
var item = this; // eslint-disable-line consistent-this
|
||||||
|
var parentItem;
|
||||||
|
while ((parentItem = item.parentItem)) {
|
||||||
|
item = parentItem;
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Zotero.defineProperty(Zotero.Item.prototype, 'firstCreator', {
|
Zotero.defineProperty(Zotero.Item.prototype, 'firstCreator', {
|
||||||
get: function() { return this._firstCreator; }
|
get: function() { return this._firstCreator; }
|
||||||
|
|
|
@ -1735,6 +1735,17 @@ Zotero.Items = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the top-level items of all passed items
|
||||||
|
*
|
||||||
|
* @param {Zotero.Item[]} items
|
||||||
|
* @return {Zotero.Item[]}
|
||||||
|
*/
|
||||||
|
this.getTopLevel = function (items) {
|
||||||
|
return [...new Set(items.map(item => item.topLevelItem))];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of items with children of selected parents removed
|
* Returns an array of items with children of selected parents removed
|
||||||
*
|
*
|
||||||
|
|
|
@ -483,6 +483,26 @@ describe("Zotero.Item", function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("#topLevelItem", function () {
|
||||||
|
it("should return self for top-level item", async function () {
|
||||||
|
var item = await createDataObject('item');
|
||||||
|
assert.equal(item, item.topLevelItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return parent item for note", async function () {
|
||||||
|
var item = await createDataObject('item');
|
||||||
|
var note = await createDataObject('item', { itemType: 'note', parentItemID: item.id });
|
||||||
|
assert.equal(item, note.topLevelItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return top-level item for annotation", async function () {
|
||||||
|
var item = await createDataObject('item');
|
||||||
|
var attachment = await importPDFAttachment(item);
|
||||||
|
var annotation = await createAnnotation('highlight', attachment);
|
||||||
|
assert.equal(item, annotation.topLevelItem);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("#getCreators()", function () {
|
describe("#getCreators()", function () {
|
||||||
it("should update after creators are removed", function* () {
|
it("should update after creators are removed", function* () {
|
||||||
var item = createUnsavedDataObject('item');
|
var item = createUnsavedDataObject('item');
|
||||||
|
|
Loading…
Reference in a new issue