From 1576999dba06e64701b8317a311430c80ba2f10a Mon Sep 17 00:00:00 2001 From: Zhu Liyang <36814419+zhu181@users.noreply.github.com> Date: Thu, 28 May 2026 20:55:05 +0800 Subject: [PATCH 1/2] feat: add citationKey field to various item types in zotero-items.edn --- src/resources/zotero-items.edn | 68 +++++++++++++++++----------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/resources/zotero-items.edn b/src/resources/zotero-items.edn index a2ef53c14b..1f05f89d9f 100644 --- a/src/resources/zotero-items.edn +++ b/src/resources/zotero-items.edn @@ -2,7 +2,7 @@ :fields #{"url" "artworkSize" "abstractNote" "libraryCatalog" "archive" "rights" "accessDate" "title" "date" "extra" "shortTitle" "artworkMedium" - "archiveLocation" "callNumber" "language"}, + "archiveLocation" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "artist", :primary true} {:creator-type "contributor"}]} {:item-type "attachment", @@ -13,7 +13,7 @@ #{"url" "audioRecordingFormat" "place" "abstractNote" "libraryCatalog" "label" "numberOfVolumes" "archive" "rights" "accessDate" "title" "seriesTitle" "volume" "date" "extra" "shortTitle" "archiveLocation" "ISBN" - "callNumber" "language" "runningTime"}, + "callNumber" "language" "runningTime" "citationKey"}, :creator-types [{:creator-type "performer", :primary true} {:creator-type "contributor"} @@ -23,7 +23,7 @@ :fields #{"url" "legislativeBody" "abstractNote" "section" "rights" "billNumber" "accessDate" "codeVolume" "title" "history" "date" "extra" "shortTitle" - "session" "language" "code" "codePages"}, + "session" "language" "code" "codePages" "citationKey"}, :creator-types [{:creator-type "sponsor", :primary true} {:creator-type "cosponsor"} @@ -31,7 +31,7 @@ {:item-type "blogPost", :fields #{"url" "websiteType" "abstractNote" "rights" "blogTitle" "accessDate" - "title" "date" "extra" "shortTitle" "language"}, + "title" "date" "extra" "shortTitle" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "commenter"} @@ -41,7 +41,7 @@ #{"url" "place" "abstractNote" "libraryCatalog" "numberOfVolumes" "archive" "rights" "accessDate" "title" "edition" "publisher" "numPages" "series" "volume" "date" "extra" "shortTitle" "archiveLocation" "ISBN" "callNumber" - "language" "seriesNumber"}, + "language" "seriesNumber" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -53,7 +53,7 @@ #{"url" "bookTitle" "pages" "place" "abstractNote" "libraryCatalog" "numberOfVolumes" "archive" "rights" "accessDate" "title" "edition" "publisher" "series" "volume" "date" "extra" "shortTitle" "archiveLocation" - "ISBN" "callNumber" "language" "seriesNumber"}, + "ISBN" "callNumber" "language" "seriesNumber" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -65,7 +65,7 @@ :fields #{"reporterVolume" "reporter" "url" "court" "abstractNote" "docketNumber" "rights" "accessDate" "caseName" "firstPage" "history" "extra" "shortTitle" - "language" "dateDecided"}, + "language" "dateDecided" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "counsel"} @@ -75,7 +75,7 @@ #{"url" "company" "place" "abstractNote" "libraryCatalog" "programmingLanguage" "archive" "rights" "accessDate" "title" "seriesTitle" "date" "extra" "shortTitle" "archiveLocation" "ISBN" "callNumber" "system" - "versionNumber"}, + "versionNumber" "citationKey"}, :creator-types [{:creator-type "programmer", :primary true} {:creator-type "contributor"}]} {:item-type "conferencePaper", @@ -83,7 +83,7 @@ #{"url" "pages" "place" "abstractNote" "libraryCatalog" "DOI" "proceedingsTitle" "conferenceName" "archive" "rights" "accessDate" "title" "publisher" "series" "volume" "date" "extra" "shortTitle" "archiveLocation" - "ISBN" "callNumber" "language"}, + "ISBN" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -95,7 +95,7 @@ #{"url" "pages" "place" "abstractNote" "libraryCatalog" "numberOfVolumes" "dictionaryTitle" "archive" "rights" "accessDate" "title" "edition" "publisher" "series" "volume" "date" "extra" "shortTitle" "archiveLocation" - "ISBN" "callNumber" "language" "seriesNumber"}, + "ISBN" "callNumber" "language" "seriesNumber" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -106,7 +106,7 @@ :fields #{"url" "abstractNote" "libraryCatalog" "archive" "rights" "accessDate" "title" "publisher" "date" "extra" "shortTitle" "archiveLocation" - "callNumber" "language"}, + "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -116,7 +116,7 @@ {:item-type "email", :fields #{"url" "abstractNote" "rights" "subject" "accessDate" "date" "extra" - "shortTitle" "language"}, + "shortTitle" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -126,7 +126,7 @@ #{"url" "pages" "place" "abstractNote" "libraryCatalog" "numberOfVolumes" "encyclopediaTitle" "archive" "rights" "accessDate" "title" "edition" "publisher" "series" "volume" "date" "extra" "shortTitle" "archiveLocation" - "ISBN" "callNumber" "language" "seriesNumber"}, + "ISBN" "callNumber" "language" "seriesNumber" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -137,7 +137,7 @@ :fields #{"url" "abstractNote" "libraryCatalog" "videoRecordingFormat" "archive" "rights" "genre" "accessDate" "title" "distributor" "date" "extra" - "shortTitle" "archiveLocation" "callNumber" "language" "runningTime"}, + "shortTitle" "archiveLocation" "callNumber" "language" "runningTime" "citationKey"}, :creator-types [{:creator-type "director", :primary true} {:creator-type "contributor"} @@ -146,19 +146,19 @@ {:item-type "forumPost", :fields #{"url" "forumTitle" "abstractNote" "rights" "postType" "accessDate" "title" - "date" "extra" "shortTitle" "language"}, + "date" "extra" "shortTitle" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"}]} {:item-type "hearing", :fields #{"documentNumber" "url" "legislativeBody" "pages" "place" "abstractNote" "numberOfVolumes" "rights" "accessDate" "committee" "title" "history" - "publisher" "date" "extra" "shortTitle" "session" "language"}, + "publisher" "date" "extra" "shortTitle" "session" "language" "citationKey"}, :creator-types [{:creator-type "contributor", :primary true}]} {:item-type "instantMessage", :fields #{"url" "abstractNote" "rights" "accessDate" "title" "date" "extra" - "shortTitle" "language"}, + "shortTitle" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -167,7 +167,7 @@ :fields #{"url" "abstractNote" "libraryCatalog" "interviewMedium" "archive" "rights" "accessDate" "title" "date" "extra" "shortTitle" "archiveLocation" - "callNumber" "language"}, + "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "interviewee", :primary true} {:creator-type "contributor"} @@ -178,7 +178,7 @@ #{"url" "ISSN" "issue" "pages" "abstractNote" "libraryCatalog" "DOI" "seriesText" "archive" "rights" "accessDate" "publicationTitle" "title" "series" "seriesTitle" "volume" "date" "extra" "shortTitle" - "journalAbbreviation" "archiveLocation" "callNumber" "language"}, + "journalAbbreviation" "archiveLocation" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -189,7 +189,7 @@ :fields #{"url" "letterType" "abstractNote" "libraryCatalog" "archive" "rights" "accessDate" "title" "date" "extra" "shortTitle" "archiveLocation" - "callNumber" "language"}, + "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -198,7 +198,7 @@ :fields #{"url" "ISSN" "issue" "pages" "abstractNote" "libraryCatalog" "archive" "rights" "accessDate" "publicationTitle" "title" "volume" "date" "extra" - "shortTitle" "archiveLocation" "callNumber" "language"}, + "shortTitle" "archiveLocation" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -208,7 +208,7 @@ :fields #{"url" "place" "abstractNote" "libraryCatalog" "archive" "rights" "accessDate" "title" "manuscriptType" "numPages" "date" "extra" - "shortTitle" "archiveLocation" "callNumber" "language"}, + "shortTitle" "archiveLocation" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -217,7 +217,7 @@ :fields #{"url" "place" "scale" "abstractNote" "libraryCatalog" "mapType" "archive" "rights" "accessDate" "title" "edition" "publisher" "seriesTitle" "date" - "extra" "shortTitle" "archiveLocation" "ISBN" "callNumber" "language"}, + "extra" "shortTitle" "archiveLocation" "ISBN" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "cartographer", :primary true} {:creator-type "contributor"} @@ -226,7 +226,7 @@ :fields #{"url" "ISSN" "pages" "place" "abstractNote" "libraryCatalog" "section" "archive" "rights" "accessDate" "publicationTitle" "title" "edition" "date" - "extra" "shortTitle" "archiveLocation" "callNumber" "language"}, + "extra" "shortTitle" "archiveLocation" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -238,7 +238,7 @@ #{"url" "country" "references" "pages" "place" "patentNumber" "abstractNote" "issueDate" "filingDate" "applicationNumber" "rights" "accessDate" "title" "assignee" "priorityNumbers" "extra" "legalStatus" "shortTitle" "language" - "issuingAuthority"}, + "issuingAuthority" "citationKey"}, :creator-types [{:creator-type "inventor", :primary true} {:creator-type "attorneyAgent"} @@ -247,7 +247,7 @@ :fields #{"url" "abstractNote" "audioFileType" "rights" "accessDate" "title" "seriesTitle" "extra" "shortTitle" "language" "runningTime" - "episodeNumber"}, + "episodeNumber" "citationKey"}, :creator-types [{:creator-type "podcaster", :primary true} {:creator-type "contributor"} @@ -255,7 +255,7 @@ {:item-type "presentation", :fields #{"url" "place" "abstractNote" "rights" "accessDate" "title" "date" "extra" - "shortTitle" "language" "presentationType" "meetingName"}, + "shortTitle" "language" "presentationType" "meetingName" "citationKey"}, :creator-types [{:creator-type "presenter", :primary true} {:creator-type "contributor"}]} {:item-type "radioBroadcast", @@ -263,7 +263,7 @@ #{"url" "audioRecordingFormat" "place" "abstractNote" "libraryCatalog" "programTitle" "network" "archive" "rights" "accessDate" "title" "date" "extra" "shortTitle" "archiveLocation" "callNumber" "language" - "runningTime" "episodeNumber"}, + "runningTime" "episodeNumber" "citationKey"}, :creator-types [{:creator-type "director", :primary true} {:creator-type "scriptwriter"} @@ -276,7 +276,7 @@ #{"reportType" "url" "reportNumber" "pages" "place" "abstractNote" "libraryCatalog" "archive" "rights" "accessDate" "title" "seriesTitle" "institution" "date" "extra" "shortTitle" "archiveLocation" "callNumber" - "language"}, + "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} @@ -286,14 +286,14 @@ :fields #{"nameOfAct" "url" "pages" "abstractNote" "dateEnacted" "codeNumber" "section" "rights" "accessDate" "history" "extra" "shortTitle" "session" - "language" "publicLawNumber" "code"}, + "language" "publicLawNumber" "code" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"}]} {:item-type "thesis", :fields #{"thesisType" "university" "url" "place" "abstractNote" "libraryCatalog" "archive" "rights" "accessDate" "title" "numPages" "date" "extra" - "shortTitle" "archiveLocation" "callNumber" "language"}, + "shortTitle" "archiveLocation" "callNumber" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"}]} {:item-type "tvBroadcast", @@ -301,7 +301,7 @@ #{"url" "place" "abstractNote" "libraryCatalog" "programTitle" "videoRecordingFormat" "network" "archive" "rights" "accessDate" "title" "date" "extra" "shortTitle" "archiveLocation" "callNumber" "language" - "runningTime" "episodeNumber"}, + "runningTime" "episodeNumber" "citationKey"}, :creator-types [{:creator-type "director", :primary true} {:creator-type "scriptwriter"} @@ -314,7 +314,7 @@ #{"studio" "url" "place" "abstractNote" "libraryCatalog" "numberOfVolumes" "videoRecordingFormat" "archive" "rights" "accessDate" "title" "seriesTitle" "volume" "date" "extra" "shortTitle" "archiveLocation" "ISBN" - "callNumber" "language" "runningTime"}, + "callNumber" "language" "runningTime" "citationKey"}, :creator-types [{:creator-type "director", :primary true} {:creator-type "scriptwriter"} @@ -324,7 +324,7 @@ {:item-type "webpage", :fields #{"url" "websiteTitle" "websiteType" "abstractNote" "rights" "accessDate" - "title" "date" "extra" "shortTitle" "language"}, + "title" "date" "extra" "shortTitle" "language" "citationKey"}, :creator-types [{:creator-type "author", :primary true} {:creator-type "contributor"} From 7a8b6453f4495a637ac2777e08859fc71595f982 Mon Sep 17 00:00:00 2001 From: Zhu Liyang <36814419+zhu181@users.noreply.github.com> Date: Thu, 28 May 2026 21:53:58 +0800 Subject: [PATCH 2/2] refactor: rename citation-key function and separate logic for new and old citation keys --- src/main/frontend/extensions/zotero/extractor.cljs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/frontend/extensions/zotero/extractor.cljs b/src/main/frontend/extensions/zotero/extractor.cljs index 51d6ff1ae6..5cc3bfd451 100644 --- a/src/main/frontend/extensions/zotero/extractor.cljs +++ b/src/main/frontend/extensions/zotero/extractor.cljs @@ -12,7 +12,10 @@ (defmulti extract item-type) -(defn citation-key [item] +(defn citation-key-new [item] + (-> item :data :citation-key)) + +(defn citation-key-old [item] (let [extra (-> item :data :extra) citation (->> extra (string/split-lines) @@ -21,6 +24,10 @@ (when citation (string/trim (string/replace citation "Citation Key: " ""))))) +(defn citation-key [item] + (or (citation-key-new item) + (citation-key-old item))) + (defn title [item] (-> item :data :title)) (defn item-key [item] (:key item))