Show
Ignore:
Timestamp:
01/08/11 22:13:59 (3 years ago)
Author:
NeoCat
Message:

use keypress event in Opera for shortcutkey.js

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • websites/twicli/plugins/shortcutkey.js

    r38770 r38774  
    22        selected_div: null, // 選択中のtweet 
    33        last_selected_div_id: null, // 前回選択されたtweetのdiv ID(オーバーレイ表示は除く) 
    4         key_handled: false, // // 他プラグインがkeydownを処理済みか:true時はイベント処理しない 
     4        key_handled: false, // 他プラグインがkeydownを処理済みか:true時はイベント処理しない 
     5        last_event_date: null, // 最終イベント発生時刻 
     6        event_date_check: false, // 最終イベントから30ms以内のイベントは無視 
    57         
    68        // tweetの選択 
     
    2628                ev = ev || window.event; 
    2729                if (ev.shiftKey || ev.altKey || ev.ctrlKey || ev.metaKey || ev.modifiers) return true; 
     30                var date = ev.timeStamp || new Date(); 
     31                if (this.event_date_check && this.last_event_date && date - this.last_event_date < 30) { 
     32                        if (ev.type == 'keypress' && (ev.keyCode == 77+32 || ev.keyCode == 81+32 || ev.keyCode == 69+32)) 
     33                                return false; 
     34                        return true; 
     35                } 
     36                this.last_event_date = date; 
    2837                var code = ev.keyCode; 
    2938                //$("fst").value = code; 
     
    5261                 
    5362                var ele; 
     63                var lower = ev.type == 'keypress' ? 32 : 0; 
    5464                switch (code) { 
    5565                        case 27: // esc : ポップアップメニュー,オーバーレイ表示を閉じる/選択解除 
     
    91101                                return false; 
    92102                        case 40: // ↓ 
    93                         case 74: // j : 1つ下を選択 
     103                        case 74+lower: // j : 1つ下を選択 
    94104                                if (!selected) { 
    95105                                        ele = (selected_menu.id == 'TL' ? $('tw') : selected_menu.id == 'reply' ? $('re') : 
     
    111121                                return false; 
    112122                        case 38: // ↑ 
    113                         case 75: // k : 1つ上を選択 
     123                        case 75+lower: // k : 1つ上を選択 
    114124                                if (!selected) { 
    115125                                        ele = (selected_menu.id == 'TL' ? $('tw') : selected_menu.id == 'Re' ? $('re') : 
     
    134144                                        shortcutkey_plugin.selectTweet(ev, ele); 
    135145                                return false; 
    136                         case 70: // f : fav 
     146                        case 70+lower: // f : fav 
    137147                                if (!selected) return true; 
    138148                                fav($('fav-'+selected.id), id); 
    139149                                return false; 
    140                         case 73: // i : 返信元を表示(In reply to) 
     150                        case 73+lower: // i : 返信元を表示(In reply to) 
    141151                                if (!selected || !tw.in_reply_to_status_id_str) return true; 
    142152                                dispReply(user, tw.in_reply_to_status_id_str, $("utils-"+selected.id)); 
    143153                                return false; 
    144                         case 85: // u : ユーザTLを表示(User) 
     154                        case 85+lower: // u : ユーザTLを表示(User) 
    145155                                if (!selected) return true; 
    146156                                        switchUserTL(selected); 
    147157                                return false; 
    148                         case 69: // e : 返信(rEply) 
     158                        case 69+lower: // e : 返信(rEply) 
    149159                                if (!selected) return true; 
    150160                                replyTo(user, id); 
    151161                                return false; 
    152                         case 80: // p : ユーザを抽出(Pickup) 
     162                        case 80+lower: // p : ユーザを抽出(Pickup) 
    153163                                if (!selected) return true; 
    154164                                if (typeof(addIDRegexp) != 'function') return true; 
    155165                                addIDRegexp(user, id); 
    156166                                return false; 
    157                         case 82: // r : リツイート(Retweet) 
     167                        case 82+lower: // r : リツイート(Retweet) 
    158168                                if (!selected) return true; 
    159169                                retweetStatus(id, selected); 
    160170                                return false; 
    161                         case 81: // q : RT:を付けて引用(Quote with RT:) 
     171                        case 81+lower: // q : RT:を付けて引用(Quote with RT:) 
    162172                                if (!selected) return true; 
    163173                                quoteStatus(id, user, selected); 
    164174                                return false; 
    165                         case 68: // d : tweetを削除(Delete) 
     175                        case 68+lower: // d : tweetを削除(Delete) 
    166176                                if (!selected) return true; 
    167177                                if (selected_menu.id != "direct" && user != myname) return true; 
    168178                                deleteStatus(selected, id); 
    169179                                return false; 
    170                         case 84: // t : 翻訳(Translate) 
     180                        case 84+lower: // t : 翻訳(Translate) 
    171181                                if (!selected) return true; 
    172182                                translateStatus(selected.id); 
    173183                                return false; 
    174                         case 71: // g : 地図表示(Geo map) 
     184                        case 71+lower: // g : 地図表示(Geo map) 
    175185                                if (!selected) return true; 
    176186                                var geomap = $('geomap-'+selected.id); 
     
    178188                                        window.open(geomap.href, '_blank'); 
    179189                                return false; 
    180                         case 79: // o : リンクを開く(Open links) 
     190                        case 79+lower: // o : リンクを開く(Open links) 
    181191                                if (!selected) return true; 
    182192                                tw.text.replace(/https?:\/\/[\w!#$%&'()*+,.\/:;=?@~-]+(?=&\w+;)|https?:\/\/[\w!#$%&'()*+,.\/:;=?@~-]+/g, function(url){ 
     
    185195 
    186196                                return false; 
    187                         case 77: // m : 発言欄へ移動(Move to textarea) 
     197                        case 77+lower: // m : 発言欄へ移動(Move to textarea) 
    188198                                $('fst').focus(); 
    189199                                return false; 
    190                         case 88: // x : タブを閉じる 
     200                        case 88+lower: // x : タブを閉じる 
    191201                                var closetab = $('tws-closetab') || $('regexp-closetab'); 
    192202                                if (closetab) 
     
    216226        }, 
    217227        init: function() { 
    218                 document.onkeydown = this.shortCutKeyDown; 
     228                if (navigator.userAgent.indexOf('Opera') >= 0) 
     229                        document.onkeypress = this.shortCutKeyDown; 
     230                else 
     231                        document.onkeydown = this.shortCutKeyDown; 
    219232        } 
    220233};