Skip to content
This repository has been archived by the owner on Sep 10, 2023. It is now read-only.

Commit

Permalink
feat(new): 新增weibo/twitter的去除跳转,以及重构一些代码
Browse files Browse the repository at this point in the history
  • Loading branch information
axetroy committed Nov 17, 2016
1 parent e60f34f commit cb07843
Show file tree
Hide file tree
Showing 13 changed files with 631 additions and 293 deletions.
10 changes: 6 additions & 4 deletions dist/anti-redirect.min.user.js

Large diffs are not rendered by default.

721 changes: 478 additions & 243 deletions dist/anti-redirect.user.js

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions index.ts
Expand Up @@ -7,6 +7,7 @@ import 'rxjs/add/operator/throttle';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/debounce';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/retry';
Expand All @@ -15,12 +16,16 @@ import 'rxjs/add/operator/delay';

import baiduRedirect from './src/baidu';
import googleRedirect from './src/google';
import weboRedirect from './src/weibo';
import twitterRedirect from './src/twitter';
import soRedirect from './src/so';
import zhihuRedirect from './src/zhihu';
import zhihuDailyRedirect from './src/zhihu-daily';

baiduRedirect.bootstrap();
googleRedirect.bootstrap();
weboRedirect.bootstrap();
twitterRedirect.bootstrap();
soRedirect.bootstrap();
zhihuRedirect.bootstrap();
zhihuDailyRedirect.bootstrap();
Expand Down
50 changes: 40 additions & 10 deletions src/baidu.ts
Expand Up @@ -11,18 +11,52 @@ function getText(htmlElement: HTMLElement): string {
return htmlElement.innerText || htmlElement.textContent;
}

class Query {
object: any = {};

constructor(public queryStr: String) {
this.object = this.toObject(queryStr.replace(/^\?+/, ''));
}

toObject(queryStr: String) {
let obj = {};
queryStr.split('&').forEach((item)=> {
let arr = item.split('=') || [];
let key = arr[0] || '';
obj[key] = arr[1] || '';
});
return obj;
}

public toString(): String {
let arr = [];
for (let key in this.object) {
if (this.object.hasOwnProperty(key)) {
let value = this.object[key];
arr.push(key + '=' + value);
}
}
return '?' + arr.join('&');
}

}

class BaiduRedirect extends RedirectOnRequest {
constructor(domainTester, urlTester, matcher, ASelector = 'a') {
super(domainTester, urlTester, matcher, ASelector);
}

handlerAll(): void {
let skipArray: any[] = location.search.match(/pn=(\d+)/) || [''];
let skip: number = skipArray.length === 2 ? +skipArray[1] : 0;
const href: string = window.top.location.href;
if (!/www\.baidu\.com\/s/.test(href)) return;
let url: string = href.replace(/(\&)(tn=\w+)(\&)/img, '$1' + 'tn=baidulocal' + '$3') + `&timestamp=${new Date().getTime()}`;
if (url.indexOf('tn=baidulocal') === -1) url += '&tn=baidulocal';
if (!/www\.baidu\.com\/s/.test(window.top.location.href)) return;
const query = new Query(window.top.location.search);
const skip = query.object.pn || 0;

query.object.tn = 'baidulocal';
query.object.timestamp = new Date().getTime();
query.object.rn = 50;

const url: string = `${location.protocol}://${location.host + location.pathname + query}`;

Observable.forkJoin(
http.get(url),
http.get(url.replace(/pn=(\d+)/, `pn=${skip + 10}`))
Expand Down Expand Up @@ -58,10 +92,6 @@ class BaiduRedirect extends RedirectOnRequest {
});
}

log(): void {
console.log('bootstrap baidu');
}

}

export default new BaiduRedirect(
Expand Down
4 changes: 0 additions & 4 deletions src/google.ts
Expand Up @@ -23,10 +23,6 @@ class GoogleRedirect extends RedirectOnUrl {
});
}

log() {
console.log('bootstrap google');
}

}

