コピペライブラリを作りたくてVueのコンポーネントでいろいろ試してみました。
1.いろいろ詰まったところを整理
以前、紹介したv-tooltip「[Vue.js]v-tooltipの使い方を試す」を利用する単一ファイルコンポーネントを作ろうと思ったんだけど、ライブラリの読み込みは大元のページでやらないと上手くうごかなかった?
Vue.use(VTooltip);
この記述でv-tooltipディレクティブをロードさせるとこが、やっぱりページ自体のビルドでやっとかないとダメみたいだった。
で、v-tooltipにはスタイルが付いてないから本家サイトのサンプルをベースにカスタマイズしなきゃいけないんだけども、単一ファイルコンポーネントのテンプレだとstyleタグにscopedって属性がついてて、逆に大元のページで読み込ませたv-tooltipにスタイルを適用できなかった。
なので、Vueコンポーネント側にscoped属性をstyleタグをもいっこ追加してスタイルを定義してみた。
DetailToolTips.vue
<template>
<li v-tooltip.bottom-start="outline" class="dis_inline" >{{ title }}</li>
</template>
<script>
module.exports = {
props: {
id: String,
title: String,
source: String,
discript: String,
link: String
},
computed: {
outline: function() {
let rslt = [];
rslt.push("<div><pre><code>");
if(this.discript) {
let esc_dis = this.discript.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");
let dis = esc_dis.split("\r\n");
if(dis.length >= 4){
for(let i=0; i < 4; i++){ if(dis[i]){ rslt.push(dis[i] + "\r\n") } }
rslt.push(" ...(略)...");
}else{
rslt.push(dis.join("\r\n"));
}
rslt.push("</code></pre></div><div class='body'><pre><code>");
}
if(this.source) {
let esc_src = this.source.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");
let src = esc_src.split("\r\n");
if(src.length >= 5){
for(let i=0; i < 5; i++){ if(src[i]){ rslt.push(src[i] + "\r\n") } }
rslt.push(" ...(略)...");
}else{
rslt.push(src.join("\r\n"));
}
}
rslt.push("</code></pre></div>");
return rslt.join('');
}
}
}
</script>
<style scoped>
.dis_inline {
display: table;
font-size: 0.8em;
}
</style>
<style>
.tooltip {
display: block !important;
z-index: 10000;
}
# ・・・省略・・・
</style>
2.で、いろいろ試行錯誤してメニュー作ってみたんだけど
これで、とりえあず読み込んだコンテンツの冒頭何行かをTooltip表示する部品になった訳だけども、実際にやってみたら案外読みにくかった?
・・・ボツかな?
いろんな構文セットをかき集めてスンスン取得できるページにしたかったんだけど、v-tooltipは実装してみたらなんかほしい感じとイメージが違うということが今日はわかった?
- タブメニューでカテゴリ毎にコンテンツを分けて整理
- コンテンツタイトルにオンマウスで記事のアウトライン表示