memo
wysiwyg

wysiwygエディタについての学習3

draft-jsを使ってみる続き

キーバインド

https://draftjs.org/docs/advanced-topics-key-bindings.html#content

keyBindingFnで定義される
getDefaultKeyBindingをフォールスルー時に使うと良い

フォールスルー(fall through)

switchのcaseをbreakしないような処理

カスタマイズ

デフォルトをフォールスルーニした関数を定義して、それをEditorクラスに指定するのね
これもモンキーパッチ(reduxのmiddlewareにみた)と呼んで良いのかな

http://melborne.github.io/2013/08/30/monkey-patching-for-prudent-rubyists/

やはり批判的な意味を含むニュアンスなのね。

モンキーパッチ

モンキーパッチ - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%82%AD%E3%83%BC%E3%83%91%E3%83%83%E3%83%81

ゲリラー>ゴリラー>モンキーー>ダックパンチング

若手エンジニア/初心者のためのRuby 2.1入門(12):難しいが強力! Rubyのメタプログラミング、self、特異クラス/メソッド、オープンクラスとモンキーパッチ (4/4) - @IT
http://www.atmarkit.co.jp/ait/articles/1501/06/news028_4.html#03

メタプログラミング的、黒魔術的、用法用量を守ること

キーバインド変更の構造

  • keyBindingFn: バインドの分岐を通ってコメンド名を判別
  • handleKeyCommand: コマンド名を受け取ってコマンド実行

フォーカスマッピング

https://draftjs.org/docs/advanced-topics-managing-focus.html#content

フォーカスの制御を外だし

宣言的ではなくなるが、フォーカスの部分は開発者がシンプルに使えるように外だしした
エディタコンポーネントのpublicメソッドfocus()を外から呼び出せる

宣言型プログラミング

宣言型プログラミング - Wikipedia
https://ja.wikipedia.org/wiki/%E5%AE%A3%E8%A8%80%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

命令型プログラムでは目的を達成するための方法を「手続き」として示すのに対し、宣言型プログラムでは達成すべき目的(出力)を示して、それを実現する手続きはシステムに任せるわけである。

DSLやSQL的なイメージ。

エディタをラップしたときにはfocusを自分で呼ぶ

https://github.com/facebook/draft-js/blob/master/examples/draft-0-10-0/plaintext/plaintext.html

paddingのためにdivで囲んだ時にエディタのそとのdivのフォーカスなどを伝えるときの記述の例。

テキストエディタのコード例
reduxでよくあるやり方に似てる、自分で定義したメソッドじゃなくて元からのEditorのメソッドに紐づける感じかな
コンストラクタで初期化の際に、参照できるようbindにする、このことをなんと呼ぶのかな