qooxdoo 0.6.2に入れ替えてみた

0.6.1のqx.jsを単純に0.6.2に入れ替えてみた。
問題なく動いている模様。よしよし。

APIドキュメントがじわじわ充実してきた。


aptanaを入れてみた。

使い方がよくわからん…
とりあえずqooxdooのqx.jsを読み込ませてみたらかなり時間がかかった。
使いこなせれば開発効率上げられるかなー。
要検証。


qooxdoo 0.6.2 リリース

キタ━(゚∀゚)━!

WebKitとSafari 3.0をサポートに含むとのコト。
つまり、現在最新のWebKitに対応しているから、Safari 3.0で(多分)動くってコトですな。

あとはバグフィックスとちょっとした追加がぼちぼち。

Release 0.6.2 (2006-11-22)

※超意訳

追加

  • 最新バージョンのWebKitに対応したのでSafari 3.0も恐らく対応
  • 分割ペインのツマミをサポート
  • 拡張ComboBoxEx(実験的)
  • ユーザがサイズ変更できるResizerウィジェットの追加
  • イベントが中断されないようにIframeManagerの追加

…翻訳途中で飽きた。
あと機械翻訳。

変更

  • qooxdooをXHTML完全に互換性があるようにしました。 すべての大文字しているタグ名をそれらの小文字の異形に取り替えました。 それに従って、ソーススクリプト荷物を積む人を変更しました。
  • 負荷状態の質問をサポートするためにNativeWindowを改良しました。 「負荷」と「閉鎖」のための加えられたイベント。
  • マイクロソフトから最新の提案を尊敬するためにXmlHttpRequestを変更して、APIを関係づけました。
  • "focusHandler"へのParentの"focusManager"の特性に改名されます。
  • Function.prototype.closureを取り外しました。(Function.prototype.closureはフレームワークに一度も使用されたことがありません)。

修正

  • ComboBoxは、現在正しく無能にするのを支持します。
  • ドムスタイルシートAPIのダイナミックな木(項目のランタイム添加と削除)の主要なクリーンアップと改良のサポートを機能アップしました。
  • StringBuilderのクラスへの小さい方のひねり。
  • 押されたボタンの検出(マウス出来事)への小さい方の増進。
  • MenuManagerのわずかに改良された性能。
  • ComboBoxウィジェットを使用するアプリケーションにおける大いに改良された焦点取り扱い。
  • ComboBoxポップアップの位置の計算を改良しました。
  • ウィンドウのクラスは、内部の状態をよりよく経営するために改良されました。
  • innerTextに関するいくつかの問題対textContentは修理されました。(incl。 Webkitサポート)
  • 未成年者はデフォルト(<TAB>)取り扱いのpreventationで修理します。
  • 欠けている焦点に関するバグのための主要なフィックスは捜します。
  • 現在の子供であるときに、掘り出し物のa「焦点を合わせ-可能」親での主要な増進は障害があります。
  • () 失敗されるところでリモートな呼び出しがそれ以上要求するアボートがありません。
  • 未成年者はテキストにLabelウィジェットの取り扱いをひねります。
  • Imageを使用するとき、現れるように壊れているイメージを省略する小さい方の改良。
  • 表示する小さい方のひねりは、いくつかのまれなケースにおけるJavaScript誤りを省略するために列を作ります。
  • Fontへの固定TextFieldの依存は属します。
  • Windowのクラスでイベント伝播問題を修理しました。
  • リリース/ブロックが作成されたブロッカーウィジェットなしで実行されるなら、ClientDocumentを修理しました。

デモ

  • 小さい方の追加と調整をしました。
  • Commandのクラスの特徴を示すために例を加えました。
  • どのように(一時)複雑なアプリケーションにおけるコマンドを無効にする内蔵の特徴を使用するかを示すために例を加えました。

