markdown.html 1.2 KB

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