表示順フィールドで右クリックして使用します。
■ 単純実行 : カテゴリ名で単純ソート
■ +SHIFT : カテゴリ名で逆順ソート
■ +CTRL : 記事数の多い順
▼ インストーラです
( ダウンロードしてエクスプローラからダブルクリックして下さい )
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Seesaa 用カテゴリソート]
@="c:\\laylaClass\\menuex\\Seesaa_catsort.htm"
"Contexts"=dword:00000004
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<title>Seesaa 用カテゴリソート</title>
<script language="VBScript">
Dim RegName,obj,doc,win
RegName = "Seesaa 用カテゴリソート"
' SHIFTとCTRL用変数
Dim keyflg1,keyflg2
keyflg1 = False
keyflg2 = False
Function setObj( src )
Set obj = src
End Function
</script>
<script language="JavaScript">
setObj(external.menuArguments.event.srcElement);
</script>
<base target="_self">
</head>
<body>
<input id="btn" type=button onClick='keyflg1=window.event.shiftKey:keyflg2=window.event.ctrlKey'>
<script language="VBScript">
' ボタンの呼び出し
document.getElementById("btn").click()
' ADO 用の定数
Const adVarChar = 130 ' Null で終了する Unicode 文字列
Const adInteger = 3 ' 4 バイトの符号付き整数
' IEが表示しているページの document オブジェクト
Set doc = external.menuArguments.document
' IEが表示しているページの window オブジェクト
Set win = external.menuArguments
Dim colTable,objTable
Dim colInput,colNum
Set colInput = Nothing
' テーブル要素の一覧
Set colTable = doc.getElementsByTagName("TABLE")
For Each objTable In colTable
' カテゴリ一覧テーブルの選択
if objTable.className = "list-table" then
Set colInput = objTable.getElementsByTagName("A")
Set colINum = objTable.getElementsByTagName("INPUT")
Exit For
end if
Next
Dim Rs,nCount,nMax,I,aData()
' colInput は、対象テーブル内の A オブジェクト
if Not colInput is Nothing then
' A の数
nCount = colInput.length
' 仕様上2つで一行
nMax = nCount / 2
' ソート用レコードセット作成
Set Rs = CreateObject("ADODB.Recordset")
' メモリテーブルを作成
' CTRL( 数値ソート )
if keyflg2 then
Rs.Fields.Append "ソートキー", adInteger
' それ以外はカテゴリ名による文字列ソート
else
Rs.Fields.Append "ソートキー", adVarChar,255
end if
Rs.Fields.Append "順序", adInteger
Rs.Open
' データ保存
For I = 0 to nMax - 1
' 行追加
Rs.AddNew
' CTRL
if keyflg2 then
Rs.Fields("ソートキー").Value = Cint(colInput(I*2+1).firstChild.nodeValue)
' カテゴリ名による文字列ソート
else
Rs.Fields("ソートキー").Value = colInput(I*2).firstChild.nodeValue
end if
Rs.Fields("順序").Value = I
Rs.Update
Next
' ソート指定
if keyflg1 or keyflg2 then
' 逆ソート
Rs.Sort = "ソートキー desc"
else
Rs.Sort = "ソートキー"
end if
' ポインタを先頭に移動
Rs.MoveFirst
' 配列を現在必要な数で動的作成
ReDim aData(nMax)
' 元の順序に現在の 順序x10+100 を設定
I = 0
Do while not Rs.EOF
aData(Rs.Fields("順序").Value) = I*10 + 100
Rs.MoveNext
I = I + 1
Loop
' レコードセットを閉じる
Rs.Close
' 現在のフィールドにソート順序を設定
For I = 0 to Ubound(aData) - 1
colINum(I).Value = aData(I)
Next
end if
</script>
</body>
</html>
■ IE の機能を使って SHIFTキーと CTRLキーが押されたかを知る
■ JavaScript から VBScript の呼び出し( ここでは結果を使っていません )
■ ADO のメモリテーブルを使ってソートを行う