ツール

  • 両方をサポートする新しいコンパイラ、きれいな印刷、および圧縮を加えました。
  • 取り除かれた老木とトークンコンパイラ(新しい議論のために骸骨をきれいにする)はジェネレータスクリプトに移行サポートを動かしました。
  • 木の加えられたサポートは移行を基礎づけました。 ソースコードにそれを再コンパイルする前に、これは構文木の上で複雑な操作を許します。
  • ツールディレクトリのディレクトリ構造を再編成しました。
  • フレームワークと骸骨のMakefilesに「フィックス」と「きれいな」目標を加えました。 警告、これらの目標は直接クラスファイルを変更します!
  • 交差しているプラットホームサポートに関するいくつかのMakefilesへの小さい方の増進(いくつかの式を見つけコマンドに取り替えます)

API

  • 織物サポートをAPI javadocドキュメンテーションに追加しました。
  • 新しい窓の中で開くために自動的にAPIドキュメンテーションの外部のリンクを修理してください。
  • 加えられたイベントはqooxdooのクラスでAPIドキュメンテーションに発火しました。
  • APIビューアーの左の枠の形式に関する小さい方のひねり。
  • メソッド記述のintial視点のための最初の文の抽出を改良しました。
  • 倍数のサポートは、paramsのためにタイプして、戻ります。 JavaDocでは、「{Type1| Type2?DefaultValue}」という以下のフォームでDeclaratedしました。
  • 未成年者は原始のタイプに検出をひねります。
  • 多くのコアのクラスとメソッドのドキュメンテーションを高めました。

とりあえず今作ってるヤツのqx.jsを0.6.2に入れ替えてみよう。
結果は次回。


qooxdooのデバッグログウィンドウを出さないようにする

qx.dev.log.Logger.ROOT_LOGGER.removeAllAppenders();

イェァ!


Pivotで、FEEDの内容にまで置換ルールが適用される件

とりあえず、何がおかしいかと言うと、エントリの表示では置換されないのに、FEEDでは置換される。
どっちかに揃えてくれないと、結局内容が異なってしまうというワケで。

まぁ、エントリに合わせてくれればいいかな、と。
エントリ内で%author%を置き換えたい用事は現状ないし。

調べたところ、atom.xmlでは、summaryは置き換わらないがcontentは置き換わる。
rss.xmlでは、descriptionが置き換わる。

\pivot\modules\module_parser.php 内に該当箇所を発見。

    $from = array(
        "%title%",
        "%subtitle%",
        "%link%",
        "%description%",
        "%summary%",
        "%author%",
        "%guid%",
        "%date%",
        "%date_rfc%",
        "%category%",
        "%content%",
        "%tag%",
        "%lang%",
        "%vialink%",
        "%viatitle%"
    );

    $to = array(
        htmlspecialchars(strip_tags($title)),
        htmlspecialchars(strip_tags($subtitle)),
        $link,
        RelativeToAbsoluteURLS($description),
        RelativeToAbsoluteURLS($summary),
        $user,
        $uid."@".$weblog,
        $date,
        $date_rfc,
        implode(", ",$category),
        RelativeToAbsoluteURLS($content),
        $tag,
        $lang,
        $db->entry['vialink'],
        $viatitle
    );

    $rss_item= str_replace($from, $to, $rss_item);
    $atom_item= str_replace($from, $to, $atom_item);

str_replace関数に配列を渡して使うと、配列の先頭から順に処理が繰り返される。
つまり、

$rss_item = str_replace($from, $to, $rss_item);

for ($i = 0 ; $i < count($from) ; $i++) {
    $rss_item = str_replace($from[$i], $to[$i], $rss_item);
}

と等価。細かいフォローは抜きにして。

そんなワケで今回は、%summary%とかを置き換えたときに新たに置換対象に現れた%author%を、次の処理でさらに変換してしまったというコトですな。
一括で置換してくれればいいものを。

とりあえず、一括で置換する関数を作ってみた。

