Просмотр исходного кода

manage codemirror-markdown-list-autoindentlist in local

Yuki Takei 8 лет назад
Родитель
Сommit
f7fefba27b

+ 1 - 0
local_modules/codemirror-markdown-list-autoindentlist/README.md

@@ -0,0 +1 @@
+generated by https://github.com/joel-porquet/CodeMirror-markdown-list-autoindent

+ 70 - 0
local_modules/codemirror-markdown-list-autoindentlist/index.js

@@ -0,0 +1,70 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("codemirror/lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["codemirror/lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
+  var Pos = CodeMirror.Pos;
+  var listTokenRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/;
+
+  function matchListToken(pos, cm) {
+    /* Get some info about the current state */
+    var eolState = cm.getStateAfter(pos.line);
+    var inList = eolState.list !== false;
+    var inQuote = eolState.quote !== 0;
+
+    /* Get the line from the start to where the cursor currently is */
+    var lineStart = cm.getRange(Pos(pos.line, 0), pos);
+
+    /* Matches the beginning of the list line with the list token RE */
+    var match = listTokenRE.exec(lineStart);
+
+    /* Not being in a list, or being in a list but not right after the list
+     * token, are both not considered a match */
+    if ((!inList && !inQuote) || !match)
+      return false
+    else
+      return true
+  }
+
+  CodeMirror.commands.autoIndentMarkdownList = function(cm) {
+    if (cm.getOption("disableInput")) return CodeMirror.Pass;
+    var ranges = cm.listSelections();
+    for (var i = 0; i < ranges.length; i++) {
+      var pos = ranges[i].head;
+
+      if (!ranges[i].empty() || !matchListToken(pos, cm)) {
+        /* If no match, call regular Tab handler */
+        cm.execCommand("defaultTab");
+        return;
+      }
+
+      /* Select the whole list line and indent it by one unit */
+      cm.indentLine(pos.line, "add");
+    }
+  };
+
+  CodeMirror.commands.autoUnindentMarkdownList = function(cm) {
+    if (cm.getOption("disableInput")) return CodeMirror.Pass;
+    var ranges = cm.listSelections();
+    for (var i = 0; i < ranges.length; i++) {
+      var pos = ranges[i].head;
+
+      if (!ranges[i].empty() || !matchListToken(pos, cm)) {
+        /* If no match, call regular Shift-Tab handler */
+        cm.execCommand("indentAuto");
+        return;
+      }
+
+      /* Select the whole list line and unindent it by one unit */
+      cm.indentLine(pos.line, "subtract");
+    }
+  };
+});

+ 0 - 1
package.json

@@ -62,7 +62,6 @@
     "bootstrap-sass": "~3.3.6",
     "check-node-version": "^3.1.1",
     "codemirror": "^5.33.0",
-    "codemirror-markdown-list-autoindent": "^1.0.1",
     "connect-flash": "~0.1.1",
     "connect-redis": "^3.3.0",
     "cookie-parser": "^1.4.3",

+ 2 - 1
resource/js/components/PageEditor/Editor.js

@@ -8,12 +8,13 @@ require('codemirror/addon/edit/matchbrackets');
 require('codemirror/addon/edit/matchtags');
 require('codemirror/addon/edit/closetag');
 require('codemirror/addon/edit/continuelist');
-// require('codemirror/addon/edit/indentlist');
 require('codemirror/addon/search/match-highlighter');
 require('codemirror/addon/scroll/annotatescrollbar');
 require('codemirror/mode/gfm/gfm');
 require('codemirror/theme/eclipse.css');
 
+require('../../../../local_modules/codemirror-markdown-list-autoindentlist');
+
 
 export default class Editor extends React.Component {
 

+ 1 - 7
yarn.lock

@@ -1413,13 +1413,7 @@ code-point-at@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
 
-codemirror-markdown-list-autoindent@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/codemirror-markdown-list-autoindent/-/codemirror-markdown-list-autoindent-1.0.1.tgz#712ec4a9cc636f5070d40253f74fa353a56f0092"
-  dependencies:
-    codemirror "^5.x"
-
-codemirror@^5.33.0, codemirror@^5.x:
+codemirror@^5.33.0:
   version "5.33.0"
   resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.33.0.tgz#462ad9a6fe8d38b541a9536a3997e1ef93b40c6a"