2011-02-24

FotoPlus features preview

目前只有假日能寫,照這進度大概得半年後才能寫完吧。寫好的部份會先放上,有什麼意見歡迎提出來討論。

update: 2011/03/02

工具列:提供兩種相簿輸入方式 1.直接貼上相簿相關網址 2.手動指定網站類型,在網址列輸入帳號。

相簿瀏覽:還沒決定要採固定大小正方形或是照原比例大小顯示縮圖

WGet 2.8.2 (patch 2)

WGet 2.8.2 (patch 2)

Bugs Fixed
  • 修正 moko 部分帳號無法下載問題 

2011-02-21

用 TreeCtrl 做 menu widget

Tile 中沒有 menu,Tk 的 menu 又太"老氣",只好自己打造了。左邊是 Tile menubutton + Tk menu,右邊是 Tile label + TreeCtrl。做法是建立一個 toplevel,裡面放 tree,然後 bind 一堆 event 追蹤... 有時間再寫成 package 用起來會比較方便。
以下是大概的 TreeCtrl code
$tree state define HOVER
$tree state define OPENW
$tree state define OPENE
       
$tree column create -tag cIcon
$tree column create -tag cName -expand 1
 
$tree element create elemIcon image -image [$ibox get favicon-wretch]
$tree element create elemName text  -justify left
$tree gradient create grdHover -steps 4 -stops {{0.0 white} {1.0 #ebf3fd}} -orient vertical    
$tree element create elemRect rect -fill [list  grdHover HOVER]  
$tree element create elemRectOutline rect -rx 1 -outline [list #b8d6fb HOVER] \
  -open [list w OPENW e OPENE]  -outlinewidth 1    
$tree element create elemBorder rect -outline "#e2e3e3" -open nws  -outlinewidth 1
$tree element create elemBorderS rect -outline "#ffffff" -open nws  -outlinewidth 1 

# column icon 
set sty [$tree style create styIcon -orient horizontal]
$tree style elements $sty {elemRect elemBorder elemBorderS elemRectOutline elemIcon}
$tree style layout $sty elemRect -detach 1 -padx {2 0}  -iexpand xy
$tree style layout $sty elemRectOutline -detach 1 -iexpand xy
$tree style layout $sty elemBorder -detach 1 -iexpand y -padx {27 0}
$tree style layout $sty elemBorderS -detach 1 -iexpand y -padx {28 0}
$tree style layout $sty elemIcon -padx {6 2} -pady {2 3} -iexpand ns

# column name
set sty [$tree style create styName]
$tree style elements $sty {elemRect elemRectOutline elemName}
$tree style layout $sty elemRect -detach yes -padx 0 -iexpand xy
$tree style layout $sty elemRectOutline -detach yes -iexpand xy
$tree style layout $sty elemName -padx 6 -pady {2 3} -squeeze x -expand ns

set nsList [list moko wretch pchome pixnet xuite yam]
foreach i $nsList  {
  set item [$tree item create -parent 0]
  $tree item style set $item 0 styIcon 1 styName
  $tree item element configure $item 0 elemIcon -image [$ibox get favicon-$i]
  $tree item element configure $item 1 elemName -text $i
}
  
$tree item state forcolumn all 0 "OPENE"
$tree item state forcolumn all 1 "OPENW"
目前還遇到一個難題,就是沒有辦法做出 menu 陰影效果。

2011-02-19

WGet 2.8.2 (patch 1)

WGet 2.8.2 (patch 1)

Bugs Fixed
  • 修正 pixnet 新版(?) VIP 帳號無法下載問題
  • 修正 pixnet 影片無法下載問題
  • 改善 pixnet 列出包含影片的相簿速度,新版比原本快 10 倍
Notes
  • 請提供 pixnet 上類似 http://princamille.pixnet.net/album 版面的相簿給我測試。

2011-02-17

WGet 2.8.2 release notes

WGet 2.8.2 (2011/02/17)

Bugs Fixed
  • 修正部份操作問題
  • 修正部分 moko 相簿下載問題
New Features
  • 支援 yam 相簿
Notes
  • yam 相簿並無大量測試,遇到無法抓取的帳號請回報。 
Known Problems
  •  剛發布新版就發現 pixnet 有新版面... 目前部分 pixnet 無法列出相簿,請待 patch。

2011-02-16

WGet 2.8.1 release notes

WGet 2.8.1 (2011/02/16)

Bugs Fixed
  • 修正部分 pixnet相簿下載問題
  • 修正 wretch 抓取原圖問題
New Features
  • 支援 moko 相簿 (www.moko.cc)
Notes
  • moko 目前並不打算長期支援,以後將視其改版頻率決定。
  • 因 moko 圖片無名稱欄位,檔名一律使用項目 ID,目錄名稱則可由選項中的命名規則選擇。
  • 有些看圖軟體不支援 unicode,簡體中文的目錄名稱可能無法使用,可將命名規則改成項目ID。
  • 因 moko 連線速度較慢,顯示相簿列表時請耐心等待。
  • moko 相簿並無大量測試,遇到無法抓取的帳號請回報。 

2011-02-13

Tcl 存取 Firefox 書籤

Firefox 關於網址的記錄都存放在 places.sqlite 中,此檔案為 sqlite3 資料庫,檔案位置

Linux
/home/<user>/.mozilla/firefox/<profile>/
Win XP
C:\Documents and Settings\<user>\Application Data\Mozilla\Firefox\Profiles\<profile>\
Vista / Win7
C:\Users\<user>\AppData\Roaming\Mozilla\Firefox\Profiles\<profile>\

其中的 <profile> 格式為 "亂數.default",例如 dhyt3gd2.default,Schema 參考 The Places database

以下範例是讀出書籤中 wretch 與 xuite 網址,將使用者 id 與網站類型語名稱存入 array 。(註: 當 Firefox 正在執行時會 lock db,須先將其複製到 temp 後再存取)
package require sqlite3

set dirList [glob -directory [file join $::env(home) AppData/Roaming/Mozilla/Firefox/Profiles] -type d *]
foreach dir $dirList {
  set fBookmark [file join $dir places.sqlite]
  if { [file exists $fBookmark]  == 0 } { unset fBookmark }
}

if [info exists fBookmark] {
  set fDb [file join $::env(home) .wget bookmarkFF.db]
  file copy -force $fBookmark $fDb
  array set bookmarkList ""

  db eval {SELECT url, moz_bookmarks.title FROM moz_places, moz_bookmarks \
                WHERE moz_places.id = moz_bookmarks.fk and \
                (url like '%www.wretch.cc%' or url like '%xuite.net%')} result {
    regexp {http://([\w.]+)} $result(url) -> host
    foreach t {wretch xuite} {
      if {[string first $t $host] != -1} {
        set type $t
        break
      }
    }
    set uid ""
    switch $type {
      wretch {
        regexp {http://[\w.]+/[\w]+/([\w]+)} $result(url) -> uid
      }
      xuite {
        regexp {http://[\w.]+/([\w.]+)} $result(url) -> uid
      }
      set bookmarkList($type,[string tolower $uid]) $result(title)
    } 
  }
}
db close

2011-02-12

jQuery image slider 與 IE 半透明 png

手上有個網頁要做到許多張圖片輪撥 (slider),圖片陰影部分是半透明,我使用 jQuery 的 fadeIn 和 fadeOut 來做這效果,寫好後用 FF 和 Chrome 看都沒問題,但是 IE 在淡入淡出時半透明的陰影會變成全黑,最後發現要在 img 加上和背景相同的背景顏色才能正確顯示 . . .

範例:js
$(document).ready(function(){
  //載入圖片 01~20.png
  var photoCnt = 20;
  var img = "";
  for (var i = 1; i <= photoCnt; i++){
    img = (i<=9)?'':'';
    $('#slide-photo').append(img);
  }
  $('#slide-photo img:first').show().addClass("active first");
  $('#slide-photo img:last').addClass("last");  
  //開始播放
  var ival = setInterval(function() {
    var active = $('#slide-photo img.active');
    var next = (active.hasClass("last"))?$('#slide-photo img:first'):active.next();
    active.fadeOut(500,function(){
      active.removeClass('active');
      next.addClass('active').fadeIn(500);
    });
  }, 3000);
});
css
#slide-photo {background-color: #0abab5;}
#slide-photo img {width: 445px; background-color: #0abab5; display: none;}
因為美編交給我的網頁中輪播的圖片不能用絕對定位 (position:absolute),所以在這個範例必須要淡出後隱藏才能顯示下一張再淡入,比較漂亮的做法是用絕對定位,要淡出的 z-index 降低,要淡入的 z-index 增加。

2011-02-10

Tk fullscreen

方法一
wm overrideredirect . 1
wm geometry . [winfo screenwidth .]x[winfo screenheight .]+0+0
wm attributes . -topmost 1
方法二 (Tk 8.5)
wm attributes . -fullscreen 1 -topmost 1
最近寫的一個程式要透過 optcl 抓 ie 來全螢幕顯示網頁,進入全螢幕時隱藏 toolbar,跳離全螢幕後顯示 toolbar。因為在全螢幕下 tk 沒辦法抓到 ie 的 event,所以設計成全螢幕時將 toolbar 高度改為1,然後在上面 bind event。以下是簡單的範例,按下放大視窗按鈕會全螢幕,在最底下滑鼠左鍵點兩下會跳離全螢幕。(註: 因 wm protocol 中沒有視窗放大的 protocol,這裡採用 bind Configure event 並判斷視窗目前狀態是否為 zoomed 來偵測按下視窗放大按鈕的動作。)
package require optcl

optcl::new -window .fmeBrowser "http://www.google.com"
frame .fmeSub -bd 0 -relief groove -height 1 
pack .fmeBrowser -fill both -expand 1
pack .fmeSub -fill x 

bind .fmeSub <Double-1> {
  wm state . normal
}

bind . <Configure> {
  if { "%W" eq [winfo toplevel "%W"] &&  [wm state . ] eq "zoomed"} {
    wm attributes . -fullscreen 1 -topmost 1
  } else {
    wm attributes . -fullscreen 0 -topmost 0
  }
}
如果要塞滿多顆螢幕的時候會發現用方法二只能在一顆螢幕上全螢幕顯示,此時得先抓出全部的長寬再用 wm geometry 設定。以下是用 twapi 取得各螢幕的位置後再拿最右和最下的值當作長寬,如果事先已知道執行時螢幕的總長寬也可以寫成變數比較簡單。
package require twapi

foreach display [::twapi::get_multiple_display_monitor_info] {
  lappend listx [lindex [lindex $display 1] 2]
  lappend listy [lindex [lindex $display 1] 3]
}

wm overrideredirect . 1
wm geometry . [lindex [lsort $listx] end]x[lindex [lsort $listy] end]+0+0
wm attributes . -topmost 1

2011-02-01

台語輸入 jQuery Plugin

參考自台語信望愛教羅台羅轉碼工具,目前僅支援台羅輸入。

todo:還很多...

download:Taigi Input jQuery Plugin v0.1

範例 js
$(document).ready(function(){
    $('input[type="text"]').taigiInput();
    $('textarea').taigiInput();
});
html



輸入 Tai5-oan5 Lo5-ma2-ji7 的結果