8月3日更新、グローバルフィルター版も作成しました。
概要
MT4のWYSIWYG(リッチテキスト)エディターが生成するHTMLをクリーンアップします。
要素タイプ名と属性名を小文字に変換し、空要素タグを /> で閉じます。また、B, I, U, STRIKE, FONT 等の物理要素をそれぞれ STRONG, EM, INS, DEL, SPAN要素に置換します。
また、ダブルクォーテーションで囲まれていない属性値をダブルクォーテーションで括ります。
背景・経緯
MT4のWYSIWYG編集では、例えば "<br>" が "<br />" にならないとか IMG要素が閉じられない (つまり空要素が />で終わらない) 問題があります(Beta2の時にフィードバック済み)。
またWindows版 Internet Explorer, Opera* だと要素タイプ名/属性名が大文字になってしまいます。
*Macintosh版 Safariでも要素タイプ名/属性名は大文字になりますが、そもそもSafariではWYSIWYGがうまく動作しません。
テンプレートはXHTMLで書かれていますのでこれらの部分はXHTMLとして正しくないことになります。
また、B, I, U, STRIKE, FONT 等の要素が使われることからWYSIWYGを敬遠する人も多いかと思います。
簡単に修正できるのか? と思っていましたがBeta7で修正されていないところを見るとコード数行で済む問題でもないようです。
H.Fujimotoさんのエントリーによると、
動作からすると、リッチテキストエディター部分のinnerHTMLプロパティをそのまま出力しているようです。
とあります。となるとブラウザがHTMLを生成しているわけで、修正するには根本的に実装方法を変える必要があるという、ちょっとやっかいな仕様ということになります。
MT4のWYSIWYGエディタについて言及している他サイトのエントリー
- The blog of H.Fujimoto:Movable Type 4 βレビュー(その2・編集関連)
- Movable Type 4 ベータ1のWYSIWYGを試してみた - hakuro.info blog
- 今日の研究:Movable Type 4 Beta1の投稿メニューをテストしてみた: 世界中の1%の人々へ
ということもあって、MT4のWYSIWYGエディタが生成したHTMLを出来る限りクリーンアップするプラグインを作成しました。
利用方法
プラグインフォルダに tag2xhtml.pl をアップロードします。
再構築の際 (ファイルがディスクに書き出される直前) にファイル全体に対して処理を行います(「確認」段階では処理は行われません。またデータベースに格納されるデータは変換されません)。
ダイナミックパブリッシングには未対応です。
処理内容
- 要素タイプ名と属性名を小文字に変換します。
- 空要素タグを /> で閉じます。
- B, I, U, STRIKE, FONT 等の物理要素をそれぞれ STRONG, EM, INS, DEL, SPAN要素に置換します (簡易的な対応ではありますが、主な視覚系UAのデフォルトスタイルが同等な論理要素に置換します) 。
対応バージョン
MovableType3.x, MovableType4.0
ライセンス
パブリック・ドメイン
ダウンロード
カテゴリー: MovableTypeプラグイン


コメント (2)
こんにちは。
私もシックスアパートにフィードバックしましたが、「対応を検討している」という返事が来ました。
本製品に間に合うかどうか微妙な気もしますが、ぜひ対応して欲しいものです。
ちなみに、リッチテキストエディターの内容は、mt-static/js/common/Editor/iframe.jsにあるgetHTMLメソッドで変換されています。
このメソッドを見ると、innerHTMLプロパティをそのまま返していることが分かります。
このメソッドを書き換えて、DOMを使ってHTMLを再構成するというのが、この問題の本質的な解決方法になると思われます。
投稿者: 壱 | 2007年07月20日 19:50
日時: 2007年07月20日 19:50
壱さんこんばんは。
MT4のインターフェイスが変更になった時点で JavaScriptとかAjax使われているあたりブラウザ互換とかで苦労しそうな気がしてましたが、なるほどそうですか。
mt-static/js/common/Editor/iframe.js ですか。
ちょっと見てみようかな。このあたりがOSSじゃないので何だか触りにくいんですよね...
投稿者: Junnama | 2007年07月20日 20:12
日時: 2007年07月20日 20:12