markdown.html 1.3 KB

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