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.
- package/LICENSE +202 -0
- package/README.md +152 -0
- package/app.js +318 -0
- package/config.dev.yaml +124 -0
- package/config.prod.yaml +123 -0
- package/config.yaml +0 -0
- package/lib/Citation.js +101 -0
- package/lib/CitoidError.js +61 -0
- package/lib/CitoidRequest.js +150 -0
- package/lib/CitoidResponse.js +44 -0
- package/lib/CitoidService.js +1118 -0
- package/lib/Exporter.js +1052 -0
- package/lib/OutgoingRequestThrottle.js +96 -0
- package/lib/Scraper.js +617 -0
- package/lib/Translator.js +76 -0
- package/lib/ZoteroService.js +220 -0
- package/lib/api-util.js +125 -0
- package/lib/external-apis/CrossRefService.js +122 -0
- package/lib/external-apis/OpenAlexService.js +245 -0
- package/lib/external-apis/PubMedService.js +82 -0
- package/lib/external-apis/SemanticScholarService.js +221 -0
- package/lib/external-apis/WaybackMachine.js +92 -0
- package/lib/hostIsAllowed.js +128 -0
- package/lib/swagger-ui.js +104 -0
- package/lib/translators/README.md +12 -0
- package/lib/translators/bePress.js +319 -0
- package/lib/translators/coins.js +360 -0
- package/lib/translators/crossRef.js +485 -0
- package/lib/translators/dublinCore.js +215 -0
- package/lib/translators/general.js +157 -0
- package/lib/translators/openGraph.js +177 -0
- package/lib/translators/util/index.js +209 -0
- package/lib/unshorten.js +109 -0
- package/lib/util.js +410 -0
- package/lib/zotero/cachedTypes.js +232 -0
- package/lib/zotero/typeSchemaData.js +366 -0
- package/package.json +121 -0
- package/routes/citoid.js +101 -0
- package/routes/info.js +81 -0
- package/routes/root.js +51 -0
- package/scripts/botcite.js +5021 -0
- package/scripts/citeclaw.js +10 -0
- package/server.js +12 -0
- package/spec.yaml +156 -0
- package/targets.yaml +2 -0
- package/vendor/translators-official/ABC News Australia.js +224 -0
- package/vendor/translators-official/ACLS Humanities EBook.js +165 -0
- package/vendor/translators-official/ACLWeb.js +600 -0
- package/vendor/translators-official/ACM Digital Library.js +708 -0
- package/vendor/translators-official/ACM Queue.js +391 -0
- package/vendor/translators-official/ACS Publications.js +633 -0
- package/vendor/translators-official/ADS Bibcode.js +664 -0
- package/vendor/translators-official/AEA Web.js +450 -0
- package/vendor/translators-official/AGRIS.js +311 -0
- package/vendor/translators-official/AIP.js +295 -0
- package/vendor/translators-official/AMS Journals.js +136 -0
- package/vendor/translators-official/AMS MathSciNet (Legacy).js +313 -0
- package/vendor/translators-official/AMS MathSciNet.js +288 -0
- package/vendor/translators-official/APA PsycNET.js +915 -0
- package/vendor/translators-official/APN.ru.js +132 -0
- package/vendor/translators-official/APS-Physics.js +204 -0
- package/vendor/translators-official/APS.js +542 -0
- package/vendor/translators-official/ARTFL Encyclopedie.js +283 -0
- package/vendor/translators-official/ARTnews.js +155 -0
- package/vendor/translators-official/ARTstor.js +619 -0
- package/vendor/translators-official/ASCE.js +199 -0
- package/vendor/translators-official/ASCO Meeting Library.js +153 -0
- package/vendor/translators-official/ASTIS.js +337 -0
- package/vendor/translators-official/ATS International Journal.js +290 -0
- package/vendor/translators-official/Access Engineering.js +384 -0
- package/vendor/translators-official/Access Medicine.js +343 -0
- package/vendor/translators-official/Access Science.js +391 -0
- package/vendor/translators-official/Adam Matthew Digital.js +405 -0
- package/vendor/translators-official/Agencia del ISBN.js +77 -0
- package/vendor/translators-official/Ahval News.js +309 -0
- package/vendor/translators-official/Air University Journals.js +236 -0
- package/vendor/translators-official/Airiti.js +423 -0
- package/vendor/translators-official/Alexander Street Press.js +198 -0
- package/vendor/translators-official/AllAfrica.js +291 -0
- package/vendor/translators-official/Alsharekh.js +242 -0
- package/vendor/translators-official/AlterNet.js +134 -0
- package/vendor/translators-official/Aluka.js +261 -0
- package/vendor/translators-official/Amazon.js +1043 -0
- package/vendor/translators-official/American Archive of Public Broadcasting.js +592 -0
- package/vendor/translators-official/American Institute of Aeronautics and Astronautics.js +210 -0
- package/vendor/translators-official/American Prospect.js +114 -0
- package/vendor/translators-official/Anarchist Library.js +382 -0
- package/vendor/translators-official/Ancestry.com US Federal Census.js +164 -0
- package/vendor/translators-official/Annual Reviews.js +329 -0
- package/vendor/translators-official/Antikvarium.hu.js +280 -0
- package/vendor/translators-official/AquaDocs.js +390 -0
- package/vendor/translators-official/Archeion.js +249 -0
- package/vendor/translators-official/Archiv fuer Sozialgeschichte.js +157 -0
- package/vendor/translators-official/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +179 -0
- package/vendor/translators-official/Archives Canada.js +142 -0
- package/vendor/translators-official/Ariana News.js +203 -0
- package/vendor/translators-official/Art Institute of Chicago.js +279 -0
- package/vendor/translators-official/Artefacts Canada.js +192 -0
- package/vendor/translators-official/Artforum.js +438 -0
- package/vendor/translators-official/Atlanta Journal-Constitution.js +311 -0
- package/vendor/translators-official/Atypon Journals.js +1204 -0
- package/vendor/translators-official/AustLII and NZLII.js +604 -0
- package/vendor/translators-official/Australian Dictionary of Biography.js +196 -0
- package/vendor/translators-official/BAILII.js +176 -0
- package/vendor/translators-official/BBC Genome.js +254 -0
- package/vendor/translators-official/BBC.js +430 -0
- package/vendor/translators-official/BIBSYS.js +112 -0
- package/vendor/translators-official/BOCC.js +217 -0
- package/vendor/translators-official/BOE.js +229 -0
- package/vendor/translators-official/BOFiP-Impots.js +132 -0
- package/vendor/translators-official/Baidu Scholar.js +276 -0
- package/vendor/translators-official/Bangkok Post.js +216 -0
- package/vendor/translators-official/Baruch Foundation.js +175 -0
- package/vendor/translators-official/Beobachter.js +175 -0
- package/vendor/translators-official/Bezneng Gajit.js +92 -0
- package/vendor/translators-official/BibLaTeX.js +888 -0
- package/vendor/translators-official/BibTeX.js +4236 -0
- package/vendor/translators-official/Biblio.com.js +216 -0
- package/vendor/translators-official/Bibliontology RDF.js +1166 -0
- package/vendor/translators-official/Biblioteca Nacional de Maestros.js +213 -0
- package/vendor/translators-official/Bibliotheque et Archives Nationale du Quebec (Pistard).js +147 -0
- package/vendor/translators-official/Bibliotheque et Archives Nationales du Quebec.js +266 -0
- package/vendor/translators-official/Bibliotheque nationale de France.js +872 -0
- package/vendor/translators-official/BioMed Central.js +585 -0
- package/vendor/translators-official/BioOne.js +233 -0
- package/vendor/translators-official/Bioconductor.js +343 -0
- package/vendor/translators-official/Blaetter.js +192 -0
- package/vendor/translators-official/Blogger.js +244 -0
- package/vendor/translators-official/Bloomberg.js +205 -0
- package/vendor/translators-official/Bloomsbury Food Library.js +296 -0
- package/vendor/translators-official/Bluesky.js +195 -0
- package/vendor/translators-official/BnF ISBN.js +129 -0
- package/vendor/translators-official/Bookmarks.js +282 -0
- package/vendor/translators-official/Bookshop.org.js +223 -0
- package/vendor/translators-official/Boston Review.js +332 -0
- package/vendor/translators-official/Bosworth Toller's Anglo-Saxon Dictionary Online.js +496 -0
- package/vendor/translators-official/Bracero History Archive.js +200 -0
- package/vendor/translators-official/Brill.js +434 -0
- package/vendor/translators-official/Brukerhandboken.js +153 -0
- package/vendor/translators-official/Bryn Mawr Classical Review.js +303 -0
- package/vendor/translators-official/Bundesgesetzblatt.js +231 -0
- package/vendor/translators-official/Business Standard.js +151 -0
- package/vendor/translators-official/CABI - CAB Abstracts.js +317 -0
- package/vendor/translators-official/CAOD.js +260 -0
- package/vendor/translators-official/CBC.js +439 -0
- package/vendor/translators-official/CCfr (BnF).js +162 -0
- package/vendor/translators-official/CERN Document Server.js +277 -0
- package/vendor/translators-official/CEUR Workshop Proceedings.js +145 -0
- package/vendor/translators-official/CFF References.js +170 -0
- package/vendor/translators-official/CFF.js +113 -0
- package/vendor/translators-official/CIA World Factbook.js +128 -0
- package/vendor/translators-official/CLACSO.js +226 -0
- package/vendor/translators-official/CLASE.js +135 -0
- package/vendor/translators-official/CNKI.js +731 -0
- package/vendor/translators-official/COBISS.js +1945 -0
- package/vendor/translators-official/COinS.js +336 -0
- package/vendor/translators-official/CQ Press.js +418 -0
- package/vendor/translators-official/CROSBI.js +227 -0
- package/vendor/translators-official/CSIRO Publishing.js +139 -0
- package/vendor/translators-official/CSL JSON.js +203 -0
- package/vendor/translators-official/CSV.js +294 -0
- package/vendor/translators-official/Cairn.info.js +368 -0
- package/vendor/translators-official/CalMatters.js +228 -0
- package/vendor/translators-official/Calisphere.js +355 -0
- package/vendor/translators-official/Camara Brasileira do Livro ISBN.js +842 -0
- package/vendor/translators-official/Cambridge Core.js +580 -0
- package/vendor/translators-official/Cambridge Engage Preprints.js +276 -0
- package/vendor/translators-official/CanLII.js +284 -0
- package/vendor/translators-official/Canada.com.js +171 -0
- package/vendor/translators-official/Canadian Letters and Images.js +148 -0
- package/vendor/translators-official/Canadiana.ca.js +196 -0
- package/vendor/translators-official/Cascadilla Proceedings Project.js +390 -0
- package/vendor/translators-official/Cell Press.js +516 -0
- package/vendor/translators-official/Central and Eastern European Online Library Journals.js +313 -0
- package/vendor/translators-official/Champlain Society - Collection.js +220 -0
- package/vendor/translators-official/ChatGPT.js +185 -0
- package/vendor/translators-official/Chicago Journal of Theoretical Computer Science.js +203 -0
- package/vendor/translators-official/Christian Science Monitor.js +148 -0
- package/vendor/translators-official/Chronicling America.js +131 -0
- package/vendor/translators-official/CiNii Research.js +168 -0
- package/vendor/translators-official/Citavi 5 XML.js +516 -0
- package/vendor/translators-official/CiteSeer.js +196 -0
- package/vendor/translators-official/Citizen Lab.js +347 -0
- package/vendor/translators-official/Civilization.ca.js +146 -0
- package/vendor/translators-official/Climate Change and Human Health Literature Portal.js +283 -0
- package/vendor/translators-official/Clinical Key.js +367 -0
- package/vendor/translators-official/Code4Lib Journal.js +143 -0
- package/vendor/translators-official/Colorado State Legislature.js +215 -0
- package/vendor/translators-official/Columbia University Press.js +238 -0
- package/vendor/translators-official/Common-Place.js +218 -0
- package/vendor/translators-official/Computer History Museum Archive.js +1319 -0
- package/vendor/translators-official/Copernicus.js +461 -0
- package/vendor/translators-official/Cornell LII.js +252 -0
- package/vendor/translators-official/Cornell University Press.js +235 -0
- package/vendor/translators-official/CourtListener.js +265 -0
- package/vendor/translators-official/Crossref REST.js +1757 -0
- package/vendor/translators-official/Crossref Unixref XML.js +965 -0
- package/vendor/translators-official/Current Affairs.js +160 -0
- package/vendor/translators-official/DABI.js +476 -0
- package/vendor/translators-official/DAI-Zenon.js +392 -0
- package/vendor/translators-official/DART-Europe.js +176 -0
- package/vendor/translators-official/DBLP Computer Science Bibliography.js +462 -0
- package/vendor/translators-official/DBpia.js +233 -0
- package/vendor/translators-official/DEPATISnet.js +373 -0
- package/vendor/translators-official/DOAJ.js +243 -0
- package/vendor/translators-official/DOI Content Negotiation.js +352 -0
- package/vendor/translators-official/DOI.js +322 -0
- package/vendor/translators-official/DPLA.js +425 -0
- package/vendor/translators-official/DSpace Intermediate Metadata.js +208 -0
- package/vendor/translators-official/Dagens Nyheter.js +369 -0
- package/vendor/translators-official/Dagstuhl Research Online Publication Server.js +276 -0
- package/vendor/translators-official/Dar Almandumah.js +253 -0
- package/vendor/translators-official/Data.gov.js +225 -0
- package/vendor/translators-official/Databrary.js +184 -0
- package/vendor/translators-official/Datacite JSON.js +1182 -0
- package/vendor/translators-official/Dataverse.js +418 -0
- package/vendor/translators-official/Daum News.js +139 -0
- package/vendor/translators-official/De Gruyter Brill.js +460 -0
- package/vendor/translators-official/Defense Technical Information Center.js +146 -0
- package/vendor/translators-official/Delpher.js +413 -0
- package/vendor/translators-official/Demographic Research.js +164 -0
- package/vendor/translators-official/Denik CZ.js +273 -0
- package/vendor/translators-official/Der Freitag.js +236 -0
- package/vendor/translators-official/Der Spiegel.js +479 -0
- package/vendor/translators-official/Desiring God.js +216 -0
- package/vendor/translators-official/Deutsche Fotothek.js +364 -0
- package/vendor/translators-official/Deutsche Nationalbibliothek.js +594 -0
- package/vendor/translators-official/Dialnet.js +258 -0
- package/vendor/translators-official/Die Zeit.js +378 -0
- package/vendor/translators-official/DigiZeitschriften.js +269 -0
- package/vendor/translators-official/Digital Humanities Quarterly.js +207 -0
- package/vendor/translators-official/Digital Spy.js +215 -0
- package/vendor/translators-official/Dimensions.js +233 -0
- package/vendor/translators-official/Douban.js +316 -0
- package/vendor/translators-official/Dreier Neuerscheinungsdienst.js +209 -0
- package/vendor/translators-official/DrugBank.ca.js +209 -0
- package/vendor/translators-official/Dryad Digital Repository.js +323 -0
- package/vendor/translators-official/Duke University Press Books.js +250 -0
- package/vendor/translators-official/E-periodica Switzerland.js +347 -0
- package/vendor/translators-official/EBSCO Discovery Layer.js +159 -0
- package/vendor/translators-official/EBSCOhost.js +592 -0
- package/vendor/translators-official/EIDR.js +184 -0
- package/vendor/translators-official/EPA National Library Catalog.js +245 -0
- package/vendor/translators-official/ERIC.js +986 -0
- package/vendor/translators-official/ESpacenet.js +465 -0
- package/vendor/translators-official/EUR-Lex.js +418 -0
- package/vendor/translators-official/Eastview.js +336 -0
- package/vendor/translators-official/Edinburgh University Press Journals.js +178 -0
- package/vendor/translators-official/Education Week.js +197 -0
- package/vendor/translators-official/El Comercio (Peru).js +347 -0
- package/vendor/translators-official/El Pais.js +262 -0
- package/vendor/translators-official/Electronic Colloquium on Computational Complexity.js +230 -0
- package/vendor/translators-official/Elicit.js +120 -0
- package/vendor/translators-official/Elsevier Health Journals.js +531 -0
- package/vendor/translators-official/Elsevier Pure.js +420 -0
- package/vendor/translators-official/Embedded Metadata.js +1978 -0
- package/vendor/translators-official/Emerald Insight.js +626 -0
- package/vendor/translators-official/Encyclopedia of Chicago.js +162 -0
- package/vendor/translators-official/Encyclopedia of Korean Culture.js +221 -0
- package/vendor/translators-official/Endnote XML.js +1407 -0
- package/vendor/translators-official/Engineering Village.js +139 -0
- package/vendor/translators-official/Envidat.js +331 -0
- package/vendor/translators-official/Epicurious.js +144 -0
- package/vendor/translators-official/Erudit.js +272 -0
- package/vendor/translators-official/Euclid.js +220 -0
- package/vendor/translators-official/EurasiaNet.js +109 -0
- package/vendor/translators-official/EurogamerUSgamer.js +380 -0
- package/vendor/translators-official/Europe PMC.js +448 -0
- package/vendor/translators-official/Evernote.js +104 -0
- package/vendor/translators-official/F1000 Research.js +655 -0
- package/vendor/translators-official/FAO Knowledge Repository.js +598 -0
- package/vendor/translators-official/FAOLEX Database.js +811 -0
- package/vendor/translators-official/FAZ.NET.js +231 -0
- package/vendor/translators-official/Fachportal Padagogik.js +839 -0
- package/vendor/translators-official/Factiva.js +302 -0
- package/vendor/translators-official/Failed Architecture.js +114 -0
- package/vendor/translators-official/Fairfax Australia.js +200 -0
- package/vendor/translators-official/Fatcat.js +425 -0
- package/vendor/translators-official/Figshare.js +191 -0
- package/vendor/translators-official/Financial Times.js +187 -0
- package/vendor/translators-official/Finna.js +357 -0
- package/vendor/translators-official/Flickr.js +318 -0
- package/vendor/translators-official/Foreign Affairs.js +485 -0
- package/vendor/translators-official/Foreign Policy.js +146 -0
- package/vendor/translators-official/FreeCite.js +95 -0
- package/vendor/translators-official/FreePatentsOnline.js +265 -0
- package/vendor/translators-official/Frieze.js +243 -0
- package/vendor/translators-official/Frontiers.js +667 -0
- package/vendor/translators-official/GMS German Medical Science.js +319 -0
- package/vendor/translators-official/GPO Access e-CFR.js +134 -0
- package/vendor/translators-official/Gale Databases.js +324 -0
- package/vendor/translators-official/GaleGDC.js +189 -0
- package/vendor/translators-official/Galegroup.js +327 -0
- package/vendor/translators-official/Gallica.js +194 -0
- package/vendor/translators-official/Game Studies.js +155 -0
- package/vendor/translators-official/GameSpot.js +199 -0
- package/vendor/translators-official/GameStar GamePro.js +198 -0
- package/vendor/translators-official/Gasyrlar Awazy.js +156 -0
- package/vendor/translators-official/Gemeinsamer Bibliotheksverbund ISBN.js +23 -0
- package/vendor/translators-official/Gene Ontology.js +128 -0
- package/vendor/translators-official/GitHub.js +501 -0
- package/vendor/translators-official/Globes.js +243 -0
- package/vendor/translators-official/Gmail.js +64 -0
- package/vendor/translators-official/Goodreads.js +219 -0
- package/vendor/translators-official/Google Books.js +552 -0
- package/vendor/translators-official/Google Gemini.js +116 -0
- package/vendor/translators-official/Google Patents.js +959 -0
- package/vendor/translators-official/Google Play.js +186 -0
- package/vendor/translators-official/Google Presentation.js +104 -0
- package/vendor/translators-official/Google Research.js +221 -0
- package/vendor/translators-official/Google Scholar.js +1361 -0
- package/vendor/translators-official/Gulag Many Days, Many Lives.js +179 -0
- package/vendor/translators-official/HAL.js +536 -0
- package/vendor/translators-official/HCSP.js +312 -0
- package/vendor/translators-official/HUDOC.js +650 -0
- package/vendor/translators-official/Haaretz.js +562 -0
- package/vendor/translators-official/Habr.js +232 -0
- package/vendor/translators-official/Handelszeitung.js +273 -0
- package/vendor/translators-official/Hanrei Watch.js +123 -0
- package/vendor/translators-official/Harper's Magazine.js +365 -0
- package/vendor/translators-official/Harvard Business Review.js +326 -0
- package/vendor/translators-official/Harvard Caselaw Access Project.js +244 -0
- package/vendor/translators-official/Harvard University Press Books.js +286 -0
- package/vendor/translators-official/HathiTrust.js +311 -0
- package/vendor/translators-official/HeinOnline.js +280 -0
- package/vendor/translators-official/Heise.js +200 -0
- package/vendor/translators-official/Herder.js +236 -0
- package/vendor/translators-official/HighBeam.js +198 -0
- package/vendor/translators-official/HighWire 2.0.js +1355 -0
- package/vendor/translators-official/HighWire.js +209 -0
- package/vendor/translators-official/Hindawi Publishers.js +177 -0
- package/vendor/translators-official/Hispanic-American Periodical Index.js +236 -0
- package/vendor/translators-official/Homeland Security Digital Library.js +426 -0
- package/vendor/translators-official/Hrvatska enciklopedija.js +118 -0
- package/vendor/translators-official/Huff Post.js +223 -0
- package/vendor/translators-official/Human Rights Watch.js +450 -0
- package/vendor/translators-official/IBISWorld.js +171 -0
- package/vendor/translators-official/IDEA ALM.js +536 -0
- package/vendor/translators-official/IEEE Computer Society.js +429 -0
- package/vendor/translators-official/IEEE Xplore.js +1000 -0
- package/vendor/translators-official/IETF.js +451 -0
- package/vendor/translators-official/IGN.js +136 -0
- package/vendor/translators-official/IMDb.js +566 -0
- package/vendor/translators-official/INSPIRE.js +247 -0
- package/vendor/translators-official/IPCC.js +757 -0
- package/vendor/translators-official/ISTC.js +181 -0
- package/vendor/translators-official/Idref.js +179 -0
- package/vendor/translators-official/In These Times.js +196 -0
- package/vendor/translators-official/Ined.js +558 -0
- package/vendor/translators-official/InfoTrac.js +279 -0
- package/vendor/translators-official/Informationssystem Medienpaedagogik.js +305 -0
- package/vendor/translators-official/IngentaConnect.js +312 -0
- package/vendor/translators-official/Inside Higher Ed.js +167 -0
- package/vendor/translators-official/Insignia OPAC.js +114 -0
- package/vendor/translators-official/Institute of Contemporary Art.js +180 -0
- package/vendor/translators-official/Institute of Physics.js +340 -0
- package/vendor/translators-official/Integrum.js +173 -0
- package/vendor/translators-official/Intellixir.js +264 -0
- package/vendor/translators-official/Inter-Research Science Center.js +185 -0
- package/vendor/translators-official/International Nuclear Information System.js +285 -0
- package/vendor/translators-official/Internet Archive Scholar.js +106 -0
- package/vendor/translators-official/Internet Archive Wayback Machine.js +152 -0
- package/vendor/translators-official/Internet Archive.js +552 -0
- package/vendor/translators-official/InvenioRDM.js +1250 -0
- package/vendor/translators-official/Isidore.js +235 -0
- package/vendor/translators-official/J-Stage.js +272 -0
- package/vendor/translators-official/JETS.js +122 -0
- package/vendor/translators-official/JISC Historical Texts.js +273 -0
- package/vendor/translators-official/JRC Publications Repository.js +569 -0
- package/vendor/translators-official/JSTOR.js +821 -0
- package/vendor/translators-official/Jahrbuch.js +213 -0
- package/vendor/translators-official/Japan Times Online.js +138 -0
- package/vendor/translators-official/Journal of Electronic Publishing.js +147 -0
- package/vendor/translators-official/Journal of Extension.js +288 -0
- package/vendor/translators-official/Journal of Machine Learning Research.js +441 -0
- package/vendor/translators-official/Journal of Religion and Society.js +174 -0
- package/vendor/translators-official/JurPC.js +274 -0
- package/vendor/translators-official/Juricaf.js +141 -0
- package/vendor/translators-official/Juris.js +728 -0
- package/vendor/translators-official/K10plus ISBN.js +386 -0
- package/vendor/translators-official/KStudy.js +632 -0
- package/vendor/translators-official/Kanopy.js +358 -0
- package/vendor/translators-official/Khaama Press.js +249 -0
- package/vendor/translators-official/KiM.js +259 -0
- package/vendor/translators-official/KitapYurdu.com.js +376 -0
- package/vendor/translators-official/Kommersant.js +174 -0
- package/vendor/translators-official/Korean National Library.js +621 -0
- package/vendor/translators-official/L'Annee Philologique.js +267 -0
- package/vendor/translators-official/LA Times.js +239 -0
- package/vendor/translators-official/LIBRIS ISBN.js +103 -0
- package/vendor/translators-official/LIVIVO.js +260 -0
- package/vendor/translators-official/LWN.net.js +350 -0
- package/vendor/translators-official/La Croix.js +237 -0
- package/vendor/translators-official/La Nacion (Argentina).js +231 -0
- package/vendor/translators-official/La Presse.js +218 -0
- package/vendor/translators-official/La Republica (Peru).js +174 -0
- package/vendor/translators-official/Lagen.nu.js +214 -0
- package/vendor/translators-official/Landesbibliographie Baden-Wurttemberg.js +324 -0
- package/vendor/translators-official/Lapham's Quarterly.js +1062 -0
- package/vendor/translators-official/Le Devoir.js +167 -0
- package/vendor/translators-official/Le Figaro.js +225 -0
- package/vendor/translators-official/Le Maitron.js +484 -0
- package/vendor/translators-official/Le Monde.js +245 -0
- package/vendor/translators-official/Le monde diplomatique.js +200 -0
- package/vendor/translators-official/Legifrance.js +641 -0
- package/vendor/translators-official/Legislative Insight.js +406 -0
- package/vendor/translators-official/Lexis+.js +264 -0
- package/vendor/translators-official/LexisNexis.js +505 -0
- package/vendor/translators-official/Libraries Tasmania.js +778 -0
- package/vendor/translators-official/Library Catalog (Aleph).js +385 -0
- package/vendor/translators-official/Library Catalog (Amicus).js +254 -0
- package/vendor/translators-official/Library Catalog (Aquabrowser).js +253 -0
- package/vendor/translators-official/Library Catalog (BiblioCommons).js +249 -0
- package/vendor/translators-official/Library Catalog (Blacklight).js +341 -0
- package/vendor/translators-official/Library Catalog (Capita Prism).js +162 -0
- package/vendor/translators-official/Library Catalog (DRA).js +203 -0
- package/vendor/translators-official/Library Catalog (Dynix).js +315 -0
- package/vendor/translators-official/Library Catalog (EBSCO Locate).js +442 -0
- package/vendor/translators-official/Library Catalog (Encore).js +211 -0
- package/vendor/translators-official/Library Catalog (InnoPAC).js +305 -0
- package/vendor/translators-official/Library Catalog (Koha).js +225 -0
- package/vendor/translators-official/Library Catalog (Mango).js +285 -0
- package/vendor/translators-official/Library Catalog (OPALS).js +200 -0
- package/vendor/translators-official/Library Catalog (PICA).js +2120 -0
- package/vendor/translators-official/Library Catalog (PICA2).js +331 -0
- package/vendor/translators-official/Library Catalog (Pika).js +488 -0
- package/vendor/translators-official/Library Catalog (Polaris).js +183 -0
- package/vendor/translators-official/Library Catalog (Quolto).js +320 -0
- package/vendor/translators-official/Library Catalog (RERO ILS).js +754 -0
- package/vendor/translators-official/Library Catalog (SIRSI eLibrary).js +407 -0
- package/vendor/translators-official/Library Catalog (SIRSI).js +452 -0
- package/vendor/translators-official/Library Catalog (SLIMS).js +146 -0
- package/vendor/translators-official/Library Catalog (TIND ILS).js +773 -0
- package/vendor/translators-official/Library Catalog (TLCYouSeeMore).js +132 -0
- package/vendor/translators-official/Library Catalog (TinREAD).js +277 -0
- package/vendor/translators-official/Library Catalog (VTLS).js +125 -0
- package/vendor/translators-official/Library Catalog (Visual Library 2021).js +765 -0
- package/vendor/translators-official/Library Catalog (Voyager 7).js +199 -0
- package/vendor/translators-official/Library Catalog (Voyager).js +212 -0
- package/vendor/translators-official/Library Genesis.js +337 -0
- package/vendor/translators-official/Library Hub Discover.js +359 -0
- package/vendor/translators-official/Library of Congress Digital Collections.js +869 -0
- package/vendor/translators-official/Library of Congress ISBN.js +86 -0
- package/vendor/translators-official/LingBuzz.js +359 -0
- package/vendor/translators-official/Lippincott Williams and Wilkins.js +341 -0
- package/vendor/translators-official/Literary Hub.js +950 -0
- package/vendor/translators-official/Litres.js +236 -0
- package/vendor/translators-official/LiveJournal.js +219 -0
- package/vendor/translators-official/London Review of Books.js +291 -0
- package/vendor/translators-official/LookUs.js +260 -0
- package/vendor/translators-official/Lulu.js +264 -0
- package/vendor/translators-official/MAB2.js +373 -0
- package/vendor/translators-official/MARC.js +1080 -0
- package/vendor/translators-official/MARCXML.js +489 -0
- package/vendor/translators-official/MCV.js +258 -0
- package/vendor/translators-official/MDPI Journals.js +356 -0
- package/vendor/translators-official/MEDLINEnbib.js +1561 -0
- package/vendor/translators-official/METS.js +384 -0
- package/vendor/translators-official/MIDAS Journals.js +343 -0
- package/vendor/translators-official/MIT Press Books.js +637 -0
- package/vendor/translators-official/MODS.js +2545 -0
- package/vendor/translators-official/MPG PuRe.js +541 -0
- package/vendor/translators-official/Mailman.js +136 -0
- package/vendor/translators-official/Mainichi Daily News.js +189 -0
- package/vendor/translators-official/Mastodon.js +198 -0
- package/vendor/translators-official/Matbugat.ru.js +110 -0
- package/vendor/translators-official/Max Planck Institute for the History of Science Virtual Laboratory Library.js +136 -0
- package/vendor/translators-official/Medium.js +208 -0
- package/vendor/translators-official/MetaLib.js +126 -0
- package/vendor/translators-official/Microbiology Society Journals.js +343 -0
- package/vendor/translators-official/Microsoft Academic.js +424 -0
- package/vendor/translators-official/Mikromarc.js +207 -0
- package/vendor/translators-official/Milli Kutuphane.js +244 -0
- package/vendor/translators-official/Musee du Louvre.js +265 -0
- package/vendor/translators-official/NASA ADS.js +889 -0
- package/vendor/translators-official/NASA NTRS.js +610 -0
- package/vendor/translators-official/NCBI Nucleotide.js +227 -0
- package/vendor/translators-official/NPR.js +341 -0
- package/vendor/translators-official/NRC Research Press.js +181 -0
- package/vendor/translators-official/NRC.nl.js +226 -0
- package/vendor/translators-official/NTSB Accident Reports.js +226 -0
- package/vendor/translators-official/NYPL Menus.js +275 -0
- package/vendor/translators-official/NYPL Research Catalog.js +458 -0
- package/vendor/translators-official/NYTimes.com.js +947 -0
- package/vendor/translators-official/NZZ.ch.js +272 -0
- package/vendor/translators-official/Nagoya University OPAC.js +336 -0
- package/vendor/translators-official/National Academies Press.js +243 -0
- package/vendor/translators-official/National Agriculture Library.js +524 -0
- package/vendor/translators-official/National Archives UK Case Law.js +509 -0
- package/vendor/translators-official/National Archives of Australia.js +522 -0
- package/vendor/translators-official/National Archives of South Africa.js +122 -0
- package/vendor/translators-official/National Bureau of Economic Research.js +363 -0
- package/vendor/translators-official/National Diet Library Catalogue.js +333 -0
- package/vendor/translators-official/National Gallery of Art - USA.js +149 -0
- package/vendor/translators-official/National Gallery of Australia.js +252 -0
- package/vendor/translators-official/National Library of Australia (new catalog).js +223 -0
- package/vendor/translators-official/National Library of Belarus.js +171 -0
- package/vendor/translators-official/National Library of Norway.js +310 -0
- package/vendor/translators-official/National Library of Poland ISBN.js +140 -0
- package/vendor/translators-official/National Post.js +186 -0
- package/vendor/translators-official/National Technical Reports Library.js +276 -0
- package/vendor/translators-official/National Transportation Library ROSA P.js +562 -0
- package/vendor/translators-official/Nature Publishing Group.js +3394 -0
- package/vendor/translators-official/Neural Information Processing Systems.js +385 -0
- package/vendor/translators-official/New Left Review.js +245 -0
- package/vendor/translators-official/New Zealand Herald.js +282 -0
- package/vendor/translators-official/Newlines Magazine.js +190 -0
- package/vendor/translators-official/News Corp Australia.js +251 -0
- package/vendor/translators-official/NewsBank.js +202 -0
- package/vendor/translators-official/NewsnetTamedia.js +509 -0
- package/vendor/translators-official/Noor Digital Library.js +267 -0
- package/vendor/translators-official/Note HTML.js +206 -0
- package/vendor/translators-official/Note Markdown.js +1638 -0
- package/vendor/translators-official/Notre Dame Philosophical Reviews.js +201 -0
- package/vendor/translators-official/OAPEN.js +331 -0
- package/vendor/translators-official/OCLC WorldCat FirstSearch.js +213 -0
- package/vendor/translators-official/OECD.js +216 -0
- package/vendor/translators-official/ORCID.js +104 -0
- package/vendor/translators-official/OSF Preprints.js +1287 -0
- package/vendor/translators-official/OSTI Energy Citations.js +202 -0
- package/vendor/translators-official/OVID Tagged.js +1226 -0
- package/vendor/translators-official/OZON.ru.js +465 -0
- package/vendor/translators-official/OhioLINK.js +43 -0
- package/vendor/translators-official/Old Bailey Online.js +315 -0
- package/vendor/translators-official/Open Conf.js +172 -0
- package/vendor/translators-official/Open Knowledge Repository.js +811 -0
- package/vendor/translators-official/Open WorldCat.js +1394 -0
- package/vendor/translators-official/OpenAlex JSON.js +740 -0
- package/vendor/translators-official/OpenAlex.js +444 -0
- package/vendor/translators-official/OpenEdition Books.js +155 -0
- package/vendor/translators-official/OpenEdition Journals.js +432 -0
- package/vendor/translators-official/Optical Society of America.js +562 -0
- package/vendor/translators-official/Optimization Online.js +418 -0
- package/vendor/translators-official/Ovid OCE.js +353 -0
- package/vendor/translators-official/Ovid.js +302 -0
- package/vendor/translators-official/Oxford Dictionaries Premium.js +194 -0
- package/vendor/translators-official/Oxford English Dictionary.js +122 -0
- package/vendor/translators-official/Oxford Music and Art Online.js +120 -0
- package/vendor/translators-official/Oxford Reference.js +202 -0
- package/vendor/translators-official/Oxford University Press.js +277 -0
- package/vendor/translators-official/PC Gamer.js +302 -0
- package/vendor/translators-official/PC Games.js +128 -0
- package/vendor/translators-official/PEI Archival Information Network.js +242 -0
- package/vendor/translators-official/PEP Web.js +165 -0
- package/vendor/translators-official/PKP Catalog Systems.js +1455 -0
- package/vendor/translators-official/PLoS Journals.js +284 -0
- package/vendor/translators-official/PRC History Review.js +298 -0
- package/vendor/translators-official/Pajhwok Afghan News.js +198 -0
- package/vendor/translators-official/Papers Past.js +509 -0
- package/vendor/translators-official/Paris Review.js +227 -0
- package/vendor/translators-official/Pastebin.js +199 -0
- package/vendor/translators-official/Patents - USPTO.js +210 -0
- package/vendor/translators-official/Peeters.js +587 -0
- package/vendor/translators-official/Perceiving Systems.js +350 -0
- package/vendor/translators-official/Perlego.js +416 -0
- package/vendor/translators-official/PhilPapers.js +233 -0
- package/vendor/translators-official/Philosopher's Imprint.js +169 -0
- package/vendor/translators-official/Pleade.js +329 -0
- package/vendor/translators-official/Polygon.js +270 -0
- package/vendor/translators-official/Potsdamer Neueste Nachrichten.js +188 -0
- package/vendor/translators-official/Premium Times.js +144 -0
- package/vendor/translators-official/Preprints.org.js +305 -0
- package/vendor/translators-official/Prime 9ja Online.js +402 -0
- package/vendor/translators-official/Primo 2018.js +126 -0
- package/vendor/translators-official/Primo Normalized XML.js +1075 -0
- package/vendor/translators-official/Primo.js +322 -0
- package/vendor/translators-official/ProMED.js +66 -0
- package/vendor/translators-official/ProQuest Ebook Central.js +226 -0
- package/vendor/translators-official/ProQuest PolicyFile.js +115 -0
- package/vendor/translators-official/ProQuest.js +2210 -0
- package/vendor/translators-official/Probing the Past.js +151 -0
- package/vendor/translators-official/Project Gutenberg.js +191 -0
- package/vendor/translators-official/Project MUSE.js +451 -0
- package/vendor/translators-official/Protein Data Bank.js +445 -0
- package/vendor/translators-official/PubFactory Journals.js +712 -0
- package/vendor/translators-official/PubMed Central.js +563 -0
- package/vendor/translators-official/PubMed XML.js +1240 -0
- package/vendor/translators-official/PubMed.js +1317 -0
- package/vendor/translators-official/PubPub.js +530 -0
- package/vendor/translators-official/Public Record Office Victoria.js +252 -0
- package/vendor/translators-official/Publications Office of the European Union.js +540 -0
- package/vendor/translators-official/Publications du Quebec.js +225 -0
- package/vendor/translators-official/PyPI.js +288 -0
- package/vendor/translators-official/Qatar Digital Library.js +802 -0
- package/vendor/translators-official/Queensland State Archives.js +303 -0
- package/vendor/translators-official/R-Packages.js +410 -0
- package/vendor/translators-official/RAND.js +283 -0
- package/vendor/translators-official/RDF.js +1782 -0
- package/vendor/translators-official/REDALYC.js +196 -0
- package/vendor/translators-official/RIS.js +7292 -0
- package/vendor/translators-official/RSC Publishing.js +250 -0
- package/vendor/translators-official/Radio Free Europe Radio Liberty.js +706 -0
- package/vendor/translators-official/RePEc - Econpapers.js +725 -0
- package/vendor/translators-official/RePEc - IDEAS.js +337 -0
- package/vendor/translators-official/Rechtspraak.nl.js +295 -0
- package/vendor/translators-official/RefWorks Tagged.js +1185 -0
- package/vendor/translators-official/ReferBibIX.js +463 -0
- package/vendor/translators-official/Regeringskansliet.js +89 -0
- package/vendor/translators-official/Research Square.js +335 -0
- package/vendor/translators-official/ResearchGate.js +394 -0
- package/vendor/translators-official/Retsinformation.js +348 -0
- package/vendor/translators-official/Reuters.js +255 -0
- package/vendor/translators-official/Rock, Paper, Shotgun.js +304 -0
- package/vendor/translators-official/Roll Call.js +173 -0
- package/vendor/translators-official/Russian State Library.js +1517 -0
- package/vendor/translators-official/SAE Papers.js +241 -0
- package/vendor/translators-official/SAGE Journals.js +429 -0
- package/vendor/translators-official/SAGE Knowledge.js +505 -0
- package/vendor/translators-official/SAILDART.js +364 -0
- package/vendor/translators-official/SALT Research Archives.js +196 -0
- package/vendor/translators-official/SFU IPinCH.js +946 -0
- package/vendor/translators-official/SIPRI.js +256 -0
- package/vendor/translators-official/SIRS Knowledge Source.js +546 -0
- package/vendor/translators-official/SLUB Dresden.js +300 -0
- package/vendor/translators-official/SORA.js +340 -0
- package/vendor/translators-official/SSOAR.js +399 -0
- package/vendor/translators-official/SSRN.js +235 -0
- package/vendor/translators-official/SVT Nyheter.js +381 -0
- package/vendor/translators-official/Sacramento Bee.js +274 -0
- package/vendor/translators-official/Safari Books Online.js +391 -0
- package/vendor/translators-official/Scholars Portal Journals.js +220 -0
- package/vendor/translators-official/Scholia.js +189 -0
- package/vendor/translators-official/Schweizer Radio und Fernsehen SRF.js +152 -0
- package/vendor/translators-official/SciELO.js +440 -0
- package/vendor/translators-official/ScienceDirect.js +1306 -0
- package/vendor/translators-official/Scopus.js +418 -0
- package/vendor/translators-official/Semantic Scholar.js +513 -0
- package/vendor/translators-official/Silverchair.js +886 -0
- package/vendor/translators-official/Slate.js +228 -0
- package/vendor/translators-official/SlideShare.js +112 -0
- package/vendor/translators-official/Springer Link.js +696 -0
- package/vendor/translators-official/Stack Exchange.js +134 -0
- package/vendor/translators-official/Standard Ebooks.js +198 -0
- package/vendor/translators-official/Stanford Encyclopedia of Philosophy.js +285 -0
- package/vendor/translators-official/Stanford University Press.js +343 -0
- package/vendor/translators-official/State Records Office of Western Australia.js +439 -0
- package/vendor/translators-official/Stitcher.js +141 -0
- package/vendor/translators-official/Store norske leksikon.js +291 -0
- package/vendor/translators-official/Stuff.co.nz.js +446 -0
- package/vendor/translators-official/Substack.js +237 -0
- package/vendor/translators-official/Sud Ouest.js +181 -0
- package/vendor/translators-official/Sueddeutsche.de.js +205 -0
- package/vendor/translators-official/Summon 2.js +117 -0
- package/vendor/translators-official/Superlib.js +647 -0
- package/vendor/translators-official/Svenska Dagbladet.js +274 -0
- package/vendor/translators-official/Sveriges radio.js +416 -0
- package/vendor/translators-official/TEI.js +648 -0
- package/vendor/translators-official/TV by the Numbers.js +194 -0
- package/vendor/translators-official/TVNZ.js +165 -0
- package/vendor/translators-official/Tagesspiegel.js +249 -0
- package/vendor/translators-official/Talis Aspire.js +316 -0
- package/vendor/translators-official/TalisPrism.js +445 -0
- package/vendor/translators-official/Tatknigafund.js +174 -0
- package/vendor/translators-official/Tatpressa.ru.js +121 -0
- package/vendor/translators-official/Taylor & Francis eBooks.js +334 -0
- package/vendor/translators-official/Taylor and Francis+NEJM.js +813 -0
- package/vendor/translators-official/Tesis Doctorals en Xarxa.js +233 -0
- package/vendor/translators-official/The Art Newspaper.js +268 -0
- package/vendor/translators-official/The Atlantic.js +535 -0
- package/vendor/translators-official/The Boston Globe.js +285 -0
- package/vendor/translators-official/The Chronicle of Higher Education.js +308 -0
- package/vendor/translators-official/The Daily Beast.js +183 -0
- package/vendor/translators-official/The Economic Times - The Times of India.js +305 -0
- package/vendor/translators-official/The Economist.js +207 -0
- package/vendor/translators-official/The Free Dictionary.js +58 -0
- package/vendor/translators-official/The Globe and Mail.js +241 -0
- package/vendor/translators-official/The Guardian.js +717 -0
- package/vendor/translators-official/The Hamilton Spectator.js +129 -0
- package/vendor/translators-official/The Hindu.js +318 -0
- package/vendor/translators-official/The Independent.js +184 -0
- package/vendor/translators-official/The Intercept.js +258 -0
- package/vendor/translators-official/The Met.js +276 -0
- package/vendor/translators-official/The Microfinance Gateway.js +174 -0
- package/vendor/translators-official/The Nation.js +188 -0
- package/vendor/translators-official/The National Archives (UK).js +242 -0
- package/vendor/translators-official/The New Republic.js +160 -0
- package/vendor/translators-official/The New York Review of Books.js +467 -0
- package/vendor/translators-official/The New Yorker.js +360 -0
- package/vendor/translators-official/The Open Library.js +220 -0
- package/vendor/translators-official/The Straits Times.js +528 -0
- package/vendor/translators-official/The Telegraph.js +337 -0
- package/vendor/translators-official/The Times and Sunday Times.js +180 -0
- package/vendor/translators-official/The Times of Israel.js +151 -0
- package/vendor/translators-official/TheMarker.js +108 -0
- package/vendor/translators-official/Theory of Computing.js +488 -0
- package/vendor/translators-official/ThesesFR.js +405 -0
- package/vendor/translators-official/Thieme.js +326 -0
- package/vendor/translators-official/Time.com.js +557 -0
- package/vendor/translators-official/TimesMachine.js +222 -0
- package/vendor/translators-official/Tony Blair Institute for Global Change.js +195 -0
- package/vendor/translators-official/Toronto Star.js +298 -0
- package/vendor/translators-official/Transportation Research Board.js +253 -0
- package/vendor/translators-official/Treesearch.js +535 -0
- package/vendor/translators-official/Trove.js +616 -0
- package/vendor/translators-official/Tumblr.js +179 -0
- package/vendor/translators-official/Twitter.js +413 -0
- package/vendor/translators-official/UChicago VuFind.js +907 -0
- package/vendor/translators-official/UNZ Print Archive.js +276 -0
- package/vendor/translators-official/UPCommons.js +227 -0
- package/vendor/translators-official/US National Archives Research Catalog.js +275 -0
- package/vendor/translators-official/USENIX.js +151 -0
- package/vendor/translators-official/Ubiquity Journals.js +228 -0
- package/vendor/translators-official/University Press Scholarship.js +301 -0
- package/vendor/translators-official/University of California Press Books.js +403 -0
- package/vendor/translators-official/University of Chicago Press Books.js +378 -0
- package/vendor/translators-official/University of Wisconsin-Madison Libraries Catalog.js +298 -0
- package/vendor/translators-official/Unqualified Dublin Core RDF.js +153 -0
- package/vendor/translators-official/UpToDate References.js +203 -0
- package/vendor/translators-official/Vanity Fair.js +242 -0
- package/vendor/translators-official/Verniana-Jules Verne Studies.js +190 -0
- package/vendor/translators-official/Verso Books.js +311 -0
- package/vendor/translators-official/Vice.js +445 -0
- package/vendor/translators-official/Victoria & Albert Museum.js +277 -0
- package/vendor/translators-official/Vimeo.js +188 -0
- package/vendor/translators-official/VoxEU.js +151 -0
- package/vendor/translators-official/WHO.js +458 -0
- package/vendor/translators-official/WIPO.js +189 -0
- package/vendor/translators-official/Wall Street Journal.js +809 -0
- package/vendor/translators-official/Wanfang Data.js +310 -0
- package/vendor/translators-official/Washington Monthly.js +195 -0
- package/vendor/translators-official/Washington Post.js +447 -0
- package/vendor/translators-official/Web of Science Nextgen.js +832 -0
- package/vendor/translators-official/Web of Science Tagged.js +1247 -0
- package/vendor/translators-official/Web of Science.js +228 -0
- package/vendor/translators-official/Welt Online.js +161 -0
- package/vendor/translators-official/WestLaw UK.js +190 -0
- package/vendor/translators-official/WikiLeaks PlusD.js +182 -0
- package/vendor/translators-official/Wikidata QuickStatements.js +324 -0
- package/vendor/translators-official/Wikidata.js +911 -0
- package/vendor/translators-official/Wikimedia Commons.js +285 -0
- package/vendor/translators-official/Wikipedia Citation Templates.js +432 -0
- package/vendor/translators-official/Wikipedia.js +385 -0
- package/vendor/translators-official/Wikisource.js +399 -0
- package/vendor/translators-official/Wikiwand.js +122 -0
- package/vendor/translators-official/Wiktionary.js +141 -0
- package/vendor/translators-official/Wildlife Biology in Practice.js +172 -0
- package/vendor/translators-official/Wiley Online Library.js +1412 -0
- package/vendor/translators-official/Wilson Center Digital Archive.js +321 -0
- package/vendor/translators-official/Winnipeg Free Press.js +204 -0
- package/vendor/translators-official/Wired.js +362 -0
- package/vendor/translators-official/Womennews.js +230 -0
- package/vendor/translators-official/World Digital Library.js +403 -0
- package/vendor/translators-official/World History Connected.js +185 -0
- package/vendor/translators-official/World Shakespeare Bibliography Online.js +595 -0
- package/vendor/translators-official/WorldCat Discovery Service.js +630 -0
- package/vendor/translators-official/XML ContextObject.js +274 -0
- package/vendor/translators-official/YPSF.js +224 -0
- package/vendor/translators-official/Yandex Books.js +265 -0
- package/vendor/translators-official/Ynet.js +171 -0
- package/vendor/translators-official/YouTube.js +209 -0
- package/vendor/translators-official/ZIPonline.js +267 -0
- package/vendor/translators-official/ZOBODAT.js +341 -0
- package/vendor/translators-official/Zotero RDF.js +588 -0
- package/vendor/translators-official/ZoteroBib.js +94 -0
- package/vendor/translators-official/arXiv.org.js +1100 -0
- package/vendor/translators-official/artnet.js +207 -0
- package/vendor/translators-official/beck-online.js +1339 -0
- package/vendor/translators-official/clinicaltrials.gov.js +331 -0
- package/vendor/translators-official/dLibra.js +367 -0
- package/vendor/translators-official/dejure.org.js +242 -0
- package/vendor/translators-official/dhistory.js +103 -0
- package/vendor/translators-official/digibib.net.js +245 -0
- package/vendor/translators-official/eLibrary.ru.js +867 -0
- package/vendor/translators-official/eLife.js +462 -0
- package/vendor/translators-official/eMJA.js +246 -0
- package/vendor/translators-official/eMedicine.js +123 -0
- package/vendor/translators-official/ePrint IACR.js +608 -0
- package/vendor/translators-official/ebrary.js +140 -0
- package/vendor/translators-official/etatar.ru.js +104 -0
- package/vendor/translators-official/feb-web.ru.js +167 -0
- package/vendor/translators-official/fishpond.co.nz.js +224 -0
- package/vendor/translators-official/fr-online.de.js +209 -0
- package/vendor/translators-official/govinfo.js +189 -0
- package/vendor/translators-official/informIT database.js +248 -0
- package/vendor/translators-official/io-port.js +68 -0
- package/vendor/translators-official/jurion.js +377 -0
- package/vendor/translators-official/mEDRA.js +597 -0
- package/vendor/translators-official/magazines.russ.ru.js +120 -0
- package/vendor/translators-official/medes.js +284 -0
- package/vendor/translators-official/newshub.co.nz.js +206 -0
- package/vendor/translators-official/newspapers.com.js +335 -0
- package/vendor/translators-official/openJur.js +161 -0
- package/vendor/translators-official/reddit.js +275 -0
- package/vendor/translators-official/sbn.it.js +186 -0
- package/vendor/translators-official/scinapse.js +273 -0
- package/vendor/translators-official/semantics Visual Library.js +643 -0
- package/vendor/translators-official/taz.de.js +200 -0
- package/vendor/translators-official/unAPI.js +481 -0
- package/vendor/translators-official/wiso.js +314 -0
- package/vendor/translators-official/zbMATH.js +278 -0
- package/vendor/translators-official/zotero.org.js +311 -0
- package/vendor/translators_CN/Angle.js +468 -0
- package/vendor/translators_CN/Baidu Baike.js +152 -0
- package/vendor/translators_CN/Baidu Scholar.js +639 -0
- package/vendor/translators_CN/Belt and Road Database.js +496 -0
- package/vendor/translators_CN/BiliBili.js +776 -0
- package/vendor/translators_CN/CCPINFO.js +416 -0
- package/vendor/translators_CN/CHINESE JOURNAL OF LAW.js +169 -0
- package/vendor/translators_CN/CNBKSY.js +385 -0
- package/vendor/translators_CN/CNKI CHKD.js +692 -0
- package/vendor/translators_CN/CNKI Gongjushu.js +271 -0
- package/vendor/translators_CN/CNKI Industry.js +726 -0
- package/vendor/translators_CN/CNKI Law.js +842 -0
- package/vendor/translators_CN/CNKI RefWorks.js +826 -0
- package/vendor/translators_CN/CNKI Refer.js +811 -0
- package/vendor/translators_CN/CNKI Scholar.js +656 -0
- package/vendor/translators_CN/CNKI TIKS.js +1028 -0
- package/vendor/translators_CN/CNKI e-Books.js +309 -0
- package/vendor/translators_CN/CNKI thinker.js +274 -0
- package/vendor/translators_CN/CNKI.js +2381 -0
- package/vendor/translators_CN/CNSDA.js +382 -0
- package/vendor/translators_CN/CQVIP Knowledge.js +969 -0
- package/vendor/translators_CN/CQVIP Qikan.js +418 -0
- package/vendor/translators_CN/CQVIP.js +686 -0
- package/vendor/translators_CN/CSDN.js +153 -0
- package/vendor/translators_CN/China Judgements Online.js +282 -0
- package/vendor/translators_CN/China Social Science Library.js +533 -0
- package/vendor/translators_CN/ChinaXiv.js +375 -0
- package/vendor/translators_CN/Cubox.js +246 -0
- package/vendor/translators_CN/Dangdang.js +176 -0
- package/vendor/translators_CN/Douban.js +984 -0
- package/vendor/translators_CN/Duxiu.js +746 -0
- package/vendor/translators_CN/E-Tiller.js +555 -0
- package/vendor/translators_CN/Encyclopedia of China 3rd.js +177 -0
- package/vendor/translators_CN/Founder.js +483 -0
- package/vendor/translators_CN/GFSOSO.js +694 -0
- package/vendor/translators_CN/Jd.js +235 -0
- package/vendor/translators_CN/Jikan Full Text Database.js +188 -0
- package/vendor/translators_CN/KouShare.js +139 -0
- package/vendor/translators_CN/LICENSE +661 -0
- package/vendor/translators_CN/Lawbank.js +818 -0
- package/vendor/translators_CN/MagTech.js +473 -0
- package/vendor/translators_CN/Modern History.js +788 -0
- package/vendor/translators_CN/NDLTD.js +404 -0
- package/vendor/translators_CN/NTU Digital Library of Buddhist Studies.js +957 -0
- package/vendor/translators_CN/National Public Service Platform for Standards Information - China.js +348 -0
- package/vendor/translators_CN/National Science and Technology Library - China.js +646 -0
- package/vendor/translators_CN/National Science and Technology Report Service - China.js +271 -0
- package/vendor/translators_CN/National Standards Open System - China.js +296 -0
- package/vendor/translators_CN/Ncpssd.js +555 -0
- package/vendor/translators_CN/PKULaw.js +1123 -0
- package/vendor/translators_CN/PatentStar.js +386 -0
- package/vendor/translators_CN/People's Daily Database.js +186 -0
- package/vendor/translators_CN/People's Daily Epaper.js +279 -0
- package/vendor/translators_CN/People's Daily Online.js +292 -0
- package/vendor/translators_CN/Pishu Database.js +383 -0
- package/vendor/translators_CN/ProQuestCN Thesis.js +329 -0
- package/vendor/translators_CN/Pss-System.js +199 -0
- package/vendor/translators_CN/PubScholar.js +588 -0
- package/vendor/translators_CN/Publications Data Center - China.js +1119 -0
- package/vendor/translators_CN/QStheory.js +251 -0
- package/vendor/translators_CN/RDFYBK.js +396 -0
- package/vendor/translators_CN/README.md +42 -0
- package/vendor/translators_CN/RHHZ.js +383 -0
- package/vendor/translators_CN/Rural Studies Database.js +402 -0
- package/vendor/translators_CN/SKCTK.js +177 -0
- package/vendor/translators_CN/Samson.js +768 -0
- package/vendor/translators_CN/SciEngine.js +450 -0
- package/vendor/translators_CN/Science Reading.js +338 -0
- package/vendor/translators_CN/Sina Weibo.js +254 -0
- package/vendor/translators_CN/Soopat.js +427 -0
- package/vendor/translators_CN/Spc.org.cn.js +275 -0
- package/vendor/translators_CN/Standard Full-text Database - NLC.js +230 -0
- package/vendor/translators_CN/SuperLib.js +757 -0
- package/vendor/translators_CN/TOAJ.js +422 -0
- package/vendor/translators_CN/Wanfang Data.js +3433 -0
- package/vendor/translators_CN/Wanfang Med.js +671 -0
- package/vendor/translators_CN/Web of Science Tagged.js +1341 -0
- package/vendor/translators_CN/Weixin.js +130 -0
- package/vendor/translators_CN/Wenjin.js +492 -0
- package/vendor/translators_CN/Xinhuanet.js +283 -0
- package/vendor/translators_CN/Yiigle.js +394 -0
- package/vendor/translators_CN/Zhihu.js +530 -0
- package/vendor/translators_CN/Zhihuiya.js +246 -0
- package/vendor/translators_CN/Zhizhen.js +869 -0
- package/vendor/translators_CN/chaoxingqikan.js +360 -0
- package/vendor/translators_CN/doc.taixueshu.js +355 -0
- package/vendor/translators_CN/dpaper.js +183 -0
- package/vendor/translators_CN/epaper.gmw.cn.js +286 -0
- package/vendor/translators_CN/flk.npc.gov.cn.js +344 -0
- package/vendor/translators_CN/gov.cn Policy.js +559 -0
- package/vendor/translators_CN/incoPat.js +195 -0
- package/vendor/translators_CN/pm.tsgyun.js +177 -0
- package/vendor/translators_CN/sanmin.com.tw.js +327 -0
- package/vendor/translators_CN/sharing.com.tw.js +333 -0
- package/vendor/translators_CN/stats.gov.cn.js +170 -0
- package/vendor/translators_CN/xiaoyuzhoufm.js +162 -0
- package/vendor/translators_CN/zhangqiaokeyan.js +1130 -0
- package/vendor/zotero/README.md +120 -0
- package/vendor/zotero/config/custom-environment-variables.json +3 -0
- package/vendor/zotero/config/default.json5 +16 -0
- package/vendor/zotero/config/production.json5 +7 -0
- package/vendor/zotero/config/test.json5 +4 -0
- package/vendor/zotero/modules/translate/README.md +43 -0
- package/vendor/zotero/modules/translate/src/debug.js +186 -0
- package/vendor/zotero/modules/translate/src/http.js +158 -0
- package/vendor/zotero/modules/translate/src/promise.js +73 -0
- package/vendor/zotero/modules/translate/src/proxy.js +354 -0
- package/vendor/zotero/modules/translate/src/rdf/identity.js +503 -0
- package/vendor/zotero/modules/translate/src/rdf/init.js +56 -0
- package/vendor/zotero/modules/translate/src/rdf/n3parser.js +1392 -0
- package/vendor/zotero/modules/translate/src/rdf/rdfparser.js +578 -0
- package/vendor/zotero/modules/translate/src/rdf/serialize.js +886 -0
- package/vendor/zotero/modules/translate/src/rdf/term.js +524 -0
- package/vendor/zotero/modules/translate/src/rdf/uri.js +147 -0
- package/vendor/zotero/modules/translate/src/repo.js +80 -0
- package/vendor/zotero/modules/translate/src/tlds.js +274 -0
- package/vendor/zotero/modules/translate/src/translation/sandboxManager.js +112 -0
- package/vendor/zotero/modules/translate/src/translation/translate.js +3283 -0
- package/vendor/zotero/modules/translate/src/translation/translate_item.js +120 -0
- package/vendor/zotero/modules/translate/src/translator.js +186 -0
- package/vendor/zotero/modules/translate/src/translators.js +174 -0
- package/vendor/zotero/modules/translate/src/utilities_translate.js +487 -0
- package/vendor/zotero/modules/translate/src/zotero.js +94 -0
- package/vendor/zotero/modules/translators/A Contra Corriente.js +206 -0
- package/vendor/zotero/modules/translators/ABC News Australia.js +224 -0
- package/vendor/zotero/modules/translators/ACLS Humanities EBook.js +165 -0
- package/vendor/zotero/modules/translators/ACLWeb.js +600 -0
- package/vendor/zotero/modules/translators/ACM Digital Library.js +710 -0
- package/vendor/zotero/modules/translators/ACS Publications.js +633 -0
- package/vendor/zotero/modules/translators/ADS Bibcode.js +664 -0
- package/vendor/zotero/modules/translators/AEA Web.js +450 -0
- package/vendor/zotero/modules/translators/AGRIS.js +311 -0
- package/vendor/zotero/modules/translators/AIP.js +295 -0
- package/vendor/zotero/modules/translators/AMS Journals.js +136 -0
- package/vendor/zotero/modules/translators/AMS MathSciNet (Legacy).js +313 -0
- package/vendor/zotero/modules/translators/AMS MathSciNet.js +288 -0
- package/vendor/zotero/modules/translators/APA PsycNET.js +915 -0
- package/vendor/zotero/modules/translators/APN.ru.js +132 -0
- package/vendor/zotero/modules/translators/APS-Physics.js +204 -0
- package/vendor/zotero/modules/translators/APS.js +542 -0
- package/vendor/zotero/modules/translators/ARTFL Encyclopedie.js +283 -0
- package/vendor/zotero/modules/translators/ARTnews.js +155 -0
- package/vendor/zotero/modules/translators/ARTstor.js +619 -0
- package/vendor/zotero/modules/translators/ASCE.js +199 -0
- package/vendor/zotero/modules/translators/ASCO Meeting Library.js +153 -0
- package/vendor/zotero/modules/translators/ASTIS.js +337 -0
- package/vendor/zotero/modules/translators/ATS International Journal.js +290 -0
- package/vendor/zotero/modules/translators/Access Engineering.js +384 -0
- package/vendor/zotero/modules/translators/Access Medicine.js +343 -0
- package/vendor/zotero/modules/translators/Access Science.js +391 -0
- package/vendor/zotero/modules/translators/Adam Matthew Digital.js +405 -0
- package/vendor/zotero/modules/translators/Agencia del ISBN.js +77 -0
- package/vendor/zotero/modules/translators/Ahval News.js +309 -0
- package/vendor/zotero/modules/translators/Air University Journals.js +236 -0
- package/vendor/zotero/modules/translators/Airiti.js +423 -0
- package/vendor/zotero/modules/translators/Alexander Street Press.js +198 -0
- package/vendor/zotero/modules/translators/AllAfrica.js +291 -0
- package/vendor/zotero/modules/translators/Alsharekh.js +242 -0
- package/vendor/zotero/modules/translators/AlterNet.js +134 -0
- package/vendor/zotero/modules/translators/Aluka.js +261 -0
- package/vendor/zotero/modules/translators/Amazon.js +1043 -0
- package/vendor/zotero/modules/translators/American Archive of Public Broadcasting.js +592 -0
- package/vendor/zotero/modules/translators/American Institute of Aeronautics and Astronautics.js +210 -0
- package/vendor/zotero/modules/translators/American Prospect.js +114 -0
- package/vendor/zotero/modules/translators/Ancestry.com US Federal Census.js +164 -0
- package/vendor/zotero/modules/translators/Annual Reviews.js +329 -0
- package/vendor/zotero/modules/translators/Antikvarium.hu.js +280 -0
- package/vendor/zotero/modules/translators/AquaDocs.js +390 -0
- package/vendor/zotero/modules/translators/Archeion.js +249 -0
- package/vendor/zotero/modules/translators/Archiv fuer Sozialgeschichte.js +157 -0
- package/vendor/zotero/modules/translators/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +179 -0
- package/vendor/zotero/modules/translators/Archives Canada.js +142 -0
- package/vendor/zotero/modules/translators/Ariana News.js +203 -0
- package/vendor/zotero/modules/translators/Art Institute of Chicago.js +279 -0
- package/vendor/zotero/modules/translators/Artefacts Canada.js +192 -0
- package/vendor/zotero/modules/translators/Artforum.js +438 -0
- package/vendor/zotero/modules/translators/Atlanta Journal Constitution.js +155 -0
- package/vendor/zotero/modules/translators/Atlanta Journal-Constitution.js +311 -0
- package/vendor/zotero/modules/translators/Atypon Journals.js +1204 -0
- package/vendor/zotero/modules/translators/AustLII and NZLII.js +604 -0
- package/vendor/zotero/modules/translators/Australian Dictionary of Biography.js +196 -0
- package/vendor/zotero/modules/translators/BAILII.js +176 -0
- package/vendor/zotero/modules/translators/BBC Genome.js +254 -0
- package/vendor/zotero/modules/translators/BBC.js +430 -0
- package/vendor/zotero/modules/translators/BIBSYS.js +112 -0
- package/vendor/zotero/modules/translators/BOCC.js +217 -0
- package/vendor/zotero/modules/translators/BOE.js +229 -0
- package/vendor/zotero/modules/translators/BOFiP-Impots.js +132 -0
- package/vendor/zotero/modules/translators/Baidu Scholar.js +276 -0
- package/vendor/zotero/modules/translators/Bangkok Post.js +216 -0
- package/vendor/zotero/modules/translators/Baruch Foundation.js +175 -0
- package/vendor/zotero/modules/translators/Beobachter.js +175 -0
- package/vendor/zotero/modules/translators/Bezneng Gajit.js +92 -0
- package/vendor/zotero/modules/translators/BibLaTeX.js +888 -0
- package/vendor/zotero/modules/translators/BibTeX.js +4236 -0
- package/vendor/zotero/modules/translators/Biblio.com.js +216 -0
- package/vendor/zotero/modules/translators/Bibliontology RDF.js +1166 -0
- package/vendor/zotero/modules/translators/Biblioteca Nacional de Maestros.js +213 -0
- package/vendor/zotero/modules/translators/Bibliotheque et Archives Nationale du Quebec (Pistard).js +147 -0
- package/vendor/zotero/modules/translators/Bibliotheque et Archives Nationales du Quebec.js +266 -0
- package/vendor/zotero/modules/translators/Bibliotheque nationale de France.js +872 -0
- package/vendor/zotero/modules/translators/BioMed Central.js +585 -0
- package/vendor/zotero/modules/translators/BioOne.js +233 -0
- package/vendor/zotero/modules/translators/Bioconductor.js +343 -0
- package/vendor/zotero/modules/translators/Blaetter.js +192 -0
- package/vendor/zotero/modules/translators/Blogger.js +244 -0
- package/vendor/zotero/modules/translators/Bloomberg.js +205 -0
- package/vendor/zotero/modules/translators/Bloomsbury Food Library.js +296 -0
- package/vendor/zotero/modules/translators/Bluesky.js +195 -0
- package/vendor/zotero/modules/translators/BnF ISBN.js +129 -0
- package/vendor/zotero/modules/translators/Bookmarks.js +282 -0
- package/vendor/zotero/modules/translators/Bookshop.org.js +223 -0
- package/vendor/zotero/modules/translators/Boston Review.js +332 -0
- package/vendor/zotero/modules/translators/Bosworth Toller's Anglo-Saxon Dictionary Online.js +496 -0
- package/vendor/zotero/modules/translators/Bracero History Archive.js +200 -0
- package/vendor/zotero/modules/translators/Brill Journals.js +168 -0
- package/vendor/zotero/modules/translators/Brill.js +434 -0
- package/vendor/zotero/modules/translators/Brukerhandboken.js +153 -0
- package/vendor/zotero/modules/translators/Bryn Mawr Classical Review.js +303 -0
- package/vendor/zotero/modules/translators/Bundesgesetzblatt.js +231 -0
- package/vendor/zotero/modules/translators/Business Standard.js +151 -0
- package/vendor/zotero/modules/translators/CABI - CAB Abstracts.js +317 -0
- package/vendor/zotero/modules/translators/CAOD.js +260 -0
- package/vendor/zotero/modules/translators/CBC.js +439 -0
- package/vendor/zotero/modules/translators/CCfr (BnF).js +162 -0
- package/vendor/zotero/modules/translators/CERN Document Server.js +277 -0
- package/vendor/zotero/modules/translators/CEUR Workshop Proceedings.js +145 -0
- package/vendor/zotero/modules/translators/CFF References.js +170 -0
- package/vendor/zotero/modules/translators/CFF.js +113 -0
- package/vendor/zotero/modules/translators/CIA World Factbook.js +128 -0
- package/vendor/zotero/modules/translators/CLACSO.js +226 -0
- package/vendor/zotero/modules/translators/CLASE.js +135 -0
- package/vendor/zotero/modules/translators/CNKI.js +731 -0
- package/vendor/zotero/modules/translators/COBISS.js +1945 -0
- package/vendor/zotero/modules/translators/COinS.js +336 -0
- package/vendor/zotero/modules/translators/CQ Press.js +418 -0
- package/vendor/zotero/modules/translators/CROSBI.js +227 -0
- package/vendor/zotero/modules/translators/CSIRO Publishing.js +139 -0
- package/vendor/zotero/modules/translators/CSL JSON.js +203 -0
- package/vendor/zotero/modules/translators/CSV.js +294 -0
- package/vendor/zotero/modules/translators/Cairn.info.js +368 -0
- package/vendor/zotero/modules/translators/CalMatters.js +228 -0
- package/vendor/zotero/modules/translators/Calisphere.js +355 -0
- package/vendor/zotero/modules/translators/Camara Brasileira do Livro ISBN.js +842 -0
- package/vendor/zotero/modules/translators/Cambridge Core.js +580 -0
- package/vendor/zotero/modules/translators/Cambridge Engage Preprints.js +276 -0
- package/vendor/zotero/modules/translators/CanLII.js +284 -0
- package/vendor/zotero/modules/translators/Canada.com.js +171 -0
- package/vendor/zotero/modules/translators/Canadian Letters and Images.js +148 -0
- package/vendor/zotero/modules/translators/Canadiana.ca.js +196 -0
- package/vendor/zotero/modules/translators/Cascadilla Proceedings Project.js +390 -0
- package/vendor/zotero/modules/translators/Cell Press.js +516 -0
- package/vendor/zotero/modules/translators/Central and Eastern European Online Library Journals.js +313 -0
- package/vendor/zotero/modules/translators/Champlain Society - Collection.js +220 -0
- package/vendor/zotero/modules/translators/Chicago Journal of Theoretical Computer Science.js +203 -0
- package/vendor/zotero/modules/translators/Christian Science Monitor.js +148 -0
- package/vendor/zotero/modules/translators/Chronicling America.js +131 -0
- package/vendor/zotero/modules/translators/CiNii Research.js +168 -0
- package/vendor/zotero/modules/translators/Citavi 5 XML.js +516 -0
- package/vendor/zotero/modules/translators/CiteSeer.js +196 -0
- package/vendor/zotero/modules/translators/CiteULike.js +170 -0
- package/vendor/zotero/modules/translators/Citizen Lab.js +347 -0
- package/vendor/zotero/modules/translators/Civilization.ca.js +146 -0
- package/vendor/zotero/modules/translators/Climate Change and Human Health Literature Portal.js +283 -0
- package/vendor/zotero/modules/translators/Clinical Key.js +367 -0
- package/vendor/zotero/modules/translators/Code4Lib Journal.js +143 -0
- package/vendor/zotero/modules/translators/Colorado State Legislature.js +215 -0
- package/vendor/zotero/modules/translators/Columbia University Press.js +238 -0
- package/vendor/zotero/modules/translators/Common-Place.js +218 -0
- package/vendor/zotero/modules/translators/Computer History Museum Archive.js +1319 -0
- package/vendor/zotero/modules/translators/Copernicus.js +461 -0
- package/vendor/zotero/modules/translators/Cornell LII.js +252 -0
- package/vendor/zotero/modules/translators/Cornell University Press.js +235 -0
- package/vendor/zotero/modules/translators/CourtListener.js +265 -0
- package/vendor/zotero/modules/translators/CrossRef.js +486 -0
- package/vendor/zotero/modules/translators/Crossref REST.js +1757 -0
- package/vendor/zotero/modules/translators/Crossref Unixref XML.js +965 -0
- package/vendor/zotero/modules/translators/Current Affairs.js +160 -0
- package/vendor/zotero/modules/translators/Cyberpresse.js +131 -0
- package/vendor/zotero/modules/translators/DABI.js +476 -0
- package/vendor/zotero/modules/translators/DAI-Zenon.js +392 -0
- package/vendor/zotero/modules/translators/DART-Europe.js +176 -0
- package/vendor/zotero/modules/translators/DBLP Computer Science Bibliography.js +462 -0
- package/vendor/zotero/modules/translators/DBpia.js +233 -0
- package/vendor/zotero/modules/translators/DEPATISnet.js +373 -0
- package/vendor/zotero/modules/translators/DOAJ.js +243 -0
- package/vendor/zotero/modules/translators/DOI Content Negotiation.js +352 -0
- package/vendor/zotero/modules/translators/DOI.js +322 -0
- package/vendor/zotero/modules/translators/DPLA.js +425 -0
- package/vendor/zotero/modules/translators/DSpace Intermediate Metadata.js +208 -0
- package/vendor/zotero/modules/translators/DTU Orbit.js +155 -0
- package/vendor/zotero/modules/translators/Dagens Nyheter.js +369 -0
- package/vendor/zotero/modules/translators/Dagstuhl Research Online Publication Server.js +276 -0
- package/vendor/zotero/modules/translators/Dar Almandumah.js +253 -0
- package/vendor/zotero/modules/translators/Data.gov.js +225 -0
- package/vendor/zotero/modules/translators/DataCite.js +125 -0
- package/vendor/zotero/modules/translators/Databrary.js +184 -0
- package/vendor/zotero/modules/translators/Datacite JSON.js +1182 -0
- package/vendor/zotero/modules/translators/Dataverse.js +418 -0
- package/vendor/zotero/modules/translators/Daum News.js +139 -0
- package/vendor/zotero/modules/translators/De Gruyter Brill.js +674 -0
- package/vendor/zotero/modules/translators/DeGruyter.js +457 -0
- package/vendor/zotero/modules/translators/Defense Technical Information Center.js +146 -0
- package/vendor/zotero/modules/translators/Delpher.js +413 -0
- package/vendor/zotero/modules/translators/Demographic Research.js +164 -0
- package/vendor/zotero/modules/translators/Denik CZ.js +273 -0
- package/vendor/zotero/modules/translators/Der Freitag.js +236 -0
- package/vendor/zotero/modules/translators/Der Spiegel.js +479 -0
- package/vendor/zotero/modules/translators/Desiring God.js +216 -0
- package/vendor/zotero/modules/translators/Deutsche Fotothek.js +364 -0
- package/vendor/zotero/modules/translators/Deutsche Nationalbibliothek.js +594 -0
- package/vendor/zotero/modules/translators/Dialnet.js +258 -0
- package/vendor/zotero/modules/translators/Die Zeit.js +378 -0
- package/vendor/zotero/modules/translators/DigiZeitschriften.js +269 -0
- package/vendor/zotero/modules/translators/Digital Humanities Quarterly.js +207 -0
- package/vendor/zotero/modules/translators/Digital Medievalist.js +149 -0
- package/vendor/zotero/modules/translators/Digital Spy.js +215 -0
- package/vendor/zotero/modules/translators/Dimensions.js +233 -0
- package/vendor/zotero/modules/translators/Douban.js +316 -0
- package/vendor/zotero/modules/translators/Dreier Neuerscheinungsdienst.js +209 -0
- package/vendor/zotero/modules/translators/DrugBank.ca.js +209 -0
- package/vendor/zotero/modules/translators/Dryad Digital Repository.js +323 -0
- package/vendor/zotero/modules/translators/Duke University Press Books.js +250 -0
- package/vendor/zotero/modules/translators/E-periodica Switzerland.js +347 -0
- package/vendor/zotero/modules/translators/EBSCO Discovery Layer.js +147 -0
- package/vendor/zotero/modules/translators/EBSCOhost.js +592 -0
- package/vendor/zotero/modules/translators/EIDR.js +184 -0
- package/vendor/zotero/modules/translators/EPA National Library Catalog.js +245 -0
- package/vendor/zotero/modules/translators/ERIC.js +986 -0
- package/vendor/zotero/modules/translators/ESpacenet.js +465 -0
- package/vendor/zotero/modules/translators/EUR-Lex.js +423 -0
- package/vendor/zotero/modules/translators/Eastview.js +336 -0
- package/vendor/zotero/modules/translators/Edinburgh University Press Journals.js +178 -0
- package/vendor/zotero/modules/translators/Education Week.js +197 -0
- package/vendor/zotero/modules/translators/El Comercio (Peru).js +347 -0
- package/vendor/zotero/modules/translators/El Pais.js +262 -0
- package/vendor/zotero/modules/translators/Electronic Colloquium on Computational Complexity.js +230 -0
- package/vendor/zotero/modules/translators/Elicit.js +120 -0
- package/vendor/zotero/modules/translators/Elsevier Health Journals.js +531 -0
- package/vendor/zotero/modules/translators/Elsevier Pure.js +420 -0
- package/vendor/zotero/modules/translators/Embedded Metadata.js +1951 -0
- package/vendor/zotero/modules/translators/Emerald Insight.js +626 -0
- package/vendor/zotero/modules/translators/Encyclopedia of Chicago.js +162 -0
- package/vendor/zotero/modules/translators/Encyclopedia of Korean Culture.js +221 -0
- package/vendor/zotero/modules/translators/Endnote XML.js +1407 -0
- package/vendor/zotero/modules/translators/Engineering Village.js +139 -0
- package/vendor/zotero/modules/translators/Envidat.js +331 -0
- package/vendor/zotero/modules/translators/Epicurious.js +144 -0
- package/vendor/zotero/modules/translators/Erudit.js +272 -0
- package/vendor/zotero/modules/translators/Euclid.js +220 -0
- package/vendor/zotero/modules/translators/EurasiaNet.js +109 -0
- package/vendor/zotero/modules/translators/Eurogamer.js +112 -0
- package/vendor/zotero/modules/translators/EurogamerUSgamer.js +380 -0
- package/vendor/zotero/modules/translators/Europe PMC.js +448 -0
- package/vendor/zotero/modules/translators/Evernote.js +104 -0
- package/vendor/zotero/modules/translators/F1000 Research.js +655 -0
- package/vendor/zotero/modules/translators/FAO Publications.js +1139 -0
- package/vendor/zotero/modules/translators/FAZ.NET.js +231 -0
- package/vendor/zotero/modules/translators/Fachportal Padagogik.js +839 -0
- package/vendor/zotero/modules/translators/Factiva.js +302 -0
- package/vendor/zotero/modules/translators/Failed Architecture.js +114 -0
- package/vendor/zotero/modules/translators/Fairfax Australia.js +200 -0
- package/vendor/zotero/modules/translators/Fatcat.js +425 -0
- package/vendor/zotero/modules/translators/Figshare.js +191 -0
- package/vendor/zotero/modules/translators/Financial Times.js +187 -0
- package/vendor/zotero/modules/translators/Finna.js +357 -0
- package/vendor/zotero/modules/translators/Flickr.js +318 -0
- package/vendor/zotero/modules/translators/Foreign Affairs.js +485 -0
- package/vendor/zotero/modules/translators/Foreign Policy.js +146 -0
- package/vendor/zotero/modules/translators/FreeCite.js +95 -0
- package/vendor/zotero/modules/translators/FreePatentsOnline.js +265 -0
- package/vendor/zotero/modules/translators/Frieze.js +243 -0
- package/vendor/zotero/modules/translators/Frontiers.js +667 -0
- package/vendor/zotero/modules/translators/GMS German Medical Science.js +319 -0
- package/vendor/zotero/modules/translators/GPO Access e-CFR.js +134 -0
- package/vendor/zotero/modules/translators/Gale Databases.js +324 -0
- package/vendor/zotero/modules/translators/GaleGDC.js +189 -0
- package/vendor/zotero/modules/translators/Galegroup.js +327 -0
- package/vendor/zotero/modules/translators/Gallica.js +194 -0
- package/vendor/zotero/modules/translators/Game Studies.js +155 -0
- package/vendor/zotero/modules/translators/GameSpot.js +199 -0
- package/vendor/zotero/modules/translators/GameStar GamePro.js +198 -0
- package/vendor/zotero/modules/translators/Gasyrlar Awazy.js +156 -0
- package/vendor/zotero/modules/translators/Gemeinsamer Bibliotheksverbund ISBN.js +23 -0
- package/vendor/zotero/modules/translators/Gene Ontology.js +128 -0
- package/vendor/zotero/modules/translators/Github.js +268 -0
- package/vendor/zotero/modules/translators/Globes.js +243 -0
- package/vendor/zotero/modules/translators/Gmail.js +64 -0
- package/vendor/zotero/modules/translators/Goodreads.js +219 -0
- package/vendor/zotero/modules/translators/Google Books.js +552 -0
- package/vendor/zotero/modules/translators/Google Patents.js +959 -0
- package/vendor/zotero/modules/translators/Google Play.js +186 -0
- package/vendor/zotero/modules/translators/Google Presentation.js +104 -0
- package/vendor/zotero/modules/translators/Google Research.js +221 -0
- package/vendor/zotero/modules/translators/Google Scholar.js +1361 -0
- package/vendor/zotero/modules/translators/Gulag Many Days, Many Lives.js +179 -0
- package/vendor/zotero/modules/translators/HAL Archives Ouvertes.js +429 -0
- package/vendor/zotero/modules/translators/HCSP.js +312 -0
- package/vendor/zotero/modules/translators/HUDOC.js +650 -0
- package/vendor/zotero/modules/translators/Haaretz.js +562 -0
- package/vendor/zotero/modules/translators/Habr.js +232 -0
- package/vendor/zotero/modules/translators/Handelszeitung.js +273 -0
- package/vendor/zotero/modules/translators/Hanrei Watch.js +123 -0
- package/vendor/zotero/modules/translators/Harper's Magazine.js +365 -0
- package/vendor/zotero/modules/translators/Harpers.js +209 -0
- package/vendor/zotero/modules/translators/Harvard Business Review.js +326 -0
- package/vendor/zotero/modules/translators/Harvard Caselaw Access Project.js +244 -0
- package/vendor/zotero/modules/translators/Harvard University Press Books.js +286 -0
- package/vendor/zotero/modules/translators/Hathi Trust.js +164 -0
- package/vendor/zotero/modules/translators/HathiTrust.js +311 -0
- package/vendor/zotero/modules/translators/HeinOnline.js +266 -0
- package/vendor/zotero/modules/translators/Heise.js +200 -0
- package/vendor/zotero/modules/translators/Herder.js +236 -0
- package/vendor/zotero/modules/translators/HighBeam.js +198 -0
- package/vendor/zotero/modules/translators/HighWire 2.0.js +1355 -0
- package/vendor/zotero/modules/translators/HighWire.js +209 -0
- package/vendor/zotero/modules/translators/Hindawi Publishers.js +177 -0
- package/vendor/zotero/modules/translators/Hispanic-American Periodical Index.js +236 -0
- package/vendor/zotero/modules/translators/Homeland Security Digital Library.js +426 -0
- package/vendor/zotero/modules/translators/Hoovers.js +89 -0
- package/vendor/zotero/modules/translators/Huff Post.js +223 -0
- package/vendor/zotero/modules/translators/Human Rights Watch.js +450 -0
- package/vendor/zotero/modules/translators/IBISWorld.js +171 -0
- package/vendor/zotero/modules/translators/IDEA ALM.js +536 -0
- package/vendor/zotero/modules/translators/IEEE Computer Society.js +429 -0
- package/vendor/zotero/modules/translators/IEEE Xplore.js +1000 -0
- package/vendor/zotero/modules/translators/IETF.js +451 -0
- package/vendor/zotero/modules/translators/IGN.js +136 -0
- package/vendor/zotero/modules/translators/IMDb.js +566 -0
- package/vendor/zotero/modules/translators/INSPIRE.js +247 -0
- package/vendor/zotero/modules/translators/IPCC.js +757 -0
- package/vendor/zotero/modules/translators/ISTC.js +181 -0
- package/vendor/zotero/modules/translators/Idref.js +179 -0
- package/vendor/zotero/modules/translators/In These Times.js +196 -0
- package/vendor/zotero/modules/translators/InfoTrac.js +279 -0
- package/vendor/zotero/modules/translators/Informationssystem Medienpaedagogik.js +305 -0
- package/vendor/zotero/modules/translators/IngentaConnect.js +312 -0
- package/vendor/zotero/modules/translators/Inside Higher Ed.js +167 -0
- package/vendor/zotero/modules/translators/Insignia OPAC.js +114 -0
- package/vendor/zotero/modules/translators/Institute of Contemporary Art.js +180 -0
- package/vendor/zotero/modules/translators/Institute of Physics.js +340 -0
- package/vendor/zotero/modules/translators/Integrum.js +173 -0
- package/vendor/zotero/modules/translators/Intellixir.js +264 -0
- package/vendor/zotero/modules/translators/Inter-Research Science Center.js +185 -0
- package/vendor/zotero/modules/translators/International Nuclear Information System.js +285 -0
- package/vendor/zotero/modules/translators/Internet Archive Scholar.js +106 -0
- package/vendor/zotero/modules/translators/Internet Archive Wayback Machine.js +152 -0
- package/vendor/zotero/modules/translators/Internet Archive.js +552 -0
- package/vendor/zotero/modules/translators/InvenioRDM.js +1260 -0
- package/vendor/zotero/modules/translators/Isidore.js +235 -0
- package/vendor/zotero/modules/translators/J-Stage.js +272 -0
- package/vendor/zotero/modules/translators/JETS.js +122 -0
- package/vendor/zotero/modules/translators/JISC Historical Texts.js +273 -0
- package/vendor/zotero/modules/translators/JRC Publications Repository.js +569 -0
- package/vendor/zotero/modules/translators/JSTOR.js +821 -0
- package/vendor/zotero/modules/translators/Jahrbuch.js +213 -0
- package/vendor/zotero/modules/translators/Japan Times Online.js +138 -0
- package/vendor/zotero/modules/translators/Journal of Electronic Publishing.js +147 -0
- package/vendor/zotero/modules/translators/Journal of Extension.js +288 -0
- package/vendor/zotero/modules/translators/Journal of Machine Learning Research.js +441 -0
- package/vendor/zotero/modules/translators/Journal of Religion and Society.js +174 -0
- package/vendor/zotero/modules/translators/JurPC.js +274 -0
- package/vendor/zotero/modules/translators/Juricaf.js +141 -0
- package/vendor/zotero/modules/translators/Juris.js +728 -0
- package/vendor/zotero/modules/translators/K10plus ISBN.js +386 -0
- package/vendor/zotero/modules/translators/KStudy.js +632 -0
- package/vendor/zotero/modules/translators/Kanopy.js +358 -0
- package/vendor/zotero/modules/translators/Khaama Press.js +249 -0
- package/vendor/zotero/modules/translators/KitapYurdu.com.js +376 -0
- package/vendor/zotero/modules/translators/Kommersant.js +174 -0
- package/vendor/zotero/modules/translators/Korean National Library.js +621 -0
- package/vendor/zotero/modules/translators/L'Annee Philologique.js +267 -0
- package/vendor/zotero/modules/translators/LA Times.js +239 -0
- package/vendor/zotero/modules/translators/LIBRIS ISBN.js +103 -0
- package/vendor/zotero/modules/translators/LIVIVO.js +260 -0
- package/vendor/zotero/modules/translators/LWN.net.js +350 -0
- package/vendor/zotero/modules/translators/La Croix.js +237 -0
- package/vendor/zotero/modules/translators/La Nacion (Argentina).js +231 -0
- package/vendor/zotero/modules/translators/La Presse.js +218 -0
- package/vendor/zotero/modules/translators/La Republica (Peru).js +174 -0
- package/vendor/zotero/modules/translators/Lagen.nu.js +214 -0
- package/vendor/zotero/modules/translators/Landesbibliographie Baden-Wurttemberg.js +324 -0
- package/vendor/zotero/modules/translators/Lapham's Quarterly.js +1062 -0
- package/vendor/zotero/modules/translators/Le Devoir.js +167 -0
- package/vendor/zotero/modules/translators/Le Figaro.js +225 -0
- package/vendor/zotero/modules/translators/Le Maitron.js +484 -0
- package/vendor/zotero/modules/translators/Le Monde.js +258 -0
- package/vendor/zotero/modules/translators/Le monde diplomatique.js +200 -0
- package/vendor/zotero/modules/translators/Legifrance.js +641 -0
- package/vendor/zotero/modules/translators/Legislative Insight.js +406 -0
- package/vendor/zotero/modules/translators/Lexis+.js +264 -0
- package/vendor/zotero/modules/translators/LexisNexis.js +505 -0
- package/vendor/zotero/modules/translators/Libraries Tasmania.js +778 -0
- package/vendor/zotero/modules/translators/Library Catalog (Aleph).js +385 -0
- package/vendor/zotero/modules/translators/Library Catalog (Amicus).js +254 -0
- package/vendor/zotero/modules/translators/Library Catalog (Aquabrowser).js +253 -0
- package/vendor/zotero/modules/translators/Library Catalog (BiblioCommons).js +249 -0
- package/vendor/zotero/modules/translators/Library Catalog (Blacklight).js +341 -0
- package/vendor/zotero/modules/translators/Library Catalog (Capita Prism).js +162 -0
- package/vendor/zotero/modules/translators/Library Catalog (DRA).js +203 -0
- package/vendor/zotero/modules/translators/Library Catalog (Dynix).js +315 -0
- package/vendor/zotero/modules/translators/Library Catalog (EBSCO Locate).js +349 -0
- package/vendor/zotero/modules/translators/Library Catalog (Encore).js +211 -0
- package/vendor/zotero/modules/translators/Library Catalog (GEAC).js +104 -0
- package/vendor/zotero/modules/translators/Library Catalog (InnoPAC).js +305 -0
- package/vendor/zotero/modules/translators/Library Catalog (Koha).js +225 -0
- package/vendor/zotero/modules/translators/Library Catalog (Mango).js +285 -0
- package/vendor/zotero/modules/translators/Library Catalog (OPALS).js +200 -0
- package/vendor/zotero/modules/translators/Library Catalog (PICA).js +2120 -0
- package/vendor/zotero/modules/translators/Library Catalog (PICA2).js +331 -0
- package/vendor/zotero/modules/translators/Library Catalog (Pika).js +488 -0
- package/vendor/zotero/modules/translators/Library Catalog (Polaris).js +183 -0
- package/vendor/zotero/modules/translators/Library Catalog (Quolto).js +320 -0
- package/vendor/zotero/modules/translators/Library Catalog (RERO ILS).js +754 -0
- package/vendor/zotero/modules/translators/Library Catalog (SIRSI eLibrary).js +407 -0
- package/vendor/zotero/modules/translators/Library Catalog (SIRSI).js +452 -0
- package/vendor/zotero/modules/translators/Library Catalog (SLIMS).js +146 -0
- package/vendor/zotero/modules/translators/Library Catalog (TIND ILS).js +773 -0
- package/vendor/zotero/modules/translators/Library Catalog (TLCYouSeeMore).js +132 -0
- package/vendor/zotero/modules/translators/Library Catalog (TinREAD).js +277 -0
- package/vendor/zotero/modules/translators/Library Catalog (VTLS).js +125 -0
- package/vendor/zotero/modules/translators/Library Catalog (Visual Library 2021).js +765 -0
- package/vendor/zotero/modules/translators/Library Catalog (Voyager 7).js +199 -0
- package/vendor/zotero/modules/translators/Library Catalog (Voyager).js +212 -0
- package/vendor/zotero/modules/translators/Library Genesis.js +337 -0
- package/vendor/zotero/modules/translators/Library Hub Discover.js +359 -0
- package/vendor/zotero/modules/translators/Library of Congress Digital Collections.js +869 -0
- package/vendor/zotero/modules/translators/Library of Congress ISBN.js +86 -0
- package/vendor/zotero/modules/translators/LingBuzz.js +359 -0
- package/vendor/zotero/modules/translators/Lippincott Williams and Wilkins.js +341 -0
- package/vendor/zotero/modules/translators/Literary Hub.js +950 -0
- package/vendor/zotero/modules/translators/Litres.js +236 -0
- package/vendor/zotero/modules/translators/LiveJournal.js +219 -0
- package/vendor/zotero/modules/translators/London Review of Books.js +291 -0
- package/vendor/zotero/modules/translators/LookUs.js +260 -0
- package/vendor/zotero/modules/translators/Lulu.js +264 -0
- package/vendor/zotero/modules/translators/MAB2.js +373 -0
- package/vendor/zotero/modules/translators/MARC.js +1080 -0
- package/vendor/zotero/modules/translators/MARCXML.js +489 -0
- package/vendor/zotero/modules/translators/MCV.js +258 -0
- package/vendor/zotero/modules/translators/MDPI Journals.js +356 -0
- package/vendor/zotero/modules/translators/MEDLINEnbib.js +1561 -0
- package/vendor/zotero/modules/translators/METS.js +384 -0
- package/vendor/zotero/modules/translators/MIDAS Journals.js +343 -0
- package/vendor/zotero/modules/translators/MIT Press Books.js +637 -0
- package/vendor/zotero/modules/translators/MIT Press Journals.js +176 -0
- package/vendor/zotero/modules/translators/MODS.js +2545 -0
- package/vendor/zotero/modules/translators/MPG PuRe.js +541 -0
- package/vendor/zotero/modules/translators/Mailman.js +136 -0
- package/vendor/zotero/modules/translators/Mainichi Daily News.js +189 -0
- package/vendor/zotero/modules/translators/Mastodon.js +198 -0
- package/vendor/zotero/modules/translators/Matbugat.ru.js +110 -0
- package/vendor/zotero/modules/translators/Max Planck Institute for the History of Science Virtual Laboratory Library.js +136 -0
- package/vendor/zotero/modules/translators/Medium.js +208 -0
- package/vendor/zotero/modules/translators/MetaLib.js +126 -0
- package/vendor/zotero/modules/translators/Microbiology Society Journals.js +343 -0
- package/vendor/zotero/modules/translators/Microsoft Academic.js +424 -0
- package/vendor/zotero/modules/translators/Mikromarc.js +207 -0
- package/vendor/zotero/modules/translators/Milli Kutuphane.js +244 -0
- package/vendor/zotero/modules/translators/Musee du Louvre.js +265 -0
- package/vendor/zotero/modules/translators/NASA ADS.js +889 -0
- package/vendor/zotero/modules/translators/NASA NTRS.js +610 -0
- package/vendor/zotero/modules/translators/NCBI Nucleotide.js +227 -0
- package/vendor/zotero/modules/translators/NPR.js +341 -0
- package/vendor/zotero/modules/translators/NRC Research Press.js +181 -0
- package/vendor/zotero/modules/translators/NRC.nl.js +226 -0
- package/vendor/zotero/modules/translators/NTSB Accident Reports.js +226 -0
- package/vendor/zotero/modules/translators/NYPL Menus.js +275 -0
- package/vendor/zotero/modules/translators/NYPL Research Catalog.js +458 -0
- package/vendor/zotero/modules/translators/NYTimes.com.js +858 -0
- package/vendor/zotero/modules/translators/NZZ.ch.js +272 -0
- package/vendor/zotero/modules/translators/Nagoya University OPAC.js +336 -0
- package/vendor/zotero/modules/translators/National Academies Press.js +243 -0
- package/vendor/zotero/modules/translators/National Agriculture Library.js +524 -0
- package/vendor/zotero/modules/translators/National Archive of the UK.js +237 -0
- package/vendor/zotero/modules/translators/National Archives of Australia.js +522 -0
- package/vendor/zotero/modules/translators/National Archives of South Africa.js +122 -0
- package/vendor/zotero/modules/translators/National Archives of the United States.js +278 -0
- package/vendor/zotero/modules/translators/National Bureau of Economic Research.js +363 -0
- package/vendor/zotero/modules/translators/National Diet Library Catalogue.js +333 -0
- package/vendor/zotero/modules/translators/National Gallery of Art - USA.js +149 -0
- package/vendor/zotero/modules/translators/National Gallery of Australia.js +252 -0
- package/vendor/zotero/modules/translators/National Library of Australia (new catalog).js +223 -0
- package/vendor/zotero/modules/translators/National Library of Belarus.js +171 -0
- package/vendor/zotero/modules/translators/National Library of Norway.js +310 -0
- package/vendor/zotero/modules/translators/National Library of Poland ISBN.js +140 -0
- package/vendor/zotero/modules/translators/National Post.js +186 -0
- package/vendor/zotero/modules/translators/National Technical Reports Library.js +276 -0
- package/vendor/zotero/modules/translators/National Transportation Library ROSA P.js +562 -0
- package/vendor/zotero/modules/translators/Nature Publishing Group.js +3394 -0
- package/vendor/zotero/modules/translators/Neural Information Processing Systems.js +385 -0
- package/vendor/zotero/modules/translators/New Left Review.js +245 -0
- package/vendor/zotero/modules/translators/New Zealand Herald.js +282 -0
- package/vendor/zotero/modules/translators/Newlines Magazine.js +190 -0
- package/vendor/zotero/modules/translators/News Corp Australia.js +251 -0
- package/vendor/zotero/modules/translators/NewsBank.js +202 -0
- package/vendor/zotero/modules/translators/NewsnetTamedia.js +509 -0
- package/vendor/zotero/modules/translators/Noor Digital Library.js +267 -0
- package/vendor/zotero/modules/translators/Note HTML.js +206 -0
- package/vendor/zotero/modules/translators/Note Markdown.js +1638 -0
- package/vendor/zotero/modules/translators/Notre Dame Philosophical Reviews.js +201 -0
- package/vendor/zotero/modules/translators/Nuclear Receptor Signaling.js +241 -0
- package/vendor/zotero/modules/translators/OAPEN.js +331 -0
- package/vendor/zotero/modules/translators/OECD.js +216 -0
- package/vendor/zotero/modules/translators/ORCID.js +104 -0
- package/vendor/zotero/modules/translators/OSF Preprints.js +417 -0
- package/vendor/zotero/modules/translators/OSTI Energy Citations.js +202 -0
- package/vendor/zotero/modules/translators/OVID Tagged.js +1226 -0
- package/vendor/zotero/modules/translators/OZON.ru.js +465 -0
- package/vendor/zotero/modules/translators/OhioLINK.js +43 -0
- package/vendor/zotero/modules/translators/Old Bailey Online.js +315 -0
- package/vendor/zotero/modules/translators/Open Conf.js +172 -0
- package/vendor/zotero/modules/translators/Open Journal Systems.js +729 -0
- package/vendor/zotero/modules/translators/Open Knowledge Repository.js +811 -0
- package/vendor/zotero/modules/translators/OpenAlex JSON.js +740 -0
- package/vendor/zotero/modules/translators/OpenAlex.js +444 -0
- package/vendor/zotero/modules/translators/OpenEdition Books.js +155 -0
- package/vendor/zotero/modules/translators/OpenEdition Journals.js +432 -0
- package/vendor/zotero/modules/translators/Optical Society of America.js +562 -0
- package/vendor/zotero/modules/translators/Optimization Online.js +418 -0
- package/vendor/zotero/modules/translators/Ovid OCE.js +353 -0
- package/vendor/zotero/modules/translators/Ovid.js +302 -0
- package/vendor/zotero/modules/translators/Oxford Dictionaries Premium.js +194 -0
- package/vendor/zotero/modules/translators/Oxford English Dictionary.js +122 -0
- package/vendor/zotero/modules/translators/Oxford Music and Art Online.js +120 -0
- package/vendor/zotero/modules/translators/Oxford Reference.js +202 -0
- package/vendor/zotero/modules/translators/Oxford University Press.js +277 -0
- package/vendor/zotero/modules/translators/PC Gamer.js +302 -0
- package/vendor/zotero/modules/translators/PC Games.js +128 -0
- package/vendor/zotero/modules/translators/PEI Archival Information Network.js +242 -0
- package/vendor/zotero/modules/translators/PEP Web.js +165 -0
- package/vendor/zotero/modules/translators/PKP Catalog Systems.js +1455 -0
- package/vendor/zotero/modules/translators/PLoS Journals.js +284 -0
- package/vendor/zotero/modules/translators/PRC History Review.js +298 -0
- package/vendor/zotero/modules/translators/Pajhwok Afghan News.js +198 -0
- package/vendor/zotero/modules/translators/Papers Past.js +297 -0
- package/vendor/zotero/modules/translators/Paris Review.js +227 -0
- package/vendor/zotero/modules/translators/Pastebin.js +199 -0
- package/vendor/zotero/modules/translators/Patents - USPTO.js +210 -0
- package/vendor/zotero/modules/translators/Peeters.js +587 -0
- package/vendor/zotero/modules/translators/Perceiving Systems.js +350 -0
- package/vendor/zotero/modules/translators/Perlego.js +416 -0
- package/vendor/zotero/modules/translators/PhilPapers.js +233 -0
- package/vendor/zotero/modules/translators/Philosopher's Imprint.js +169 -0
- package/vendor/zotero/modules/translators/Pleade.js +329 -0
- package/vendor/zotero/modules/translators/Polygon.js +270 -0
- package/vendor/zotero/modules/translators/Potsdamer Neueste Nachrichten.js +188 -0
- package/vendor/zotero/modules/translators/Premium Times.js +144 -0
- package/vendor/zotero/modules/translators/Preprints.org.js +305 -0
- package/vendor/zotero/modules/translators/Prime 9ja Online.js +289 -0
- package/vendor/zotero/modules/translators/Primo 2018.js +126 -0
- package/vendor/zotero/modules/translators/Primo Normalized XML.js +987 -0
- package/vendor/zotero/modules/translators/Primo.js +322 -0
- package/vendor/zotero/modules/translators/ProMED.js +66 -0
- package/vendor/zotero/modules/translators/ProQuest Ebook Central.js +226 -0
- package/vendor/zotero/modules/translators/ProQuest PolicyFile.js +115 -0
- package/vendor/zotero/modules/translators/ProQuest.js +2210 -0
- package/vendor/zotero/modules/translators/Probing the Past.js +151 -0
- package/vendor/zotero/modules/translators/Project Gutenberg.js +191 -0
- package/vendor/zotero/modules/translators/Project MUSE.js +451 -0
- package/vendor/zotero/modules/translators/Protein Data Bank.js +445 -0
- package/vendor/zotero/modules/translators/PubFactory Journals.js +712 -0
- package/vendor/zotero/modules/translators/PubMed Central.js +577 -0
- package/vendor/zotero/modules/translators/PubMed XML.js +1139 -0
- package/vendor/zotero/modules/translators/PubMed.js +1317 -0
- package/vendor/zotero/modules/translators/PubPub.js +530 -0
- package/vendor/zotero/modules/translators/Pubget.js +164 -0
- package/vendor/zotero/modules/translators/Public Record Office Victoria.js +252 -0
- package/vendor/zotero/modules/translators/Publications Office of the European Union.js +540 -0
- package/vendor/zotero/modules/translators/Publications du Quebec.js +225 -0
- package/vendor/zotero/modules/translators/PyPI.js +288 -0
- package/vendor/zotero/modules/translators/Qatar Digital Library.js +802 -0
- package/vendor/zotero/modules/translators/Queensland State Archives.js +303 -0
- package/vendor/zotero/modules/translators/R-Packages.js +410 -0
- package/vendor/zotero/modules/translators/RAND.js +283 -0
- package/vendor/zotero/modules/translators/RDF.js +1780 -0
- package/vendor/zotero/modules/translators/REDALYC.js +196 -0
- package/vendor/zotero/modules/translators/RIS.js +7265 -0
- package/vendor/zotero/modules/translators/RSC Publishing.js +250 -0
- package/vendor/zotero/modules/translators/Radio Free Europe Radio Liberty.js +706 -0
- package/vendor/zotero/modules/translators/RePEc - Econpapers.js +725 -0
- package/vendor/zotero/modules/translators/RePEc - IDEAS.js +337 -0
- package/vendor/zotero/modules/translators/Rechtspraak.nl.js +295 -0
- package/vendor/zotero/modules/translators/RefWorks Tagged.js +1185 -0
- package/vendor/zotero/modules/translators/ReferBibIX.js +463 -0
- package/vendor/zotero/modules/translators/Regeringskansliet.js +89 -0
- package/vendor/zotero/modules/translators/Research Square.js +335 -0
- package/vendor/zotero/modules/translators/ResearchGate.js +394 -0
- package/vendor/zotero/modules/translators/Retsinformation.js +348 -0
- package/vendor/zotero/modules/translators/Reuters.js +255 -0
- package/vendor/zotero/modules/translators/Revues.org.js +378 -0
- package/vendor/zotero/modules/translators/Rock, Paper, Shotgun.js +304 -0
- package/vendor/zotero/modules/translators/Roll Call.js +173 -0
- package/vendor/zotero/modules/translators/Russian State Library.js +1517 -0
- package/vendor/zotero/modules/translators/SAE Papers.js +241 -0
- package/vendor/zotero/modules/translators/SAGE Journals.js +427 -0
- package/vendor/zotero/modules/translators/SAGE Knowledge.js +505 -0
- package/vendor/zotero/modules/translators/SAILDART.js +364 -0
- package/vendor/zotero/modules/translators/SALT Research Archives.js +196 -0
- package/vendor/zotero/modules/translators/SFU IPinCH.js +946 -0
- package/vendor/zotero/modules/translators/SIPRI.js +256 -0
- package/vendor/zotero/modules/translators/SIRS Knowledge Source.js +546 -0
- package/vendor/zotero/modules/translators/SLUB Dresden.js +300 -0
- package/vendor/zotero/modules/translators/SORA.js +340 -0
- package/vendor/zotero/modules/translators/SSOAR.js +399 -0
- package/vendor/zotero/modules/translators/SSRN.js +235 -0
- package/vendor/zotero/modules/translators/SVT Nyheter.js +381 -0
- package/vendor/zotero/modules/translators/Sacramento Bee.js +274 -0
- package/vendor/zotero/modules/translators/Safari Books Online.js +391 -0
- package/vendor/zotero/modules/translators/Scholars Portal Journals.js +220 -0
- package/vendor/zotero/modules/translators/Scholia.js +189 -0
- package/vendor/zotero/modules/translators/Schweizer Radio und Fernsehen SRF.js +152 -0
- package/vendor/zotero/modules/translators/SciELO.js +440 -0
- package/vendor/zotero/modules/translators/ScienceDirect.js +1304 -0
- package/vendor/zotero/modules/translators/Scopus.js +418 -0
- package/vendor/zotero/modules/translators/Semantic Scholar.js +513 -0
- package/vendor/zotero/modules/translators/Silverchair.js +886 -0
- package/vendor/zotero/modules/translators/Slate.js +228 -0
- package/vendor/zotero/modules/translators/SlideShare.js +112 -0
- package/vendor/zotero/modules/translators/Spiegel Online.js +343 -0
- package/vendor/zotero/modules/translators/Springer Link.js +696 -0
- package/vendor/zotero/modules/translators/Stack Exchange.js +134 -0
- package/vendor/zotero/modules/translators/Standard Ebooks.js +198 -0
- package/vendor/zotero/modules/translators/Stanford Encyclopedia of Philosophy.js +285 -0
- package/vendor/zotero/modules/translators/Stanford University Press.js +343 -0
- package/vendor/zotero/modules/translators/State Records Office of Western Australia.js +439 -0
- package/vendor/zotero/modules/translators/Stitcher.js +141 -0
- package/vendor/zotero/modules/translators/Store norske leksikon.js +291 -0
- package/vendor/zotero/modules/translators/Stuff.co.nz.js +446 -0
- package/vendor/zotero/modules/translators/Substack.js +237 -0
- package/vendor/zotero/modules/translators/Sud Ouest.js +181 -0
- package/vendor/zotero/modules/translators/Sueddeutsche.de.js +205 -0
- package/vendor/zotero/modules/translators/Summon 2.js +117 -0
- package/vendor/zotero/modules/translators/Superlib.js +647 -0
- package/vendor/zotero/modules/translators/Svenska Dagbladet.js +274 -0
- package/vendor/zotero/modules/translators/Sveriges radio.js +416 -0
- package/vendor/zotero/modules/translators/TEI.js +648 -0
- package/vendor/zotero/modules/translators/TV by the Numbers.js +194 -0
- package/vendor/zotero/modules/translators/TVNZ.js +165 -0
- package/vendor/zotero/modules/translators/Tagesspiegel.js +249 -0
- package/vendor/zotero/modules/translators/Talis Aspire.js +316 -0
- package/vendor/zotero/modules/translators/TalisPrism.js +445 -0
- package/vendor/zotero/modules/translators/Tatknigafund.js +174 -0
- package/vendor/zotero/modules/translators/Tatpressa.ru.js +121 -0
- package/vendor/zotero/modules/translators/Taylor & Francis eBooks.js +334 -0
- package/vendor/zotero/modules/translators/Taylor and Francis+NEJM.js +813 -0
- package/vendor/zotero/modules/translators/Tesis Doctorals en Xarxa.js +233 -0
- package/vendor/zotero/modules/translators/The Art Newspaper.js +268 -0
- package/vendor/zotero/modules/translators/The Atlantic.js +535 -0
- package/vendor/zotero/modules/translators/The Australian.js +105 -0
- package/vendor/zotero/modules/translators/The Boston Globe.js +285 -0
- package/vendor/zotero/modules/translators/The Chronicle of Higher Education.js +308 -0
- package/vendor/zotero/modules/translators/The Daily Beast.js +183 -0
- package/vendor/zotero/modules/translators/The Economic Times - The Times of India.js +305 -0
- package/vendor/zotero/modules/translators/The Economic Times.js +191 -0
- package/vendor/zotero/modules/translators/The Economist.js +207 -0
- package/vendor/zotero/modules/translators/The Free Dictionary.js +58 -0
- package/vendor/zotero/modules/translators/The Globe and Mail.js +241 -0
- package/vendor/zotero/modules/translators/The Guardian.js +717 -0
- package/vendor/zotero/modules/translators/The Hamilton Spectator.js +129 -0
- package/vendor/zotero/modules/translators/The Hindu (old).js +128 -0
- package/vendor/zotero/modules/translators/The Hindu.js +318 -0
- package/vendor/zotero/modules/translators/The Independent.js +184 -0
- package/vendor/zotero/modules/translators/The Intercept.js +258 -0
- package/vendor/zotero/modules/translators/The Met.js +300 -0
- package/vendor/zotero/modules/translators/The Microfinance Gateway.js +174 -0
- package/vendor/zotero/modules/translators/The Nation.js +188 -0
- package/vendor/zotero/modules/translators/The National Archives (UK).js +242 -0
- package/vendor/zotero/modules/translators/The New Republic.js +160 -0
- package/vendor/zotero/modules/translators/The New York Review of Books.js +467 -0
- package/vendor/zotero/modules/translators/The New Yorker.js +360 -0
- package/vendor/zotero/modules/translators/The Open Library.js +220 -0
- package/vendor/zotero/modules/translators/The Straits Times.js +528 -0
- package/vendor/zotero/modules/translators/The Telegraph.js +337 -0
- package/vendor/zotero/modules/translators/The Times and Sunday Times.js +180 -0
- package/vendor/zotero/modules/translators/The Times of Israel.js +151 -0
- package/vendor/zotero/modules/translators/TheMarker.js +108 -0
- package/vendor/zotero/modules/translators/Theory of Computing.js +488 -0
- package/vendor/zotero/modules/translators/ThesesFR.js +350 -0
- package/vendor/zotero/modules/translators/Thieme.js +326 -0
- package/vendor/zotero/modules/translators/Time.com.js +557 -0
- package/vendor/zotero/modules/translators/TimesMachine.js +222 -0
- package/vendor/zotero/modules/translators/Tony Blair Institute for Global Change.js +195 -0
- package/vendor/zotero/modules/translators/Toronto Star.js +331 -0
- package/vendor/zotero/modules/translators/Transportation Research Board.js +253 -0
- package/vendor/zotero/modules/translators/Treesearch.js +535 -0
- package/vendor/zotero/modules/translators/Trove.js +616 -0
- package/vendor/zotero/modules/translators/Tumblr.js +179 -0
- package/vendor/zotero/modules/translators/Twitter.js +413 -0
- package/vendor/zotero/modules/translators/UChicago VuFind.js +907 -0
- package/vendor/zotero/modules/translators/UNZ Print Archive.js +276 -0
- package/vendor/zotero/modules/translators/UPCommons.js +227 -0
- package/vendor/zotero/modules/translators/US National Archives Research Catalog.js +275 -0
- package/vendor/zotero/modules/translators/USENIX.js +151 -0
- package/vendor/zotero/modules/translators/USgamer.js +120 -0
- package/vendor/zotero/modules/translators/Ubiquity Journals.js +228 -0
- package/vendor/zotero/modules/translators/University Press Scholarship.js +301 -0
- package/vendor/zotero/modules/translators/University of California Press Books.js +403 -0
- package/vendor/zotero/modules/translators/University of Chicago Press Books.js +378 -0
- package/vendor/zotero/modules/translators/University of Wisconsin-Madison Libraries Catalog.js +298 -0
- package/vendor/zotero/modules/translators/Unqualified Dublin Core RDF.js +153 -0
- package/vendor/zotero/modules/translators/UpToDate References.js +203 -0
- package/vendor/zotero/modules/translators/Vanity Fair.js +242 -0
- package/vendor/zotero/modules/translators/Verniana-Jules Verne Studies.js +190 -0
- package/vendor/zotero/modules/translators/Verso Books.js +311 -0
- package/vendor/zotero/modules/translators/Vice.js +445 -0
- package/vendor/zotero/modules/translators/Victoria & Albert Museum.js +277 -0
- package/vendor/zotero/modules/translators/Vimeo.js +188 -0
- package/vendor/zotero/modules/translators/VoxEU.js +151 -0
- package/vendor/zotero/modules/translators/WHO.js +458 -0
- package/vendor/zotero/modules/translators/WIPO.js +189 -0
- package/vendor/zotero/modules/translators/Wall Street Journal.js +525 -0
- package/vendor/zotero/modules/translators/Wanfang Data.js +310 -0
- package/vendor/zotero/modules/translators/Washington Monthly.js +195 -0
- package/vendor/zotero/modules/translators/Washington Post.js +447 -0
- package/vendor/zotero/modules/translators/Web of Science Nextgen.js +832 -0
- package/vendor/zotero/modules/translators/Web of Science Tagged.js +1247 -0
- package/vendor/zotero/modules/translators/Web of Science.js +228 -0
- package/vendor/zotero/modules/translators/Welt Online.js +161 -0
- package/vendor/zotero/modules/translators/WestLaw UK.js +190 -0
- package/vendor/zotero/modules/translators/WikiLeaks PlusD.js +182 -0
- package/vendor/zotero/modules/translators/Wikidata QuickStatements.js +324 -0
- package/vendor/zotero/modules/translators/Wikidata.js +911 -0
- package/vendor/zotero/modules/translators/Wikimedia Commons.js +285 -0
- package/vendor/zotero/modules/translators/Wikipedia Citation Templates.js +432 -0
- package/vendor/zotero/modules/translators/Wikipedia.js +385 -0
- package/vendor/zotero/modules/translators/Wikisource.js +399 -0
- package/vendor/zotero/modules/translators/Wikiwand.js +122 -0
- package/vendor/zotero/modules/translators/Wiktionary.js +141 -0
- package/vendor/zotero/modules/translators/Wildlife Biology in Practice.js +172 -0
- package/vendor/zotero/modules/translators/Wiley Online Library.js +1412 -0
- package/vendor/zotero/modules/translators/Wilson Center Digital Archive.js +321 -0
- package/vendor/zotero/modules/translators/Winnipeg Free Press.js +204 -0
- package/vendor/zotero/modules/translators/Wired.js +249 -0
- package/vendor/zotero/modules/translators/Womennews.js +230 -0
- package/vendor/zotero/modules/translators/World Digital Library.js +403 -0
- package/vendor/zotero/modules/translators/World History Connected.js +185 -0
- package/vendor/zotero/modules/translators/World Shakespeare Bibliography Online.js +595 -0
- package/vendor/zotero/modules/translators/XML ContextObject.js +274 -0
- package/vendor/zotero/modules/translators/YPSF.js +224 -0
- package/vendor/zotero/modules/translators/Yandex Books.js +265 -0
- package/vendor/zotero/modules/translators/Ynet.js +171 -0
- package/vendor/zotero/modules/translators/YouTube.js +209 -0
- package/vendor/zotero/modules/translators/ZIPonline.js +267 -0
- package/vendor/zotero/modules/translators/ZOBODAT.js +341 -0
- package/vendor/zotero/modules/translators/Zotero RDF.js +583 -0
- package/vendor/zotero/modules/translators/ZoteroBib.js +94 -0
- package/vendor/zotero/modules/translators/arXiv.org.js +1099 -0
- package/vendor/zotero/modules/translators/artnet.js +207 -0
- package/vendor/zotero/modules/translators/beck-online.js +1339 -0
- package/vendor/zotero/modules/translators/clinicaltrials.gov.js +331 -0
- package/vendor/zotero/modules/translators/dLibra.js +367 -0
- package/vendor/zotero/modules/translators/dejure.org.js +242 -0
- package/vendor/zotero/modules/translators/dhistory.js +103 -0
- package/vendor/zotero/modules/translators/digibib.net.js +245 -0
- package/vendor/zotero/modules/translators/eLibrary.ru.js +867 -0
- package/vendor/zotero/modules/translators/eLife.js +462 -0
- package/vendor/zotero/modules/translators/eMJA.js +246 -0
- package/vendor/zotero/modules/translators/eMedicine.js +123 -0
- package/vendor/zotero/modules/translators/ePrint IACR.js +608 -0
- package/vendor/zotero/modules/translators/ebrary.js +140 -0
- package/vendor/zotero/modules/translators/etatar.ru.js +104 -0
- package/vendor/zotero/modules/translators/feb-web.ru.js +167 -0
- package/vendor/zotero/modules/translators/fishpond.co.nz.js +224 -0
- package/vendor/zotero/modules/translators/fr-online.de.js +209 -0
- package/vendor/zotero/modules/translators/govinfo.js +189 -0
- package/vendor/zotero/modules/translators/informIT database.js +248 -0
- package/vendor/zotero/modules/translators/io-port.js +68 -0
- package/vendor/zotero/modules/translators/jmlr.js +299 -0
- package/vendor/zotero/modules/translators/jurion.js +377 -0
- package/vendor/zotero/modules/translators/mEDRA.js +597 -0
- package/vendor/zotero/modules/translators/magazines.russ.ru.js +120 -0
- package/vendor/zotero/modules/translators/medes.js +284 -0
- package/vendor/zotero/modules/translators/newshub.co.nz.js +206 -0
- package/vendor/zotero/modules/translators/newspapers.com.js +335 -0
- package/vendor/zotero/modules/translators/openJur.js +161 -0
- package/vendor/zotero/modules/translators/reddit.js +275 -0
- package/vendor/zotero/modules/translators/sbn.it.js +186 -0
- package/vendor/zotero/modules/translators/scinapse.js +273 -0
- package/vendor/zotero/modules/translators/semantics Visual Library.js +643 -0
- package/vendor/zotero/modules/translators/taz.de.js +200 -0
- package/vendor/zotero/modules/translators/unAPI.js +481 -0
- package/vendor/zotero/modules/translators/washingtonpost.com.js +257 -0
- package/vendor/zotero/modules/translators/wiso.js +314 -0
- package/vendor/zotero/modules/translators/zbMATH.js +278 -0
- package/vendor/zotero/modules/translators/zotero.org.js +311 -0
- package/vendor/zotero/modules/utilities/README.md +25 -0
- package/vendor/zotero/modules/utilities/cachedTypes.js +193 -0
- package/vendor/zotero/modules/utilities/date.js +958 -0
- package/vendor/zotero/modules/utilities/openurl.js +458 -0
- package/vendor/zotero/modules/utilities/resource/README.md +4 -0
- package/vendor/zotero/modules/utilities/resource/dateFormats.json +1322 -0
- package/vendor/zotero/modules/utilities/resource/schema/global/README.md +15 -0
- package/vendor/zotero/modules/utilities/resource/schema/global/schema.json +12072 -0
- package/vendor/zotero/modules/utilities/resource/zoteroTypeSchemaData.js +5 -0
- package/vendor/zotero/modules/utilities/schema.js +65 -0
- package/vendor/zotero/modules/utilities/utilities.js +1841 -0
- package/vendor/zotero/modules/utilities/utilities_item.js +1082 -0
- package/vendor/zotero/modules/utilities/xregexp-all.js +4652 -0
- package/vendor/zotero/modules/utilities/xregexp-unicode-zotero.js +58 -0
- package/vendor/zotero/modules/zotero-schema/README.md +15 -0
- package/vendor/zotero/modules/zotero-schema/schema.json +12072 -0
- package/vendor/zotero/package-lock.json +4332 -0
- package/vendor/zotero/package.json +44 -0
- package/vendor/zotero/spec.yaml +142 -0
- package/vendor/zotero/src/args.js +43 -0
- package/vendor/zotero/src/cors.js +28 -0
- package/vendor/zotero/src/debug.js +189 -0
- package/vendor/zotero/src/exportEndpoint.js +97 -0
- package/vendor/zotero/src/formats.js +43 -0
- package/vendor/zotero/src/http.js +478 -0
- package/vendor/zotero/src/importEndpoint.js +54 -0
- package/vendor/zotero/src/lambda.js +75 -0
- package/vendor/zotero/src/proxy.js +356 -0
- package/vendor/zotero/src/searchEndpoint.js +97 -0
- package/vendor/zotero/src/server.js +85 -0
- package/vendor/zotero/src/specEndpoint.js +135 -0
- package/vendor/zotero/src/testEndpoint.js +50 -0
- package/vendor/zotero/src/textSearch.js +527 -0
- package/vendor/zotero/src/translation/sandboxManager.js +109 -0
- package/vendor/zotero/src/translation/translate.js +101 -0
- package/vendor/zotero/src/translation/translate_item.js +88 -0
- package/vendor/zotero/src/translators.js +264 -0
- package/vendor/zotero/src/utilities.js +49 -0
- package/vendor/zotero/src/webEndpoint.js +113 -0
- package/vendor/zotero/src/webSession.js +476 -0
- package/vendor/zotero/src/zotero.js +117 -0
- package/vendor/zotero/translate_export +10 -0
- package/vendor/zotero/translate_search +9 -0
- package/vendor/zotero/translate_url +9 -0
- package/vendor/zotero/translate_url_multiple +9 -0
- 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 <br>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, ' ')
|
|
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, ' ')
|
|
619
|
+
+ '</p>';
|
|
620
|
+
}
|
|
621
|
+
return str.replace(/<p>\s*<\/p>/g, '<p> </p>');
|
|
622
|
+
},
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* Encode special XML/HTML characters
|
|
626
|
+
* Certain entities can be inserted manually:
|
|
627
|
+
* <ZOTEROBREAK/> => <br/>
|
|
628
|
+
* <ZOTEROHELLIP/> => …
|
|
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, '&')
|
|
644
|
+
.replace(/"/g, '"')
|
|
645
|
+
.replace(/'/g, ''')
|
|
646
|
+
.replace(/</g, '<')
|
|
647
|
+
.replace(/>/g, '>')
|
|
648
|
+
.replace(/<ZOTERO([^\/]+)\/>/g, function (str, p1, offset, s) {
|
|
649
|
+
switch (p1) {
|
|
650
|
+
case 'BREAK':
|
|
651
|
+
return '<br/>';
|
|
652
|
+
case 'HELLIP':
|
|
653
|
+
return '…';
|
|
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 (<a> 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
|
+
})();
|