function str_replace_bundle($search, $replace, $subject) {
   
    if (!is_array($search) && !is_array($replace)) {
        return str_replace($search, $replace, $subject);
    }
    else if(!is_array($search)) {
        $search = array($search);
    }
    else if(!is_array($replace)) {
        $replace = array($replace);
    }
    $search = array_values($search);
    $replace = array_values($replace);
   
    $offset = 0;
    
    while (true) {
        $nearpos = strlen($subject);
        $nearkey = false;
        foreach ($search as $key => $value) {
            $pos = strpos($subject, $value, $offset);
            if ($pos === false) {
                continue;
            }
            if ($nearpos > $pos) {
                $nearpos = $pos;
                $nearkey = $key;
            }
        }
        if ($nearkey === false) {
            break;
        }
       
        $subject = substr($subject, 0, $nearpos)
            .$replace[$nearkey]
            .substr($subject, $nearpos + strlen($search[$nearkey]));
        $offset = $nearpos + strlen($replace[$nearkey]);
    }
   
    return $subject;
   
}

あんまり検証してない。とりあえずEUC-JPで日本語も問題ないっぽい。
Pivotの該当箇所もこれを使うように変更して修正完了。

ところでstr_replace()って割と「穴」なんじゃないですかね。
気をつけて使うようにしよう…


qooxdooとprototype.jsのコンフリクト問題

qooxdoo 0.6.1とprototype.js 1.4.0を同時に読み込んだ場合、読み込んだだけで、終了時にエラーが発生する。

とりあえず qx.js の最初の方を見てみると

