// ==UserScript== // @name HKG BM finder // @namespace http://userscripts.org/users/peach // @version 0.0.1b // @description HKGolden BM finder // @include http://forum*.hkgolden.com/* // @include http://search.hkgolden.com/* // @include http://archive.hkgolden.com/* // @include http://profile.hkgolden.com/* // @exclude http://*.hkgolden.com/*rofile*age.aspx* // @require http://code.jquery.com/jquery-1.10.2.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @copyright 2013, Xelio & Peach (The part of the program is based on HKG LM finder) // @downloadURL none // ==/UserScript== /* HKG BM finder (HKGolden BM finder) Copyright (C) 2013 Xelio Cheong & Peach (The part of the program is based on HKG LM finder) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ var $j = jQuery.noConflict(); var userID; var lmStyle; var userViewState; var userEventValidation; var viewStateOutdate = 15 * 60 * 1000; var ajaxTimeout = 15000; var ajaxRequest; var ajaxRequestTimer; var viewState; var eventValidation; var changePage; var changeFilterType; var useFullRequest = false; var needLogin = false; // Monitor window.LM_CHANGE_PAGE and window.LM_CHANGE_FILTER_TYPE and fire // ajax request to change page or filter. // Use this monitoring method because page cannot directly call function in // Greasemonkey script context. pageChangeByAjax = function() { /* if((window.LM_CHANGE_PAGE && window.LM_CHANGE_PAGE !== window.LM_CURRENT_PAGE) ||(window.LM_CHANGE_FILTER_TYPE && window.LM_CHANGE_FILTER_TYPE !== window.LM_FILTER_TYPE)) { initPagePartial(); if(window.LM_CHANGE_PAGE) changePage = window.LM_CHANGE_PAGE; window.LM_CHANGE_PAGE = null; if(window.LM_CHANGE_FILTER_TYPE) changeFilterType = window.LM_CHANGE_FILTER_TYPE; window.LM_CHANGE_FILTER_TYPE = null; var history = $j('div#lm_history'); history.find('#lm_btn_Next').attr("disabled", true); history.find('#lm_btn_Previous').attr("disabled", true); history.find('#lm_btn_GoPageNo').attr("disabled", true); history.find('#lm_filter_type').attr("disabled", true); requestProfilePage(changePage, changeFilterType); } else { setTimeout(pageChangeByAjax, 200); }*/ } // Init options for full page loading initPageFull = function() { /* viewState = null; eventValidation = null;*/ } // Init options for partial page loading initPagePartial = function() { /*viewState = GM_getValue('viewstate2'); eventValidation = GM_getValue('eventvalidation2'); changePage = parseInt(loadLocal('lm_change_page')) || 1; changeFilterType = loadLocal('lm_filter_type') || 'all'; if(!viewState || !eventValidation || !changePage) return false; return true;*/ } requestProfilePage = function(page, filter_type) {/* // var requestType = (page ? 'partial' : 'full'); var requestType = 'full'; var requestParm; var message = 'Load 緊'; changeAndFlashMessage(message); var requestParmShared = { timeout: ajaxTimeout, headers: {'Content-type': 'text/html; charset=utf-8'}, onload: function(response) { ajaxRequest = null; clearTimeout(ajaxRequestTimer); if(replaceContent(response)) { storeStatus(); //popupLoginWindow(); } else { handleError(); } }, onerror: function(response) { ajaxRequest = null; clearTimeout(ajaxRequestTimer); handleError(); }, ontimeout: handleTimeout }; */ /* if(requestType === 'partial') { var data = $j.param({ 'ctl00$ScriptManager1': 'ctl00$ScriptManager1|ctl00$ContentPlaceHolder1$mainTab$mainTab1$btn_GoPageNo', 'ctl00_ContentPlaceHolder1_tc_Profile_ClientState': '{"ActiveTabIndex":0,"TabState":[true,true,true]}', 'ctl00_ContentPlaceHolder1_mainTab_ClientState': '{"ActiveTabIndex":0,"TabState":[true,true]}', '__VIEWSTATE': viewState, 'ctl00$ContentPlaceHolder1$mainTab$mainTab1$ddl_filter_year': 1, 'ctl00$ContentPlaceHolder1$mainTab$mainTab1$filter_type': (filter_type || 'all'), 'ctl00$ContentPlaceHolder1$mainTab$mainTab1$PageNoTextBox': page, '__EVENTVALIDATION': eventValidation, '__ASYNCPOST': true, 'ctl00$ContentPlaceHolder1$mainTab$mainTab1$btn_GoPageNo': 'Go' }); var requestParmPartial = {url: 'http://forum2.hkgolden.com/ProfilePage.aspx?&type=history&page=1&yearFilter=3&filterType=all&userid=' + userID, method: 'GET', data: data}; requestParm = $j.extend({}, requestParmShared, requestParmPartial);*/ // } else { // var requestParmFull = {url: 'http://forum2.hkgolden.com/ProfilePage.aspx?&type=history&page=1&yearFilter=3&filterType=all&userid=' + userID, method: 'GET'}; // requestParm = $j.extend({}, requestParmShared, requestParmFull); // } /* ajaxRequest = GM_xmlhttpRequest(requestParm); // Specical handling for TamperMonkey if(typeof(TM_xmlhttpRequest) !== 'undefined') { timeoutRequest(function() {handleTamperMonkeyTimeout(handleTimeout);}); }*/ replaceContent(); } // Handle data response replaceContent = function(response) { var message = 'Load 完'; changeAndFlashMessage(message); clearMessage(); // var data = response.responseText; // var history; // if(!data || (data.length === 0) //|| (data.indexOf('ctl00_ContentPlaceHolder1_mainTab_mainTab1_UpdatePanelHistory') === -1)) { // No history in data response // console.log('no data'); // return false; // } /* var partialResponse = (data.indexOf(''); if(startPos >= 0 && endPos >= 0) { endPos = endPos + '/table>'.length; history = $j('
').html(data.slice(startPos, endPos)); viewState = data.match(/\|__VIEWSTATE\|.*?\|/gm)[0].replace(/\|__VIEWSTATE\|/gm, '').replace(/\|/gm, '') || viewState; eventValidation = data.match(/\|__EVENTVALIDATION\|.*?\|/gm)[0].replace(/\|__EVENTVALIDATION\|/gm, '').replace(/\|/gm, '') || eventValidation; } } else { // Find history and viewState in full response $j.each($j.parseHTML(data), function(i, el) { if(el.id === 'aspnetForm') { var doms = $j(el); viewState = doms.find('#__VIEWSTATE').val(); eventValidation = doms.find('#__EVENTVALIDATION').val(); history = doms.find('div#ctl00_ContentPlaceHolder1_mainTab_mainTab1_UpdatePanelHistory'); return false; } }); }*/ /* $j.each($j.parseHTML(data), function(i, el) { if(el.id === 'aspnetForm') { var doms = $j(el); all = doms; history = doms.find('#ctl00_ContentPlaceHolder1_dataLabel'); return false; } }); if(history.length === 0) { console.log('no history'); return false; }*/ $j('div#lm_history').html('

'); //replaceButton(); // Display modal box when history was successfully loaded $j('div#lm').fadeIn(800); $j('div#mask').fadeTo(500, 0.7); // Update modal box height to fit the viewport var wHeight = $j(window).height() - 72; $j('div#lm_history').css('height', 'auto'); if($j('div#lm_history').height() > wHeight) $j('div#lm_history').css('height', wHeight+'px'); // console.log(partialResponse ? 'partial request finished' : 'full request finished'); useFullRequest = false; // Change filter to show all post /*if(!partialResponse) { window.LM_CHANGE_FILTER_TYPE = 'all'; }*/ return true; } // Store values needed for changing page storeStatus = function() { var history = $j('div#lm_history'); window.LM_CURRENT_PAGE = parseInt(history.find('#lm_PageNoTextBox').val()); window.LM_FILTER_TYPE = history.find('#lm_filter_type').val(); GM_setValue('viewstate2', viewState); GM_setValue('eventvalidation2', eventValidation); GM_setValue('lm_last_timestamp2', (new Date().getTime()).toString()); storeLocal('lm_change_page', window.LM_CURRENT_PAGE); storeLocal('lm_filter_type', window.LM_FILTER_TYPE); console.log('lm page: ' + window.LM_CURRENT_PAGE); } // Logout if the can't load partial page logout = function() { var message = '登出緊'; changeAndFlashMessage(message); console.log('Try to logout'); var requestUrl = 'http://' + window.location.hostname + '/logout.aspx'; ajaxRequest = GM_xmlhttpRequest({ method: 'HEAD', url: requestUrl, timeout: ajaxTimeout, headers: {'Content-type': 'application/x-www-form-urlencoded'}, onload: function(response) { ajaxRequest = null; clearTimeout(ajaxRequestTimer); console.log('logged out.'); needLogin = true; initPageFull(); requestProfilePage(); }, onerror: function(response) { ajaxRequest = null; clearTimeout(ajaxRequestTimer); console.log('logout failed.'); setTimeout(logout, 15000); }, ontimeout: handleLogoutTimeout }); // Specical handling for TamperMonkey if(typeof(TM_xmlhttpRequest) !== 'undefined') { timeoutRequest(function() {handleTamperMonkeyTimeout(handleLogoutTimeout);}); } } // Popup login page in new window if it was logout popupLoginWindow = function() { if(!needLogin){ setTimeout(pageChangeByAjax, 200); return; } needLogin = false; var message = '登出左, 開左登入晝面比你登入返'; changeAndFlashMessage(message); // Show Logout message $j('#lm-logout').show().animate({"bottom": "0px"},500); var Url = 'http://' + window.location.hostname + '/login.aspx'; var loginWindow = window.open(Url, 'hkg_login'); setTimeout(function() {checkPopupLogined(loginWindow)}, 200); } // Check login popup window status and close it if logined checkPopupLogined = function(targetWindow) { try { var logoutLink = $j(targetWindow.document).find('a[href="javascript:islogout();"]'); if(logoutLink.length !== 0) { console.log('popup logined'); targetWindow.close(); // Hide Logout Message $j('#lm-logout').delay(500).animate({"bottom": "-30px"},1000, function(){$j('#lm-logout').hide();}); clearMessage(); } else { setTimeout(function() {checkPopupLogined(targetWindow)}, 200); } } catch(err) { // Chrome only if(err.name == 'SecurityError') { console.log(err); setTimeout(function() {checkPopupLogined(targetWindow)}, 1000); console.log('Wait 1 second to determine user has login or not'); } } } // Can't simply set 'timeout' value in GM_xmlhttpRequest as TamperMonkey do not support it timeoutRequest = function(callback) { clearTimeout(ajaxRequestTimer); ajaxRequestTimer = setTimeout(callback, ajaxTimeout); } handleTamperMonkeyTimeout = function(callback) { if(ajaxRequest && ajaxRequest.abort) { ajaxRequest.abort(); callback(); } } handleTimeout = function() { var message = '太慢喇再Load過'; changeAndFlashMessage(message); RetryFullRequest(); } handleLogoutTimeout = function() { console.log('server logout timeout'); setTimeout(logout, 15000); } handleError = function() { console.log('server error'); var message = 'Server 有問題再Load過'; changeAndFlashMessage(message); RetryFullRequest(); } tooManyRetryError = function() { var message = '唔知咩事試過幾次都唔得, 你Reload下啦'; changeAndFlashMessage(message); } RetryFullRequest = function() { // Tried partial request a few times, change to full request if(!useFullRequest) { useFullRequest = true; // logout(); } else { tooManyRetryError(); } } changeAndFlashMessage = function(message) { var messageDiv = $j('div#lm_message'); messageDiv.html(message); // Show LM message messageDiv.stop(); messageDiv.show().animate({"top": "0"},500); //flashMessage(messageDiv); } clearMessage = function() { var messageDiv = $j('div#lm_message'); // Hide LM message messageDiv.stop(); messageDiv.delay(1000).animate({"top": "-30px"},1000, function(){messageDiv.hide(); messageDiv.html('');}); //messageDiv.stop(); } /*flashMessage = function(item) { item.stop(); item.animate({"opacity": "0"},50).animate({"opacity": "1"},50, function(){flashMessage(item);}); }*/ // Change button event, let this script handle page changing replaceButton = function() { var history = $j('div#lm_history'); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab1_btn_Next') .attr('id', 'lm_btn_Next') .attr('name', 'lm_btn_Next') .click(nextPage); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab1_btn_Previous') .attr('id', 'lm_btn_Previous') .attr('name', 'lm_btn_Previous') .click(previousPage); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab1_btn_GoPageNo') .attr('id', 'lm_btn_GoPageNo') .attr('name', 'lm_btn_GoPageNo') .click(gotoPage); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab1_filter_type') .attr('id', 'lm_filter_type') .attr('name', 'lm_filter_type') .attr('onchange', '') .change(changeFilter); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab1_ddl_filter_year') .attr('id', 'lm_filter_year') .attr('name', 'lm_filter_year') .attr('onchange', ''); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab1_PageNoTextBox') .attr('id', 'lm_PageNoTextBox') .attr('name', 'lm_PageNoTextBox'); } // Store the target page number in cookie nextPage = function() { var page = window.LM_CURRENT_PAGE + 1; storeLocal('lm_change_page', page); window.LM_CHANGE_PAGE = page; return false; } previousPage = function() { var page = Math.max(window.LM_CURRENT_PAGE - 1, 1); storeLocal('lm_change_page', page); window.LM_CHANGE_PAGE = page; return false; } gotoPage = function() { var history = $j('div#lm_history'); var page = parseInt(history.find('#lm_PageNoTextBox').val()); storeLocal('lm_change_page', page) window.LM_CHANGE_PAGE = page; return false; } changeFilter = function() { var history = $j('div#lm_history'); var filter = history.find('#lm_filter_type').val(); storeLocal('lm_filter_type', filter) window.LM_CHANGE_FILTER_TYPE = filter; return false; } storeLocal = function(key, value) { if(typeof(value) !== 'undefined' && value !== null) { localStorage[key] = JSON.stringify(value); } else { localStorage.removeItem(key); } } loadLocal = function(key) { var objectJSON = localStorage[key]; if(!objectJSON) return; return JSON.parse(objectJSON); } deleteLocal = function(key) { localStorage.remoteItem(key); } clearOldCookie = function() { if(!loadLocal('cookie_cleared')) { document.cookie = 'lm_change_page=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'; storeLocal('cookie_cleared', true); } } shuffle = function(arr) { for( var j, x, i = arr.length; i; j = Math.random() * i|0, x = arr[--i], arr[i] = arr[j], arr[j] = x ); return arr; } setup = function() { var message = 'Load緊呀等陣啦'; changeAndFlashMessage(message); } start = function() { clearOldCookie(); var history = $j('div#ctl00_ContentPlaceHolder1_mainTab_mainTab1_UpdatePanelHistory'); if(history.length === 1) return; setup(); // if(initPagePartial()) { requestProfilePage(changePage); // } else { // logout(); // } } // Common functions called in MEL & PM requestEventValidation = function(requestUrl, type) { GM_xmlhttpRequest({ method: "GET", url: requestUrl, timeout: ajaxTimeout, headers: {'Content-type': 'application/x-www-form-urlencoded'}, onload: function(response) { ajaxRequest = null; clearTimeout(ajaxRequestTimer); if(getEventValidation(response)) { // success //GM_setValue('userviewstate', userViewState); //GM_setValue('usereventvalidation', userEventValidation); console.log('userEventValidation set'); if(type!='pm') { requestMEL(); } else { requestPM(); } } else { handleError2(); } } }); } getEventValidation = function(response) { var data2 = response.responseText; if(!data2 || (data2.length === 0)) { // No data2 response console.log('no data2'); return false; } // Find EventValidation in data2 response $j.each($j.parseHTML(data2), function(i, el) { if(el.id === 'aspnetForm') { var doms = $j(el); userViewState = doms.find('#__VIEWSTATE').val(); userEventValidation = doms.find('#__EVENTVALIDATION').val(); return false; } }); if(!userViewState || !userEventValidation) { console.log('no userEventValidation found'); return false; } console.log('userEventValidation request finished'); return true; } handleError2 = function() { console.log('server error'); var message = 'Server 有問題,你遲的再試下啦'; changeAndFlashMessage(message); } // Ming E Lau Start requestMEL = function(type, btn) { var message = 'Load 緊'; changeAndFlashMessage(message); var requestUrl = 'http://' + window.location.hostname + '/ProfilePage.aspx?type=bookmark&page=1&userid=' + userID; //userViewState = GM_getValue('userviewstate'); //userEventValidation = GM_getValue('usereventvalidation'); /* if(!userViewState || !userEventValidation){ requestEventValidation(requestUrl, 'mel'); return false; }*/ var varBookmarkOrder = loadLocal('lm_btn_bookmarkOrder') || 'lastPost'; var data = $j.param({ 'ctl00$ScriptManager1': (type || 'ctl00$ScriptManager1|ctl00$ContentPlaceHolder1$mainTab'), 'ctl00_ContentPlaceHolder1_tc_Profile_ClientState': '{"ActiveTabIndex":0,"TabState":[true,true,true,true]}', 'ctl00_ContentPlaceHolder1_mainTab_ClientState': '{"ActiveTabIndex":3,"TabState":[true,true,true,true,true,true]}', 'ctl00$ContentPlaceHolder1$mainTab$mainTab4$bookmarkOrder': varBookmarkOrder, '__EVENTARGUMENT': 'activeTabChanged:3', '__VIEWSTATE': userViewState, '__EVENTVALIDATION': userEventValidation, '__ASYNCPOST': true }); if(btn=='bookmark'){ data += '&' + $j.param({'__EVENTTARGET': 'ctl00$ContentPlaceHolder1$mainTab$mainTab4$bookmarkOrder'}); } else { data += '&' + $j.param({'__EVENTTARGET': 'ctl00$ContentPlaceHolder1$mainTab'}); } if(btn=='bmPagePrevious'){ data += '&' + $j.param({'ctl00$ContentPlaceHolder1$mainTab$mainTab4$bmPagePrevious': '上一頁'}); } if(btn=='bmPageNext'){ data += '&' + $j.param({'ctl00$ContentPlaceHolder1$mainTab$mainTab4$bmPageNext': '下一頁'}); } GM_xmlhttpRequest({ method: "GET", url: requestUrl, data: '', timeout: ajaxTimeout, headers: {'Content-type': 'application/x-www-form-urlencoded'}, onload: function(response) { ajaxRequest = null; clearTimeout(ajaxRequestTimer); if(replaceContent2(response)) { // success } else { handleError2(); } } }); } // Handle data response replaceContent2 = function(response) { var message = 'Load 完'; changeAndFlashMessage(message); clearMessage(); var data = response.responseText; var history; if(!data || (data.length === 0)) { // No history in data response console.log('No data response'); return false; } // history = $j($j.parseHTML(data)).filter("table#bookmarkTable"); $j.each($j.parseHTML(data), function(i, el) { if(el.id === 'aspnetForm') { var doms = $j(el); history = doms.find('#ctl00_ContentPlaceHolder1_dataLabel'); lmtotal = doms.find('#ctl00_ContentPlaceHolder1_totalBM'); return false; } }); if(history.length === 0) { console.log('No history found'); //console.log(data); return false; } history.find('#bookmark tbody tr').find('td:eq(6)').remove(); history.find('#bookmark tbody tr:eq(0) td:eq(5)').remove(); $j('div#lm_history').html('' + '
' + lmtotal.html() + '
' + history.html()); //replaceButton2(); // Display modal box when history was successfully loaded $j('div#lm').fadeIn(800); $j('div#mask').fadeTo(500, 0.7); // Update modal box height to fit the viewport var wHeight = $j(window).height() - 72; $j('div#lm_history').css('height', 'auto'); if($j('div#lm_history').height() > wHeight) $j('div#lm_history').css('height', wHeight+'px'); console.log('MEL request finished'); return true; } // Change button event, let this script handle page changing replaceButton2 = function() { var history = $j('div#lm_history'); var varBookmarkOrder = loadLocal('lm_btn_bookmarkOrder') || 'lastPost'; history.find('.main_table1 #BmInnerTable tbody tr').find('td:eq(6)').remove(); history.find('.main_table1 #BmInnerTable tbody tr:eq(0) td:eq(5)').remove(); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab4_bookmarkOrder').attr('onchange', ''); if(varBookmarkOrder=='bookmark') history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab4_bookmarkOrder>option:eq(1)').prop('selected', true); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab4_bookmarkOrder') .attr('id', 'lm_btn_bookmarkOrder') .attr('name', 'lm_btn_bookmarkOrder') .change(bookmarkOrder); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab4_bmPagePrevious') .attr('id', 'lm_btn_bmPagePrevious') .attr('name', 'lm_btn_bmPagePrevious') .click(bmPagePrevious); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab4_bmPageNext') .attr('id', 'lm_btn_bmPageNext') .attr('name', 'lm_btn_bmPageNext') .click(bmPageNext); } // Change button action bookmarkOrder = function(e) { var history = $j('div#lm_history'); var varBookmarkOrder = history.find('#lm_btn_bookmarkOrder').val(); e.preventDefault; storeLocal('lm_btn_bookmarkOrder', varBookmarkOrder) if(varBookmarkOrder=='bookmark') { requestMEL('ctl00$ScriptManager1|ctl00$ContentPlaceHolder1$mainTab$mainTab4$bookmarkOrder', varBookmarkOrder); } else { requestMEL(); } return false; } bmPagePrevious = function(e) { e.preventDefault; requestMEL('ctl00$ScriptManager1|ctl00$ContentPlaceHolder1$mainTab$mainTab4$bmPagePrevious', 'bmPagePrevious'); return false; } bmPageNext = function(e) { e.preventDefault; requestMEL('ctl00$ScriptManager1|ctl00$ContentPlaceHolder1$mainTab$mainTab4$bmPageNext', 'bmPageNext'); return false; } // Ming E Lau End // PM Start requestPM = function(type, btn) { var message = 'Load 緊'; changeAndFlashMessage(message); var requestUrl = 'http://' + window.location.hostname + '/ProfilePage.aspx?&type=pm&page=1&userid=' + userID; //userViewState = GM_getValue('userviewstate'); //userEventValidation = GM_getValue('usereventvalidation'); /* if(!userViewState || !userEventValidation){ requestEventValidation(requestUrl, 'pm'); return false; }*/ /* var pmPage = loadLocal('pmpage') || 1; var data = $j.param({ 'ctl00$ScriptManager1': (type || 'ctl00$ContentPlaceHolder1$mainTab$mainTab0$btn_GoPMPageN'), 'ctl00_ContentPlaceHolder1_tc_Profile_ClientState': '{"ActiveTabIndex":0,"TabState":[true,true,true,true]}', 'ctl00_ContentPlaceHolder1_mainTab_ClientState': '{"ActiveTabIndex":0,"TabState":[true,true,true,true,true,true]}', '__EVENTARGUMENT': 'activeTabChanged:0', '__VIEWSTATE': userViewState, '__EVENTVALIDATION': userEventValidation, 'ctl00$ContentPlaceHolder1$mainTab$mainTab0$PMPageTextBox': pmPage, '__ASYNCPOST': true }); if(!type){ data += '&' + $j.param({'__EVENTTARGET': 'ctl00$ContentPlaceHolder1$mainTab', 'ctl00$ContentPlaceHolder1$mainTab$mainTab0$btn_GoPMPageNo': 'Go'}); } if(btn=='pmPagePrevious'){ data += '&' + $j.param({'ctl00$ContentPlaceHolder1$mainTab$mainTab0$btn_PreviousPM': '上一頁'}); } if(btn=='pmPageNext'){ data += '&' + $j.param({'ctl00$ContentPlaceHolder1$mainTab$mainTab0$btn_NextPM': '下一頁'}); } */ GM_xmlhttpRequest({ method: "GET", url: requestUrl, data: '', timeout: ajaxTimeout, headers: {'Content-type': 'application/x-www-form-urlencoded'}, onload: function(response) { ajaxRequest = null; clearTimeout(ajaxRequestTimer); if(replaceContent3(response)) { // success //storeLocal('pmpage', parseInt($j('div#lm_history').find('#lm_PMPageNoTextBox').val())); } else { handleError2(); } } }); } // Handle data response replaceContent3 = function(response) { var message = 'Load 完'; changeAndFlashMessage(message); clearMessage(); var data = response.responseText; var history; if(!data || (data.length === 0)) { // No history in data response console.log('No data response'); return false; } // history = $j($j.parseHTML(data)).filter("table#ctl00_ContentPlaceHolder1_mainTab_mainTab0_PMPersonalTable"); $j.each($j.parseHTML(data), function(i, el) { if(el.id === 'aspnetForm') { var doms = $j(el); history = doms.find('#ctl00_ContentPlaceHolder1_dataLabel'); return false; } }); if(history.length === 0) { console.log('No history found'); //console.log(data); return false; } history.find('#pm tbody tr').find('td:eq(3)').remove(); $j('div#lm_history').html('' + history.html()); //replaceButton3(); // Display modal box when history was successfully loaded $j('div#lm').fadeIn(800); $j('div#mask').fadeTo(500, 0.7); // Update modal box height to fit the viewport var wHeight = $j(window).height() - 72; $j('div#lm_history').css('height', 'auto'); if($j('div#lm_history').height() > wHeight) $j('div#lm_history').css('height', wHeight+'px'); console.log('PM request finished'); return true; } // Change button event, let this script handle page changing replaceButton3 = function() { var history = $j('div#lm_history'); history.find('.main_table1 #PMInnerTable tbody tr').find('td:eq(3)').remove(); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab0_btn_NextPM') .attr('id', 'lm_btn_NextPM') .attr('name', 'lm_btn_NextPM') .click(nextPMPage); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab0_btn_PreviousPM') .attr('id', 'lm_btn_PreviousPM') .attr('name', 'lm_btn_PreviousPM') .click(previousPMPage); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab0_btn_GoPMPageNo') .attr('id', 'lm_btn_GoPMPageNo') .attr('name', 'lm_btn_GoPMPageNo') .click(gotoPMPage); history.find('#ctl00_ContentPlaceHolder1_mainTab_mainTab0_PMPageTextBox') .attr('id', 'lm_PMPageNoTextBox') .attr('name', 'lm_PMPageNoTextBox'); } // Change button action nextPMPage = function(e) { e.preventDefault; requestPM('ctl00$ScriptManager1|ctl00$ContentPlaceHolder1$mainTab$mainTab0$btn_NextPM', 'pmPageNext'); return false; } previousPMPage = function(e) { e.preventDefault; requestPM('ctl00$ScriptManager1|ctl00$ContentPlaceHolder1$mainTab$mainTab0$btn_PreviousPM', 'pmPagePrevious'); return false; } gotoPMPage = function(e) { e.preventDefault; var history = $j('div#lm_history'); var pmPage = parseInt(history.find('#lm_PMPageNoTextBox').val()); storeLocal('pmpage', pmPage); requestPM(); return false; } // PM End // Get User ID userID = $j('#ctl00_ContentPlaceHolder1_lb_UserName a:eq(0)').attr('href').replace(/[^0-9]/g, ''); // Define CSS Style (You can overide it by other script, if you want to) lmStyle = ''; closeHistory = function() { $j('div#lm').fadeOut(500); $j('div#mask').fadeOut(800); } if(userID) { $j('head').append(lmStyle); $j('body').append('' + '
' + '
起底
名已留
PM
' + '
' + '
登出左,開左登入畫面比你登入返。Block左睇唔倒就按呢度登入
'); $j('#lm-mel').css("opacity", "0"); $j('#lm-pm').css("opacity", "0"); $j('#lm-finder-2').css("opacity", "0.7"); $j('#lm-mel-2').css("opacity", "0.7"); $j('#lm-pm-2').css("opacity", "0.7"); $j('#lm-menu').hover(function(){ $j('#lm-mel').stop(); $j('#lm-mel').css("display", "block"); $j('#lm-mel').animate({"opacity": "1"},500); $j('#lm-pm').stop(); $j('#lm-pm').css("display", "block"); $j('#lm-pm').animate({"opacity": "1"},500); },function(){ $j('#lm-mel').animate({"opacity": "0"},500, function(){$j('#lm-mel').hide()}); $j('#lm-pm').animate({"opacity": "0"},500, function(){$j('#lm-pm').hide()}); }); $j('#lm-finder').click(function () {start()}); $j('#lm-finder-2').click(function () {start()}); $j('#lm-mel').click(function () {requestMEL()}); $j('#lm-mel-2').click(function () {requestMEL()}); $j('#lm-pm').click(function () {requestPM()}); $j('#lm-pm-2').click(function () {requestPM()}); $j('#lm-finder-close').click(function () {closeHistory()}); $j('#mask').click(function () {closeHistory()}); } var script = document.createElement('script'); script.type = "text/javascript"; script.innerHTML = "function GetMessageBody(id, title) { \n\ if ($get('ctl00_ContentPlaceHolder1_siteUpdateProgressPM') != null) { \n\ $get('ctl00_ContentPlaceHolder1_siteUpdateProgressPM').style.display = ''; \n\ PutBoxToMiddle($get('ctl00_ContentPlaceHolder1_siteUpdateProgressPM'), 150, 30); \n\ } \n\ PageMethods.GetPMMessageBody(id, onGetPMBodySucceed, onGetPMBodyFailed); \n\ $get('spanPMMessageTitle').innerHTML = title; \n\ } \n\ \n\ function onGetPMBodySucceed(result, userContext, methodName) { \n\ if ($get('ctl00_ContentPlaceHolder1_siteUpdateProgressPM') != null) { \n\ $get('ctl00_ContentPlaceHolder1_siteUpdateProgressPM').style.display = 'none'; \n\ } \n\ $get('divPMMessageBody').innerHTML = result; \n\ PutBoxToMiddle($get('DivShowPM'), document.documentElement.clientWidth-220, document.documentElement.clientHeight-60); \n\ $get('DivShowPM').style.display = ''; \n\ } \n\ \n\ function onGetPMBodyFailed(error, userContext, methodName) { \n\ if ($get('ctl00_ContentPlaceHolder1_siteUpdateProgressPM') != null) { \n\ $get('ctl00_ContentPlaceHolder1_siteUpdateProgressPM').style.display = 'none'; \n\ } \n\ alert('An error occurred') \n\ }var PageMethods = function() { \n\ PageMethods.initializeBase(this); \n\ this._timeout = 0; \n\ this._userContext = null; \n\ this._succeeded = null; \n\ this._failed = null; \n\ } \n\ PageMethods.prototype = { \n\ _get_path:function() { \n\ var p = this.get_path(); \n\ if (p) return p; \n\ else return PageMethods._staticInstance.get_path();}, \n\ GetPMMessageBody:function(PM_ID,succeededCallback, failedCallback, userContext) { \n\ return this._invoke(this._get_path(), 'GetPMMessageBody',false,{PM_ID:PM_ID},succeededCallback,failedCallback,userContext); }} \n\ PageMethods.registerClass('PageMethods',Sys.Net.WebServiceProxy); \n\ PageMethods._staticInstance = new PageMethods(); \n\ PageMethods.set_path = function(value) { PageMethods._staticInstance.set_path(value); } \n\ PageMethods.get_path = function() { return PageMethods._staticInstance.get_path(); } \n\ PageMethods.set_timeout = function(value) { PageMethods._staticInstance.set_timeout(value); } \n\ PageMethods.get_timeout = function() { return PageMethods._staticInstance.get_timeout(); } \n\ PageMethods.set_defaultUserContext = function(value) { PageMethods._staticInstance.set_defaultUserContext(value); } \n\ PageMethods.get_defaultUserContext = function() { return PageMethods._staticInstance.get_defaultUserContext(); } \n\ PageMethods.set_defaultSucceededCallback = function(value) { PageMethods._staticInstance.set_defaultSucceededCallback(value); } \n\ PageMethods.get_defaultSucceededCallback = function() { return PageMethods._staticInstance.get_defaultSucceededCallback(); } \n\ PageMethods.set_defaultFailedCallback = function(value) { PageMethods._staticInstance.set_defaultFailedCallback(value); } \n\ PageMethods.get_defaultFailedCallback = function() { return PageMethods._staticInstance.get_defaultFailedCallback(); } \n\ PageMethods.set_path('/profilepage.aspx'); \n\ PageMethods.GetPMMessageBody= function(PM_ID,onSuccess,onFailed,userContext) {PageMethods._staticInstance.GetPMMessageBody(PM_ID,onSuccess,onFailed,userContext); }"; document.getElementsByTagName('head')[0].appendChild(script);