質問をしたときに本当に欲しかったのは、「編集」モードのときの Google Docs と同様の動作でした ( Nate Mielnik の説明による)。私はメディア エディター トラッカーに関するイシューを開いたところ、彼らはそれをコア メディア エディターの一部として実装しないことを決定しましたが、誰かがその機能を拡張機能として追加してくれることを喜んでいると述べました。
そこで、提案どおりにその機能を拡張機能として実装することにしました。これは、 MediumTools 1の一部として見つかります。プロジェクトはまだ非常に初期の段階にあります (たとえば、スタイリングをより良くしたり、より良い縮小方法を使用したりするなどのことは何もしていませんが、そのためのプル リクエストは喜んで受け付けます)。
コードの中身は次のようになります。
var ClassName = {
INNER: 'medium-editor-toolbar-anchor-preview-inner',
INNER_CHANGE: 'medium-editor-toolbar-anchor-preview-inner-change',
INNER_REMOVE: 'medium-editor-toolbar-anchor-preview-inner-remove'
}
var AnchorPreview = MediumEditor.extensions.anchorPreview;
GdocMediumAnchorPreview = MediumEditor.Extension.extend.call(
AnchorPreview, {
/** @override */
getTemplate: function () {
return '<div class="medium-editor-toolbar-anchor-preview">' +
' <a class="' + ClassName.INNER + '"></a>' +
' -' +
' <a class="' + ClassName.INNER_CHANGE + '">Change</a>' +
' |' +
' <a class="' + ClassName.INNER_REMOVE + '">Remove</a>' +
'</div>';
},
/** @override */
createPreview: function () {
var el = this.document.createElement('div');
el.id = 'medium-editor-anchor-preview-' + this.getEditorId();
el.className = 'medium-editor-anchor-preview';
el.innerHTML = this.getTemplate();
var targetBlank =
this.getEditorOption('targetBlank') ||
this.getEditorOption('gdocAnchorTargetBlank');
if (targetBlank) {
el.querySelector('.' + ClassName.INNER).target = '_blank';
}
var changeEl = el.querySelector('.' + ClassName.INNER_CHANGE);
this.on(changeEl, 'click', this.handleClick.bind(this));
var unlinkEl = el.querySelector('.' + ClassName.INNER_REMOVE);
this.on(unlinkEl, 'click', this.handleUnlink.bind(this));
return el;
},
/** Unlink the currently active anchor. */
handleUnlink: function() {
var activeAnchor = this.activeAnchor;
if (activeAnchor) {
this.activeAnchor.outerHTML = this.activeAnchor.innerHTML;
this.hidePreview();
}
}
});
AnchorPreview
説明として、元の/組み込みの拡張機能を「サブクラス化」するために、メディアのプロトタイプ継承のフレーバーを使用するだけです。メソッドをオーバーライドしてgetTemplate
、追加のリンクをマークアップに追加します。次に、 の基本実装から多くを借用しましたがgetPreview
、必要に応じて新しいアクションを各リンクにバインドしました。最後に、「削除」をクリックしたときにリンクを「リンク解除」するアクションが必要だったので、そのためのメソッドを追加しました。unlink メソッドはおそらく contenteditable マジックを使用して (ブラウザーの取り消しスタックの一部であることを確認するために) もう少しうまく行うことができますが、私はそれを理解するのに時間を費やしませんでした (ただし、それは良いプルリクエストになります)興味のある人:-)。
1現在はその部分だけですが、いずれ変更されることを願っています。. .