ImageAdjustor – FCKeditor 2.4 対応

オトムワンデザインの榎本様のご指摘で、ImageAdjustor をアップデートしました。
FCKeditor 2.4 以降では、コマンドの方でビジュアルモードかテキストモードか判断する必要がありました。

ダウンロード : ImageAdjustor.zip

オトムワンデザイン様は、ImageAdjustor を商業利用されています。

オトムワンデザイン 様 (整備中とのことです)

ノーサポートを選択されているのですが、バグ報告をしていただき、大変助かりました。

この場をかりて、お礼申し上げます。

商業利用は基本的に有料のサポートをさせていただくと考えていますが、ご寄付を頂いた場合はノーサポートでご利用を承諾いたします。

ご希望の方はご連絡ください。

FileBrowser_Thumbnail の更新(2)

せっかくひさびさに FileBrowser_Thumbnail のソースをいじるので、テストをしてみました。
やっぱりバグがあったので、対策しました。

対策した内容は、以下の通りです。

・ブラウザのキャッシュにより、サムネイルが作成されない場合があった
・フォルダの削除が出来ない場合があった

ダウンロード : FileBrowser_Thumbnail

バグを見つけたら、ぜひ教えてください!

FCKeditor_OnComplete 関数

FCKeditor は、多機能であるため、起動時に若干時間がかかる。
この時にリンクボタンなどを押されると、スクリプトの読込みが中断され、エラーが表示される場合がある。

また、ユーザーインターフェイスとして、準備中であることを表示したい場合もあると思う。

この場合、以下の方法が良いと思う。
(1) FCKeditor起動時に画面をロックする。
(2) FCKeditor起動完了時に画面のロックを解除する。

ここで問題となるのがFCKeditor起動完了の検出だ。

実は、簡単に検出する方法がある。

続きを読む

2.4 の新機能

FCKeditor 2.4 が 1/30 にリリースされました。
このリリースでの大きな変更は、キーボードでの操作性を改善したことでしょう。

fckconfig.js の変更点を抜き出して見ましょう。

FCKConfig.DisableEnterKeyHandler = false ;

キーボードイベントの検出を無効にするか設定できるようです。

FCKConfig.EnterMode = 'p' ;          // p | div | br
FCKConfig.ShiftEnterMode = 'br' ;    // p | div | br
FCKConfig.Keystrokes = [
[ CTRL + 65 /*A*/, true ],
[ CTRL + 67 /*C*/, true ],
[ CTRL + 88 /*X*/, true ],
[ CTRL + 86 /*V*/, 'Paste' ],
[ SHIFT + 45 /*INS*/, 'Paste' ],
[ CTRL + 90 /*Z*/, 'Undo' ],
[ CTRL + 89 /*Y*/, 'Redo' ],
[ CTRL + SHIFT + 90 /*Z*/, 'Redo' ],
[ CTRL + 76 /*L*/, 'Link' ],
[ CTRL + 66 /*B*/, 'Bold' ],
[ CTRL + 73 /*I*/, 'Italic' ],
[ CTRL + 85 /*U*/, 'Underline' ],
[ CTRL + ALT + 83 /*S*/, 'Save' ],
[ CTRL + ALT + 13 /*ENTER*/, 'FitWindow' ],
[ CTRL + 9 /*TAB*/, 'Source' ]
] ;

エンターキーでの動作を、IE・Geckoで統一して設定できるようです。
さらに、ショートカットキーが定義出来るようになっているようです。

もともとドキュメントを入力するためのツールなので、キーボードでの操作性の向上はありがたいですね。

2.4 リリース

FCKeditor の最新バージョン 2.4 がリリースされました。

更新内容はバグフィックスが中心です。その他、エンターキーでの動作を選択できるようになったようです。

さて、実はあきらは英語が不得意ながらバグ報告をしています。
ダウンロードしたファイルの _whatsnew.html を確認すると、

[SF BUG-1592311]

ありました。

対応したとのメールは受け取っていたのですが、ちゃんと更新履歴に記載されていると、やっぱりうれしいものです。

オープンソースには、こんな楽しみもあるのです。

ImageAdjustorアップデート

ImageAdjustorで枠を回転させるのに、中ボタンのクリックを割り当てています。
困ったことに、自動スクロール機能を有効にしていると、自動スクロールのアイコンが表示されてしまいます。

ずっと気になっていたのですが、差し支えないのでしばらく放置していました。

しかし、やっと気付きました。ドキュメントにもイベントが伝播されていることに。
これをカットしてやって、やっと思った通りの動作になりました。

と、言うことで、ImageAdjustorをアップデートしました。

ダウンロード : ImageAdjustor.zip

IEの改行について

FCKeditorで改行をすると、Firefoxの場合、すなおにbrタグを挿入してくれるのだが、IEの場合、pタグが挿入されてしまう。

これは、IEの編集機能の仕様だ。どういうルールでブロック化するかもはっきりしないし、レイアウト上困ってしまう。

これをFirefoxと同じ挙動にするには、IEが編集モードでもonkeydownイベントを検出できることを利用して、Enterが押されたら強制的にbrタグを挿入してonkeydownイベントをキャンセルする。

ひょっとしてFCKeditorで実装済みか?と思ってソースを検索すると…

fckeditor/editor/_source/internals/fck_1_ie.js

...
function Doc_OnKeyDown()
{
var e = FCK.EditorWindow.event ;
switch ( e.keyCode )
{
case 13 :	// ENTER
if ( FCKConfig.UseBROnCarriageReturn && !(e.ctrlKey || e.altKey || e.shiftKey) )
{
Doc_OnKeyDownUndo() ;
// We must ignore it if we are inside a List.
if ( FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' ) )
return true ;
// Insert the <BR> (The   must be also inserted to make it work)
FCK.InsertHtml( '<br>&nbsp;' ) ;
// Remove the  
var oRange = FCK.EditorDocument.selection.createRange() ;
oRange.moveStart( 'character', -1 ) ;
oRange.select() ;
FCK.EditorDocument.selection.clear() ;
return false ;
}
break ;
case 8 :	// BACKSPACE
// We must delete a control selection by code and cancels the
// keystroke, otherwise IE will execute the browser's "back" button.
if ( FCKSelection.GetType() == 'Control' )
{
FCKSelection.Delete() ;
return false ;
}
break ;
case 9 :	// TAB
if ( FCKConfig.TabSpaces > 0 && !(e.ctrlKey || e.altKey || e.shiftKey) )
{
Doc_OnKeyDownUndo() ;
FCK.InsertHtml( window.FCKTabHTML ) ;
return false ;
}
break ;
case 90 :	// Z
if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
{
FCKUndo.Undo() ;
return false ;
}
break ;
case 89 :	// Y
if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
{
FCKUndo.Redo() ;
return false ;
}
break ;
}
if ( !( e.keyCode >=16 && e.keyCode <= 18 ) )
Doc_OnKeyDownUndo() ;
return true ;
}
...

実装されていました!しかも設定可能になっています。

と、いうことで、IEの迷惑な仕様を回避するには、以下の設定を追加すればよい。

FCKConfig.UseBROnCarriageReturn = true ; // IE only.