citeclaw 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1723) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +152 -0
  3. package/app.js +318 -0
  4. package/config.dev.yaml +124 -0
  5. package/config.prod.yaml +123 -0
  6. package/config.yaml +0 -0
  7. package/lib/Citation.js +101 -0
  8. package/lib/CitoidError.js +61 -0
  9. package/lib/CitoidRequest.js +150 -0
  10. package/lib/CitoidResponse.js +44 -0
  11. package/lib/CitoidService.js +1118 -0
  12. package/lib/Exporter.js +1052 -0
  13. package/lib/OutgoingRequestThrottle.js +96 -0
  14. package/lib/Scraper.js +617 -0
  15. package/lib/Translator.js +76 -0
  16. package/lib/ZoteroService.js +220 -0
  17. package/lib/api-util.js +125 -0
  18. package/lib/external-apis/CrossRefService.js +122 -0
  19. package/lib/external-apis/OpenAlexService.js +245 -0
  20. package/lib/external-apis/PubMedService.js +82 -0
  21. package/lib/external-apis/SemanticScholarService.js +221 -0
  22. package/lib/external-apis/WaybackMachine.js +92 -0
  23. package/lib/hostIsAllowed.js +128 -0
  24. package/lib/swagger-ui.js +104 -0
  25. package/lib/translators/README.md +12 -0
  26. package/lib/translators/bePress.js +319 -0
  27. package/lib/translators/coins.js +360 -0
  28. package/lib/translators/crossRef.js +485 -0
  29. package/lib/translators/dublinCore.js +215 -0
  30. package/lib/translators/general.js +157 -0
  31. package/lib/translators/openGraph.js +177 -0
  32. package/lib/translators/util/index.js +209 -0
  33. package/lib/unshorten.js +109 -0
  34. package/lib/util.js +410 -0
  35. package/lib/zotero/cachedTypes.js +232 -0
  36. package/lib/zotero/typeSchemaData.js +366 -0
  37. package/package.json +121 -0
  38. package/routes/citoid.js +101 -0
  39. package/routes/info.js +81 -0
  40. package/routes/root.js +51 -0
  41. package/scripts/botcite.js +5021 -0
  42. package/scripts/citeclaw.js +10 -0
  43. package/server.js +12 -0
  44. package/spec.yaml +156 -0
  45. package/targets.yaml +2 -0
  46. package/vendor/translators-official/ABC News Australia.js +224 -0
  47. package/vendor/translators-official/ACLS Humanities EBook.js +165 -0
  48. package/vendor/translators-official/ACLWeb.js +600 -0
  49. package/vendor/translators-official/ACM Digital Library.js +708 -0
  50. package/vendor/translators-official/ACM Queue.js +391 -0
  51. package/vendor/translators-official/ACS Publications.js +633 -0
  52. package/vendor/translators-official/ADS Bibcode.js +664 -0
  53. package/vendor/translators-official/AEA Web.js +450 -0
  54. package/vendor/translators-official/AGRIS.js +311 -0
  55. package/vendor/translators-official/AIP.js +295 -0
  56. package/vendor/translators-official/AMS Journals.js +136 -0
  57. package/vendor/translators-official/AMS MathSciNet (Legacy).js +313 -0
  58. package/vendor/translators-official/AMS MathSciNet.js +288 -0
  59. package/vendor/translators-official/APA PsycNET.js +915 -0
  60. package/vendor/translators-official/APN.ru.js +132 -0
  61. package/vendor/translators-official/APS-Physics.js +204 -0
  62. package/vendor/translators-official/APS.js +542 -0
  63. package/vendor/translators-official/ARTFL Encyclopedie.js +283 -0
  64. package/vendor/translators-official/ARTnews.js +155 -0
  65. package/vendor/translators-official/ARTstor.js +619 -0
  66. package/vendor/translators-official/ASCE.js +199 -0
  67. package/vendor/translators-official/ASCO Meeting Library.js +153 -0
  68. package/vendor/translators-official/ASTIS.js +337 -0
  69. package/vendor/translators-official/ATS International Journal.js +290 -0
  70. package/vendor/translators-official/Access Engineering.js +384 -0
  71. package/vendor/translators-official/Access Medicine.js +343 -0
  72. package/vendor/translators-official/Access Science.js +391 -0
  73. package/vendor/translators-official/Adam Matthew Digital.js +405 -0
  74. package/vendor/translators-official/Agencia del ISBN.js +77 -0
  75. package/vendor/translators-official/Ahval News.js +309 -0
  76. package/vendor/translators-official/Air University Journals.js +236 -0
  77. package/vendor/translators-official/Airiti.js +423 -0
  78. package/vendor/translators-official/Alexander Street Press.js +198 -0
  79. package/vendor/translators-official/AllAfrica.js +291 -0
  80. package/vendor/translators-official/Alsharekh.js +242 -0
  81. package/vendor/translators-official/AlterNet.js +134 -0
  82. package/vendor/translators-official/Aluka.js +261 -0
  83. package/vendor/translators-official/Amazon.js +1043 -0
  84. package/vendor/translators-official/American Archive of Public Broadcasting.js +592 -0
  85. package/vendor/translators-official/American Institute of Aeronautics and Astronautics.js +210 -0
  86. package/vendor/translators-official/American Prospect.js +114 -0
  87. package/vendor/translators-official/Anarchist Library.js +382 -0
  88. package/vendor/translators-official/Ancestry.com US Federal Census.js +164 -0
  89. package/vendor/translators-official/Annual Reviews.js +329 -0
  90. package/vendor/translators-official/Antikvarium.hu.js +280 -0
  91. package/vendor/translators-official/AquaDocs.js +390 -0
  92. package/vendor/translators-official/Archeion.js +249 -0
  93. package/vendor/translators-official/Archiv fuer Sozialgeschichte.js +157 -0
  94. package/vendor/translators-official/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +179 -0
  95. package/vendor/translators-official/Archives Canada.js +142 -0
  96. package/vendor/translators-official/Ariana News.js +203 -0
  97. package/vendor/translators-official/Art Institute of Chicago.js +279 -0
  98. package/vendor/translators-official/Artefacts Canada.js +192 -0
  99. package/vendor/translators-official/Artforum.js +438 -0
  100. package/vendor/translators-official/Atlanta Journal-Constitution.js +311 -0
  101. package/vendor/translators-official/Atypon Journals.js +1204 -0
  102. package/vendor/translators-official/AustLII and NZLII.js +604 -0
  103. package/vendor/translators-official/Australian Dictionary of Biography.js +196 -0
  104. package/vendor/translators-official/BAILII.js +176 -0
  105. package/vendor/translators-official/BBC Genome.js +254 -0
  106. package/vendor/translators-official/BBC.js +430 -0
  107. package/vendor/translators-official/BIBSYS.js +112 -0
  108. package/vendor/translators-official/BOCC.js +217 -0
  109. package/vendor/translators-official/BOE.js +229 -0
  110. package/vendor/translators-official/BOFiP-Impots.js +132 -0
  111. package/vendor/translators-official/Baidu Scholar.js +276 -0
  112. package/vendor/translators-official/Bangkok Post.js +216 -0
  113. package/vendor/translators-official/Baruch Foundation.js +175 -0
  114. package/vendor/translators-official/Beobachter.js +175 -0
  115. package/vendor/translators-official/Bezneng Gajit.js +92 -0
  116. package/vendor/translators-official/BibLaTeX.js +888 -0
  117. package/vendor/translators-official/BibTeX.js +4236 -0
  118. package/vendor/translators-official/Biblio.com.js +216 -0
  119. package/vendor/translators-official/Bibliontology RDF.js +1166 -0
  120. package/vendor/translators-official/Biblioteca Nacional de Maestros.js +213 -0
  121. package/vendor/translators-official/Bibliotheque et Archives Nationale du Quebec (Pistard).js +147 -0
  122. package/vendor/translators-official/Bibliotheque et Archives Nationales du Quebec.js +266 -0
  123. package/vendor/translators-official/Bibliotheque nationale de France.js +872 -0
  124. package/vendor/translators-official/BioMed Central.js +585 -0
  125. package/vendor/translators-official/BioOne.js +233 -0
  126. package/vendor/translators-official/Bioconductor.js +343 -0
  127. package/vendor/translators-official/Blaetter.js +192 -0
  128. package/vendor/translators-official/Blogger.js +244 -0
  129. package/vendor/translators-official/Bloomberg.js +205 -0
  130. package/vendor/translators-official/Bloomsbury Food Library.js +296 -0
  131. package/vendor/translators-official/Bluesky.js +195 -0
  132. package/vendor/translators-official/BnF ISBN.js +129 -0
  133. package/vendor/translators-official/Bookmarks.js +282 -0
  134. package/vendor/translators-official/Bookshop.org.js +223 -0
  135. package/vendor/translators-official/Boston Review.js +332 -0
  136. package/vendor/translators-official/Bosworth Toller's Anglo-Saxon Dictionary Online.js +496 -0
  137. package/vendor/translators-official/Bracero History Archive.js +200 -0
  138. package/vendor/translators-official/Brill.js +434 -0
  139. package/vendor/translators-official/Brukerhandboken.js +153 -0
  140. package/vendor/translators-official/Bryn Mawr Classical Review.js +303 -0
  141. package/vendor/translators-official/Bundesgesetzblatt.js +231 -0
  142. package/vendor/translators-official/Business Standard.js +151 -0
  143. package/vendor/translators-official/CABI - CAB Abstracts.js +317 -0
  144. package/vendor/translators-official/CAOD.js +260 -0
  145. package/vendor/translators-official/CBC.js +439 -0
  146. package/vendor/translators-official/CCfr (BnF).js +162 -0
  147. package/vendor/translators-official/CERN Document Server.js +277 -0
  148. package/vendor/translators-official/CEUR Workshop Proceedings.js +145 -0
  149. package/vendor/translators-official/CFF References.js +170 -0
  150. package/vendor/translators-official/CFF.js +113 -0
  151. package/vendor/translators-official/CIA World Factbook.js +128 -0
  152. package/vendor/translators-official/CLACSO.js +226 -0
  153. package/vendor/translators-official/CLASE.js +135 -0
  154. package/vendor/translators-official/CNKI.js +731 -0
  155. package/vendor/translators-official/COBISS.js +1945 -0
  156. package/vendor/translators-official/COinS.js +336 -0
  157. package/vendor/translators-official/CQ Press.js +418 -0
  158. package/vendor/translators-official/CROSBI.js +227 -0
  159. package/vendor/translators-official/CSIRO Publishing.js +139 -0
  160. package/vendor/translators-official/CSL JSON.js +203 -0
  161. package/vendor/translators-official/CSV.js +294 -0
  162. package/vendor/translators-official/Cairn.info.js +368 -0
  163. package/vendor/translators-official/CalMatters.js +228 -0
  164. package/vendor/translators-official/Calisphere.js +355 -0
  165. package/vendor/translators-official/Camara Brasileira do Livro ISBN.js +842 -0
  166. package/vendor/translators-official/Cambridge Core.js +580 -0
  167. package/vendor/translators-official/Cambridge Engage Preprints.js +276 -0
  168. package/vendor/translators-official/CanLII.js +284 -0
  169. package/vendor/translators-official/Canada.com.js +171 -0
  170. package/vendor/translators-official/Canadian Letters and Images.js +148 -0
  171. package/vendor/translators-official/Canadiana.ca.js +196 -0
  172. package/vendor/translators-official/Cascadilla Proceedings Project.js +390 -0
  173. package/vendor/translators-official/Cell Press.js +516 -0
  174. package/vendor/translators-official/Central and Eastern European Online Library Journals.js +313 -0
  175. package/vendor/translators-official/Champlain Society - Collection.js +220 -0
  176. package/vendor/translators-official/ChatGPT.js +185 -0
  177. package/vendor/translators-official/Chicago Journal of Theoretical Computer Science.js +203 -0
  178. package/vendor/translators-official/Christian Science Monitor.js +148 -0
  179. package/vendor/translators-official/Chronicling America.js +131 -0
  180. package/vendor/translators-official/CiNii Research.js +168 -0
  181. package/vendor/translators-official/Citavi 5 XML.js +516 -0
  182. package/vendor/translators-official/CiteSeer.js +196 -0
  183. package/vendor/translators-official/Citizen Lab.js +347 -0
  184. package/vendor/translators-official/Civilization.ca.js +146 -0
  185. package/vendor/translators-official/Climate Change and Human Health Literature Portal.js +283 -0
  186. package/vendor/translators-official/Clinical Key.js +367 -0
  187. package/vendor/translators-official/Code4Lib Journal.js +143 -0
  188. package/vendor/translators-official/Colorado State Legislature.js +215 -0
  189. package/vendor/translators-official/Columbia University Press.js +238 -0
  190. package/vendor/translators-official/Common-Place.js +218 -0
  191. package/vendor/translators-official/Computer History Museum Archive.js +1319 -0
  192. package/vendor/translators-official/Copernicus.js +461 -0
  193. package/vendor/translators-official/Cornell LII.js +252 -0
  194. package/vendor/translators-official/Cornell University Press.js +235 -0
  195. package/vendor/translators-official/CourtListener.js +265 -0
  196. package/vendor/translators-official/Crossref REST.js +1757 -0
  197. package/vendor/translators-official/Crossref Unixref XML.js +965 -0
  198. package/vendor/translators-official/Current Affairs.js +160 -0
  199. package/vendor/translators-official/DABI.js +476 -0
  200. package/vendor/translators-official/DAI-Zenon.js +392 -0
  201. package/vendor/translators-official/DART-Europe.js +176 -0
  202. package/vendor/translators-official/DBLP Computer Science Bibliography.js +462 -0
  203. package/vendor/translators-official/DBpia.js +233 -0
  204. package/vendor/translators-official/DEPATISnet.js +373 -0
  205. package/vendor/translators-official/DOAJ.js +243 -0
  206. package/vendor/translators-official/DOI Content Negotiation.js +352 -0
  207. package/vendor/translators-official/DOI.js +322 -0
  208. package/vendor/translators-official/DPLA.js +425 -0
  209. package/vendor/translators-official/DSpace Intermediate Metadata.js +208 -0
  210. package/vendor/translators-official/Dagens Nyheter.js +369 -0
  211. package/vendor/translators-official/Dagstuhl Research Online Publication Server.js +276 -0
  212. package/vendor/translators-official/Dar Almandumah.js +253 -0
  213. package/vendor/translators-official/Data.gov.js +225 -0
  214. package/vendor/translators-official/Databrary.js +184 -0
  215. package/vendor/translators-official/Datacite JSON.js +1182 -0
  216. package/vendor/translators-official/Dataverse.js +418 -0
  217. package/vendor/translators-official/Daum News.js +139 -0
  218. package/vendor/translators-official/De Gruyter Brill.js +460 -0
  219. package/vendor/translators-official/Defense Technical Information Center.js +146 -0
  220. package/vendor/translators-official/Delpher.js +413 -0
  221. package/vendor/translators-official/Demographic Research.js +164 -0
  222. package/vendor/translators-official/Denik CZ.js +273 -0
  223. package/vendor/translators-official/Der Freitag.js +236 -0
  224. package/vendor/translators-official/Der Spiegel.js +479 -0
  225. package/vendor/translators-official/Desiring God.js +216 -0
  226. package/vendor/translators-official/Deutsche Fotothek.js +364 -0
  227. package/vendor/translators-official/Deutsche Nationalbibliothek.js +594 -0
  228. package/vendor/translators-official/Dialnet.js +258 -0
  229. package/vendor/translators-official/Die Zeit.js +378 -0
  230. package/vendor/translators-official/DigiZeitschriften.js +269 -0
  231. package/vendor/translators-official/Digital Humanities Quarterly.js +207 -0
  232. package/vendor/translators-official/Digital Spy.js +215 -0
  233. package/vendor/translators-official/Dimensions.js +233 -0
  234. package/vendor/translators-official/Douban.js +316 -0
  235. package/vendor/translators-official/Dreier Neuerscheinungsdienst.js +209 -0
  236. package/vendor/translators-official/DrugBank.ca.js +209 -0
  237. package/vendor/translators-official/Dryad Digital Repository.js +323 -0
  238. package/vendor/translators-official/Duke University Press Books.js +250 -0
  239. package/vendor/translators-official/E-periodica Switzerland.js +347 -0
  240. package/vendor/translators-official/EBSCO Discovery Layer.js +159 -0
  241. package/vendor/translators-official/EBSCOhost.js +592 -0
  242. package/vendor/translators-official/EIDR.js +184 -0
  243. package/vendor/translators-official/EPA National Library Catalog.js +245 -0
  244. package/vendor/translators-official/ERIC.js +986 -0
  245. package/vendor/translators-official/ESpacenet.js +465 -0
  246. package/vendor/translators-official/EUR-Lex.js +418 -0
  247. package/vendor/translators-official/Eastview.js +336 -0
  248. package/vendor/translators-official/Edinburgh University Press Journals.js +178 -0
  249. package/vendor/translators-official/Education Week.js +197 -0
  250. package/vendor/translators-official/El Comercio (Peru).js +347 -0
  251. package/vendor/translators-official/El Pais.js +262 -0
  252. package/vendor/translators-official/Electronic Colloquium on Computational Complexity.js +230 -0
  253. package/vendor/translators-official/Elicit.js +120 -0
  254. package/vendor/translators-official/Elsevier Health Journals.js +531 -0
  255. package/vendor/translators-official/Elsevier Pure.js +420 -0
  256. package/vendor/translators-official/Embedded Metadata.js +1978 -0
  257. package/vendor/translators-official/Emerald Insight.js +626 -0
  258. package/vendor/translators-official/Encyclopedia of Chicago.js +162 -0
  259. package/vendor/translators-official/Encyclopedia of Korean Culture.js +221 -0
  260. package/vendor/translators-official/Endnote XML.js +1407 -0
  261. package/vendor/translators-official/Engineering Village.js +139 -0
  262. package/vendor/translators-official/Envidat.js +331 -0
  263. package/vendor/translators-official/Epicurious.js +144 -0
  264. package/vendor/translators-official/Erudit.js +272 -0
  265. package/vendor/translators-official/Euclid.js +220 -0
  266. package/vendor/translators-official/EurasiaNet.js +109 -0
  267. package/vendor/translators-official/EurogamerUSgamer.js +380 -0
  268. package/vendor/translators-official/Europe PMC.js +448 -0
  269. package/vendor/translators-official/Evernote.js +104 -0
  270. package/vendor/translators-official/F1000 Research.js +655 -0
  271. package/vendor/translators-official/FAO Knowledge Repository.js +598 -0
  272. package/vendor/translators-official/FAOLEX Database.js +811 -0
  273. package/vendor/translators-official/FAZ.NET.js +231 -0
  274. package/vendor/translators-official/Fachportal Padagogik.js +839 -0
  275. package/vendor/translators-official/Factiva.js +302 -0
  276. package/vendor/translators-official/Failed Architecture.js +114 -0
  277. package/vendor/translators-official/Fairfax Australia.js +200 -0
  278. package/vendor/translators-official/Fatcat.js +425 -0
  279. package/vendor/translators-official/Figshare.js +191 -0
  280. package/vendor/translators-official/Financial Times.js +187 -0
  281. package/vendor/translators-official/Finna.js +357 -0
  282. package/vendor/translators-official/Flickr.js +318 -0
  283. package/vendor/translators-official/Foreign Affairs.js +485 -0
  284. package/vendor/translators-official/Foreign Policy.js +146 -0
  285. package/vendor/translators-official/FreeCite.js +95 -0
  286. package/vendor/translators-official/FreePatentsOnline.js +265 -0
  287. package/vendor/translators-official/Frieze.js +243 -0
  288. package/vendor/translators-official/Frontiers.js +667 -0
  289. package/vendor/translators-official/GMS German Medical Science.js +319 -0
  290. package/vendor/translators-official/GPO Access e-CFR.js +134 -0
  291. package/vendor/translators-official/Gale Databases.js +324 -0
  292. package/vendor/translators-official/GaleGDC.js +189 -0
  293. package/vendor/translators-official/Galegroup.js +327 -0
  294. package/vendor/translators-official/Gallica.js +194 -0
  295. package/vendor/translators-official/Game Studies.js +155 -0
  296. package/vendor/translators-official/GameSpot.js +199 -0
  297. package/vendor/translators-official/GameStar GamePro.js +198 -0
  298. package/vendor/translators-official/Gasyrlar Awazy.js +156 -0
  299. package/vendor/translators-official/Gemeinsamer Bibliotheksverbund ISBN.js +23 -0
  300. package/vendor/translators-official/Gene Ontology.js +128 -0
  301. package/vendor/translators-official/GitHub.js +501 -0
  302. package/vendor/translators-official/Globes.js +243 -0
  303. package/vendor/translators-official/Gmail.js +64 -0
  304. package/vendor/translators-official/Goodreads.js +219 -0
  305. package/vendor/translators-official/Google Books.js +552 -0
  306. package/vendor/translators-official/Google Gemini.js +116 -0
  307. package/vendor/translators-official/Google Patents.js +959 -0
  308. package/vendor/translators-official/Google Play.js +186 -0
  309. package/vendor/translators-official/Google Presentation.js +104 -0
  310. package/vendor/translators-official/Google Research.js +221 -0
  311. package/vendor/translators-official/Google Scholar.js +1361 -0
  312. package/vendor/translators-official/Gulag Many Days, Many Lives.js +179 -0
  313. package/vendor/translators-official/HAL.js +536 -0
  314. package/vendor/translators-official/HCSP.js +312 -0
  315. package/vendor/translators-official/HUDOC.js +650 -0
  316. package/vendor/translators-official/Haaretz.js +562 -0
  317. package/vendor/translators-official/Habr.js +232 -0
  318. package/vendor/translators-official/Handelszeitung.js +273 -0
  319. package/vendor/translators-official/Hanrei Watch.js +123 -0
  320. package/vendor/translators-official/Harper's Magazine.js +365 -0
  321. package/vendor/translators-official/Harvard Business Review.js +326 -0
  322. package/vendor/translators-official/Harvard Caselaw Access Project.js +244 -0
  323. package/vendor/translators-official/Harvard University Press Books.js +286 -0
  324. package/vendor/translators-official/HathiTrust.js +311 -0
  325. package/vendor/translators-official/HeinOnline.js +280 -0
  326. package/vendor/translators-official/Heise.js +200 -0
  327. package/vendor/translators-official/Herder.js +236 -0
  328. package/vendor/translators-official/HighBeam.js +198 -0
  329. package/vendor/translators-official/HighWire 2.0.js +1355 -0
  330. package/vendor/translators-official/HighWire.js +209 -0
  331. package/vendor/translators-official/Hindawi Publishers.js +177 -0
  332. package/vendor/translators-official/Hispanic-American Periodical Index.js +236 -0
  333. package/vendor/translators-official/Homeland Security Digital Library.js +426 -0
  334. package/vendor/translators-official/Hrvatska enciklopedija.js +118 -0
  335. package/vendor/translators-official/Huff Post.js +223 -0
  336. package/vendor/translators-official/Human Rights Watch.js +450 -0
  337. package/vendor/translators-official/IBISWorld.js +171 -0
  338. package/vendor/translators-official/IDEA ALM.js +536 -0
  339. package/vendor/translators-official/IEEE Computer Society.js +429 -0
  340. package/vendor/translators-official/IEEE Xplore.js +1000 -0
  341. package/vendor/translators-official/IETF.js +451 -0
  342. package/vendor/translators-official/IGN.js +136 -0
  343. package/vendor/translators-official/IMDb.js +566 -0
  344. package/vendor/translators-official/INSPIRE.js +247 -0
  345. package/vendor/translators-official/IPCC.js +757 -0
  346. package/vendor/translators-official/ISTC.js +181 -0
  347. package/vendor/translators-official/Idref.js +179 -0
  348. package/vendor/translators-official/In These Times.js +196 -0
  349. package/vendor/translators-official/Ined.js +558 -0
  350. package/vendor/translators-official/InfoTrac.js +279 -0
  351. package/vendor/translators-official/Informationssystem Medienpaedagogik.js +305 -0
  352. package/vendor/translators-official/IngentaConnect.js +312 -0
  353. package/vendor/translators-official/Inside Higher Ed.js +167 -0
  354. package/vendor/translators-official/Insignia OPAC.js +114 -0
  355. package/vendor/translators-official/Institute of Contemporary Art.js +180 -0
  356. package/vendor/translators-official/Institute of Physics.js +340 -0
  357. package/vendor/translators-official/Integrum.js +173 -0
  358. package/vendor/translators-official/Intellixir.js +264 -0
  359. package/vendor/translators-official/Inter-Research Science Center.js +185 -0
  360. package/vendor/translators-official/International Nuclear Information System.js +285 -0
  361. package/vendor/translators-official/Internet Archive Scholar.js +106 -0
  362. package/vendor/translators-official/Internet Archive Wayback Machine.js +152 -0
  363. package/vendor/translators-official/Internet Archive.js +552 -0
  364. package/vendor/translators-official/InvenioRDM.js +1250 -0
  365. package/vendor/translators-official/Isidore.js +235 -0
  366. package/vendor/translators-official/J-Stage.js +272 -0
  367. package/vendor/translators-official/JETS.js +122 -0
  368. package/vendor/translators-official/JISC Historical Texts.js +273 -0
  369. package/vendor/translators-official/JRC Publications Repository.js +569 -0
  370. package/vendor/translators-official/JSTOR.js +821 -0
  371. package/vendor/translators-official/Jahrbuch.js +213 -0
  372. package/vendor/translators-official/Japan Times Online.js +138 -0
  373. package/vendor/translators-official/Journal of Electronic Publishing.js +147 -0
  374. package/vendor/translators-official/Journal of Extension.js +288 -0
  375. package/vendor/translators-official/Journal of Machine Learning Research.js +441 -0
  376. package/vendor/translators-official/Journal of Religion and Society.js +174 -0
  377. package/vendor/translators-official/JurPC.js +274 -0
  378. package/vendor/translators-official/Juricaf.js +141 -0
  379. package/vendor/translators-official/Juris.js +728 -0
  380. package/vendor/translators-official/K10plus ISBN.js +386 -0
  381. package/vendor/translators-official/KStudy.js +632 -0
  382. package/vendor/translators-official/Kanopy.js +358 -0
  383. package/vendor/translators-official/Khaama Press.js +249 -0
  384. package/vendor/translators-official/KiM.js +259 -0
  385. package/vendor/translators-official/KitapYurdu.com.js +376 -0
  386. package/vendor/translators-official/Kommersant.js +174 -0
  387. package/vendor/translators-official/Korean National Library.js +621 -0
  388. package/vendor/translators-official/L'Annee Philologique.js +267 -0
  389. package/vendor/translators-official/LA Times.js +239 -0
  390. package/vendor/translators-official/LIBRIS ISBN.js +103 -0
  391. package/vendor/translators-official/LIVIVO.js +260 -0
  392. package/vendor/translators-official/LWN.net.js +350 -0
  393. package/vendor/translators-official/La Croix.js +237 -0
  394. package/vendor/translators-official/La Nacion (Argentina).js +231 -0
  395. package/vendor/translators-official/La Presse.js +218 -0
  396. package/vendor/translators-official/La Republica (Peru).js +174 -0
  397. package/vendor/translators-official/Lagen.nu.js +214 -0
  398. package/vendor/translators-official/Landesbibliographie Baden-Wurttemberg.js +324 -0
  399. package/vendor/translators-official/Lapham's Quarterly.js +1062 -0
  400. package/vendor/translators-official/Le Devoir.js +167 -0
  401. package/vendor/translators-official/Le Figaro.js +225 -0
  402. package/vendor/translators-official/Le Maitron.js +484 -0
  403. package/vendor/translators-official/Le Monde.js +245 -0
  404. package/vendor/translators-official/Le monde diplomatique.js +200 -0
  405. package/vendor/translators-official/Legifrance.js +641 -0
  406. package/vendor/translators-official/Legislative Insight.js +406 -0
  407. package/vendor/translators-official/Lexis+.js +264 -0
  408. package/vendor/translators-official/LexisNexis.js +505 -0
  409. package/vendor/translators-official/Libraries Tasmania.js +778 -0
  410. package/vendor/translators-official/Library Catalog (Aleph).js +385 -0
  411. package/vendor/translators-official/Library Catalog (Amicus).js +254 -0
  412. package/vendor/translators-official/Library Catalog (Aquabrowser).js +253 -0
  413. package/vendor/translators-official/Library Catalog (BiblioCommons).js +249 -0
  414. package/vendor/translators-official/Library Catalog (Blacklight).js +341 -0
  415. package/vendor/translators-official/Library Catalog (Capita Prism).js +162 -0
  416. package/vendor/translators-official/Library Catalog (DRA).js +203 -0
  417. package/vendor/translators-official/Library Catalog (Dynix).js +315 -0
  418. package/vendor/translators-official/Library Catalog (EBSCO Locate).js +442 -0
  419. package/vendor/translators-official/Library Catalog (Encore).js +211 -0
  420. package/vendor/translators-official/Library Catalog (InnoPAC).js +305 -0
  421. package/vendor/translators-official/Library Catalog (Koha).js +225 -0
  422. package/vendor/translators-official/Library Catalog (Mango).js +285 -0
  423. package/vendor/translators-official/Library Catalog (OPALS).js +200 -0
  424. package/vendor/translators-official/Library Catalog (PICA).js +2120 -0
  425. package/vendor/translators-official/Library Catalog (PICA2).js +331 -0
  426. package/vendor/translators-official/Library Catalog (Pika).js +488 -0
  427. package/vendor/translators-official/Library Catalog (Polaris).js +183 -0
  428. package/vendor/translators-official/Library Catalog (Quolto).js +320 -0
  429. package/vendor/translators-official/Library Catalog (RERO ILS).js +754 -0
  430. package/vendor/translators-official/Library Catalog (SIRSI eLibrary).js +407 -0
  431. package/vendor/translators-official/Library Catalog (SIRSI).js +452 -0
  432. package/vendor/translators-official/Library Catalog (SLIMS).js +146 -0
  433. package/vendor/translators-official/Library Catalog (TIND ILS).js +773 -0
  434. package/vendor/translators-official/Library Catalog (TLCYouSeeMore).js +132 -0
  435. package/vendor/translators-official/Library Catalog (TinREAD).js +277 -0
  436. package/vendor/translators-official/Library Catalog (VTLS).js +125 -0
  437. package/vendor/translators-official/Library Catalog (Visual Library 2021).js +765 -0
  438. package/vendor/translators-official/Library Catalog (Voyager 7).js +199 -0
  439. package/vendor/translators-official/Library Catalog (Voyager).js +212 -0
  440. package/vendor/translators-official/Library Genesis.js +337 -0
  441. package/vendor/translators-official/Library Hub Discover.js +359 -0
  442. package/vendor/translators-official/Library of Congress Digital Collections.js +869 -0
  443. package/vendor/translators-official/Library of Congress ISBN.js +86 -0
  444. package/vendor/translators-official/LingBuzz.js +359 -0
  445. package/vendor/translators-official/Lippincott Williams and Wilkins.js +341 -0
  446. package/vendor/translators-official/Literary Hub.js +950 -0
  447. package/vendor/translators-official/Litres.js +236 -0
  448. package/vendor/translators-official/LiveJournal.js +219 -0
  449. package/vendor/translators-official/London Review of Books.js +291 -0
  450. package/vendor/translators-official/LookUs.js +260 -0
  451. package/vendor/translators-official/Lulu.js +264 -0
  452. package/vendor/translators-official/MAB2.js +373 -0
  453. package/vendor/translators-official/MARC.js +1080 -0
  454. package/vendor/translators-official/MARCXML.js +489 -0
  455. package/vendor/translators-official/MCV.js +258 -0
  456. package/vendor/translators-official/MDPI Journals.js +356 -0
  457. package/vendor/translators-official/MEDLINEnbib.js +1561 -0
  458. package/vendor/translators-official/METS.js +384 -0
  459. package/vendor/translators-official/MIDAS Journals.js +343 -0
  460. package/vendor/translators-official/MIT Press Books.js +637 -0
  461. package/vendor/translators-official/MODS.js +2545 -0
  462. package/vendor/translators-official/MPG PuRe.js +541 -0
  463. package/vendor/translators-official/Mailman.js +136 -0
  464. package/vendor/translators-official/Mainichi Daily News.js +189 -0
  465. package/vendor/translators-official/Mastodon.js +198 -0
  466. package/vendor/translators-official/Matbugat.ru.js +110 -0
  467. package/vendor/translators-official/Max Planck Institute for the History of Science Virtual Laboratory Library.js +136 -0
  468. package/vendor/translators-official/Medium.js +208 -0
  469. package/vendor/translators-official/MetaLib.js +126 -0
  470. package/vendor/translators-official/Microbiology Society Journals.js +343 -0
  471. package/vendor/translators-official/Microsoft Academic.js +424 -0
  472. package/vendor/translators-official/Mikromarc.js +207 -0
  473. package/vendor/translators-official/Milli Kutuphane.js +244 -0
  474. package/vendor/translators-official/Musee du Louvre.js +265 -0
  475. package/vendor/translators-official/NASA ADS.js +889 -0
  476. package/vendor/translators-official/NASA NTRS.js +610 -0
  477. package/vendor/translators-official/NCBI Nucleotide.js +227 -0
  478. package/vendor/translators-official/NPR.js +341 -0
  479. package/vendor/translators-official/NRC Research Press.js +181 -0
  480. package/vendor/translators-official/NRC.nl.js +226 -0
  481. package/vendor/translators-official/NTSB Accident Reports.js +226 -0
  482. package/vendor/translators-official/NYPL Menus.js +275 -0
  483. package/vendor/translators-official/NYPL Research Catalog.js +458 -0
  484. package/vendor/translators-official/NYTimes.com.js +947 -0
  485. package/vendor/translators-official/NZZ.ch.js +272 -0
  486. package/vendor/translators-official/Nagoya University OPAC.js +336 -0
  487. package/vendor/translators-official/National Academies Press.js +243 -0
  488. package/vendor/translators-official/National Agriculture Library.js +524 -0
  489. package/vendor/translators-official/National Archives UK Case Law.js +509 -0
  490. package/vendor/translators-official/National Archives of Australia.js +522 -0
  491. package/vendor/translators-official/National Archives of South Africa.js +122 -0
  492. package/vendor/translators-official/National Bureau of Economic Research.js +363 -0
  493. package/vendor/translators-official/National Diet Library Catalogue.js +333 -0
  494. package/vendor/translators-official/National Gallery of Art - USA.js +149 -0
  495. package/vendor/translators-official/National Gallery of Australia.js +252 -0
  496. package/vendor/translators-official/National Library of Australia (new catalog).js +223 -0
  497. package/vendor/translators-official/National Library of Belarus.js +171 -0
  498. package/vendor/translators-official/National Library of Norway.js +310 -0
  499. package/vendor/translators-official/National Library of Poland ISBN.js +140 -0
  500. package/vendor/translators-official/National Post.js +186 -0
  501. package/vendor/translators-official/National Technical Reports Library.js +276 -0
  502. package/vendor/translators-official/National Transportation Library ROSA P.js +562 -0
  503. package/vendor/translators-official/Nature Publishing Group.js +3394 -0
  504. package/vendor/translators-official/Neural Information Processing Systems.js +385 -0
  505. package/vendor/translators-official/New Left Review.js +245 -0
  506. package/vendor/translators-official/New Zealand Herald.js +282 -0
  507. package/vendor/translators-official/Newlines Magazine.js +190 -0
  508. package/vendor/translators-official/News Corp Australia.js +251 -0
  509. package/vendor/translators-official/NewsBank.js +202 -0
  510. package/vendor/translators-official/NewsnetTamedia.js +509 -0
  511. package/vendor/translators-official/Noor Digital Library.js +267 -0
  512. package/vendor/translators-official/Note HTML.js +206 -0
  513. package/vendor/translators-official/Note Markdown.js +1638 -0
  514. package/vendor/translators-official/Notre Dame Philosophical Reviews.js +201 -0
  515. package/vendor/translators-official/OAPEN.js +331 -0
  516. package/vendor/translators-official/OCLC WorldCat FirstSearch.js +213 -0
  517. package/vendor/translators-official/OECD.js +216 -0
  518. package/vendor/translators-official/ORCID.js +104 -0
  519. package/vendor/translators-official/OSF Preprints.js +1287 -0
  520. package/vendor/translators-official/OSTI Energy Citations.js +202 -0
  521. package/vendor/translators-official/OVID Tagged.js +1226 -0
  522. package/vendor/translators-official/OZON.ru.js +465 -0
  523. package/vendor/translators-official/OhioLINK.js +43 -0
  524. package/vendor/translators-official/Old Bailey Online.js +315 -0
  525. package/vendor/translators-official/Open Conf.js +172 -0
  526. package/vendor/translators-official/Open Knowledge Repository.js +811 -0
  527. package/vendor/translators-official/Open WorldCat.js +1394 -0
  528. package/vendor/translators-official/OpenAlex JSON.js +740 -0
  529. package/vendor/translators-official/OpenAlex.js +444 -0
  530. package/vendor/translators-official/OpenEdition Books.js +155 -0
  531. package/vendor/translators-official/OpenEdition Journals.js +432 -0
  532. package/vendor/translators-official/Optical Society of America.js +562 -0
  533. package/vendor/translators-official/Optimization Online.js +418 -0
  534. package/vendor/translators-official/Ovid OCE.js +353 -0
  535. package/vendor/translators-official/Ovid.js +302 -0
  536. package/vendor/translators-official/Oxford Dictionaries Premium.js +194 -0
  537. package/vendor/translators-official/Oxford English Dictionary.js +122 -0
  538. package/vendor/translators-official/Oxford Music and Art Online.js +120 -0
  539. package/vendor/translators-official/Oxford Reference.js +202 -0
  540. package/vendor/translators-official/Oxford University Press.js +277 -0
  541. package/vendor/translators-official/PC Gamer.js +302 -0
  542. package/vendor/translators-official/PC Games.js +128 -0
  543. package/vendor/translators-official/PEI Archival Information Network.js +242 -0
  544. package/vendor/translators-official/PEP Web.js +165 -0
  545. package/vendor/translators-official/PKP Catalog Systems.js +1455 -0
  546. package/vendor/translators-official/PLoS Journals.js +284 -0
  547. package/vendor/translators-official/PRC History Review.js +298 -0
  548. package/vendor/translators-official/Pajhwok Afghan News.js +198 -0
  549. package/vendor/translators-official/Papers Past.js +509 -0
  550. package/vendor/translators-official/Paris Review.js +227 -0
  551. package/vendor/translators-official/Pastebin.js +199 -0
  552. package/vendor/translators-official/Patents - USPTO.js +210 -0
  553. package/vendor/translators-official/Peeters.js +587 -0
  554. package/vendor/translators-official/Perceiving Systems.js +350 -0
  555. package/vendor/translators-official/Perlego.js +416 -0
  556. package/vendor/translators-official/PhilPapers.js +233 -0
  557. package/vendor/translators-official/Philosopher's Imprint.js +169 -0
  558. package/vendor/translators-official/Pleade.js +329 -0
  559. package/vendor/translators-official/Polygon.js +270 -0
  560. package/vendor/translators-official/Potsdamer Neueste Nachrichten.js +188 -0
  561. package/vendor/translators-official/Premium Times.js +144 -0
  562. package/vendor/translators-official/Preprints.org.js +305 -0
  563. package/vendor/translators-official/Prime 9ja Online.js +402 -0
  564. package/vendor/translators-official/Primo 2018.js +126 -0
  565. package/vendor/translators-official/Primo Normalized XML.js +1075 -0
  566. package/vendor/translators-official/Primo.js +322 -0
  567. package/vendor/translators-official/ProMED.js +66 -0
  568. package/vendor/translators-official/ProQuest Ebook Central.js +226 -0
  569. package/vendor/translators-official/ProQuest PolicyFile.js +115 -0
  570. package/vendor/translators-official/ProQuest.js +2210 -0
  571. package/vendor/translators-official/Probing the Past.js +151 -0
  572. package/vendor/translators-official/Project Gutenberg.js +191 -0
  573. package/vendor/translators-official/Project MUSE.js +451 -0
  574. package/vendor/translators-official/Protein Data Bank.js +445 -0
  575. package/vendor/translators-official/PubFactory Journals.js +712 -0
  576. package/vendor/translators-official/PubMed Central.js +563 -0
  577. package/vendor/translators-official/PubMed XML.js +1240 -0
  578. package/vendor/translators-official/PubMed.js +1317 -0
  579. package/vendor/translators-official/PubPub.js +530 -0
  580. package/vendor/translators-official/Public Record Office Victoria.js +252 -0
  581. package/vendor/translators-official/Publications Office of the European Union.js +540 -0
  582. package/vendor/translators-official/Publications du Quebec.js +225 -0
  583. package/vendor/translators-official/PyPI.js +288 -0
  584. package/vendor/translators-official/Qatar Digital Library.js +802 -0
  585. package/vendor/translators-official/Queensland State Archives.js +303 -0
  586. package/vendor/translators-official/R-Packages.js +410 -0
  587. package/vendor/translators-official/RAND.js +283 -0
  588. package/vendor/translators-official/RDF.js +1782 -0
  589. package/vendor/translators-official/REDALYC.js +196 -0
  590. package/vendor/translators-official/RIS.js +7292 -0
  591. package/vendor/translators-official/RSC Publishing.js +250 -0
  592. package/vendor/translators-official/Radio Free Europe Radio Liberty.js +706 -0
  593. package/vendor/translators-official/RePEc - Econpapers.js +725 -0
  594. package/vendor/translators-official/RePEc - IDEAS.js +337 -0
  595. package/vendor/translators-official/Rechtspraak.nl.js +295 -0
  596. package/vendor/translators-official/RefWorks Tagged.js +1185 -0
  597. package/vendor/translators-official/ReferBibIX.js +463 -0
  598. package/vendor/translators-official/Regeringskansliet.js +89 -0
  599. package/vendor/translators-official/Research Square.js +335 -0
  600. package/vendor/translators-official/ResearchGate.js +394 -0
  601. package/vendor/translators-official/Retsinformation.js +348 -0
  602. package/vendor/translators-official/Reuters.js +255 -0
  603. package/vendor/translators-official/Rock, Paper, Shotgun.js +304 -0
  604. package/vendor/translators-official/Roll Call.js +173 -0
  605. package/vendor/translators-official/Russian State Library.js +1517 -0
  606. package/vendor/translators-official/SAE Papers.js +241 -0
  607. package/vendor/translators-official/SAGE Journals.js +429 -0
  608. package/vendor/translators-official/SAGE Knowledge.js +505 -0
  609. package/vendor/translators-official/SAILDART.js +364 -0
  610. package/vendor/translators-official/SALT Research Archives.js +196 -0
  611. package/vendor/translators-official/SFU IPinCH.js +946 -0
  612. package/vendor/translators-official/SIPRI.js +256 -0
  613. package/vendor/translators-official/SIRS Knowledge Source.js +546 -0
  614. package/vendor/translators-official/SLUB Dresden.js +300 -0
  615. package/vendor/translators-official/SORA.js +340 -0
  616. package/vendor/translators-official/SSOAR.js +399 -0
  617. package/vendor/translators-official/SSRN.js +235 -0
  618. package/vendor/translators-official/SVT Nyheter.js +381 -0
  619. package/vendor/translators-official/Sacramento Bee.js +274 -0
  620. package/vendor/translators-official/Safari Books Online.js +391 -0
  621. package/vendor/translators-official/Scholars Portal Journals.js +220 -0
  622. package/vendor/translators-official/Scholia.js +189 -0
  623. package/vendor/translators-official/Schweizer Radio und Fernsehen SRF.js +152 -0
  624. package/vendor/translators-official/SciELO.js +440 -0
  625. package/vendor/translators-official/ScienceDirect.js +1306 -0
  626. package/vendor/translators-official/Scopus.js +418 -0
  627. package/vendor/translators-official/Semantic Scholar.js +513 -0
  628. package/vendor/translators-official/Silverchair.js +886 -0
  629. package/vendor/translators-official/Slate.js +228 -0
  630. package/vendor/translators-official/SlideShare.js +112 -0
  631. package/vendor/translators-official/Springer Link.js +696 -0
  632. package/vendor/translators-official/Stack Exchange.js +134 -0
  633. package/vendor/translators-official/Standard Ebooks.js +198 -0
  634. package/vendor/translators-official/Stanford Encyclopedia of Philosophy.js +285 -0
  635. package/vendor/translators-official/Stanford University Press.js +343 -0
  636. package/vendor/translators-official/State Records Office of Western Australia.js +439 -0
  637. package/vendor/translators-official/Stitcher.js +141 -0
  638. package/vendor/translators-official/Store norske leksikon.js +291 -0
  639. package/vendor/translators-official/Stuff.co.nz.js +446 -0
  640. package/vendor/translators-official/Substack.js +237 -0
  641. package/vendor/translators-official/Sud Ouest.js +181 -0
  642. package/vendor/translators-official/Sueddeutsche.de.js +205 -0
  643. package/vendor/translators-official/Summon 2.js +117 -0
  644. package/vendor/translators-official/Superlib.js +647 -0
  645. package/vendor/translators-official/Svenska Dagbladet.js +274 -0
  646. package/vendor/translators-official/Sveriges radio.js +416 -0
  647. package/vendor/translators-official/TEI.js +648 -0
  648. package/vendor/translators-official/TV by the Numbers.js +194 -0
  649. package/vendor/translators-official/TVNZ.js +165 -0
  650. package/vendor/translators-official/Tagesspiegel.js +249 -0
  651. package/vendor/translators-official/Talis Aspire.js +316 -0
  652. package/vendor/translators-official/TalisPrism.js +445 -0
  653. package/vendor/translators-official/Tatknigafund.js +174 -0
  654. package/vendor/translators-official/Tatpressa.ru.js +121 -0
  655. package/vendor/translators-official/Taylor & Francis eBooks.js +334 -0
  656. package/vendor/translators-official/Taylor and Francis+NEJM.js +813 -0
  657. package/vendor/translators-official/Tesis Doctorals en Xarxa.js +233 -0
  658. package/vendor/translators-official/The Art Newspaper.js +268 -0
  659. package/vendor/translators-official/The Atlantic.js +535 -0
  660. package/vendor/translators-official/The Boston Globe.js +285 -0
  661. package/vendor/translators-official/The Chronicle of Higher Education.js +308 -0
  662. package/vendor/translators-official/The Daily Beast.js +183 -0
  663. package/vendor/translators-official/The Economic Times - The Times of India.js +305 -0
  664. package/vendor/translators-official/The Economist.js +207 -0
  665. package/vendor/translators-official/The Free Dictionary.js +58 -0
  666. package/vendor/translators-official/The Globe and Mail.js +241 -0
  667. package/vendor/translators-official/The Guardian.js +717 -0
  668. package/vendor/translators-official/The Hamilton Spectator.js +129 -0
  669. package/vendor/translators-official/The Hindu.js +318 -0
  670. package/vendor/translators-official/The Independent.js +184 -0
  671. package/vendor/translators-official/The Intercept.js +258 -0
  672. package/vendor/translators-official/The Met.js +276 -0
  673. package/vendor/translators-official/The Microfinance Gateway.js +174 -0
  674. package/vendor/translators-official/The Nation.js +188 -0
  675. package/vendor/translators-official/The National Archives (UK).js +242 -0
  676. package/vendor/translators-official/The New Republic.js +160 -0
  677. package/vendor/translators-official/The New York Review of Books.js +467 -0
  678. package/vendor/translators-official/The New Yorker.js +360 -0
  679. package/vendor/translators-official/The Open Library.js +220 -0
  680. package/vendor/translators-official/The Straits Times.js +528 -0
  681. package/vendor/translators-official/The Telegraph.js +337 -0
  682. package/vendor/translators-official/The Times and Sunday Times.js +180 -0
  683. package/vendor/translators-official/The Times of Israel.js +151 -0
  684. package/vendor/translators-official/TheMarker.js +108 -0
  685. package/vendor/translators-official/Theory of Computing.js +488 -0
  686. package/vendor/translators-official/ThesesFR.js +405 -0
  687. package/vendor/translators-official/Thieme.js +326 -0
  688. package/vendor/translators-official/Time.com.js +557 -0
  689. package/vendor/translators-official/TimesMachine.js +222 -0
  690. package/vendor/translators-official/Tony Blair Institute for Global Change.js +195 -0
  691. package/vendor/translators-official/Toronto Star.js +298 -0
  692. package/vendor/translators-official/Transportation Research Board.js +253 -0
  693. package/vendor/translators-official/Treesearch.js +535 -0
  694. package/vendor/translators-official/Trove.js +616 -0
  695. package/vendor/translators-official/Tumblr.js +179 -0
  696. package/vendor/translators-official/Twitter.js +413 -0
  697. package/vendor/translators-official/UChicago VuFind.js +907 -0
  698. package/vendor/translators-official/UNZ Print Archive.js +276 -0
  699. package/vendor/translators-official/UPCommons.js +227 -0
  700. package/vendor/translators-official/US National Archives Research Catalog.js +275 -0
  701. package/vendor/translators-official/USENIX.js +151 -0
  702. package/vendor/translators-official/Ubiquity Journals.js +228 -0
  703. package/vendor/translators-official/University Press Scholarship.js +301 -0
  704. package/vendor/translators-official/University of California Press Books.js +403 -0
  705. package/vendor/translators-official/University of Chicago Press Books.js +378 -0
  706. package/vendor/translators-official/University of Wisconsin-Madison Libraries Catalog.js +298 -0
  707. package/vendor/translators-official/Unqualified Dublin Core RDF.js +153 -0
  708. package/vendor/translators-official/UpToDate References.js +203 -0
  709. package/vendor/translators-official/Vanity Fair.js +242 -0
  710. package/vendor/translators-official/Verniana-Jules Verne Studies.js +190 -0
  711. package/vendor/translators-official/Verso Books.js +311 -0
  712. package/vendor/translators-official/Vice.js +445 -0
  713. package/vendor/translators-official/Victoria & Albert Museum.js +277 -0
  714. package/vendor/translators-official/Vimeo.js +188 -0
  715. package/vendor/translators-official/VoxEU.js +151 -0
  716. package/vendor/translators-official/WHO.js +458 -0
  717. package/vendor/translators-official/WIPO.js +189 -0
  718. package/vendor/translators-official/Wall Street Journal.js +809 -0
  719. package/vendor/translators-official/Wanfang Data.js +310 -0
  720. package/vendor/translators-official/Washington Monthly.js +195 -0
  721. package/vendor/translators-official/Washington Post.js +447 -0
  722. package/vendor/translators-official/Web of Science Nextgen.js +832 -0
  723. package/vendor/translators-official/Web of Science Tagged.js +1247 -0
  724. package/vendor/translators-official/Web of Science.js +228 -0
  725. package/vendor/translators-official/Welt Online.js +161 -0
  726. package/vendor/translators-official/WestLaw UK.js +190 -0
  727. package/vendor/translators-official/WikiLeaks PlusD.js +182 -0
  728. package/vendor/translators-official/Wikidata QuickStatements.js +324 -0
  729. package/vendor/translators-official/Wikidata.js +911 -0
  730. package/vendor/translators-official/Wikimedia Commons.js +285 -0
  731. package/vendor/translators-official/Wikipedia Citation Templates.js +432 -0
  732. package/vendor/translators-official/Wikipedia.js +385 -0
  733. package/vendor/translators-official/Wikisource.js +399 -0
  734. package/vendor/translators-official/Wikiwand.js +122 -0
  735. package/vendor/translators-official/Wiktionary.js +141 -0
  736. package/vendor/translators-official/Wildlife Biology in Practice.js +172 -0
  737. package/vendor/translators-official/Wiley Online Library.js +1412 -0
  738. package/vendor/translators-official/Wilson Center Digital Archive.js +321 -0
  739. package/vendor/translators-official/Winnipeg Free Press.js +204 -0
  740. package/vendor/translators-official/Wired.js +362 -0
  741. package/vendor/translators-official/Womennews.js +230 -0
  742. package/vendor/translators-official/World Digital Library.js +403 -0
  743. package/vendor/translators-official/World History Connected.js +185 -0
  744. package/vendor/translators-official/World Shakespeare Bibliography Online.js +595 -0
  745. package/vendor/translators-official/WorldCat Discovery Service.js +630 -0
  746. package/vendor/translators-official/XML ContextObject.js +274 -0
  747. package/vendor/translators-official/YPSF.js +224 -0
  748. package/vendor/translators-official/Yandex Books.js +265 -0
  749. package/vendor/translators-official/Ynet.js +171 -0
  750. package/vendor/translators-official/YouTube.js +209 -0
  751. package/vendor/translators-official/ZIPonline.js +267 -0
  752. package/vendor/translators-official/ZOBODAT.js +341 -0
  753. package/vendor/translators-official/Zotero RDF.js +588 -0
  754. package/vendor/translators-official/ZoteroBib.js +94 -0
  755. package/vendor/translators-official/arXiv.org.js +1100 -0
  756. package/vendor/translators-official/artnet.js +207 -0
  757. package/vendor/translators-official/beck-online.js +1339 -0
  758. package/vendor/translators-official/clinicaltrials.gov.js +331 -0
  759. package/vendor/translators-official/dLibra.js +367 -0
  760. package/vendor/translators-official/dejure.org.js +242 -0
  761. package/vendor/translators-official/dhistory.js +103 -0
  762. package/vendor/translators-official/digibib.net.js +245 -0
  763. package/vendor/translators-official/eLibrary.ru.js +867 -0
  764. package/vendor/translators-official/eLife.js +462 -0
  765. package/vendor/translators-official/eMJA.js +246 -0
  766. package/vendor/translators-official/eMedicine.js +123 -0
  767. package/vendor/translators-official/ePrint IACR.js +608 -0
  768. package/vendor/translators-official/ebrary.js +140 -0
  769. package/vendor/translators-official/etatar.ru.js +104 -0
  770. package/vendor/translators-official/feb-web.ru.js +167 -0
  771. package/vendor/translators-official/fishpond.co.nz.js +224 -0
  772. package/vendor/translators-official/fr-online.de.js +209 -0
  773. package/vendor/translators-official/govinfo.js +189 -0
  774. package/vendor/translators-official/informIT database.js +248 -0
  775. package/vendor/translators-official/io-port.js +68 -0
  776. package/vendor/translators-official/jurion.js +377 -0
  777. package/vendor/translators-official/mEDRA.js +597 -0
  778. package/vendor/translators-official/magazines.russ.ru.js +120 -0
  779. package/vendor/translators-official/medes.js +284 -0
  780. package/vendor/translators-official/newshub.co.nz.js +206 -0
  781. package/vendor/translators-official/newspapers.com.js +335 -0
  782. package/vendor/translators-official/openJur.js +161 -0
  783. package/vendor/translators-official/reddit.js +275 -0
  784. package/vendor/translators-official/sbn.it.js +186 -0
  785. package/vendor/translators-official/scinapse.js +273 -0
  786. package/vendor/translators-official/semantics Visual Library.js +643 -0
  787. package/vendor/translators-official/taz.de.js +200 -0
  788. package/vendor/translators-official/unAPI.js +481 -0
  789. package/vendor/translators-official/wiso.js +314 -0
  790. package/vendor/translators-official/zbMATH.js +278 -0
  791. package/vendor/translators-official/zotero.org.js +311 -0
  792. package/vendor/translators_CN/Angle.js +468 -0
  793. package/vendor/translators_CN/Baidu Baike.js +152 -0
  794. package/vendor/translators_CN/Baidu Scholar.js +639 -0
  795. package/vendor/translators_CN/Belt and Road Database.js +496 -0
  796. package/vendor/translators_CN/BiliBili.js +776 -0
  797. package/vendor/translators_CN/CCPINFO.js +416 -0
  798. package/vendor/translators_CN/CHINESE JOURNAL OF LAW.js +169 -0
  799. package/vendor/translators_CN/CNBKSY.js +385 -0
  800. package/vendor/translators_CN/CNKI CHKD.js +692 -0
  801. package/vendor/translators_CN/CNKI Gongjushu.js +271 -0
  802. package/vendor/translators_CN/CNKI Industry.js +726 -0
  803. package/vendor/translators_CN/CNKI Law.js +842 -0
  804. package/vendor/translators_CN/CNKI RefWorks.js +826 -0
  805. package/vendor/translators_CN/CNKI Refer.js +811 -0
  806. package/vendor/translators_CN/CNKI Scholar.js +656 -0
  807. package/vendor/translators_CN/CNKI TIKS.js +1028 -0
  808. package/vendor/translators_CN/CNKI e-Books.js +309 -0
  809. package/vendor/translators_CN/CNKI thinker.js +274 -0
  810. package/vendor/translators_CN/CNKI.js +2381 -0
  811. package/vendor/translators_CN/CNSDA.js +382 -0
  812. package/vendor/translators_CN/CQVIP Knowledge.js +969 -0
  813. package/vendor/translators_CN/CQVIP Qikan.js +418 -0
  814. package/vendor/translators_CN/CQVIP.js +686 -0
  815. package/vendor/translators_CN/CSDN.js +153 -0
  816. package/vendor/translators_CN/China Judgements Online.js +282 -0
  817. package/vendor/translators_CN/China Social Science Library.js +533 -0
  818. package/vendor/translators_CN/ChinaXiv.js +375 -0
  819. package/vendor/translators_CN/Cubox.js +246 -0
  820. package/vendor/translators_CN/Dangdang.js +176 -0
  821. package/vendor/translators_CN/Douban.js +984 -0
  822. package/vendor/translators_CN/Duxiu.js +746 -0
  823. package/vendor/translators_CN/E-Tiller.js +555 -0
  824. package/vendor/translators_CN/Encyclopedia of China 3rd.js +177 -0
  825. package/vendor/translators_CN/Founder.js +483 -0
  826. package/vendor/translators_CN/GFSOSO.js +694 -0
  827. package/vendor/translators_CN/Jd.js +235 -0
  828. package/vendor/translators_CN/Jikan Full Text Database.js +188 -0
  829. package/vendor/translators_CN/KouShare.js +139 -0
  830. package/vendor/translators_CN/LICENSE +661 -0
  831. package/vendor/translators_CN/Lawbank.js +818 -0
  832. package/vendor/translators_CN/MagTech.js +473 -0
  833. package/vendor/translators_CN/Modern History.js +788 -0
  834. package/vendor/translators_CN/NDLTD.js +404 -0
  835. package/vendor/translators_CN/NTU Digital Library of Buddhist Studies.js +957 -0
  836. package/vendor/translators_CN/National Public Service Platform for Standards Information - China.js +348 -0
  837. package/vendor/translators_CN/National Science and Technology Library - China.js +646 -0
  838. package/vendor/translators_CN/National Science and Technology Report Service - China.js +271 -0
  839. package/vendor/translators_CN/National Standards Open System - China.js +296 -0
  840. package/vendor/translators_CN/Ncpssd.js +555 -0
  841. package/vendor/translators_CN/PKULaw.js +1123 -0
  842. package/vendor/translators_CN/PatentStar.js +386 -0
  843. package/vendor/translators_CN/People's Daily Database.js +186 -0
  844. package/vendor/translators_CN/People's Daily Epaper.js +279 -0
  845. package/vendor/translators_CN/People's Daily Online.js +292 -0
  846. package/vendor/translators_CN/Pishu Database.js +383 -0
  847. package/vendor/translators_CN/ProQuestCN Thesis.js +329 -0
  848. package/vendor/translators_CN/Pss-System.js +199 -0
  849. package/vendor/translators_CN/PubScholar.js +588 -0
  850. package/vendor/translators_CN/Publications Data Center - China.js +1119 -0
  851. package/vendor/translators_CN/QStheory.js +251 -0
  852. package/vendor/translators_CN/RDFYBK.js +396 -0
  853. package/vendor/translators_CN/README.md +42 -0
  854. package/vendor/translators_CN/RHHZ.js +383 -0
  855. package/vendor/translators_CN/Rural Studies Database.js +402 -0
  856. package/vendor/translators_CN/SKCTK.js +177 -0
  857. package/vendor/translators_CN/Samson.js +768 -0
  858. package/vendor/translators_CN/SciEngine.js +450 -0
  859. package/vendor/translators_CN/Science Reading.js +338 -0
  860. package/vendor/translators_CN/Sina Weibo.js +254 -0
  861. package/vendor/translators_CN/Soopat.js +427 -0
  862. package/vendor/translators_CN/Spc.org.cn.js +275 -0
  863. package/vendor/translators_CN/Standard Full-text Database - NLC.js +230 -0
  864. package/vendor/translators_CN/SuperLib.js +757 -0
  865. package/vendor/translators_CN/TOAJ.js +422 -0
  866. package/vendor/translators_CN/Wanfang Data.js +3433 -0
  867. package/vendor/translators_CN/Wanfang Med.js +671 -0
  868. package/vendor/translators_CN/Web of Science Tagged.js +1341 -0
  869. package/vendor/translators_CN/Weixin.js +130 -0
  870. package/vendor/translators_CN/Wenjin.js +492 -0
  871. package/vendor/translators_CN/Xinhuanet.js +283 -0
  872. package/vendor/translators_CN/Yiigle.js +394 -0
  873. package/vendor/translators_CN/Zhihu.js +530 -0
  874. package/vendor/translators_CN/Zhihuiya.js +246 -0
  875. package/vendor/translators_CN/Zhizhen.js +869 -0
  876. package/vendor/translators_CN/chaoxingqikan.js +360 -0
  877. package/vendor/translators_CN/doc.taixueshu.js +355 -0
  878. package/vendor/translators_CN/dpaper.js +183 -0
  879. package/vendor/translators_CN/epaper.gmw.cn.js +286 -0
  880. package/vendor/translators_CN/flk.npc.gov.cn.js +344 -0
  881. package/vendor/translators_CN/gov.cn Policy.js +559 -0
  882. package/vendor/translators_CN/incoPat.js +195 -0
  883. package/vendor/translators_CN/pm.tsgyun.js +177 -0
  884. package/vendor/translators_CN/sanmin.com.tw.js +327 -0
  885. package/vendor/translators_CN/sharing.com.tw.js +333 -0
  886. package/vendor/translators_CN/stats.gov.cn.js +170 -0
  887. package/vendor/translators_CN/xiaoyuzhoufm.js +162 -0
  888. package/vendor/translators_CN/zhangqiaokeyan.js +1130 -0
  889. package/vendor/zotero/README.md +120 -0
  890. package/vendor/zotero/config/custom-environment-variables.json +3 -0
  891. package/vendor/zotero/config/default.json5 +16 -0
  892. package/vendor/zotero/config/production.json5 +7 -0
  893. package/vendor/zotero/config/test.json5 +4 -0
  894. package/vendor/zotero/modules/translate/README.md +43 -0
  895. package/vendor/zotero/modules/translate/src/debug.js +186 -0
  896. package/vendor/zotero/modules/translate/src/http.js +158 -0
  897. package/vendor/zotero/modules/translate/src/promise.js +73 -0
  898. package/vendor/zotero/modules/translate/src/proxy.js +354 -0
  899. package/vendor/zotero/modules/translate/src/rdf/identity.js +503 -0
  900. package/vendor/zotero/modules/translate/src/rdf/init.js +56 -0
  901. package/vendor/zotero/modules/translate/src/rdf/n3parser.js +1392 -0
  902. package/vendor/zotero/modules/translate/src/rdf/rdfparser.js +578 -0
  903. package/vendor/zotero/modules/translate/src/rdf/serialize.js +886 -0
  904. package/vendor/zotero/modules/translate/src/rdf/term.js +524 -0
  905. package/vendor/zotero/modules/translate/src/rdf/uri.js +147 -0
  906. package/vendor/zotero/modules/translate/src/repo.js +80 -0
  907. package/vendor/zotero/modules/translate/src/tlds.js +274 -0
  908. package/vendor/zotero/modules/translate/src/translation/sandboxManager.js +112 -0
  909. package/vendor/zotero/modules/translate/src/translation/translate.js +3283 -0
  910. package/vendor/zotero/modules/translate/src/translation/translate_item.js +120 -0
  911. package/vendor/zotero/modules/translate/src/translator.js +186 -0
  912. package/vendor/zotero/modules/translate/src/translators.js +174 -0
  913. package/vendor/zotero/modules/translate/src/utilities_translate.js +487 -0
  914. package/vendor/zotero/modules/translate/src/zotero.js +94 -0
  915. package/vendor/zotero/modules/translators/A Contra Corriente.js +206 -0
  916. package/vendor/zotero/modules/translators/ABC News Australia.js +224 -0
  917. package/vendor/zotero/modules/translators/ACLS Humanities EBook.js +165 -0
  918. package/vendor/zotero/modules/translators/ACLWeb.js +600 -0
  919. package/vendor/zotero/modules/translators/ACM Digital Library.js +710 -0
  920. package/vendor/zotero/modules/translators/ACS Publications.js +633 -0
  921. package/vendor/zotero/modules/translators/ADS Bibcode.js +664 -0
  922. package/vendor/zotero/modules/translators/AEA Web.js +450 -0
  923. package/vendor/zotero/modules/translators/AGRIS.js +311 -0
  924. package/vendor/zotero/modules/translators/AIP.js +295 -0
  925. package/vendor/zotero/modules/translators/AMS Journals.js +136 -0
  926. package/vendor/zotero/modules/translators/AMS MathSciNet (Legacy).js +313 -0
  927. package/vendor/zotero/modules/translators/AMS MathSciNet.js +288 -0
  928. package/vendor/zotero/modules/translators/APA PsycNET.js +915 -0
  929. package/vendor/zotero/modules/translators/APN.ru.js +132 -0
  930. package/vendor/zotero/modules/translators/APS-Physics.js +204 -0
  931. package/vendor/zotero/modules/translators/APS.js +542 -0
  932. package/vendor/zotero/modules/translators/ARTFL Encyclopedie.js +283 -0
  933. package/vendor/zotero/modules/translators/ARTnews.js +155 -0
  934. package/vendor/zotero/modules/translators/ARTstor.js +619 -0
  935. package/vendor/zotero/modules/translators/ASCE.js +199 -0
  936. package/vendor/zotero/modules/translators/ASCO Meeting Library.js +153 -0
  937. package/vendor/zotero/modules/translators/ASTIS.js +337 -0
  938. package/vendor/zotero/modules/translators/ATS International Journal.js +290 -0
  939. package/vendor/zotero/modules/translators/Access Engineering.js +384 -0
  940. package/vendor/zotero/modules/translators/Access Medicine.js +343 -0
  941. package/vendor/zotero/modules/translators/Access Science.js +391 -0
  942. package/vendor/zotero/modules/translators/Adam Matthew Digital.js +405 -0
  943. package/vendor/zotero/modules/translators/Agencia del ISBN.js +77 -0
  944. package/vendor/zotero/modules/translators/Ahval News.js +309 -0
  945. package/vendor/zotero/modules/translators/Air University Journals.js +236 -0
  946. package/vendor/zotero/modules/translators/Airiti.js +423 -0
  947. package/vendor/zotero/modules/translators/Alexander Street Press.js +198 -0
  948. package/vendor/zotero/modules/translators/AllAfrica.js +291 -0
  949. package/vendor/zotero/modules/translators/Alsharekh.js +242 -0
  950. package/vendor/zotero/modules/translators/AlterNet.js +134 -0
  951. package/vendor/zotero/modules/translators/Aluka.js +261 -0
  952. package/vendor/zotero/modules/translators/Amazon.js +1043 -0
  953. package/vendor/zotero/modules/translators/American Archive of Public Broadcasting.js +592 -0
  954. package/vendor/zotero/modules/translators/American Institute of Aeronautics and Astronautics.js +210 -0
  955. package/vendor/zotero/modules/translators/American Prospect.js +114 -0
  956. package/vendor/zotero/modules/translators/Ancestry.com US Federal Census.js +164 -0
  957. package/vendor/zotero/modules/translators/Annual Reviews.js +329 -0
  958. package/vendor/zotero/modules/translators/Antikvarium.hu.js +280 -0
  959. package/vendor/zotero/modules/translators/AquaDocs.js +390 -0
  960. package/vendor/zotero/modules/translators/Archeion.js +249 -0
  961. package/vendor/zotero/modules/translators/Archiv fuer Sozialgeschichte.js +157 -0
  962. package/vendor/zotero/modules/translators/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +179 -0
  963. package/vendor/zotero/modules/translators/Archives Canada.js +142 -0
  964. package/vendor/zotero/modules/translators/Ariana News.js +203 -0
  965. package/vendor/zotero/modules/translators/Art Institute of Chicago.js +279 -0
  966. package/vendor/zotero/modules/translators/Artefacts Canada.js +192 -0
  967. package/vendor/zotero/modules/translators/Artforum.js +438 -0
  968. package/vendor/zotero/modules/translators/Atlanta Journal Constitution.js +155 -0
  969. package/vendor/zotero/modules/translators/Atlanta Journal-Constitution.js +311 -0
  970. package/vendor/zotero/modules/translators/Atypon Journals.js +1204 -0
  971. package/vendor/zotero/modules/translators/AustLII and NZLII.js +604 -0
  972. package/vendor/zotero/modules/translators/Australian Dictionary of Biography.js +196 -0
  973. package/vendor/zotero/modules/translators/BAILII.js +176 -0
  974. package/vendor/zotero/modules/translators/BBC Genome.js +254 -0
  975. package/vendor/zotero/modules/translators/BBC.js +430 -0
  976. package/vendor/zotero/modules/translators/BIBSYS.js +112 -0
  977. package/vendor/zotero/modules/translators/BOCC.js +217 -0
  978. package/vendor/zotero/modules/translators/BOE.js +229 -0
  979. package/vendor/zotero/modules/translators/BOFiP-Impots.js +132 -0
  980. package/vendor/zotero/modules/translators/Baidu Scholar.js +276 -0
  981. package/vendor/zotero/modules/translators/Bangkok Post.js +216 -0
  982. package/vendor/zotero/modules/translators/Baruch Foundation.js +175 -0
  983. package/vendor/zotero/modules/translators/Beobachter.js +175 -0
  984. package/vendor/zotero/modules/translators/Bezneng Gajit.js +92 -0
  985. package/vendor/zotero/modules/translators/BibLaTeX.js +888 -0
  986. package/vendor/zotero/modules/translators/BibTeX.js +4236 -0
  987. package/vendor/zotero/modules/translators/Biblio.com.js +216 -0
  988. package/vendor/zotero/modules/translators/Bibliontology RDF.js +1166 -0
  989. package/vendor/zotero/modules/translators/Biblioteca Nacional de Maestros.js +213 -0
  990. package/vendor/zotero/modules/translators/Bibliotheque et Archives Nationale du Quebec (Pistard).js +147 -0
  991. package/vendor/zotero/modules/translators/Bibliotheque et Archives Nationales du Quebec.js +266 -0
  992. package/vendor/zotero/modules/translators/Bibliotheque nationale de France.js +872 -0
  993. package/vendor/zotero/modules/translators/BioMed Central.js +585 -0
  994. package/vendor/zotero/modules/translators/BioOne.js +233 -0
  995. package/vendor/zotero/modules/translators/Bioconductor.js +343 -0
  996. package/vendor/zotero/modules/translators/Blaetter.js +192 -0
  997. package/vendor/zotero/modules/translators/Blogger.js +244 -0
  998. package/vendor/zotero/modules/translators/Bloomberg.js +205 -0
  999. package/vendor/zotero/modules/translators/Bloomsbury Food Library.js +296 -0
  1000. package/vendor/zotero/modules/translators/Bluesky.js +195 -0
  1001. package/vendor/zotero/modules/translators/BnF ISBN.js +129 -0
  1002. package/vendor/zotero/modules/translators/Bookmarks.js +282 -0
  1003. package/vendor/zotero/modules/translators/Bookshop.org.js +223 -0
  1004. package/vendor/zotero/modules/translators/Boston Review.js +332 -0
  1005. package/vendor/zotero/modules/translators/Bosworth Toller's Anglo-Saxon Dictionary Online.js +496 -0
  1006. package/vendor/zotero/modules/translators/Bracero History Archive.js +200 -0
  1007. package/vendor/zotero/modules/translators/Brill Journals.js +168 -0
  1008. package/vendor/zotero/modules/translators/Brill.js +434 -0
  1009. package/vendor/zotero/modules/translators/Brukerhandboken.js +153 -0
  1010. package/vendor/zotero/modules/translators/Bryn Mawr Classical Review.js +303 -0
  1011. package/vendor/zotero/modules/translators/Bundesgesetzblatt.js +231 -0
  1012. package/vendor/zotero/modules/translators/Business Standard.js +151 -0
  1013. package/vendor/zotero/modules/translators/CABI - CAB Abstracts.js +317 -0
  1014. package/vendor/zotero/modules/translators/CAOD.js +260 -0
  1015. package/vendor/zotero/modules/translators/CBC.js +439 -0
  1016. package/vendor/zotero/modules/translators/CCfr (BnF).js +162 -0
  1017. package/vendor/zotero/modules/translators/CERN Document Server.js +277 -0
  1018. package/vendor/zotero/modules/translators/CEUR Workshop Proceedings.js +145 -0
  1019. package/vendor/zotero/modules/translators/CFF References.js +170 -0
  1020. package/vendor/zotero/modules/translators/CFF.js +113 -0
  1021. package/vendor/zotero/modules/translators/CIA World Factbook.js +128 -0
  1022. package/vendor/zotero/modules/translators/CLACSO.js +226 -0
  1023. package/vendor/zotero/modules/translators/CLASE.js +135 -0
  1024. package/vendor/zotero/modules/translators/CNKI.js +731 -0
  1025. package/vendor/zotero/modules/translators/COBISS.js +1945 -0
  1026. package/vendor/zotero/modules/translators/COinS.js +336 -0
  1027. package/vendor/zotero/modules/translators/CQ Press.js +418 -0
  1028. package/vendor/zotero/modules/translators/CROSBI.js +227 -0
  1029. package/vendor/zotero/modules/translators/CSIRO Publishing.js +139 -0
  1030. package/vendor/zotero/modules/translators/CSL JSON.js +203 -0
  1031. package/vendor/zotero/modules/translators/CSV.js +294 -0
  1032. package/vendor/zotero/modules/translators/Cairn.info.js +368 -0
  1033. package/vendor/zotero/modules/translators/CalMatters.js +228 -0
  1034. package/vendor/zotero/modules/translators/Calisphere.js +355 -0
  1035. package/vendor/zotero/modules/translators/Camara Brasileira do Livro ISBN.js +842 -0
  1036. package/vendor/zotero/modules/translators/Cambridge Core.js +580 -0
  1037. package/vendor/zotero/modules/translators/Cambridge Engage Preprints.js +276 -0
  1038. package/vendor/zotero/modules/translators/CanLII.js +284 -0
  1039. package/vendor/zotero/modules/translators/Canada.com.js +171 -0
  1040. package/vendor/zotero/modules/translators/Canadian Letters and Images.js +148 -0
  1041. package/vendor/zotero/modules/translators/Canadiana.ca.js +196 -0
  1042. package/vendor/zotero/modules/translators/Cascadilla Proceedings Project.js +390 -0
  1043. package/vendor/zotero/modules/translators/Cell Press.js +516 -0
  1044. package/vendor/zotero/modules/translators/Central and Eastern European Online Library Journals.js +313 -0
  1045. package/vendor/zotero/modules/translators/Champlain Society - Collection.js +220 -0
  1046. package/vendor/zotero/modules/translators/Chicago Journal of Theoretical Computer Science.js +203 -0
  1047. package/vendor/zotero/modules/translators/Christian Science Monitor.js +148 -0
  1048. package/vendor/zotero/modules/translators/Chronicling America.js +131 -0
  1049. package/vendor/zotero/modules/translators/CiNii Research.js +168 -0
  1050. package/vendor/zotero/modules/translators/Citavi 5 XML.js +516 -0
  1051. package/vendor/zotero/modules/translators/CiteSeer.js +196 -0
  1052. package/vendor/zotero/modules/translators/CiteULike.js +170 -0
  1053. package/vendor/zotero/modules/translators/Citizen Lab.js +347 -0
  1054. package/vendor/zotero/modules/translators/Civilization.ca.js +146 -0
  1055. package/vendor/zotero/modules/translators/Climate Change and Human Health Literature Portal.js +283 -0
  1056. package/vendor/zotero/modules/translators/Clinical Key.js +367 -0
  1057. package/vendor/zotero/modules/translators/Code4Lib Journal.js +143 -0
  1058. package/vendor/zotero/modules/translators/Colorado State Legislature.js +215 -0
  1059. package/vendor/zotero/modules/translators/Columbia University Press.js +238 -0
  1060. package/vendor/zotero/modules/translators/Common-Place.js +218 -0
  1061. package/vendor/zotero/modules/translators/Computer History Museum Archive.js +1319 -0
  1062. package/vendor/zotero/modules/translators/Copernicus.js +461 -0
  1063. package/vendor/zotero/modules/translators/Cornell LII.js +252 -0
  1064. package/vendor/zotero/modules/translators/Cornell University Press.js +235 -0
  1065. package/vendor/zotero/modules/translators/CourtListener.js +265 -0
  1066. package/vendor/zotero/modules/translators/CrossRef.js +486 -0
  1067. package/vendor/zotero/modules/translators/Crossref REST.js +1757 -0
  1068. package/vendor/zotero/modules/translators/Crossref Unixref XML.js +965 -0
  1069. package/vendor/zotero/modules/translators/Current Affairs.js +160 -0
  1070. package/vendor/zotero/modules/translators/Cyberpresse.js +131 -0
  1071. package/vendor/zotero/modules/translators/DABI.js +476 -0
  1072. package/vendor/zotero/modules/translators/DAI-Zenon.js +392 -0
  1073. package/vendor/zotero/modules/translators/DART-Europe.js +176 -0
  1074. package/vendor/zotero/modules/translators/DBLP Computer Science Bibliography.js +462 -0
  1075. package/vendor/zotero/modules/translators/DBpia.js +233 -0
  1076. package/vendor/zotero/modules/translators/DEPATISnet.js +373 -0
  1077. package/vendor/zotero/modules/translators/DOAJ.js +243 -0
  1078. package/vendor/zotero/modules/translators/DOI Content Negotiation.js +352 -0
  1079. package/vendor/zotero/modules/translators/DOI.js +322 -0
  1080. package/vendor/zotero/modules/translators/DPLA.js +425 -0
  1081. package/vendor/zotero/modules/translators/DSpace Intermediate Metadata.js +208 -0
  1082. package/vendor/zotero/modules/translators/DTU Orbit.js +155 -0
  1083. package/vendor/zotero/modules/translators/Dagens Nyheter.js +369 -0
  1084. package/vendor/zotero/modules/translators/Dagstuhl Research Online Publication Server.js +276 -0
  1085. package/vendor/zotero/modules/translators/Dar Almandumah.js +253 -0
  1086. package/vendor/zotero/modules/translators/Data.gov.js +225 -0
  1087. package/vendor/zotero/modules/translators/DataCite.js +125 -0
  1088. package/vendor/zotero/modules/translators/Databrary.js +184 -0
  1089. package/vendor/zotero/modules/translators/Datacite JSON.js +1182 -0
  1090. package/vendor/zotero/modules/translators/Dataverse.js +418 -0
  1091. package/vendor/zotero/modules/translators/Daum News.js +139 -0
  1092. package/vendor/zotero/modules/translators/De Gruyter Brill.js +674 -0
  1093. package/vendor/zotero/modules/translators/DeGruyter.js +457 -0
  1094. package/vendor/zotero/modules/translators/Defense Technical Information Center.js +146 -0
  1095. package/vendor/zotero/modules/translators/Delpher.js +413 -0
  1096. package/vendor/zotero/modules/translators/Demographic Research.js +164 -0
  1097. package/vendor/zotero/modules/translators/Denik CZ.js +273 -0
  1098. package/vendor/zotero/modules/translators/Der Freitag.js +236 -0
  1099. package/vendor/zotero/modules/translators/Der Spiegel.js +479 -0
  1100. package/vendor/zotero/modules/translators/Desiring God.js +216 -0
  1101. package/vendor/zotero/modules/translators/Deutsche Fotothek.js +364 -0
  1102. package/vendor/zotero/modules/translators/Deutsche Nationalbibliothek.js +594 -0
  1103. package/vendor/zotero/modules/translators/Dialnet.js +258 -0
  1104. package/vendor/zotero/modules/translators/Die Zeit.js +378 -0
  1105. package/vendor/zotero/modules/translators/DigiZeitschriften.js +269 -0
  1106. package/vendor/zotero/modules/translators/Digital Humanities Quarterly.js +207 -0
  1107. package/vendor/zotero/modules/translators/Digital Medievalist.js +149 -0
  1108. package/vendor/zotero/modules/translators/Digital Spy.js +215 -0
  1109. package/vendor/zotero/modules/translators/Dimensions.js +233 -0
  1110. package/vendor/zotero/modules/translators/Douban.js +316 -0
  1111. package/vendor/zotero/modules/translators/Dreier Neuerscheinungsdienst.js +209 -0
  1112. package/vendor/zotero/modules/translators/DrugBank.ca.js +209 -0
  1113. package/vendor/zotero/modules/translators/Dryad Digital Repository.js +323 -0
  1114. package/vendor/zotero/modules/translators/Duke University Press Books.js +250 -0
  1115. package/vendor/zotero/modules/translators/E-periodica Switzerland.js +347 -0
  1116. package/vendor/zotero/modules/translators/EBSCO Discovery Layer.js +147 -0
  1117. package/vendor/zotero/modules/translators/EBSCOhost.js +592 -0
  1118. package/vendor/zotero/modules/translators/EIDR.js +184 -0
  1119. package/vendor/zotero/modules/translators/EPA National Library Catalog.js +245 -0
  1120. package/vendor/zotero/modules/translators/ERIC.js +986 -0
  1121. package/vendor/zotero/modules/translators/ESpacenet.js +465 -0
  1122. package/vendor/zotero/modules/translators/EUR-Lex.js +423 -0
  1123. package/vendor/zotero/modules/translators/Eastview.js +336 -0
  1124. package/vendor/zotero/modules/translators/Edinburgh University Press Journals.js +178 -0
  1125. package/vendor/zotero/modules/translators/Education Week.js +197 -0
  1126. package/vendor/zotero/modules/translators/El Comercio (Peru).js +347 -0
  1127. package/vendor/zotero/modules/translators/El Pais.js +262 -0
  1128. package/vendor/zotero/modules/translators/Electronic Colloquium on Computational Complexity.js +230 -0
  1129. package/vendor/zotero/modules/translators/Elicit.js +120 -0
  1130. package/vendor/zotero/modules/translators/Elsevier Health Journals.js +531 -0
  1131. package/vendor/zotero/modules/translators/Elsevier Pure.js +420 -0
  1132. package/vendor/zotero/modules/translators/Embedded Metadata.js +1951 -0
  1133. package/vendor/zotero/modules/translators/Emerald Insight.js +626 -0
  1134. package/vendor/zotero/modules/translators/Encyclopedia of Chicago.js +162 -0
  1135. package/vendor/zotero/modules/translators/Encyclopedia of Korean Culture.js +221 -0
  1136. package/vendor/zotero/modules/translators/Endnote XML.js +1407 -0
  1137. package/vendor/zotero/modules/translators/Engineering Village.js +139 -0
  1138. package/vendor/zotero/modules/translators/Envidat.js +331 -0
  1139. package/vendor/zotero/modules/translators/Epicurious.js +144 -0
  1140. package/vendor/zotero/modules/translators/Erudit.js +272 -0
  1141. package/vendor/zotero/modules/translators/Euclid.js +220 -0
  1142. package/vendor/zotero/modules/translators/EurasiaNet.js +109 -0
  1143. package/vendor/zotero/modules/translators/Eurogamer.js +112 -0
  1144. package/vendor/zotero/modules/translators/EurogamerUSgamer.js +380 -0
  1145. package/vendor/zotero/modules/translators/Europe PMC.js +448 -0
  1146. package/vendor/zotero/modules/translators/Evernote.js +104 -0
  1147. package/vendor/zotero/modules/translators/F1000 Research.js +655 -0
  1148. package/vendor/zotero/modules/translators/FAO Publications.js +1139 -0
  1149. package/vendor/zotero/modules/translators/FAZ.NET.js +231 -0
  1150. package/vendor/zotero/modules/translators/Fachportal Padagogik.js +839 -0
  1151. package/vendor/zotero/modules/translators/Factiva.js +302 -0
  1152. package/vendor/zotero/modules/translators/Failed Architecture.js +114 -0
  1153. package/vendor/zotero/modules/translators/Fairfax Australia.js +200 -0
  1154. package/vendor/zotero/modules/translators/Fatcat.js +425 -0
  1155. package/vendor/zotero/modules/translators/Figshare.js +191 -0
  1156. package/vendor/zotero/modules/translators/Financial Times.js +187 -0
  1157. package/vendor/zotero/modules/translators/Finna.js +357 -0
  1158. package/vendor/zotero/modules/translators/Flickr.js +318 -0
  1159. package/vendor/zotero/modules/translators/Foreign Affairs.js +485 -0
  1160. package/vendor/zotero/modules/translators/Foreign Policy.js +146 -0
  1161. package/vendor/zotero/modules/translators/FreeCite.js +95 -0
  1162. package/vendor/zotero/modules/translators/FreePatentsOnline.js +265 -0
  1163. package/vendor/zotero/modules/translators/Frieze.js +243 -0
  1164. package/vendor/zotero/modules/translators/Frontiers.js +667 -0
  1165. package/vendor/zotero/modules/translators/GMS German Medical Science.js +319 -0
  1166. package/vendor/zotero/modules/translators/GPO Access e-CFR.js +134 -0
  1167. package/vendor/zotero/modules/translators/Gale Databases.js +324 -0
  1168. package/vendor/zotero/modules/translators/GaleGDC.js +189 -0
  1169. package/vendor/zotero/modules/translators/Galegroup.js +327 -0
  1170. package/vendor/zotero/modules/translators/Gallica.js +194 -0
  1171. package/vendor/zotero/modules/translators/Game Studies.js +155 -0
  1172. package/vendor/zotero/modules/translators/GameSpot.js +199 -0
  1173. package/vendor/zotero/modules/translators/GameStar GamePro.js +198 -0
  1174. package/vendor/zotero/modules/translators/Gasyrlar Awazy.js +156 -0
  1175. package/vendor/zotero/modules/translators/Gemeinsamer Bibliotheksverbund ISBN.js +23 -0
  1176. package/vendor/zotero/modules/translators/Gene Ontology.js +128 -0
  1177. package/vendor/zotero/modules/translators/Github.js +268 -0
  1178. package/vendor/zotero/modules/translators/Globes.js +243 -0
  1179. package/vendor/zotero/modules/translators/Gmail.js +64 -0
  1180. package/vendor/zotero/modules/translators/Goodreads.js +219 -0
  1181. package/vendor/zotero/modules/translators/Google Books.js +552 -0
  1182. package/vendor/zotero/modules/translators/Google Patents.js +959 -0
  1183. package/vendor/zotero/modules/translators/Google Play.js +186 -0
  1184. package/vendor/zotero/modules/translators/Google Presentation.js +104 -0
  1185. package/vendor/zotero/modules/translators/Google Research.js +221 -0
  1186. package/vendor/zotero/modules/translators/Google Scholar.js +1361 -0
  1187. package/vendor/zotero/modules/translators/Gulag Many Days, Many Lives.js +179 -0
  1188. package/vendor/zotero/modules/translators/HAL Archives Ouvertes.js +429 -0
  1189. package/vendor/zotero/modules/translators/HCSP.js +312 -0
  1190. package/vendor/zotero/modules/translators/HUDOC.js +650 -0
  1191. package/vendor/zotero/modules/translators/Haaretz.js +562 -0
  1192. package/vendor/zotero/modules/translators/Habr.js +232 -0
  1193. package/vendor/zotero/modules/translators/Handelszeitung.js +273 -0
  1194. package/vendor/zotero/modules/translators/Hanrei Watch.js +123 -0
  1195. package/vendor/zotero/modules/translators/Harper's Magazine.js +365 -0
  1196. package/vendor/zotero/modules/translators/Harpers.js +209 -0
  1197. package/vendor/zotero/modules/translators/Harvard Business Review.js +326 -0
  1198. package/vendor/zotero/modules/translators/Harvard Caselaw Access Project.js +244 -0
  1199. package/vendor/zotero/modules/translators/Harvard University Press Books.js +286 -0
  1200. package/vendor/zotero/modules/translators/Hathi Trust.js +164 -0
  1201. package/vendor/zotero/modules/translators/HathiTrust.js +311 -0
  1202. package/vendor/zotero/modules/translators/HeinOnline.js +266 -0
  1203. package/vendor/zotero/modules/translators/Heise.js +200 -0
  1204. package/vendor/zotero/modules/translators/Herder.js +236 -0
  1205. package/vendor/zotero/modules/translators/HighBeam.js +198 -0
  1206. package/vendor/zotero/modules/translators/HighWire 2.0.js +1355 -0
  1207. package/vendor/zotero/modules/translators/HighWire.js +209 -0
  1208. package/vendor/zotero/modules/translators/Hindawi Publishers.js +177 -0
  1209. package/vendor/zotero/modules/translators/Hispanic-American Periodical Index.js +236 -0
  1210. package/vendor/zotero/modules/translators/Homeland Security Digital Library.js +426 -0
  1211. package/vendor/zotero/modules/translators/Hoovers.js +89 -0
  1212. package/vendor/zotero/modules/translators/Huff Post.js +223 -0
  1213. package/vendor/zotero/modules/translators/Human Rights Watch.js +450 -0
  1214. package/vendor/zotero/modules/translators/IBISWorld.js +171 -0
  1215. package/vendor/zotero/modules/translators/IDEA ALM.js +536 -0
  1216. package/vendor/zotero/modules/translators/IEEE Computer Society.js +429 -0
  1217. package/vendor/zotero/modules/translators/IEEE Xplore.js +1000 -0
  1218. package/vendor/zotero/modules/translators/IETF.js +451 -0
  1219. package/vendor/zotero/modules/translators/IGN.js +136 -0
  1220. package/vendor/zotero/modules/translators/IMDb.js +566 -0
  1221. package/vendor/zotero/modules/translators/INSPIRE.js +247 -0
  1222. package/vendor/zotero/modules/translators/IPCC.js +757 -0
  1223. package/vendor/zotero/modules/translators/ISTC.js +181 -0
  1224. package/vendor/zotero/modules/translators/Idref.js +179 -0
  1225. package/vendor/zotero/modules/translators/In These Times.js +196 -0
  1226. package/vendor/zotero/modules/translators/InfoTrac.js +279 -0
  1227. package/vendor/zotero/modules/translators/Informationssystem Medienpaedagogik.js +305 -0
  1228. package/vendor/zotero/modules/translators/IngentaConnect.js +312 -0
  1229. package/vendor/zotero/modules/translators/Inside Higher Ed.js +167 -0
  1230. package/vendor/zotero/modules/translators/Insignia OPAC.js +114 -0
  1231. package/vendor/zotero/modules/translators/Institute of Contemporary Art.js +180 -0
  1232. package/vendor/zotero/modules/translators/Institute of Physics.js +340 -0
  1233. package/vendor/zotero/modules/translators/Integrum.js +173 -0
  1234. package/vendor/zotero/modules/translators/Intellixir.js +264 -0
  1235. package/vendor/zotero/modules/translators/Inter-Research Science Center.js +185 -0
  1236. package/vendor/zotero/modules/translators/International Nuclear Information System.js +285 -0
  1237. package/vendor/zotero/modules/translators/Internet Archive Scholar.js +106 -0
  1238. package/vendor/zotero/modules/translators/Internet Archive Wayback Machine.js +152 -0
  1239. package/vendor/zotero/modules/translators/Internet Archive.js +552 -0
  1240. package/vendor/zotero/modules/translators/InvenioRDM.js +1260 -0
  1241. package/vendor/zotero/modules/translators/Isidore.js +235 -0
  1242. package/vendor/zotero/modules/translators/J-Stage.js +272 -0
  1243. package/vendor/zotero/modules/translators/JETS.js +122 -0
  1244. package/vendor/zotero/modules/translators/JISC Historical Texts.js +273 -0
  1245. package/vendor/zotero/modules/translators/JRC Publications Repository.js +569 -0
  1246. package/vendor/zotero/modules/translators/JSTOR.js +821 -0
  1247. package/vendor/zotero/modules/translators/Jahrbuch.js +213 -0
  1248. package/vendor/zotero/modules/translators/Japan Times Online.js +138 -0
  1249. package/vendor/zotero/modules/translators/Journal of Electronic Publishing.js +147 -0
  1250. package/vendor/zotero/modules/translators/Journal of Extension.js +288 -0
  1251. package/vendor/zotero/modules/translators/Journal of Machine Learning Research.js +441 -0
  1252. package/vendor/zotero/modules/translators/Journal of Religion and Society.js +174 -0
  1253. package/vendor/zotero/modules/translators/JurPC.js +274 -0
  1254. package/vendor/zotero/modules/translators/Juricaf.js +141 -0
  1255. package/vendor/zotero/modules/translators/Juris.js +728 -0
  1256. package/vendor/zotero/modules/translators/K10plus ISBN.js +386 -0
  1257. package/vendor/zotero/modules/translators/KStudy.js +632 -0
  1258. package/vendor/zotero/modules/translators/Kanopy.js +358 -0
  1259. package/vendor/zotero/modules/translators/Khaama Press.js +249 -0
  1260. package/vendor/zotero/modules/translators/KitapYurdu.com.js +376 -0
  1261. package/vendor/zotero/modules/translators/Kommersant.js +174 -0
  1262. package/vendor/zotero/modules/translators/Korean National Library.js +621 -0
  1263. package/vendor/zotero/modules/translators/L'Annee Philologique.js +267 -0
  1264. package/vendor/zotero/modules/translators/LA Times.js +239 -0
  1265. package/vendor/zotero/modules/translators/LIBRIS ISBN.js +103 -0
  1266. package/vendor/zotero/modules/translators/LIVIVO.js +260 -0
  1267. package/vendor/zotero/modules/translators/LWN.net.js +350 -0
  1268. package/vendor/zotero/modules/translators/La Croix.js +237 -0
  1269. package/vendor/zotero/modules/translators/La Nacion (Argentina).js +231 -0
  1270. package/vendor/zotero/modules/translators/La Presse.js +218 -0
  1271. package/vendor/zotero/modules/translators/La Republica (Peru).js +174 -0
  1272. package/vendor/zotero/modules/translators/Lagen.nu.js +214 -0
  1273. package/vendor/zotero/modules/translators/Landesbibliographie Baden-Wurttemberg.js +324 -0
  1274. package/vendor/zotero/modules/translators/Lapham's Quarterly.js +1062 -0
  1275. package/vendor/zotero/modules/translators/Le Devoir.js +167 -0
  1276. package/vendor/zotero/modules/translators/Le Figaro.js +225 -0
  1277. package/vendor/zotero/modules/translators/Le Maitron.js +484 -0
  1278. package/vendor/zotero/modules/translators/Le Monde.js +258 -0
  1279. package/vendor/zotero/modules/translators/Le monde diplomatique.js +200 -0
  1280. package/vendor/zotero/modules/translators/Legifrance.js +641 -0
  1281. package/vendor/zotero/modules/translators/Legislative Insight.js +406 -0
  1282. package/vendor/zotero/modules/translators/Lexis+.js +264 -0
  1283. package/vendor/zotero/modules/translators/LexisNexis.js +505 -0
  1284. package/vendor/zotero/modules/translators/Libraries Tasmania.js +778 -0
  1285. package/vendor/zotero/modules/translators/Library Catalog (Aleph).js +385 -0
  1286. package/vendor/zotero/modules/translators/Library Catalog (Amicus).js +254 -0
  1287. package/vendor/zotero/modules/translators/Library Catalog (Aquabrowser).js +253 -0
  1288. package/vendor/zotero/modules/translators/Library Catalog (BiblioCommons).js +249 -0
  1289. package/vendor/zotero/modules/translators/Library Catalog (Blacklight).js +341 -0
  1290. package/vendor/zotero/modules/translators/Library Catalog (Capita Prism).js +162 -0
  1291. package/vendor/zotero/modules/translators/Library Catalog (DRA).js +203 -0
  1292. package/vendor/zotero/modules/translators/Library Catalog (Dynix).js +315 -0
  1293. package/vendor/zotero/modules/translators/Library Catalog (EBSCO Locate).js +349 -0
  1294. package/vendor/zotero/modules/translators/Library Catalog (Encore).js +211 -0
  1295. package/vendor/zotero/modules/translators/Library Catalog (GEAC).js +104 -0
  1296. package/vendor/zotero/modules/translators/Library Catalog (InnoPAC).js +305 -0
  1297. package/vendor/zotero/modules/translators/Library Catalog (Koha).js +225 -0
  1298. package/vendor/zotero/modules/translators/Library Catalog (Mango).js +285 -0
  1299. package/vendor/zotero/modules/translators/Library Catalog (OPALS).js +200 -0
  1300. package/vendor/zotero/modules/translators/Library Catalog (PICA).js +2120 -0
  1301. package/vendor/zotero/modules/translators/Library Catalog (PICA2).js +331 -0
  1302. package/vendor/zotero/modules/translators/Library Catalog (Pika).js +488 -0
  1303. package/vendor/zotero/modules/translators/Library Catalog (Polaris).js +183 -0
  1304. package/vendor/zotero/modules/translators/Library Catalog (Quolto).js +320 -0
  1305. package/vendor/zotero/modules/translators/Library Catalog (RERO ILS).js +754 -0
  1306. package/vendor/zotero/modules/translators/Library Catalog (SIRSI eLibrary).js +407 -0
  1307. package/vendor/zotero/modules/translators/Library Catalog (SIRSI).js +452 -0
  1308. package/vendor/zotero/modules/translators/Library Catalog (SLIMS).js +146 -0
  1309. package/vendor/zotero/modules/translators/Library Catalog (TIND ILS).js +773 -0
  1310. package/vendor/zotero/modules/translators/Library Catalog (TLCYouSeeMore).js +132 -0
  1311. package/vendor/zotero/modules/translators/Library Catalog (TinREAD).js +277 -0
  1312. package/vendor/zotero/modules/translators/Library Catalog (VTLS).js +125 -0
  1313. package/vendor/zotero/modules/translators/Library Catalog (Visual Library 2021).js +765 -0
  1314. package/vendor/zotero/modules/translators/Library Catalog (Voyager 7).js +199 -0
  1315. package/vendor/zotero/modules/translators/Library Catalog (Voyager).js +212 -0
  1316. package/vendor/zotero/modules/translators/Library Genesis.js +337 -0
  1317. package/vendor/zotero/modules/translators/Library Hub Discover.js +359 -0
  1318. package/vendor/zotero/modules/translators/Library of Congress Digital Collections.js +869 -0
  1319. package/vendor/zotero/modules/translators/Library of Congress ISBN.js +86 -0
  1320. package/vendor/zotero/modules/translators/LingBuzz.js +359 -0
  1321. package/vendor/zotero/modules/translators/Lippincott Williams and Wilkins.js +341 -0
  1322. package/vendor/zotero/modules/translators/Literary Hub.js +950 -0
  1323. package/vendor/zotero/modules/translators/Litres.js +236 -0
  1324. package/vendor/zotero/modules/translators/LiveJournal.js +219 -0
  1325. package/vendor/zotero/modules/translators/London Review of Books.js +291 -0
  1326. package/vendor/zotero/modules/translators/LookUs.js +260 -0
  1327. package/vendor/zotero/modules/translators/Lulu.js +264 -0
  1328. package/vendor/zotero/modules/translators/MAB2.js +373 -0
  1329. package/vendor/zotero/modules/translators/MARC.js +1080 -0
  1330. package/vendor/zotero/modules/translators/MARCXML.js +489 -0
  1331. package/vendor/zotero/modules/translators/MCV.js +258 -0
  1332. package/vendor/zotero/modules/translators/MDPI Journals.js +356 -0
  1333. package/vendor/zotero/modules/translators/MEDLINEnbib.js +1561 -0
  1334. package/vendor/zotero/modules/translators/METS.js +384 -0
  1335. package/vendor/zotero/modules/translators/MIDAS Journals.js +343 -0
  1336. package/vendor/zotero/modules/translators/MIT Press Books.js +637 -0
  1337. package/vendor/zotero/modules/translators/MIT Press Journals.js +176 -0
  1338. package/vendor/zotero/modules/translators/MODS.js +2545 -0
  1339. package/vendor/zotero/modules/translators/MPG PuRe.js +541 -0
  1340. package/vendor/zotero/modules/translators/Mailman.js +136 -0
  1341. package/vendor/zotero/modules/translators/Mainichi Daily News.js +189 -0
  1342. package/vendor/zotero/modules/translators/Mastodon.js +198 -0
  1343. package/vendor/zotero/modules/translators/Matbugat.ru.js +110 -0
  1344. package/vendor/zotero/modules/translators/Max Planck Institute for the History of Science Virtual Laboratory Library.js +136 -0
  1345. package/vendor/zotero/modules/translators/Medium.js +208 -0
  1346. package/vendor/zotero/modules/translators/MetaLib.js +126 -0
  1347. package/vendor/zotero/modules/translators/Microbiology Society Journals.js +343 -0
  1348. package/vendor/zotero/modules/translators/Microsoft Academic.js +424 -0
  1349. package/vendor/zotero/modules/translators/Mikromarc.js +207 -0
  1350. package/vendor/zotero/modules/translators/Milli Kutuphane.js +244 -0
  1351. package/vendor/zotero/modules/translators/Musee du Louvre.js +265 -0
  1352. package/vendor/zotero/modules/translators/NASA ADS.js +889 -0
  1353. package/vendor/zotero/modules/translators/NASA NTRS.js +610 -0
  1354. package/vendor/zotero/modules/translators/NCBI Nucleotide.js +227 -0
  1355. package/vendor/zotero/modules/translators/NPR.js +341 -0
  1356. package/vendor/zotero/modules/translators/NRC Research Press.js +181 -0
  1357. package/vendor/zotero/modules/translators/NRC.nl.js +226 -0
  1358. package/vendor/zotero/modules/translators/NTSB Accident Reports.js +226 -0
  1359. package/vendor/zotero/modules/translators/NYPL Menus.js +275 -0
  1360. package/vendor/zotero/modules/translators/NYPL Research Catalog.js +458 -0
  1361. package/vendor/zotero/modules/translators/NYTimes.com.js +858 -0
  1362. package/vendor/zotero/modules/translators/NZZ.ch.js +272 -0
  1363. package/vendor/zotero/modules/translators/Nagoya University OPAC.js +336 -0
  1364. package/vendor/zotero/modules/translators/National Academies Press.js +243 -0
  1365. package/vendor/zotero/modules/translators/National Agriculture Library.js +524 -0
  1366. package/vendor/zotero/modules/translators/National Archive of the UK.js +237 -0
  1367. package/vendor/zotero/modules/translators/National Archives of Australia.js +522 -0
  1368. package/vendor/zotero/modules/translators/National Archives of South Africa.js +122 -0
  1369. package/vendor/zotero/modules/translators/National Archives of the United States.js +278 -0
  1370. package/vendor/zotero/modules/translators/National Bureau of Economic Research.js +363 -0
  1371. package/vendor/zotero/modules/translators/National Diet Library Catalogue.js +333 -0
  1372. package/vendor/zotero/modules/translators/National Gallery of Art - USA.js +149 -0
  1373. package/vendor/zotero/modules/translators/National Gallery of Australia.js +252 -0
  1374. package/vendor/zotero/modules/translators/National Library of Australia (new catalog).js +223 -0
  1375. package/vendor/zotero/modules/translators/National Library of Belarus.js +171 -0
  1376. package/vendor/zotero/modules/translators/National Library of Norway.js +310 -0
  1377. package/vendor/zotero/modules/translators/National Library of Poland ISBN.js +140 -0
  1378. package/vendor/zotero/modules/translators/National Post.js +186 -0
  1379. package/vendor/zotero/modules/translators/National Technical Reports Library.js +276 -0
  1380. package/vendor/zotero/modules/translators/National Transportation Library ROSA P.js +562 -0
  1381. package/vendor/zotero/modules/translators/Nature Publishing Group.js +3394 -0
  1382. package/vendor/zotero/modules/translators/Neural Information Processing Systems.js +385 -0
  1383. package/vendor/zotero/modules/translators/New Left Review.js +245 -0
  1384. package/vendor/zotero/modules/translators/New Zealand Herald.js +282 -0
  1385. package/vendor/zotero/modules/translators/Newlines Magazine.js +190 -0
  1386. package/vendor/zotero/modules/translators/News Corp Australia.js +251 -0
  1387. package/vendor/zotero/modules/translators/NewsBank.js +202 -0
  1388. package/vendor/zotero/modules/translators/NewsnetTamedia.js +509 -0
  1389. package/vendor/zotero/modules/translators/Noor Digital Library.js +267 -0
  1390. package/vendor/zotero/modules/translators/Note HTML.js +206 -0
  1391. package/vendor/zotero/modules/translators/Note Markdown.js +1638 -0
  1392. package/vendor/zotero/modules/translators/Notre Dame Philosophical Reviews.js +201 -0
  1393. package/vendor/zotero/modules/translators/Nuclear Receptor Signaling.js +241 -0
  1394. package/vendor/zotero/modules/translators/OAPEN.js +331 -0
  1395. package/vendor/zotero/modules/translators/OECD.js +216 -0
  1396. package/vendor/zotero/modules/translators/ORCID.js +104 -0
  1397. package/vendor/zotero/modules/translators/OSF Preprints.js +417 -0
  1398. package/vendor/zotero/modules/translators/OSTI Energy Citations.js +202 -0
  1399. package/vendor/zotero/modules/translators/OVID Tagged.js +1226 -0
  1400. package/vendor/zotero/modules/translators/OZON.ru.js +465 -0
  1401. package/vendor/zotero/modules/translators/OhioLINK.js +43 -0
  1402. package/vendor/zotero/modules/translators/Old Bailey Online.js +315 -0
  1403. package/vendor/zotero/modules/translators/Open Conf.js +172 -0
  1404. package/vendor/zotero/modules/translators/Open Journal Systems.js +729 -0
  1405. package/vendor/zotero/modules/translators/Open Knowledge Repository.js +811 -0
  1406. package/vendor/zotero/modules/translators/OpenAlex JSON.js +740 -0
  1407. package/vendor/zotero/modules/translators/OpenAlex.js +444 -0
  1408. package/vendor/zotero/modules/translators/OpenEdition Books.js +155 -0
  1409. package/vendor/zotero/modules/translators/OpenEdition Journals.js +432 -0
  1410. package/vendor/zotero/modules/translators/Optical Society of America.js +562 -0
  1411. package/vendor/zotero/modules/translators/Optimization Online.js +418 -0
  1412. package/vendor/zotero/modules/translators/Ovid OCE.js +353 -0
  1413. package/vendor/zotero/modules/translators/Ovid.js +302 -0
  1414. package/vendor/zotero/modules/translators/Oxford Dictionaries Premium.js +194 -0
  1415. package/vendor/zotero/modules/translators/Oxford English Dictionary.js +122 -0
  1416. package/vendor/zotero/modules/translators/Oxford Music and Art Online.js +120 -0
  1417. package/vendor/zotero/modules/translators/Oxford Reference.js +202 -0
  1418. package/vendor/zotero/modules/translators/Oxford University Press.js +277 -0
  1419. package/vendor/zotero/modules/translators/PC Gamer.js +302 -0
  1420. package/vendor/zotero/modules/translators/PC Games.js +128 -0
  1421. package/vendor/zotero/modules/translators/PEI Archival Information Network.js +242 -0
  1422. package/vendor/zotero/modules/translators/PEP Web.js +165 -0
  1423. package/vendor/zotero/modules/translators/PKP Catalog Systems.js +1455 -0
  1424. package/vendor/zotero/modules/translators/PLoS Journals.js +284 -0
  1425. package/vendor/zotero/modules/translators/PRC History Review.js +298 -0
  1426. package/vendor/zotero/modules/translators/Pajhwok Afghan News.js +198 -0
  1427. package/vendor/zotero/modules/translators/Papers Past.js +297 -0
  1428. package/vendor/zotero/modules/translators/Paris Review.js +227 -0
  1429. package/vendor/zotero/modules/translators/Pastebin.js +199 -0
  1430. package/vendor/zotero/modules/translators/Patents - USPTO.js +210 -0
  1431. package/vendor/zotero/modules/translators/Peeters.js +587 -0
  1432. package/vendor/zotero/modules/translators/Perceiving Systems.js +350 -0
  1433. package/vendor/zotero/modules/translators/Perlego.js +416 -0
  1434. package/vendor/zotero/modules/translators/PhilPapers.js +233 -0
  1435. package/vendor/zotero/modules/translators/Philosopher's Imprint.js +169 -0
  1436. package/vendor/zotero/modules/translators/Pleade.js +329 -0
  1437. package/vendor/zotero/modules/translators/Polygon.js +270 -0
  1438. package/vendor/zotero/modules/translators/Potsdamer Neueste Nachrichten.js +188 -0
  1439. package/vendor/zotero/modules/translators/Premium Times.js +144 -0
  1440. package/vendor/zotero/modules/translators/Preprints.org.js +305 -0
  1441. package/vendor/zotero/modules/translators/Prime 9ja Online.js +289 -0
  1442. package/vendor/zotero/modules/translators/Primo 2018.js +126 -0
  1443. package/vendor/zotero/modules/translators/Primo Normalized XML.js +987 -0
  1444. package/vendor/zotero/modules/translators/Primo.js +322 -0
  1445. package/vendor/zotero/modules/translators/ProMED.js +66 -0
  1446. package/vendor/zotero/modules/translators/ProQuest Ebook Central.js +226 -0
  1447. package/vendor/zotero/modules/translators/ProQuest PolicyFile.js +115 -0
  1448. package/vendor/zotero/modules/translators/ProQuest.js +2210 -0
  1449. package/vendor/zotero/modules/translators/Probing the Past.js +151 -0
  1450. package/vendor/zotero/modules/translators/Project Gutenberg.js +191 -0
  1451. package/vendor/zotero/modules/translators/Project MUSE.js +451 -0
  1452. package/vendor/zotero/modules/translators/Protein Data Bank.js +445 -0
  1453. package/vendor/zotero/modules/translators/PubFactory Journals.js +712 -0
  1454. package/vendor/zotero/modules/translators/PubMed Central.js +577 -0
  1455. package/vendor/zotero/modules/translators/PubMed XML.js +1139 -0
  1456. package/vendor/zotero/modules/translators/PubMed.js +1317 -0
  1457. package/vendor/zotero/modules/translators/PubPub.js +530 -0
  1458. package/vendor/zotero/modules/translators/Pubget.js +164 -0
  1459. package/vendor/zotero/modules/translators/Public Record Office Victoria.js +252 -0
  1460. package/vendor/zotero/modules/translators/Publications Office of the European Union.js +540 -0
  1461. package/vendor/zotero/modules/translators/Publications du Quebec.js +225 -0
  1462. package/vendor/zotero/modules/translators/PyPI.js +288 -0
  1463. package/vendor/zotero/modules/translators/Qatar Digital Library.js +802 -0
  1464. package/vendor/zotero/modules/translators/Queensland State Archives.js +303 -0
  1465. package/vendor/zotero/modules/translators/R-Packages.js +410 -0
  1466. package/vendor/zotero/modules/translators/RAND.js +283 -0
  1467. package/vendor/zotero/modules/translators/RDF.js +1780 -0
  1468. package/vendor/zotero/modules/translators/REDALYC.js +196 -0
  1469. package/vendor/zotero/modules/translators/RIS.js +7265 -0
  1470. package/vendor/zotero/modules/translators/RSC Publishing.js +250 -0
  1471. package/vendor/zotero/modules/translators/Radio Free Europe Radio Liberty.js +706 -0
  1472. package/vendor/zotero/modules/translators/RePEc - Econpapers.js +725 -0
  1473. package/vendor/zotero/modules/translators/RePEc - IDEAS.js +337 -0
  1474. package/vendor/zotero/modules/translators/Rechtspraak.nl.js +295 -0
  1475. package/vendor/zotero/modules/translators/RefWorks Tagged.js +1185 -0
  1476. package/vendor/zotero/modules/translators/ReferBibIX.js +463 -0
  1477. package/vendor/zotero/modules/translators/Regeringskansliet.js +89 -0
  1478. package/vendor/zotero/modules/translators/Research Square.js +335 -0
  1479. package/vendor/zotero/modules/translators/ResearchGate.js +394 -0
  1480. package/vendor/zotero/modules/translators/Retsinformation.js +348 -0
  1481. package/vendor/zotero/modules/translators/Reuters.js +255 -0
  1482. package/vendor/zotero/modules/translators/Revues.org.js +378 -0
  1483. package/vendor/zotero/modules/translators/Rock, Paper, Shotgun.js +304 -0
  1484. package/vendor/zotero/modules/translators/Roll Call.js +173 -0
  1485. package/vendor/zotero/modules/translators/Russian State Library.js +1517 -0
  1486. package/vendor/zotero/modules/translators/SAE Papers.js +241 -0
  1487. package/vendor/zotero/modules/translators/SAGE Journals.js +427 -0
  1488. package/vendor/zotero/modules/translators/SAGE Knowledge.js +505 -0
  1489. package/vendor/zotero/modules/translators/SAILDART.js +364 -0
  1490. package/vendor/zotero/modules/translators/SALT Research Archives.js +196 -0
  1491. package/vendor/zotero/modules/translators/SFU IPinCH.js +946 -0
  1492. package/vendor/zotero/modules/translators/SIPRI.js +256 -0
  1493. package/vendor/zotero/modules/translators/SIRS Knowledge Source.js +546 -0
  1494. package/vendor/zotero/modules/translators/SLUB Dresden.js +300 -0
  1495. package/vendor/zotero/modules/translators/SORA.js +340 -0
  1496. package/vendor/zotero/modules/translators/SSOAR.js +399 -0
  1497. package/vendor/zotero/modules/translators/SSRN.js +235 -0
  1498. package/vendor/zotero/modules/translators/SVT Nyheter.js +381 -0
  1499. package/vendor/zotero/modules/translators/Sacramento Bee.js +274 -0
  1500. package/vendor/zotero/modules/translators/Safari Books Online.js +391 -0
  1501. package/vendor/zotero/modules/translators/Scholars Portal Journals.js +220 -0
  1502. package/vendor/zotero/modules/translators/Scholia.js +189 -0
  1503. package/vendor/zotero/modules/translators/Schweizer Radio und Fernsehen SRF.js +152 -0
  1504. package/vendor/zotero/modules/translators/SciELO.js +440 -0
  1505. package/vendor/zotero/modules/translators/ScienceDirect.js +1304 -0
  1506. package/vendor/zotero/modules/translators/Scopus.js +418 -0
  1507. package/vendor/zotero/modules/translators/Semantic Scholar.js +513 -0
  1508. package/vendor/zotero/modules/translators/Silverchair.js +886 -0
  1509. package/vendor/zotero/modules/translators/Slate.js +228 -0
  1510. package/vendor/zotero/modules/translators/SlideShare.js +112 -0
  1511. package/vendor/zotero/modules/translators/Spiegel Online.js +343 -0
  1512. package/vendor/zotero/modules/translators/Springer Link.js +696 -0
  1513. package/vendor/zotero/modules/translators/Stack Exchange.js +134 -0
  1514. package/vendor/zotero/modules/translators/Standard Ebooks.js +198 -0
  1515. package/vendor/zotero/modules/translators/Stanford Encyclopedia of Philosophy.js +285 -0
  1516. package/vendor/zotero/modules/translators/Stanford University Press.js +343 -0
  1517. package/vendor/zotero/modules/translators/State Records Office of Western Australia.js +439 -0
  1518. package/vendor/zotero/modules/translators/Stitcher.js +141 -0
  1519. package/vendor/zotero/modules/translators/Store norske leksikon.js +291 -0
  1520. package/vendor/zotero/modules/translators/Stuff.co.nz.js +446 -0
  1521. package/vendor/zotero/modules/translators/Substack.js +237 -0
  1522. package/vendor/zotero/modules/translators/Sud Ouest.js +181 -0
  1523. package/vendor/zotero/modules/translators/Sueddeutsche.de.js +205 -0
  1524. package/vendor/zotero/modules/translators/Summon 2.js +117 -0
  1525. package/vendor/zotero/modules/translators/Superlib.js +647 -0
  1526. package/vendor/zotero/modules/translators/Svenska Dagbladet.js +274 -0
  1527. package/vendor/zotero/modules/translators/Sveriges radio.js +416 -0
  1528. package/vendor/zotero/modules/translators/TEI.js +648 -0
  1529. package/vendor/zotero/modules/translators/TV by the Numbers.js +194 -0
  1530. package/vendor/zotero/modules/translators/TVNZ.js +165 -0
  1531. package/vendor/zotero/modules/translators/Tagesspiegel.js +249 -0
  1532. package/vendor/zotero/modules/translators/Talis Aspire.js +316 -0
  1533. package/vendor/zotero/modules/translators/TalisPrism.js +445 -0
  1534. package/vendor/zotero/modules/translators/Tatknigafund.js +174 -0
  1535. package/vendor/zotero/modules/translators/Tatpressa.ru.js +121 -0
  1536. package/vendor/zotero/modules/translators/Taylor & Francis eBooks.js +334 -0
  1537. package/vendor/zotero/modules/translators/Taylor and Francis+NEJM.js +813 -0
  1538. package/vendor/zotero/modules/translators/Tesis Doctorals en Xarxa.js +233 -0
  1539. package/vendor/zotero/modules/translators/The Art Newspaper.js +268 -0
  1540. package/vendor/zotero/modules/translators/The Atlantic.js +535 -0
  1541. package/vendor/zotero/modules/translators/The Australian.js +105 -0
  1542. package/vendor/zotero/modules/translators/The Boston Globe.js +285 -0
  1543. package/vendor/zotero/modules/translators/The Chronicle of Higher Education.js +308 -0
  1544. package/vendor/zotero/modules/translators/The Daily Beast.js +183 -0
  1545. package/vendor/zotero/modules/translators/The Economic Times - The Times of India.js +305 -0
  1546. package/vendor/zotero/modules/translators/The Economic Times.js +191 -0
  1547. package/vendor/zotero/modules/translators/The Economist.js +207 -0
  1548. package/vendor/zotero/modules/translators/The Free Dictionary.js +58 -0
  1549. package/vendor/zotero/modules/translators/The Globe and Mail.js +241 -0
  1550. package/vendor/zotero/modules/translators/The Guardian.js +717 -0
  1551. package/vendor/zotero/modules/translators/The Hamilton Spectator.js +129 -0
  1552. package/vendor/zotero/modules/translators/The Hindu (old).js +128 -0
  1553. package/vendor/zotero/modules/translators/The Hindu.js +318 -0
  1554. package/vendor/zotero/modules/translators/The Independent.js +184 -0
  1555. package/vendor/zotero/modules/translators/The Intercept.js +258 -0
  1556. package/vendor/zotero/modules/translators/The Met.js +300 -0
  1557. package/vendor/zotero/modules/translators/The Microfinance Gateway.js +174 -0
  1558. package/vendor/zotero/modules/translators/The Nation.js +188 -0
  1559. package/vendor/zotero/modules/translators/The National Archives (UK).js +242 -0
  1560. package/vendor/zotero/modules/translators/The New Republic.js +160 -0
  1561. package/vendor/zotero/modules/translators/The New York Review of Books.js +467 -0
  1562. package/vendor/zotero/modules/translators/The New Yorker.js +360 -0
  1563. package/vendor/zotero/modules/translators/The Open Library.js +220 -0
  1564. package/vendor/zotero/modules/translators/The Straits Times.js +528 -0
  1565. package/vendor/zotero/modules/translators/The Telegraph.js +337 -0
  1566. package/vendor/zotero/modules/translators/The Times and Sunday Times.js +180 -0
  1567. package/vendor/zotero/modules/translators/The Times of Israel.js +151 -0
  1568. package/vendor/zotero/modules/translators/TheMarker.js +108 -0
  1569. package/vendor/zotero/modules/translators/Theory of Computing.js +488 -0
  1570. package/vendor/zotero/modules/translators/ThesesFR.js +350 -0
  1571. package/vendor/zotero/modules/translators/Thieme.js +326 -0
  1572. package/vendor/zotero/modules/translators/Time.com.js +557 -0
  1573. package/vendor/zotero/modules/translators/TimesMachine.js +222 -0
  1574. package/vendor/zotero/modules/translators/Tony Blair Institute for Global Change.js +195 -0
  1575. package/vendor/zotero/modules/translators/Toronto Star.js +331 -0
  1576. package/vendor/zotero/modules/translators/Transportation Research Board.js +253 -0
  1577. package/vendor/zotero/modules/translators/Treesearch.js +535 -0
  1578. package/vendor/zotero/modules/translators/Trove.js +616 -0
  1579. package/vendor/zotero/modules/translators/Tumblr.js +179 -0
  1580. package/vendor/zotero/modules/translators/Twitter.js +413 -0
  1581. package/vendor/zotero/modules/translators/UChicago VuFind.js +907 -0
  1582. package/vendor/zotero/modules/translators/UNZ Print Archive.js +276 -0
  1583. package/vendor/zotero/modules/translators/UPCommons.js +227 -0
  1584. package/vendor/zotero/modules/translators/US National Archives Research Catalog.js +275 -0
  1585. package/vendor/zotero/modules/translators/USENIX.js +151 -0
  1586. package/vendor/zotero/modules/translators/USgamer.js +120 -0
  1587. package/vendor/zotero/modules/translators/Ubiquity Journals.js +228 -0
  1588. package/vendor/zotero/modules/translators/University Press Scholarship.js +301 -0
  1589. package/vendor/zotero/modules/translators/University of California Press Books.js +403 -0
  1590. package/vendor/zotero/modules/translators/University of Chicago Press Books.js +378 -0
  1591. package/vendor/zotero/modules/translators/University of Wisconsin-Madison Libraries Catalog.js +298 -0
  1592. package/vendor/zotero/modules/translators/Unqualified Dublin Core RDF.js +153 -0
  1593. package/vendor/zotero/modules/translators/UpToDate References.js +203 -0
  1594. package/vendor/zotero/modules/translators/Vanity Fair.js +242 -0
  1595. package/vendor/zotero/modules/translators/Verniana-Jules Verne Studies.js +190 -0
  1596. package/vendor/zotero/modules/translators/Verso Books.js +311 -0
  1597. package/vendor/zotero/modules/translators/Vice.js +445 -0
  1598. package/vendor/zotero/modules/translators/Victoria & Albert Museum.js +277 -0
  1599. package/vendor/zotero/modules/translators/Vimeo.js +188 -0
  1600. package/vendor/zotero/modules/translators/VoxEU.js +151 -0
  1601. package/vendor/zotero/modules/translators/WHO.js +458 -0
  1602. package/vendor/zotero/modules/translators/WIPO.js +189 -0
  1603. package/vendor/zotero/modules/translators/Wall Street Journal.js +525 -0
  1604. package/vendor/zotero/modules/translators/Wanfang Data.js +310 -0
  1605. package/vendor/zotero/modules/translators/Washington Monthly.js +195 -0
  1606. package/vendor/zotero/modules/translators/Washington Post.js +447 -0
  1607. package/vendor/zotero/modules/translators/Web of Science Nextgen.js +832 -0
  1608. package/vendor/zotero/modules/translators/Web of Science Tagged.js +1247 -0
  1609. package/vendor/zotero/modules/translators/Web of Science.js +228 -0
  1610. package/vendor/zotero/modules/translators/Welt Online.js +161 -0
  1611. package/vendor/zotero/modules/translators/WestLaw UK.js +190 -0
  1612. package/vendor/zotero/modules/translators/WikiLeaks PlusD.js +182 -0
  1613. package/vendor/zotero/modules/translators/Wikidata QuickStatements.js +324 -0
  1614. package/vendor/zotero/modules/translators/Wikidata.js +911 -0
  1615. package/vendor/zotero/modules/translators/Wikimedia Commons.js +285 -0
  1616. package/vendor/zotero/modules/translators/Wikipedia Citation Templates.js +432 -0
  1617. package/vendor/zotero/modules/translators/Wikipedia.js +385 -0
  1618. package/vendor/zotero/modules/translators/Wikisource.js +399 -0
  1619. package/vendor/zotero/modules/translators/Wikiwand.js +122 -0
  1620. package/vendor/zotero/modules/translators/Wiktionary.js +141 -0
  1621. package/vendor/zotero/modules/translators/Wildlife Biology in Practice.js +172 -0
  1622. package/vendor/zotero/modules/translators/Wiley Online Library.js +1412 -0
  1623. package/vendor/zotero/modules/translators/Wilson Center Digital Archive.js +321 -0
  1624. package/vendor/zotero/modules/translators/Winnipeg Free Press.js +204 -0
  1625. package/vendor/zotero/modules/translators/Wired.js +249 -0
  1626. package/vendor/zotero/modules/translators/Womennews.js +230 -0
  1627. package/vendor/zotero/modules/translators/World Digital Library.js +403 -0
  1628. package/vendor/zotero/modules/translators/World History Connected.js +185 -0
  1629. package/vendor/zotero/modules/translators/World Shakespeare Bibliography Online.js +595 -0
  1630. package/vendor/zotero/modules/translators/XML ContextObject.js +274 -0
  1631. package/vendor/zotero/modules/translators/YPSF.js +224 -0
  1632. package/vendor/zotero/modules/translators/Yandex Books.js +265 -0
  1633. package/vendor/zotero/modules/translators/Ynet.js +171 -0
  1634. package/vendor/zotero/modules/translators/YouTube.js +209 -0
  1635. package/vendor/zotero/modules/translators/ZIPonline.js +267 -0
  1636. package/vendor/zotero/modules/translators/ZOBODAT.js +341 -0
  1637. package/vendor/zotero/modules/translators/Zotero RDF.js +583 -0
  1638. package/vendor/zotero/modules/translators/ZoteroBib.js +94 -0
  1639. package/vendor/zotero/modules/translators/arXiv.org.js +1099 -0
  1640. package/vendor/zotero/modules/translators/artnet.js +207 -0
  1641. package/vendor/zotero/modules/translators/beck-online.js +1339 -0
  1642. package/vendor/zotero/modules/translators/clinicaltrials.gov.js +331 -0
  1643. package/vendor/zotero/modules/translators/dLibra.js +367 -0
  1644. package/vendor/zotero/modules/translators/dejure.org.js +242 -0
  1645. package/vendor/zotero/modules/translators/dhistory.js +103 -0
  1646. package/vendor/zotero/modules/translators/digibib.net.js +245 -0
  1647. package/vendor/zotero/modules/translators/eLibrary.ru.js +867 -0
  1648. package/vendor/zotero/modules/translators/eLife.js +462 -0
  1649. package/vendor/zotero/modules/translators/eMJA.js +246 -0
  1650. package/vendor/zotero/modules/translators/eMedicine.js +123 -0
  1651. package/vendor/zotero/modules/translators/ePrint IACR.js +608 -0
  1652. package/vendor/zotero/modules/translators/ebrary.js +140 -0
  1653. package/vendor/zotero/modules/translators/etatar.ru.js +104 -0
  1654. package/vendor/zotero/modules/translators/feb-web.ru.js +167 -0
  1655. package/vendor/zotero/modules/translators/fishpond.co.nz.js +224 -0
  1656. package/vendor/zotero/modules/translators/fr-online.de.js +209 -0
  1657. package/vendor/zotero/modules/translators/govinfo.js +189 -0
  1658. package/vendor/zotero/modules/translators/informIT database.js +248 -0
  1659. package/vendor/zotero/modules/translators/io-port.js +68 -0
  1660. package/vendor/zotero/modules/translators/jmlr.js +299 -0
  1661. package/vendor/zotero/modules/translators/jurion.js +377 -0
  1662. package/vendor/zotero/modules/translators/mEDRA.js +597 -0
  1663. package/vendor/zotero/modules/translators/magazines.russ.ru.js +120 -0
  1664. package/vendor/zotero/modules/translators/medes.js +284 -0
  1665. package/vendor/zotero/modules/translators/newshub.co.nz.js +206 -0
  1666. package/vendor/zotero/modules/translators/newspapers.com.js +335 -0
  1667. package/vendor/zotero/modules/translators/openJur.js +161 -0
  1668. package/vendor/zotero/modules/translators/reddit.js +275 -0
  1669. package/vendor/zotero/modules/translators/sbn.it.js +186 -0
  1670. package/vendor/zotero/modules/translators/scinapse.js +273 -0
  1671. package/vendor/zotero/modules/translators/semantics Visual Library.js +643 -0
  1672. package/vendor/zotero/modules/translators/taz.de.js +200 -0
  1673. package/vendor/zotero/modules/translators/unAPI.js +481 -0
  1674. package/vendor/zotero/modules/translators/washingtonpost.com.js +257 -0
  1675. package/vendor/zotero/modules/translators/wiso.js +314 -0
  1676. package/vendor/zotero/modules/translators/zbMATH.js +278 -0
  1677. package/vendor/zotero/modules/translators/zotero.org.js +311 -0
  1678. package/vendor/zotero/modules/utilities/README.md +25 -0
  1679. package/vendor/zotero/modules/utilities/cachedTypes.js +193 -0
  1680. package/vendor/zotero/modules/utilities/date.js +958 -0
  1681. package/vendor/zotero/modules/utilities/openurl.js +458 -0
  1682. package/vendor/zotero/modules/utilities/resource/README.md +4 -0
  1683. package/vendor/zotero/modules/utilities/resource/dateFormats.json +1322 -0
  1684. package/vendor/zotero/modules/utilities/resource/schema/global/README.md +15 -0
  1685. package/vendor/zotero/modules/utilities/resource/schema/global/schema.json +12072 -0
  1686. package/vendor/zotero/modules/utilities/resource/zoteroTypeSchemaData.js +5 -0
  1687. package/vendor/zotero/modules/utilities/schema.js +65 -0
  1688. package/vendor/zotero/modules/utilities/utilities.js +1841 -0
  1689. package/vendor/zotero/modules/utilities/utilities_item.js +1082 -0
  1690. package/vendor/zotero/modules/utilities/xregexp-all.js +4652 -0
  1691. package/vendor/zotero/modules/utilities/xregexp-unicode-zotero.js +58 -0
  1692. package/vendor/zotero/modules/zotero-schema/README.md +15 -0
  1693. package/vendor/zotero/modules/zotero-schema/schema.json +12072 -0
  1694. package/vendor/zotero/package-lock.json +4332 -0
  1695. package/vendor/zotero/package.json +44 -0
  1696. package/vendor/zotero/spec.yaml +142 -0
  1697. package/vendor/zotero/src/args.js +43 -0
  1698. package/vendor/zotero/src/cors.js +28 -0
  1699. package/vendor/zotero/src/debug.js +189 -0
  1700. package/vendor/zotero/src/exportEndpoint.js +97 -0
  1701. package/vendor/zotero/src/formats.js +43 -0
  1702. package/vendor/zotero/src/http.js +478 -0
  1703. package/vendor/zotero/src/importEndpoint.js +54 -0
  1704. package/vendor/zotero/src/lambda.js +75 -0
  1705. package/vendor/zotero/src/proxy.js +356 -0
  1706. package/vendor/zotero/src/searchEndpoint.js +97 -0
  1707. package/vendor/zotero/src/server.js +85 -0
  1708. package/vendor/zotero/src/specEndpoint.js +135 -0
  1709. package/vendor/zotero/src/testEndpoint.js +50 -0
  1710. package/vendor/zotero/src/textSearch.js +527 -0
  1711. package/vendor/zotero/src/translation/sandboxManager.js +109 -0
  1712. package/vendor/zotero/src/translation/translate.js +101 -0
  1713. package/vendor/zotero/src/translation/translate_item.js +88 -0
  1714. package/vendor/zotero/src/translators.js +264 -0
  1715. package/vendor/zotero/src/utilities.js +49 -0
  1716. package/vendor/zotero/src/webEndpoint.js +113 -0
  1717. package/vendor/zotero/src/webSession.js +476 -0
  1718. package/vendor/zotero/src/zotero.js +117 -0
  1719. package/vendor/zotero/translate_export +10 -0
  1720. package/vendor/zotero/translate_search +9 -0
  1721. package/vendor/zotero/translate_url +9 -0
  1722. package/vendor/zotero/translate_url_multiple +9 -0
  1723. package/vendor/zotero/translate_url_single +9 -0
