diff --git a/package-lock.json b/package-lock.json
index 7558d81..5abacbc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -24,6 +24,30 @@
"js-tokens": "^4.0.0"
}
},
+ "@types/codemirror": {
+ "version": "0.0.71",
+ "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.71.tgz",
+ "integrity": "sha512-b2oEEnno1LIGKMR7uBEsr40al1UijF1HEpRn0+Yf1xOLl24iQgB7DBpZVMM7y54G5wCNoclDrRO65E6KHPNO2w==",
+ "dev": true,
+ "requires": {
+ "@types/tern": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "dev": true
+ },
+ "@types/tern": {
+ "version": "0.22.1",
+ "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.22.1.tgz",
+ "integrity": "sha512-CRzPRkg8hYLwunsj61r+rqPJQbiCIEQqlMMY/0k7krgIsoSaFgGg1ZH2f9qaR1YpenaMl6PnlTtUkCbNH/uo+A==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*"
+ }
+ },
"JSONStream": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
@@ -5198,6 +5222,12 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
+ "typescript": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz",
+ "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==",
+ "dev": true
+ },
"typo-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.0.3.tgz",
diff --git a/package.json b/package.json
index ae333d9..386ece5 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"fontawesome"
],
"main": "./src/js/easymde.js",
+ "types": "types/easymde.d.ts",
"license": "MIT",
"author": "Jeroen Akkerman",
"bugs": {
@@ -21,6 +22,7 @@
"marked": "^0.5.1"
},
"devDependencies": {
+ "@types/codemirror": "0.0.71",
"browserify": "^16.2.3",
"gulp": "^4.0.0",
"gulp-clean-css": "^3.10.0",
@@ -29,6 +31,7 @@
"gulp-header": "^2.0.5",
"gulp-rename": "^1.4.0",
"gulp-uglify": "^3.0.1",
+ "typescript": "^3.2.2",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^2.0.0"
},
@@ -37,6 +40,7 @@
"url": "https://github.com/ionaru/easy-markdown-editor"
},
"scripts": {
- "prepare": "gulp"
+ "prepare": "gulp",
+ "test:types": "tsc --project types/tsconfig.json"
}
}
diff --git a/types/easymde-test.ts b/types/easymde-test.ts
new file mode 100644
index 0000000..1fbc55b
--- /dev/null
+++ b/types/easymde-test.ts
@@ -0,0 +1,10 @@
+new EasyMDE({
+ autoDownloadFontAwesome: false,
+ element: document.getElementById("mdEditor")!,
+ hideIcons: ["side-by-side", "fullscreen"],
+ shortcuts: {
+ drawTable: "Cmd-Alt-T",
+ toggleFullScreen: null
+ },
+ spellChecker: false
+});
diff --git a/types/easymde.d.ts b/types/easymde.d.ts
new file mode 100644
index 0000000..423f7dd
--- /dev/null
+++ b/types/easymde.d.ts
@@ -0,0 +1,129 @@
+///
+
+declare namespace EasyMDE {
+ interface AutoSaveOptions {
+ enabled?: boolean;
+ delay?: number;
+ uniqueId: string;
+ }
+
+ interface BlockStyleOptions {
+ bold?: string;
+ code?: string;
+ italic?: string;
+ }
+
+ interface InsertTextOptions {
+ horizontalRule?: string[];
+ image?: string[];
+ link?: string[];
+ table?: string[];
+ }
+
+ interface ParsingOptions {
+ allowAtxHeaderWithoutSpace?: boolean;
+ strikethrough?: boolean;
+ underscoresBreakWords?: boolean;
+ }
+
+ interface RenderingOptions {
+ singleLineBreaks?: boolean;
+ codeSyntaxHighlighting: boolean;
+ }
+
+ interface ShortcutsArray {
+ [action: string]: string | undefined | null;
+ toggleBlockquote?: string | null;
+ toggleBold?: string | null;
+ cleanBlock?: string | null;
+ toggleHeadingSmaller?: string | null;
+ toggleItalic?: string | null;
+ drawLink?: string | null;
+ toggleUnorderedList?: string | null;
+ togglePreview?: string | null;
+ toggleCodeBlock?: string | null;
+ drawImage?: string | null;
+ toggleOrderedList?: string | null;
+ toggleHeadingBigger?: string | null;
+ toggleSideBySide?: string | null;
+ toggleFullScreen?: string | null;
+ }
+
+ interface StatusBarItem {
+ className: string;
+ defaultValue: (element: HTMLElement) => void;
+ onUpdate: (element: HTMLElement) => void;
+ }
+
+ interface ToolbarIcon {
+ name: string;
+ action: string|((editor: EasyMDE) => void);
+ className: string;
+ title: string;
+ }
+
+ interface Options {
+ autoDownloadFontAwesome?: boolean;
+ autofocus?: boolean;
+ autosave?: AutoSaveOptions;
+ blockStyles?: BlockStyleOptions;
+ element?: HTMLElement;
+ forceSync?: boolean;
+ hideIcons?: string[];
+ indentWithTabs?: boolean;
+ initialValue?: string;
+ insertTexts?: InsertTextOptions;
+ lineWrapping?: boolean;
+ parsingConfig?: ParsingOptions;
+ placeholder?: string;
+ previewRender?: (markdownPlaintext: string, previewElement: HTMLElement) => string;
+ promptURLs?: boolean;
+ renderingConfig?: RenderingOptions;
+ shortcuts?: ShortcutsArray;
+ showIcons?: string[];
+ spellChecker?: boolean;
+ status?: boolean|Array;
+ styleSelectedText?: boolean;
+ tabSize?: number;
+ toolbar?: boolean|Array;
+ toolbarTips?: boolean;
+ }
+}
+
+declare class EasyMDE {
+ constructor(options?: EasyMDE.Options);
+ value(): string;
+ value(val: string): void;
+ codemirror: CodeMirror.Editor;
+ toTextArea(): void;
+ isPreviewActive(): boolean;
+ isSideBySideActive(): boolean;
+ isFullscreenActive(): boolean;
+ clearAutosavedValue(): void;
+
+ static toggleBold: (editor: EasyMDE) => void;
+ static toggleItalic: (editor: EasyMDE) => void;
+ static toggleStrikethrough: (editor: EasyMDE) => void;
+ static toggleHeadingSmaller: (editor: EasyMDE) => void;
+ static toggleHeadingBigger: (editor: EasyMDE) => void;
+ static toggleHeading1: (editor: EasyMDE) => void;
+ static toggleHeading2: (editor: EasyMDE) => void;
+ static toggleHeading3: (editor: EasyMDE) => void;
+ static toggleCodeBlock: (editor: EasyMDE) => void;
+ static toggleBlockquote: (editor: EasyMDE) => void;
+ static toggleUnorderedList: (editor: EasyMDE) => void;
+ static toggleOrderedList: (editor: EasyMDE) => void;
+ static cleanBlock: (editor: EasyMDE) => void;
+ static drawLink: (editor: EasyMDE) => void;
+ static drawImage: (editor: EasyMDE) => void;
+ static drawTable: (editor: EasyMDE) => void;
+ static drawHorizontalRule: (editor: EasyMDE) => void;
+ static togglePreview: (editor: EasyMDE) => void;
+ static toggleSideBySide: (editor: EasyMDE) => void;
+ static toggleFullScreen: (editor: EasyMDE) => void;
+ static undo: (editor: EasyMDE) => void;
+ static redo: (editor: EasyMDE) => void;
+}
+
+export as namespace EasyMDE;
+export = EasyMDE;
diff --git a/types/tsconfig.json b/types/tsconfig.json
new file mode 100644
index 0000000..8449997
--- /dev/null
+++ b/types/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "target": "es3",
+ "strict": true,
+ "noImplicitReturns": true,
+ "noEmit": true
+ }
+}