表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
とある割烹芸人の開発日誌 ~100日以内に割烹エディターをリリースする割烹芸人~  作者: とある割烹芸人まーくつーせかんど
α版への道
12/48

37日目 割烹芸人の開発2

今回は変換部を作っていきます。

割烹エディターの核として利用するEditor.jsの出力はJSON形式です。


JSON形式とはJavaScript Object Notationの略で、テキストベースのデータフォーマットです。13日の金曜日のあの人とは関係ないです。


JSON形式はこんな風にデータが波括弧で括られていてキーとデータが結び付けられた構造になっています。


例えばこんなかんじ。


挿絵(By みてみん)



ちなみに小説家になろうデベロッパーが提供しているAPIもアウトパラメータをJSON形式にするとJSONで出力してくれます。


挿絵(By みてみん)


挿絵(By みてみん)



https://api.syosetu.com/novelapi/api/?out=json&ncode=N3582GC





JSON形式はプログラム上でデータを扱うのが便利なのでそのままでもいいんですが、最終出力にするためにはそれをHTMLに変換する必要があります。


活動報告に突っ込めるような形式に変換してやる必要があります。



なのでその変換部を作っていきます。といってもそこまで難しくはなくて、基本的にはblocks要素のtypeを調べて変換させればいいです。そのあとの設定項目でさらに分岐させる感じにします。



ということで実装していきます。



文章を書くところ:


<div id="editor"></div>

<button id="save-button">押すと変換される</button>


変換した後のソースコードが出力されるところ:


<textarea id="output-text"></textarea>

<button id="copy-button">押すとコピーすることができる</button>


<pre id="output"></pre>



挿絵(By みてみん)


まずはHTMLの方に出力後の置き場所としてtextareaを作成。


変換ボタン、コピーボタンを作ります。(縦書きで作ったのを再利用)


次に、ボタンを押したときの処理を追加。前回はinput buttonに処理を書いていたけど今回はイベントリスナーを利用します。アロー関数にも慣れたいので。



const saveButton = document.getElementById('save-button');

const output = document.getElementById('output');

const outputtext = document.getElementById('output-text');


saveButton.addEventListener('click', () => {

editor.save().then( savedData => {

output.innerHTML = JSON.stringify(savedData, null, 4);

outputtext.innerHTML = parsedata(savedData);

})

});


const copyButton = document.getElementById('copy-button');

copyButton.addEventListener('click', () => {

outputtext.select();

document.execCommand("Copy");

});



saveButton.addEventListener('click', () => {});でボタンを押した処理を実現してます。

outputtext.innerHTML = parsedata(savedData);でパースしたHTMLタグを返すようにします。



function parsedata(savedata){


let returndata = '';


savedata.blocks.forEach((value,index) =>{


switch (value.type){


case 'paragraph':

returndata += ('<p>' + value.data.text + '</p>');

break;


case 'p':

returndata += value.data.text + '\n';

break;


default:

break;

}

});


return returndata;


}


パースはこんな感じで、.forEach((value,index)で要素をループさせて実行してます。

value.typeで分岐させています。今は簡単な処理しか書いてないけど、カスタムブロックをついかしたら増やしていきます。


挿絵(By みてみん)


ということで暫定の出力ができたので、ここからカスタムブロックを作っていきます。




挿絵(By みてみん)

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