export default new GoogleRedirect(
Expand Down
19 changes: 15 additions & 4 deletions src/redirect-on-request.ts
@@ -1,4 +1,5 @@
import {Observable} from 'rxjs/Observable';
import * as _ from 'underscore';
import {http, Response$, timeout} from './http';
import {CONFIG} from './config';

Expand All @@ -14,6 +15,7 @@ class RedirectOnRequest {
public match: boolean;
public DEBUG = DEBUG;
public status: any = status;
public logCount: number = 0;

constructor(public domainTester, public urlTester, public matcher, public ASelector = 'a') {
this.match = domainTester.test(document.domain);
Expand Down Expand Up @@ -80,8 +82,17 @@ class RedirectOnRequest {
.filter((ele: HTMLAnchorElement)=>ele.nodeName === 'A');
}

log(str?: string): void {
console.log(str || 'boostrap anti-redirect');
log(project?: string): void {
if (this.logCount < 1) {
console.log(
"%c Anti-Redirect %c Copyright \xa9 2015-%s %s",
'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:64px;color:#00bbee;-webkit-text-fill-color:#00bbee;-webkit-text-stroke: 1px #00bbee;',
"font-size:12px;color:#999999;",
(new Date).getFullYear(),
'\n' + (project || '')
);
this.logCount++;
}
}

bootstrap(): void {
Expand All @@ -107,8 +118,6 @@ class RedirectOnRequest {
})
.subscribe(()=> {

this.log();

this.scroll().subscribe(()=> {
this.handlerOneEleOneByOne();
});
Expand All @@ -120,6 +129,8 @@ class RedirectOnRequest {
this.handlerAll();
this.handlerOneEleOneByOne();

this.log();

});
}
}
Expand Down
46 changes: 27 additions & 19 deletions src/redirect-on-url.ts
Expand Up @@ -4,8 +4,10 @@ const DEBUG = CONFIG.debug;

class RedirectOnUrl {
public match: boolean = false;
public DEBUG: boolean = DEBUG;
public logCount: number = 0;

constructor(private domainTester, private urlTester, private matcher, private ASelector = 'a') {
constructor(public domainTester, public urlTester, public matcher, public ASelector = 'a') {
this.match = domainTester.test(document.domain);
}

Expand All @@ -25,48 +27,54 @@ class RedirectOnUrl {
})
}

scroll(): Observable<any> {
return Observable.fromEvent(document, 'mousemove')
.debounce(()=>Observable.timer(500))
scroll() {
return Observable.fromEvent(document, 'scroll')
.debounceTime(500)
.flatMap(()=>Observable.from([].slice.call(document.querySelectorAll(this.ASelector))))
.do((aEle: HTMLAnchorElement)=> {
.subscribe((aEle: HTMLAnchorElement)=> {
this.handlerOneEle(aEle).subscribe(function () {
});
})
});
}

mouseover(): Observable<HTMLAnchorElement> {
return Observable.fromEvent(document, 'mousemove')
.throttle(()=>Observable.timer(100))
.debounce(()=>Observable.timer(100))
.map(function (event: any): HTMLElement {
let target = event.target;
return target.nodeName === 'A' ? target : target.parentNode.nodeName === 'A' ? target.parentNode : target;
})
.filter(function (ele: HTMLElement) {
return ele.nodeName === 'A'
})
.flatMap((aEle: HTMLAnchorElement)=>this.handlerOneEle(aEle))
return ele.nodeName === 'A';
});
}

log(str?: string): void {
console.log(str || 'boostrap anti-redirect');
log(project?: string): void {
if (this.logCount < 1) {
console.log(
"%c Anti-Redirect %c Copyright \xa9 2015-%s %s",
'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:64px;color:#00bbee;-webkit-text-fill-color:#00bbee;-webkit-text-stroke: 1px #00bbee;',
"font-size:12px;color:#999999;",
(new Date).getFullYear(),
'\n' + (project || '')
);
this.logCount++;
}
}

bootstrap(): void {
if (!this.match) return;
Observable.fromEvent(document, 'DOMContentLoaded')
.flatMap(()=>Observable.timer(1000))
.delay(300)
.subscribe(()=> {

this.log();

this.scroll().subscribe(function () {
this.scroll();

this.mouseover().subscribe((aEle: HTMLAnchorElement)=> {
this.handlerOneEle(aEle)
});

this.mouseover().subscribe(function () {

})
this.log();

});
}
Expand Down
3 changes: 0 additions & 3 deletions src/so.ts
Expand Up @@ -4,9 +4,6 @@ class SoRedirect extends RedirectOnUrl {
constructor(domainTester, urlTester, matcher) {
super(domainTester, urlTester, matcher);
}
log() {
console.log('bootstrap 360 so');
}
}

export default new SoRedirect(
Expand Down
29 changes: 29 additions & 0 deletions src/twitter.ts
@@ -0,0 +1,29 @@
import {Observable} from 'rxjs/Observable';
import {RedirectOnUrl} from './redirect-on-url';

class TwitterRedirect extends RedirectOnUrl {
constructor(domainTester, urlTester, matcher) {
super(domainTester, urlTester, matcher);
}

handlerOneEle(aEle: HTMLAnchorElement): Observable<any> {
return Observable.of(aEle)
.filter((ele: HTMLAnchorElement)=> {
return this.urlTester.test(ele.href) && /^https?:\/\//.test(ele.title);
})
.do((aEle: HTMLAnchorElement)=> {
let url: string = decodeURIComponent(aEle.title);
if (url) {
aEle.href = url;
this.DEBUG && (aEle.style.backgroundColor = 'green');
}
})
}

}

export default new TwitterRedirect(
/twitter\.com/,
/t\.co\/\w+/,
null
)
29 changes: 29 additions & 0 deletions src/weibo.ts
@@ -0,0 +1,29 @@
import {Observable} from 'rxjs/Observable';
import {RedirectOnUrl} from './redirect-on-url';

class WeiboRedirect extends RedirectOnUrl {
constructor(domainTester, urlTester, matcher) {
super(domainTester, urlTester, matcher);
}

handlerOneEle(aEle: HTMLAnchorElement): Observable<any> {
return Observable.of(aEle)
.filter((ele: HTMLAnchorElement)=> {
return this.urlTester.test(ele.href) && /^https?:\/\//.test(ele.title);
})
.do((aEle: HTMLAnchorElement)=> {
let url: string = decodeURIComponent(aEle.title);
if (url) {
aEle.href = url;
this.DEBUG && (aEle.style.backgroundColor = 'green');
}
})
}

}

export default new WeiboRedirect(
/weibo\.com/,
/t\.cn\/\w+/,
null
)
3 changes: 0 additions & 3 deletions src/zhihu-daily.ts
Expand Up @@ -4,9 +4,6 @@ class ZhihuDailyRedirect extends RedirectOnUrl {
constructor(domainTester, urlTester, matcher) {
super(domainTester, urlTester, matcher);
}
log() {
console.log('bootstrap zhihu daily');
}
}

export default new ZhihuDailyRedirect(
Expand Down
3 changes: 0 additions & 3 deletions src/zhihu.ts
Expand Up @@ -4,9 +4,6 @@ class ZhihuRedirect extends RedirectOnUrl {
constructor(domainTester, urlTester, matcher) {
super(domainTester, urlTester, matcher);
}
log() {
console.log('bootstrap zhihu');
}
}

export default new ZhihuRedirect(
Expand Down
2 changes: 2 additions & 0 deletions webpack.config.js
Expand Up @@ -48,6 +48,8 @@ module.exports = {
// @include *www.so.com*
// @include *www.zhihu.com*
// @include *daily.zhihu.com*
// @include *weibo.com*
// @include *twitter.com*
// @connect *
// @compatible chrome 完美运行
// @compatible firefox 完美运行
Expand Down

0 comments on commit cb07843

Please sign in to comment.