@@ -0,0 +1,1841 @@
1
+ /*
2
+ ***** BEGIN LICENSE BLOCK *****
3
+
4
+ Copyright © 2009 Center for History and New Media
5
+ George Mason University, Fairfax, Virginia, USA
6
+ http://zotero.org
7
+
8
+ This file is part of Zotero.
9
+
10
+ Zotero is free software: you can redistribute it and/or modify
11
+ it under the terms of the GNU Affero General Public License as published by
12
+ the Free Software Foundation, either version 3 of the License, or
13
+ (at your option) any later version.
14
+
15
+ Zotero is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ GNU Affero General Public License for more details.
19
+
20
+ You should have received a copy of the GNU Affero General Public License
21
+ along with Zotero. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+
24
+ Utilities based in part on code taken from Piggy Bank 2.1.1 (BSD-licensed)
25
+
26
+ ***** END LICENSE BLOCK *****
27
+ */
28
+
29
+ (function() {
30
+
31
+ function movedToUtilitiesInternal(fnName) {
32
+ return function () {
33
+ if (Zotero.Utilities && Zotero.Utilities.Internal) {
34
+ Zotero.debug(`Zotero.Utilities.${fnName}() is deprecated -- use Zotero.Utilities.Internal.${fnName}() instead`);
35
+ return Zotero.Utilities.Internal[fnName].apply(Zotero.Utilities.Internal, arguments);
36
+ } else {
37
+ throw new Error(`Zotero.Utilities.${fnName}() is only available in the zotero-client codebase`)
38
+ }
39
+ }
40
+ }
41
+
42
+ /**
43
+ * @class Functions for text manipulation and other miscellaneous purposes
44
+ */
45
+ var Utilities = {
46
+ /**
47
+ * Returns a function which will execute `fn` with provided arguments after `delay` milliseconds and not more
48
+ * than once, if called multiple times. See
49
+ * http://stackoverflow.com/questions/24004791/can-someone-explain-the-debounce-function-in-javascript
50
+ * @param fn {Function} function to debounce
51
+ * @param delay {Integer} number of milliseconds to delay the function execution
52
+ * @returns {Function}
53
+ */
54
+ debounce: function(fn, delay=500) {
55
+ var timer = null;
56
+ return function () {
57
+ let args = arguments;
58
+ clearTimeout(timer);
59
+ timer = setTimeout(function () {
60
+ fn.apply(this, args);
61
+ }.bind(this), delay);
62
+ };
63
+ },
64
+
65
+ /**
66
+ * Creates and returns a new, throttled version of the
67
+ * passed function, that, when invoked repeatedly,
68
+ * will only actually call the original function at most
69
+ * once per every wait milliseconds
70
+ *
71
+ * By default, throttle will execute the function as soon
72
+ * as you call it for the first time, and, if you call it
73
+ * again any number of times during the wait period, as soon
74
+ * as that period is over. If you'd like to disable the
75
+ * leading-edge call, pass {leading: false}, and if you'd
76
+ * like to disable the execution on the trailing-edge,
77
+ * pass {trailing: false}. See
78
+ * https://underscorejs.org/#throttle
79
+ * https://github.com/jashkenas/underscore/blob/master/underscore.js
80
+ * (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
81
+ * Underscore may be freely distributed under the MIT license.
82
+ *
83
+ * @param {Function} func Function to throttle
84
+ * @param {Integer} wait Wait period in milliseconds
85
+ * @param {Boolean} [options.leading] Call at the beginning of the wait period
86
+ * @param {Boolean} [options.trailing] Call at the end of the wait period
87
+ */
88
+ throttle: function (func, wait, options) {
89
+ var context, args, result;
90
+ var timeout = null;
91
+ var previous = 0;
92
+ if (!options) options = {};
93
+ var later = function () {
94
+ previous = options.leading === false ? 0 : Date.now();
95
+ timeout = null;
96
+ result = func.apply(context, args);
97
+ if (!timeout) context = args = null;
98
+ };
99
+ return function () {
100
+ var now = Date.now();
101
+ if (!previous && options.leading === false) previous = now;
102
+ var remaining = wait - (now - previous);
103
+ context = this;
104
+ args = arguments;
105
+ if (remaining <= 0 || remaining > wait) {
106
+ if (timeout) {
107
+ clearTimeout(timeout);
108
+ timeout = null;
109
+ }
110
+ previous = now;
111
+ result = func.apply(context, args);
112
+ if (!timeout) context = args = null;
113
+ }
114
+ else if (!timeout && options.trailing !== false) {
115
+ timeout = setTimeout(later, remaining);
116
+ }
117
+ return result;
118
+ };
119
+ },
120
+
121
+ sentenceCase: function (text) {
122
+ const preserve = [];
123
+ const allcaps = text === text.toUpperCase()
124
+
125
+ // sub-sentence start
126
+ text.replace(/([.?!][\s]+)(<[^>]+>)?([\p{Lu}])/ug, (match, end, markup, char, i) => {
127
+ markup = markup || "";
128
+ if (!text.substring(0, i + 1).match(/(\p{Lu}[.]){2,}$/u)) { // prevent "U.S. Taxes" from starting a new sub-sentence
129
+ preserve.push({ start: i + end.length + markup.length, end: i + end.length + markup.length + char.length });
130
+ }
131
+ });
132
+
133
+ // protect leading capital
134
+ text.replace(/^(<[^>]+>)?([\p{Lu}])/u, (match, markup, char) => {
135
+ markup = markup || "";
136
+ preserve.push({ start: markup.length, end: markup.length + char.length });
137
+ });
138
+
139
+ // protect nocase
140
+ text.replace(/<span class="nocase">.*?<\/span>|<nc>.*?<\/nc>/gi, (match, i) => {
141
+ preserve.push({ start: i, end: i + match.length, description: 'nocase' });
142
+ });
143
+
144
+ // mask html tags with characters so the sentence-casing can deal with them as simple words
145
+ let masked = text.replace(/<[^>]+>/g, (match, i) => {
146
+ preserve.push({ start: i, end: i + match.length, description: 'markup' });
147
+ return '\uFFFD'.repeat(match.length);
148
+ });
149
+
150
+ masked = masked
151
+ .replace(/[;:]\uFFFD*\s+\uFFFD*A\s/g, match => match.toLowerCase())
152
+ .replace(/[–—]\uFFFD*\s*\uFFFD*A\s/g, match => match.toLowerCase())
153
+ // words, compound words, and acronyms (latter also catches U.S.A.)
154
+ .replace(/([\u{FFFD}\p{L}\p{N}\p{No}]+([\u{FFFD}\p{L}\p{N}\p{No}\p{Pc}]*))|(\s(\p{Lu}+[.]){2,})?/ug, word => {
155
+ if (allcaps) return word.toLowerCase()
156
+
157
+ const unmasked = word.replace(/\uFFFD/g, '');
158
+
159
+ if (unmasked.length === 1) {
160
+ return unmasked === 'A' ? word.toLowerCase() : word
161
+ }
162
+
163
+ // inner capital somewhere
164
+ if (unmasked.match(/.\p{Lu}/u)) {
165
+ return word
166
+ }
167
+
168
+ // identifiers or allcaps
169
+ if (unmasked.match(/^\p{L}\p{L}*[\p{N}\p{No}][\p{L}\p{N}\p{No}]*$/u) || unmasked.match(/^[\p{Lu}\p{N}\p{No}]+$/u)) {
170
+ return word
171
+ }
172
+
173
+ return word.toLowerCase()
174
+ });
175
+
176
+ for (const { start, end } of preserve) {
177
+ masked = masked.substring(0, start) + text.substring(start, end) + masked.substring(end);
178
+ }
179
+
180
+ return masked;
181
+ },
182
+
183
+ /**
184
+ * Fixes author name capitalization.
185
+ * Splits names into space-separated parts and only changes parts either in all uppercase
186
+ * or all lowercase.
187
+ *
188
+ * JOHN -> John
189
+ * GUTIÉRREZ-ALBILLA -> Gutiérrez-Albilla
190
+ * O'NEAL -> O'Neal
191
+ * o'neal -> O'Neal
192
+ * O'neal -> O'neal
193
+ * John MacGregor O'NEILL -> John MacGregor O'Neill
194
+ * martha McMiddlename WASHINGTON -> Martha McMiddlename Washington
195
+ *
196
+ * @param {String} string Uppercase author name
197
+ * @return {String} Title-cased author name
198
+ */
199
+ capitalizeName: function (string) {
200
+ if (!(typeof string === 'string')) {
201
+ return string;
202
+ }
203
+ return string.split(' ')
204
+ .map((part) => {
205
+ if (part.toUpperCase() === part || part.toLowerCase() === part) {
206
+ return Utilities.XRegExp.replace(
207
+ part.toLowerCase(),
208
+ Utilities.XRegExp('(^|[^\\pL])\\pL', 'g'),
209
+ m => m.toUpperCase()
210
+ );
211
+ }
212
+ else {
213
+ return part;
214
+ }
215
+ })
216
+ .join(' ');
217
+ },
218
+
219
+ /**
220
+ * Cleans extraneous punctuation off a creator name and parse into first and last name
221
+ *
222
+ * @param {String} author Creator string
223
+ * @param {String} type Creator type string (e.g., "author" or "editor")
224
+ * @param {Boolean} useComma Whether the creator string is in inverted (Last, First) format
225
+ * @return {Object} firstName, lastName, and creatorType
226
+ */
227
+ cleanAuthor: function(author, type, useComma) {
228
+ var allCaps = 'A-Z' +
229
+ '\u0400-\u042f'; //cyrilic
230
+
231
+ var allCapsRe = new RegExp('^[' + allCaps + ']+$');
232
+ var initialRe = new RegExp('^-?[' + allCaps + ']$');
233
+
234
+ if(typeof(author) != "string") {
235
+ throw new Error("cleanAuthor: author must be a string");
236
+ }
237
+
238
+ author = author.replace(/^[\s\u00A0\.\,\/\[\]\:]+/, '')
239
+ .replace(/[\s\u00A0\.\,\/\[\]\:]+$/, '')
240
+ .replace(/[\s\u00A0]+/, ' ');
241
+
242
+ if(useComma) {
243
+ // Add spaces between periods
244
+ author = author.replace(/\.([^ ])/, ". $1");
245
+
246
+ var splitNames = author.split(/[,،] ?/);
247
+ if(splitNames.length > 1) {
248
+ var lastName = splitNames[0];
249
+ var firstName = splitNames[1];
250
+ } else {
251
+ var lastName = author;
252
+ }
253
+ } else {
254
+ // Don't parse "Firstname Lastname [Country]" as "[Country], Firstname Lastname"
255
+ var spaceIndex = author.length;
256
+ do {
257
+ spaceIndex = author.lastIndexOf(" ", spaceIndex-1);
258
+ var lastName = author.substring(spaceIndex + 1);
259
+ var firstName = author.substring(0, spaceIndex);
260
+ } while (!Utilities.XRegExp('\\pL').test(lastName[0]) && spaceIndex > 0)
261
+ }
262
+
263
+ if(firstName && allCapsRe.test(firstName) &&
264
+ firstName.length < 4 &&
265
+ (firstName.length == 1 || lastName.toUpperCase() != lastName)) {
266
+ // first name is probably initials
267
+ var newFirstName = "";
268
+ for(var i=0; i<firstName.length; i++) {
269
+ newFirstName += " "+firstName[i]+".";
270
+ }
271
+ firstName = newFirstName.substr(1);
272
+ }
273
+
274
+ //add periods after all the initials
275
+ if(firstName) {
276
+ var names = firstName.replace(/^[\s\.]+/,'')
277
+ .replace(/[\s\,]+$/,'')
278
+ //remove spaces surronding any dashes
279
+ .replace(/\s*([\u002D\u00AD\u2010-\u2015\u2212\u2E3A\u2E3B])\s*/,'-')
280
+ .split(/(?:[\s\.]+|(?=-))/);
281
+ var newFirstName = '';
282
+ for(var i=0, n=names.length; i<n; i++) {
283
+ newFirstName += names[i];
284
+ if(initialRe.test(names[i])) newFirstName += '.';
285
+ newFirstName += ' ';
286
+ }
287
+ firstName = newFirstName.replace(/ -/g,'-').trim();
288
+ }
289
+
290
+ return {firstName:firstName, lastName:lastName, creatorType:type};
291
+ },
292
+
293
+ /**
294
+ * Removes leading and trailing whitespace from a string
295
+ * @type String
296
+ */
297
+ trim: function(/**String*/ s) {
298
+ if (typeof(s) != "string") {
299
+ throw new Error("trim: argument must be a string");
300
+ }
301
+
302
+ s = s.replace(/^\s+/, "");
303
+ return s.replace(/\s+$/, "");
304
+ },
305
+
306
+ /**
307
+ * Cleans whitespace off a string and replaces multiple spaces with one
308
+ * @type String
309
+ */
310
+ trimInternal: function(/**String*/ s) {
311
+ if (typeof(s) != "string") {
312
+ throw new Error("trimInternal: argument must be a string");
313
+ }
314
+
315
+ s = s.replace(/[\xA0\r\n\s]+/g, " ");
316
+ return this.trim(s);
317
+ },
318
+
319
+ /**
320
+ * Cleans any non-word non-parenthesis characters off the ends of a string
321
+ * @type String
322
+ */
323
+ superCleanString: function(/**String*/ x) {
324
+ if(typeof(x) != "string") {
325
+ throw new Error("superCleanString: argument must be a string");
326
+ }
327
+
328
+ var x = x.replace(/^[\x00-\x27\x29-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F\s]+/, "");
329
+ return x.replace(/[\x00-\x28\x2A-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F\s]+$/, "");
330
+ },
331
+
332
+ isHTTPURL: function (url, allowNoScheme = false) {
333
+ // From https://stackoverflow.com/a/3809435
334
+ var noSchemeRE = /^[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/;
335
+ return /^https?:\/\//.test(url)
336
+ || (allowNoScheme && !url.startsWith('mailto:') && noSchemeRE.test(url));
337
+ },
338
+
339
+ /**
340
+ * Cleans a http url string
341
+ * @param url {String}
342
+ * @params tryHttp {Boolean} Attempt prepending 'http://' to the url
343
+ * @returns {String}
344
+ */
345
+ cleanURL: function(url, tryHttp=false) {
346
+ url = url.trim();
347
+ if (!url) return false;
348
+
349
+ try {
350
+ return Services.io.newURI(url, null, null).spec; // Valid URI if succeeds
351
+ } catch (e) {
352
+ if (e instanceof Components.Exception
353
+ && e.result == Components.results.NS_ERROR_MALFORMED_URI
354
+ ) {
355
+ if (tryHttp && /\w\.\w/.test(url)) {
356
+ // Assume it's a URL missing "http://" part
357
+ try {
358
+ return Services.io.newURI('http://' + url, null, null).spec;
359
+ } catch (e) {}
360
+ }
361
+
362
+ Zotero.debug('cleanURL: Invalid URI: ' + url, 2);
363
+ return false;
364
+ }
365
+ throw e;
366
+ }
367
+ },
368
+
369
+ /**
370
+ * Eliminates HTML tags, replacing &lt;br&gt;s with newlines
371
+ * @type String
372
+ */
373
+ cleanTags: function(/**String*/ x) {
374
+ if(typeof(x) != "string") {
375
+ throw new Error("cleanTags: argument must be a string");
376
+ }
377
+
378
+ x = x.replace(/<br[^>]*>/gi, "\n");
379
+ x = x.replace(/<\/p>/gi, "\n\n");
380
+ return x.replace(/<[^>]+>/g, "");
381
+ },
382
+
383
+ extractIdentifiers: function (text) {
384
+ var identifiers = [];
385
+ var foundIDs = new Set(); // keep track of identifiers to avoid duplicates
386
+
387
+ // First look for DOIs
388
+ var ids = text.split(/[\s\u00A0]+/); // whitespace + non-breaking space
389
+ var doi;
390
+ for (let id of ids) {
391
+ if ((doi = Zotero.Utilities.cleanDOI(id)) && !foundIDs.has(doi)) {
392
+ identifiers.push({
393
+ DOI: doi
394
+ });
395
+ foundIDs.add(doi);
396
+ }
397
+ }
398
+
399
+ // Then try ISBNs
400
+ if (!identifiers.length) {
401
+ // First try replacing dashes
402
+ let ids = text.replace(/[\u002D\u00AD\u2010-\u2015\u2212]+/g, "") // hyphens and dashes
403
+ .toUpperCase();
404
+ let ISBN_RE = /(?:\D|^)(97[89]\d{10}|\d{9}[\dX])(?!\d)/g;
405
+ let isbn;
406
+ while (isbn = ISBN_RE.exec(ids)) {
407
+ isbn = Zotero.Utilities.cleanISBN(isbn[1]);
408
+ if (isbn && !foundIDs.has(isbn)) {
409
+ identifiers.push({
410
+ ISBN: isbn
411
+ });
412
+ foundIDs.add(isbn);
413
+ }
414
+ }
415
+
416
+ // Next try spaces
417
+ if (!identifiers.length) {
418
+ ids = ids.replace(/[ \u00A0]+/g, ""); // space + non-breaking space
419
+ while (isbn = ISBN_RE.exec(ids)) {
420
+ isbn = Zotero.Utilities.cleanISBN(isbn[1]);
421
+ if(isbn && !foundIDs.has(isbn)) {
422
+ identifiers.push({
423
+ ISBN: isbn
424
+ });
425
+ foundIDs.add(isbn);
426
+ }
427
+ }
428
+ }
429
+ }
430
+
431
+ // Next try arXiv
432
+ if (!identifiers.length) {
433
+ // arXiv identifiers are extracted without version number
434
+ // i.e. 0706.0044v1 is extracted as 0706.0044,
435
+ // because arXiv OAI API doesn't allow to access individual versions
436
+ let arXiv_RE = /((?:[^A-Za-z]|^)([\-A-Za-z\.]+\/\d{7})(?:(v[0-9]+)|)(?!\d))|((?:\D|^)(\d{4}\.\d{4,5})(?:(v[0-9]+)|)(?!\d))/g;
437
+ let m;
438
+ while ((m = arXiv_RE.exec(text))) {
439
+ let arXiv = m[2] || m[5];
440
+ if (arXiv && !foundIDs.has(arXiv)) {
441
+ identifiers.push({arXiv: arXiv});
442
+ foundIDs.add(arXiv);
443
+ }
444
+ }
445
+ }
446
+
447
+ // Next, try ADS Bibcodes
448
+ if (!identifiers.length) {
449
+ // regex as in the ADS Bibcode translator
450
+ let adsBibcode_RE = /\b(\d{4}\D\S{13}[A-Z.:])\b/g;
451
+ let adsBibcode;
452
+ while ((adsBibcode = adsBibcode_RE.exec(text)) && !foundIDs.has(adsBibcode)) {
453
+ identifiers.push({
454
+ adsBibcode: adsBibcode[1]
455
+ });
456
+ foundIDs.add(adsBibcode);
457
+ }
458
+ }
459
+
460
+ // Finally, try PMID
461
+ if (!identifiers.length) {
462
+ // PMID; right now, the longest PMIDs are 8 digits, so it doesn't seem like we'll
463
+ // need to discriminate for a fairly long time
464
+ let PMID_RE = /(^|\s|,|:)(\d{1,9})(?=\s|,|$)/g;
465
+ let pmid;
466
+ while ((pmid = PMID_RE.exec(text)) && !foundIDs.has(pmid)) {
467
+ identifiers.push({
468
+ PMID: pmid[2]
469
+ });
470
+ foundIDs.add(pmid);
471
+ }
472
+ }
473
+
474
+ return identifiers;
475
+ },
476
+
477
+ /**
478
+ * Strip info:doi prefix and any suffixes from a DOI
479
+ * @type String
480
+ */
481
+ cleanDOI: function(/**String**/ x) {
482
+ if(typeof(x) != "string") {
483
+ throw new Error("cleanDOI: argument must be a string");
484
+ }
485
+
486
+ var doi = x.match(/10(?:\.[0-9]{4,})?\/[^\s]*[^\s\.,]/);
487
+ return doi ? doi[0] : null;
488
+ },
489
+
490
+ /**
491
+ * Clean and validate ISBN.
492
+ * Return isbn if valid, otherwise return false
493
+ * @param {String} isbn
494
+ * @param {Boolean} [dontValidate=false] Do not validate check digit
495
+ * @return {String|Boolean} Valid ISBN or false
496
+ */
497
+ cleanISBN: function(isbnStr, dontValidate) {
498
+ isbnStr = isbnStr.toUpperCase()
499
+ .replace(/[\x2D\xAD\u2010-\u2015\u2043\u2212]+/g, ''); // Ignore dashes
500
+ var isbnRE = /\b(?:97[89]\s*(?:\d\s*){9}\d|(?:\d\s*){9}[\dX])\b/g,
501
+ isbnMatch;
502
+ while(isbnMatch = isbnRE.exec(isbnStr)) {
503
+ var isbn = isbnMatch[0].replace(/\s+/g, '');
504
+
505
+ if (dontValidate) {
506
+ return isbn;
507
+ }
508
+
509
+ if(isbn.length == 10) {
510
+ // Verify ISBN-10 checksum
511
+ var sum = 0;
512
+ for (var i = 0; i < 9; i++) {
513
+ sum += isbn[i] * (10-i);
514
+ }
515
+ //check digit might be 'X'
516
+ sum += (isbn[9] == 'X')? 10 : isbn[9]*1;
517
+
518
+ if (sum % 11 == 0) return isbn;
519
+ } else {
520
+ // Verify ISBN 13 checksum
521
+ var sum = 0;
522
+ for (var i = 0; i < 12; i+=2) sum += isbn[i]*1; //to make sure it's int
523
+ for (var i = 1; i < 12; i+=2) sum += isbn[i]*3;
524
+ sum += isbn[12]*1; //add the check digit
525
+
526
+ if (sum % 10 == 0 ) return isbn;
527
+ }
528
+
529
+ isbnRE.lastIndex = isbnMatch.index + 1; // Retry the same spot + 1
530
+ }
531
+
532
+ return false;
533
+ },
534
+
535
+ /*
536
+ * Convert ISBN 10 to ISBN 13
537
+ * @param {String} isbn ISBN 10 or ISBN 13
538
+ * cleanISBN
539
+ * @return {String} ISBN-13
540
+ */
541
+ toISBN13: function(isbnStr) {
542
+ var isbn;
543
+ if (!(isbn = Utilities.cleanISBN(isbnStr, true))) {
544
+ throw new Error('ISBN not found in "' + isbnStr + '"');
545
+ }
546
+
547
+ if (isbn.length == 13) {
548
+ isbn = isbn.substr(0,12); // Strip off check digit and re-calculate it
549
+ } else {
550
+ isbn = '978' + isbn.substr(0,9);
551
+ }
552
+
553
+ var sum = 0;
554
+ for (var i = 0; i < 12; i++) {
555
+ sum += isbn[i] * (i%2 ? 3 : 1);
556
+ }
557
+
558
+ var checkDigit = 10 - (sum % 10);
559
+ if (checkDigit == 10) checkDigit = 0;
560
+
561
+ return isbn + checkDigit;
562
+ },
563
+
564
+ /**
565
+ * Clean and validate ISSN.
566
+ * Return issn if valid, otherwise return false
567
+ */
568
+ cleanISSN: function(/**String*/ issnStr) {
569
+ issnStr = issnStr.toUpperCase()
570
+ .replace(/[\x2D\xAD\u2010-\u2015\u2043\u2212]+/g, ''); // Ignore dashes
571
+ var issnRE = /\b(?:\d\s*){7}[\dX]\b/g,
572
+ issnMatch;
573
+ while (issnMatch = issnRE.exec(issnStr)) {
574
+ var issn = issnMatch[0].replace(/\s+/g, '');
575
+
576
+ // Verify ISSN checksum
577
+ var sum = 0;
578
+ for (var i = 0; i < 7; i++) {
579
+ sum += issn[i] * (8-i);
580
+ }
581
+ //check digit might be 'X'
582
+ sum += (issn[7] == 'X')? 10 : issn[7]*1;
583
+
584
+ if (sum % 11 == 0) {
585
+ return issn.substring(0,4) + '-' + issn.substring(4);
586
+ }
587
+
588
+ issnRE.lastIndex = issnMatch.index + 1; // Retry same spot + 1
589
+ }
590
+
591
+ return false;
592
+ },
593
+
594
+ /**
595
+ * Convert plain text to HTML by replacing special characters and replacing newlines with BRs or
596
+ * P tags
597
+ * @param {String} str Plain text string
598
+ * @param {Boolean} singleNewlineIsParagraph Whether single newlines should be considered as
599
+ * paragraphs. If true, each newline is replaced with a P tag. If false, double newlines
600
+ * are replaced with P tags, while single newlines are replaced with BR tags.
601
+ * @type String
602
+ */
603
+ text2html: function (/**String**/ str, /**Boolean**/ singleNewlineIsParagraph) {
604
+ str = Utilities.htmlSpecialChars(str);
605
+
606
+ // \n => <p>
607
+ if (singleNewlineIsParagraph) {
608
+ str = '<p>'
609
+ + str.replace(/\n/g, '</p><p>')
610
+ .replace(/ /g, '&nbsp; ')
611
+ + '</p>';
612
+ }
613
+ // \n\n => <p>, \n => <br/>
614
+ else {
615
+ str = '<p>'
616
+ + str.replace(/\n\n/g, '</p><p>')
617
+ .replace(/\n/g, '<br/>')
618
+ .replace(/ /g, '&nbsp; ')
619
+ + '</p>';
620
+ }
621
+ return str.replace(/<p>\s*<\/p>/g, '<p>&nbsp;</p>');
622
+ },
623
+
624
+ /**
625
+ * Encode special XML/HTML characters
626
+ * Certain entities can be inserted manually:
627
+ * <ZOTEROBREAK/> => <br/>
628
+ * <ZOTEROHELLIP/> => &#8230;
629
+ *
630
+ * @param {String} str
631
+ * @return {String}
632
+ */
633
+ htmlSpecialChars: function(str) {
634
+ if (str && typeof str != 'string') {
635
+ Zotero.debug('#htmlSpecialChars: non-string arguments are deprecated. Update your code',
636
+ 1, undefined, true);
637
+ str = str.toString();
638
+ }
639
+
640
+ if (!str) return '';
641
+
642
+ return str
643
+ .replace(/&/g, '&amp;')
644
+ .replace(/"/g, '&quot;')
645
+ .replace(/'/g, '&apos;')
646
+ .replace(/</g, '&lt;')
647
+ .replace(/>/g, '&gt;')
648
+ .replace(/&lt;ZOTERO([^\/]+)\/&gt;/g, function (str, p1, offset, s) {
649
+ switch (p1) {
650
+ case 'BREAK':
651
+ return '<br/>';
652
+ case 'HELLIP':
653
+ return '&#8230;';
654
+ default:
655
+ return p1;
656
+ }
657
+ });
658
+ },
659
+
660
+ /**
661
+ * Decodes HTML entities within a string, returning plain text
662
+ * @type String
663
+ */
664
+ "unescapeHTML":new function() {
665
+ var nsIScriptableUnescapeHTML, node;
666
+
667
+ return function(/**String*/ str) {
668
+ // If no tags, no need to unescape
669
+ if(str.indexOf("<") === -1 && str.indexOf("&") === -1) return str;
670
+
671
+ if(Zotero.isFx && !Zotero.isBookmarklet) {
672
+ // Create a node and use the textContent property to do unescaping where
673
+ // possible, because this approach preserves line endings in the HTML
674
+ if(node === undefined) {
675
+ node = Utilities.Internal.getDOMDocument().createElement("div");
676
+ }
677
+
678
+ node.innerHTML = str;
679
+ return node.textContent.replace(/ {2,}/g, " ");
680
+ } else if(Zotero.isNode) {
681
+ let {JSDOM} = require('jsdom');
682
+ let document = (new JSDOM(str)).window.document;
683
+ return document.documentElement.textContent.replace(/ {2,}/g, " ");
684
+ } else {
685
+ if(!node) node = document.createElement("div");
686
+ node.innerHTML = str;
687
+ return ("textContent" in node ? node.textContent : node.innerText).replace(/ {2,}/g, " ");
688
+ }
689
+ };
690
+ },
691
+
692
+ /**
693
+ * Wrap URLs and DOIs in <a href=""> links in plain text
694
+ *
695
+ * Ignore URLs preceded by '>', just in case there are already links
696
+ * @type String
697
+ */
698
+ autoLink: function (/**String**/ str) {
699
+ // "http://www.google.com."
700
+ // "http://www.google.com. "
701
+ // "<http://www.google.com>" (and other characters, with or without a space after)
702
+ str = str.replace(/([^>])(https?:\/\/[^\s]+)([\."'>:\]\)](\s|$))/g, '$1<a href="$2">$2</a>$3');
703
+ // "http://www.google.com"
704
+ // "http://www.google.com "
705
+ str = str.replace(/([^">])(https?:\/\/[^\s]+)(\s|$)/g, '$1<a href="$2">$2</a>$3');
706
+
707
+ // DOI
708
+ str = str.replace(/(doi:[ ]*)(10\.[^\s]+[0-9a-zA-Z])/g, '$1<a href="http://dx.doi.org/$2">$2</a>');
709
+ return str;
710
+ },
711
+
712
+ /**
713
+ * Parses a text string for HTML/XUL markup and returns an array of parts. Currently only finds
714
+ * HTML links (&lt;a&gt; tags)
715
+ *
716
+ * @return {Array} An array of objects with the following form:<br>
717
+ * <pre> {
718
+ * type: 'text'|'link',
719
+ * text: "text content",
720
+ * [ attributes: { key1: val [ , key2: val, ...] }
721
+ * }</pre>
722
+ */
723
+ parseMarkup: function(/**String*/ str) {
724
+ var parts = [];
725
+ var splits = str.split(/(<a [^>]+>[^<]*<\/a>)/);
726
+
727
+ for(var i=0; i<splits.length; i++) {
728
+ // Link
729
+ if (splits[i].indexOf('<a ') == 0) {
730
+ var matches = splits[i].match(/<a ([^>]+)>([^<]*)<\/a>/);
731
+ if (matches) {
732
+ // Attribute pairs
733
+ var attributes = {};
734
+ var pairs = matches[1].match(/([^ =]+)="([^"]+")/g);
735
+ for(var j=0; j<pairs.length; j++) {
736
+ var keyVal = pairs[j].split(/=/);
737
+ attributes[keyVal[0]] = keyVal[1].substr(1, keyVal[1].length - 2);
738
+ }
739
+
740
+ parts.push({
741
+ type: 'link',
742
+ text: matches[2],
743
+ attributes: attributes
744
+ });
745
+ continue;
746
+ }
747
+ }
748
+
749
+ parts.push({
750
+ type: 'text',
751
+ text: splits[i]
752
+ });
753
+ }
754
+
755
+ return parts;
756
+ },
757
+
758
+ /**
759
+ * Calculates the Levenshtein distance between two strings
760
+ * @type Number
761
+ */
762
+ levenshtein: function (/**String*/ a, /**String**/ b) {
763
+ var aLen = a.length;
764
+ var bLen = b.length;
765
+
766
+ var arr = new Array(aLen+1);
767
+ var i, j, cost;
768
+
769
+ for (i = 0; i <= aLen; i++) {
770
+ arr[i] = new Array(bLen);
771
+ arr[i][0] = i;
772
+ }
773
+
774
+ for (j = 0; j <= bLen; j++) {
775
+ arr[0][j] = j;
776
+ }
777
+
778
+ for (i = 1; i <= aLen; i++) {
779
+ for (j = 1; j <= bLen; j++) {
780
+ cost = (a[i-1] == b[j-1]) ? 0 : 1;
781
+ arr[i][j] = Math.min(arr[i-1][j] + 1, Math.min(arr[i][j-1] + 1, arr[i-1][j-1] + cost));
782
+ }
783
+ }
784
+
785
+ return arr[aLen][bLen];
786
+ },
787
+
788
+ /**
789
+ * Test if an object is empty
790
+ *
791
+ * @param {Object} obj
792
+ * @type Boolean
793
+ */
794
+ isEmpty: function (obj) {
795
+ for (var i in obj) {
796
+ return false;
797
+ }
798
+ return true;
799
+ },
800
+
801
+ /**
802
+ * Compares an array with another and returns an array with
803
+ * the values from array1 that don't exist in array2
804
+ *
805
+ * @param {Array} array1
806
+ * @param {Array} array2
807
+ * @param {Boolean} useIndex If true, return an array containing just
808
+ * the index of array2's elements;
809
+ * otherwise return the values
810
+ */
811
+ arrayDiff: function(array1, array2, useIndex) {
812
+ if (!Array.isArray(array1)) {
813
+ throw new Error("array1 is not an array (" + array1 + ")");
814
+ }
815
+ if (!Array.isArray(array2)) {
816
+ throw new Error("array2 is not an array (" + array2 + ")");
817
+ }
818
+
819
+ var val, pos, vals = [];
820
+ for (var i=0; i<array1.length; i++) {
821
+ val = array1[i];
822
+ pos = array2.indexOf(val);
823
+ if (pos == -1) {
824
+ vals.push(useIndex ? pos : val);
825
+ }
826
+ }
827
+ return vals;
828
+ },
829
+
830
+
831
+ /**
832
+ * Determine whether two arrays are identical
833
+ *
834
+ * Modified from http://stackoverflow.com/a/14853974
835
+ *
836
+ * @return {Boolean}
837
+ */
838
+ arrayEquals: function (array1, array2) {
839
+ // If either array is a falsy value, return
840
+ if (!array1 || !array2)
841
+ return false;
842
+
843
+ // Compare lengths - can save a lot of time
844
+ if (array1.length != array2.length)
845
+ return false;
846
+
847
+ for (var i = 0, l=array1.length; i < l; i++) {
848
+ // Check if we have nested arrays
849
+ if (array1[i] instanceof Array && array2[i] instanceof Array) {
850
+ // Recurse into the nested arrays
851
+ if (!this.arrayEquals(array1[i], array2[i])) {
852
+ return false;
853
+ }
854
+ }
855
+ else if (array1[i] != array2[i]) {
856
+ // Warning - two different object instances will never be equal: {x:20} != {x:20}
857
+ return false;
858
+ }
859
+ }
860
+ return true;
861
+ },
862
+
863
+
864
+ /**
865
+ * Return new array with values shuffled
866
+ *
867
+ * From http://stackoverflow.com/a/6274398
868
+ *
869
+ * @param {Array} arr
870
+ * @return {Array}
871
+ */
872
+ arrayShuffle: function (array) {
873
+ var counter = array.length, temp, index;
874
+
875
+ // While there are elements in the array
876
+ while (counter--) {
877
+ // Pick a random index
878
+ index = (Math.random() * counter) | 0;
879
+
880
+ // And swap the last element with it
881
+ temp = array[counter];
882
+ array[counter] = array[index];
883
+ array[index] = temp;
884
+ }
885
+
886
+ return array;
887
+ },
888
+
889
+
890
+ /**
891
+ * Return new array with duplicate values removed
892
+ *
893
+ * @param {Array} array
894
+ * @return {Array}
895
+ */
896
+ arrayUnique: function (arr) {
897
+ return [...new Set(arr)];
898
+ },
899
+
900
+ /**
901
+ * Generate a random integer between min and max inclusive
902
+ *
903
+ * @param {Integer} min
904
+ * @param {Integer} max
905
+ * @return {Integer}
906
+ */
907
+ rand: function (min, max) {
908
+ return Math.floor(Math.random() * (max - min + 1)) + min;
909
+ },
910
+
911
+ /**
912
+ * Parse a page range
913
+ *
914
+ * @param {String} Page range to parse
915
+ * @return {Integer[]} Start and end pages
916
+ */
917
+ getPageRange: function(pages) {
918
+ const pageRangeRegexp = /^\s*([0-9]+) ?[-\u2013] ?([0-9]+)\s*$/
919
+
920
+ var pageNumbers;
921
+ var m = pageRangeRegexp.exec(pages);
922
+ if(m) {
923
+ // A page range
924
+ pageNumbers = [m[1], m[2]];
925
+ } else {
926
+ // Assume start and end are the same
927
+ pageNumbers = [pages, pages];
928
+ }
929
+ return pageNumbers;
930
+ },
931
+
932
+ /**
933
+ * Pads a number or other string with a given string on the left
934
+ *
935
+ * @param {String} string String to pad
936
+ * @param {String} pad String to use as padding
937
+ * @length {Integer} length Length of new padded string
938
+ * @type String
939
+ */
940
+ lpad: function(string, pad, length) {
941
+ string = string ? string + '' : '';
942
+ while(string.length < length) {
943
+ string = pad + string;
944
+ }
945
+ return string;
946
+ },
947
+
948
+ /**
949
+ * Shorten and add an ellipsis to a string if necessary
950
+ *
951
+ * @param {String} str
952
+ * @param {Integer} len
953
+ * @param {Boolean} [wordBoundary=false]
954
+ * @param {Boolean} [countChars=false]
955
+ */
956
+ ellipsize: function (str, len, wordBoundary = false, countChars) {
957
+ if (!len) {
958
+ throw ("Length not specified in Utilities.ellipsize()");
959
+ }
960
+ if (str.length <= len) {
961
+ return str;
962
+ }
963
+ var origLen = str.length;
964
+ let radius = Math.min(len, 5);
965
+ if (wordBoundary) {
966
+ let min = len - radius;
967
+ // If next character is a space, include that so we stop at len
968
+ if (str.charAt(len).match(/\s/)) {
969
+ radius++;
970
+ }
971
+ // Remove trailing characters and spaces, up to radius
972
+ str = str.substr(0, min) + str.substr(min, radius).replace(/\W*\s\S*$/, "");
973
+ }
974
+ else {
975
+ str = str.substr(0, len)
976
+ }
977
+ return str + '\u2026' + (countChars ? ' (' + origLen + ' chars)' : '');
978
+ },
979
+
980
+
981
+ /**
982
+ * Return the proper plural form of a string
983
+ *
984
+ * For now, this is only used for debug output in English.
985
+ *
986
+ * @param {Integer} num
987
+ * @param {String[]|String} forms - If an array, an array of plural forms (e.g., ['object', 'objects']);
988
+ * currently only the two English forms are supported, for 1 and 0/many. If a single string,
989
+ * 's' is added automatically for 0/many.
990
+ * @return {String}
991
+ */
992
+ pluralize: function (num, forms) {
993
+ if (typeof forms == 'string') {
994
+ forms = [forms, forms + 's'];
995
+ }
996
+ return num == 1 ? forms[0] : forms[1];
997
+ },
998
+
999
+
1000
+ /**
1001
+ * Port of PHP's number_format()
1002
+ *
1003
+ * MIT Licensed
1004
+ *
1005
+ * From http://kevin.vanzonneveld.net
1006
+ * + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
1007
+ * + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
1008
+ * + bugfix by: Michael White (http://getsprink.com)
1009
+ * + bugfix by: Benjamin Lupton
1010
+ * + bugfix by: Allan Jensen (http://www.winternet.no)
1011
+ * + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
1012
+ * + bugfix by: Howard Yeend
1013
+ * * example 1: number_format(1234.5678, 2, '.', '');
1014
+ * * returns 1: 1234.57
1015
+ */
1016
+ numberFormat: function (number, decimals, dec_point, thousands_sep) {
1017
+ var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
1018
+ var d = dec_point == undefined ? "." : dec_point;
1019
+ var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
1020
+ var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
1021
+
1022
+ return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
1023
+ },
1024
+
1025
+ /**
1026
+ * Cleans a title, converting it to title case and replacing " :" with ":"
1027
+ *
1028
+ * @param {String} string
1029
+ * @param {Boolean} force Forces title case conversion, even if the capitalizeTitles pref is off
1030
+ * @type String
1031
+ */
1032
+ capitalizeTitle: function(string, force) {
1033
+ const skipWords = ["but", "or", "yet", "so", "for", "and", "nor", "a", "an",
1034
+ "the", "at", "by", "from", "in", "into", "of", "on", "to", "with", "up",
1035
+ "down", "as"];
1036
+
1037
+ // this may only match a single character
1038
+ const delimiterRegexp = /([ \/\u002D\u00AD\u2010-\u2015\u2212\u2E3A\u2E3B])/;
1039
+
1040
+ string = this.trimInternal(string);
1041
+ string = string.replace(/ : /g, ": ");
1042
+ if (Zotero.Prefs && !Zotero.Prefs.get('capitalizeTitles') && !force) return string;
1043
+ if (!string) return "";
1044
+
1045
+ // split words
1046
+ var words = string.split(delimiterRegexp);
1047
+ var isUpperCase = string.toUpperCase() == string;
1048
+
1049
+ var newString = "";
1050
+ var delimiterOffset = words[0].length;
1051
+ var lastWordIndex = words.length-1;
1052
+ var previousWordIndex = -1;
1053
+ for(var i=0; i<=lastWordIndex; i++) {
1054
+ // only do manipulation if not a delimiter character
1055
+ if(words[i].length != 0 && (words[i].length != 1 || !delimiterRegexp.test(words[i]))) {
1056
+ var upperCaseVariant = words[i].toUpperCase();
1057
+ var lowerCaseVariant = words[i].toLowerCase();
1058
+
1059
+ // only use if word does not already possess some capitalization
1060
+ if(isUpperCase || words[i] == lowerCaseVariant) {
1061
+ if(
1062
+ // a skip word
1063
+ skipWords.indexOf(lowerCaseVariant.replace(/[^a-zA-Z]+/, "")) != -1
1064
+ // not first or last word
1065
+ && i != 0 && i != lastWordIndex
1066
+ // does not follow a colon
1067
+ && (previousWordIndex == -1 || words[previousWordIndex][words[previousWordIndex].length-1].search(/[:\?!]/)==-1)
1068
+ ) {
1069
+ words[i] = lowerCaseVariant;
1070
+ } else {
1071
+ // this is not a skip word or comes after a colon;
1072
+ // we must capitalize
1073
+ // handle punctuation in the beginning, including multiple, as in "¿Qué pasa?"
1074
+ var punct = words[i].match(/^[\'\"¡¿“‘„«\s]+/);
1075
+ punct = punct ? punct[0].length+1 : 1;
1076
+ words[i] = words[i].length ? words[i].substr(0, punct).toUpperCase() +
1077
+ words[i].substr(punct).toLowerCase() : words[i];
1078
+ }
1079
+ }
1080
+
1081
+ previousWordIndex = i;
1082
+ }
1083
+
1084
+ newString += words[i];
1085
+ }
1086
+
1087
+ return newString;
1088
+ },
1089
+
1090
+ capitalize: function (str) {
1091
+ if (typeof str != 'string') throw new Error("Argument must be a string");
1092
+ if (!str) return str; // Empty string
1093
+ return str[0].toUpperCase() + str.substr(1);
1094
+ },
1095
+
1096
+ /**
1097
+ * Replaces accented characters in a string with ASCII equivalents
1098
+ *
1099
+ * @param {String} str
1100
+ * @param {Boolean} [lowercaseOnly] Limit conversions to lowercase characters
1101
+ * (for improved performance on lowercase input)
1102
+ * @return {String}
1103
+ *
1104
+ * From http://lehelk.com/2011/05/06/script-to-remove-diacritics/
1105
+ */
1106
+ removeDiacritics: function (str, lowercaseOnly) {
1107
+ // Short-circuit on the most basic input
1108
+ if (/^[a-zA-Z0-9_-]*$/.test(str)) return str;
1109
+
1110
+ var map = this._diacriticsRemovalMap.lowercase;
1111
+ for (var i=0, len=map.length; i<len; i++) {
1112
+ str = str.replace(map[i].letters, map[i].base);
1113
+ }
1114
+
1115
+ if (!lowercaseOnly) {
1116
+ var map = this._diacriticsRemovalMap.uppercase;
1117
+ for (var i=0, len=map.length; i<len; i++) {
1118
+ str = str.replace(map[i].letters, map[i].base);
1119
+ }
1120
+ }
1121
+
1122
+ return str;
1123
+ },
1124
+
1125
+ "_diacriticsRemovalMap": {
1126
+ uppercase: [
1127
+ {'base':'A', 'letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
1128
+ {'base':'AA','letters':/[\uA732]/g},
1129
+ {'base':'AE','letters':/[\u00C6\u01FC\u01E2]/g},
1130
+ {'base':'AO','letters':/[\uA734]/g},
1131
+ {'base':'AU','letters':/[\uA736]/g},
1132
+ {'base':'AV','letters':/[\uA738\uA73A]/g},
1133
+ {'base':'AY','letters':/[\uA73C]/g},
1134
+ {'base':'B', 'letters':/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},
1135
+ {'base':'C', 'letters':/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},
1136
+ {'base':'D', 'letters':/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},
1137
+ {'base':'DZ','letters':/[\u01F1\u01C4]/g},
1138
+ {'base':'Dz','letters':/[\u01F2\u01C5]/g},
1139
+ {'base':'E', 'letters':/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},
1140
+ {'base':'F', 'letters':/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},
1141
+ {'base':'G', 'letters':/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},
1142
+ {'base':'H', 'letters':/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},
1143
+ {'base':'I', 'letters':/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},
1144
+ {'base':'J', 'letters':/[\u004A\u24BF\uFF2A\u0134\u0248]/g},
1145
+ {'base':'K', 'letters':/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},
1146
+ {'base':'L', 'letters':/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},
1147
+ {'base':'LJ','letters':/[\u01C7]/g},
1148
+ {'base':'Lj','letters':/[\u01C8]/g},
1149
+ {'base':'M', 'letters':/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},
1150
+ {'base':'N', 'letters':/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},
1151
+ {'base':'NJ','letters':/[\u01CA]/g},
1152
+ {'base':'Nj','letters':/[\u01CB]/g},
1153
+ {'base':'O', 'letters':/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},
1154
+ {'base':'OE','letters':/[\u0152]/g},
1155
+ {'base':'OI','letters':/[\u01A2]/g},
1156
+ {'base':'OO','letters':/[\uA74E]/g},
1157
+ {'base':'OU','letters':/[\u0222]/g},
1158
+ {'base':'P', 'letters':/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},
1159
+ {'base':'Q', 'letters':/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},
1160
+ {'base':'R', 'letters':/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},
1161
+ {'base':'S', 'letters':/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},
1162
+ {'base':'T', 'letters':/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},
1163
+ {'base':'TZ','letters':/[\uA728]/g},
1164
+ {'base':'U', 'letters':/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},
1165
+ {'base':'V', 'letters':/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},
1166
+ {'base':'VY','letters':/[\uA760]/g},
1167
+ {'base':'W', 'letters':/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},
1168
+ {'base':'X', 'letters':/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},
1169
+ {'base':'Y', 'letters':/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},
1170
+ {'base':'Z', 'letters':/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},
1171
+ ],
1172
+
1173
+ lowercase: [
1174
+ {'base':'a', 'letters':/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},
1175
+ {'base':'aa','letters':/[\uA733]/g},
1176
+ {'base':'ae','letters':/[\u00E6\u01FD\u01E3]/g},
1177
+ {'base':'ao','letters':/[\uA735]/g},
1178
+ {'base':'au','letters':/[\uA737]/g},
1179
+ {'base':'av','letters':/[\uA739\uA73B]/g},
1180
+ {'base':'ay','letters':/[\uA73D]/g},
1181
+ {'base':'b', 'letters':/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},
1182
+ {'base':'c', 'letters':/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},
1183
+ {'base':'d', 'letters':/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},
1184
+ {'base':'dz','letters':/[\u01F3\u01C6]/g},
1185
+ {'base':'e', 'letters':/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},
1186
+ {'base':'f', 'letters':/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},
1187
+ {'base':'g', 'letters':/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},
1188
+ {'base':'h', 'letters':/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},
1189
+ {'base':'hv','letters':/[\u0195]/g},
1190
+ {'base':'i', 'letters':/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},
1191
+ {'base':'j', 'letters':/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},
1192
+ {'base':'k', 'letters':/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},
1193
+ {'base':'l', 'letters':/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},
1194
+ {'base':'lj','letters':/[\u01C9]/g},
1195
+ {'base':'m', 'letters':/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},
1196
+ {'base':'n', 'letters':/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},
1197
+ {'base':'nj','letters':/[\u01CC]/g},
1198
+ {'base':'o', 'letters':/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},
1199
+ {'base':'oe','letters':/[\u0153]/g},
1200
+ {'base':'oi','letters':/[\u01A3]/g},
1201
+ {'base':'ou','letters':/[\u0223]/g},
1202
+ {'base':'oo','letters':/[\uA74F]/g},
1203
+ {'base':'p','letters':/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},
1204
+ {'base':'q','letters':/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},
1205
+ {'base':'r','letters':/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},
1206
+ {'base':'s','letters':/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},
1207
+ {'base':'t','letters':/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},
1208
+ {'base':'tz','letters':/[\uA729]/g},
1209
+ {'base':'u','letters':/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},
1210
+ {'base':'v','letters':/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},
1211
+ {'base':'vy','letters':/[\uA761]/g},
1212
+ {'base':'w','letters':/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},
1213
+ {'base':'x','letters':/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},
1214
+ {'base':'y','letters':/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},
1215
+ {'base':'z','letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}
1216
+ ]
1217
+ },
1218
+
1219
+ /**
1220
+ * Performs a deep copy of a JavaScript object
1221
+ * @param {Object} obj
1222
+ * @return {Object}
1223
+ */
1224
+ deepCopy: function(obj) {
1225
+ var obj2 = (Array.isArray(obj) ? [] : {});
1226
+ for(var i in obj) {
1227
+ if(!obj.hasOwnProperty(i)) continue;
1228
+
1229
+ if(typeof obj[i] === "object" && obj[i] !== null) {
1230
+ obj2[i] = Utilities.deepCopy(obj[i]);
1231
+ } else {
1232
+ obj2[i] = obj[i];
1233
+ }
1234
+ }
1235
+ return obj2;
1236
+ },
1237
+
1238
+ /**
1239
+ * Find valid creator types for a given item type
1240
+ *
1241
+ * @param {String} type Item type
1242
+ * @return {String[]} Creator types
1243
+ */
1244
+ getCreatorsForType: function(type) {
1245
+ if(type === "attachment" || type === "note") return [];
1246
+ var types = Zotero.CreatorTypes.getTypesForItemType(Zotero.ItemTypes.getID(type));
1247
+ var cleanTypes = new Array();
1248
+ for(var i=0; i<types.length; i++) {
1249
+ cleanTypes.push(types[i].name);
1250
+ }
1251
+ return cleanTypes;
1252
+ },
1253
+
1254
+ /**
1255
+ * Determine whether a given field is valid for a given item type
1256
+ *
1257
+ * @param {String} field Field name
1258
+ * @param {String} type Item type
1259
+ * @type Boolean
1260
+ */
1261
+ fieldIsValidForType: function(field, type) {
1262
+ return Zotero.ItemFields.isValidForType(field, Zotero.ItemTypes.getID(type));
1263
+ },
1264
+
1265
+ /**
1266
+ * Gets a creator type name, localized to the current locale
1267
+ *
1268
+ * @param {String} type Creator type
1269
+ * @param {String} Localized creator type
1270
+ * @type Boolean
1271
+ */
1272
+ getLocalizedCreatorType: function(type) {
1273
+ try {
1274
+ return Zotero.CreatorTypes.getLocalizedString(type);
1275
+ } catch(e) {
1276
+ return false;
1277
+ }
1278
+ },
1279
+
1280
+ /**
1281
+ * Escapes metacharacters in a literal so that it may be used in a regular expression
1282
+ */
1283
+ quotemeta: function(literal) {
1284
+ if(typeof literal !== "string") {
1285
+ throw new Error("Argument "+literal+" must be a string in Utilities.quotemeta()");
1286
+ }
1287
+ const metaRegexp = /[-[\]{}()*+?.\\^$|,#\s]/g;
1288
+ return literal.replace(metaRegexp, "\\$&");
1289
+ },
1290
+
1291
+ /**
1292
+ * Evaluate an XPath
1293
+ *
1294
+ * @param {element|element[]} elements The element(s) to use as the context for the XPath
1295
+ * @param {String} xpath The XPath expression
1296
+ * @param {Object} [namespaces] An object whose keys represent namespace prefixes, and whose
1297
+ * values represent their URIs
1298
+ * @return {element[]} DOM elements matching XPath
1299
+ */
1300
+ xpath: function(elements, xpath, namespaces) {
1301
+ var nsResolver = null;
1302
+ if(namespaces) {
1303
+ nsResolver = function(prefix) {
1304
+ return namespaces[prefix] || null;
1305
+ };
1306
+ }
1307
+
1308
+ if(!("length" in elements)) elements = [elements];
1309
+
1310
+ var results = [];
1311
+ for(var i=0, n=elements.length; i<n; i++) {
1312
+ // For some reason, if elements is wrapped by an object
1313
+ // Xray, we won't be able to unwrap the DOMWrapper around
1314
+ // the element. So waive the object Xray.
1315
+ var maybeWrappedEl = elements.wrappedJSObject ? elements.wrappedJSObject[i] : elements[i];
1316
+
1317
+ // Firefox 5 hack, so we will preserve Fx5DOMWrappers
1318
+ var isWrapped = Zotero.Translate.DOMWrapper && Zotero.Translate.DOMWrapper.isWrapped(maybeWrappedEl);
1319
+ var element = isWrapped ? Zotero.Translate.DOMWrapper.unwrap(maybeWrappedEl) : maybeWrappedEl;
1320
+
1321
+ // We waived the object Xray above, which will waive the
1322
+ // DOM Xray, so make sure we have a DOM Xray wrapper.
1323
+ if(Zotero.isFx) {
1324
+ element = new XPCNativeWrapper(element);
1325
+ }
1326
+
1327
+ if(element.ownerDocument) {
1328
+ var rootDoc = element.ownerDocument;
1329
+ } else if(element.documentElement) {
1330
+ var rootDoc = element;
1331
+ } else if(Zotero.isIE && element.documentElement === null) {
1332
+ // IE: documentElement may be null if there is a parse error. In this
1333
+ // case, we don't match anything to mimic what would happen with DOMParser
1334
+ continue;
1335
+ } else {
1336
+ throw new Error("First argument must be either element(s) or document(s) in Utilities.xpath(elements, '"+xpath+"')");
1337
+ }
1338
+
1339
+ if(!Zotero.isIE || "evaluate" in rootDoc) {
1340
+ try {
1341
+ // This may result in a deprecation warning in the console due to
1342
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=674437
1343
+ var xpathObject = rootDoc.evaluate(xpath, element, nsResolver, 5 /*ORDERED_NODE_ITERATOR_TYPE*/, null);
1344
+ } catch(e) {
1345
+ // rethrow so that we get a stack
1346
+ throw new Error(e.name+": "+e.message);
1347
+ }
1348
+
1349
+ var newEl;
1350
+ while(newEl = xpathObject.iterateNext()) {
1351
+ // Firefox 5 hack
1352
+ results.push(isWrapped ? Zotero.Translate.DOMWrapper.wrapIn(newEl, maybeWrappedEl) : newEl);
1353
+ }
1354
+ } else if("selectNodes" in element) {
1355
+ // We use JavaScript-XPath in IE for HTML documents, but with an XML
1356
+ // document, we need to use selectNodes
1357
+ if(namespaces) {
1358
+ var ieNamespaces = [];
1359
+ for(var j in namespaces) {
1360
+ if(!j) continue;
1361
+ ieNamespaces.push('xmlns:'+j+'="'+Utilities.htmlSpecialChars(namespaces[j])+'"');
1362
+ }
1363
+ rootDoc.setProperty("SelectionNamespaces", ieNamespaces.join(" "));
1364
+ }
1365
+ var nodes = element.selectNodes(xpath);
1366
+ for(var j=0; j<nodes.length; j++) {
1367
+ results.push(nodes[j]);
1368
+ }
1369
+ } else {
1370
+ throw new Error("XPath functionality not available");
1371
+ }
1372
+ }
1373
+
1374
+ return results;
1375
+ },
1376
+
1377
+ /**
1378
+ * Generates a string from the content of nodes matching a given XPath
1379
+ *
1380
+ * @param {element} node The node representing the document and context
1381
+ * @param {String} xpath The XPath expression
1382
+ * @param {Object} [namespaces] An object whose keys represent namespace prefixes, and whose
1383
+ * values represent their URIs
1384
+ * @param {String} [delimiter] The string with which to join multiple matching nodes
1385
+ * @return {String|null} DOM elements matching XPath, or null if no elements exist
1386
+ */
1387
+ xpathText: function(node, xpath, namespaces, delimiter) {
1388
+ var elements = Utilities.xpath(node, xpath, namespaces);
1389
+ if(!elements.length) return null;
1390
+
1391
+ var strings = new Array(elements.length);
1392
+ for(var i=0, n=elements.length; i<n; i++) {
1393
+ var el = elements[i];
1394
+ if(el.wrappedJSObject) el = el.wrappedJSObject;
1395
+ if(Zotero.Translate.DOMWrapper) el = Zotero.Translate.DOMWrapper.unwrap(el);
1396
+ strings[i] =
1397
+ (el.nodeType === 2 /*ATTRIBUTE_NODE*/ && "value" in el) ? el.value
1398
+ : "textContent" in el ? el.textContent
1399
+ : "innerText" in el ? el.innerText
1400
+ : "text" in el ? el.text
1401
+ : el.nodeValue;
1402
+ }
1403
+
1404
+ return strings.join(delimiter !== undefined ? delimiter : ", ");
1405
+ },
1406
+
1407
+
1408
+ /**
1409
+ * Generate a random string of length 'len' (defaults to 8)
1410
+ **/
1411
+ randomString: function(len, chars) {
1412
+ if (!chars) {
1413
+ chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
1414
+ }
1415
+ if (!len) {
1416
+ len = 8;
1417
+ }
1418
+ var randomstring = '';
1419
+ for (var i=0; i<len; i++) {
1420
+ var rnum = Math.floor(Math.random() * chars.length);
1421
+ randomstring += chars.substring(rnum,rnum+1);
1422
+ }
1423
+ return randomstring;
1424
+ },
1425
+
1426
+ /**
1427
+ * PHP var_dump equivalent for JS
1428
+ *
1429
+ * Adapted from http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html
1430
+ */
1431
+ varDump: function(obj,level,maxLevel,parentObjects,path) {
1432
+ // Simple dump
1433
+ var type = typeof obj;
1434
+ if (type == 'number' || type == 'undefined' || type == 'boolean' || obj === null) {
1435
+ if (!level) {
1436
+ // When dumping these directly, make sure to distinguish them from regular
1437
+ // strings as output by Zotero.debug (i.e. no quotes)
1438
+ return '===>' + obj + '<=== (' + type + ')';
1439
+ }
1440
+ else {
1441
+ return '' + obj;
1442
+ }
1443
+ }
1444
+ else if (type == 'string' || typeof obj.toJSON == 'function') {
1445
+ return JSON.stringify(obj, false, ' ');
1446
+ }
1447
+ else if (type == 'symbol') {
1448
+ return obj.toString();
1449
+ }
1450
+ else if (type == 'function') {
1451
+ var funcStr = ('' + obj).trim();
1452
+ if (!level) {
1453
+ // Dump function contents as well if only dumping function
1454
+ return funcStr;
1455
+ }
1456
+
1457
+ // Display [native code] label for native functions, but make it one line
1458
+ if (/^[^{]+{\s*\[native code\]\s*}$/i.test(funcStr)) {
1459
+ return funcStr.replace(/\s*(\[native code\])\s*/i, ' $1 ');
1460
+ }
1461
+
1462
+ // For non-native functions, display an ellipsis
1463
+ return ('' + obj).replace(/{[\s\S]*}/, '{...}');
1464
+ }
1465
+ else if (type != 'object') {
1466
+ return '<<Unknown type: ' + type + '>> ' + obj;
1467
+ }
1468
+
1469
+ // Don't descend into global object cache for data objects
1470
+ if (Zotero.isClient && typeof obj == 'object' && obj instanceof Zotero.DataObject) {
1471
+ maxLevel = 1;
1472
+ }
1473
+
1474
+ // More complex dump with indentation for objects
1475
+ if (level === undefined) {
1476
+ level = 0;
1477
+ }
1478
+
1479
+ if (maxLevel === undefined) {
1480
+ maxLevel = 5;
1481
+ }
1482
+
1483
+ var objType = Object.prototype.toString.call(obj);
1484
+
1485
+ if (level > maxLevel) {
1486
+ return objType + " <<Maximum depth reached>>";
1487
+ }
1488
+
1489
+ // The padding given at the beginning of the line.
1490
+ var level_padding = "";
1491
+ for (var j=0; j<level+1; j++) {
1492
+ level_padding += " ";
1493
+ }
1494
+
1495
+ //Special handling for Error or Exception
1496
+ var isException = Zotero.isFx && !Zotero.isBookmarklet && obj instanceof Components.interfaces.nsIException;
1497
+ var isError = obj instanceof Error;
1498
+ if (!isException && !isError && obj.message !== undefined && obj.stack !== undefined) {
1499
+ isError = true;
1500
+ }
1501
+
1502
+ if (isError || isException) {
1503
+ var header = '';
1504
+ if (isError) {
1505
+ header = (obj.constructor && obj.constructor.name) ? obj.constructor.name : 'Error';
1506
+ } else {
1507
+ header = (obj.name ? obj.name + ' ' : '') + 'Exception';
1508
+ }
1509
+
1510
+ let msg = (obj.message ? ('' + obj.message).replace(/^/gm, level_padding).trim() : '');
1511
+ if (obj.stack) {
1512
+ let stack = obj.stack.trim().replace(/^(?=.)/gm, level_padding);
1513
+ if (Utilities.Internal) {
1514
+ stack = Utilities.Internal.filterStack(stack);
1515
+ }
1516
+
1517
+ msg += '\n\n';
1518
+
1519
+ // At least with Zotero.HTTP.UnexpectedStatusException, the stack contains "Error:"
1520
+ // and the message in addition to the trace. I'm not sure what's causing that
1521
+ // (Bluebird?), but fix it here.
1522
+ if (stack.startsWith('Error:')) {
1523
+ msg += stack.replace('Error: ' + obj.message + '\n', '');
1524
+ }
1525
+ else {
1526
+ msg += stack;
1527
+ }
1528
+ }
1529
+
1530
+ return header + ': ' + msg;
1531
+ }
1532
+
1533
+ // Only dump single level for Node objects (including document)
1534
+ if (Zotero.isFx && !Zotero.isBookmarklet) {
1535
+ if (Zotero.platformMajorVersion > 60) {
1536
+ if (obj instanceof Node || obj instanceof Window) {
1537
+ level = maxLevel;
1538
+ }
1539
+ }
1540
+ else if (obj instanceof Components.interfaces.nsIDOMNode
1541
+ || obj instanceof Components.interfaces.nsIDOMWindow) {
1542
+ level = maxLevel;
1543
+ }
1544
+ }
1545
+ // Do the same for cross-context Node and Window objects
1546
+ if (obj.hasOwnProperty('nodeType') || objType === '[object Window]') {
1547
+ level = maxLevel;
1548
+ }
1549
+
1550
+ // Recursion checking
1551
+ if(!parentObjects) {
1552
+ parentObjects = [obj];
1553
+ path = ['ROOT'];
1554
+ }
1555
+
1556
+ var dumpedText;
1557
+ var rawProps = false;
1558
+ var isArray = objType == '[object Array]';
1559
+ var dumpKey = key => (typeof key == 'symbol'
1560
+ ? key.toString()
1561
+ : JSON.stringify(key));
1562
+ if (isArray) {
1563
+ dumpedText = '[';
1564
+ }
1565
+ else if (objType == '[object Set]') {
1566
+ dumpedText = 'Set {';
1567
+ obj = Array.from(obj);
1568
+ }
1569
+ else if (objType == '[object Map]') {
1570
+ dumpedText = 'Map {';
1571
+ rawProps = true;
1572
+ let newObj = {};
1573
+ for (let [key, value] of obj.entries()) {
1574
+ newObj[dumpKey(key)] = value;
1575
+ }
1576
+ obj = newObj;
1577
+ }
1578
+ else if (objType == '[object Object]') {
1579
+ dumpedText = '{';
1580
+ }
1581
+ else {
1582
+ dumpedText = objType + ' {';
1583
+ }
1584
+ for (var prop in obj) {
1585
+ dumpedText += '\n' + level_padding
1586
+ + (rawProps ? prop : dumpKey(prop))
1587
+ + ": ";
1588
+
1589
+ try {
1590
+ var value = obj[prop];
1591
+ } catch(e) {
1592
+ dumpedText += "<<Access Denied>>";
1593
+ continue;
1594
+ }
1595
+
1596
+ // Check for recursion
1597
+ if (typeof(value) == 'object') {
1598
+ var i = parentObjects.indexOf(value);
1599
+ if(i != -1) {
1600
+ var parentName = path.slice(0,i+1).join('->');
1601
+ dumpedText += "<<Reference to parent object " + parentName + " >>";
1602
+ continue;
1603
+ }
1604
+ }
1605
+
1606
+ try {
1607
+ dumpedText += Utilities.varDump(value,level+1,maxLevel,parentObjects.concat([value]),path.concat([prop]));
1608
+ } catch(e) {
1609
+ dumpedText += "<<Error processing property: " + e.message + " (" + value + ")>>";
1610
+ }
1611
+ }
1612
+
1613
+ var lastChar = dumpedText.charAt(dumpedText.length - 1);
1614
+ if (lastChar != '[' && lastChar != '{') {
1615
+ dumpedText += '\n' + level_padding.substr(4);
1616
+ }
1617
+ dumpedText += isArray ? ']' : '}';
1618
+
1619
+ return dumpedText;
1620
+ },
1621
+
1622
+ /**
1623
+ * Adds a string to a given array at a given offset, converted to UTF-8
1624
+ * @param {String} string The string to convert to UTF-8
1625
+ * @param {Array|Uint8Array} array The array to which to add the string
1626
+ * @param {Integer} [offset] Offset at which to add the string
1627
+ */
1628
+ stringToUTF8Array: function(string, array, offset) {
1629
+ if(!offset) offset = 0;
1630
+ var n = string.length;
1631
+ for(var i=0; i<n; i++) {
1632
+ var val = string.charCodeAt(i);
1633
+ if(val >= 128) {
1634
+ if(val >= 2048) {
1635
+ array[offset] = (val >>> 12) | 224;
1636
+ array[offset+1] = ((val >>> 6) & 63) | 128;
1637
+ array[offset+2] = (val & 63) | 128;
1638
+ offset += 3;
1639
+ } else {
1640
+ array[offset] = ((val >>> 6) | 192);
1641
+ array[offset+1] = (val & 63) | 128;
1642
+ offset += 2;
1643
+ }
1644
+ } else {
1645
+ array[offset++] = val;
1646
+ }
1647
+ }
1648
+ },
1649
+
1650
+ /**
1651
+ * Gets the byte length of the UTF-8 representation of a given string
1652
+ * @param {String} string
1653
+ * @return {Integer}
1654
+ */
1655
+ getStringByteLength: function(string) {
1656
+ var length = 0, n = string.length;
1657
+ for(var i=0; i<n; i++) {
1658
+ var val = string.charCodeAt(i);
1659
+ if(val >= 128) {
1660
+ if(val >= 2048) {
1661
+ length += 3;
1662
+ } else {
1663
+ length += 2;
1664
+ }
1665
+ } else {
1666
+ length += 1;
1667
+ }
1668
+ }
1669
+ return length;
1670
+ },
1671
+
1672
+ semverCompare(a, b) {
1673
+ a = a.split('.').map(version => isNaN(parseInt(version)) ? version : parseInt(version));
1674
+ b = b.split('.').map(version => isNaN(parseInt(version)) ? version : parseInt(version));
1675
+ for (let i = 0; i < a.length && i < b.length; i++) {
1676
+ if (a[i] < b[i]) return -1;
1677
+ else if (a[i] > b[i]) return 1;
1678
+ }
1679
+ return a.length - b.length; // E.g. 5.0.0 < 5.0.0.1
1680
+ },
1681
+
1682
+ allowedKeyChars: "23456789ABCDEFGHIJKLMNPQRSTUVWXYZ",
1683
+
1684
+ /**
1685
+ * Generates a valid object key for the server API
1686
+ */
1687
+ generateObjectKey: function generateObjectKey() {
1688
+ return Zotero.Utilities.randomString(8, Zotero.Utilities.allowedKeyChars);
1689
+ },
1690
+
1691
+ /**
1692
+ * Check if an object key is in a valid format
1693
+ */
1694
+ isValidObjectKey: function(key) {
1695
+ if (!Zotero.Utilities.objectKeyRegExp) {
1696
+ Zotero.Utilities.objectKeyRegExp = new RegExp('^[' + Zotero.Utilities.allowedKeyChars + ']{8}$');
1697
+ }
1698
+ return Zotero.Utilities.objectKeyRegExp.test(key);
1699
+ },
1700
+
1701
+ itemTypeExists: function(type) {
1702
+ Zotero.debug(`Zotero.Utilities.itemTypeExists() is deprecated -- use Zotero.Utilities.Item.itemTypeExists() instead`);
1703
+ return Zotero.Utilities.Item.itemTypeExists(type);
1704
+ },
1705
+
1706
+ itemToCSLJSON: function(zoteroItem) {
1707
+ Zotero.debug(`Zotero.Utilities.itemToCSLJSON() is deprecated -- use Zotero.Utilities.Item.itemToCSLJSON() instead`);
1708
+ return Zotero.Utilities.Item.itemToCSLJSON(zoteroItem);
1709
+ },
1710
+ itemFromCSLJSON: function(item, cslItem) {
1711
+ Zotero.debug(`Zotero.Utilities.itemFromCSLJSON() is deprecated -- use Zotero.Utilities.Item.itemFromCSLJSON() instead`);
1712
+ return Zotero.Utilities.Item.itemFromCSLJSON(item, cslItem);
1713
+ },
1714
+
1715
+ assignProps: movedToUtilitiesInternal("assignProps"),
1716
+ parseURL: movedToUtilitiesInternal("parseURL"),
1717
+ resolveIntermediateURL: movedToUtilitiesInternal("resolveIntermediateURL"),
1718
+ determineAttachmentIcon: movedToUtilitiesInternal('determineAttachmentIcon'),
1719
+
1720
+ /**
1721
+ * Walk the DOM and the contents of JSON data attributes in the HTML representation
1722
+ * of a note, calling visitor functions that might modify it and returning
1723
+ * the resulting HTML.
1724
+ *
1725
+ * Elements are visited in depth-first order. First the element itself is visited,
1726
+ * then its data attributes, then the URIs in its JSON attributes, then its subtree.
1727
+ *
1728
+ * @param {String} note Note HTML
1729
+ * @param {Object} visitors
1730
+ * @param {Function} [visitors.visitContainer]
1731
+ * @param {Function} [visitors.visitAnnotation]
1732
+ * @param {Function} [visitors.visitCitation]
1733
+ * @param {Function} [visitors.visitOtherElement]
1734
+ * @param {Function} [visitors.visitDataAttribute]
1735
+ * @param {Function} [visitors.visitURI] Return a replacement for the passed URI
1736
+ * @return {String} Potentially modified note HTML
1737
+ */
1738
+ walkNoteDOM: function (note, visitors) {
1739
+ function visit(elem) {
1740
+ if (elem.hasAttribute('data-schema-version')) {
1741
+ visitors.visitContainer?.(elem);
1742
+ }
1743
+ else if (elem.hasAttribute('data-annotation')) {
1744
+ visitors.visitAnnotation?.(elem);
1745
+ }
1746
+ else if (elem.hasAttribute('data-citation')) {
1747
+ visitors.visitCitation?.(elem);
1748
+ }
1749
+ else {
1750
+ visitors.visitOtherElement?.(elem);
1751
+ }
1752
+
1753
+ if (visitors.visitDataAttribute || visitors.visitURI) {
1754
+ for (let attr of ['data-citation', 'data-citation-items', 'data-annotation']) {
1755
+ if (elem.hasAttribute(attr)) {
1756
+ let json;
1757
+ try {
1758
+ json = JSON.parse(decodeURIComponent(elem.getAttribute(attr)));
1759
+ }
1760
+ catch (e) {
1761
+ continue;
1762
+ }
1763
+
1764
+ visitors.visitDataAttribute?.(attr, json);
1765
+ if (visitors.visitURI) visitURIs(json);
1766
+
1767
+ elem.setAttribute(attr, JSON.stringify(json));
1768
+ }
1769
+ }
1770
+ }
1771
+
1772
+ for (let child of elem.children) {
1773
+ visit(child);
1774
+ }
1775
+ }
1776
+
1777
+ function visitURIs(json) {
1778
+ if (Array.isArray(json)) {
1779
+ json.forEach(visitURIs);
1780
+ }
1781
+ else if (typeof json === 'object') {
1782
+ for (let [key, value] of Object.entries(json)) {
1783
+ if (key == 'id' || key == 'attachmentURI') {
1784
+ json[key] = visitors.visitURI(value);
1785
+ }
1786
+ else if (key == 'uris') {
1787
+ json[key] = value.map(visitors.visitURI)
1788
+ }
1789
+ else {
1790
+ visitURIs(value);
1791
+ }
1792
+ }
1793
+ }
1794
+ }
1795
+
1796
+ let wrappedNote = '<div id="note-body">' + note + '</div>';
1797
+ let doc;
1798
+ if (Zotero.isNode) {
1799
+ let { JSDOM } = require('jsdom');
1800
+ doc = new JSDOM(wrappedNote).window.document;
1801
+ }
1802
+ else {
1803
+ let parser;
1804
+ try {
1805
+ parser = new DOMParser();
1806
+ }
1807
+ catch {
1808
+ // Fx60 defines DOMParser but throws an error when you construct
1809
+ // it from this context
1810
+ parser = Cc['@mozilla.org/xmlextras/domparser;1'].createInstance(Ci.nsIDOMParser);
1811
+ }
1812
+ doc = parser.parseFromString(wrappedNote, 'text/html');
1813
+ }
1814
+
1815
+ let root = doc.getElementById('note-body');
1816
+ for (let child of root.children) {
1817
+ visit(child);
1818
+ }
1819
+ return root.innerHTML;
1820
+ },
1821
+
1822
+ // /**
1823
+ // * Provides unicode support and other additional features for regular expressions
1824
+ // * See https://github.com/slevithan/xregexp for usage
1825
+ // */
1826
+ XRegExp: typeof XRegExp !== "undefined" ? XRegExp : null
1827
+ }
1828
+
1829
+ if (!Utilities.XRegExp) {
1830
+ if (typeof module != 'undefined') {
1831
+ Utilities.XRegExp = require('./xregexp-all');
1832
+ }
1833
+ }
1834
+
1835
+ if (typeof module != 'undefined') {
1836
+ module.exports = Utilities;
1837
+ } else if (typeof Zotero != 'undefined') {
1838
+ Zotero.Utilities = Utilities;
1839
+ }
1840
+
1841
+ })();