From cd3d19b185016b39256a1065d903680df6668c1d Mon Sep 17 00:00:00 2001 From: Mickael KERJEAN Date: Wed, 18 Apr 2018 00:20:24 +1000 Subject: [PATCH] bugfix (editor): fix issues with the text editor while changing mode - #47 --- client/pages/viewerpage/editor.js | 23 +++++++++++-------- client/pages/viewerpage/editor/diff.js | 3 +++ client/pages/viewerpage/editor/erlang.js | 2 +- .../editor/{html.js => htmlmixed.js} | 0 client/pages/viewerpage/editor/markdown.js | 3 --- client/pages/viewerpage/editor/sparql.js | 3 +++ .../editor/{csv.js => spreadsheet.js} | 0 .../viewerpage/editor/yaml-frontmatter.js | 4 ++++ .../viewerpage/editor/{yml.js => yaml.js} | 0 9 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 client/pages/viewerpage/editor/diff.js rename client/pages/viewerpage/editor/{html.js => htmlmixed.js} (100%) delete mode 100644 client/pages/viewerpage/editor/markdown.js create mode 100644 client/pages/viewerpage/editor/sparql.js rename client/pages/viewerpage/editor/{csv.js => spreadsheet.js} (100%) create mode 100644 client/pages/viewerpage/editor/yaml-frontmatter.js rename client/pages/viewerpage/editor/{yml.js => yaml.js} (100%) diff --git a/client/pages/viewerpage/editor.js b/client/pages/viewerpage/editor.js index a64ba9d3..6ca2b278 100644 --- a/client/pages/viewerpage/editor.js +++ b/client/pages/viewerpage/editor.js @@ -44,19 +44,19 @@ export class Editor extends React.Component { .then((res) => new Promise((done) => this.setState({loading: false}, () => done(res)))) .then(loadCodeMirror.bind(this)); - function loadCodeMirror(CodeMirror){ + function loadCodeMirror(data){ + const [CodeMirror, mode] = data; const size_small = 500; let editor = CodeMirror(document.getElementById('editor'), { value: this.props.content, lineNumbers: document.body.offsetWidth > size_small ? true : false, - mode: CodeMirror.__mode, + mode: mode, keyMap: "emacs", lineWrapping: true, foldGutter: { minFoldSize: 1 } }); - window.mirror = editor; if(CodeMirror.afterInit){ CodeMirror.afterInit(editor); @@ -94,12 +94,15 @@ export class Editor extends React.Component { let ext = file.split('.').pop(), mode = null; - ext = ext.replace(/~$/, ''); // remove emacs mark when a file is opened + // remove emacs mark when a file is opened + ext = ext + .replace(/~$/, '') + .replace(/\#$/, ''); if(ext === 'org' || ext === 'org_archive'){ mode = 'orgmode'; } else if(ext === 'sh'){ mode = 'shell'; } else if(ext === 'py'){ mode = 'python'; } - else if(ext === 'html' || ext === 'htm'){ mode = 'html'; } + else if(ext === 'html' || ext === 'htm'){ mode = 'htmlmixed'; } else if(ext === 'css'){ mode = 'css'; } else if(ext === 'less' || ext === 'scss' || ext === 'sass'){ mode = 'sass'; } else if(ext === 'js' || ext === 'json'){ mode = 'javascript'; } @@ -108,7 +111,7 @@ export class Editor extends React.Component { else if(ext === 'elm'){ mode = 'elm'; } else if(ext === 'erl'){ mode = 'erlang'; } else if(ext === 'go'){mode = 'go'; } - else if(ext === 'markdown' || ext === 'md'){mode = 'markdown'; } + else if(ext === 'markdown' || ext === 'md'){mode = 'yaml-frontmatter'; } else if(ext === 'pl' || ext === 'pm'){mode = 'perl'; } else if(ext === 'clj'){ mode = 'clojure'; } else if(ext === 'el' || ext === 'lisp' || ext === 'cl' || ext === 'emacs'){ mode = 'lisp'; } @@ -118,11 +121,13 @@ export class Editor extends React.Component { else if(ext === 'rb'){ mode = 'ruby'; } else if(ext === 'sql'){ mode = 'sql'; } else if(ext === 'xml' || ext === 'rss' || ext === 'svg' || ext === 'atom'){ mode = 'xml'; } - else if(ext === 'yml'){ mode = 'yml'; } + else if(ext === 'yml' || ext === 'yaml'){ mode = 'yaml'; } else if(ext === 'lua'){ mode = 'lua'; } - else if(ext === 'csv'){ mode = 'csv'; } + else if(ext === 'csv'){ mode = 'spreadsheet'; } else if(ext === 'rs' || ext === 'rlib'){ mode = 'rust'; } else if(ext === 'latex' || ext === 'tex'){ mode = 'stex'; } + else if(ext === 'diff' || ext === 'patch'){ mode = 'diff'; } + else if(ext === 'sparql'){ mode = 'sparql'; } else if(ext === 'c' || ext === 'cpp' || ext === 'java' || ext === 'h'){ mode = 'clike'; }else{ @@ -131,7 +136,7 @@ export class Editor extends React.Component { return import(/* webpackChunkName: "editor" */'./editor/'+mode) .catch(() => import("./editor/text")) - .then((module) => Promise.resolve(module.default)); + .then((module) => Promise.resolve([module.default, mode: mode])); } render() { diff --git a/client/pages/viewerpage/editor/diff.js b/client/pages/viewerpage/editor/diff.js new file mode 100644 index 00000000..b923a430 --- /dev/null +++ b/client/pages/viewerpage/editor/diff.js @@ -0,0 +1,3 @@ +import 'codemirror/mode/diff/diff'; +CodeMirror.__mode = 'diff'; +export default CodeMirror; diff --git a/client/pages/viewerpage/editor/erlang.js b/client/pages/viewerpage/editor/erlang.js index 891b834c..d5c4ba76 100644 --- a/client/pages/viewerpage/editor/erlang.js +++ b/client/pages/viewerpage/editor/erlang.js @@ -1,3 +1,3 @@ import 'codemirror/mode/erlang/erlang'; -CodeMirror.__mode = 'css'; +CodeMirror.__mode = 'erlang'; export default CodeMirror; diff --git a/client/pages/viewerpage/editor/html.js b/client/pages/viewerpage/editor/htmlmixed.js similarity index 100% rename from client/pages/viewerpage/editor/html.js rename to client/pages/viewerpage/editor/htmlmixed.js diff --git a/client/pages/viewerpage/editor/markdown.js b/client/pages/viewerpage/editor/markdown.js deleted file mode 100644 index d214871e..00000000 --- a/client/pages/viewerpage/editor/markdown.js +++ /dev/null @@ -1,3 +0,0 @@ -import 'codemirror/mode/markdown/markdown'; -CodeMirror.__mode = 'go'; -export default CodeMirror; diff --git a/client/pages/viewerpage/editor/sparql.js b/client/pages/viewerpage/editor/sparql.js new file mode 100644 index 00000000..31016f11 --- /dev/null +++ b/client/pages/viewerpage/editor/sparql.js @@ -0,0 +1,3 @@ +import 'codemirror/mode/sparql/sparql'; +CodeMirror.__mode = 'sparql'; +export default CodeMirror; diff --git a/client/pages/viewerpage/editor/csv.js b/client/pages/viewerpage/editor/spreadsheet.js similarity index 100% rename from client/pages/viewerpage/editor/csv.js rename to client/pages/viewerpage/editor/spreadsheet.js diff --git a/client/pages/viewerpage/editor/yaml-frontmatter.js b/client/pages/viewerpage/editor/yaml-frontmatter.js new file mode 100644 index 00000000..38e9bfbd --- /dev/null +++ b/client/pages/viewerpage/editor/yaml-frontmatter.js @@ -0,0 +1,4 @@ +import 'codemirror/mode/gfm/gfm'; +import 'codemirror/mode/yaml-frontmatter/yaml-frontmatter'; +CodeMirror.__mode = 'yaml-frontmatter'; +export default CodeMirror; diff --git a/client/pages/viewerpage/editor/yml.js b/client/pages/viewerpage/editor/yaml.js similarity index 100% rename from client/pages/viewerpage/editor/yml.js rename to client/pages/viewerpage/editor/yaml.js