Editor

by Jayson Buquia

HTML

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

  <head>
    <meta charset="UTF-8">
    <title>Editor</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
    <style>
      body {
        display: flex;
        align-items: center;
        justify-content: center;
				height: 100vh;
      }

      input {
        opacity: 0;
        position: fixed;
        top: -100%;
        left: -100%;
      }

      textarea {
        visibility: hidden;
      }

      #copy-raw {
        text-transform: uppercase;
        margin: 5px 0;
        position: fixed;
        z-index: 9999;
        bottom: 10px;
        right: 10px;
      }
      
      .cke_dialog_ui_input_text {
        opacity: 1;
      }

    </style>
  </head>

  <body>
    <div>
      <div class="container-fluid">
        <button class="btn btn-info btn-sm" id="copy-raw">Copy Data URI</button>
        <input type="text" id="data-uri" style="width:100%">
        <textarea id="editor"></textarea>
      </div>
    </div>

    <script src="https://cdn.ckeditor.com/4.10.0/standard/ckeditor.js"></script>
    <script>
      const _dataURI = document.querySelector('#data-uri');
      const _copyBtn = document.querySelector('#copy-raw');
      _copyBtn.addEventListener('click', function(e) {
        e.preventDefault();
        _dataURI.select();
        document.execCommand('copy');
        _dataURI.blur();
      });

      CKEDITOR.replace('editor', {
          skinName: 'minimalist',
        })
        .on('change', ({
          editor
        }) => {
          let content = editor.getData();
          let styles = `
          	* {
            	font-family: sans-serif;
            }
            a:link,a:visited,a:active {
            	color: teal;
            }
          `;
          _dataURI.value = `data:text/html;,<div><style>${styles}</style>${content}</div>`;
        });

    </script>

  </body>

</html>