fn$.editor()(テキストエリア):ブロックエディタ

//ノード名で判定
x = document.getElementById('ts1').nodeName
['H1','H2','H3','H4','H5'].includes(x);

//文字列で判定 -> string(先頭・後方の空白除去、先頭から3文字)
x = textarea.value.trim().slice(0,3);
//includesは大文字小文字を区別する
['<H1','<H2','<H3','<H4','<H5','<h1','<h2','<h3','<h4','<h5'].includes(x);
fn$.editor/.子要素をブロック化する-> fn$.block 関数で処理
//

-> fn$.block:/1:子要素をボックス化する

  let $add = (op.mode == 'block')?el$(op.addbtn):'';
  let $box = fn$.box({box:op.box,add:$add})(el);
//単体モード or ブロックモードで追加ボタンの有無
  if($add) $box.footer.appendChild($box.add);
//IDをボックスメインに付与:必要??
  let $id = fn$.setid('cry')($box.main);
fn$.box//2:子要素をノード判定->タイプ分-> バーを生成セット->個別編集バーを生成セット

  //中身を判定  ノード||テキストノード||空 -> 空の場合は 'textbox'
  //   let $inner = $box.main.firstElementChild||$box.main.firstChild||$box.main.innerHTML;
     const $inner = $box.main.childNodes;
  //タイプをノードから判定する場合
      if(!op.type) {
        op.type = ($inner.length == 0)?'textbox':editor$.checkNode($inner.item(0));
      }
  //タイプに該当するclass
      const $class = editor$.class[editor$.type.indexOf(op.type)];
  //編集ボックスにタイプに応じた権限を与える

  //バーをセット(パーはページで一位)
      const $bar = document.getElementById(op.id_bar)||el$({id:op.id_bar});
      $box.header.appendChild($bar);
  //バーに個別バー&ボタンをセット
      const $editbar = document.getElementById(op.prefix + op.type + '-id')||el$({id:op.prefix + op.type + '-id',class:op.class_inner_bar + ' ' + $class  },list$(editor$.btn[op.type],'',editor$.btn.tpl));
      $bar.appendChild($editbar);
  console.log(op.type);
  //タイプ別に編集モードにする
  //contentEditableモードにする
      if(['blockquote','textbox'].includes(op.type)) $box.main.firstElementChild.setAttribute('contentEditable','true');
      if(op.type == 'headline') $box.main.firstElementChild.firstElementChild.setAttribute('contentEditable','true');
仕組み::編集バーアクティブ -> ターゲットをdata-targetにセット -> ターゲットコンテンツに作用する
fn$.box//2-1:編集バーのボタン=メニューのところ

  //ボタンに関数をセットする関数
  editor$.fun.set = function(type){
   return function(el) {
     return editor$.fun[type](editor$.fnop[type])(el);
   }
  };

  //エレメント生成配列で、関数をセットする
  /*  見出し用  */
  editor$.btn.headline = [
    { name:"デザイン", icon:"nja-logo-design", fun: editor$.fun.set('headline'),},
  ];
fn$.box//3:ボックスを編集モードにする -> contentEditable="true"

  //タイプ別に編集モードにする
  //contentEditableモードにする
      if(['blockquote','textbox'].includes(op.type)) $box.main.firstElementChild.setAttribute('contentEditable','true');
      if(op.type == 'headline') $box.main.firstElementChild.firstElementChild.setAttribute('contentEditable','true');

fn$.box//4:ブロック用をクリックした時にバーを表示する
//クリックしたときに
$box.main.addEventListener('click',function(){
//1回だけ動作(ターゲットIDとブロック要素のIDが一致しない場合のみ動作)
  if($bar.getAttribute('data-target') !=  $id) {
//編集バーを移動
          $box.header.appendChild($bar);
//個別バーをアクティブ - タイプクラスをつけてCSSで表示・非表示
          fn$.inClass(editor$.class,'remove')($bar);
          $bar.classList.add($class);
//ターゲットの指定を変える
          $bar.setAttribute('data-target',$id);
  }
  },false);
fn$.block()(ターゲット):単体の場合

この文章はダミーです。夏は夜。月の頃はさらなり、闇もなほ、蛍のおほく飛びちがひたる。また、ただ一つ二つなど、ほのかにうち光りて行くも、をかし。雨など降るも、をかし。この文章はダミーです。秋は夕暮れ。夕日のさして、山の端いと近くなりたるに、烏の、寝所へ行くとて、三つ四つ、二つ三つなど、飛び急ぐさへ、あはれなり。まいて、雁などのつらねたるが、いと小さく見ゆるは、いとをかし。日入りはてて、風の音、虫の音など、はた、言ふべきにあらず。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。レイアウトを確認するための文章ですので意味はありません。

この文章はダミーです。夏は夜。月の頃はさらなり、闇もなほ、蛍のおほく飛びちがひたる。また、ただ一つ二つなど、ほのかにうち光りて行くも、をかし。雨など降るも、をかし。この文章はダミーです。秋は夕暮れ。夕日のさして、山の端いと近くなりたるに、烏の、寝所へ行くとて、三つ四つ、二つ三つなど、飛び急ぐさへ、あはれなり。まいて、雁などのつらねたるが、いと小さく見ゆるは、いとをかし。日入りはてて、風の音、虫の音など、はた、言ふべきにあらず。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。レイアウトを確認するための文章ですので意味はありません。

この文章はダミーです。夏は夜。月の頃はさらなり、闇もなほ、蛍のおほく飛びちがひたる。また、ただ一つ二つなど、ほのかにうち光りて行くも、をかし。雨など降るも、をかし。この文章はダミーです。秋は夕暮れ。夕日のさして、山の端いと近くなりたるに、烏の、寝所へ行くとて、三つ四つ、二つ三つなど、飛び急ぐさへ、あはれなり。まいて、雁などのつらねたるが、いと小さく見ゆるは、いとをかし。日入りはてて、風の音、虫の音など、はた、言ふべきにあらず。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。レイアウトを確認するための文章ですので意味はありません。

Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item
Flex item

//.childNodesは、空の場合もNodelistを返す。length = 0;


てきすと
てきすと
吹き出しフォーマット
ジー
今日の晩飯はなんじゃのーーー?


<div class="box-nj col-12" data-type="bubble">
  <div class="cmtbox rcm">
    <div class="cmt-icon" data-face="img-16262537746322">
      <div class="face-icon face_shock">
        <span class="face_emotion"></span>
        <div class="face-o w64">
          <img src="http://test.example.com/photo/202107/12113548/1626068223067-1.png">
          <span class="facetag">ジー</span>
        </div>
      </div>
    </div>
    <div class="cmt cmt-r p-2 once-anime" data-aniclass="once-anime">今日の晩飯はなんじゃのーーー?</div>
  </div>
</div>