Open7

Editor.jsのマニアックな使い方

oreno_ dinneroreno_ dinner

カスタムツール(damage)からstate等を読み込みたい場合は下記の様にconfigを通して渡しましょう。

const EDITOR_JS_TOOLS = {
      embed: { class: Embed, inlineToolbar: true },
      table: { class: Table, inlineToolbar: true },
      paragraph: { class: Paragraph, inlineToolbar: true },
      list: List,
      damage: {
        class: Damage,
        config: {
          userid: user_id,
          diceworld: props.diceworld.diceworld_id,
          characternamelist: characterNamelist,
          characteridlist: characterIDlist,
        },
      },
    }
oreno_ dinneroreno_ dinner

カスタムツールに決定ボタンや数値入力する場合は <input> 等でUIを実装
this.api.listeners.onでクリック等のタイミングで
document.getElementById('damage_input').value で検出できます。
注意しなければならないのは、UI単体のイベント検出はできません。
(.classList.add('cdx-button')はボタンじゃなくてボタン風のCSS枠です)
Element全体で検出してるので入力フォームと実行ボタンはElementを分ける必要があります。

下記サンプルコードです。

class MyTool {
  constructor({data, api}){
    this.api = api;
    this._element  = document.createElement('div');

    this.damage_form = document.createElement('div');
    this.damage_form.innerHTML = `<input type="number" name="damage" id="damage_input" 
pattern="[\d]" maxlength="4" autocomplete="off"/>`  

    this.damage_button = document.createElement('div');

    this.api.listeners.on(this.damage_form, 'click', () => {
    this.damage_value = document.getElementById('damage_input').value
    console.log('input',this.damage_value);
    }, false);

    this.damage_button.classList.add('cdx-button')
    button_damage.innerHTML = 'Damage'
    this.api.listeners.on(damage_button,'click',() => {
    console.log('Button clicked!',this.damage_value);
     },  false)

    this._element.appendChild(this.damage_form)
    this._element.appendChild(this.damage_button) 

   }

    render() {
        return this._element
    }
}
oreno_ dinneroreno_ dinner

カスタムツールへReduxのアクションもconfigを通して渡せた。
ただし、変数への代入の挙動が不安定なのでnullチェック等でのフィルターが必要。

oreno_ dinneroreno_ dinner

Paragraphはimportしたモジュールを使っていないので、カスタムツールの名前をParagraphにしても
カスタムツールがデフォルトになる事は無い。

oreno_ dinneroreno_ dinner

これはreact-editor-jsの所為でした。
react-editor-jsのソースコードを編集すればカスタムツールをデフォルトにすることが出来ます。

oreno_ dinneroreno_ dinner

react-editor-js だと、configの値を更新しても一度描画されると更新されない。
更新する際はリロード処理をしてEditorを再生成しなければならない。