Changeset 33080

Show
Ignore:
Timestamp:
05/06/09 02:09:46 (4 years ago)
Author:
cho45
Message:

twitter の autopagerize に対応させるため

- pageElement が !click の場合、nextLink で指定された要素に click イベントを dispatch
- ページ高が変わったらロードされたとみなす

処理を追加

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/userscripts/jautopagerize.user.js

    r29371 r33080  
    3535                  , insertBefore : 'id("res")/div[last()]' 
    3636                  , pageElement  : '//div[@id="res"]/div[div]' 
     37                  } 
     38                , { url          : '^https?://(?:www\\.)?twitter\\.com/' 
     39                  , nextLink     : 'id("more")' 
     40                  , insertBefore : 'id("more")' 
     41                  , pageElement  : '!click' 
    3742                  } 
    3843                /* Template 
     
    220225        AutoPagerize.updateStatus(); 
    221226 
     227        if (AutoPagerize._nextURI == "!click") { 
     228                var e = document.createEvent("MouseEvents"); 
     229                with ({ 
     230                        type      : 'click', 
     231                        canBubble : true, 
     232                        canCancel : true, 
     233                        view      : window, 
     234                        detail    : 1, 
     235                        screenX   : 0, 
     236                        screenY   : 0, 
     237                        clientX   : 0, 
     238                        clientY   : 0, 
     239                        ctrl      : false, 
     240                        alt       : false, 
     241                        shift     : false, 
     242                        meta      : false, 
     243                        button    : 0, 
     244                        related   : null 
     245                }) e.initMouseEvent(type, canBubble, canCancel, view, detail, screenX, screenY, clientX, clientY, ctrl, alt, shift, meta, button, related); 
     246                var target = $X(AutoPagerize._pageinfo.nextLink)[0]; 
     247                var height = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight); 
     248                target.dispatchEvent(e); 
     249                return next(function w () { 
     250                        // ロード前のページ高より増えたらロードされたとみなす 
     251                        if (height < Math.max(document.documentElement.scrollHeight, document.body.scrollHeight)) { 
     252                                AutoPagerize._loading = false; 
     253                                AutoPagerize._currentPage++; 
     254                                AutoPagerize.updateStatus(); 
     255                                return null; 
     256                        } else { 
     257                                return wait(0.5).next(w); 
     258                        } 
     259                }); 
     260        } 
     261 
    222262        return getHTMLResource(AutoPagerize._nextURI).next(function (r) { 
    223263                AutoPagerize.log("request completed"); 
     
    283323 
    284324                                                temp.innerHTML = source; 
    285                                                 // alert(source); 
     325                                                log(source); 
     326                                                if (/googlesyndication/.test(source)) return null; 
    286327 
    287328                                                var script = temp.getElementsByTagName("script")[0]; 
     
    308349                                                        unsafeWindow.document.write = orig_write; 
    309350                                                        temp.innerHTML = written.join(""); 
    310                                                         return null; 
    311351                                                } 
    312352                                        } else 
     
    315355                                                r.selectNodeContents(document.body); 
    316356                                                ele.parentNode.replaceChild(r.createContextualFragment(source), ele); 
    317                                                 return null; 
    318357                                        } else { 
    319                                                 return null; 
    320358                                        } 
     359                                        return null; 
    321360                                }).error(AutoPagerize.errorHandler); 
    322361 
     362                                // 
    323363                                timers.push( wait(img ? 2 : 0.1).next(function () { 
    324364                                        sep.style.display = "block"; 
     
    508548                                if (info.url && info.nextLink && info.pageElement && location.href.match(info.url) && !!$X(info.nextLink)[0]) { 
    509549                                        AutoPagerize._pageinfo = info; 
    510                                         AutoPagerize._nextURI  = ($X(AutoPagerize._pageinfo.nextLink)[0] || {}).href; 
    511                                         if (!AutoPagerize._pageinfo.insertBefore) { 
     550                                        AutoPagerize._nextURI  = (info.pageElement == "!click") ? "!click" : ($X(info.nextLink)[0] || {}).href; 
     551                                        if (!info.insertBefore) { 
    512552                                                var lastPageElement = $X(AutoPagerize._pageinfo.pageElement).pop(); 
    513553                                                if (lastPageElement) AutoPagerize._insertBefore =