parent
ce0b364571
commit
a2dc0f7e37
2 changed files with 67 additions and 7 deletions
|
@ -87,16 +87,34 @@ import { getCSSItemTypeIcon } from 'components/icons';
|
||||||
|
|
||||||
if (this._item) {
|
if (this._item) {
|
||||||
let relatedKeys = this._item.relatedItems;
|
let relatedKeys = this._item.relatedItems;
|
||||||
for (let i = 0; i < relatedKeys.length; i++) {
|
|
||||||
let key = relatedKeys[i];
|
let relatedItems = relatedKeys.map((key) => {
|
||||||
let relatedItem = Zotero.Items.getByLibraryAndKey(
|
let item = Zotero.Items.getByLibraryAndKey(this._item.libraryID, key);
|
||||||
this._item.libraryID, key
|
if (!item) {
|
||||||
);
|
|
||||||
if (!relatedItem) {
|
|
||||||
Zotero.debug(`Related item ${this._item.libraryID}/${key} not found `
|
Zotero.debug(`Related item ${this._item.libraryID}/${key} not found `
|
||||||
+ `for item ${this._item.libraryKey}`, 2);
|
+ `for item ${this._item.libraryKey}`, 2);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Sort by display title
|
||||||
|
var collation = Zotero.getLocaleCollation();
|
||||||
|
var titles = new Map();
|
||||||
|
function getTitle(item) {
|
||||||
|
var title = titles.get(item.id);
|
||||||
|
if (title === undefined) {
|
||||||
|
title = Zotero.Items.getSortTitle(item.getDisplayTitle());
|
||||||
|
titles.set(item.id, title);
|
||||||
|
}
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
relatedItems.sort((a, b) => {
|
||||||
|
var titleA = getTitle(a);
|
||||||
|
var titleB = getTitle(b);
|
||||||
|
return collation.compareString(1, titleA, titleB);
|
||||||
|
});
|
||||||
|
|
||||||
|
for (let relatedItem of relatedItems) {
|
||||||
let id = relatedItem.id;
|
let id = relatedItem.id;
|
||||||
|
|
||||||
let row = document.createElement('div');
|
let row = document.createElement('div');
|
||||||
|
|
|
@ -12,6 +12,48 @@ describe("Related Box", function () {
|
||||||
win.close();
|
win.close();
|
||||||
})
|
})
|
||||||
|
|
||||||
|
async function relateItems(...items) {
|
||||||
|
for (let i = 0; i < items.length; i++) {
|
||||||
|
for (let j = i + 1; j < items.length; j++) {
|
||||||
|
items[i].addRelatedItem(items[j]);
|
||||||
|
items[j].addRelatedItem(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let item of items) {
|
||||||
|
await item.saveTx();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
it("should sort by title", async function () {
|
||||||
|
var title1 = 'cccccc';
|
||||||
|
var title2 = 'aaaaaa';
|
||||||
|
var title3 = 'bbbbbb';
|
||||||
|
var item0 = await createDataObject('item');
|
||||||
|
var item1 = await createDataObject('item', { title: title1 });
|
||||||
|
var item2 = await createDataObject('item', { title: title2 });
|
||||||
|
var item3 = await createDataObject('item', { title: title3 });
|
||||||
|
|
||||||
|
await relateItems(item0, item1, item2, item3);
|
||||||
|
|
||||||
|
await win.ZoteroPane.selectItem(item0.id);
|
||||||
|
|
||||||
|
var relatedbox = doc.getElementById('zotero-editpane-related');
|
||||||
|
|
||||||
|
// Wait for relations list to populate
|
||||||
|
do {
|
||||||
|
await Zotero.Promise.delay(50);
|
||||||
|
}
|
||||||
|
while (!relatedbox.querySelectorAll('.row').length);
|
||||||
|
|
||||||
|
var html = relatedbox.querySelector('.body').innerHTML;
|
||||||
|
var pos1 = html.indexOf(title1);
|
||||||
|
var pos2 = html.indexOf(title2);
|
||||||
|
var pos3 = html.indexOf(title3);
|
||||||
|
assert.isAbove(pos2, 0);
|
||||||
|
assert.isAbove(pos3, pos2)
|
||||||
|
assert.isAbove(pos1, pos3)
|
||||||
|
});
|
||||||
|
|
||||||
it("should update if a related item is renamed", async function () {
|
it("should update if a related item is renamed", async function () {
|
||||||
var title1 = 'aaaaaa';
|
var title1 = 'aaaaaa';
|
||||||
var title2 = 'bbbbbb';
|
var title2 = 'bbbbbb';
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue