zotero-types
Version:
This package contains type definitions for Zotero (https://www.zotero.org/) plugin.
499 lines (446 loc) • 15.9 kB
TypeScript
/// <reference path="../data/item.d.ts" />
/// <reference path="../utilities_internal.d.ts" />
declare namespace _ZoteroTypes {
interface Utilities {
Internal: Utilities.Internal;
XRegExp: any;
Item: anyObj;
/**
* Returns a function which will execute `fn` with provided arguments after `delay` milliseconds and not more
* than once, if called multiple times. See
* http://stackoverflow.com/questions/24004791/can-someone-explain-the-debounce-function-in-javascript
* @param fn {Function} function to debounce
* @param delay {Integer} number of milliseconds to delay the function execution
* @returns {Function}
*/
debounce<F extends Function>(fn: F, delay?: number): F;
/**
* Creates and returns a new, throttled version of the
* passed function, that, when invoked repeatedly,
* will only actually call the original function at most
* once per every wait milliseconds
*
* By default, throttle will execute the function as soon
* as you call it for the first time, and, if you call it
* again any number of times during the wait period, as soon
* as that period is over. If you'd like to disable the
* leading-edge call, pass {leading: false}, and if you'd
* like to disable the execution on the trailing-edge,
* pass {trailing: false}. See
* https://underscorejs.org/#throttle
* https://github.com/jashkenas/underscore/blob/master/underscore.js
* (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Underscore may be freely distributed under the MIT license.
*
* @param {Function} func Function to throttle
* @param {Integer} wait Wait period in milliseconds
* @param {Boolean} [options.leading] Call at the beginning of the wait period
* @param {Boolean} [options.trailing] Call at the end of the wait period
*/
throttle(
func: Function,
wait: number,
options?: { leading: boolean; trailing: boolean },
): Function;
sentenceCase(str: string): string;
/**
* Fixes author name capitalization.
* Currently for all uppercase names only
*
* JOHN -> John
* GUTIÉRREZ-ALBILLA -> Gutiérrez-Albilla
* O'NEAL -> O'Neal
*
* @param {String} string Uppercase author name
* @return {String} Title-cased author name
*/
capitalizeName(str: string): string;
/**
* Cleans extraneous punctuation off a creator name and parse into first and last name
*
* @param {String} author Creator string
* @param {String} type Creator type string (e.g., "author" or "editor")
* @param {Boolean} useComma Whether the creator string is in inverted (Last, First) format
* @return {Object} firstName, lastName, and creatorType
*/
cleanAuthor(
author: string,
type: string,
useComma?: boolean,
): { firstName: string; lastName: string; creatorType: string };
/**
* Removes leading and trailing whitespace from a string
* @type String
*/
trim(s: string): string;
/**
* Cleans whitespace off a string and replaces multiple spaces with one
* @type String
*/
trimInternal(s: string): string;
/**
* Cleans any non-word non-parenthesis characters off the ends of a string
* @type String
*/
superCleanString(x: string): string;
isHTTPURL(url: string, allowNoScheme?: boolean): boolean;
/**
* Cleans a http url string
* @param {String} url
* @param {Boolean} tryHttp Attempt prepending 'http://' to the url
* @returns {String}
*/
cleanURL(url: string, tryHttp?: boolean): string;
/**
* Eliminates HTML tags, replacing <br>s with newlines
* @type String
*/
cleanTags(x: string): string;
/**
* Extract item identifiers (DOI, ISBN, arXiv, ADS Bibcode, PMID) from a string.
* @type String
*/
extractIdentifiers(
text: string,
): (
| { DOI: string }
| { ISBN: string }
| { arXiv: string }
| { adsBibcode: string }
| { PMID: string }
)[];
/**
* Strip info:doi prefix and any suffixes from a DOI
* @type String
*/
cleanDOI(x: string): null | string;
/**
* Clean and validate ISBN.
* Return isbn if valid, otherwise return false
* @param {String} isbn
* @param {Boolean} [dontValidate=false] Do not validate check digit
* @return {String|Boolean} Valid ISBN or false
*/
cleanISBN(isbn: string, dontValidate?: boolean): string | false;
/**
* Convert ISBN 10 to ISBN 13
* @param {String} isbn ISBN 10 or ISBN 13 cleanISBN
* @return {String} ISBN-13
*/
toISBN13(isbnStr: string): string;
/**
* Clean and validate ISSN.
* Return issn if valid, otherwise return false
*/
cleanISSN(issnStr: string): string | false;
/**
* Convert plain text to HTML by replacing special characters and replacing newlines with BRs or
* P tags
* @param {String} str Plain text string
* @param {Boolean} singleNewlineIsParagraph Whether single newlines should be considered as
* paragraphs. If true, each newline is replaced with a P tag. If false, double newlines
* are replaced with P tags, while single newlines are replaced with BR tags.
* @type String
*/
text2html(str: string, singleNewlineIsParagraph?: boolean): string;
/**
* Encode special XML/HTML characters
* Certain entities can be inserted manually:
* <ZOTEROBREAK/> => <br/>
* <ZOTEROHELLIP/> => …
*
* @param {String} str
* @return {String}
*/
htmlSpecialChars(str: string): string;
/**
* Wrap URLs and DOIs in <a href=""> links in plain text
*
* Ignore URLs preceded by '>', just in case there are already links
* @type String
*/
autoLink(str: string): string;
/**
* Parses a text string for HTML/XUL markup and returns an array of parts. Currently only finds
* HTML links (<a> tags)
*
* @return {Array} An array of objects with the following form:<br>
* <pre> {
* type: 'text'|'link',
* text: "text content",
* [ attributes: { key1: val [ , key2: val, ...] }
* }</pre>
*/
parseMarkup(str: string): {
type: "text" | "link";
text: string;
attributes?: { [attr: string]: unknown };
};
/**
* Calculates the Levenshtein distance between two strings
* @type Number
*/
levenshtein(a: string, b: string): number;
/**
* Test if an object is empty
*
* @param {Object} obj
* @type Boolean
*/
isEmpty(obj: object): boolean;
/**
* Compares an array with another and returns an array with
* the values from array1 that don't exist in array2
*
* @param {Array} array1
* @param {Array} array2
* @param {Boolean} useIndex If true, return an array containing just
* the index of array2's elements;
* otherwise return the values
*/
arrayDiff<T>(array1: T[], array2: T[], useIndex?: false): T[];
arrayDiff(array1: [], array2: [], useIndex: true): number[];
/**
* Determine whether two arrays are identical
*
* Modified from http://stackoverflow.com/a/14853974
*
* @return {Boolean}
*/
arrayEquals(array1: [], array2: []): boolean;
/**
* Return new array with values shuffled
*
* From http://stackoverflow.com/a/6274398
*
* @param {Array} arr
* @return {Array}
*/
arrayShuffle<T>(arr: T[]): T[];
/**
* Return new array with duplicate values removed
*
* @param {Array} array
* @return {Array}
*/
arrayUnique<T>(array: T[]): T[];
/**
* Generate a random integer between min and max inclusive
*
* @param {Integer} min
* @param {Integer} max
* @return {Integer}
*/
rand(min: number, max: number): number;
/**
* Parse a page range
*
* @param {String} Page range to parse
* @return {Integer[]} Start and end pages
*/
getPageRange(pages: string): [start: number, end: number];
/**
* Pads a number or other string with a given string on the left
*
* @param {String} string String to pad
* @param {String} pad String to use as padding
* @length {Integer} length Length of new padded string
* @type String
*/
lpad(str: string, pad: string, length: number): string;
/**
* Shorten and add an ellipsis to a string if necessary
*
* @param {String} str
* @param {Integer} len
* @param {Boolean} [wordBoundary=false]
* @param {Boolean} [countChars=false]
*/
ellipsize(
str: string,
len: number,
wordBoundary?: boolean,
countChars?: boolean,
): string;
/**
* Return the proper plural form of a string
*
* For now, this is only used for debug output in English.
*
* @param {Integer} num
* @param {String[]|String} forms - If an array, an array of plural forms (e.g., ['object', 'objects']);
* currently only the two English forms are supported, for 1 and 0/many. If a single string,
* 's' is added automatically for 0/many.
* @return {String}
*/
pluralize(num: number, forms: string | string[]): string;
/**
* Port of PHP's number_format()
*
* MIT Licensed
*
* From http://kevin.vanzonneveld.net
* + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
* + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
* + bugfix by: Michael White (http://getsprink.com)
* + bugfix by: Benjamin Lupton
* + bugfix by: Allan Jensen (http://www.winternet.no)
* + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
* + bugfix by: Howard Yeend
* * example 1: number_format(1234.5678, 2, '.', '');
* * returns 1: 1234.57
*/
numberFormat(
number: number,
decimals: number,
dec_point?: string,
thousands_sep?: string,
): string;
/**
* Cleans a title, converting it to title case and replacing " :" with ":"
*
* @param {String} string
* @param {Boolean} force Forces title case conversion, even if the capitalizeTitles pref is off
* @type String
*/
capitalizeTitle(str: string, force?: boolean): string;
capitalize(str: string): string;
/**
* Replaces accented characters in a string with ASCII equivalents
*
* @param {String} str
* @param {Boolean} [lowercaseOnly] Limit conversions to lowercase characters
* (for improved performance on lowercase input)
* @return {String}
*
* From http://lehelk.com/2011/05/06/script-to-remove-diacritics/
*/
removeDiacritics(str: string, lowercaseOnly?: boolean): string;
/**
* Performs a deep copy of a JavaScript object
* @param {Object} obj
* @return {Object}
*/
deepCopy(obj: object): _ZoteroTypes.anyObj;
/**
* Find valid creator types for a given item type
*
* @param {String} type Item type
* @return {String[]} Creator types
*/
getCreatorsForType(type: _ZoteroTypes.Item.ItemType): string[];
/**
* Determine whether a given field is valid for a given item type
*
* @param {String} field Field name
* @param {String} type Item type
* @type Boolean
*/
fieldIsValidForType(
field: string,
type: _ZoteroTypes.Item.ItemType,
): boolean;
/**
* Gets a creator type name, localized to the current locale
*
* @param {String} type Creator type
* @param {String} Localized creator type
* @type Boolean
*/
getLocalizedCreatorType(type: string): string | false;
/**
* Escapes metacharacters in a literal so that it may be used in a regular expression
*/
quotemeta(literal: string): string;
/**
* Generate a random string of length 'len' (defaults to 8)
**/
randomString(len?: number, chars?: string): string;
/**
* Adds a string to a given array at a given offset, converted to UTF-8
* @param {String} string The string to convert to UTF-8
* @param {Array|Uint8Array} array The array to which to add the string
* @param {Integer} [offset] Offset at which to add the string
*/
stringToUTF8Array(str: string, array: Uint8Array, offset?: number): void;
/**
* Gets the byte length of the UTF-8 representation of a given string
* @param {String} string
* @return {Integer}
*/
getStringByteLength(str: string): number;
semverCompare(a: string, b: string): number;
allowedKeyChars: "23456789ABCDEFGHIJKLMNPQRSTUVWXYZ";
/**
* Generates a valid object key for the server API
*/
generateObjectKey(): string;
/**
* Check if an object key is in a valid format
*/
isValidObjectKey(key: string): boolean;
/**
* Walk the DOM and the contents of JSON data attributes in the HTML representation
* of a note, calling visitor functions that might modify it and returning
* the resulting HTML.
*
* Elements are visited in depth-first order. First the element itself is visited,
* then its data attributes, then the URIs in its JSON attributes, then its subtree.
*
* @param {String} note Note HTML
* @param {Object} visitors
* @param {Function} [visitors.visitContainer]
* @param {Function} [visitors.visitAnnotation]
* @param {Function} [visitors.visitCitation]
* @param {Function} [visitors.visitOtherElement]
* @param {Function} [visitors.visitDataAttribute]
* @param {Function} [visitors.visitURI] Return a replacement for the passed URI
* @return {String} Potentially modified note HTML
*/
walkNoteDOM(
note: string,
visitors: {
visitContainer?: Function;
visitAnnotation?: Function;
visitCitation?: Function;
visitOtherElement?: Function;
visitDataAttribute?: Function;
visitURI?: Function;
},
): string;
/**
* Evaluate an XPath
*
* @param {element|element[]} node The element(s) to use as the context for the XPath
* @param {String} xstring The XPath expression
* @param {Object} [namespaces] An object whose keys represent namespace prefixes, and whose
* values represent their URIs
* @return {element[]} DOM elements matching XPath
*/
xpath(
node: HTMLElement | Document,
xstring: string,
namespaces?: any,
): HTMLElement[] | [];
/**
* Input xpath string, find corresponding HTML elements value/textContent/innerText/text/nodeValue.
* When node is an array of element, the returned output is obtained by concatenating
* the string of each element, and the default separator is ', '.
*
* @param node The node representing the document and context
* @param xstring, xpath The XPath expression
* @param namespaces An object whose keys represent namespace prefixes, and whose values represent their URIs
* @param delimiter The string with which to join multiple matching nodes
* @returns DOM elements matching XPath, or null if no elements exist
*/
xpathText(
node: HTMLElement | Document,
xstring: string,
namespaces?: any,
delimiter?: undefined | string,
): string | null;
}
}
declare namespace Zotero {
const Utilities: _ZoteroTypes.Utilities;
}