Tinymce リッチテキストを使用して Vue のツールバーボタンをカスタマイズする実践

Tinymce リッチテキストを使用して Vue のツールバーボタンをカスタマイズする実践

リッチ テキスト エディターは数多くありますが、人気のあるものとしては、UEditor、kindeditor、CKEditor などがあります。しかし、今日は tniyMCE のプラグイン開発を実装します。

tinymce、tinymce ts、tinymce-vue 宣言ファイルをインストールする

npm をインストール tinymce -S
npm インストール @types/tinymce -S
npm をインストールします @tinymce/tinymce-vue -S

パッケージコンポーネント

<テンプレート>
    <div>
        <エディター:id="id" v-model="content" :init="init"></エディター>
    </div>
</テンプレート>

<script lang="ts">
'vue-property-decorator' から { Component、Prop、Vue、Watch } をインポートします。

'tinymce' から tinymce をインポートします。
'@tinymce/tinymce-vue' から Editor をインポートします。

'tinymce/themes/silver/theme' をインポートします。
'tinymce/plugins/image' をインポートします。
'tinymce/plugins/link' をインポートします。
'tinymce/plugins/code' をインポートします。
'tinymce/plugins/table' をインポートします。
'tinymce/plugins/lists' をインポートします。
'tinymce/plugins/contextmenu' をインポートします。
'tinymce/plugins/wordcount' をインポートします。
'tinymce/plugins/colorpicker' をインポートします。
'tinymce/plugins/textcolor' をインポートします。
'tinymce/plugins/media' をインポートします。
'tinymce/plugins/fullscreen' をインポートします。
'tinymce/plugins/preview' をインポートします。
'tinymce/plugins/pagebreak' をインポートします。
'tinymce/plugins/insertdatetime' をインポートします。
'tinymce/plugins/hr' をインポートします。
'tinymce/plugins/paste' をインポートします。
'tinymce/plugins/codesample' をインポートします。
'tinymce/icons/default/icons' をインポートします。

コンソールにログ出力します。

@Component({ name: 'TinymceEditer', components: { エディター } })
エクスポートデフォルトクラスはVueを拡張します{
    //プロパティIDを設定する
    @Prop({ デフォルト: 'vue-tinymce-' + +new Date() }) id!: 文字列;
 
 //デフォルトの高さ @Prop({ default: 300 }) height!: number;

    @Prop({ デフォルト: '' })
    プライベート値!: 文字列;

    プライベートコンテンツ: 文字列 = '';

    @Watch('値')
    プライベートonChangeValue(newVal: 文字列) {
        this.content = newVal;
    }

    @Watch('コンテンツ')
    プライベートonChangeContent(newVal: 文字列) {
        this.$emit('input', newVal);
    }

    //リッチテキストボックスの初期化構成 private get init() {
        戻る {
            セレクター: '#' + this.id, //リッチテキストエディターID
            language: 'zh_CN', //言語language_url: '/tinymce/zh_CN.js', //言語パッケージkin_url: '/tinymce/skins/ui/oxide', //エディターが正しく動作するにはスキンが必要なので、前にコピーしたスキンファイルを指すように skin_url を設定しますmenubar: false, //メニューバーplugins:
                'リンク リスト 画像 コード テーブル カラーピッカー テキストカラー 単語数 コンテキストメニュー メディア テーブル 全画面プレビュー ページブレーク 挿入日時 時間 貼り付け コードサンプル 絵文字', //プラグイン ツールバー:
                : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
            //実行をインスタンス化 init_instance_callback: (editor: any) => {
                this.content && editor.setContent(this.content);

                //this.hasInit = true
                editor.on('NodeChange KeyUp SetContent を変更', () => {
                    //this.hasChange = true
                    コンテンツを編集します。
                });
            },

            //ビデオ設定コールバック video_template_callback: (data: any) => {
                `<ビデオ幅=" を返します
                    ${data.width} " 高さ="${data.height}"
                    ${data.poster ? 'poster="' + data.poster + '"' : ''}
                    コントロール="コントロール">
                    <ソース src="${data.source}"/>
                </ビデオ>`;
            },

            // 画像を貼り付けるコールバック images_upload_handler: (blobInfo: any, success: Function, failure: Function) => {
                this.handleImgUpload(blobInfo、成功、失敗);
            },
        };
    }

    プライベートマウント() {
        this.content = this.value;
    }

    //写真をアップロード private handleImgUpload(blobInfo: any, success: Function, failure: Function) {
        this.$emit('upload', blobInfo, success, failure);
    }
}
</スクリプト>

<スタイル lang="scss">
.tox-tinymce-aux {
    z-index: 3000 !重要;
}
</スタイル>

コンポーネントの使用

<テンプレート>
   <tinymce v-model="コンテンツ" />
</テンプレート>

<script lang="ts">
'vue-property-decorator' から Component、Vue } をインポートします。
'@/components/tinymce/tinymce.vue' から Tinymce をインポートします。

@成分({
    コンポーネント:
        ティニムス、
    },
})
エクスポートデフォルトクラスはVueを拡張します{
    プライベートコンテンツ: 文字列 = '';
}
</スクリプト>

