JSFiddle - React, Tailwind, and code Playground

by no2don

HTML

<!-- CodeMirror-->
<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/codemirror.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/codemirror.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/mode/javascript/javascript.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/mode/htmlmixed/htmlmixed.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/mode/css/css.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/mode/xml/xml.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/mode/vbscript/vbscript.js"></script>

<!-- import theme-->
<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/theme/dracula.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/theme/duotone-light.min.css" rel="stylesheet" />

<!-- hint -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/addon/hint/show-hint.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/addon/hint/show-hint.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/addon/hint/javascript-hint.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/addon/hint/xml-hint.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/addon/hint/html-hint.js">


</script>


<!-- formatting -->
<script src="https://codemirror.net/2/lib/util/formatting.js"></script>
<!-- JQuery -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>




<!-- CONTENT -->
<!--最後拿來顯示code 的 -->
<code id="showCode"></code>

<button type="button" id="btnTheme1">theme draucla</button>
<button type="button" id="btnTheme2">theme duotone-light</button>

<textarea id="txtCode" style="width: 100%"></textarea>

CSS

.CodeMirror {
    border: 1px solid #eee;
    height: auto;
  }

  .CodeMirror-scroll {
    overflow-y: hidden;
    overflow-x: auto;
  }

JavaScript

//Init Code Mirror
var mixedMode = {
  name: "htmlmixed",

  scriptTypes: [{
      matches: /\/x-handlebars-template|\/x-mustache/i,
      mode: null
    },
    {
      matches: /(text|application)\/(x-)?vb(a|script)/i,
      mode: "vbscript"
    }
  ]
};


var editor = CodeMirror.fromTextArea(document.getElementById("txtCode"), {
  //語言偵測用混和模式
  mode: mixedMode,
  //開啟行號
  lineNumbers: true,
  //選取游標
  selectionPointer: true,
  //過長自動換行
  lineWrapping: true,
  viewportMargin: Infinity,
  autohint: true,
  extraKeys: {
    "Alt-Right": "autocomplete"
  },
});

//Chnage Theme Event 
$('#btnTheme1').click(function() {
  editor.setOption("theme", 'dracula');
});

$('#btnTheme2').click(function() {
  editor.setOption("theme", 'duotone-light');
});



           function format() {
                var totalLines = editor.lineCount();
                editor.autoFormatRange({ line: 0, ch: 0 }, { line: totalLines });
                editor.focus();
                editor.setCursor({ line: totalLines, ch: 0 });
            }


            var isKClick = false;
            //判斷鍵盤起來的事件
            editor.on("keyup", function (cm, event) {
                var key = undefined;
                var possible = [event.key, event.keyIdentifier, event.keyCode, event.which];

                while (key === undefined && possible.length > 0) {
                    key = possible.pop();
                }


                if (!cm.state.completionActive && (
                    event.keyCode == 32 || event.keyCode == 9)) {
                    CodeMirror.commands.autocomplete(cm, null, { completeSingle: false });
                }

                //如果是Ctrl 鍵就回傳
                if (key && (event.ctrlKey || event.metaKey) && !(event.altKey)) {
                    event.preventDefault();
                    return false;
                }
                //用來判斷是不適先按下了 K
                isKClick = false;

            });


            //判斷鍵盤按下後,如果是K就將isKClick設成true 之後按下 D 就進行整理程式碼
          ...