markdown.html 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <script src="../../../../node_modules/marked/marked.min.js"></script>
  2. <script src="../../../../node_modules/lodash/lodash.min.js"></script>
  3. <script src="../../dist/vue.global.js"></script>
  4. <div id="editor">
  5. <textarea :value="input" @input="update"></textarea>
  6. <div v-html="compiledMarkdown"></div>
  7. </div>
  8. <script>
  9. Vue.createApp({
  10. data: () => ({
  11. input: '# hello',
  12. }),
  13. computed: {
  14. compiledMarkdown() {
  15. return marked.marked(this.input, { sanitize: true })
  16. },
  17. },
  18. methods: {
  19. update: _.debounce(function (e) {
  20. this.input = e.target.value
  21. }, 50),
  22. },
  23. }).mount('#editor')
  24. </script>
  25. <style>
  26. html,
  27. body,
  28. #editor {
  29. margin: 0;
  30. height: 100%;
  31. font-family: 'Helvetica Neue', Arial, sans-serif;
  32. color: #333;
  33. }
  34. textarea,
  35. #editor div {
  36. display: inline-block;
  37. overflow: auto;
  38. width: 50%;
  39. height: 100%;
  40. vertical-align: top;
  41. -webkit-box-sizing: border-box;
  42. -moz-box-sizing: border-box;
  43. box-sizing: border-box;
  44. padding: 0 20px;
  45. }
  46. textarea {
  47. border: none;
  48. border-right: 1px solid #ccc;
  49. resize: none;
  50. outline: none;
  51. background-color: #f6f6f6;
  52. font-size: 14px;
  53. font-family: 'Monaco', courier, monospace;
  54. padding: 20px;
  55. }
  56. code {
  57. color: #f66;
  58. }
  59. </style>