$=["","appearance","enableDebug",

で、$がprototype.jsとモロかぶり。
今回使わなかったから遭遇しなかったけど、多分 $() が動かないハズ。

めんどいので、さっくりと全部置換してしまいましょう。
qooxdooいじって壊すとワケがわからないことになりそうなので、prototype.jsの方を置換することに。

$( を $ELE( とかに全置換。

解決。
$ELE() はダサいとか言うな。


PivotのWYSIWYGエディタにスタイルセレクタを。(後編)

前回見当違いなプラグインを追いかけてしまったので、今回は別のアプローチで。

tiny_mce_gzip.phpが返すjsを調べると

                var defVals = {
//                theme_advanced_buttons1 : “bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect”,
//                theme_advanced_buttons2 : “bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code”,
//                theme_advanced_buttons3 : “hr,removeformat,visualaid,separator,sub,sup,separator,charmap”

theme_advanced_buttons1 : “undo,redo,cut,copy,paste,pastetext,pasteword,search,replace,separator,bold,italic,underline,strikethrough,sub,sup,link,anchor,unlink,pivot_image,pivot_popup,pivot_download,separator,bullist,numlist,outdent,indent,separator,forecolor,backcolor”,
                theme_advanced_buttons2 : “justifyleft,justifycenter,justifyright,separator,formatselect,separator,tablecontrols,separator,hr,removeformat,charmap,cleanup,code”

                };

こんなデフォルト値が。
…元のやつコメントアウトされてますな。
styleselectというのが、目的の物だったらしい。

\extensions\hooks\pre_editor_wysi.php を編集して、

theme_advanced_buttons2 : “justifyleft,justifycenter,justifyright,separator,styleselect,formatselect,separator,tablecontrols,separator,hr,removeformat,charmap,cleanup,code”

theme_advanced_buttons2_add : “separator,styleselect”,

を追加。汎用性を考えると下の方が良さげ。
あと、

theme_advanced_styles : “Code=code;Link=link”,

も追加。「表示名=クラス名」で列挙できます。

このPHPが読んでるファイルはどうやら \extensions\hooks\editor_wysi\themes\advanced\editor_template.js らしい。
こっちを編集しても良いかと。
どっちを書き換えるのがベターでしょうね…テーマだから、editor_template.js かなぁ…

解決。超便利。

あと、改めて2.0.5.1のファイルを落としてきたらstyleプラグイン同梱してなかったわ…

追記。
editor_template.js に書いたらstyleselect自体は表示されたけど、theme_advanced_stylesが反映されなかった…
分散するのもアレなので pre_editor_wysi.php の方に記述でFA。


PivotのWYSIWYGエディタにスタイルセレクタを。(前編)

Pivotのエントリ編集画面の拡張ビューで、ソースコードやリンクを簡単に編集したい。
いちいちHTML表示にしてp要素にclass=”code”とか追記するのはさすがに面倒になってきたので。

Pivotで使われているTinyMCEは、TinyMCE本家のデモを見る限りスタイルというリストボックスがあって、そこで選択した値がclass属性として指定される。
Pivot添付のTinyMCEでは、スタイルが設定できないのでこれを何とかしてみようというのが今回の試み。

スタイルを適用すると、ソースはこうなる。

<span class=”header1″>Test header 1</span><br />
<span class=”header2″>Test header 2</span><br />
<span class=”header3″>Test header 3</span><br />

うむ。便利だ。
で、どうもstyleプラグインというものを読み込めばいいらしい。

※注意:実際にはstyleプラグインではなかったので、やり方を知りたい人は後編を参照してください。

Pivot付属のTinyMCEでは入ってなかったので、本家から落としてくることにする。
付属はバージョン2.0.5.1だけど、とりあえず現時点最新の2.0.8を取得。

解凍した tinymce_2_0_8\tinymce\jscripts\tiny_mce\plugins\style をまるっと \extensions\hooks\editor_wysi\plugins にコピー。

で、Pivotの管理画面の方を編集。
\extensions\hooks\pre_editor_wysi.php を開いて、プラグインマニュアルを参考に、

plugins : “table,searchreplace,contextmenu”,

を、

plugins : “table,searchreplace,contextmenu,style“,
theme_advanced_buttons1_add : “styleprops”,

に変更。

エラー。

どうもimportPluginLanguagePack関数に第二引数を渡していないのが問題のようなので、\extensions\hooks\editor_wysi\plugins\style\editor_plugin.js を開いて

tinyMCE.importPluginLanguagePack(‘style’,’en’);

,’en’を追加

さぁどうだ!よし、エラーなし!

欲しかったのはこれじゃなーい!!
_| ̄|○..

続きは次回


WSHでファイルダイアログを使ってExcelファイルを開く

前回の自動化について。
vbsファイルにドラッグアンドドロップでExcelファイルを指定させるようにすると、まぁ、一般ユーザにわかりにくいかなと思ったので、ファイル選択ダイアログを出す形式にした。
CommonDialogで検索すると、MSComDlg.CommonDialogを使った方法が多く出てくるけど、これはライセンスの問題でVBをインストールしていないと使えないようです。

で、OSがXP以降ならMSComDlg以外のCommonDialogが使える模様。

とりあえず、ダイアログを出して、Excelファイルを開くところまで。

' ファイル選択ダイアログ
Set objComDlg = WScript.CreateObject("UserAccounts.CommonDialog")

Dim BaseDir
BaseDir = objShell.CurrentDirectory

Set objExcel = WScript.CreateObject("Excel.Application")
objExcel.Visible = False

' Excelファイルを開くためのダイアログを出す
objComDlg.Filter = "Excel File|*.xls"
objComDlg.InitialDir = BaseDir & "\"

If objComDlg.ShowOpen Then
   
    Set objWorkbook = objExcel.Workbooks.Open(objComDlg.FileName)
   
    …


qooxdooのIFrameにnameを設定する

qx.ui.embed.IframeでIFrameを作ると、divの下にIFrameが作られる。
やりたい事としては、IFrameにnameを設定して、フォームの飛び先にしようとしているのですが。

で、調べてみたらqx.ui.embed.IframeにframeNameというプロパティがあるので、それを設定すればいいという事が判明。

var Iframe_1 = new qx.ui.embed.Iframe();
Iframe_1.set({ frameName: "IFrameUploadImage", visibility: false });

これで画面遷移なしでファイルアップロードができる。