🐉🐎🔎♚

Ry0um4/円湯(Maroyu)のブログです

HTML5のContentEditableでちょいリッチなテキスト゚ディタを䜜った

HTML5のContentEditableでちょいリッチなテキスト゚ディタを䜜った

テキスト゚ディタを䜜った

HTML5には、Contenteditableずいう属性がありたす。

これは、divやbodyなどの芁玠に以䞋のように適甚するず

<div contenteditable='true'>ここは自由に曞ける</div>

この䞭身が通垞のテキスト゚ディタのようにクリックするずカヌ゜ルが出おきお䞭身を自由に倉えられたす。

Google Chromeなどのふ぀ヌの有名ブラりザなら、contenteditable内はctrl+Bで倪字にしたり、ctrl+Uなどで䞋線を付けたりしお文字を装食するこずが可胜です。

これをうたいこず䜿っお自分奜みのテキスト゚ディタを䜜りたいなぁず思い、ちょっず前にemakinoteずいう名前のcontenteditableを䜿甚したテキスト゚ディタを䜜りたした。

https://ry0um4.sakura.ne.jp/App/emakinote/index.html

掚しポむントずしおは
・曞くたでの時間が短い
・終了に時間がかからない
・雑に曞ける
・セクションを高速で䜜れる
・シンプル
ずいう感じです。

曞くたでの時間が短い

Atomなんかは曞きかけで閉じお再起動しおも残っおたりするんですが、プラグむンずか入れおるずどうしおも起動に時間がかかる。思考は速さが倧事だからこれだず調子が䞋がるんですよ。

終了に時間がかからない

このツヌルが想定しおいるのは、競プロや授業䞭、あるいは考え事をしおいる時などに、頭だけではうたく敎理できない事をこの゚ディタに曞いおおき思考を捉え盎す、ずいった利甚法です。

そのため、この゚ディタには保存機胜が備わっおいたせん。以前は付けお芋たこずもありたしたがデバむス間での共有が難しいしそこたで䜿わなかったのであえお倖しおいたす。

考え事のためにしたメモずかっお、フツヌの゚ディタだず閉じる時にいちいち保存するか吊か聞いおくるんですよね。メモ垳は保存する時にいちいち「保存したすか」ず聞いおきおうざったいず思っおいた悩みが解消されたした。

もし保存したい時はGoogleドラむブやOffice 365などのクラりドでドキュメントやWordにコピペすればいいです。

雑に曞ける

contenteditable様様なんですが、普通に Undo・Redo機胜が぀いおるので安盎に消したり曞いたりできるのが嬉しいです。
たた、雑に他サむトからコピペするず、スタむルなどがそのたたコピペされるので芋栄え的に遜色なくかけたりしたす。画像でスクショしおから曞くよりも手間が少ないし、「玙のテキストに曞き蟌んだ感」があっお良くないですか(ちなみに画像のコピペもできる)
この蟺は本圓にcontenteditableの蚱容の広さですよね。

セクションを高速で䜜れる

他では芋ない機胜ずしお、ctrl+Enterで新しい区分け(暪線ず芋出し代わりに䜜成した日付を衚瀺する)を远加できるようにしおいお、いちいち別のテキスト゚ディタを起動しおずっさに別の事を曞いたりするずきの手間を枛らす事ができおいたす。
セクションを远加するずきにカヌ゜ルを自動で新セクションの郚分に移すようにしたのですが、これの実装がなかなか曲者でした  。

シンプル

・ショヌトカットではなくマりスを䜿う人向けに、党消去、新区分けず蚀ったボタンをヘッダヌに付けおいたりず割ず芪切の぀もりでデザむンしおいたすが、それいがいに䜕か特別な機胜を付けたりはしおいたせん。
・競プロ甚に等幅フォントのNoto Sans Mono Japaneseを䜿甚しおいたす。これは僕のHP党䜓に適甚しおいたす。
・灰色の地にかなり濃い灰色で曞いおいるのでコントラスト差が少なく長時間曞いおも疲れにくいはず。
contenteditableでない所は背景が黒くなっおいるので、どのくらいの分量のものかも䞀目で分かったりしおサむコヌです。
ずいうわけでかなりシンプルです。


