From 4ce74e904b7338249ba2f3b31b711eaa13782665 Mon Sep 17 00:00:00 2001 From: czynskee Date: Wed, 16 Sep 2020 12:31:35 -0700 Subject: [PATCH] Added option to supply an additional code-mirror overlay mode --- CHANGELOG.md | 4 ++++ src/js/easymde.js | 25 ++++++++++++++++++++++++- types/easymde.d.ts | 7 +++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fda26dd..388368a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] + +### Added +- `overlayMode` options to supply an additional codemirror mode ([#243]). + ### Fixed - Corrected default size units from `b,Kb,Mb` to ` B, KB, MB` ([#239]). diff --git a/src/js/easymde.js b/src/js/easymde.js index 6a62914..a99e29d 100644 --- a/src/js/easymde.js +++ b/src/js/easymde.js @@ -1745,6 +1745,10 @@ function EasyMDE(options) { if (options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != '') options.autosave.uniqueId = options.autosave.unique_id; + // If overlay mode is specified and combine is not provided, default it to true + if (options.overlayMode && options.overlayMode.combine === undefined) { + options.overlayMode.combine = true; + } // Update this options this.options = options; @@ -1981,7 +1985,25 @@ EasyMDE.prototype.render = function (el) { document.addEventListener('keydown', this.documentOnKeyDown, false); var mode, backdrop; - if (options.spellChecker !== false) { + + // CodeMirror overlay mode + if (options.overlayMode) { + CodeMirror.defineMode('overlay-mode', function(config) { + return CodeMirror.overlayMode(CodeMirror.getMode(config, options.spellChecker !== false ? 'spell-checker' : 'gfm'), options.overlayMode.mode, options.overlayMode.combine); + }); + + mode = 'overlay-mode'; + backdrop = options.parsingConfig; + backdrop.gitHubSpice = false; + + if (options.spellChecker !== false) { + backdrop.name = 'gfm'; + + CodeMirrorSpellChecker({ + codeMirrorInstance: CodeMirror, + }); + + } else if (options.spellChecker !== false) { mode = 'spell-checker'; backdrop = options.parsingConfig; backdrop.name = 'gfm'; @@ -1990,6 +2012,7 @@ EasyMDE.prototype.render = function (el) { CodeMirrorSpellChecker({ codeMirrorInstance: CodeMirror, }); + } } else { mode = options.parsingConfig; mode.name = 'gfm'; diff --git a/types/easymde.d.ts b/types/easymde.d.ts index e6dfaf2..570c609 100644 --- a/types/easymde.d.ts +++ b/types/easymde.d.ts @@ -159,6 +159,11 @@ declare namespace EasyMDE { importError?: string; } + interface OverlayModeOptions { + mode: CodeMirror.Mode + combine?: boolean + } + interface Options { autoDownloadFontAwesome?: boolean; autofocus?: boolean; @@ -205,6 +210,8 @@ declare namespace EasyMDE { promptTexts?: PromptTexts; syncSideBySidePreviewScroll?: boolean; + + overlayMode?: OverlayModeOptions } }