From efe21638736ccb531d14b243fe61698c7a52efe9 Mon Sep 17 00:00:00 2001 From: Denny Harijanto <32732766+nusantara-cloud@users.noreply.github.com> Date: Tue, 3 Jul 2018 00:23:05 +0700 Subject: [PATCH] Type Definitions for Summernote (#26874) --- types/summernote/index.d.ts | 240 +++++++++++++++++++++++++++ types/summernote/summernote-tests.ts | 8 + types/summernote/tsconfig.json | 23 +++ types/summernote/tslint.json | 6 + 4 files changed, 277 insertions(+) create mode 100644 types/summernote/index.d.ts create mode 100644 types/summernote/summernote-tests.ts create mode 100644 types/summernote/tsconfig.json create mode 100644 types/summernote/tslint.json diff --git a/types/summernote/index.d.ts b/types/summernote/index.d.ts new file mode 100644 index 0000000000..4d2307da70 --- /dev/null +++ b/types/summernote/index.d.ts @@ -0,0 +1,240 @@ +// Type definitions for Summernote 0.8 +// Project: https://github.com/summernote/summernote#readme +// Definitions by: Wouter Staelens +// Denny Harijanto +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.7 + +/// + +declare global { + namespace Summernote { + interface Options { + airMode?: boolean; + callbacks?: any; // todo + codemirror?: CodemirrorOptions; + colors?: colorsDef; + dialogsInBody?: boolean; + dialogsFade?: boolean; + direction?: string; + disableDragAndDrop?: boolean; + focus?: boolean; + fontNames?: string[]; + fontNamesIgnoreCheck?: string[]; + height?: number; + hint?: HintOptions; + icons?: IconsOptions; + insertTableMaxSize?: InsertTableMaxSizeOptions; + keyMap?: KeyMapOptions; + lang?: string; + lineHeights?: string[]; + minHeight?: number; + maxHeight?: number; + maximumImageFileSize?: any; + modules?: ModuleOptions; + popover?: PopoverOptions; + placeholder?: string; + shortcuts?: boolean; + styleTags?: styleTagsOptions[]; + styleWithSpan?: boolean; + tabsize?: number; + tableClassName?: string; + textareaAutoSync?: boolean; + toolbar?: toolbarDef; + width?: number; + } + + type toolbarStyleGroupOptions = 'style' | 'bold' | 'italic' | 'underline' | 'clear'; + type toolbarFontGroupOptions = 'strikethrough' | 'superscript' | 'subscript'; + type toolbarFontsizeGroupOptions = 'fontsize'; + type toolbarColorGroupOptions = 'color'; + type toolbarParaGroupOptions = 'ul' | 'ol' | 'paragraph'; + type toolbarHeightGroupOptions = 'height'; + type toolbarTableGroupOptions = 'table'; + type toolbarInsertGroupOptions = 'link' | 'picture' | 'hr'; + type toolbarViewGroupOptions = 'fullscreen' | 'codeview'; + type toolbarHelpGroupOptions = 'help'; + // type toolbarDef = [string, string[]][] + type toolbarDef = [ + ['style', toolbarStyleGroupOptions[]] + | ['font', toolbarFontGroupOptions[]] + | ['fontsize', toolbarFontsizeGroupOptions[]] + | ['color', toolbarColorGroupOptions[]] + | ['para', toolbarParaGroupOptions[]] + | ['height', toolbarHeightGroupOptions[]] + | ['table', toolbarTableGroupOptions[]] + | ['insert', toolbarInsertGroupOptions[]] + | ['view', toolbarViewGroupOptions[]] + | ['help', toolbarHelpGroupOptions[]] + ]; + + type colorsDef = Array<[string[]]>; + type styleTagsOptions = 'p' | 'blockquote' | 'pre' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; + + interface InsertTableMaxSizeOptions { + col: number; + row: number; + } + + interface IconsOptions { + options?: any; // todo + } + + interface KeyMapOptions { + pc?: KeyMapPcOptions; + mac?: KeyMapMacOptions; + } + + interface KeyMapPcOptions { + options?: any; // todo + } + + interface KeyMapMacOptions { + options?: any; // todo + } + + type htmlElement = string; + + interface HintOptions { + words?: string[]; + mentions?: string[]; + match: RegExp; + search: (keyword: string, callback: (plausibleItems: string[]) => void) => void; + template?: (item: string) => htmlElement; + content?: (item: string) => htmlElement | JQuery.Node; + } + + interface CodemirrorOptions { + mode?: string; + htmlNode?: boolean; + lineNumbers?: boolean; + theme?: string; + } + + type popoverImageOptionsImagesize = 'imageSize100' | 'imageSize50' | 'imageSize25'; + type popoverImageOptionsFloat = 'floatLeft' | 'floatRight' | 'floatNone'; + type popoverImageOptionsRemove = 'removeMedia'; + type popoverImageDef = [ + ['imagesize', popoverImageOptionsImagesize[]], + ['float', popoverImageOptionsFloat[]], + ['remove', popoverImageOptionsRemove[]] + ]; + + type popoverLinkLinkOptions = 'linkDialogShow' | 'unlink'; + type popoverLinkDef = [ + ['link', popoverLinkLinkOptions[]] + ]; + + type popoverAirOptionsColor = 'color'; + type popoverAirOptionsFont = 'bold' | 'underline' | 'clear'; + type popoverAirOptionsPara = 'ul' | 'paragraph'; + type popoverAirOptionsTable = 'table'; + type popoverAirOptionsInsert = 'link' | 'picture'; + type popoverAirDef = [ + ['color', popoverAirOptionsColor], + ['font', popoverAirOptionsFont], + ['para', popoverAirOptionsPara], + ['table', popoverAirOptionsTable], + ['insert', popoverAirOptionsInsert] + ]; + + interface PopoverOptions { + image?: popoverImageDef; + link?: popoverLinkDef; + air?: popoverAirDef; + } + + interface ModuleOptions { + options?: any; // todo + } + + interface CreateLinkOptions { + text: string; + url: string; + newWindow: boolean; + } + + type EditImageCallback = ($image: JQuery.Node) => void; + } + + interface JQuery { + summernote(): JQuery; + summernote(command: string): JQuery; + summernote(options?: Summernote.Options): JQuery; + summernote(command: string, markupString: string): JQuery; + summernote(command: string, value: number): JQuery; + summernote(command: string, node: JQuery.Node): JQuery; + summernote(command: string, url: string, filename?: (string | Summernote.EditImageCallback)): JQuery; + + summernote(command: 'destroy'): JQuery; + summernote(command: 'code', markupStr?: string): JQuery; + summernote(command: 'editor.pasteHTML' | 'pasteHTML', markup: string): JQuery; + + // Basic API + summernote(command: 'editor.createRange' | 'createRange'): JQuery; + summernote(command: 'editor.saveRange' | 'saveRange'): JQuery; + summernote(command: 'editor.restoreRange' | 'restoreRange'): JQuery; + summernote(command: 'editor.undo' | 'undo'): JQuery; + summernote(command: 'editor.redo' | 'redo'): JQuery; + summernote(command: 'editor.focus' | 'focus'): JQuery; + summernote(command: 'editor.isEmpty' | 'isEmpty'): boolean; + summernote(command: 'reset'): JQuery; + summernote(command: 'disable'): JQuery; + summernote(command: 'enable'): JQuery; + // Font style API + summernote(fontStyle: 'editor.bold' | 'bold'): JQuery; + summernote(fontStyle: 'editor.italic' | 'italic'): JQuery; + summernote(fontStyle: 'editor.underline' | 'underline'): JQuery; + summernote(fontStyle: 'editor.strikethrough' | 'strikethrough'): JQuery; + summernote(command: 'editor.superscript' | 'superscript'): JQuery; + summernote(command: 'editor.subscript' | 'subscript'): JQuery; + summernote(command: 'editor.removeFormat' | 'removeFormat'): JQuery; + summernote(command: 'backColor', color: string): JQuery; + summernote(command: 'foreColor', color: string): JQuery; + summernote(command: 'fontName', fontName: string): JQuery; + summernote(command: 'editor.fontSize' | 'fontSize', fontSize: number): JQuery; + // Paragraph API + summernote(command: 'editor.justifyLeft' | 'justifyLeft'): JQuery; + summernote(command: 'editor.justifyRight' | 'justifyRight'): JQuery; + summernote(command: 'editor.justifyCenter' | 'justifyCenter'): JQuery; + summernote(command: 'editor.justifyFull' | 'justifyFull'): JQuery; + summernote(command: 'insertParagraph'): JQuery; + summernote(command: 'editor.insertOrderedList' | 'insertOrderedList'): JQuery; + summernote(command: 'editor.insertUnorderedList' | 'insertUnorderedList'): JQuery; + summernote(command: 'editor.indent' | 'indent'): JQuery; + summernote(command: 'editor.outdent' | 'outdent'): JQuery; + summernote(command: 'formatPara'): JQuery; + summernote(command: 'formatH1'): JQuery; + summernote(command: 'formatH2'): JQuery; + summernote(command: 'formatH3'): JQuery; + summernote(command: 'formatH4'): JQuery; + summernote(command: 'formatH5'): JQuery; + summernote(command: 'formatH6'): JQuery; + // Insertion API + summernote(command: 'editor.insertImage' | 'insertImage', url: string, filename?: (string | Summernote.EditImageCallback)): JQuery; + summernote(command: 'editor.insertNode' | 'insertNode', node: JQuery.Node): JQuery; + summernote(command: 'editor.insertText' | 'insertText', text: string): JQuery; + summernote(command: 'createLink', options: Summernote.CreateLinkOptions): JQuery; + // TODO: Callbacks + + // TODO: Editor + // editor.insertImagesOrCallback ?? + // editor.afterCommand ?? + // editor.resizeTo ?? + // editor.resize ?? + // editor.saveTarget ?? + // editor.isActivated ?? + // editor.formatBlock ?? + // editor.color ?? + // editor.lineHeight ?? + // editor.insertTable ?? + // editor.insertHorizontalRule ?? + // editor.floatMe ?? + // editor.removeMedia ?? + // editor.currentStyle ?? + // editor.getLinkInfo ?? + // editor.getSelectedText ?? + } +} + +export {}; diff --git a/types/summernote/summernote-tests.ts b/types/summernote/summernote-tests.ts new file mode 100644 index 0000000000..d984e4b6c0 --- /dev/null +++ b/types/summernote/summernote-tests.ts @@ -0,0 +1,8 @@ +import 'summernote'; + +$('#testElement').summernote({ + airMode: true +}); + +$('#testElement').summernote('code', '

hello

'); +$('#testElement').summernote('code'); diff --git a/types/summernote/tsconfig.json b/types/summernote/tsconfig.json new file mode 100644 index 0000000000..127f97e02f --- /dev/null +++ b/types/summernote/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "summernote-tests.ts" + ] +} diff --git a/types/summernote/tslint.json b/types/summernote/tslint.json new file mode 100644 index 0000000000..08016de61a --- /dev/null +++ b/types/summernote/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "dtslint/dt.json", + "rules": { + "unified-signatures": false + } +}