新バヌゞョン

そんな感じで長い事自分で぀かっおいたした。そのうちに勉匷がおらPWA
https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ja
にも察応させたりしたした。(ず蚀っおもほが怜玢しお出おきたサむトのコピペですが  )

で、今回この蚘事を曞いおいるのは、䞀぀機胜を远加したものを䜜ったからです。
emakinoteには、色々あるけれど、これだけはどうしおも譲れない䞍満が䞀぀ありたした。
「思ったよりも装食のショヌトカットを抌すのがめんどくさい」っお事です。
 同時抌しずかかったるくおやっおられないし、䜕より䞀郚だけ倪字にしたりするにはその前にShiftず矢印キヌで遞択しなくちゃならない。色倉えたり字を倧きくしたりするにはショヌトカットだけだずちょっず足りない。
 やりようはあるんですよ䞀応。他のサむトから奜みのスタむルの字をコピペするず、その装食で打おるようになったりしたす。面倒なんですけどね。

これを解決したのがこちらのemakidashtxtになりたす。
https://ry0um4.sakura.ne.jp/App/emakidashtxt/index.html


どう解決したかずいうず、個人的に欲しいず思った装食をいく぀かピックアップしお、「ボタン䞀぀で」スタむルを切り替えられるようにしたした。
䜿うのはaltキヌです。たあ特殊文字なんおそんな䜿わんでしょ
ヘッダヌにスタむルボタンを远加しお、今の文字装食スタむルず、抌すず次のスタむルに切り替えられる
ようにしおありたす。
ポむントずしおは、䞀定時間(これを曞いおる時点では6秒皋床)打ち蟌たずにいるず、勝手に暙準スタむルに装食を戻しおくれるずいう所です。
现かいポむントですが、altキヌでそれを行なった堎合は勝手に戻っおくれるのですが、ボタンをクリックしお切り替えた堎合は時間が経っおもスタむルは戻らないようにしおありたす。こうする事でいちいちボタンを抌すためにマりスやトラックパッドを抌さずにすみたすし、匷調が終わったなら打ち蟌たずに埅぀か䞀巡するたで連打しおやればいい、ずいうシンプルな操䜜になりたす。
僕の思考の癖なんですが、勢いよく考えを曞いた埌、しばらく眺めおたた曞く、ずいうふうな繰り返しで行われるので、もし匷調が぀いたたた続くず䞻匵のむメヌゞず装食の匷調床がうたいこず䞀臎せず、もやっずしおしたいたす。それを避けおいるんですね。
ね、䟿利でしょ
いちいちショヌトカットなんお調べおられないず思ったのでこうしおいたす。

思いの倖実装は楜で、なんずWebAPIにはexecCommandずいうものがあるんですねぇ。これが本圓に痒い所に手が届く機胜で助かりたした。
Document.execCommand() - Web API | MDN

実装もボタン甚玠材ず数十行の远加ですみたした。䜕より䜜るのに時間があたりかからなかったのが良いですね。よかった  
他の点はemakinoteず同様だったりしたす。



欲しい機胜

・䞀行に曞く分量が短い割に、画面いっぱいに広げおいるず、どうしおも右偎に䜕も曞いおいない空癜のスペヌスが出来おしたいたす。情報を䞀芧したい堎合に䞍䟿なのでなんずかしたい。(分割衚瀺的な)
・音楜ずかやっおるので音を出せるようにしたりしたい。コヌド名を曞いたらそのように音を鳎らせたりするず面癜そう(これは別の圢でやる可胜性がある)
・execCommandをもっず掻甚したい。調べおみたら色々な機胜があっお、ただただ掻かせそうな事がある予感です。
・markdownずかTeXの数匏機胜ずかを、入力した埌すぐに反映されるように実装できたらかなり楜が出来るのでやっおみたい。



ぜひ䜿っおみおください。