<style lang="scss" スコープ></style>

Vue は Tinymce リッチテキストエディタを使用してツールバーボタンをカスタマイズします

ここに画像の説明を挿入

ここで縮小ボタンを追加しました

 初期化: {
        言語: "zh_CN",
        スキンのURL: "/tinymce/skins/ui/oxide",
        高さ: "100%",
        フォントサイズ形式: "8pt 10pt 12pt 14pt 16pt 18pt 24pt 36pt",
        フォントフォーマット:
          "Microsoft YaHei=Microsoft YaHei;Founder FangSong_GBK=Founder FangSong_GBK;Songti=simsun,serif;FangSongti=FangSong,serif;Boldti=SimHei;Times New Roman=Times New Roman;",
        プラグイン: {
	      タイプ: [文字列、配列],
	      デフォルト: "コード リスト 画像 メディア テーブル 単語数 インデント 2em"
	    、
        ツールバー:
	      タイプ: [文字列、配列],
	      デフォルト:
	        「コード | 行の高さ | 元に戻す やり直し | フォントサイズ選択 | フォント選択 | 形式選択 | 太字 斜体 前景色 背景色 | alignleft aligncenter alignright alignjustify | myCustomToolbarButton | 箇条書き 数値リスト アウトデント インデント indent2em | リスト 画像 メディア テーブル | 形式を削除」
	    },
        ブランディング: 偽、
        メニューバー: false、
        セットアップ: エディター => {
          _this = this とします。
          editor.ui.registry.addButton("myCustomToolbarButton", {
            テキスト:「縮小」、
            onAction: 関数() {
              _this.show= !_this.show;
            }
          });
        }
      },

キーコード

ここでは矢印関数が使われています => Vue のプロパティとイベントを操作するため

 セットアップ: エディター => {
    _this = this とします。
    editor.ui.registry.addButton("myCustomToolbarButton", {
      テキスト:「縮小」、
      onAction: 関数() {
        _this.show= !_this.show;
      }
    });
  }

これで、Tinymce リッチ テキストを使用して Vue のツールバー ボタンをカスタマイズする実践に関するこの記事は終了です。Vue Tinymce カスタム ツールバーの関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue はリッチ テキスト エディタ Vue-Quill-Editor を使用します (カスタム画像アップロード サービス、明確なコピー アンド ペースト スタイルなどを含む)
  • Vue+Element UI+vue-quill-editor リッチテキストエディタとカスタマイズされた画像挿入

<<:  画像ボタン送信とフォーム繰り返し送信の問題に関する議論

>>:  フレックスインサイドボタンの垂直方向の中央揃えが中央揃えにならない問題の解決方法

推薦する

JavaScriptのクローン作成についての簡単な説明

目次1. 浅いクローニング2. ディープクローニング1. 浅いクローニング浅いクローンでは配列やオブ...

jQueryはシンプルなカルーセル効果を実装します

みなさんこんにちは。今日はカルーセルの実装についてお話しします。私が作成したカルーセルの効果は次のと...

Linuxのバージョン情報を復号化する方法

Linux バージョンに関する情報を表示および解釈するのは、見た目よりも少し複雑です。単純なバージョ...

MySQL の current_timestamp の落とし穴とその解決策を共有する

目次MySQL の current_timestamp の落とし穴エラーを報告する私の解決策mysq...

HTML フォームを送信するいくつかの方法_PowerNode Java Academy

方法1: 送信ボタンから送信する <!DOCTYPE html> <html>...

HTML の色に関する参考資料

HTML では、色は 2 つの方法で表現されます。 1 つは、青の場合は blue のように色の名前...

HTMLテーブルレイアウトの実践的な使い方の詳しい説明

テーブルはいつ使用されますか?最近では、Web ページの全体的なレイアウトにテーブルが使用されること...

VMwareでCentOSがインターネットにアクセスできない問題を素早く解決

昨日、VMware に CentOS7 をインストールしました。Tomcat パッケージを転送するた...

Web プロジェクト開発 VUE の混合と継承の原則

目次ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン定義とグローバ...

Vue再帰コンポーネントの簡単な使用例

序文多くの学生は既に再帰に精通していると思います。アルゴリズムの問​​題を解決するために再帰がよく使...

Linux システムの .bash_profile ファイルの詳細な説明

目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...

Nginx コンパイル済み nginx - 新しいモジュールを追加

1. 既存のモジュールを表示する nginx の sbin ディレクトリに nginx の sbin...

ウェブデザインの達人がよく使うレスポンシブフレームワークを共有する(要約)

この記事では、Web デザインの達人がよく使用するレスポンシブ フレームワーク (概要) を紹介し、...

HTMLプログラミングタグとドキュメント構造の詳細な説明

HTML を使用してコンテンツをマークアップする目的は、Web ページにセマンティクスを与えることで...

JavaScript におけるセミコロンの詳細

序文JavaScript ではセミコロンはオプションであり、使用するかどうかは主にコーディング スタ...