Ace: ์ž๋™ ์™„์„ฑ ํŒ์—… ์ปจํ…Œ์ด๋„ˆ ์˜ต์…˜

์— ๋งŒ๋“  2017๋…„ 02์›” 02์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ajaxorg/ace

jquery ๋ ˆ์ด์•„์›ƒ ๋‚ด์—์„œ ace ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์•„์ฃผ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ „์ฒด ํ™”๋ฉด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ ์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ์—์„œ๋Š” ๋ณธ๋ฌธ์— ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ ์™„์„ฑ ํŒ์—…์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด ์ œ ๊ฒฝ์šฐ์—๋Š” <div id="main-container"> ๊ฐ€ ์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ์—์„œ ctrl+space๋ฅผ ๋ˆ„๋ฅธ ๋‹ค์Œ <div id="main-container"> <div class=" ace_editor ace_autocomplete ace-tomorrow"> ๋ฅผ ์ด๋™ํ–ˆ๋Š”๋ฐ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

autoComplete ํŒ์—…์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜์—ฌ ์ด ๋ฌธ์ œ IMO๋ฅผ ํ•ด๊ฒฐํ•  ๋ณธ๋ฌธ ๋Œ€์‹  <div id="main-container"> ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์™„์ „ํ•œ ์ฝ”๋“œ: (.html๋กœ ์ €์žฅ)
์ค‘์•™ ์ฐฝ์—์„œ ๋ฒ„ํŠผ ์ „์ฒด ํ™”๋ฉด ์‚ฌ์šฉ

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <title>ACE Autocompletion demo</title>
    <style type="text/css" media="screen">
      body {
        overflow: hidden;
      }

      #editor {
        margin: 0;
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
      }
    </style>
  </head>

  <body>
    <!-- html -->
    <div class="myDiv" style="height:800px">
      <div class="ui-layout-center">Center
        <button id="fullscreenButton" type="button">Full-Screen</button>
      </div>
      <div class="ui-layout-north">North</div>
      <div class="ui-layout-south">South</div>
      <div class="ui-layout-east"> code Mirror
        <div id="main-container">
          <div id="editor">Type in a word like "will" below and press ctrl+space or alt+space to get "rhyme completion"</div>
        </div>
      </div>
      <div class="ui-layout-west">West</div>
    </div>
    <!-- ace-plugin -->
    <script src="https://rawgithub.com/ajaxorg/ace-builds/master/src/ace.js" type="text/javascript" charset="utf-8"></script>
    <script src="https://rawgithub.com/ajaxorg/ace-builds/master/src/ext-language_tools.js" type="text/javascript" charset="utf-8"></script>
    <!-- layout.jquery-plugin -->
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <link type="text/css" rel="stylesheet" href="http://layout.jquery-dev.com/lib/css/layout-default-latest.css" />
    <script type="text/javascript" src="http://layout.jquery-dev.com/lib/js/jquery-ui-latest.js"></script>
    <script type="text/javascript" src="http://layout.jquery-dev.com/lib/js/jquery.layout-1.3.0.rc30.80.js"></script>
    <!-- jquery-fullscreen-plugin -->
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-fullscreen-plugin/1.1.4/jquery.fullscreen-min.js"></script>
    <script>
      //
      // setup ace editor
      function setupAce() {
        // trigger extension
        ace.require("ace/ext/language_tools");
        var editor = ace.edit("editor");
        editor.session.setMode("ace/mode/html");
        editor.setTheme("ace/theme/tomorrow");
        // enable autocompletion and snippets
        editor.setOptions({
          enableBasicAutocompletion: true,
          enableSnippets: true,
          enableLiveAutocompletion: false
        });
        $("#fullscreenButton").click(function(event) {
          $("#main-container").toggleFullScreen();
        });
      }
      // init layout
      $('.myDiv').layout({
        resizeWhileDragging: true,
        resizable: true,
        east: {
          size: 800
        },
        onload_end: function() {
          setupAce();
        }
      });
      //
    </script>
  </body>

</html>
language_tools

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ˜„์žฌ ๋ฒ„์ „์˜ ace์—์„œ ์ž‘๋™ํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

        function getPopup() {
            if (!editor.completer) {
                var Autocomplete = ace.require("ace/autocomplete").Autocomplete
                editor.completer = new Autocomplete()
            }
            editor.completer.editor = editor
            editor.completer.$init()

            return editor.completer.popup.container;
        }
        document.onfullscreenchange = function(event) {
            var popup = getPopup();
            if (document.fullscreen)
                $("#main-container")[0].appendChild(popup);
            else
                document.body.appendChild(popup);
        }

๋ชจ๋“  4 ๋Œ“๊ธ€

+1

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ ๋ฒ„์ „์˜ ace์—์„œ ์ž‘๋™ํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

        function getPopup() {
            if (!editor.completer) {
                var Autocomplete = ace.require("ace/autocomplete").Autocomplete
                editor.completer = new Autocomplete()
            }
            editor.completer.editor = editor
            editor.completer.$init()

            return editor.completer.popup.container;
        }
        document.onfullscreenchange = function(event) {
            var popup = getPopup();
            if (document.fullscreen)
                $("#main-container")[0].appendChild(popup);
            else
                document.body.appendChild(popup);
        }

@nightwing ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์–ด์ฉŒ๋ฉด ์›€์ง์—ฌ

  editor.completer.editor = editor
  editor.completer.$init()

if ๋ฌธ ๋‚ด๋ถ€

if (!editor.completer) {

์ด๋Ÿฐ ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ์ž๋™ ์™„์„ฑ๊ธฐ๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋ฏ€๋กœ DOM์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž๋™ ์™„์„ฑ๊ธฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