Vue.jsでsyntax highlightエディタを実装する「vue-prism-editor」
by kabanoki
HTML
<div id="app">
<prism-editor class="my-editor height-200" v-model="code" :highlight="highlighter" line-numbers></prism-editor>
</div>
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://unpkg.com/[email protected]/themes/prism-tomorrow.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/prismeditor.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/prismeditor.umd.production.min.js"></script>
<script src="https://unpkg.com/prismjs"></script>
CSS
body {
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
.height-200{
height: 200px
}
.my-editor {
background: #2d2d2d;
color: #ccc;
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
font-size: 14px;
line-height: 1.5;
padding: 5px;
}
.prism-editor__textarea:focus {
outline: none;
}
Vue
const PrismEditor = window['PrismEditor'].PrismEditor;
Vue.component('PrismEditor', PrismEditor);
new Vue({
el: '#app',
data: function(){
return {
code: "console.log('hello world')"
}
},
methods: {
highlighter: function(code) {
return Prism.highlight(code, Prism.languages.js, "js");
}
},
});