fix: prompt example type error
update: zotero-types
This commit is contained in:
parent
bb4c31b54c
commit
414bf81fd1
@ -49,6 +49,6 @@
|
|||||||
"release-it": "^15.6.0",
|
"release-it": "^15.6.0",
|
||||||
"replace-in-file": "^6.3.5",
|
"replace-in-file": "^6.3.5",
|
||||||
"typescript": "^4.9.4",
|
"typescript": "^4.9.4",
|
||||||
"zotero-types": "^1.0.6"
|
"zotero-types": "^1.0.12"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -478,15 +478,19 @@ export class PromptExampleFactory {
|
|||||||
|
|
||||||
@example
|
@example
|
||||||
static registerAnonymousCommandExample() {
|
static registerAnonymousCommandExample() {
|
||||||
ztoolkit.Prompt.register([{
|
ztoolkit.Prompt.register([
|
||||||
|
{
|
||||||
id: "search",
|
id: "search",
|
||||||
callback: async (prompt) => {
|
callback: async (prompt) => {
|
||||||
// https://github.com/zotero/zotero/blob/7262465109c21919b56a7ab214f7c7a8e1e63909/chrome/content/zotero/integration/quickFormat.js#L589
|
// https://github.com/zotero/zotero/blob/7262465109c21919b56a7ab214f7c7a8e1e63909/chrome/content/zotero/integration/quickFormat.js#L589
|
||||||
function getItemDescription(item: Zotero.Item) {
|
function getItemDescription(item: Zotero.Item) {
|
||||||
var nodes = [];
|
var nodes = [];
|
||||||
var str = "";
|
var str = "";
|
||||||
var author, authorDate = "";
|
var author,
|
||||||
if (item.firstCreator) { author = authorDate = item.firstCreator; }
|
authorDate = "";
|
||||||
|
if (item.firstCreator) {
|
||||||
|
author = authorDate = item.firstCreator;
|
||||||
|
}
|
||||||
var date = item.getField("date", true, true) as string;
|
var date = item.getField("date", true, true) as string;
|
||||||
if (date && (date = date.substr(0, 4)) !== "0000") {
|
if (date && (date = date.substr(0, 4)) !== "0000") {
|
||||||
authorDate += " (" + parseInt(date) + ")";
|
authorDate += " (" + parseInt(date) + ")";
|
||||||
@ -494,7 +498,11 @@ export class PromptExampleFactory {
|
|||||||
authorDate = authorDate.trim();
|
authorDate = authorDate.trim();
|
||||||
if (authorDate) nodes.push(authorDate);
|
if (authorDate) nodes.push(authorDate);
|
||||||
|
|
||||||
var publicationTitle = item.getField("publicationTitle", false, true);
|
var publicationTitle = item.getField(
|
||||||
|
"publicationTitle",
|
||||||
|
false,
|
||||||
|
true
|
||||||
|
);
|
||||||
if (publicationTitle) {
|
if (publicationTitle) {
|
||||||
nodes.push(`<i>${publicationTitle}</i>`);
|
nodes.push(`<i>${publicationTitle}</i>`);
|
||||||
}
|
}
|
||||||
@ -503,8 +511,10 @@ export class PromptExampleFactory {
|
|||||||
if (issue) volumeIssue += "(" + issue + ")";
|
if (issue) volumeIssue += "(" + issue + ")";
|
||||||
if (volumeIssue) nodes.push(volumeIssue);
|
if (volumeIssue) nodes.push(volumeIssue);
|
||||||
|
|
||||||
var publisherPlace = [], field;
|
var publisherPlace = [],
|
||||||
if ((field = item.getField("publisher"))) publisherPlace.push(field);
|
field;
|
||||||
|
if ((field = item.getField("publisher")))
|
||||||
|
publisherPlace.push(field);
|
||||||
if ((field = item.getField("place"))) publisherPlace.push(field);
|
if ((field = item.getField("place"))) publisherPlace.push(field);
|
||||||
if (publisherPlace.length) nodes.push(publisherPlace.join(": "));
|
if (publisherPlace.length) nodes.push(publisherPlace.join(": "));
|
||||||
|
|
||||||
@ -531,18 +541,18 @@ export class PromptExampleFactory {
|
|||||||
str += node;
|
str += node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
str.length && (str += ".")
|
str.length && (str += ".");
|
||||||
return str
|
return str;
|
||||||
};
|
}
|
||||||
function filter(ids: number[]) {
|
function filter(ids: number[]) {
|
||||||
ids = ids.filter(async (id) => {
|
ids = ids.filter(async (id) => {
|
||||||
const item = await Zotero.Items.getAsync(id)
|
const item = (await Zotero.Items.getAsync(id)) as Zotero.Item;
|
||||||
return item.isRegularItem() && !item.isFeedItem
|
return item.isRegularItem() && !(item as any).isFeedItem;
|
||||||
})
|
});
|
||||||
return ids
|
return ids;
|
||||||
}
|
}
|
||||||
const text = prompt.inputNode.value;
|
const text = prompt.inputNode.value;
|
||||||
prompt.showTip("Searching...")
|
prompt.showTip("Searching...");
|
||||||
const s = new Zotero.Search();
|
const s = new Zotero.Search();
|
||||||
s.addCondition("quicksearch-titleCreatorYear", "contains", text);
|
s.addCondition("quicksearch-titleCreatorYear", "contains", text);
|
||||||
s.addCondition("itemType", "isNot", "attachment");
|
s.addCondition("itemType", "isNot", "attachment");
|
||||||
@ -552,38 +562,56 @@ export class PromptExampleFactory {
|
|||||||
prompt.exit();
|
prompt.exit();
|
||||||
const container = prompt.createCommandsContainer();
|
const container = prompt.createCommandsContainer();
|
||||||
container.classList.add("suggestions");
|
container.classList.add("suggestions");
|
||||||
ids = filter(ids)
|
ids = filter(ids);
|
||||||
console.log(ids.length)
|
console.log(ids.length);
|
||||||
if (ids.length == 0) {
|
if (ids.length == 0) {
|
||||||
const s = new Zotero.Search();
|
const s = new Zotero.Search();
|
||||||
const operators = ['is', 'isNot', 'true', 'false', 'isInTheLast', 'isBefore', 'isAfter', 'contains', 'doesNotContain', 'beginsWith'];
|
const operators = [
|
||||||
let hasValidCondition = false
|
"is",
|
||||||
let joinMode: string = "all"
|
"isNot",
|
||||||
|
"true",
|
||||||
|
"false",
|
||||||
|
"isInTheLast",
|
||||||
|
"isBefore",
|
||||||
|
"isAfter",
|
||||||
|
"contains",
|
||||||
|
"doesNotContain",
|
||||||
|
"beginsWith",
|
||||||
|
];
|
||||||
|
let hasValidCondition = false;
|
||||||
|
let joinMode: string = "all";
|
||||||
if (/\s*\|\|\s*/.test(text)) {
|
if (/\s*\|\|\s*/.test(text)) {
|
||||||
joinMode = "any"
|
joinMode = "any";
|
||||||
}
|
}
|
||||||
text.split(/\s*(&&|\|\|)\s*/g).forEach((conditinString: string) => {
|
text.split(/\s*(&&|\|\|)\s*/g).forEach((conditinString: string) => {
|
||||||
let conditions = conditinString.split(/\s+/g);
|
let conditions = conditinString.split(/\s+/g);
|
||||||
if (conditions.length == 3 && operators.indexOf(conditions[1]) != -1) {
|
if (
|
||||||
hasValidCondition = true
|
conditions.length == 3 &&
|
||||||
s.addCondition("joinMode", joinMode);
|
operators.indexOf(conditions[1]) != -1
|
||||||
|
) {
|
||||||
|
hasValidCondition = true;
|
||||||
|
s.addCondition(
|
||||||
|
"joinMode",
|
||||||
|
joinMode as Zotero.Search.Operator,
|
||||||
|
""
|
||||||
|
);
|
||||||
s.addCondition(
|
s.addCondition(
|
||||||
conditions[0] as string,
|
conditions[0] as string,
|
||||||
conditions[1] as Zotero.Search.Operator,
|
conditions[1] as Zotero.Search.Operator,
|
||||||
conditions[2] as string
|
conditions[2] as string
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
if (hasValidCondition) {
|
if (hasValidCondition) {
|
||||||
ids = await s.search();
|
ids = await s.search();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ids = filter(ids)
|
ids = filter(ids);
|
||||||
console.log(ids.length)
|
console.log(ids.length);
|
||||||
if (ids.length > 0) {
|
if (ids.length > 0) {
|
||||||
ids.forEach((id: number) => {
|
ids.forEach((id: number) => {
|
||||||
const item = Zotero.Items.get(id)
|
const item = Zotero.Items.get(id);
|
||||||
const title = item.getField("title")
|
const title = item.getField("title");
|
||||||
const ele = ztoolkit.UI.createElement(document, "div", {
|
const ele = ztoolkit.UI.createElement(document, "div", {
|
||||||
namespace: "html",
|
namespace: "html",
|
||||||
classList: ["command"],
|
classList: ["command"],
|
||||||
@ -592,17 +620,17 @@ export class PromptExampleFactory {
|
|||||||
type: "mousemove",
|
type: "mousemove",
|
||||||
listener: function () {
|
listener: function () {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
prompt.selectItem(this)
|
prompt.selectItem(this);
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "click",
|
type: "click",
|
||||||
listener: () => {
|
listener: () => {
|
||||||
prompt.promptNode.style.display = "none"
|
prompt.promptNode.style.display = "none";
|
||||||
Zotero_Tabs.select('zotero-pane');
|
Zotero_Tabs.select("zotero-pane");
|
||||||
ZoteroPane.selectItem(item.id);
|
ZoteroPane.selectItem(item.id);
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
styles: {
|
styles: {
|
||||||
display: "flex",
|
display: "flex",
|
||||||
@ -616,35 +644,35 @@ export class PromptExampleFactory {
|
|||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
textOverflow: "ellipsis",
|
textOverflow: "ellipsis",
|
||||||
whiteSpace: "nowrap"
|
whiteSpace: "nowrap",
|
||||||
|
|
||||||
},
|
},
|
||||||
properties: {
|
properties: {
|
||||||
innerText: title
|
innerText: title,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
tag: "span",
|
tag: "span",
|
||||||
styles: {
|
styles: {
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
textOverflow: "ellipsis",
|
textOverflow: "ellipsis",
|
||||||
whiteSpace: "nowrap"
|
whiteSpace: "nowrap",
|
||||||
},
|
},
|
||||||
properties: {
|
properties: {
|
||||||
innerHTML: getItemDescription(item)
|
innerHTML: getItemDescription(item),
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
})
|
});
|
||||||
container.appendChild(ele)
|
container.appendChild(ele);
|
||||||
})
|
});
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
prompt.exit()
|
prompt.exit();
|
||||||
prompt.showTip("Not Found.")
|
prompt.showTip("Not Found.");
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}])
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@example
|
@example
|
||||||
@ -656,16 +684,18 @@ export class PromptExampleFactory {
|
|||||||
// The when function is executed when Prompt UI is woken up by `Shift + P`, and this command does not display when false is returned.
|
// The when function is executed when Prompt UI is woken up by `Shift + P`, and this command does not display when false is returned.
|
||||||
when: () => {
|
when: () => {
|
||||||
const items = ZoteroPane.getSelectedItems();
|
const items = ZoteroPane.getSelectedItems();
|
||||||
return items.length > 0
|
return items.length > 0;
|
||||||
},
|
},
|
||||||
callback(prompt) {
|
callback(prompt) {
|
||||||
prompt.inputNode.placeholder = "Hello World!"
|
prompt.inputNode.placeholder = "Hello World!";
|
||||||
const items = ZoteroPane.getSelectedItems();
|
const items = ZoteroPane.getSelectedItems();
|
||||||
ztoolkit.getGlobal("alert")(
|
ztoolkit.getGlobal("alert")(
|
||||||
`You select ${items.length} items!\n\n${
|
`You select ${items.length} items!\n\n${items
|
||||||
items.map(
|
.map(
|
||||||
(item, index) => String(index+1) + ". " + item.getDisplayTitle()
|
(item, index) =>
|
||||||
).join("\n")}`
|
String(index + 1) + ". " + item.getDisplayTitle()
|
||||||
|
)
|
||||||
|
.join("\n")}`
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user