「addEventListener」と「on…」は違う
例えば「elem がクリックされた時に処理 ~ をする」という、ありふれたコードを書く場合に、JavaScriptでは 2通りの似た書式が、どこにも書かれています。
イベントを捉えて動作するこの二つのコードは、通常どちらも同じ結果になります。 しかし、この2種のコードが存在するには、ちゃんとした理由がある様です。
以下にあっさりと説明してくれていますが、「onclick」は動作を受け入れる窓口が1つで、新しい「onclick」が発行されると、その命令が以前の「onclick」の命令を上書きしてしまうという事です。
これは「addEventListener」の方が確実で万能かと思いそうですが、実はそうではありません。 以前の命令が消えてくれるのは、大変に使い易い場合があります。 一旦「addEventListener」を設定すると、これは常にイベントに反応して、プログラム上でそれをコントロール出来ずに誤動作に繋がる場面が、時々あります。 このコントロールは時として困難なものです。
「LinkCard Editor ⭐」のバグ
前回から気付いていたのですが、記事上に複数のリンクカードがあり、リンクURLの書換えテストをくりかえしていると、想定外の動作が生じる事がありました。
この問題は、以下の「ver. 3.0」から内包していた様です。
症状
① 片方のリンクカードを編集選択して、「URL入力枠」にキャレットを入れる。
➁「URL入力枠」の幅が拡張する
➂「Enter」キーを押す → 「URL入力枠」が閉じる
これは正常動作で、「URL入力枠」の内容と「カードのリンクURL」は、書換えていない「一致」なので、「Enter」で書換えコードがそれを判定して終了しています。
④ もう一方のカードを編集選択して、「URL入力枠」にキャレットを入れる。
➄「URL入力枠」の幅が拡張する
⑥「Enter」キーを押す → 「書き換えを確認するダイアログが出る」
この後の操作によっては動作が変になり、後のカードのリンクURLが書変わったりする場合があります。 上手く逃れて「元のリンクURL」になる事もありますが。
⑥以降は異常動作で、➂の様に「URLに入力枠」が閉じるのが正常です。
原因
➂~④で編集対象のカードを変更しているのに、⑥の判定コードは、最初のカードの「リンクURL」のままで比較しているため。
こういう事って時々あるなぁと思いながら、修正コードを色々と書いたのですが、なかなか出口が判りませんでした。
「rewrite()」が書換えコードで、「Enter」キー入力で書換え(判定)コードを起動する簡単なものです。 この「rewrite()」が、最初の「リンクURL」が設定されたまで判定を続け、この更新されない状態から抜けられません。
で、最後に上手く行ったのは以下の修正コードでした。
この違いは、最初に書いた事なのだと思います。
前者のコードは最初の判定を繰り返し、別のカードを扱い始めても、過去の判定を繰り返すのだと思います。 上手くこれをコントロールして、現在のカードの判定を可能にする方法はあると思いますが、実際は見つけられませんでした。
複雑な事をして「addEventListener」を使うより、「onkeydown」を使えば、その場だけの判定を毎回してくれるので、何の問題も生じない事が判りました。
テキスト編集の耐性を更に強化
初期に比べると、テキスト部の編集で崩れる事はとても少なくなったのですが、デザイン崩れを生じる操作や、テキスト編集操作について、以下の事が判っています。
◎ 画像・アメブロ絵文字の挿入、テキストのペースト等は レイアウト崩れを生じる。
◎ テキストのペーストは「Ctrl+Shift+V」(プレーンテキストとして貼り付ける)で行うとレイアウト崩れを生じない。
◎ テキストでは「Shift+Enter」で改行ができる。
◎ HTML編集からテキスト部を編集すれば、アメブロ絵文字を記載できる。
編集に躊躇がなくなってテキスト部を弄る事が多くなり、最近気付いた問題が<br>タグが要素を分裂させる問題です。 これは、以下の様な表示になります。
DevToolsで調べると、欠けた部分の場所に <br>があり、空白行がひとつの表示項目の様に表示されています。
HTMLを見ると ❶「記事タイトル」 ❷「記事の出だし」 ❸「ドメイン表示」に割り込んで <br>タグが 1項目の扱いになっています。
この <br>タグは、❷「記事の出だし」のテキスト編集過程で、「Shift+Enter」で入れた改行が、たまたま記事の末尾に残っていたものです。
<span>▢▢▢▢▢▢▢▢▢▢▢<br>▢▢▢▢▢▢▢▢▢▢</span>
の形の改行の入り方では問題が無いのですが、
<span>▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢<br></span>
と、末尾に<br>があると、下の様に自動的に<span>の外に出てしまいます。
<span>▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢▢</span><br>
この様な自動処理は、編集画面の仕様と思われます。
その結果、「記事の出だし」の項目が、2個の項目に分裂した表示となるわけです。
以前に似た様な問題で、Firefox特有の改行コード生成の対策をしていたので、そのコードを拡張して、この <br>タグが生じたら削除する対策をしました。
以下が、対策コードです。
このコードは、「ver. 3.6」以降に実装します。
デフォルトの「記事の出だし」は、あらかじめ「br要素」が削除されています。「記事の出だし」の記述が少し変だと気付いている方は多いでしょう。「記事タイトル」や「記事の出だし」を「Shift+Enter」で改行してアレンジすれば、ワンランク上のリンクカードになると思います。
「LinkCard Editor ⭐」のマニュアル
「LinkCard Editor ⭐」の基本操作の詳細は、以下のマニュアルを参照ください。
「LinkCard Editor ⭐」の導入手順
このツールは Chrome / Edge / Firefox の拡張機能「Tampermonkey」上で動作します。 以下に、このツールの導入手順を簡単に説明します。
● ページ文字数制限のため、「LinkCard Editor ⭐」ver. 3.6 のスクリプトコードは以下に置いています。
❶「Tampermonkey」を導入します
使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。 以下のページに簡単な導入の説明があるので参照ください。
❷「Tampermonkey」にスクリプトを登録します
●「Tampermonkey」の「+」マークの「新規スクリプト」タブを開きます。
●「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠にスクリプトコードをコピー&ペーストします。
〔コピー方法〕 軽量シンプルなツール「PreBox Button 」を使うと
コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」
の操作で、掲載コードのコピーが可能になります。
● コード行数が多い場合のペースト操作は、「編集枠」の第1行目に「ゴミ文字」が混入していないかを確認してください。
● 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。
もっと文字数を!
特別なことをやっているので仕方がないのですが、コード行数が 1400行に近付き、「LinkCard Editor ⭐」のコードを掲載するのが困難になって来ました。
後は、コメント記述を削除したり、変数名を簡素にしたり、などという爪に火を灯す様な事が必要になります。 そんな事をすると、コードのメンテがし難くなるので、いっその事コードを分割掲載するのが良いのかも知れません。
「GitHub」を使って公開とか、「Chrome」の拡張機能に登録というのもありか? なんだかな...
「LinkCard Editor ⭐」最新版について
旧いバージョンの「LinkCard Editor ⭐」は、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。 最新バージョンへのリンクは、以下のページのリンクリストから探せます。