JSFiddle - React, Tailwind, and code Playground

by no2don

HTML

<link rel="stylesheet" data-name="vs/editor/editor.main" href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/vs/editor/editor.main.css" />


<script>
  var require = {
    paths: {
      vs: 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/vs'
    }
  };

  window.MonacoEnvironment = {
    getWorkerUrl: () => proxy
  };


  let proxy = URL.createObjectURL(new Blob([`self.MonacoEnvironment = { baseUrl: 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/' };
importScripts('https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/vs/base/worker/workerMain.js');`], {
    type: 'javscript'
  }));

</script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/vs/loader.js"></script>


<script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/vs/editor/editor.main.nls.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/vs/editor/editor.main.js"></script>


<div>

  <button type="button" id="btnAutoHint1">插入自動提示 1</button>
  <button type="button" id="btnAutoHint2">插入自動提示 2</button>
</div>
<div class="code" id="container" style="width:100%;height:700px;margin-top:50px">

</div>

CSS

body{
  
  background-color:#262626;
  
}
#container {
	position: absolute;
	left: 0;
	top: 40px;
	width: 100%;
	height: 100%;
	margin: 0;
	padding: 0;
	overflow: hidden;
}

JavaScript

var editor = monaco.editor.create(document.getElementById('container'), {
   language: 'javascript',
   theme: 'vs-dark',
   tabCompletion: 'on',
   cursorSmoothCaretAnimation: true,
   formatOnPaste: true,
   mouseWheelZoom: true,
   autoClosingBrackets: "always",
   autoClosingOvertype: "always",
   autoClosingQuotes: "always",
   automaticLayout: "always"
 });

//所有自動提示的pool
 var suggestPool = [];


//填寫進入編輯器
 function fillRange(range) {
   for (var i = 0; i < suggestPool.length; i++) {
     suggestPool[i].range = range
   }
   return suggestPool;
 }

//載入提示庫,想要無腦改,改這function 就好了
 function fillDefaultPool() {


   suggestPool.push({
     label: 'DonmaUtil.GetUserInfo',
     kind: monaco.languages.CompletionItemKind.Function,
     insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
     insertText: 'DonmaUtil.GetUserInfo("userId");',
     detail: '取得用戶資訊'
   }, {
     label: 'DonmaUtil.GetBankInfo',
     kind: monaco.languages.CompletionItemKind.Function,
     insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
     insertText: 'DonmaUtil.GetBankInfo("bankId","bankKeyword");',
     detail: '取得銀行資訊'
   });

 }


 $('#btnAutoHint1').click(function() {

   //載入預設的提示建議
   fillDefaultPool();

   //註冊至編輯器,javscript  這語言
   monaco.languages.registerCompletionItemProvider('javascript', {
     provideCompletionItems: function(model, position) {
       var textUntilPosition = model.getValueInRange({
         startLineNumber: position.lineNumber,
         startColumn: 1,
         endLineNumber: position.lineNumber,
         endColumn: position.column
       });
       console.log(textUntilPosition);
       var match = textUntilPosition.replace(/[\*\[\]@@\$\(\)]/g, "").replace(/(\s+|\.)/g, " ");
       if (!match) {
         return {
           suggestions: []
         };
       }

       console.warn(textUntilPosition);
       var word = model.getWordUntilPosition(position);
       var range = {
        ...