書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

summernoteエディタにオリジナルボタンを追加する方法

Laravel とリッチテキストエディタ

summernoteを使えば、Wordpressのようなエディタを組み込めます。

Laravelとの連携も可能でできるし無料だし、うれしいことだらけ。

ですが無料なだけに、ドキュメントやサポートが手薄と言う欠点も。

じゅんこ
じゅんこ

ここはやっぱり、仕方ないとこですね

わたしは自分で調べつつ機能を搭載しておりますが、「どなたかの役に立つかも」と思ったことを備忘録もかねて、記事にしていきますね。

今回はオリジナルボタンの追加方法について。

無料のリッチテキストエディタsummernoteのボタン追加・修正

まずは、Summernoteのリッチテキストエディタを搭載しておきましょう。

方法は、別の記事で解説しています。

こんな感じでリッチテキストエディタが搭載されます。

実際のエディタサンプルは、こちら。

コードは次のとおりです。

<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>without bootstrap</title>
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.js"></script>
  </head>
  <body>
    <div id="summernote"></div>
    <script>
      $('#summernote').summernote({
        placeholder: 'Hello stand alone ui',
        tabsize: 2,
        height: 120,
        toolbar: [
          ['style', ['style']],
          ['font', ['bold', 'underline', 'clear']],
          ['color', ['color']],
          ['para', ['ul', 'ol', 'paragraph']],
          ['table', ['table']],
          ['insert', ['link', 'picture', 'video']],
          ['view', ['fullscreen', 'codeview', 'help']]
        ]
      });
    </script>
  </body>
</html>

それではこのツールバーのボタンに変更を加えていきます。

まずはsummernote側にあるボタンを利用します。

summernoteの既存ボタンを追加する方法

summernote側で用意してくれているボタンを追加してみます。

たとえば取り消し線ボタンを追加してみましょう。

コードの中の【toolbar】の部分に、 [‘font’, [‘strikethrough’]], を追加します。

        toolbar: [
          ['style', ['style']],
          ['font', ['bold', 'underline', 'clear']],
          ['color', ['color']],
          ['para', ['ul', 'ol', 'paragraph']],
          ['table', ['table']],
          ['insert', ['link', 'picture', 'video']],
          ['view', ['fullscreen', 'codeview', 'help']],
	  ['font', ['strikethrough', 'superscript', 'subscript']],
	  ['height', ['height']],
        ]
      });

するとこのように、新しくボタンがエディタに追加されました。

実際のページはこちらからご覧になれます。

summernoteのツールバーで使えるボタンは他にもあります。

summernote公式ページを参考にしてください。

自分でカスタマイズしたオリジナルボタンを追加する方法

次にオリジナルボタンを追加する方法を説明します。

テキストにHTMLタグを適用する

たとえば「選択した部分にオリジナルのスタイルを適用して、背景を青色にしたい」とします。

script部分に、次のようにコードを入れていきましょう。

<script>
	var blueStyle = function(context) {
  var ui = $.summernote.ui;
	var button1 = ui.button({
  	contents: 'blue',
  	click: function() {
      // 選択したテキストをtextとして保存
      var text=context.invoke('editor.getSelectedText');
      // 選択した箇所をrmgとして保存
      var rng=context.invoke('editor.getLastRange');
      // rmgは削除しておく
     	rng.deleteContents();
      // textを任意のコードで挟む
       var $node=$('<div style="background-color:#b0c4de;">'+text+'</div>');
      //  上記のコードが挿入されることとする
        context.invoke('editor.insertNode', $node[0]);
  	}
     });
   //  この機能をbutton1に割り当てる
	return button1.render();
	}

       jQuery(document).ready(function($) {
        $('#summernote').summernote({
        placeholder: 'Hello stand alone ui',
        tabsize: 2,
        height: 120,
        toolbar: [
          // blueの機能をツールバーに割り当てる
          ['style', ['blue']],
          ['style', ['style']],
          ['font', ['bold', 'underline', 'clear']],
          ['color', ['color']],
          ['para', ['ul', 'ol', 'paragraph']],
          ['table', ['table']],
          ['insert', ['link', 'picture', 'video']],
          ['view', ['fullscreen', 'codeview', 'help']],
	        ['font', ['strikethrough']],
        ],
        // blueの機能をボタンにする
        buttons:{
	        blue:blueStyle,
	      },
       });
      });
</script>

すると次のように、希望のスタイルを適用するボタンが反映されます。

実際のエディタはこちらからご覧ください。

テキストを挿入する

単にテキストを挿入したい場合には、pasteHTMLを使います。

たとえば「こんにちは」というテキストをいれるボタンを作ってみます。

まずファイルの文字コードを shift-jisにしておきます。

<meta charset="shift-jis">

script部分に、次のようにコードを入れていきましょう。

    <script>
	
	var helloButton = function(context) {
	var ui = $.summernote.ui;
	var button1 = ui.button({
  	contents: 'hello',
  	click: function() {
 	//こんにちはというテキストを挿入
        context.invoke('editor.pasteHTML', 'こんにちは');
  	}
   	});
 	//この機能をbutton1に割り当てる
	return button1.render();
	}

       jQuery(document).ready(function($) {
        $('#summernote').summernote({
        placeholder: 'Hello stand alone ui',
        tabsize: 2,
        height: 120,
        toolbar: [
 	// helloの機能をツールバーに割り当てる
          ['style', ['hello']],
          ['style', ['style']],
          ['font', ['bold', 'underline', 'clear']],
          ['color', ['color']],
          ['para', ['ul', 'ol', 'paragraph']],
          ['table', ['table']],
          ['insert', ['link', 'picture', 'video']],
          ['view', ['fullscreen', 'codeview', 'help']],
	  ['font', ['strikethrough']],
        ],
 	// helloの機能をボタンにする
	buttons:{
	hello:helloButton,
	},
       });
      });
    </script>

すると次のように、指定した言葉を挿入するボタンが反映されます。

実際のエディタはこちらからご覧ください。

さいごに

今回はsummernoteツールバーのデフォルトボタンを変更する方法を紹介しました。

summernote側に既にあるボタンを加えるのが一番簡単ですが、もしない場合でも、自分でオリジナルボタンを作成できます。

色々試して、自分に合ったリッチテキストエディタをつくっていきましょう♪

Laravel とリッチテキストエディタ

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる
 

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新版Laravel13への対応に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel13に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した本を書きました。 書店やAmazon等のオンラインショップにて販売中
最新版Laravel13対応用サポートガイド(PDF)あり

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。
最新版Laravel13対応用
サポートガイド(PDF)あり

書籍の詳細を見てみる
シェアする
Twitter始めました。

コメント

タイトルとURLをコピーしました