├── .gitignore ├── README.md ├── dist ├── dmm-plus-sc.user.js ├── dmm-plus-sc.user.js.map ├── esunbank.user.js ├── esunbank.user.js.map ├── fuck-u-fb-share.user.js ├── fuck-u-fb-share.user.js.map ├── gamer-auto-signin.user.js ├── gamer-auto-signin.user.js.map ├── gitee-plus.user.js ├── gitee-plus.user.js.map ├── masiro-moe.user.js ├── masiro-moe.user.js.map ├── mastodon-plus.user.js ├── mastodon-plus.user.js.map ├── novel-plus-sc.user.js ├── novel-plus-sc.user.js.map ├── pan-baidu-block-or-expire.user.js ├── pan-baidu-block-or-expire.user.js.map ├── pan-baidu-download.user.js ├── pan-baidu-download.user.js.map ├── shimo-im-discuz.user.js ├── shimo-im-discuz.user.js.map ├── syosetu-list-number.user.js ├── syosetu-list-number.user.js.map ├── test-test-sc.user.js.map ├── tieba-harmony.user.js ├── tieba-harmony.user.js.map ├── ux-tweak-sc.user.js ├── ux-tweak-sc.user.js.map ├── youtube-plus-sc.user.js └── youtube-plus-sc.user.js.map ├── gulpfile.js ├── lib ├── color │ └── tag.ts ├── comic │ ├── font.ts │ ├── novel.ts │ └── style.ts ├── core │ ├── demo.ts │ ├── index.ts │ ├── metadata.ts │ ├── plus.ts │ └── tpl │ │ ├── .gitignore │ │ ├── demo.ts │ │ ├── index.user.ts │ │ └── metadata.ts ├── dom │ ├── disable_nocontextmenu.ts │ ├── filter │ │ └── link.js │ ├── iframe.ts │ └── img │ │ └── size.ts ├── event │ ├── dom.js │ └── done.ts ├── func │ ├── .gitignore │ ├── array │ │ └── unique.ts │ ├── copy.ts │ ├── debounce.js │ ├── html.ts │ ├── open.ts │ └── parse_url.ts ├── greasemonkey │ ├── gm │ │ ├── api.ts │ │ ├── menu.ts │ │ └── xhr.ts │ ├── index.ts │ ├── match.ts │ ├── metadata.ts │ ├── uf.ts │ └── web │ │ └── xhr.ts ├── jquery │ ├── event.js │ ├── event │ │ ├── capture.ts │ │ ├── hotkey.js │ │ └── key.js │ ├── global.ts │ ├── history.state.js │ ├── jquery.color.js │ ├── onscreen.js │ ├── push.js │ ├── scrollTo.js │ └── scrollTo.ts ├── promise │ ├── index.ts │ └── wait.js └── site │ ├── .gitignore │ ├── baidu │ ├── pan │ │ └── index.ts │ └── tieba │ │ └── index.ts │ ├── discuz │ └── index.ts │ ├── gamer │ └── signin.ts │ ├── index.ts │ ├── iqing │ └── signin.ts │ ├── pixiv │ └── index.ts │ └── youtube │ └── index.ts ├── package.json ├── readme ├── dmhy001.jpg ├── dmhy002.jpg ├── firefox57 │ ├── 2018-03-01-12-07-32-3.jpg │ └── greasemonkey.md ├── fuck-u-fb-share.md ├── fuck-u-fb-share.png ├── gitee-plus.md ├── images │ ├── 2017-11-24-16-11-30-2.jpg │ ├── 2018-03-08-22-12-26-2.jpg │ ├── 2018-03-18-05-09-21-1.jpg │ ├── 2018-03-18-05-11-14-2.jpg │ ├── ShareX_2019-03-17-03-17-28-.png │ ├── ShareX_2019-03-17-03-25-00-.png │ ├── gitee-plus │ │ ├── 001.png │ │ ├── 002.png │ │ ├── 003.png │ │ └── 2018-08-17-22-30-34-24.png │ ├── image.png │ ├── image_1.png │ ├── image_2.png │ ├── image_3.png │ ├── image_4.png │ ├── image_5.png │ ├── novel-plus-sc │ │ ├── 2017-12-06-16-31-05-1.png │ │ ├── 2017-12-06-17-24-01-4.png │ │ ├── 2017-12-07-08-24-33-5.jpg │ │ └── 2017-12-07-15-04-47-6.png │ └── syosetu-list-number │ │ ├── 2018-07-14-17-58-13-4.png │ │ ├── 2018-07-15-18-35-07-3.png │ │ └── 2018-08-13-00-38-39-17.png ├── masiro-moe.md ├── novel-plus-sc.md ├── pan-baidu-block-or-expire.md ├── shimo-im-discuz.md ├── syosetu-list-number.jpg ├── syosetu-list-number.md ├── tieba-harmony.md ├── userscript.md └── ux-tweak-sc.md ├── script └── create.ts ├── src ├── dmm-plus-sc │ ├── _fake.ts │ ├── dmm │ │ └── games.ts │ ├── games │ │ ├── canvas.ts │ │ ├── gadgets.ts │ │ └── pc-play.ts │ ├── global │ │ ├── iframe.ts │ │ ├── script.ts │ │ └── webgl_dmm.ts │ ├── index.js │ ├── index.user.ts │ └── lib │ │ └── metadata.ts ├── esunbank │ ├── esunbank │ │ └── ebank.ts │ ├── index.js │ ├── index.user.ts │ └── lib │ │ └── metadata.ts ├── fuck-u-fb-share │ ├── facebook │ │ └── 2017.11.ts │ ├── index.js │ ├── index.user.ts │ └── lib │ │ └── metadata.ts ├── gamer-auto-signin │ ├── .gitignore │ ├── gamer │ │ └── ajax.ts │ ├── index.js │ ├── index.user.ts │ ├── lib │ │ └── metadata.ts │ └── novel │ │ └── sfacg.ts ├── gitee-plus │ ├── .gitignore │ ├── base │ │ └── gitee-plus.ts │ ├── index.js │ ├── index.user.ts │ └── lib │ │ └── metadata.ts ├── masiro-moe │ ├── .gitignore │ ├── base │ │ └── masiro-moe.ts │ ├── index.js │ ├── index.user.ts │ └── lib │ │ └── metadata.ts ├── mastodon-plus │ ├── .gitignore │ ├── base │ │ └── mastodon-plus.ts │ ├── global │ │ └── profile.ts │ ├── index.js │ ├── index.user.ts │ └── lib │ │ └── metadata.ts ├── novel-plus-sc │ ├── index.js │ ├── index.user.ts │ ├── lib │ │ └── metadata.ts │ └── site │ │ ├── baidu │ │ └── tieba.ts │ │ ├── dmzj.ts │ │ ├── gamer │ │ └── home.ts │ │ ├── lightnovel │ │ └── discuz.ts │ │ ├── sfacg │ │ └── book.ts │ │ └── syosetu.ts ├── pan-baidu-block-or-expire │ ├── .gitignore │ ├── index.js │ ├── index.user.ts │ ├── lib │ │ └── metadata.ts │ └── site │ │ └── pan.baidu.ts ├── pan-baidu-download │ ├── .gitignore │ ├── index.js │ ├── index.user.ts │ ├── lib │ │ └── metadata.ts │ └── site │ │ └── pan.baidu.ts ├── shimo-im-discuz │ ├── .gitignore │ ├── base │ │ └── shimo-im-discuz.ts │ ├── index.js │ ├── index.user.ts │ └── lib │ │ └── metadata.ts ├── syosetu-list-number │ ├── index.js │ ├── index.user.ts │ ├── lib │ │ └── metadata.ts │ └── site │ │ ├── .gitignore │ │ ├── kakuyomu.jp.ts │ │ ├── mitemin.ts │ │ └── syosetu.ts ├── tieba-harmony │ ├── index.js │ ├── index.user.ts │ ├── lib │ │ └── metadata.ts │ └── tieba │ │ └── tieba.ts ├── ux-tweak-sc.adblock │ └── facebook.txt ├── ux-tweak-sc │ ├── .gitignore │ ├── _fake.js │ ├── acg │ │ ├── 2dfan.js │ │ ├── 3dmgame.js │ │ ├── baidu │ │ │ ├── safecheck.ts │ │ │ └── tieba.ts │ │ ├── blog.reimu.net.js │ │ ├── dlsite.js │ │ ├── dmm.js │ │ ├── gamer.com.tw.js │ │ ├── gamme.js │ │ ├── getchu.js │ │ ├── guildwars2 │ │ │ ├── forum.2017.js │ │ │ ├── forum.js │ │ │ └── wiki.js │ │ ├── gw2bltc.js │ │ ├── movie │ │ │ ├── u2mtv.ts │ │ │ └── yahoo.ts │ │ ├── qoo-app.js │ │ ├── qtfy.eu.js │ │ ├── reddit.js │ │ ├── taptap.ts │ │ └── vsgames.js │ ├── adult │ │ └── up01.js │ ├── anti-adblock │ │ └── epinv.js │ ├── art │ │ ├── danbooru.donmai.us.ts │ │ ├── deviantart.js │ │ ├── pixiv.ts │ │ └── pixivision.ts │ ├── bbs │ │ └── ptt.js │ ├── blog │ │ ├── blog.xuite.js │ │ ├── dulfy.js │ │ ├── jianshu.js │ │ ├── juejin.im.js │ │ ├── oneapm.js │ │ └── steachs.js │ ├── code │ │ ├── gitee.ts │ │ ├── github.ts │ │ ├── greasyfork.js │ │ ├── npmjs.js │ │ ├── segmentfault.ts │ │ ├── sourceforge.js │ │ └── stackoverflow.js │ ├── comic │ │ ├── 999comic.js │ │ ├── alphapolis.co.jp.js │ │ ├── backup │ │ │ └── lhscan.ts │ │ ├── book.dmm.co.jp.ts │ │ ├── comic-walker.js │ │ ├── comico.js │ │ ├── dm5.js │ │ ├── dmzj.js │ │ ├── exhentai.js │ │ ├── ikanman.js │ │ ├── lhscans.ts │ │ ├── manben.js │ │ ├── manhuadui.ts │ │ ├── manhuaren.ts │ │ ├── nhentai.js │ │ ├── rawdevart.ts │ │ ├── wnacg.js │ │ └── yoedge.ts │ ├── content │ │ └── farm │ │ │ └── fun01.cc.js │ ├── dict │ │ ├── .gitignore │ │ └── edu │ │ │ ├── cwn.ling.sinica.ts │ │ │ └── dict.revised.moe.ts │ ├── global │ │ ├── discuz.js │ │ ├── mediawiki.js │ │ ├── pagination.js │ │ ├── pagination │ │ │ ├── page.js │ │ │ ├── pagination.active.js │ │ │ └── srp_pagination.js │ │ ├── social.js │ │ └── video.js │ ├── google │ │ ├── drive.js │ │ └── search.js │ ├── index.js │ ├── index.user.js │ ├── lib │ │ ├── demo.js │ │ └── metadata.js │ ├── novel │ │ ├── .gitignore │ │ ├── esjzone.ts │ │ ├── iqing.ts │ │ ├── lightnovel.cn.ts │ │ ├── masiro.moe.ts │ │ ├── syosetu.ts │ │ └── wenku8.ts │ ├── other │ │ └── jetbrains │ │ │ └── jetbrains.ts │ ├── p2p │ │ └── wetransfer.ts │ ├── shop │ │ ├── pchome.js │ │ ├── pchome │ │ │ └── ecvip.ts │ │ ├── post │ │ │ ├── kerrytj.ts │ │ │ └── post │ │ │ │ └── gov │ │ │ │ └── tw │ │ │ │ └── pstmail.js │ │ └── yahoo │ │ │ ├── buy.js │ │ │ └── mall.js │ ├── social │ │ ├── facebook.js │ │ └── weibo.js │ ├── torrent │ │ ├── dmhy.js │ │ ├── jandown.js │ │ └── nyaa.js │ └── wiki │ │ ├── moegirl.ts │ │ └── wikipedia.js └── youtube-plus-sc │ ├── _fake.ts │ ├── global │ └── script.ts │ ├── index.js │ ├── index.user.ts │ ├── lib │ └── metadata.ts │ └── youtube │ ├── 2016 │ ├── my_video.ts │ ├── upload.ts │ └── watch.ts │ └── 2016.ts ├── test ├── _local-dev.ts └── match.test.d.ts ├── tsconfig.json └── webpack.config.js /README.md: -------------------------------------------------------------------------------- 1 | # gm-user-scripts 2 | 3 | > 各種網站 UX 優化 與 搭配某些插件/行為時的簡化動作 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](readme/userscript.md) 8 | 9 | ### 腳本 10 | 11 | * [ux-tweak-sc](readme/ux-tweak-sc.md) 12 | 13 | * [novel-plus-sc](readme/novel-plus-sc.md) 14 | 15 | * [fuck-u-fb-share](readme/fuck-u-fb-share.md) 16 | 17 | * [其他](dist/) 18 | 19 | -------------------------------------------------------------------------------- /lib/color/tag.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/14/014. 3 | */ 4 | 5 | export const tag = [ 6 | '#906', 7 | '#66F', 8 | '#800', 9 | '#C60', 10 | '#EAEA00', 11 | '#006', 12 | '#360', 13 | ]; 14 | 15 | export default exports; 16 | -------------------------------------------------------------------------------- /lib/comic/font.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/5/005. 3 | */ 4 | 5 | export const font = { 6 | 7 | NotoSansSC: { 8 | name: 'Noto Sans SC', 9 | webfont: '//fonts.googleapis.com/earlyaccess/notosanssc.css', 10 | }, 11 | 12 | NotoSansTC: { 13 | name: 'Noto Sans TC', 14 | webfont: '//fonts.googleapis.com/earlyaccess/notosanstc.css', 15 | }, 16 | 17 | NotoSansJP: { 18 | name: 'Noto Sans JP', 19 | webfont: '//fonts.googleapis.com/earlyaccess/notosansjp.css', 20 | }, 21 | 22 | cwtexyen: { 23 | name: 'cwtexyen', 24 | webfont: '//fonts.googleapis.com/earlyaccess/cwtexyen.css', 25 | }, 26 | 27 | }; 28 | 29 | export const webfont = { 30 | NotoSansCJKSC: ['Noto Sans CJK SC', font.NotoSansSC, font.NotoSansTC, font.NotoSansJP], 31 | NotoSansCJKTC: ['Noto Sans CJK TC', font.NotoSansTC, font.NotoSansSC, font.NotoSansJP], 32 | NotoSansCJKJP: ['Noto Sans CJK JP', font.NotoSansJP, font.NotoSansSC, font.NotoSansTC], 33 | }; 34 | 35 | export function getFontName(name): string 36 | { 37 | if (webfont[name]) 38 | { 39 | return webfont[name].reduce(function (a, b) 40 | { 41 | a.push(typeof b == 'string' ? b : b.name); 42 | 43 | return a; 44 | }, []).join(''); 45 | } 46 | 47 | return _(name); 48 | 49 | function _(name) 50 | { 51 | return font[name].name; 52 | } 53 | } 54 | 55 | export default font; 56 | -------------------------------------------------------------------------------- /lib/comic/novel.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/5/005. 3 | */ 4 | 5 | import font from './font'; 6 | 7 | let o = { 8 | 9 | body_light_on: { 10 | 'background-color': '#e6d7bd', 11 | color: '#131d24', 12 | }, 13 | 14 | body_light_off: { 15 | 'background-color': '#4f535b', 16 | color: '#rgb(221, 221, 221)', 17 | }, 18 | 19 | _setting: { 20 | line: 31, 21 | char: 23, 22 | lh: 1.25, 23 | 24 | fontSize: 14, 25 | fontFamily: `Consolas, ${font.NotoSansSC.name}, Microsoft Yahei UI, sans-serif`, 26 | 27 | lineHeight(fontSize = o._setting.fontSize, ln = o._setting.lh) 28 | { 29 | return Math.ceil(fontSize * ln); 30 | }, 31 | }, 32 | 33 | font_style: { 34 | fontSize: 14, 35 | fontFamily: `Consolas, ${font.NotoSansSC.name}, ${font.NotoSansTC.name}, Microsoft Yahei UI, sans-serif`, 36 | 'text-shadow': '0 0.5px 0 rgba(228, 228, 228, 0.8), 0 0 1px rgba(0, 0, 0, 0.75)', 37 | }, 38 | 39 | }; 40 | 41 | (o as any).default = o; 42 | 43 | export = o; 44 | -------------------------------------------------------------------------------- /lib/core/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/23/023. 3 | */ 4 | 5 | export interface IMetadata 6 | { 7 | name?: string; 8 | name_en?: string; 9 | 10 | desc?: string; 11 | desc_en?: string; 12 | 13 | icon?: string; 14 | 15 | grant?: string[]; 16 | 17 | metadata?: string; 18 | } 19 | 20 | export default exports; 21 | -------------------------------------------------------------------------------- /lib/core/plus.ts: -------------------------------------------------------------------------------- 1 | import { IExports, requireScript } from './index'; 2 | import * as UF from '../greasemonkey/gm/menu'; 3 | import { hasGrant } from '../greasemonkey/metadata'; 4 | 5 | export function registerGlobalMenu(uxid: string, exports: IExports, $jq?: JQueryStatic) 6 | { 7 | let index = requireScript(uxid, 'index'); 8 | 9 | if (hasGrant(index.metadata.grant, 'registerMenuCommand')) 10 | { 11 | UF.registerMenuCommand({ 12 | id: uxid, 13 | key: 'debug jquery', 14 | }, async (options) => 15 | { 16 | try 17 | { 18 | _print_jquery('null', null); 19 | _print_jquery('global', global); 20 | _print_jquery('window', window); 21 | _print_jquery('window.self', window.self); 22 | _print_jquery('unsafeWindow', unsafeWindow); 23 | } 24 | catch (e) 25 | { 26 | console.error(e); 27 | } 28 | 29 | try 30 | { 31 | // @ts-ignore 32 | if (typeof exportFunction != 'undefined') 33 | { 34 | // @ts-ignore 35 | console.info('exportFunction', exportFunction); 36 | } 37 | } 38 | catch (e) 39 | { 40 | console.error(e); 41 | } 42 | 43 | try 44 | { 45 | let _jQuery = await import('../jquery/global'); 46 | 47 | _print_jquery('jquery/global', _jQuery); 48 | } 49 | catch (e) 50 | { 51 | console.error(e); 52 | } 53 | }); 54 | } 55 | else 56 | { 57 | console.info(uxid, `registerMenuCommand = false`); 58 | } 59 | } 60 | 61 | function _print_jquery(label, where) 62 | { 63 | console[('groupCollapsed' in console) ? 'groupCollapsed' : 'group'](label); 64 | 65 | try 66 | { 67 | console.info(label, where); 68 | 69 | if (where === null) 70 | { 71 | console.info(`$`, $, $ && $.fn && $.fn.jquery); 72 | console.info(`jQuery`, jQuery, jQuery && jQuery.fn && jQuery.fn.jquery); 73 | } 74 | else 75 | { 76 | console.info(`${label}.$`, where.$, where.$ && where.$.fn && where.$.fn.jquery); 77 | console.info(`${label}.jQuery`, where.jQuery, where.jQuery && where.jQuery.fn && where.jQuery.fn.jquery); 78 | } 79 | } 80 | catch (e) 81 | { 82 | console.error(`${label}`, e.toString()); 83 | } 84 | 85 | // @ts-ignore 86 | console.groupEnd(label); 87 | } 88 | 89 | export default exports as typeof import('./plus'); 90 | -------------------------------------------------------------------------------- /lib/core/tpl/.gitignore: -------------------------------------------------------------------------------- 1 | demo.d.ts 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /lib/core/tpl/demo.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | //'http*://www.gamer.com.tw/*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | _uf_dom_filter_link([ 47 | // 48 | ]) 49 | .prop('target', '_blank') 50 | ; 51 | }, 52 | 53 | adblock(_url_obj = global._url_obj) 54 | { 55 | // 56 | }, 57 | 58 | clearly(_url_obj = global._url_obj, _dom_list = null) 59 | { 60 | let _dom = $(_dom_list); 61 | 62 | _dom = _dom 63 | .add([ 64 | // 65 | ].join()) 66 | ; 67 | 68 | return _dom; 69 | }, 70 | 71 | }; 72 | 73 | export = o as IDemo; 74 | -------------------------------------------------------------------------------- /lib/core/tpl/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | // @ts-ignore 9 | import * as index from './index'; 10 | 11 | module.exports.id = index.id; 12 | module.exports.name = index.name; 13 | 14 | module.exports.indexScript = index; 15 | 16 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 17 | { 18 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 19 | }); 20 | -------------------------------------------------------------------------------- /lib/core/tpl/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = ''; 6 | export const desc_en = desc; 7 | 8 | export const icon = ''; 9 | 10 | export const grant = [ 11 | // 12 | ]; 13 | 14 | /** 15 | * <%= token %> 16 | * 17 | * @type {string} 18 | */ 19 | export const metadata = `// ==UserScript== 20 | // @name <%= index.id %> 21 | // @name:en <%= index.name_en %> 22 | // @name:ja <%= index.name_ja %> 23 | // @name:zh <%= index.name %> 24 | // @namespace <%= index.namespace %> 25 | // @author <%= index.author %> 26 | // 27 | // @description <%= index.desc %> 28 | // @description:en <%= index.desc_en %> 29 | // @description:ja <%= index.desc_ja %> 30 | // @description:zh <%= index.desc %> 31 | // 32 | // @version <%= pkg.version %> 33 | // 34 | // @grant <%= index.grant %> 35 | // g_r_a_n_tnone 36 | // 37 | // @icon <%= index.icon %> 38 | // 39 | // noframes 40 | // @encoding utf-8 41 | // 42 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 43 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 44 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 45 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 46 | // 47 | // @include <%= index.include %> 48 | // 49 | // @match <%= index.match %> 50 | // 51 | // @exclude <%= index.exclude %> 52 | // 53 | // ==/UserScript== 54 | `; 55 | 56 | export default metadata; 57 | -------------------------------------------------------------------------------- /lib/dom/filter/link.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/13/013. 3 | */ 4 | 5 | module.exports = function _uf_dom_filter_link(_dom, _content, mode) 6 | { 7 | if (Array.isArray(_dom)) 8 | { 9 | let _dom_new = $(); 10 | 11 | $.each(_dom, function (index, value) 12 | { 13 | _dom_new = _dom_new.add(value) 14 | }); 15 | 16 | _dom = _dom_new; 17 | } 18 | 19 | if (_content) 20 | { 21 | _dom = $(_dom, _content); 22 | } 23 | else 24 | { 25 | _dom = $(_dom); 26 | } 27 | 28 | _dom = _dom.filter('a[href]').not('[href^="javascript:"], [href^="#"], [href=""]'); 29 | 30 | return _dom; 31 | }; 32 | -------------------------------------------------------------------------------- /lib/dom/iframe.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | export function transparent(iframe) 6 | { 7 | iframe = $(iframe); 8 | 9 | iframe 10 | .attr('frameBorder', 0) 11 | .attr('allowTransparency', true) 12 | .css({ 13 | backgroundColor: 'transparent', 14 | border: '0 none transparent', 15 | outline: '0 none transparent', 16 | }) 17 | ; 18 | 19 | return iframe; 20 | } 21 | 22 | export default transparent; 23 | -------------------------------------------------------------------------------- /lib/event/dom.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/14/014. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports.DOMNodeInserted = 'DOMNodeInserted'; 8 | module.exports.page = 'keydown.page'; 9 | -------------------------------------------------------------------------------- /lib/event/done.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/13/013. 3 | */ 4 | 5 | interface Iexports 6 | { 7 | _uf_done(event: JQueryEventObject|Event, mode?: boolean); 8 | _uf_done2(event: JQueryEventObject|Event, mode?: boolean); 9 | 10 | default(event: JQueryEventObject|Event, mode?: boolean); 11 | } 12 | 13 | function _uf_done(event: JQueryEventObject|Event, mode?: boolean) 14 | { 15 | event.stopPropagation(); 16 | if (!mode) event.preventDefault(); 17 | } 18 | 19 | function _uf_done2(event: JQueryEventObject|Event, mode?: boolean) 20 | { 21 | //event.stopPropagation(); 22 | event.stopImmediatePropagation(); 23 | 24 | if (!mode) event.preventDefault(); 25 | } 26 | 27 | Object.assign(_uf_done, { 28 | _uf_done, 29 | _uf_done2, 30 | default: _uf_done, 31 | }) as Iexports; 32 | 33 | export = _uf_done; 34 | -------------------------------------------------------------------------------- /lib/func/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | *.js 3 | *.d.ts 4 | -------------------------------------------------------------------------------- /lib/func/array/unique.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | export function array_unique(array: any[]) 6 | { 7 | return array.filter(function (el, index, arr) 8 | { 9 | return index == arr.indexOf(el); 10 | }); 11 | } 12 | 13 | export default array_unique; 14 | -------------------------------------------------------------------------------- /lib/func/copy.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2018/7/9/009. 3 | */ 4 | 5 | export function copyonclick(id: string) 6 | { 7 | return [ 8 | `event.preventDefault()`, 9 | `var copyArea = document.getElementById('${id}')`, 10 | `try{copyArea.select();}catch(e){console.error(e)}`, 11 | `try{window.getSelection().removeAllRanges();}catch(e){}`, 12 | `try{var range = document.createRange();range.selectNode(copyArea);window.getSelection().addRange(range)}catch(e){console.error(e)}`, 13 | `try{document.execCommand('Copy')}catch(e){console.error(e)}`, 14 | `return false` 15 | ].join(';') 16 | } 17 | 18 | export function copyElem(copyArea: HTMLElement) 19 | { 20 | try 21 | { 22 | window.getSelection().removeAllRanges(); 23 | } 24 | catch (e) 25 | {} 26 | try 27 | { 28 | // @ts-ignore 29 | copyArea.select(); 30 | } 31 | catch (e) 32 | { 33 | console.error(e) 34 | } 35 | try 36 | { 37 | let range = document.createRange(); 38 | range.selectNode(copyArea); 39 | window.getSelection().addRange(range) 40 | } 41 | catch (e) 42 | { 43 | console.error(e) 44 | } 45 | 46 | try 47 | { 48 | document.execCommand('Copy') 49 | } 50 | catch (e) 51 | { 52 | console.error(e) 53 | } 54 | } 55 | 56 | export default exports as typeof import('./copy'); 57 | -------------------------------------------------------------------------------- /lib/func/debounce.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/15/015. 3 | */ 4 | 5 | module.exports = Function.prototype.debounce = function (threshold) 6 | { 7 | let callback = this; 8 | let timeout; 9 | return function () 10 | { 11 | let context = this, params = arguments; 12 | clearTimeout(timeout); 13 | timeout = setTimeout(function () 14 | { 15 | callback.apply(context, params); 16 | }, threshold); 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /lib/func/html.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2018/5/29/029. 3 | */ 4 | 5 | import { minify, Options as IMinifyOptions } from 'html-minifier'; 6 | 7 | export function minifyHTML(html, options: IMinifyOptions = {}, logError: boolean | number = true): string 8 | { 9 | let err; 10 | 11 | options = Object.assign({ 12 | collapseWhitespace: true, 13 | preserveLineBreaks: true, 14 | conservativeCollapse: true, 15 | caseSensitive: true, 16 | }, options); 17 | 18 | try 19 | { 20 | let ret = minify(html, options); 21 | 22 | return ret; 23 | } 24 | catch (e) 25 | { 26 | err = e; 27 | 28 | if (logError) 29 | { 30 | if (logError < 0) 31 | { 32 | console.error('[minifyHTML]', err.toString()); 33 | } 34 | else 35 | { 36 | console.error('[minifyHTML]', err.toString().split(/[\r\n]/)[0]); 37 | } 38 | } 39 | } 40 | 41 | return html; 42 | } 43 | 44 | export default minifyHTML 45 | -------------------------------------------------------------------------------- /lib/func/open.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2018/10/12/012. 3 | */ 4 | 5 | export function open(url: string, target?: string, attr?: string, ...argv) 6 | { 7 | return window.open(url, target, attr, ...argv); 8 | } 9 | 10 | export function openInBackground(url: string, target?: string, attr?: string, ...argv) 11 | { 12 | let opener = window; 13 | let win = open(url, target, attr, ...argv); 14 | 15 | setTimeout(function () 16 | { 17 | try 18 | { 19 | opener.focus() 20 | } 21 | catch (e) 22 | {} 23 | }, 200); 24 | 25 | return win; 26 | } 27 | 28 | open.open = open; 29 | open.openInBackground = openInBackground; 30 | open.default = open; 31 | 32 | export default open 33 | -------------------------------------------------------------------------------- /lib/greasemonkey/gm/api.ts: -------------------------------------------------------------------------------- 1 | import api = require('greasemonkey/lib/api') 2 | export = api 3 | -------------------------------------------------------------------------------- /lib/greasemonkey/gm/menu.ts: -------------------------------------------------------------------------------- 1 | import menu = require('greasemonkey/lib/menu') 2 | export = menu 3 | -------------------------------------------------------------------------------- /lib/greasemonkey/gm/xhr.ts: -------------------------------------------------------------------------------- 1 | import xhr = require('greasemonkey/lib/xhr') 2 | export = xhr 3 | -------------------------------------------------------------------------------- /lib/greasemonkey/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/14/014. 3 | */ 4 | 5 | export function GM_addStyle(css: string, head?) 6 | { 7 | head = head || document.getElementsByTagName('head')[0]; 8 | 9 | if (!head) 10 | { 11 | return; 12 | } 13 | 14 | let style = document.createElement('style'); 15 | style.type = 'text/css'; 16 | 17 | try 18 | { 19 | style.innerHTML = css 20 | } 21 | catch (e) 22 | { 23 | style.innerText = css 24 | } 25 | head.appendChild(style); 26 | 27 | return style; 28 | } 29 | 30 | export default exports as typeof import('./index'); -------------------------------------------------------------------------------- /lib/greasemonkey/uf.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/14/014. 3 | */ 4 | 5 | import * as greasemonkey from './index'; 6 | 7 | //Object.assign(exports, greasemonkey); 8 | 9 | export interface IGreasemonkey 10 | { 11 | GM_addStyle(css: string | string[], head?); 12 | debug(any: any, ...argv); 13 | info(any: any, ...argv); 14 | log(any: any, ...argv); 15 | error(any: any, ...argv); 16 | 17 | addStylesheet(url, head?); 18 | 19 | default: IGreasemonkey; 20 | } 21 | 22 | export function GM_addStyle(css: string | string[], head?) 23 | { 24 | if (Array.isArray(css)) 25 | { 26 | css = css.join(''); 27 | } 28 | 29 | if (typeof head == 'string') 30 | { 31 | head = $(head); 32 | } 33 | 34 | if (typeof head == 'object' && head.length && typeof head[0] == 'object') 35 | { 36 | head = head[0]; 37 | } 38 | 39 | return greasemonkey.GM_addStyle(css.toString(), head); 40 | } 41 | 42 | export function addStylesheet(url, head?) 43 | { 44 | if (typeof url === 'object' && url.webfont) 45 | { 46 | url = url.webfont; 47 | } 48 | 49 | return $(``) 50 | .appendTo(head || $('header, body').eq(0)) 51 | ; 52 | } 53 | 54 | export function debug(any: any, ...argv) 55 | { 56 | // @ts-ignore 57 | return console.info(`%c[${global.userScript.id}][debug]`, 'color: #4B90C2;', any, ...argv); 58 | } 59 | 60 | export function error(any: any, ...argv) 61 | { 62 | // @ts-ignore 63 | return console.error(`%c[${global.userScript.id}][error]`, 'color: red;', any, ...argv); 64 | } 65 | 66 | export function info(any: any, ...argv) 67 | { 68 | // @ts-ignore 69 | return console.info(`%c[${global.userScript.id}][info]`, 'color: #ccc;', any, ...argv); 70 | } 71 | 72 | export function log(any: any, ...argv) 73 | { 74 | return console.log(any, ...argv); 75 | } 76 | 77 | export function openInTabBackground(url: string) 78 | { 79 | let win = window.open(url, '_blank'); 80 | 81 | setTimeout(function () 82 | { 83 | window.focus(); 84 | }, 300); 85 | 86 | return win; 87 | } 88 | 89 | export default exports as typeof import('./uf'); 90 | export * from './index'; 91 | -------------------------------------------------------------------------------- /lib/jquery/event.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/14/014. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports.makeJQueryPlugin = ($ = global.jQuery, window = global.window) => 8 | { 9 | 10 | $.fn.events = function () 11 | { 12 | return $._data(this.get(0), 'events'); 13 | }; 14 | 15 | $.fn.eventExists = function (type, namespace) 16 | { 17 | let events = $(this).events(); 18 | 19 | if (events && events[type] && events[type].length) 20 | { 21 | if (typeof namespace != 'undefined') 22 | { 23 | for (let ev of events[type]) 24 | { 25 | if (ev.namespace === namespace) 26 | { 27 | return true; 28 | } 29 | } 30 | } 31 | else 32 | { 33 | return true; 34 | } 35 | } 36 | 37 | return false; 38 | }; 39 | 40 | }; 41 | -------------------------------------------------------------------------------- /lib/jquery/event/capture.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/23/023. 3 | */ 4 | 5 | //export function onCapture(who, originalType: string, selector: string, listener: EventListener, ...argv) 6 | //export function onCapture(who, originalType: string, listener: EventListener, ...argv) 7 | export function onCapture(who, originalType: string, listener: T, ...argv) 8 | { 9 | let selector; 10 | 11 | if (typeof listener !== 'function') 12 | { 13 | selector = listener; 14 | listener = argv[argv.length - 1]; 15 | } 16 | 17 | let t = originalType.split('.'); 18 | 19 | const type = t.shift().toString(); 20 | const namespace = t.join('.').toString(); 21 | 22 | let o = $(who) 23 | .each(function () 24 | { 25 | this.addEventListener(type, function (originalEvent) 26 | { 27 | //console.debug(type, originalType, selector, listener, originalEvent); 28 | 29 | let event = $.Event(originalEvent); 30 | 31 | if (!selector || selector && $(event.target).is(selector)) 32 | { 33 | //console.debug('onCapture', event); 34 | 35 | listener.call(event.target, event); 36 | } 37 | 38 | }, true); 39 | }) 40 | ; 41 | 42 | return o; 43 | } 44 | 45 | export default onCapture; 46 | -------------------------------------------------------------------------------- /lib/jquery/event/hotkey.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/15/015. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports.packEvent = function (fn, context = global.window, filter = ':input') 8 | { 9 | return function (event, ...argv) 10 | { 11 | let _self = this; 12 | let d = $(document.activeElement); 13 | 14 | if (!d.is(filter)) 15 | { 16 | //console.log(':focus', true, d, event); 17 | 18 | let ret = $.proxy(fn, _self, event, ...argv)(); 19 | 20 | return ret; 21 | } 22 | else 23 | { 24 | //console.log(':focus', false, d, event); 25 | } 26 | }; 27 | }; 28 | -------------------------------------------------------------------------------- /lib/jquery/event/key.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/20/020. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports.makeJQueryPlugin = ($ = global.jQuery, window = global.window) => 8 | { 9 | 10 | $.fn.triggerKey = function (data, type = 'keydown') 11 | { 12 | if (typeof data != 'object') 13 | { 14 | data = Object.assign({}, { 15 | which: data, 16 | keyCode: data, 17 | }) 18 | } 19 | 20 | let e = $.Event(type); 21 | 22 | Object.assign(e, data); 23 | 24 | console.log('triggerKey', this, e); 25 | 26 | return this.trigger(e); 27 | }; 28 | 29 | }; 30 | -------------------------------------------------------------------------------- /lib/jquery/history.state.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/21/021. 3 | */ 4 | 5 | module.exports.makeJQueryPlugin = ($ = global.jQuery, window = global.window) => 6 | { 7 | const history = window.history; 8 | 9 | const history_event = [ 10 | 'pushState', 11 | 'replaceState', 12 | ]; 13 | 14 | /* 15 | history_event 16 | .forEach(function (event) 17 | { 18 | let fn = `on${event}`; 19 | 20 | console.log(`history.${fn}`, (fn in history)); 21 | console.log(`history.${event}`, (event in history)); 22 | 23 | console.log(`window.${fn.toLowerCase()}`, (fn.toLowerCase() in window)); 24 | console.log(`window.${event.toLowerCase()}`, (event.toLowerCase() in window)); 25 | }) 26 | ; 27 | */ 28 | 29 | history_event 30 | .forEach(function (event) 31 | { 32 | console.log(`history.${event}`, (event in history)); 33 | 34 | $(window) 35 | .on(event.toLowerCase(), function (event) 36 | { 37 | console.log(777, event); 38 | }) 39 | ; 40 | 41 | ((old) => 42 | { 43 | const type = event.toLowerCase(); 44 | 45 | history[event] = function (...argv) 46 | { 47 | let ret = old.call(this, ...argv); 48 | 49 | $(window).trigger({ 50 | original: { 51 | location: window.location, 52 | }, 53 | 54 | state: argv[0], 55 | title: argv[1], 56 | url: argv[2], 57 | 58 | type: type, 59 | }); 60 | 61 | return ret; 62 | }; 63 | 64 | //console.log(666, history[event]); 65 | 66 | let fn = `on${type}`; 67 | 68 | })(history[event]) 69 | }) 70 | ; 71 | 72 | }; 73 | -------------------------------------------------------------------------------- /lib/jquery/onscreen.js: -------------------------------------------------------------------------------- 1 | // onScreen jQuery plugin v0.2.1 2 | // (c) 2011-2013 Ben Pickles 3 | // 4 | // http://benpickles.github.io/onScreen 5 | // 6 | // Released under MIT license. 7 | ;(function($) { 8 | $.expr[":"].onScreen = function(elem) { 9 | var $window = $(window) 10 | var viewport_top = $window.scrollTop() 11 | var viewport_height = $window.innerHeight() 12 | var viewport_bottom = viewport_top + viewport_height 13 | var $elem = $(elem) 14 | var top = $elem.offset().top 15 | var height = $elem.height() 16 | var bottom = top + height 17 | 18 | return (top >= viewport_top && top < viewport_bottom) || 19 | (bottom > viewport_top && bottom <= viewport_bottom) || 20 | (height > viewport_height && top <= viewport_top && bottom >= viewport_bottom) 21 | } 22 | })(jQuery); 23 | -------------------------------------------------------------------------------- /lib/jquery/push.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports.makeJQueryPlugin = ($ = global.jQuery, window = global.window) => 8 | { 9 | 10 | $.fn.push = function (selector, context) 11 | { 12 | Array.prototype.push.apply(this, $.makeArray($(selector, context).not(this))); 13 | 14 | return this; 15 | }; 16 | 17 | }; 18 | -------------------------------------------------------------------------------- /lib/jquery/scrollTo.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/13/013. 3 | */ 4 | 5 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from '../core/demo'; 6 | 7 | // @ts-ignore 8 | export function makeJQueryPlugin($: IJQueryStatic = global.jQuery, window: IWindow = global.window) 9 | { 10 | (function (_old) 11 | { 12 | let _fn_top = function (who) 13 | { 14 | let _top; 15 | let _o; 16 | 17 | if ($.isNumeric(who)) 18 | { 19 | _top = who; 20 | } 21 | else if (Array.isArray(who) && who.length) 22 | { 23 | for (let elem of who) 24 | { 25 | let _o; 26 | 27 | if (elem && (_o = $(elem)) && _o.length) 28 | { 29 | _top = _o.offset().top; 30 | break; 31 | } 32 | } 33 | } 34 | else if ((_o = $(who)) && _o.length) 35 | { 36 | _top = _o.offset().top; 37 | } 38 | 39 | return _top; 40 | }; 41 | 42 | // if (!$.isfunction(_old)) 43 | if (typeof _old === 'undefined') 44 | { 45 | // @ts-ignore 46 | $.fn.scrollTo = function (who, offset, animate?, finish?: boolean) 47 | { 48 | let _top = _fn_top(who); 49 | 50 | if (offset) 51 | { 52 | _top = (_top ? _top : 0) + _fn_top(offset); 53 | } 54 | 55 | if (_top !== undefined) 56 | { 57 | if (finish) 58 | { 59 | this.finish(); 60 | } 61 | 62 | if (0 && animate) 63 | { 64 | return this.animate({ 65 | scrollTop: _top, 66 | }, animate); 67 | } 68 | 69 | return this.scrollTop(_top); 70 | } 71 | 72 | return this; 73 | }; 74 | } 75 | 76 | // if (!$.isfunction($.scrollTo)) 77 | if (typeof $.scrollTo === 'undefined') 78 | { 79 | // @ts-ignore 80 | $.scrollTo = function (who, offset, animate?, finish?: boolean) 81 | { 82 | // @ts-ignore 83 | return $(window).scrollTo(who, offset, animate, finish); 84 | }; 85 | } 86 | // @ts-ignore 87 | })($.fn.scrollTo); 88 | } 89 | 90 | export default makeJQueryPlugin 91 | -------------------------------------------------------------------------------- /lib/promise/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/21/021. 3 | */ 4 | 5 | import * as Promise from 'bluebird'; 6 | 7 | export { Promise }; 8 | 9 | export function PromiseInterval(cb, interval = 100) 10 | { 11 | const defer = Promise.defer(); 12 | 13 | defer.interval = interval; 14 | defer.stop = false; 15 | defer.timer = null; 16 | defer.count = 0; 17 | 18 | defer.fn = function (stop) 19 | { 20 | clearTimeout(defer.timer); 21 | 22 | if (!defer.promise.isPending()) 23 | { 24 | return; 25 | } 26 | 27 | defer.count++; 28 | 29 | stop = stop || defer.stop; 30 | 31 | let ret = cb(defer); 32 | 33 | if (typeof ret != 'undefined' && ret !== false) 34 | { 35 | defer.resolve(ret); 36 | } 37 | else if (ret === false) 38 | { 39 | defer.resolve(ret); 40 | } 41 | else if (stop) 42 | { 43 | defer.resolve(false); 44 | } 45 | else if (!stop) 46 | { 47 | defer.timer = setTimeout(function () 48 | { 49 | defer.fn(); 50 | }, defer.interval); 51 | } 52 | }; 53 | 54 | defer 55 | .promise 56 | .tap(function () 57 | { 58 | clearTimeout(defer.timer); 59 | }) 60 | .tapCatch(function (err) 61 | { 62 | clearTimeout(defer.timer); 63 | }) 64 | ; 65 | 66 | defer.fn(); 67 | 68 | return defer; 69 | } 70 | 71 | export default Promise; 72 | -------------------------------------------------------------------------------- /lib/promise/wait.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/14/014. 3 | */ 4 | 5 | module.exports.jquery = function waitUntil(cb, delay = 100) 6 | { 7 | let deferred = new $.Deferred(); 8 | let count = 0; 9 | 10 | let _wait = function () 11 | { 12 | count++; 13 | 14 | let ret = cb(deferred, count); 15 | 16 | if (deferred.isRejected() || deferred.isResolved()) 17 | { 18 | } 19 | else if (ret === false) 20 | { 21 | deferred.reject([ret, count]); 22 | } 23 | else if (count <= 20 || ret === true) 24 | { 25 | setTimeout(_wait, delay); 26 | } 27 | else 28 | { 29 | deferred.rejectWith(ret, [ret, count]); 30 | } 31 | }; 32 | 33 | setImmediate(_wait); 34 | 35 | return deferred.promise(); 36 | }; 37 | -------------------------------------------------------------------------------- /lib/site/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | *.js 3 | -------------------------------------------------------------------------------- /lib/site/discuz/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2018/12/25/025. 3 | */ 4 | 5 | export function hide_userinfo(context) 6 | { 7 | let _area = $('.pls.favatar', context); 8 | 9 | let _avatar = _area.find('> div:has(.avatar)') 10 | .not('.p_pop') 11 | .eq(0); 12 | 13 | if (_avatar.find('img[src*="noavatar"]').length) 14 | { 15 | _avatar.addClass('noavatar'); 16 | } 17 | 18 | _avatar.addClass('_avatar_area'); 19 | 20 | let _pls_sub = $('
'); 21 | 22 | console.log(_pls_sub, _avatar); 23 | 24 | _avatar.after(_pls_sub); 25 | 26 | _avatar 27 | .nextAll() 28 | .appendTo(_pls_sub) 29 | ; 30 | } 31 | 32 | export function f() 33 | { 34 | 35 | } 36 | -------------------------------------------------------------------------------- /lib/site/iqing/signin.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2018/2/20/020. 3 | */ 4 | 5 | import GM_XHR, { IXMLHttpRequestResponse, AjaxError } from 'root/lib/greasemonkey/gm/xhr'; 6 | import greasemonkey from 'root/lib/greasemonkey/uf'; 7 | 8 | export async function signin(force?: boolean): Promise 9 | { 10 | let options = { 11 | method: 'POST', 12 | headers: { 13 | 'Access-Control-Allow-Origin': '*', 14 | }, 15 | dataType: 'json', 16 | }; 17 | 18 | return GM_XHR 19 | .ajax('https://poi.iqing.com/account/check_in/', Object.assign({}, options, { 20 | 21 | data: { 22 | //action: 2, 23 | }, 24 | 25 | xhrFields: { 26 | withCredentials: true, 27 | }, 28 | 29 | })) 30 | .then(function (res: IXMLHttpRequestResponse) 31 | { 32 | //console.log(5, res, res.response); 33 | 34 | if (res && res.response && res.response.msg == 'success') 35 | { 36 | greasemonkey.log(`success`, res); 37 | 38 | return res; 39 | } 40 | 41 | // @ts-ignore 42 | return Promise.reject(AjaxError(res)); 43 | }) 44 | .then(function (res) 45 | { 46 | if (!res || (res !== true) && !res.response) 47 | { 48 | return Promise.reject(AjaxError(res)); 49 | } 50 | 51 | return res; 52 | }) 53 | .catch(err => greasemonkey.error(err)) 54 | ; 55 | } 56 | 57 | export default signin; 58 | -------------------------------------------------------------------------------- /lib/site/pixiv/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export function replacePixivUserUrl(href: string) 3 | { 4 | return href 5 | .replace('member.php', 'member_illust.php') 6 | //.replace(/(users\/\d+)\/?$/, '$1/illustrations') 7 | .replace(/(users\/\d+)\/?$/, '$1/artworks') 8 | ; 9 | } 10 | 11 | export function toPixivUserIllust(uid: string) 12 | { 13 | //return `https://www.pixiv.net/users/${uid}/illustrations`; 14 | return `https://www.pixiv.net/users/${uid}/artworks`; 15 | } 16 | -------------------------------------------------------------------------------- /lib/site/youtube/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/1/001. 3 | * 4 | * require('root/lib/greasemonkey/web/xhr').ajaxSetup(); 5 | * 6 | */ 7 | 8 | export const yt_url = 'https://www.youtube.com'; 9 | 10 | export function ajaxSetTitle(video_id, new_title, session_token) 11 | { 12 | return $ 13 | .ajax({ 14 | url: `${yt_url}/watch_inlineedit_ajax?action_save_video=1`, 15 | method: 'POST', 16 | data: { 17 | 'session_token': session_token, 18 | 'video_id': video_id, 19 | 'field_myvideo_title': new_title.toString().trim(), 20 | }, 21 | //dataType: 'json', 22 | } 23 | ) 24 | .promise() 25 | .then(function (data) 26 | { 27 | if (!data || data.errors && data.errors.length) 28 | { 29 | // @ts-ignore 30 | return Promise.reject(data); 31 | } 32 | 33 | return data; 34 | }) 35 | ; 36 | } 37 | 38 | /** 39 | * 2017 40 | * 41 | * @returns {boolean} 42 | */ 43 | export function isMaterial() 44 | { 45 | if ($('style[scope="ytd-app"], ytd-app').length) 46 | { 47 | return true; 48 | } 49 | } 50 | 51 | export function yt_token(): string 52 | { 53 | // @ts-ignore 54 | return (typeof unsafeWindow !== 'undefined' ? unsafeWindow : window).yt.config_.XSRF_TOKEN; 55 | } 56 | 57 | export default exports; 58 | -------------------------------------------------------------------------------- /readme/dmhy001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/dmhy001.jpg -------------------------------------------------------------------------------- /readme/dmhy002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/dmhy002.jpg -------------------------------------------------------------------------------- /readme/firefox57/2018-03-01-12-07-32-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/firefox57/2018-03-01-12-07-32-3.jpg -------------------------------------------------------------------------------- /readme/firefox57/greasemonkey.md: -------------------------------------------------------------------------------- 1 | # 在 Firefox 57 greasemonkey 安裝腳本的方法 2 | 3 | 1. 嘗試安裝 [Beta](https://addons.mozilla.org/zh-TW/firefox/addon/greasemonkey/versions/beta) 版 4 | 2. 手動編輯將腳本內容新增進去 ![2018-03-01-12-07-32-3](2018-03-01-12-07-32-3.jpg) 5 | 3. 傻瓜般的一直重覆點到出現安裝畫面為止 6 | 4. 到 [greasyfork](https://greasyfork.org/zh-TW/users/8873-bluelovers) 安裝 7 | 5. 到這裡 [issues](https://github.com/greasemonkey/greasemonkey/issues) 詢問... 8 | 6. ...放棄 greasemonkey 直到問題修正為止 9 | -------------------------------------------------------------------------------- /readme/fuck-u-fb-share.md: -------------------------------------------------------------------------------- 1 | # fuck-u-fb-share 2 | 3 | > 此腳本試圖解決智障 FB 新分享機制導致的困擾 並且恢復為舊版分享 (2017-11) 4 | 5 | 分享用網址 [http://lnk.pics/4D3CJ](http://lnk.pics/4D3CJ) (會得到比較友善一點的連結預覽) 6 | 7 | ## install 8 | 9 | 1. 請參閱 [安裝需求](userscript.md) 10 | 11 | ### 腳本 12 | 13 | #### fuck-u-fb-share 14 | 15 | 然後點擊此處安裝腳本 [fuck-u-fb-share.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/fuck-u-fb-share.user.js) 16 | 17 | ![fuck-u-fb-share](fuck-u-fb-share.png) 18 | 19 | ## issues 20 | 21 | 可以在此回報 BUG [issues](https://github.com/bluelovers/gm-user-scripts/issues) 22 | 23 | > 回報時請盡量附上貼文網址 以及 截圖
24 | > 不定期更新 請記得安裝新版 25 | 26 | ### FAQ 27 | 28 | 1. 很抱歉,這則貼文的**隱私設定**表示你無法分享它。 29 | 30 | > 這問題並非此腳本所造成而是目前 FB 本身自己的 BUG
31 | > 點擊貼文時間可以取得該篇貼文的網址
32 | > 透過另外開啟貼文之後 再進行分享 33 | 34 | > 如果為圖片貼文 則可以把圖片點大之後 在分享一次 35 | 36 | ![fb bug](images/2017-11-24-16-11-30-2.jpg) 37 | 38 | 2. 分享連結時無法同時分享原始貼文訊息 39 | 40 | > 目前暫時無法解決這個問題
41 | > 因為最重要的貼文文字ID 是被隱藏在物件 `TimeSlice` 內
42 | > 暫時不知道如何取出物件內的資料
43 | 44 | > 目前的解決方式是遇到貼文類型為連結並且有原始文字的貼文
45 | > 會使用新版分享方式
46 | 47 | 3. 部分使用者使用 Firefox 57 以上版本時可能會發生腳本無法安裝的狀況 48 | 49 | > 目前這應該是屬於 Greasemonkey 的 BUG 雖然官方聲稱是火狐的BUG
50 | > 但使用 Tampermonkey 的話反而就可以正常安裝腳本 51 | 52 | ## 其他腳本 53 | 54 | * [ux-tweak-sc.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/ux-tweak-sc.user.js) 55 | * [facebook-sc](https://userstyles.org/styles/113811/facebook-sc) 56 | * [stylish-adblock-for-mobile](http://pics.ee/hcbu) 57 | * [dmm-plus-sc.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/dmm-plus-sc.user.js) 58 | 59 | -------------------------------------------------------------------------------- /readme/fuck-u-fb-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/fuck-u-fb-share.png -------------------------------------------------------------------------------- /readme/gitee-plus.md: -------------------------------------------------------------------------------- 1 | # gitee-plus 2 | 3 | 於 Gitee 碼雲 增加一點小功能 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](userscript.md) 8 | 9 | ### 腳本 10 | 11 | #### novel-plus-sc 12 | 13 | 然後點擊此處安裝腳本 [gitee-plus.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/gitee-plus.user.js) 14 | 15 | ## screenshots 16 | 17 | ### 可依照資料夾顯示歷史紀錄 18 | 19 | ![001.png](images/gitee-plus/001.png) 20 | 21 | ### 使以下圖片中紅框部分的連結支援 AJAX 22 | 23 | ![002.png](images/gitee-plus/002.png) 24 | 25 | ![003.png](images/gitee-plus/003.png) 26 | 27 | ### 使代碼支援 PRE-WRAP 28 | 29 | ![2018-08-17-22-30-34-24.png](images/gitee-plus/2018-08-17-22-30-34-24.png) 30 | 31 | ## todo 32 | 33 | > 以下功能尚未完成 或 無法完成 34 | 35 | -------------------------------------------------------------------------------- /readme/images/2017-11-24-16-11-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/2017-11-24-16-11-30-2.jpg -------------------------------------------------------------------------------- /readme/images/2018-03-08-22-12-26-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/2018-03-08-22-12-26-2.jpg -------------------------------------------------------------------------------- /readme/images/2018-03-18-05-09-21-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/2018-03-18-05-09-21-1.jpg -------------------------------------------------------------------------------- /readme/images/2018-03-18-05-11-14-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/2018-03-18-05-11-14-2.jpg -------------------------------------------------------------------------------- /readme/images/ShareX_2019-03-17-03-17-28-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/ShareX_2019-03-17-03-17-28-.png -------------------------------------------------------------------------------- /readme/images/ShareX_2019-03-17-03-25-00-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/ShareX_2019-03-17-03-25-00-.png -------------------------------------------------------------------------------- /readme/images/gitee-plus/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/gitee-plus/001.png -------------------------------------------------------------------------------- /readme/images/gitee-plus/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/gitee-plus/002.png -------------------------------------------------------------------------------- /readme/images/gitee-plus/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/gitee-plus/003.png -------------------------------------------------------------------------------- /readme/images/gitee-plus/2018-08-17-22-30-34-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/gitee-plus/2018-08-17-22-30-34-24.png -------------------------------------------------------------------------------- /readme/images/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/image.png -------------------------------------------------------------------------------- /readme/images/image_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/image_1.png -------------------------------------------------------------------------------- /readme/images/image_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/image_2.png -------------------------------------------------------------------------------- /readme/images/image_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/image_3.png -------------------------------------------------------------------------------- /readme/images/image_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/image_4.png -------------------------------------------------------------------------------- /readme/images/image_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/image_5.png -------------------------------------------------------------------------------- /readme/images/novel-plus-sc/2017-12-06-16-31-05-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/novel-plus-sc/2017-12-06-16-31-05-1.png -------------------------------------------------------------------------------- /readme/images/novel-plus-sc/2017-12-06-17-24-01-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/novel-plus-sc/2017-12-06-17-24-01-4.png -------------------------------------------------------------------------------- /readme/images/novel-plus-sc/2017-12-07-08-24-33-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/novel-plus-sc/2017-12-07-08-24-33-5.jpg -------------------------------------------------------------------------------- /readme/images/novel-plus-sc/2017-12-07-15-04-47-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/novel-plus-sc/2017-12-07-15-04-47-6.png -------------------------------------------------------------------------------- /readme/images/syosetu-list-number/2018-07-14-17-58-13-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/syosetu-list-number/2018-07-14-17-58-13-4.png -------------------------------------------------------------------------------- /readme/images/syosetu-list-number/2018-07-15-18-35-07-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/syosetu-list-number/2018-07-15-18-35-07-3.png -------------------------------------------------------------------------------- /readme/images/syosetu-list-number/2018-08-13-00-38-39-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/images/syosetu-list-number/2018-08-13-00-38-39-17.png -------------------------------------------------------------------------------- /readme/masiro-moe.md: -------------------------------------------------------------------------------- 1 | # masiro-moe 2 | 3 | https://masiro.moe 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](https://github.com/bluelovers/gm-user-scripts/blob/master/readme/userscript.md) 8 | 9 | ### 腳本 10 | 11 | #### masiro-moe 12 | 13 | 然後點擊此處安裝腳本 [masiro-moe.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/masiro-moe.user.js) 14 | 15 | ## 功能 16 | 17 | > 清楚提示有新貼的版塊,且排序 18 | 19 | ![image](images/image.png) 20 | 21 | > 隱藏多餘資訊並且移除最低高度限制 22 | 23 | ![image_2](images/image_2.png) 24 | 25 | > 支援適應視窗寬度 26 | 27 | ![image_1](images/image_1.png) 28 | 29 | ![ShareX_2019-03-17-03-25-00-](images/ShareX_2019-03-17-03-25-00-.png) 30 | 31 | > 支援版塊過濾功能(無視簡繁日漢字) 32 | 33 | ![ShareX_2019-03-17-03-17-28-](images/ShareX_2019-03-17-03-17-28-.png) 34 | -------------------------------------------------------------------------------- /readme/pan-baidu-block-or-expire.md: -------------------------------------------------------------------------------- 1 | # pan-baidu-block-or-expire 2 | 3 | > pan-baidu-block-or-expire 輔助判斷百度盤是封鎖還是過期 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](https://github.com/bluelovers/gm-user-scripts/blob/master/readme/userscript.md) 8 | 9 | ### 腳本 10 | 11 | #### syosetu-list-number 12 | 13 | 然後點擊此處安裝腳本 14 | 15 | * [syosetu-list-number.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/pan-baidu-block-or-expire.user.js) 16 | * [greasyfork](https://greasyfork.org/zh-TW/scripts/39684-pan-baidu-block-or-expire) - 備用安裝連結 17 | 18 | ### 預覽圖 19 | 20 | #### 過期或者刪除時 21 | 22 | ![2018-03-18-05-09-21-1](images/2018-03-18-05-09-21-1.jpg) 23 | 24 | #### 被鎖 IP 25 | 26 | ![2018-03-18-05-11-14-2](images/2018-03-18-05-11-14-2.jpg) 27 | -------------------------------------------------------------------------------- /readme/shimo-im-discuz.md: -------------------------------------------------------------------------------- 1 | # shimo-im-discuz 2 | 3 | 暴力複製破壞石墨網頁讓他可以正常複製格式到 discuz 論壇 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](https://github.com/bluelovers/gm-user-scripts/blob/master/readme/userscript.md) 8 | 9 | ### 腳本 10 | 11 | #### novel-plus-sc 12 | 13 | 然後點擊此處安裝腳本 [shimo-im-discuz.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/shimo-im-discuz.user.js) 14 | 15 | ## screenshort 16 | 17 | ![image_3](images/image_3.png) 18 | 19 | ![image_4](images/image_4.png) 20 | 21 | 範例 22 | https://shimo.im/docs/1P8JW4pVHmAnc8kk 23 | 24 | ![image_5](images/image_5.png) 25 | -------------------------------------------------------------------------------- /readme/syosetu-list-number.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bluelovers/gm-user-scripts/e59ce35821fccc91917c4decd3a26c41f2b587f3/readme/syosetu-list-number.jpg -------------------------------------------------------------------------------- /readme/syosetu-list-number.md: -------------------------------------------------------------------------------- 1 | # syosetu-list-number 2 | 3 | > syosetu-list-number 讓小說家的章節顯示序列 (支援手機版) 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](https://github.com/bluelovers/gm-user-scripts/blob/master/readme/userscript.md) 8 | 9 | ### 腳本 10 | 11 | #### syosetu-list-number 12 | 13 | 然後點擊此處安裝腳本 14 | 15 | * [syosetu-list-number.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/syosetu-list-number.user.js) 16 | * [greasyfork](https://greasyfork.org/zh-TW/scripts/39307-syosetu-list-number) - 備用安裝連結 17 | 18 | ## 功能 19 | 20 | - 章節顯示序列 21 | - 可折疊章節 22 | - 複製章節內容時不會產生額外的多餘空白行 23 | - 自動登入 r18 (因為有些人被長城牆了某些腳本 導致無法點擊按鈕) 24 | - 其他介面微調 25 | - 浮動索引 TOC 26 | - 27 | 28 | ### 預覽圖 29 | 30 | #### PC 31 | 32 | > 序列 33 | 34 | ![syosetu-list-number](syosetu-list-number.jpg) 35 | 36 | > 章節折疊 37 | 38 | ![2018-07-14-17-58-13-4.png](images/syosetu-list-number/2018-07-14-17-58-13-4.png) 39 | 40 | > 浮動章節導覽 41 | 42 | ![2018-07-15-18-35-07-3.png](images/syosetu-list-number/2018-07-15-18-35-07-3.png) 43 | 44 | > 複製文章 45 | 46 | ![2018-08-13-00-38-39-17.png](images/syosetu-list-number/2018-08-13-00-38-39-17.png) 47 | 48 | #### Mobile 49 | 50 | ![2018-03-08-22-12-26-2](images/2018-03-08-22-12-26-2.jpg) 51 | 52 | ## test link 53 | 54 | - https://ncode.syosetu.com/n8961ch/ 55 | - 56 | -------------------------------------------------------------------------------- /readme/tieba-harmony.md: -------------------------------------------------------------------------------- 1 | # tieba-harmony 2 | 3 | > 貼吧發文時自動和諧 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](https://github.com/bluelovers/gm-user-scripts/blob/master/readme/userscript.md) 8 | 9 | ### 腳本 10 | 11 | #### tieba-harmony 12 | 13 | 然後點擊此處安裝腳本 14 | 15 | * [tieba-harmony.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/tieba-harmony.user.js) 16 | * [greasyfork](https://greasyfork.org/zh-TW/scripts/38314-tieba-harmony) - 備用安裝連結 17 | -------------------------------------------------------------------------------- /readme/userscript.md: -------------------------------------------------------------------------------- 1 | # 腳本管理器 2 | 3 | ## install 4 | 5 | ### 腳本管理器 6 | 7 | 請先安裝此瀏覽器附加元件 8 | 9 | #### PC 10 | 11 | - Chrome: [Tampermonkey](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo) 12 | - Firefox: [Greasemonkey](https://addons.mozilla.org/firefox/addon/greasemonkey/) / [Tampermonkey](https://addons.mozilla.org/zh-TW/firefox/addon/tampermonkey/) 13 | 14 | #### mobile / 手機 15 | 16 | - [Firefox mobile](https://play.google.com/store/search?q=firefox&c=apps): [usi (User|Unified Script Injector)](https://addons.mozilla.org/firefox/addon/userunified-script-injector/) 17 | 18 | #### Firefox 57 19 | 20 | * 注意 於 Firefox 57 以上 推薦安裝 [Tampermonkey](https://addons.mozilla.org/zh-TW/firefox/addon/tampermonkey/) 可是請注意以下事項 21 | 22 | > 目前 Firefox 57 以上的 Tampermonkey 可能會有部分網頁使用 $ 的會出錯(因人而異) 23 | 24 | > 但如果是安裝 Greasemonkey 就不會出錯 可正常運行 25 | > 可是 Greasemonkey 在 Firefox 57 以上 有 95% 以上機率 無法安裝腳本(必須要自己想辦法成功安裝腳本) 相關方法請參考 [這裡](firefox57/greasemonkey.md) 26 | -------------------------------------------------------------------------------- /readme/ux-tweak-sc.md: -------------------------------------------------------------------------------- 1 | # ux-tweak-sc 2 | 3 | > 各種網站 UX 優化 與 搭配某些插件/行為時的簡化動作 4 | 5 | ## install 6 | 7 | 1. 請參閱 [安裝需求](userscript.md) 8 | 9 | ### 腳本 10 | 11 | #### ux-tweak-sc 12 | 13 | 安裝連結 [ux-tweak-sc.user.js](https://github.com/bluelovers/gm-user-scripts/raw/master/dist/ux-tweak-sc.user.js) 14 | 15 | ![https://share.dmhy.org](dmhy001.jpg) 16 | 17 | ![https://share.dmhy.org](dmhy002.jpg) 18 | 19 | old version: https://gist.github.com/bluelovers/5186199 20 | -------------------------------------------------------------------------------- /script/create.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2018/7/12/012. 3 | */ 4 | 5 | import yargs from 'yargs2'; 6 | import { console } from 'debug-color2'; 7 | import * as path from 'path'; 8 | import * as fs from 'fs-extra'; 9 | 10 | let name = yargs.argv.name || yargs.argv._[0]; 11 | 12 | //console.debug(yargs.argv); 13 | 14 | if (name) 15 | { 16 | name = name 17 | .toString() 18 | .trim() 19 | .replace(/[^a-z\d\-\._]/ig, '') 20 | ; 21 | } 22 | 23 | if (!name) 24 | { 25 | exit(`name is ${typeof name}`); 26 | } 27 | 28 | let root = path.resolve(__dirname, '..'); 29 | let root_src = path.resolve(root, 'src'); 30 | 31 | let target_dir = path.resolve(root_src, name); 32 | 33 | //console.debug({ 34 | // root, 35 | // root_src, 36 | // target_dir, 37 | //}); 38 | 39 | if (fs.existsSync(target_dir)) 40 | { 41 | exit(`${name} already exists`); 42 | } 43 | 44 | fs.ensureDirSync(target_dir); 45 | fs.ensureDirSync(path.join(target_dir, 'base')); 46 | fs.ensureDirSync(path.join(target_dir, 'lib')); 47 | 48 | fs.copyFileSync(path.join(root, 'lib/core/tpl/index.user.ts'), path.join(target_dir, `index.user.ts`)); 49 | 50 | fs.copyFileSync(path.join(root, 'lib/core/tpl/.gitignore'), path.join(target_dir, `.gitignore`)); 51 | 52 | fs.copyFileSync(path.join(root, 'lib/core/tpl/demo.ts'), path.join(target_dir, `base/${name}.ts`)); 53 | 54 | fs.copyFileSync(path.join(root, 'lib/core/tpl/metadata.ts'), path.join(target_dir, `lib/metadata.ts`)); 55 | 56 | console.success(`${name} created`); 57 | 58 | function exit(msg, code = 1) 59 | { 60 | console.error(msg); 61 | process.exit(1); 62 | } 63 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/_fake.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | import { IDemo } from 'root/lib/core/demo'; 6 | 7 | 'use strict'; 8 | 9 | let o: IDemo = { 10 | 11 | priority: -1, 12 | 13 | metadata: { 14 | include: [ 15 | 'http*://*.dmm.co*/*', 16 | 'http*://*games.dmm.co*/*', 17 | ], 18 | exclude: [ 19 | 'http*://www.dmm.co*/digital*', 20 | ], 21 | }, 22 | 23 | // @ts-ignore 24 | test(_url_obj = global._url_obj) 25 | { 26 | return false; 27 | }, 28 | 29 | // @ts-ignore 30 | main(_url_obj = global._url_obj) 31 | { 32 | }, 33 | 34 | // @ts-ignore 35 | adblock(_url_obj = global._url_obj) 36 | { 37 | }, 38 | 39 | // @ts-ignore 40 | clearly(_url_obj = global._url_obj, _dom_list = null) 41 | { 42 | let _dom = $(_dom_list); 43 | 44 | return _dom; 45 | }, 46 | }; 47 | 48 | export = o; 49 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/games/canvas.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | import { IDemo } from 'root/lib/core/demo'; 6 | 7 | 'use strict'; 8 | 9 | let o: IDemo = { 10 | 11 | //script: true, 12 | 13 | priority: 400, 14 | 15 | metadata: { 16 | include: [ 17 | 'http*://web.killdoya.jp/*', 18 | 'http*://dmm-*.iolite.link/*', 19 | 'http*://*/product/dmm_pc.php/*', 20 | 'http*://assets.millennium-war.net/*/*', 21 | ], 22 | exclude: [], 23 | }, 24 | 25 | test(_url_obj = global._url_obj) 26 | { 27 | let ret; 28 | 29 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 30 | { 31 | return 2; 32 | } 33 | 34 | return false; 35 | }, 36 | 37 | main(_url_obj = global._url_obj) 38 | { 39 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 40 | _uf_dom_filter_link([ 41 | // 42 | ].join()) 43 | .prop('target', '_blank') 44 | ; 45 | 46 | const greasemonkey = require('root/lib/greasemonkey/uf'); 47 | 48 | greasemonkey 49 | .GM_addStyle([ 50 | `iframe, body, html { background-color: transparent !important; border: 0 none transparent; }`, 51 | ], 'body') 52 | ; 53 | 54 | let gameCanvas = $('#gameCanvas, .emscripten').filter('canvas'); 55 | 56 | let game_width = (gameCanvas.length) ? gameCanvas.width() : 960; 57 | 58 | let $win = $(window); 59 | 60 | $win 61 | .on('load.ready', function () 62 | { 63 | module.exports.adblock(_url_obj); 64 | 65 | require('root/lib/dom/iframe').transparent('iframe, body, html'); 66 | }) 67 | .on('abort', function() 68 | { 69 | $win.triggerHandler('load.ready'); 70 | }) 71 | .triggerHandler('load.ready') 72 | ; 73 | }, 74 | 75 | adblock(_url_obj = global._url_obj) 76 | { 77 | 78 | }, 79 | 80 | clearly(_url_obj = global._url_obj, _dom_list = null) 81 | { 82 | let _dom = $(_dom_list); 83 | 84 | _dom = _dom 85 | .add([ 86 | // 87 | ].join()) 88 | ; 89 | 90 | //_dom.remove(); 91 | 92 | return _dom; 93 | }, 94 | 95 | }; 96 | 97 | export = o; 98 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/games/gadgets.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | import { IDemo } from 'root/lib/core/demo'; 6 | 7 | 'use strict'; 8 | 9 | let o: IDemo = { 10 | 11 | //script: true, 12 | 13 | metadata: { 14 | include: [ 15 | 'http*://osapi.dmm.com/gadgets/*', 16 | ], 17 | exclude: [], 18 | }, 19 | 20 | test(_url_obj = global._url_obj) 21 | { 22 | let ret; 23 | 24 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 25 | { 26 | return 2; 27 | } 28 | 29 | return false; 30 | }, 31 | 32 | main(_url_obj = global._url_obj) 33 | { 34 | const greasemonkey = require('root/lib/greasemonkey/uf'); 35 | 36 | greasemonkey 37 | .GM_addStyle([ 38 | `iframe, body, html { background-color: transparent !important; border: 0 none transparent; }`, 39 | `#main_game, #main_contents { margin-left: 0px; text-align: left; }`, 40 | ], 'body') 41 | ; 42 | 43 | window.addEventListener("message", receiveMessage, false); 44 | 45 | function receiveMessage(event) 46 | { 47 | event.source.postMessage(window.location.href.toString(), event.origin); 48 | } 49 | 50 | let $win = $(window); 51 | 52 | $win 53 | .on('load.ready', function () 54 | { 55 | module.exports.adblock(_url_obj); 56 | 57 | require('root/lib/dom/iframe').transparent('iframe, body, html'); 58 | 59 | $('#main_game, #main_contents').css({ 60 | 'margin-left': 0, 61 | 'text-align': 'left', 62 | }); 63 | }) 64 | .on('abort', function () 65 | { 66 | $win.triggerHandler('load.ready'); 67 | }) 68 | .triggerHandler('load.ready') 69 | ; 70 | 71 | setTimeout(function () 72 | { 73 | $win.triggerHandler('load.ready'); 74 | }, 3000); 75 | }, 76 | 77 | adblock(_url_obj = global._url_obj) 78 | { 79 | 80 | }, 81 | 82 | clearly(_url_obj = global._url_obj, _dom_list = null) 83 | { 84 | let _dom = $(_dom_list); 85 | 86 | _dom = _dom 87 | .add([ 88 | // 89 | ].join()) 90 | ; 91 | 92 | //_dom.remove(); 93 | 94 | return _dom; 95 | }, 96 | 97 | }; 98 | 99 | export = o; 100 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/global/iframe.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/22/022. 3 | */ 4 | 5 | import { IDemo } from 'root/lib/core/demo'; 6 | 7 | 'use strict'; 8 | 9 | let o: IDemo = { 10 | 11 | priority: 100, 12 | 13 | metadata: { 14 | include: [ 15 | 'http*://*', 16 | 'http*://pc-x.phantom-greed.com/top*', 17 | 'http*://pc-x.phantom-greed.com/start*', 18 | ], 19 | nomatch: [ 20 | 'http*://*.dmm.co*/*', 21 | ], 22 | exclude: [ 23 | 'http*://pc-x.phantom-greed.com/*frame*', 24 | 25 | 'http*://spdmg-backend2.i-mobile.co.jp/*', 26 | 'http*://tg.socdm.com/*', 27 | 'http://*.microad.jp/*', 28 | 29 | '*.youtube.*', 30 | '*.google.*', 31 | '*facebook.*', 32 | '*twitter.*', 33 | 34 | '*wiki.*/*', 35 | 36 | '*.tw/*', 37 | '*.cn/*', 38 | '*.org/*', 39 | '*.tv/*', 40 | '*.eu/*', 41 | 42 | ], 43 | }, 44 | 45 | test(_url_obj = global._url_obj) 46 | { 47 | let ret; 48 | 49 | if (window.self != window.top 50 | && window.top != window.parent 51 | && !require('root/lib/greasemonkey/match').match(_url_obj.source, [].concat(module.exports.metadata.nomatch, module.exports.metadata.exclude)) 52 | ) 53 | { 54 | return true; 55 | } 56 | 57 | return false; 58 | }, 59 | 60 | main(_url_obj = global._url_obj) 61 | { 62 | //console.info('window.parent', window.parent); 63 | 64 | //window.parent.location.href.match(/osapi\.dmm\.com\/gadgets/) 65 | 66 | let targetOrigin = 'http://osapi.dmm.com'; 67 | let sendMessage = window.location.href.toString(); 68 | 69 | postMessage(window.parent); 70 | 71 | if (window.parent.parent && window.parent.parent != window.top) 72 | { 73 | postMessage(window.parent.parent); 74 | } 75 | 76 | window.addEventListener('message', receiveMessage, false); 77 | 78 | function receiveMessage(event) 79 | { 80 | if (event.origin.match(/osapi\.dmm\.com/)) 81 | { 82 | _main(); 83 | } 84 | } 85 | 86 | function postMessage(target: Window) 87 | { 88 | target.postMessage(sendMessage, targetOrigin); 89 | } 90 | 91 | }, 92 | 93 | }; 94 | 95 | function _main() 96 | { 97 | require('root/lib/dom/iframe').transparent('iframe, body, html'); 98 | } 99 | 100 | export = o; 101 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/global/script.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/18/018. 3 | */ 4 | 5 | import { IDemo } from 'root/lib/core/demo'; 6 | 7 | 'use strict'; 8 | 9 | let o: IDemo = { 10 | 11 | priority: 100, 12 | 13 | script: true, 14 | 15 | metadata: { 16 | include: [ 17 | //'http*://*.dmm.co*/*', 18 | ], 19 | exclude: [], 20 | }, 21 | 22 | test(_url_obj = global._url_obj) 23 | { 24 | if ($('#content:has(.capt01) .sect01 .first a[href*="age_check"]').length) 25 | { 26 | return 2; 27 | } 28 | 29 | return false; 30 | }, 31 | 32 | main(_url_obj = global._url_obj) 33 | { 34 | let _a = $('#content:has(.capt01) .sect01 .first a[href*="age_check"]'); 35 | 36 | if (_a.length) 37 | { 38 | _a[0].click(); 39 | } 40 | }, 41 | 42 | }; 43 | 44 | export = o; 45 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/global/webgl_dmm.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/18/018. 3 | */ 4 | 5 | import { IDemo } from 'root/lib/core/demo'; 6 | 7 | 'use strict'; 8 | 9 | let o: IDemo = { 10 | 11 | priority: 100, 12 | 13 | script: true, 14 | 15 | metadata: { 16 | include: [ 17 | '*/webgl_dmm/*', 18 | ], 19 | exclude: [], 20 | }, 21 | 22 | test(_url_obj = global._url_obj) 23 | { 24 | if (require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports) && $('#main_contents #game-outer').length) 25 | { 26 | return 2; 27 | } 28 | 29 | return false; 30 | }, 31 | 32 | main(_url_obj = global._url_obj) 33 | { 34 | let game_frame = $('#main_contents #game-outer'); 35 | let game_width = (game_frame.length) ? game_frame.width() : 1200; 36 | 37 | const greasemonkey = require('root/lib/greasemonkey/uf'); 38 | 39 | greasemonkey 40 | .GM_addStyle([ 41 | `@media only screen and (max-width: ${game_width + 200}px) { 42 | #main_contents > div[style] { margin-left: 0; } 43 | }`, 44 | `#main_contents > div[style] { margin-left: 0; }` 45 | ], 'body') 46 | ; 47 | 48 | }, 49 | 50 | }; 51 | 52 | export = o; 53 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | 9 | module.exports.id = 'dmm-plus-sc'; 10 | module.exports.name = module.exports.id; 11 | 12 | module.exports.desc = 'dmm games layout tweak'; 13 | 14 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 15 | { 16 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 17 | require('root/lib/jquery/scrollTo').makeJQueryPlugin($jq); 18 | }); 19 | -------------------------------------------------------------------------------- /src/dmm-plus-sc/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = 'DMM Games 介面調整以及更適合遊戲直播'; 6 | export const desc_en = 'dmm games layout tweak'; 7 | 8 | export const grant = [ 9 | //'GM_registerMenuCommand', 10 | //'GM_xmlhttpRequest', 11 | 'unsafeWindow', 12 | ]; 13 | 14 | export const metadata = `// ==UserScript== 15 | // @name <%= index.name %> 16 | // @name:en <%= index.name_en %> 17 | // @name:zh <%= index.name %> 18 | // @namespace bluelovers 19 | // @author bluelovers 20 | // 21 | // @description <%= index.desc %> 22 | // @description:en <%= index.desc_en %> 23 | // @description:zh <%= index.desc %> 24 | // 25 | // @version <%= pkg.version %> 26 | // 27 | // @grant <%= index.grant %> 28 | // g_r_a_n_tnone 29 | // 30 | // @icon <%= index.icon %> 31 | // 32 | // noframes 33 | // @encoding utf-8 34 | // 35 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 36 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 37 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 38 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 39 | // 40 | // @include <%= index.include %> 41 | // 42 | // @exclude <%= index.exclude %> 43 | // 44 | // ==/UserScript== 45 | `; 46 | 47 | export default metadata; 48 | -------------------------------------------------------------------------------- /src/esunbank/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'esunbank'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'esunbank'; 6 | module.exports.name_en = 'esunbank'; 7 | module.exports.name_ja = 'esunbank'; 8 | 9 | module.exports.desc = '玉山銀行'; 10 | module.exports.desc_en = '玉山銀行'; 11 | module.exports.desc_ja = '玉山銀行'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "esunbank/ebank" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/esunbank/esunbank/ebank'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://ebank.esunbank.com.tw/fcm/*", 33 | "http*://ebank.esunbank.com.tw/fco/*" 34 | ]; 35 | module.exports.metadata.match = []; 36 | module.exports.metadata.exclude = []; 37 | module.exports.metadata.grant = [ 38 | "unsafeWindow" 39 | ]; 40 | 41 | module.exports.list_script = []; 42 | 43 | module.exports.current = []; 44 | 45 | module.exports.default = module.exports; 46 | 47 | -------------------------------------------------------------------------------- /src/esunbank/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | import * as userScriptCore from 'root/lib/core'; 6 | import index from './index'; 7 | 8 | export { index }; 9 | 10 | export const id = 'esunbank'; 11 | export const name = id; 12 | 13 | userScriptCore.run(id, module.exports, null, function (uxid, exports, global, window, $jq, _url) 14 | { 15 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 16 | }); 17 | -------------------------------------------------------------------------------- /src/esunbank/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '玉山銀行'; 6 | 7 | export const grant = [ 8 | //'GM_registerMenuCommand', 9 | //'GM_xmlhttpRequest', 10 | 'unsafeWindow', 11 | ]; 12 | 13 | export const metadata = `// ==UserScript== 14 | // @name <%= index.name %> 15 | // @name:en <%= index.name_en %> 16 | // @name:zh <%= index.name %> 17 | // @namespace bluelovers 18 | // @author bluelovers 19 | // 20 | // @description <%= index.desc %> 21 | // @description:en <%= index.desc_en %> 22 | // @description:zh <%= index.desc %> 23 | // 24 | // @version <%= pkg.version %> 25 | // 26 | // @grant <%= index.grant %> 27 | // g_r_a_n_tnone 28 | // 29 | // @icon <%= index.icon %> 30 | // 31 | // noframes 32 | // @encoding utf-8 33 | // 34 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 35 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 36 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 37 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 38 | // 39 | // @include <%= index.include %> 40 | // 41 | // @exclude <%= index.exclude %> 42 | // 43 | // ==/UserScript== 44 | `; 45 | 46 | export default metadata; 47 | -------------------------------------------------------------------------------- /src/fuck-u-fb-share/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'fuck-u-fb-share'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'fuck-u-fb-share'; 6 | module.exports.name_en = 'fuck-u-fb-share'; 7 | module.exports.name_ja = 'fuck-u-fb-share'; 8 | 9 | module.exports.desc = '此腳本試圖解決智障 FB 新分享機制導致的困擾 並且恢復為舊版分享 (2017-11)'; 10 | module.exports.desc_en = 'this script try kill facebook new share (2017-11)'; 11 | module.exports.desc_ja = '此腳本試圖解決智障 FB 新分享機制導致的困擾 並且恢復為舊版分享 (2017-11)'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "facebook/2017.11" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/fuck-u-fb-share/facebook/2017.11'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://www.facebook.com/*", 33 | "http*://facebook.com/*" 34 | ]; 35 | module.exports.metadata.match = []; 36 | module.exports.metadata.exclude = []; 37 | module.exports.metadata.grant = [ 38 | "unsafeWindow" 39 | ]; 40 | 41 | module.exports.list_script = []; 42 | 43 | module.exports.current = []; 44 | 45 | module.exports.default = module.exports; 46 | 47 | -------------------------------------------------------------------------------- /src/fuck-u-fb-share/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | import index from './index'; 9 | 10 | module.exports.id = 'fuck-u-fb-share'; 11 | module.exports.name = module.exports.id; 12 | 13 | userScriptCore.run(module.exports.id, module.exports, jQuery); 14 | -------------------------------------------------------------------------------- /src/fuck-u-fb-share/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '此腳本試圖解決智障 FB 新分享機制導致的困擾 並且恢復為舊版分享 (2017-11)'; 6 | export const desc_en = 'this script try kill facebook new share (2017-11)'; 7 | 8 | export const grant = [ 9 | 'unsafeWindow', 10 | ]; 11 | 12 | export const metadata = `// ==UserScript== 13 | // @name <%= index.name %> 14 | // @name:en <%= index.name_en %> 15 | // @name:zh <%= index.name %> 16 | // @namespace bluelovers 17 | // @author bluelovers 18 | // 19 | // @description <%= index.desc %> 20 | // @description:en <%= index.desc_en %> 21 | // @description:zh <%= index.desc %> 22 | // 23 | // @version <%= pkg.version %> 24 | // 25 | // @grant <%= index.grant %> 26 | // g_r_a_n_tnone 27 | // 28 | // @icon <%= index.icon %> 29 | // 30 | // @noframes 31 | // @encoding utf-8 32 | // 33 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 34 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 35 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 36 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 37 | // 38 | // @include <%= index.include %> 39 | // 40 | // @exclude <%= index.exclude %> 41 | // 42 | // ==/UserScript== 43 | `; 44 | 45 | export default metadata; 46 | -------------------------------------------------------------------------------- /src/gamer-auto-signin/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/gamer-auto-signin/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'gamer-auto-signin'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'gamer-auto-signin'; 6 | module.exports.name_en = 'gamer-auto-signin'; 7 | module.exports.name_ja = 'gamer-auto-signin'; 8 | 9 | module.exports.desc = '自動簽到 ( 巴哈姆特 ... and other )'; 10 | module.exports.desc_en = '自動簽到 ( 巴哈姆特 ... and other )'; 11 | module.exports.desc_ja = '自動簽到 ( 巴哈姆特 ... and other )'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "gamer/ajax", 20 | "novel/sfacg" 21 | ]; 22 | 23 | module.exports.list_disable = []; 24 | 25 | // for webpack, don't use this method 26 | module.exports._lib = () => 27 | { 28 | require('root/src/gamer-auto-signin/gamer/ajax'); 29 | require('root/src/gamer-auto-signin/novel/sfacg'); 30 | }; 31 | 32 | module.exports.metadata = {}; 33 | module.exports.metadata.include = [ 34 | "*://*.sfacg.com/*", 35 | "*://book.sfacg.com/signin/*" 36 | ]; 37 | module.exports.metadata.match = [ 38 | "*://www.gamer.com.tw/*", 39 | "*://forum.gamer.com.tw/*", 40 | "*://home.gamer.com.tw/creationDetail.php*", 41 | "*://gnn.gamer.com.tw/*", 42 | "*://ani.gamer.com.tw/*", 43 | "*://acg.gamer.com.tw/*" 44 | ]; 45 | module.exports.metadata.exclude = [ 46 | "*://*.sfacg.com/ajax*" 47 | ]; 48 | module.exports.metadata.grant = [ 49 | "GM.deleteValue", 50 | "GM.getValue", 51 | "GM.listValues", 52 | "GM.registerMenuCommand", 53 | "GM.setValue", 54 | "GM.unregisterMenuCommand", 55 | "GM.xmlhttpRequest", 56 | "GM_deleteValue", 57 | "GM_getValue", 58 | "GM_listValues", 59 | "GM_registerMenuCommand", 60 | "GM_setValue", 61 | "GM_unregisterMenuCommand", 62 | "GM_xmlhttpRequest" 63 | ]; 64 | 65 | module.exports.list_script = []; 66 | 67 | module.exports.current = []; 68 | 69 | module.exports.default = module.exports; 70 | 71 | -------------------------------------------------------------------------------- /src/gamer-auto-signin/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | import * as userScriptCore from 'root/lib/core'; 6 | import index from './index'; 7 | 8 | module.exports.id = 'gamer-auto-signin'; 9 | module.exports.name = module.exports.id; 10 | 11 | userScriptCore.run(module.exports.id, module.exports, null, function (uxid, exports, global, window, $jq, _url) 12 | { 13 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 14 | 15 | /* 16 | 17 | const UF = require('root/lib/greasemonkey/gm'); 18 | 19 | UF.registerMenuCommand({ 20 | id: exports.name, 21 | key: 'gamer signin', 22 | }, async (options) => 23 | { 24 | const signin = require('root/lib/site/gamer/signin').default; 25 | 26 | await signin(true) 27 | .catch(err => console.error('[簽到錯誤]', err)) 28 | ; 29 | }); 30 | 31 | */ 32 | }); 33 | -------------------------------------------------------------------------------- /src/gamer-auto-signin/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '自動簽到 ( 巴哈姆特 ... and other )'; 6 | 7 | export const grant = [ 8 | 'GM_registerMenuCommand', 9 | 'GM_xmlhttpRequest', 10 | 'GM_getValue', 11 | ]; 12 | 13 | export const metadata = `// ==UserScript== 14 | // @name <%= index.name %> 15 | // @name:en <%= index.name_en %> 16 | // @name:zh <%= index.name %> 17 | // @namespace bluelovers 18 | // @author bluelovers 19 | // 20 | // @description <%= index.desc %> 21 | // @description:en <%= index.desc_en %> 22 | // @description:zh <%= index.desc %> 23 | // 24 | // @version <%= pkg.version %> 25 | // 26 | // @grant <%= index.grant %> 27 | // g_r_a_n_tnone 28 | // 29 | // @icon <%= index.icon %> 30 | // 31 | // @noframes 32 | // @encoding utf-8 33 | // 34 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 35 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 36 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 37 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 38 | // 39 | // @include <%= index.include %> 40 | // 41 | // @match <%= index.match %> 42 | // 43 | // @exclude <%= index.exclude %> 44 | // 45 | // ==/UserScript== 46 | `; 47 | 48 | export default metadata; 49 | -------------------------------------------------------------------------------- /src/gitee-plus/.gitignore: -------------------------------------------------------------------------------- 1 | demo.d.ts 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/gitee-plus/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'gitee-plus'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'gitee-plus'; 6 | module.exports.name_en = 'gitee-plus'; 7 | module.exports.name_ja = 'gitee-plus'; 8 | 9 | module.exports.desc = '於 Gitee 碼雲 增加一點小功能'; 10 | module.exports.desc_en = '於 Gitee 碼雲 增加一點小功能'; 11 | module.exports.desc_ja = '於 Gitee 碼雲 增加一點小功能'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "base/gitee-plus" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/gitee-plus/base/gitee-plus'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://gitee.com/*", 33 | "http*://gitee.com/api/*", 34 | "http*://gitee.com/oauth/applications/*", 35 | "http*://m.gitee.com/*" 36 | ]; 37 | module.exports.metadata.match = []; 38 | module.exports.metadata.exclude = []; 39 | module.exports.metadata.grant = [ 40 | "GM.deleteValue", 41 | "GM.getValue", 42 | "GM.listValues", 43 | "GM.registerMenuCommand", 44 | "GM.setValue", 45 | "GM.unregisterMenuCommand", 46 | "GM.xmlhttpRequest", 47 | "GM_deleteValue", 48 | "GM_getValue", 49 | "GM_listValues", 50 | "GM_registerMenuCommand", 51 | "GM_setValue", 52 | "GM_unregisterMenuCommand", 53 | "GM_xmlhttpRequest", 54 | "unsafeWindow" 55 | ]; 56 | 57 | module.exports.list_script = []; 58 | 59 | module.exports.current = []; 60 | 61 | module.exports.default = module.exports; 62 | 63 | -------------------------------------------------------------------------------- /src/gitee-plus/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | // @ts-ignore 9 | import * as index from './index'; 10 | 11 | module.exports.id = index.id; 12 | module.exports.name = index.name; 13 | 14 | module.exports.indexScript = index; 15 | 16 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 17 | { 18 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 19 | }); 20 | -------------------------------------------------------------------------------- /src/gitee-plus/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '於 Gitee 碼雲 增加一點小功能'; 6 | export const desc_en = desc; 7 | 8 | export const icon = ''; 9 | 10 | export const grant = [ 11 | 'GM_registerMenuCommand', 12 | 'GM_xmlhttpRequest', 13 | 'unsafeWindow', 14 | 'GM_deleteValue', 15 | 'GM_getValue', 16 | 'GM_listValues', 17 | 'GM_setValue', 18 | ]; 19 | 20 | /** 21 | * <%= token %> 22 | * 23 | * @type {string} 24 | */ 25 | export const metadata = `// ==UserScript== 26 | // @name <%= index.id %> 27 | // @name:en <%= index.name_en %> 28 | // @name:zh <%= index.name %> 29 | // @namespace <%= index.namespace %> 30 | // @author <%= index.author %> 31 | // 32 | // @description <%= index.desc %> 33 | // @description:en <%= index.desc_en %> 34 | // @description:zh <%= index.desc %> 35 | // 36 | // @version <%= pkg.version %> 37 | // 38 | // @grant <%= index.grant %> 39 | // g_r_a_n_tnone 40 | // 41 | // @icon <%= index.icon %> 42 | // 43 | // noframes 44 | // @encoding utf-8 45 | // 46 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 47 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 48 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 49 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 50 | // 51 | // @include <%= index.include %> 52 | // 53 | // @match <%= index.match %> 54 | // 55 | // @exclude <%= index.exclude %> 56 | // 57 | // ==/UserScript== 58 | `; 59 | 60 | export default metadata; 61 | -------------------------------------------------------------------------------- /src/masiro-moe/.gitignore: -------------------------------------------------------------------------------- 1 | demo.d.ts 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/masiro-moe/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'masiro-moe'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'masiro-moe'; 6 | module.exports.name_en = 'masiro-moe'; 7 | module.exports.name_ja = 'masiro-moe'; 8 | 9 | module.exports.desc = ''; 10 | module.exports.desc_en = ''; 11 | module.exports.desc_ja = ''; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "base/masiro-moe" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/masiro-moe/base/masiro-moe'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://masiro.moe/*", 33 | "http*://masiro.moe/*mod=viewthread*" 34 | ]; 35 | module.exports.metadata.match = []; 36 | module.exports.metadata.exclude = []; 37 | module.exports.metadata.grant = [ 38 | "GM.deleteValue", 39 | "GM.getValue", 40 | "GM.listValues", 41 | "GM.openInTab", 42 | "GM.registerMenuCommand", 43 | "GM.setValue", 44 | "GM.unregisterMenuCommand", 45 | "GM.xmlhttpRequest", 46 | "GM_deleteValue", 47 | "GM_getValue", 48 | "GM_listValues", 49 | "GM_openInTab", 50 | "GM_registerMenuCommand", 51 | "GM_setValue", 52 | "GM_unregisterMenuCommand", 53 | "GM_xmlhttpRequest", 54 | "unsafeWindow" 55 | ]; 56 | 57 | module.exports.list_script = []; 58 | 59 | module.exports.current = []; 60 | 61 | module.exports.default = module.exports; 62 | 63 | -------------------------------------------------------------------------------- /src/masiro-moe/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | // @ts-ignore 9 | import * as index from './index'; 10 | 11 | module.exports.id = index.id; 12 | module.exports.name = index.name; 13 | 14 | module.exports.indexScript = index; 15 | 16 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 17 | { 18 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 19 | }); 20 | -------------------------------------------------------------------------------- /src/masiro-moe/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = ''; 6 | export const desc_en = desc; 7 | 8 | export const icon = ''; 9 | 10 | export const grant = [ 11 | 'GM_registerMenuCommand', 12 | 'GM_xmlhttpRequest', 13 | 'GM_getValue', 14 | ]; 15 | 16 | /** 17 | * <%= token %> 18 | * 19 | * @type {string} 20 | */ 21 | export const metadata = `// ==UserScript== 22 | // @name <%= index.id %> 23 | // @name:en <%= index.name_en %> 24 | // @name:ja <%= index.name_ja %> 25 | // @name:zh <%= index.name %> 26 | // @namespace <%= index.namespace %> 27 | // @author <%= index.author %> 28 | // 29 | // @description <%= index.desc %> 30 | // @description:en <%= index.desc_en %> 31 | // @description:ja <%= index.desc_ja %> 32 | // @description:zh <%= index.desc %> 33 | // 34 | // @version <%= pkg.version %> 35 | // 36 | // @grant <%= index.grant %> 37 | // g_r_a_n_tnone 38 | // 39 | // @icon <%= index.icon %> 40 | // 41 | // noframes 42 | // @encoding utf-8 43 | // 44 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 45 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 46 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 47 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 48 | // 49 | // @include <%= index.include %> 50 | // 51 | // @match <%= index.match %> 52 | // 53 | // @exclude <%= index.exclude %> 54 | // 55 | // ==/UserScript== 56 | `; 57 | 58 | export default metadata; 59 | -------------------------------------------------------------------------------- /src/mastodon-plus/.gitignore: -------------------------------------------------------------------------------- 1 | demo.d.ts 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/mastodon-plus/base/mastodon-plus.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://mastodon.social/*', 23 | 'http*://g0v.social/*', 24 | 'http*://pawoo.net/*', 25 | 'http*://music.pawoo.net/*', 26 | 'http*://friends.nico/*', 27 | 'http*://cmx.im/*', 28 | ], 29 | match: [], 30 | nomatch: [], 31 | exclude: [], 32 | 33 | grant: [], 34 | }, 35 | 36 | test(_url_obj = global._url_obj) 37 | { 38 | let ret; 39 | 40 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 41 | { 42 | return true; 43 | } 44 | 45 | return false; 46 | }, 47 | 48 | async main(_url_obj = global._url_obj) 49 | { 50 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 51 | _uf_dom_filter_link([ 52 | // 53 | ]) 54 | .prop('target', '_blank') 55 | ; 56 | 57 | console.log(7777777); 58 | }, 59 | 60 | adblock(_url_obj = global._url_obj) 61 | { 62 | // 63 | }, 64 | 65 | clearly(_url_obj = global._url_obj, _dom_list = null) 66 | { 67 | let _dom = $(_dom_list); 68 | 69 | _dom = _dom 70 | .add([ 71 | // 72 | ].join()) 73 | ; 74 | 75 | return _dom; 76 | }, 77 | 78 | }; 79 | 80 | export = o as IDemo; 81 | -------------------------------------------------------------------------------- /src/mastodon-plus/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'mastodon-plus'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'mastodon-plus'; 6 | module.exports.name_en = 'mastodon-plus'; 7 | module.exports.name_ja = 'mastodon-plus'; 8 | 9 | module.exports.desc = ''; 10 | module.exports.desc_en = ''; 11 | module.exports.desc_ja = ''; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "base/mastodon-plus", 20 | "global/profile" 21 | ]; 22 | 23 | module.exports.list_disable = []; 24 | 25 | // for webpack, don't use this method 26 | module.exports._lib = () => 27 | { 28 | require('root/src/mastodon-plus/base/mastodon-plus'); 29 | require('root/src/mastodon-plus/global/profile'); 30 | }; 31 | 32 | module.exports.metadata = {}; 33 | module.exports.metadata.include = [ 34 | "http*://mastodon.social/*", 35 | "http*://g0v.social/*", 36 | "http*://pawoo.net/*", 37 | "http*://music.pawoo.net/*", 38 | "http*://friends.nico/*", 39 | "http*://cmx.im/*" 40 | ]; 41 | module.exports.metadata.match = []; 42 | module.exports.metadata.exclude = []; 43 | module.exports.metadata.grant = []; 44 | 45 | module.exports.list_script = [ 46 | "global/profile" 47 | ]; 48 | 49 | module.exports.current = []; 50 | 51 | module.exports.default = module.exports; 52 | 53 | -------------------------------------------------------------------------------- /src/mastodon-plus/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | // @ts-ignore 9 | import * as index from './index'; 10 | 11 | module.exports.id = index.id; 12 | module.exports.name = index.name; 13 | 14 | module.exports.indexScript = index; 15 | 16 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 17 | { 18 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 19 | }); 20 | -------------------------------------------------------------------------------- /src/mastodon-plus/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = ''; 6 | export const desc_en = desc; 7 | 8 | export const icon = ''; 9 | 10 | export const grant = [ 11 | // 12 | ]; 13 | 14 | /** 15 | * <%= token %> 16 | * 17 | * @type {string} 18 | */ 19 | export const metadata = `// ==UserScript== 20 | // @name <%= index.id %> 21 | // @name:en <%= index.name_en %> 22 | // @name:zh <%= index.name %> 23 | // @namespace <%= index.namespace %> 24 | // @author <%= index.author %> 25 | // 26 | // @description <%= index.desc %> 27 | // @description:en <%= index.desc_en %> 28 | // @description:zh <%= index.desc %> 29 | // 30 | // @version <%= pkg.version %> 31 | // 32 | // @grant <%= index.grant %> 33 | // g_r_a_n_tnone 34 | // 35 | // @icon <%= index.icon %> 36 | // 37 | // noframes 38 | // @encoding utf-8 39 | // 40 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 41 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 42 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 43 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 44 | // 45 | // @include <%= index.include %> 46 | // 47 | // @match <%= index.match %> 48 | // 49 | // @exclude <%= index.exclude %> 50 | // 51 | // ==/UserScript== 52 | `; 53 | 54 | export default metadata; 55 | -------------------------------------------------------------------------------- /src/novel-plus-sc/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'novel-plus-sc'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'novel-plus-sc'; 6 | module.exports.name_en = 'novel-plus-sc'; 7 | module.exports.name_ja = 'novel-plus-sc'; 8 | 9 | module.exports.desc = '部分小說網站重新排版、修正文字,改變閱讀樣式'; 10 | module.exports.desc_en = '部分小說網站重新排版、修正文字,改變閱讀樣式'; 11 | module.exports.desc_ja = '部分小說網站重新排版、修正文字,改變閱讀樣式'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "site/baidu/tieba", 20 | "site/dmzj", 21 | "site/gamer/home", 22 | "site/lightnovel/discuz", 23 | "site/sfacg/book" 24 | ]; 25 | 26 | module.exports.list_disable = [ 27 | "site/syosetu" 28 | ]; 29 | 30 | // for webpack, don't use this method 31 | module.exports._lib = () => 32 | { 33 | require('root/src/novel-plus-sc/site/baidu/tieba'); 34 | require('root/src/novel-plus-sc/site/dmzj'); 35 | require('root/src/novel-plus-sc/site/gamer/home'); 36 | require('root/src/novel-plus-sc/site/lightnovel/discuz'); 37 | require('root/src/novel-plus-sc/site/sfacg/book'); 38 | }; 39 | 40 | module.exports.metadata = {}; 41 | module.exports.metadata.include = [ 42 | "http*://q.dmzj.com/*" 43 | ]; 44 | module.exports.metadata.match = [ 45 | "*://tieba.baidu.com/*", 46 | "*://q.dmzj.com/*", 47 | "*://home.gamer.com.tw/creationDetail.php*", 48 | "*://www.lightnovel.cn/*", 49 | "*://book.sfacg.com/Novel/*" 50 | ]; 51 | module.exports.metadata.exclude = []; 52 | module.exports.metadata.grant = [ 53 | "GM.deleteValue", 54 | "GM.getValue", 55 | "GM.listValues", 56 | "GM.registerMenuCommand", 57 | "GM.setValue", 58 | "GM.unregisterMenuCommand", 59 | "GM.xmlhttpRequest", 60 | "GM_deleteValue", 61 | "GM_getValue", 62 | "GM_listValues", 63 | "GM_registerMenuCommand", 64 | "GM_setValue", 65 | "GM_unregisterMenuCommand", 66 | "GM_xmlhttpRequest", 67 | "unsafeWindow" 68 | ]; 69 | 70 | module.exports.list_script = []; 71 | 72 | module.exports.current = []; 73 | 74 | module.exports.default = module.exports; 75 | 76 | -------------------------------------------------------------------------------- /src/novel-plus-sc/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | // @ts-ignore 9 | import * as index from './index'; 10 | 11 | module.exports.id = index.id; 12 | module.exports.name = index.name; 13 | 14 | module.exports.indexScript = index; 15 | 16 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 17 | { 18 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 19 | 20 | _init_gm(); 21 | }); 22 | 23 | function _init_gm() 24 | { 25 | const UF = require('root/lib/greasemonkey/gm/menu'); 26 | 27 | UF.registerMenuCommand({ 28 | id: module.exports.name, 29 | key: 'redo', 30 | }, async (options) => 31 | { 32 | let index = require(`root/src/${module.exports.id}`); 33 | 34 | if (index.current && index.current.length) 35 | { 36 | const label = UF.getLabel(options); 37 | 38 | let _dom = $(); 39 | 40 | let temp = null; 41 | 42 | let list_script = index.current; 43 | 44 | { 45 | let a = []; 46 | for (let current of list_script) 47 | { 48 | if (a.includes(current.name)) 49 | { 50 | continue; 51 | } 52 | 53 | a.push(current.name); 54 | 55 | for (let fn of ['adblock']) 56 | { 57 | if (typeof current.lib[fn] == 'function') 58 | { 59 | // @ts-ignore 60 | let ret = await current.lib[fn](global._url_obj, _dom); 61 | 62 | if (ret && ret !== true) 63 | { 64 | if (fn == 'clearly') 65 | { 66 | //_dom = _dom.add(ret); 67 | 68 | if (ret.length) 69 | { 70 | // allow remove dom from list 71 | // need update clearly 72 | _dom = ret; 73 | } 74 | 75 | //console.log(777, [ret.length, ret], [_dom.length, _dom]); 76 | } 77 | 78 | console.info(label, current.name, fn, [ret.length, ret], [_dom.length, _dom]); 79 | } 80 | } 81 | } 82 | } 83 | } 84 | 85 | console.info(label, [_dom.length, _dom]); 86 | 87 | _dom 88 | .remove() 89 | ; 90 | } 91 | }); 92 | } 93 | -------------------------------------------------------------------------------- /src/novel-plus-sc/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '部分小說網站重新排版、修正文字,改變閱讀樣式'; 6 | 7 | export const grant = [ 8 | 'GM_registerMenuCommand', 9 | 'GM_xmlhttpRequest', 10 | 'unsafeWindow', 11 | 'GM_getValue', 12 | ]; 13 | 14 | export const metadata = `// ==UserScript== 15 | // @name <%= index.name %> 16 | // @name:en <%= index.name_en %> 17 | // @name:zh <%= index.name %> 18 | // @namespace bluelovers 19 | // @author bluelovers 20 | // 21 | // @description <%= index.desc %> 22 | // @description:en <%= index.desc_en %> 23 | // @description:zh <%= index.desc %> 24 | // 25 | // @version <%= pkg.version %> 26 | // 27 | // @grant <%= index.grant %> 28 | // g_r_a_n_tnone 29 | // 30 | // @icon <%= index.icon %> 31 | // 32 | // @noframes 33 | // @encoding utf-8 34 | // 35 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 36 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 37 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 38 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 39 | // 40 | // @include <%= index.include %> 41 | // 42 | // @match <%= index.match %> 43 | // 44 | // @exclude <%= index.exclude %> 45 | // 46 | // ==/UserScript== 47 | `; 48 | 49 | export default metadata; 50 | -------------------------------------------------------------------------------- /src/novel-plus-sc/site/gamer/home.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/5/005. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | metadata: { 19 | include: [ 20 | 21 | ], 22 | match: [ 23 | '*://home.gamer.com.tw/creationDetail.php*', 24 | ], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | _uf_dom_filter_link([ 47 | // 48 | ].join(',')) 49 | .prop('target', '_blank') 50 | ; 51 | 52 | greasemonkey.addStylesheet(require('root/lib/comic/font').font.NotoSansSC); 53 | 54 | greasemonkey 55 | .GM_addStyle([ 56 | `#BH-master .MSG-list8 h1, #BH-master .MSG-list8C { font-family: Consolas, Noto Sans SC, Microsoft Yahei UI, sans-serif; }`, 57 | 58 | `#BH-master .MSG-list8C { line-height: 1.25em; }`, 59 | ]) 60 | ; 61 | }, 62 | 63 | adblock(_url_obj = global._url_obj) 64 | { 65 | 66 | }, 67 | 68 | clearly(_url_obj = global._url_obj, _dom_list = null) 69 | { 70 | let _dom = $(_dom_list); 71 | 72 | _dom = _dom 73 | .add([ 74 | // 75 | ].join()) 76 | ; 77 | 78 | return _dom; 79 | }, 80 | 81 | }; 82 | 83 | export = o as IDemo; 84 | 85 | -------------------------------------------------------------------------------- /src/novel-plus-sc/site/lightnovel/discuz.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/5/005. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | // 23 | ], 24 | match: [ 25 | '*://www.lightnovel.cn/*', 26 | ], 27 | nomatch: [], 28 | exclude: [], 29 | 30 | grant: [], 31 | }, 32 | 33 | test(_url_obj = global._url_obj) 34 | { 35 | let ret; 36 | 37 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 38 | { 39 | return true; 40 | } 41 | 42 | return false; 43 | }, 44 | 45 | async main(_url_obj = global._url_obj) 46 | { 47 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 48 | _uf_dom_filter_link([ 49 | // 50 | ].join(',')) 51 | .prop('target', '_blank') 52 | ; 53 | 54 | greasemonkey 55 | .GM_addStyle([ 56 | `#thread_subject, .t_f[id] { 57 | font-family: Consolas, Noto Sans SC, Noto Sans CJK SC, Noto Sans CJK, Microsoft Yahei UI, sans-serif; 58 | text-shadow: 0 0.5px 0 rgba(228, 228, 228, 0.8), 0 0 1px rgba(0, 0, 0, 0.75); 59 | }`, 60 | 61 | `#thread_subject, .t_f[id] { font-size: 14px !important; line-height: 1.45em !important; }`, 62 | ]) 63 | ; 64 | 65 | 66 | }, 67 | 68 | adblock(_url_obj = global._url_obj) 69 | { 70 | 71 | }, 72 | 73 | clearly(_url_obj = global._url_obj, _dom_list = null) 74 | { 75 | let _dom = $(_dom_list); 76 | 77 | _dom = _dom 78 | .add([ 79 | // 80 | ].join()) 81 | ; 82 | 83 | return _dom; 84 | }, 85 | 86 | }; 87 | 88 | export = o as IDemo; 89 | 90 | -------------------------------------------------------------------------------- /src/novel-plus-sc/site/sfacg/book.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/6/006. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | metadata: { 19 | include: [], 20 | match: [ 21 | '*://book.sfacg.com/Novel/*', 22 | ], 23 | nomatch: [], 24 | exclude: [], 25 | 26 | grant: [], 27 | }, 28 | 29 | test(_url_obj = global._url_obj) 30 | { 31 | let ret; 32 | 33 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 34 | { 35 | return true; 36 | } 37 | 38 | return false; 39 | }, 40 | 41 | async main(_url_obj = global._url_obj) 42 | { 43 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 44 | _uf_dom_filter_link([ 45 | // 46 | ].join(',')) 47 | .prop('target', '_blank') 48 | ; 49 | 50 | greasemonkey.addStylesheet(require('root/lib/comic/font').font.NotoSansSC); 51 | 52 | greasemonkey 53 | .GM_addStyle([ 54 | `#ChapterBody { 55 | font-family: Consolas, Noto Sans SC, Microsoft Yahei UI, sans-serif; 56 | text-shadow: 0 0.5px 0 rgba(228, 228, 228, 0.8), 0 0 1px rgba(0, 0, 0, 0.75); 57 | }`, 58 | //`#ChapterBody, .article-wrap .article-content p { line-height: 1.25em; }`, 59 | ], 'body') 60 | ; 61 | }, 62 | 63 | adblock(_url_obj = global._url_obj) 64 | { 65 | 66 | }, 67 | 68 | clearly(_url_obj = global._url_obj, _dom_list = null) 69 | { 70 | let _dom = $(_dom_list); 71 | 72 | _dom = _dom 73 | .add([ 74 | // 75 | ].join()) 76 | ; 77 | 78 | return _dom; 79 | }, 80 | 81 | }; 82 | 83 | export = o as IDemo; 84 | 85 | -------------------------------------------------------------------------------- /src/novel-plus-sc/site/syosetu.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/5/005. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | disable: true, 21 | 22 | metadata: { 23 | include: [ 24 | // 25 | ], 26 | match: [ 27 | '*://*.syosetu.com/*', 28 | ], 29 | nomatch: [], 30 | exclude: [], 31 | 32 | grant: [], 33 | }, 34 | 35 | test(_url_obj = global._url_obj) 36 | { 37 | let ret; 38 | 39 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 40 | { 41 | return true; 42 | } 43 | 44 | return false; 45 | }, 46 | 47 | async main(_url_obj = global._url_obj) 48 | { 49 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 50 | _uf_dom_filter_link([ 51 | // 52 | ].join(',')) 53 | .prop('target', '_blank') 54 | ; 55 | 56 | greasemonkey 57 | .GM_addStyle([ 58 | //`#novel_honbun, .novel_view, #novel_ex, .novel_sublist2 { font-family: "メイリオ","IPAexゴシック","IPAゴシック","MS ゴシック","SimSun",monospace; }`, 59 | 60 | //`#novel_honbun, .novel_view { line-height: 1.6em !important; }`, 61 | ]) 62 | ; 63 | 64 | }, 65 | 66 | adblock(_url_obj = global._url_obj) 67 | { 68 | 69 | }, 70 | 71 | clearly(_url_obj = global._url_obj, _dom_list = null) 72 | { 73 | let _dom = $(_dom_list); 74 | 75 | _dom = _dom 76 | .add([ 77 | // 78 | ].join()) 79 | ; 80 | 81 | return _dom; 82 | }, 83 | 84 | }; 85 | 86 | export = o as IDemo; 87 | 88 | -------------------------------------------------------------------------------- /src/pan-baidu-block-or-expire/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/pan-baidu-block-or-expire/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'pan-baidu-block-or-expire'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'pan-baidu-block-or-expire'; 6 | module.exports.name_en = 'pan-baidu-block-or-expire'; 7 | module.exports.name_ja = 'pan-baidu-block-or-expire'; 8 | 9 | module.exports.desc = '輔助判斷百度盤是封鎖還是過期'; 10 | module.exports.desc_en = '輔助判斷百度盤是封鎖還是過期'; 11 | module.exports.desc_ja = '輔助判斷百度盤是封鎖還是過期'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "site/pan.baidu" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/pan-baidu-block-or-expire/site/pan.baidu'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://pan.baidu.com/s/*", 33 | "http*://pan.baidu.com/error/*", 34 | "http*://pan.baidu.com/wap/error*" 35 | ]; 36 | module.exports.metadata.match = [ 37 | "*://pan.baidu.com/wap/error" 38 | ]; 39 | module.exports.metadata.exclude = []; 40 | module.exports.metadata.grant = []; 41 | 42 | module.exports.list_script = []; 43 | 44 | module.exports.current = []; 45 | 46 | module.exports.default = module.exports; 47 | 48 | -------------------------------------------------------------------------------- /src/pan-baidu-block-or-expire/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | import * as userScriptCore from 'root/lib/core'; 6 | import index from './index'; 7 | 8 | module.exports.id = index.id; 9 | module.exports.name = module.exports.id; 10 | 11 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 12 | { 13 | //require('root/lib/jquery/scrollTo').makeJQueryPlugin($jq); 14 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 15 | }); 16 | -------------------------------------------------------------------------------- /src/pan-baidu-block-or-expire/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '輔助判斷百度盤是封鎖還是過期'; 6 | 7 | export const grant = [ 8 | 9 | ]; 10 | 11 | export const metadata = `// ==UserScript== 12 | // @name <%= index.name %> 13 | // @name:en <%= index.name_en %> 14 | // @name:zh <%= index.name %> 15 | // @namespace bluelovers 16 | // @author bluelovers 17 | // 18 | // @description <%= index.desc %> 19 | // @description:en <%= index.desc_en %> 20 | // @description:zh <%= index.desc %> 21 | // 22 | // @version <%= pkg.version %> 23 | // 24 | // @grant <%= index.grant %> 25 | // g_r_a_n_tnone 26 | // 27 | // @icon <%= index.icon %> 28 | // 29 | // @noframes 30 | // @encoding utf-8 31 | // 32 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 33 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 34 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 35 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 36 | // 37 | // @include <%= index.include %> 38 | // 39 | // @match <%= index.match %> 40 | // 41 | // @exclude <%= index.exclude %> 42 | // 43 | // ==/UserScript== 44 | `; 45 | 46 | export default metadata; 47 | -------------------------------------------------------------------------------- /src/pan-baidu-download/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/pan-baidu-download/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'pan-baidu-download'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'pan-baidu-download'; 6 | module.exports.name_en = 'pan-baidu-download'; 7 | module.exports.name_ja = 'pan-baidu-download'; 8 | 9 | module.exports.desc = '直接下载百度网盘和百度网盘分享的文件,避免下载文件时调用百度网盘客户端,获取网盘文件的直接下载地址'; 10 | module.exports.desc_en = '直接下载百度网盘和百度网盘分享的文件,避免下载文件时调用百度网盘客户端,获取网盘文件的直接下载地址'; 11 | module.exports.desc_ja = '直接下载百度网盘和百度网盘分享的文件,避免下载文件时调用百度网盘客户端,获取网盘文件的直接下载地址'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "site/pan.baidu" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/pan-baidu-download/site/pan.baidu'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://pan.baidu.com/s/*" 33 | ]; 34 | module.exports.metadata.match = [ 35 | "*://pan.baidu.com/disk/home*", 36 | "*://yun.baidu.com/disk/home*", 37 | "*://pan.baidu.com/s/*", 38 | "*://yun.baidu.com/s/*", 39 | "*://pan.baidu.com/share/link*", 40 | "*://yun.baidu.com/share/link*" 41 | ]; 42 | module.exports.metadata.exclude = []; 43 | module.exports.metadata.grant = [ 44 | "GM.setClipboard", 45 | "GM_setClipboard", 46 | "unsafeWindow" 47 | ]; 48 | 49 | module.exports.list_script = []; 50 | 51 | module.exports.current = []; 52 | 53 | module.exports.default = module.exports; 54 | 55 | -------------------------------------------------------------------------------- /src/pan-baidu-download/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | import * as userScriptCore from 'root/lib/core'; 6 | import index from './index'; 7 | 8 | module.exports.id = index.id; 9 | module.exports.name = module.exports.id; 10 | 11 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 12 | { 13 | //require('root/lib/jquery/scrollTo').makeJQueryPlugin($jq); 14 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 15 | }); 16 | -------------------------------------------------------------------------------- /src/pan-baidu-download/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '直接下载百度网盘和百度网盘分享的文件,避免下载文件时调用百度网盘客户端,获取网盘文件的直接下载地址'; 6 | 7 | export const grant = [ 8 | 9 | ]; 10 | 11 | export const metadata = `// ==UserScript== 12 | // @name <%= index.name %> 13 | // @name:en <%= index.name_en %> 14 | // @name:zh <%= index.name %> 15 | // @namespace bluelovers 16 | // @author bluelovers 17 | // 18 | // @description <%= index.desc %> 19 | // @description:en <%= index.desc_en %> 20 | // @description:zh <%= index.desc %> 21 | // 22 | // @version <%= pkg.version %> 23 | // 24 | // @grant <%= index.grant %> 25 | // g_r_a_n_tnone 26 | // 27 | // @icon <%= index.icon %> 28 | // 29 | // @noframes 30 | // @encoding utf-8 31 | // 32 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 33 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 34 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 35 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 36 | // 37 | // @include <%= index.include %> 38 | // 39 | // @match <%= index.match %> 40 | // 41 | // @exclude <%= index.exclude %> 42 | // 43 | // ==/UserScript== 44 | `; 45 | 46 | export default metadata; 47 | -------------------------------------------------------------------------------- /src/pan-baidu-download/site/pan.baidu.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/22/022. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | metadata: { 19 | include: [ 20 | 'http*://pan.baidu.com/s/*', 21 | ], 22 | match: [ 23 | '*://pan.baidu.com/disk/home*', 24 | '*://yun.baidu.com/disk/home*', 25 | '*://pan.baidu.com/s/*', 26 | '*://yun.baidu.com/s/*', 27 | '*://pan.baidu.com/share/link*', 28 | '*://yun.baidu.com/share/link*', 29 | ], 30 | nomatch: [], 31 | exclude: [], 32 | 33 | grant: [ 34 | 'GM_setClipboard', 35 | 'unsafeWindow', 36 | ], 37 | }, 38 | 39 | test(_url_obj = global._url_obj) 40 | { 41 | let ret; 42 | 43 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 44 | { 45 | return true; 46 | } 47 | 48 | return false; 49 | }, 50 | 51 | async main(_url_obj = global._url_obj) 52 | { 53 | /** 54 | * https://greasyfork.org/zh-TW/forum/discussion/35536/x 55 | */ 56 | let { detectPage, PanHelper, PanShareHelper, init } = require('root/lib/site/baidu/pan/index'); 57 | 58 | $(function(){ 59 | init($, _url_obj); 60 | }); 61 | }, 62 | 63 | adblock(_url_obj = global._url_obj) 64 | { 65 | }, 66 | 67 | clearly(_url_obj = global._url_obj, _dom_list = null) 68 | { 69 | let _dom = $(_dom_list); 70 | 71 | _dom = _dom 72 | .add([ 73 | 74 | ].join()) 75 | ; 76 | 77 | return _dom; 78 | }, 79 | 80 | }; 81 | 82 | export = o as IDemo; 83 | -------------------------------------------------------------------------------- /src/shimo-im-discuz/.gitignore: -------------------------------------------------------------------------------- 1 | demo.d.ts 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/shimo-im-discuz/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'shimo-im-discuz'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'shimo-im-discuz'; 6 | module.exports.name_en = 'shimo-im-discuz'; 7 | module.exports.name_ja = 'shimo-im-discuz'; 8 | 9 | module.exports.desc = '暴力複製破壞石墨網頁讓他可以正常複製格式到 discuz 論壇'; 10 | module.exports.desc_en = '暴力複製破壞石墨網頁讓他可以正常複製格式到 discuz 論壇'; 11 | module.exports.desc_ja = '暴力複製破壞石墨網頁讓他可以正常複製格式到 discuz 論壇'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "base/shimo-im-discuz" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/shimo-im-discuz/base/shimo-im-discuz'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://shimo.im/docs/*" 33 | ]; 34 | module.exports.metadata.match = []; 35 | module.exports.metadata.exclude = []; 36 | module.exports.metadata.grant = [ 37 | "GM.registerMenuCommand", 38 | "GM.unregisterMenuCommand", 39 | "GM_registerMenuCommand", 40 | "GM_unregisterMenuCommand" 41 | ]; 42 | 43 | module.exports.list_script = []; 44 | 45 | module.exports.current = []; 46 | 47 | module.exports.default = module.exports; 48 | 49 | -------------------------------------------------------------------------------- /src/shimo-im-discuz/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | // @ts-ignore 9 | import * as index from './index'; 10 | 11 | module.exports.id = index.id; 12 | module.exports.name = index.name; 13 | 14 | module.exports.indexScript = index; 15 | 16 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 17 | { 18 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 19 | }); 20 | -------------------------------------------------------------------------------- /src/shimo-im-discuz/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = '暴力複製破壞石墨網頁讓他可以正常複製格式到 discuz 論壇'; 6 | export const desc_en = desc; 7 | 8 | export const icon = ''; 9 | 10 | export const grant = [ 11 | // 12 | 'GM_registerMenuCommand', 13 | ]; 14 | 15 | /** 16 | * <%= token %> 17 | * 18 | * @type {string} 19 | */ 20 | export const metadata = `// ==UserScript== 21 | // @name <%= index.id %> 22 | // @name:en <%= index.name_en %> 23 | // @name:ja <%= index.name_ja %> 24 | // @name:zh <%= index.name %> 25 | // @namespace <%= index.namespace %> 26 | // @author <%= index.author %> 27 | // 28 | // @description <%= index.desc %> 29 | // @description:en <%= index.desc_en %> 30 | // @description:ja <%= index.desc_ja %> 31 | // @description:zh <%= index.desc %> 32 | // 33 | // @version <%= pkg.version %> 34 | // 35 | // @grant <%= index.grant %> 36 | // g_r_a_n_tnone 37 | // 38 | // @icon <%= index.icon %> 39 | // 40 | // noframes 41 | // @encoding utf-8 42 | // 43 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 44 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 45 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 46 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 47 | // 48 | // @include <%= index.include %> 49 | // 50 | // @match <%= index.match %> 51 | // 52 | // @exclude <%= index.exclude %> 53 | // 54 | // ==/UserScript== 55 | `; 56 | 57 | export default metadata; 58 | -------------------------------------------------------------------------------- /src/syosetu-list-number/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'syosetu-list-number'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'syosetu-list-number'; 6 | module.exports.name_en = 'syosetu-list-number'; 7 | module.exports.name_ja = 'syosetu-list-number'; 8 | 9 | module.exports.desc = 'syosetu-list-number 讓小說家的章節顯示序列 (支援手機版)'; 10 | module.exports.desc_en = 'syosetu-list-number 讓小說家的章節顯示序列 (支援手機版)'; 11 | module.exports.desc_ja = 'syosetu-list-number 小説家になろう 章の表示順序'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "site/kakuyomu.jp", 20 | "site/mitemin", 21 | "site/syosetu" 22 | ]; 23 | 24 | module.exports.list_disable = []; 25 | 26 | // for webpack, don't use this method 27 | module.exports._lib = () => 28 | { 29 | require('root/src/syosetu-list-number/site/kakuyomu.jp'); 30 | require('root/src/syosetu-list-number/site/mitemin'); 31 | require('root/src/syosetu-list-number/site/syosetu'); 32 | }; 33 | 34 | module.exports.metadata = {}; 35 | module.exports.metadata.include = [ 36 | "http*://kakuyomu.jp/works*", 37 | "http*://kakuyomu.jp/works*/*/episodes/*", 38 | "http*://kakuyomu.jp/*", 39 | "http*://*.mitemin.net/*", 40 | "http*://syosetu.com/*", 41 | "http*://ncode.syosetu.com/*" 42 | ]; 43 | module.exports.metadata.match = [ 44 | "*://nl.syosetu.com/*", 45 | "*://ncode.syosetu.com/*", 46 | "*://novel18.syosetu.com/*", 47 | "*://nkx.syosetu.com/*" 48 | ]; 49 | module.exports.metadata.exclude = []; 50 | module.exports.metadata.grant = [ 51 | "GM.setClipboard", 52 | "GM_setClipboard" 53 | ]; 54 | 55 | module.exports.list_script = []; 56 | 57 | module.exports.current = []; 58 | 59 | module.exports.default = module.exports; 60 | 61 | -------------------------------------------------------------------------------- /src/syosetu-list-number/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | // @ts-ignore 6 | import * as userScriptCore from 'root/lib/core'; 7 | import index from './index'; 8 | 9 | module.exports.id = index.id; 10 | module.exports.name = module.exports.id; 11 | 12 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 13 | { 14 | require('root/lib/jquery/scrollTo').makeJQueryPlugin($jq); 15 | require('imagesloaded').makeJQueryPlugin($jq); 16 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 17 | }); 18 | -------------------------------------------------------------------------------- /src/syosetu-list-number/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = 'syosetu-list-number 讓小說家的章節顯示序列 (支援手機版)'; 6 | export const desc_ja = 'syosetu-list-number 小説家になろう 章の表示順序'; 7 | 8 | export const grant = [ 9 | 10 | ]; 11 | 12 | export const metadata = `// ==UserScript== 13 | // @name <%= index.name %> 14 | // @name:en <%= index.name_en %> 15 | // @name:ja <%= index.name_ja %> 16 | // @name:zh <%= index.name %> 17 | // @namespace bluelovers 18 | // @author bluelovers 19 | // 20 | // @description <%= index.desc %> 21 | // @description:en <%= index.desc_en %> 22 | // @description:ja <%= index.desc_ja %> 23 | // @description:zh <%= index.desc %> 24 | // 25 | // @version <%= pkg.version %> 26 | // 27 | // @grant <%= index.grant %> 28 | // g_r_a_n_tnone 29 | // 30 | // @icon <%= index.icon %> 31 | // 32 | // @noframes 33 | // @encoding utf-8 34 | // 35 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 36 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 37 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 38 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 39 | // 40 | // @include <%= index.include %> 41 | // 42 | // @match <%= index.match %> 43 | // 44 | // @exclude <%= index.exclude %> 45 | // 46 | // ==/UserScript== 47 | `; 48 | 49 | export default metadata; 50 | -------------------------------------------------------------------------------- /src/syosetu-list-number/site/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | -------------------------------------------------------------------------------- /src/syosetu-list-number/site/mitemin.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/22/022. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | // @ts-ignore 8 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 9 | 10 | declare const global: IGlobal; 11 | declare const greasemonkey: IGreasemonkey; 12 | declare const window: IWindow; 13 | declare const unsafeWindow: IWindow; 14 | declare const $: IJQueryStatic; 15 | declare const jQuery: IJQueryStatic; 16 | 17 | let o: IDemo = { 18 | 19 | metadata: { 20 | include: [ 21 | 'http*://*.mitemin.net/*', 22 | ], 23 | nomatch: [], 24 | exclude: [], 25 | 26 | grant: [], 27 | }, 28 | 29 | test(_url_obj = global._url_obj) 30 | { 31 | let ret; 32 | 33 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 34 | { 35 | return true; 36 | } 37 | 38 | return false; 39 | }, 40 | 41 | async main(_url_obj = global._url_obj) 42 | { 43 | 44 | let _imgs = $('.imageview, .image_infomation, .profile_image').find('img'); 45 | 46 | if (_imgs.length) 47 | { 48 | const _uf_fixsize2 = require('root/lib/dom/img/size')._uf_fixsize2; 49 | const _mitemin = require('mitemin').parse; 50 | 51 | _imgs 52 | .imagesLoaded() 53 | .done(function (data) 54 | { 55 | $(data.elements).each((i, elem) => { 56 | let _this = $(elem); 57 | 58 | let _src = _this.prop('src'); 59 | 60 | try 61 | { 62 | let data = _mitemin(_src); 63 | 64 | if (data.fullsize) 65 | { 66 | _uf_fixsize2(_this); 67 | 68 | _this.prop('src', data.fullsize) 69 | } 70 | } 71 | catch (e) 72 | { 73 | 74 | } 75 | }); 76 | }) 77 | ; 78 | } 79 | 80 | }, 81 | 82 | adblock(_url_obj = global._url_obj) 83 | { 84 | }, 85 | 86 | clearly(_url_obj = global._url_obj, _dom_list = null) 87 | { 88 | let _dom = $(_dom_list); 89 | 90 | return _dom; 91 | }, 92 | 93 | }; 94 | 95 | export = o as IDemo; 96 | -------------------------------------------------------------------------------- /src/tieba-harmony/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'tieba-harmony'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'tieba-harmony'; 6 | module.exports.name_en = 'tieba-harmony'; 7 | module.exports.name_ja = 'tieba-harmony'; 8 | 9 | module.exports.desc = 'tieba-harmony 貼吧發文時自動和諧'; 10 | module.exports.desc_en = 'tieba-harmony 貼吧發文時自動和諧'; 11 | module.exports.desc_ja = 'tieba-harmony 貼吧發文時自動和諧'; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "tieba/tieba" 20 | ]; 21 | 22 | module.exports.list_disable = []; 23 | 24 | // for webpack, don't use this method 25 | module.exports._lib = () => 26 | { 27 | require('root/src/tieba-harmony/tieba/tieba'); 28 | }; 29 | 30 | module.exports.metadata = {}; 31 | module.exports.metadata.include = [ 32 | "http*://tieba.baidu.com/*" 33 | ]; 34 | module.exports.metadata.match = []; 35 | module.exports.metadata.exclude = [ 36 | "http*://tieba.baidu.com/i*", 37 | "http*://tieba.baidu.com/h*", 38 | "http*://tieba.baidu.com/s*" 39 | ]; 40 | module.exports.metadata.grant = [ 41 | "GM.deleteValue", 42 | "GM.getValue", 43 | "GM.listValues", 44 | "GM.registerMenuCommand", 45 | "GM.setValue", 46 | "GM.unregisterMenuCommand", 47 | "GM.xmlhttpRequest", 48 | "GM_deleteValue", 49 | "GM_getValue", 50 | "GM_listValues", 51 | "GM_registerMenuCommand", 52 | "GM_setValue", 53 | "GM_unregisterMenuCommand", 54 | "GM_xmlhttpRequest" 55 | ]; 56 | 57 | module.exports.list_script = []; 58 | 59 | module.exports.current = []; 60 | 61 | module.exports.default = module.exports; 62 | 63 | -------------------------------------------------------------------------------- /src/tieba-harmony/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | import * as userScriptCore from 'root/lib/core'; 6 | import index from './index'; 7 | 8 | module.exports.id = 'tieba-harmony'; 9 | module.exports.name = module.exports.id; 10 | 11 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 12 | { 13 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 14 | 15 | _init_gm(); 16 | }); 17 | 18 | function _init_gm() 19 | { 20 | const UF = require('root/lib/greasemonkey/gm/menu'); 21 | 22 | UF.registerMenuCommand({ 23 | id: module.exports.name, 24 | key: 'unescape', 25 | }, async (options) => 26 | { 27 | let index = require(`root/src/${module.exports.id}`); 28 | 29 | if (index.current && index.current.length) 30 | { 31 | const label = UF.getLabel(options); 32 | 33 | let _dom = $(); 34 | 35 | let temp = null; 36 | 37 | let list_script = index.current; 38 | 39 | { 40 | let a = []; 41 | for (let current of list_script) 42 | { 43 | if (a.includes(current.name)) 44 | { 45 | continue; 46 | } 47 | 48 | a.push(current.name); 49 | 50 | for (let fn of ['adblock']) 51 | { 52 | if (typeof current.lib[fn] == 'function') 53 | { 54 | // @ts-ignore 55 | let ret = await current.lib[fn](global._url_obj, _dom); 56 | 57 | if (ret && ret !== true) 58 | { 59 | if (fn == 'clearly') 60 | { 61 | //_dom = _dom.add(ret); 62 | 63 | if (ret.length) 64 | { 65 | // allow remove dom from list 66 | // need update clearly 67 | _dom = ret; 68 | } 69 | 70 | //console.log(777, [ret.length, ret], [_dom.length, _dom]); 71 | } 72 | 73 | console.info(label, current.name, fn, [ret.length, ret], [_dom.length, _dom]); 74 | } 75 | } 76 | } 77 | } 78 | } 79 | 80 | console.info(label, [_dom.length, _dom]); 81 | 82 | _dom 83 | .remove() 84 | ; 85 | } 86 | }); 87 | } 88 | -------------------------------------------------------------------------------- /src/tieba-harmony/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = 'tieba-harmony 貼吧發文時自動和諧'; 6 | 7 | export const grant = [ 8 | 'GM_registerMenuCommand', 9 | 'GM_xmlhttpRequest', 10 | 'GM_getValue', 11 | ]; 12 | 13 | export const metadata = `// ==UserScript== 14 | // @name <%= index.name %> 15 | // @name:en <%= index.name_en %> 16 | // @name:zh <%= index.name %> 17 | // @namespace bluelovers 18 | // @author bluelovers 19 | // 20 | // @description <%= index.desc %> 21 | // @description:en <%= index.desc_en %> 22 | // @description:zh <%= index.desc %> 23 | // 24 | // @version <%= pkg.version %> 25 | // 26 | // @grant <%= index.grant %> 27 | // g_r_a_n_tnone 28 | // 29 | // @icon <%= index.icon %> 30 | // 31 | // @noframes 32 | // @encoding utf-8 33 | // 34 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 35 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 36 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 37 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 38 | // 39 | // @include <%= index.include %> 40 | // 41 | // @exclude <%= index.exclude %> 42 | // 43 | // ==/UserScript== 44 | `; 45 | 46 | export default metadata; 47 | -------------------------------------------------------------------------------- /src/ux-tweak-sc.adblock/facebook.txt: -------------------------------------------------------------------------------- 1 | www.facebook.com###pagelet_timeline_main_column ._1xnd > ._4-u2._3xaf._3-95._4-u8 2 | www.facebook.com###pagelet_timeline_main_column ._1xnd > #videos 3 | www.facebook.com###pagelet_timeline_main_column ._1xnd > #page_photos 4 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | 3 | *.js 4 | !/index.user.js 5 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/_fake.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | priority: -1, 10 | 11 | metadata: { 12 | include: [ 13 | 14 | ], 15 | exclude: [ 16 | 'http*://platform.twitter.com/widgets*', 17 | 'http*://apis.google.com/*' 18 | ], 19 | }, 20 | 21 | test(_url_obj) 22 | { 23 | return false; 24 | }, 25 | 26 | main(_url_obj) 27 | { 28 | }, 29 | 30 | adblock(_url_obj) 31 | { 32 | }, 33 | }; 34 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/2dfan.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/1/001. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.2dfan.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/2dfan\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('') 30 | .prop('target', '_blank') 31 | ; 32 | 33 | module.exports.adblock(_url_obj); 34 | 35 | $('img.media-object[data-normal]').attr('src', function () 36 | { 37 | return $(this).attr('data-normal'); 38 | }); 39 | }, 40 | 41 | adblock(_url_obj = global._url_obj) 42 | { 43 | $('.popadv-container').remove(); 44 | }, 45 | 46 | clearly(_url_obj = global._url_obj, _dom_list = null) 47 | { 48 | let _dom = $(_dom_list); 49 | 50 | _dom = _dom 51 | .add([ 52 | '.well:has(> .jiathis_style)', 53 | '.comments .media-object, .avatar', 54 | '#comments-container .form-actions', 55 | 'footer, .site-search, body > .navbar, iframe, body :hidden', 56 | '.control-group > .rating', 57 | '#similars img', 58 | '#reviews', 59 | 60 | '#content .block-content:has(> .breadcrumb.subject-crumb)' 61 | ].join()) 62 | ; 63 | 64 | //_dom.remove(); 65 | 66 | return _dom; 67 | }, 68 | }; 69 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/3dmgame.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.3dmgame.com/*', 12 | 'http*://bbs.3dmgame.com/*', 13 | ], 14 | exclude: [], 15 | }, 16 | 17 | test(_url_obj) 18 | { 19 | if (_url_obj.host.match(/3dmgame\.com/)) 20 | { 21 | return true; 22 | } 23 | 24 | return false; 25 | }, 26 | 27 | main(_url_obj) 28 | { 29 | require('root/src/ux-tweak-sc/global/discuz').main(_url_obj); 30 | }, 31 | 32 | adblock(_url_obj = global._url_obj) 33 | { 34 | 35 | }, 36 | 37 | clearly(_url_obj = global._url_obj, _dom_list = null) 38 | { 39 | const greasemonkey = require('root/lib/greasemonkey/index'); 40 | 41 | let _dom = $(_dom_list); 42 | 43 | _dom = _dom 44 | .add([ 45 | '.avatar', 46 | '.pct > img.image', 47 | ].join()) 48 | ; 49 | 50 | greasemonkey.GM_addStyle([ 51 | '.pl .quote blockquote { background-image: none; }', 52 | ].join('')); 53 | 54 | return _dom; 55 | }, 56 | }; 57 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/baidu/safecheck.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | //'http*://www.gamer.com.tw/*', 23 | ], 24 | match: [ 25 | '*://*.bdimg.com/safecheck/*', 26 | ], 27 | nomatch: [], 28 | exclude: [], 29 | 30 | grant: [], 31 | }, 32 | 33 | test(_url_obj = global._url_obj) 34 | { 35 | let ret; 36 | 37 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 38 | { 39 | return true; 40 | } 41 | 42 | return false; 43 | }, 44 | 45 | async main(_url_obj = global._url_obj) 46 | { 47 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 48 | _uf_dom_filter_link([ 49 | // 50 | ].join(',')) 51 | .prop('target', '_blank') 52 | ; 53 | 54 | $('.warning_wrap .warning_info .btn[rel*="nofollow"]') 55 | .each(function () 56 | { 57 | window.location.href = $(this).prop('href'); 58 | }) 59 | ; 60 | }, 61 | 62 | adblock(_url_obj = global._url_obj) 63 | { 64 | // 65 | }, 66 | 67 | clearly(_url_obj = global._url_obj, _dom_list = null) 68 | { 69 | let _dom = $(_dom_list); 70 | 71 | _dom = _dom 72 | .add([ 73 | // 74 | ].join()) 75 | ; 76 | 77 | return _dom; 78 | }, 79 | 80 | }; 81 | 82 | export = o as IDemo; 83 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/blog.reimu.net.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://blog.reimu.net/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj) 17 | { 18 | if (_url_obj.host.match(/blog\.reimu\.net/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj) 27 | { 28 | $('.entry-content pre:not(:visited)') 29 | .css({ 30 | 'border-color': 'rgba(185, 42, 183, 0.56)', 31 | }) 32 | .show() 33 | ; 34 | }, 35 | 36 | adblock(_url_obj) 37 | { 38 | 39 | }, 40 | }; 41 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/dlsite.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/24/024. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.dlsite.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/dlsite\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | if (adult_check(_url_obj)) 29 | { 30 | return true; 31 | } 32 | 33 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 34 | _uf_dom_filter_link('') 35 | .prop('target', '_blank') 36 | ; 37 | }, 38 | 39 | adblock(_url_obj = global._url_obj) 40 | { 41 | 42 | }, 43 | 44 | clearly(_url_obj = global._url_obj, _dom_list = null) 45 | { 46 | let _dom = $(_dom_list); 47 | 48 | _dom = _dom 49 | .add([ 50 | 51 | ].join()) 52 | ; 53 | 54 | //_dom.remove(); 55 | 56 | return _dom; 57 | }, 58 | }; 59 | 60 | function adult_check(_url_obj = global._url_obj) 61 | { 62 | let _a = $('#adult_check_box .btn_yes a'); 63 | 64 | if (_a.length) 65 | { 66 | _a[0].click(); 67 | 68 | return true; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/dmm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/19/019. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | disable: true, 10 | 11 | metadata: { 12 | include: [ 13 | 'http*://www.dmm.co.jp/netgame/*', 14 | ], 15 | exclude: [], 16 | }, 17 | 18 | test(_url_obj = global._url_obj) 19 | { 20 | if (_url_obj.host.match(/dmm\.co\.jp/)) 21 | { 22 | return true; 23 | } 24 | 25 | return false; 26 | }, 27 | 28 | main(_url_obj = global._url_obj) 29 | { 30 | const _uf_done = require('root/lib/event/done'); 31 | 32 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 33 | _uf_dom_filter_link('.d-sect .d-item a, a[href*="rcv.ixd.dmm.com"], a[href*="netgame_s"]') 34 | .prop('target', '_blank') 35 | .on('click', function (event) 36 | { 37 | _uf_done(event); 38 | open_game($(this).prop('href')); 39 | }) 40 | ; 41 | 42 | const comic_style = require('root/lib/comic/style'); 43 | 44 | const greasemonkey = require('root/lib/greasemonkey/index'); 45 | greasemonkey.GM_addStyle([ 46 | `html, body, #main-ntg, iframe, .dmm-ntgnavi { margin: auto; padding: 0; min-width: auto; min-height: auto; }`, 47 | ].join('')); 48 | }, 49 | 50 | adblock(_url_obj = global._url_obj) 51 | { 52 | 53 | }, 54 | 55 | clearly(_url_obj = global._url_obj, _dom_list = null) 56 | { 57 | let _dom = $(_dom_list); 58 | 59 | _dom = _dom 60 | .add([ 61 | 62 | ].join()) 63 | ; 64 | 65 | //_dom.remove(); 66 | 67 | return _dom; 68 | }, 69 | }; 70 | 71 | function open_game(url) 72 | { 73 | return window.open(url, url, 'menubar=0,toolbar=0,personalbar=0,status=1,resizable=1,scrollbars=1,titlebar=1'); 74 | } 75 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/gamme.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/22/022. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://news.gamme.com.tw/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/gamme\.com\.tw/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('#Foot-Photo a, #Foot-Photo1 a, #openlist') 30 | .prop('target', '_blank') 31 | ; 32 | 33 | const greasemonkey = require('root/lib/greasemonkey/index'); 34 | greasemonkey.GM_addStyle([ 35 | '.entry em a { color: initial; }', 36 | '.entry .photovia a { color: blue; }', 37 | ].join('')); 38 | 39 | $(window) 40 | .on('load', function () 41 | { 42 | $('.entry .photovia') 43 | .not('[data-done]') 44 | .attr('data-done', true) 45 | .clone() 46 | .css({ 47 | 'margin-top': 0, 48 | 'margin-bottom': '2.5em', 49 | }) 50 | .insertAfter($('#entry > p.pimg:eq(0), #entry > p.pimg:eq(0) + pre').eq(-1)) 51 | ; 52 | }) 53 | .triggerHandler('load') 54 | ; 55 | 56 | $(window).scrollTo($('#content, .body_box, .post').eq(-1)) 57 | }, 58 | 59 | adblock(_url_obj = global._url_obj) 60 | { 61 | 62 | }, 63 | 64 | clearly(_url_obj = global._url_obj, _dom_list = null) 65 | { 66 | let _dom = $(_dom_list); 67 | 68 | _dom = _dom 69 | .add($('#content').parentsUntil('body').addBack().siblings()) 70 | .add($('#content .boxbtn').nextAll().addBack()) 71 | .add([ 72 | '.shareblock, .img_share1, .img_share2, #home_div', 73 | '.prev_arw, .next_arw, #commentsBottom', 74 | '.postdata img, .postdata .postarw', 75 | 'body :hidden, script, iframe', 76 | ].join()) 77 | ; 78 | 79 | //_dom.remove(); 80 | 81 | return _dom; 82 | }, 83 | 84 | }; 85 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/guildwars2/forum.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/9/009. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | disable: true, 10 | 11 | metadata: { 12 | include: [ 13 | 'http*://forum-*.guildwars2.com/forum/*', 14 | ], 15 | exclude: [], 16 | }, 17 | 18 | test(_url_obj = global._url_obj) 19 | { 20 | if (_url_obj.host.match(/forum\-.+\.guildwars2\.com/)) 21 | { 22 | return true; 23 | } 24 | 25 | return false; 26 | }, 27 | 28 | main(_url_obj = global._url_obj) 29 | { 30 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 31 | _uf_dom_filter_link([ 32 | '.message-content a, .topiclist .topic .title a, a.topic', 33 | '.post-topic-header a', 34 | '.character .links a:not([rel="nofollow"]), .body.rules a', 35 | ].join()) 36 | .prop('target', '_blank') 37 | ; 38 | 39 | ref_url(_url_obj); 40 | 41 | let realname = $('.realname').text().trim(); 42 | 43 | $(window).scrollTo('#header .bookcrumbs, #content'); 44 | }, 45 | 46 | adblock(_url_obj = global._url_obj) 47 | { 48 | 49 | }, 50 | 51 | clearly(_url_obj = global._url_obj, _dom_list = null) 52 | { 53 | let _dom = $(_dom_list); 54 | 55 | _dom = _dom 56 | .add([].join()) 57 | ; 58 | 59 | //_dom.remove(); 60 | 61 | return _dom; 62 | }, 63 | }; 64 | 65 | function ref_url(_url_obj) 66 | { 67 | $('a[href*="external?l="]', '.message-content') 68 | .attr('href', function (i, old) 69 | { 70 | let url = old.substr(old.indexOf('external?l=') + 'external?l='.length); 71 | 72 | //console.log(i, old, url); 73 | 74 | return decodeURIComponent(url); 75 | }) 76 | .prop('target', '_blank') 77 | ; 78 | } 79 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/guildwars2/wiki.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/9/009. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://wiki.guildwars2.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/wiki.guildwars2\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | 30 | let _link = [ 31 | 'a.external, .gallery .thumb a.image', 32 | '.recipe-box a, .tpwrapper a, .recipe a', 33 | ]; 34 | 35 | if (_url_obj.path.match(/\/Game_updates\//)) 36 | { 37 | _link.push('#mw-content-text a'); 38 | } 39 | 40 | _uf_dom_filter_link(_link.join()) 41 | .not('.mw-editsection a, #toc a') 42 | .prop('target', '_blank') 43 | ; 44 | }, 45 | 46 | adblock(_url_obj = global._url_obj) 47 | { 48 | 49 | }, 50 | 51 | clearly(_url_obj = global._url_obj, _dom_list = null) 52 | { 53 | let _dom = $(_dom_list); 54 | 55 | _dom = _dom 56 | .add([ 57 | 58 | ].join()) 59 | ; 60 | 61 | //_dom.remove(); 62 | 63 | return _dom; 64 | }, 65 | }; 66 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/movie/u2mtv.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/28/028. 3 | */ 4 | 5 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 6 | 7 | declare const global: IGlobal; 8 | declare const greasemonkey: IGreasemonkey; 9 | declare const window: IWindow; 10 | declare const unsafeWindow: IWindow; 11 | declare const $: IJQueryStatic; 12 | declare const jQuery: IJQueryStatic; 13 | 14 | 'use strict'; 15 | 16 | let o: IDemo = { 17 | 18 | metadata: { 19 | include: [ 20 | 'http*://www.u2mtv.com/movie/*', 21 | ], 22 | match: [ 23 | '*://www.u2mtv.com/*', 24 | ], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | const { debounce } = require('throttle-debounce'); 47 | const { throttle } = require('throttle-debounce'); 48 | 49 | $('#movie_grid') 50 | .on('DOMNodeInserted', debounce(100, function () 51 | { 52 | $('body').triggerHandler('load.ready'); 53 | })) 54 | ; 55 | 56 | $('body') 57 | .on('load.ready', debounce(100, function () 58 | { 59 | _uf_dom_filter_link([ 60 | '.og-expanded .og-expander a', 61 | '#movie_grid a', 62 | ].join(',')) 63 | .prop('target', '_blank') 64 | ; 65 | })) 66 | .triggerHandler('load.ready') 67 | ; 68 | }, 69 | 70 | adblock(_url_obj = global._url_obj) 71 | { 72 | // 73 | }, 74 | 75 | clearly(_url_obj = global._url_obj, _dom_list = null) 76 | { 77 | let _dom = $(_dom_list); 78 | 79 | _dom = _dom 80 | .add([ 81 | // 82 | ].join()) 83 | ; 84 | 85 | return _dom; 86 | }, 87 | 88 | }; 89 | 90 | export = o as IDemo; 91 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/qoo-app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/20/020. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://*.qoo-app.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/qoo-app\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link([ 30 | '.app-item a', 31 | ].join()) 32 | .prop('target', '_blank') 33 | ; 34 | 35 | lazyload(_url_obj); 36 | }, 37 | 38 | adblock(_url_obj = global._url_obj) 39 | { 40 | 41 | }, 42 | 43 | clearly(_url_obj = global._url_obj, _dom_list = null) 44 | { 45 | let _dom = $(_dom_list); 46 | 47 | _dom = _dom 48 | .add([ 49 | 50 | ].join()) 51 | ; 52 | 53 | //_dom.remove(); 54 | 55 | return _dom; 56 | }, 57 | }; 58 | 59 | function lazyload(_url_obj) 60 | { 61 | $('img[data-src]').attr('src', function (i, old) 62 | { 63 | if (old != $(this).attr('data-src')) 64 | { 65 | return $(this).attr('data-src'); 66 | } 67 | }) 68 | } 69 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/qtfy.eu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/10/15/015. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://qtfy.eu/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | let ret; 19 | 20 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 21 | { 22 | return true; 23 | } 24 | //console.debug(777, ret); 25 | 26 | /* 27 | if (_url_obj.host.match(/3dmgame\.com/)) 28 | { 29 | return true; 30 | } 31 | */ 32 | 33 | return false; 34 | }, 35 | 36 | main(_url_obj = global._url_obj) 37 | { 38 | const { debounce } = require('throttle-debounce'); 39 | const { throttle } = require('throttle-debounce'); 40 | 41 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 42 | _uf_dom_filter_link([ 43 | '#main-layout .class-bar a', 44 | ].join()) 45 | .prop('target', '_blank') 46 | ; 47 | 48 | $(window) 49 | .on('load.ready', debounce(6000, function () 50 | { 51 | module.exports.adblock(_url_obj); 52 | })) 53 | .on('load.ready', throttle(1000, function () 54 | { 55 | module.exports.adblock(_url_obj); 56 | })) 57 | .on('load.ready', function () 58 | { 59 | module.exports.adblock(_url_obj); 60 | }) 61 | .triggerHandler('load.ready') 62 | ; 63 | }, 64 | 65 | adblock(_url_obj = global._url_obj) 66 | { 67 | $('.code-block').filter(':has(> .adblock_wrapper), :has(> .adblock_wrapper)').remove(); 68 | }, 69 | 70 | clearly(_url_obj = global._url_obj, _dom_list = null) 71 | { 72 | let _dom = $(_dom_list); 73 | 74 | _dom = _dom 75 | .add([].join()) 76 | ; 77 | 78 | //_dom.remove(); 79 | 80 | return _dom; 81 | }, 82 | }; 83 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/taptap.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://www.taptap.com/*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | _uf_dom_filter_link([ 47 | '.moment-content-box a', 48 | '.bbcode-body a', 49 | ]) 50 | .prop('target', '_blank') 51 | ; 52 | 53 | greasemonkey.GM_addStyle([ 54 | `body, html, :root { font-size: 9pt; font-family: initial; }`, 55 | `.bbcode-body, .topic-comments-list-v2 .item-text-body, .posts-item-v2 .item-text-header .taptap-user-name, topic-info, .comment-item__toggle-reply-list, .topic-v2-container .author-wrap .topic-info, .common-v2-list .content-text { font-size: 1rem; }`, 56 | ]); 57 | }, 58 | 59 | adblock(_url_obj = global._url_obj) 60 | { 61 | // 62 | }, 63 | 64 | clearly(_url_obj = global._url_obj, _dom_list = null) 65 | { 66 | let _dom = $(_dom_list); 67 | 68 | _dom = _dom 69 | .add($('.topic-v2-container').parentsUntil('body').addBack().siblings()) 70 | .add([ 71 | '.btn[data-taptap-ajax="follow"]', 72 | '.post-item__text-footer button, .vote-up', 73 | '.post-bbcode-form, .tab-bar-box, .topic-operations__bottom', 74 | '.topic-operations__right-content', 75 | '#post-bbcode-form', 76 | ].join()) 77 | ; 78 | 79 | return _dom; 80 | }, 81 | 82 | }; 83 | 84 | export = o as IDemo; 85 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/acg/vsgames.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/4/004. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://gw2.vsgames.cn/*', 12 | 'http*://*.vsgames.cn/*', 13 | ], 14 | exclude: [], 15 | }, 16 | 17 | test(_url_obj = global._url_obj) 18 | { 19 | if (_url_obj.host.match(/vsgames\.cn/)) 20 | { 21 | return true; 22 | } 23 | 24 | return false; 25 | }, 26 | 27 | main(_url_obj = global._url_obj) 28 | { 29 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 30 | _uf_dom_filter_link('') 31 | .prop('target', '_blank') 32 | ; 33 | }, 34 | 35 | adblock(_url_obj = global._url_obj) 36 | { 37 | 38 | }, 39 | 40 | clearly(_url_obj = global._url_obj, _dom_list = null) 41 | { 42 | let _dom = $(_dom_list); 43 | 44 | _dom = _dom 45 | .add($('#content').parentsUntil('body').addBack().siblings()) 46 | .add($('#main').appendTo('body').siblings()) 47 | .add([ 48 | '.btn-new-topic, .reply-user-avatar, #replytopic, #footer', 49 | ].join()) 50 | ; 51 | 52 | //_dom.remove(); 53 | 54 | return _dom; 55 | }, 56 | }; 57 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/adult/up01.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/24/024. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.up01.cc/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/up01\.cc/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | if (adult_check(_url_obj)) 29 | { 30 | return true; 31 | } 32 | 33 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 34 | _uf_dom_filter_link('') 35 | .prop('target', '_blank') 36 | ; 37 | }, 38 | 39 | adblock(_url_obj = global._url_obj) 40 | { 41 | 42 | }, 43 | 44 | clearly(_url_obj = global._url_obj, _dom_list = null) 45 | { 46 | let _dom = $(_dom_list); 47 | 48 | _dom = _dom 49 | .add([ 50 | 51 | ].join()) 52 | ; 53 | 54 | //_dom.remove(); 55 | 56 | return _dom; 57 | }, 58 | }; 59 | 60 | function adult_check(_url_obj = global._url_obj) 61 | { 62 | let _a = $('#forbid #agree, .adult a.btn.btn-pink'); 63 | 64 | if (_a.length) 65 | { 66 | _a[0].click(); 67 | 68 | return true; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/anti-adblock/epinv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/23/023. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.epinv.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/epinv\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | module.exports.adblock(_url_obj); 29 | }, 30 | 31 | adblock(_url_obj = global._url_obj) 32 | { 33 | $(window) 34 | .on('load.adblock', function (event) 35 | { 36 | if ($('#epd .danger').length) 37 | { 38 | $('#epd') 39 | .not('[data-done]') 40 | .attr('data-done', true) 41 | .html(`下载地址:提取下载地址列表`) 42 | ; 43 | 44 | $('#epd > a[href*="javascript"]').eq(0).click(); 45 | } 46 | }) 47 | .triggerHandler('load.adblock') 48 | ; 49 | }, 50 | 51 | clearly(_url_obj = global._url_obj, _dom_list = null) 52 | { 53 | let _dom = $(_dom_list); 54 | 55 | _dom = _dom 56 | .add([].join()) 57 | ; 58 | 59 | //_dom.remove(); 60 | 61 | return _dom; 62 | }, 63 | }; 64 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/art/danbooru.donmai.us.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://danbooru.donmai.us/*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | _uf_dom_filter_link([ 47 | '#posts-container .post-preview a', 48 | ].join(',')) 49 | .prop('target', '_blank') 50 | ; 51 | 52 | $('#image-container #image').attr('src', function (i, old) 53 | { 54 | $(this).prop('lowsrc', old); 55 | 56 | return old 57 | .replace(/\/sample\//, '/') 58 | .replace(/_sample-/, '_') 59 | ; 60 | }); 61 | }, 62 | 63 | adblock(_url_obj = global._url_obj) 64 | { 65 | // 66 | }, 67 | 68 | clearly(_url_obj = global._url_obj, _dom_list = null) 69 | { 70 | let _dom = $(_dom_list); 71 | 72 | _dom = _dom 73 | .add([ 74 | // 75 | ].join()) 76 | ; 77 | 78 | return _dom; 79 | }, 80 | 81 | }; 82 | 83 | export = o as IDemo; 84 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/art/deviantart.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/24/024. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://*.deviantart.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/deviantart\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('') 30 | .prop('target', '_blank') 31 | ; 32 | 33 | const keycodes = require('keycodes'); 34 | const _uf_done = require('root/lib/event/done'); 35 | 36 | $(window) 37 | .on('keydown.page', require('root/lib/jquery/event/hotkey').packEvent(function (event) 38 | { 39 | switch (event.which) 40 | { 41 | case keycodes('pageup'): 42 | case keycodes('left'): 43 | 44 | var _a = $('#overhead a.minibrowse_prev:not(.disabled)'); 45 | 46 | if (_a.length) 47 | { 48 | _uf_done(event); 49 | _a[0].click(); 50 | } 51 | 52 | break; 53 | case keycodes('pagedown'): 54 | case keycodes('right'): 55 | 56 | var _a = $('#overhead a.minibrowse_next:not(.disabled)'); 57 | 58 | if (_a.length) 59 | { 60 | _uf_done(event); 61 | _a[0].click(); 62 | } 63 | 64 | break; 65 | } 66 | })) 67 | ; 68 | }, 69 | 70 | adblock(_url_obj = global._url_obj) 71 | { 72 | 73 | }, 74 | 75 | clearly(_url_obj = global._url_obj, _dom_list = null) 76 | { 77 | let _dom = $(_dom_list); 78 | 79 | _dom = _dom 80 | .add([ 81 | 82 | ].join()) 83 | ; 84 | 85 | //_dom.remove(); 86 | 87 | return _dom; 88 | }, 89 | }; 90 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/art/pixivision.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://www.pixivision.net/*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | _uf_dom_filter_link([ 47 | '.article-card-container a', 48 | ].join(',')) 49 | .prop('target', '_blank') 50 | ; 51 | 52 | $('a[href*="https://www.pixiv.net/member.php"]').prop('href', function (i, old) 53 | { 54 | return old.replace(/member\.php\?id=/, 'member_illust.php?id='); 55 | }); 56 | }, 57 | 58 | adblock(_url_obj = global._url_obj) 59 | { 60 | // 61 | }, 62 | 63 | clearly(_url_obj = global._url_obj, _dom_list = null) 64 | { 65 | let _dom = $(_dom_list); 66 | 67 | _dom = _dom 68 | .add([ 69 | // 70 | ].join()) 71 | ; 72 | 73 | return _dom; 74 | }, 75 | 76 | }; 77 | 78 | export = o as IDemo; 79 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/bbs/ptt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/19/019. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.ptt.cc/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/ptt\.cc/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('') 30 | .prop('target', '_blank') 31 | ; 32 | 33 | ask_over18(_url_obj); 34 | }, 35 | 36 | adblock(_url_obj = global._url_obj) 37 | { 38 | 39 | }, 40 | 41 | clearly(_url_obj = global._url_obj) 42 | { 43 | 44 | }, 45 | }; 46 | 47 | function ask_over18(_url_obj = global._url_obj) 48 | { 49 | let _form = $('form[action*="ask"] :submit[name="yes"]'); 50 | 51 | if (_form.length) 52 | { 53 | _form[0].click(); 54 | 55 | return true; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/blog/blog.xuite.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://blog.xuite.net/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/blog\.xuite\.net/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('.blogbody a') 30 | .prop('target', '_blank') 31 | ; 32 | 33 | lazyload(_url_obj) 34 | }, 35 | 36 | adblock(_url_obj = global._url_obj) 37 | { 38 | 39 | }, 40 | 41 | clearly(_url_obj = global._url_obj, _dom_list = null) 42 | { 43 | let _dom = $(_dom_list); 44 | 45 | _dom = _dom 46 | .add($('.ArticleContent').parentsUntil('body').addBack().siblings()) 47 | .add([ 48 | 'script, body :hidden', 49 | 50 | '.bookmark.push, #facebook-like-bottom, .fb-comments, .item_trackBack', 51 | 52 | '#sidebarTreeStyle, .selectbar, .commentbutton-menu, .page', 53 | 54 | 'link[rel="stylesheet"]', 55 | ].join()) 56 | ; 57 | 58 | $('.blogrank apan[class]').removeAttr('class'); 59 | 60 | $('.ArticleContent') 61 | .css({ 62 | 'max-width': 700, 63 | margin: 'auto', 64 | }) 65 | ; 66 | 67 | //_dom.remove(); 68 | 69 | return _dom; 70 | }, 71 | }; 72 | 73 | function lazyload(_url_obj) 74 | { 75 | $('img.lazyload[data-original]') 76 | .not('[data-done]') 77 | .attr('data-done', true) 78 | .each(function () 79 | { 80 | let img = $(this); 81 | 82 | if (img.attr('src') != img.attr('data-original')) 83 | { 84 | img 85 | .attr('src', img.attr('data-original')) 86 | .removeAttr('lazyload') 87 | ; 88 | } 89 | }) 90 | ; 91 | } 92 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/blog/dulfy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/27/027. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://dulfy.net/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/dulfy\.net/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('article .post-content a, .post-title a, a.more-link') 30 | .prop('target', '_blank') 31 | ; 32 | 33 | img_thumb(_url_obj); 34 | }, 35 | 36 | adblock(_url_obj = global._url_obj) 37 | { 38 | 39 | }, 40 | 41 | clearly(_url_obj = global._url_obj, _dom_list = null) 42 | { 43 | const greasemonkey = require('root/lib/greasemonkey/index'); 44 | 45 | let _dom = $(_dom_list); 46 | 47 | _dom = _dom 48 | .add($('#content article.post').parentsUntil('body').addBack().siblings().not('#content article.post, #disqus_thread')) 49 | .add([ 50 | '.author-avatar', 51 | '#disqus_thread', 52 | ].join()) 53 | ; 54 | 55 | $('#content article.post .embed-youtube').removeClass('embed-youtube'); 56 | $('#body').removeAttr('id'); 57 | 58 | greasemonkey.GM_addStyle([ 59 | 'body, #body { background: none !important; }', 60 | ].join('')); 61 | 62 | //_dom.remove(); 63 | 64 | return _dom; 65 | }, 66 | }; 67 | 68 | function img_thumb() 69 | { 70 | $('article .post-content img') 71 | .prop('src', function (i, old) 72 | { 73 | return old.replace(/_thumb\./, '.'); 74 | }) 75 | ; 76 | } 77 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/blog/jianshu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/5/005. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.jianshu.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/jianshu\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('') 30 | .prop('target', '_blank') 31 | ; 32 | }, 33 | 34 | adblock(_url_obj = global._url_obj) 35 | { 36 | 37 | }, 38 | 39 | clearly(_url_obj = global._url_obj, _dom_list = null) 40 | { 41 | let _dom = $(_dom_list); 42 | 43 | _dom = _dom 44 | .add($('.article').parentsUntil('body').addBack().siblings()) 45 | .add([ 46 | '.follow, .avatar img, .new-comment, .iconfont, .tool-group', 47 | ].join()) 48 | ; 49 | 50 | $('#comment-list, .comment-list').appendTo('.post'); 51 | 52 | //_dom.remove(); 53 | 54 | return _dom; 55 | }, 56 | }; 57 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/blog/juejin.im.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/10/29/029. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://juejin.im/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | let ret; 19 | 20 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 21 | { 22 | return true; 23 | } 24 | //console.debug(777, ret); 25 | 26 | /* 27 | if (_url_obj.host.match(/3dmgame\.com/)) 28 | { 29 | return true; 30 | } 31 | */ 32 | 33 | return false; 34 | }, 35 | 36 | main(_url_obj = global._url_obj) 37 | { 38 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 39 | _uf_dom_filter_link([ 40 | 41 | ].join()) 42 | .prop('target', '_blank') 43 | ; 44 | 45 | $(window) 46 | .on('load.ready', function () 47 | { 48 | 49 | }) 50 | .triggerHandler('load.ready') 51 | ; 52 | 53 | this.adblock(_url_obj); 54 | }, 55 | 56 | adblock(_url_obj = global._url_obj) 57 | { 58 | require('root/lib/greasemonkey/index') 59 | .GM_addStyle([ 60 | '.container.entry-view .show-full { display: none !important; }', 61 | '.container.entry-view .show-full-block { display: none !important; }', 62 | '.post-content-container.hidden { max-height: auto; overflow: visible }', 63 | ].join('')) 64 | ; 65 | }, 66 | 67 | clearly(_url_obj = global._url_obj, _dom_list = null) 68 | { 69 | let _dom = $(_dom_list); 70 | 71 | _dom = _dom 72 | .add([ 73 | 74 | ].join()) 75 | ; 76 | 77 | //_dom.remove(); 78 | 79 | return _dom; 80 | }, 81 | }; 82 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/blog/oneapm.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/2/002. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://blog.oneapm.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/blog\.oneapm\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('') 30 | .prop('target', '_blank') 31 | ; 32 | }, 33 | 34 | adblock(_url_obj = global._url_obj) 35 | { 36 | 37 | }, 38 | 39 | clearly(_url_obj = global._url_obj, _dom_list = null) 40 | { 41 | let _dom = $(_dom_list); 42 | 43 | _dom = _dom 44 | .add($('#main').parentsUntil('body').addBack().siblings()) 45 | .add([ 46 | '.details .readNum, .details .commentNum, .post_info .iconfont', 47 | '.msgcontainer, #divSubscibe', 48 | ].join()) 49 | ; 50 | 51 | require('root/lib/greasemonkey/index') 52 | .GM_addStyle([ 53 | '#content.with-header-fix { padding-top: 0; }', 54 | ].join('')) 55 | ; 56 | 57 | //_dom.remove(); 58 | 59 | return _dom; 60 | }, 61 | }; 62 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/blog/steachs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/27/027. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://steachs.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/steachs\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('article .post-content a, .post-title a, a.more-link') 30 | .prop('target', '_blank') 31 | ; 32 | 33 | img_thumb(_url_obj); 34 | }, 35 | 36 | adblock(_url_obj = global._url_obj) 37 | { 38 | 39 | }, 40 | 41 | clearly(_url_obj = global._url_obj, _dom_list = null) 42 | { 43 | const greasemonkey = require('root/lib/greasemonkey/index'); 44 | 45 | let _dom = $(_dom_list); 46 | 47 | _dom = _dom 48 | .add($('#content article, #contents article').parentsUntil('body').addBack().siblings().not('article')) 49 | .add([ 50 | '#share_button, .icon-home-outline, .avatar, .author_links, #post_comment, #respond', 51 | '#disqus_thread', 52 | ].join()) 53 | ; 54 | 55 | $('#content article.post .embed-youtube').removeClass('embed-youtube'); 56 | $('#body').removeAttr('id'); 57 | 58 | greasemonkey.GM_addStyle([ 59 | 'body, #body { background: none !important; }', 60 | ].join('')); 61 | 62 | //_dom.remove(); 63 | 64 | return _dom; 65 | }, 66 | }; 67 | 68 | function img_thumb() 69 | { 70 | $('article .post-content img') 71 | .prop('src', function (i, old) 72 | { 73 | return old.replace(/_thumb\./, '.'); 74 | }) 75 | ; 76 | } 77 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/code/gitee.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | // @ts-ignore 8 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 9 | 10 | declare const global: IGlobal; 11 | declare const greasemonkey: IGreasemonkey; 12 | declare const window: IWindow; 13 | declare const unsafeWindow: IWindow; 14 | declare const $: IJQueryStatic; 15 | declare const jQuery: IJQueryStatic; 16 | 17 | let o: IDemo = { 18 | 19 | //priority: 100, 20 | 21 | metadata: { 22 | include: [ 23 | 'http*://gitee.com/*', 24 | 'http*://gitee.com/api/*', 25 | 'http*://gitee.com/oauth/applications/*', 26 | ], 27 | match: [], 28 | nomatch: [], 29 | exclude: [], 30 | 31 | grant: [], 32 | }, 33 | 34 | test(_url_obj = global._url_obj) 35 | { 36 | let ret; 37 | 38 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 39 | { 40 | return true; 41 | } 42 | 43 | return false; 44 | }, 45 | 46 | async main(_url_obj = global._url_obj) 47 | { 48 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 49 | 50 | if (_url_obj.path.match(/\/api\//)) 51 | { 52 | $('.parameters :input[autocomplete], .parameters form').prop('autocomplete', 'on'); 53 | } 54 | 55 | $(window) 56 | .on('load', function () 57 | { 58 | _uf_dom_filter_link([ 59 | '#users-events .event-group a', 60 | 'a.view-file, .git-commit-meta a', 61 | ].join(',')) 62 | .prop('target', '_blank') 63 | ; 64 | 65 | $('.edit_oauth_application :input[disabled]') 66 | //.filter('#secret, #uid') 67 | .removeAttr('disabled') 68 | .prop('readonly', 'true') 69 | ; 70 | }) 71 | .triggerHandler('load') 72 | ; 73 | }, 74 | 75 | adblock(_url_obj = global._url_obj) 76 | { 77 | // 78 | }, 79 | 80 | clearly(_url_obj = global._url_obj, _dom_list = null) 81 | { 82 | let _dom = $(_dom_list); 83 | 84 | _dom = _dom 85 | .add([ 86 | 87 | ].join()) 88 | ; 89 | 90 | return _dom; 91 | }, 92 | 93 | }; 94 | 95 | export = o as IDemo; 96 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/code/greasyfork.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/1/001. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://greasyfork.org/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/greasyfork\.org/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('#browse-script-list article a') 30 | .prop('target', '_blank') 31 | ; 32 | }, 33 | 34 | adblock(_url_obj = global._url_obj) 35 | { 36 | 37 | }, 38 | 39 | clearly(_url_obj = global._url_obj, _dom_list = null) 40 | { 41 | let _dom = $(_dom_list); 42 | 43 | _dom = _dom 44 | .add([ 45 | 46 | ].join()) 47 | ; 48 | 49 | //_dom.remove(); 50 | 51 | return _dom; 52 | }, 53 | }; 54 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/code/segmentfault.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://segmentfault.com/*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | _uf_dom_filter_link([ 47 | // 48 | ].join(',')) 49 | .prop('target', '_blank') 50 | ; 51 | 52 | $(window).scrollTo('.container'); 53 | }, 54 | 55 | adblock(_url_obj = global._url_obj) 56 | { 57 | // 58 | }, 59 | 60 | clearly(_url_obj = global._url_obj, _dom_list = null) 61 | { 62 | let _dom = $(_dom_list); 63 | 64 | _dom = _dom 65 | .add([ 66 | '#footer, #goToAnswerEditor, .widget-codetool, .container.nav', 67 | 68 | '.post-topheader__side, .widget-share__full', 69 | ].join()) 70 | ; 71 | 72 | return _dom; 73 | }, 74 | 75 | }; 76 | 77 | export = o as IDemo; 78 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/code/sourceforge.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/27/027. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | //'http*://sourceforge.net/*', 12 | 'http*://sourceforge.net/projects/*/files/*', 13 | ], 14 | exclude: [], 15 | }, 16 | 17 | test(_url_obj = global._url_obj) 18 | { 19 | if (_url_obj.host.match(/sourceforge\.net/)) 20 | { 21 | return true; 22 | } 23 | 24 | return false; 25 | }, 26 | 27 | main(_url_obj = global._url_obj) 28 | { 29 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 30 | _uf_dom_filter_link('#files_list .file a.name, #page-body .download-bar a') 31 | .prop('target', '_blank') 32 | ; 33 | 34 | $(window).scrollTo('#page-header'); 35 | }, 36 | 37 | adblock(_url_obj = global._url_obj) 38 | { 39 | 40 | }, 41 | 42 | clearly(_url_obj = global._url_obj) 43 | { 44 | let _dom = $(); 45 | 46 | _dom = _dom 47 | .add([ 48 | 49 | ].join()) 50 | ; 51 | 52 | _dom.remove(); 53 | 54 | return _dom; 55 | }, 56 | }; 57 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/comic/backup/lhscan.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://lhscan.net/*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const { debounce } = require('throttle-debounce'); 46 | const { throttle } = require('throttle-debounce'); 47 | const _uf_fixsize2 = require('root/lib/dom/img/size')._uf_fixsize2; 48 | const keycodes = require('keycodes'); 49 | const _uf_done = require('root/lib/event/done'); 50 | 51 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 52 | _uf_dom_filter_link([ 53 | // 54 | ]) 55 | .prop('target', '_blank') 56 | ; 57 | 58 | const _img_selector = '.chapter-content .chapter-img'; 59 | let _img = $(_img_selector); 60 | 61 | $(window) 62 | .on('load.ready', throttle(300, function () 63 | { 64 | $(window).triggerHandler('resize.img'); 65 | 66 | // @ts-ignore 67 | $(window).scrollTo('.chapter-content, .info-manga .well:eq(0)'); 68 | 69 | })) 70 | .on('resize.img', throttle(300, function () 71 | { 72 | _uf_fixsize2(_img, window, 1); 73 | })) 74 | .triggerHandler('load.ready') 75 | ; 76 | }, 77 | 78 | adblock(_url_obj = global._url_obj) 79 | { 80 | // 81 | }, 82 | 83 | clearly(_url_obj = global._url_obj, _dom_list = null) 84 | { 85 | let _dom = $(_dom_list); 86 | 87 | _dom = _dom 88 | .add([ 89 | // 90 | ].join()) 91 | ; 92 | 93 | return _dom; 94 | }, 95 | 96 | }; 97 | 98 | export = o as IDemo; 99 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/comic/manben.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/19/019. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.manben.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/manben\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const keycodes = require('keycodes'); 29 | const _uf_done = require('root/lib/event/done'); 30 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 31 | 32 | $(window) 33 | .on('keydown.page', require('root/lib/jquery/event/hotkey').packEvent(function (event) 34 | { 35 | switch (event.which) 36 | { 37 | case keycodes('pageup'): 38 | case keycodes('left'): 39 | var _a = $('#crossLeft'); 40 | 41 | if (_a.length) 42 | { 43 | _uf_done(event); 44 | _a[0].click(); 45 | } 46 | 47 | break; 48 | case keycodes('pagedown'): 49 | case keycodes('right'): 50 | var _a = $('#crossRight'); 51 | 52 | if (_a.length) 53 | { 54 | _uf_done(event); 55 | _a[0].click(); 56 | } 57 | 58 | break; 59 | } 60 | })) 61 | ; 62 | }, 63 | 64 | adblock(_url_obj = global._url_obj) 65 | { 66 | 67 | }, 68 | 69 | clearly(_url_obj = global._url_obj) 70 | { 71 | let _dom = $(); 72 | 73 | _dom = _dom 74 | .add([ 75 | 76 | ].join()) 77 | ; 78 | 79 | _dom.remove(); 80 | 81 | return _dom; 82 | }, 83 | }; 84 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/content/farm/fun01.cc.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/6/006. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.fun01.cc/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | let ret; 19 | 20 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 21 | { 22 | return true; 23 | } 24 | //console.debug(777, ret); 25 | 26 | /* 27 | if (_url_obj.host.match(/3dmgame\.com/)) 28 | { 29 | return true; 30 | } 31 | */ 32 | 33 | return false; 34 | }, 35 | 36 | main(_url_obj = global._url_obj) 37 | { 38 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 39 | _uf_dom_filter_link([].join()) 40 | .prop('target', '_blank') 41 | ; 42 | 43 | const _uf_disable_nocontextmenu = require('root/lib/dom/disable_nocontextmenu') 44 | ._uf_disable_nocontextmenu2(2, '.postDetail') 45 | ; 46 | }, 47 | 48 | adblock(_url_obj = global._url_obj) 49 | { 50 | 51 | }, 52 | 53 | clearly(_url_obj = global._url_obj, _dom_list = null) 54 | { 55 | let _dom = $(_dom_list); 56 | 57 | _dom = _dom 58 | .add([ 59 | '.doLogin, .avatar', 60 | ].join()) 61 | .add($('.postDetail').parentsUntil('body').addBack().siblings()) 62 | .add($('.postDetail .content').nextAll()) 63 | .add($('.postDetail #postEnd').nextAll()) 64 | ; 65 | 66 | require('root/lib/greasemonkey/index') 67 | .GM_addStyle([ 68 | `body { background: none; }`, 69 | ].join('')) 70 | ; 71 | 72 | //_dom.remove(); 73 | 74 | return _dom; 75 | }, 76 | }; 77 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/dict/.gitignore: -------------------------------------------------------------------------------- 1 | demo.d.ts 2 | *.js 3 | !/index.js 4 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/global/mediawiki.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/31/031. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | priority: 100, 10 | 11 | script: true, 12 | 13 | metadata: { 14 | include: [ 15 | //'http*://*.wikipedia.org/*', 16 | ], 17 | exclude: [], 18 | }, 19 | 20 | test(_url_obj = global._url_obj) 21 | { 22 | if ($('body.mediawiki').length) 23 | { 24 | return 2; 25 | } 26 | 27 | return false; 28 | }, 29 | 30 | main(_url_obj = global._url_obj) 31 | { 32 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 33 | _uf_dom_filter_link('a.external') 34 | .prop('target', '_blank') 35 | ; 36 | }, 37 | 38 | adblock(_url_obj = global._url_obj) 39 | { 40 | 41 | }, 42 | 43 | clearly(_url_obj = global._url_obj, _dom_list = null) 44 | { 45 | const greasemonkey = require('root/lib/greasemonkey/index'); 46 | 47 | let _dom = $(_dom_list); 48 | 49 | _dom = _dom 50 | .add([ 51 | '.uls-settings-trigger, .wbc-editpage, .wb-langlinks-edit, .mw-editsection, #p-personal, #p-search', 52 | '#footer-icons, #footer-places, .mbox-image .image, #siteNotice', 53 | 54 | '#footer, #p-logo', 55 | ].join()) 56 | ; 57 | 58 | $('.collapseButton') 59 | .parents('tr') 60 | .siblings() 61 | .find(':hidden') 62 | .addBack() 63 | .show() 64 | ; 65 | 66 | greasemonkey.GM_addStyle([ 67 | 'div#column-content { background-image: none; }' 68 | ].join('')); 69 | 70 | image(_url_obj); 71 | 72 | //_dom.remove(); 73 | 74 | return _dom; 75 | }, 76 | }; 77 | 78 | function image(_url_obj) 79 | { 80 | $('#mw-content-text img') 81 | .attr('src', function (i, old) 82 | { 83 | return old.replace(/(\/images)\/thumb\/([^\/]+\/[^\/]+)\/([^\/]+)\/.+$/, '$1/$2/$3'); 84 | }) 85 | ; 86 | } 87 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/global/pagination.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/22/022. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | priority: 0, 10 | 11 | script: true, 12 | 13 | metadata: { 14 | include: [ 15 | ], 16 | exclude: [], 17 | }, 18 | 19 | test(_url_obj = global._url_obj) 20 | { 21 | if ($('.pagination a[rel*="prev"], .pagination a[rel*="next"]').length) 22 | { 23 | return 2; 24 | } 25 | 26 | return false; 27 | }, 28 | 29 | main(_url_obj = global._url_obj) 30 | { 31 | require('root/lib/jquery/event').makeJQueryPlugin($, window); 32 | 33 | let _win = $(window); 34 | 35 | if (_win.eventExists('keydown')) 36 | { 37 | console.log(_win.events()); 38 | 39 | return false; 40 | } 41 | 42 | _win 43 | .on('keydown.page', require('root/lib/jquery/event/hotkey').packEvent(function (event) 44 | { 45 | const keycodes = require('keycodes'); 46 | const _uf_done = require('root/lib/event/done'); 47 | 48 | switch (event.which) 49 | { 50 | case keycodes('pageup'): 51 | case keycodes('left'): 52 | 53 | var _a = $('.pagination a[rel*="prev"]'); 54 | 55 | if (_a.length) 56 | { 57 | _uf_done(event); 58 | _a[0].click(); 59 | } 60 | else 61 | { 62 | console.log(event, _a); 63 | } 64 | 65 | break; 66 | case keycodes('pagedown'): 67 | case keycodes('right'): 68 | 69 | var _a = $('.pagination a[rel*="next"]'); 70 | 71 | if (_a.length) 72 | { 73 | _uf_done(event); 74 | _a[0].click(); 75 | } 76 | else 77 | { 78 | console.log(event, _a); 79 | } 80 | 81 | break; 82 | } 83 | })) 84 | ; 85 | }, 86 | 87 | adblock(_url_obj = global._url_obj) 88 | { 89 | 90 | }, 91 | 92 | clearly(_url_obj = global._url_obj, _dom_list = null) 93 | { 94 | let _dom = $(_dom_list); 95 | 96 | _dom = _dom 97 | .add([ 98 | 99 | ].join()) 100 | ; 101 | 102 | //_dom.remove(); 103 | 104 | return _dom; 105 | }, 106 | }; 107 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/global/pagination/page.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/22/022. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | priority: 0, 10 | 11 | script: true, 12 | 13 | metadata: { 14 | include: [ 15 | ], 16 | exclude: [], 17 | }, 18 | 19 | test(_url_obj = global._url_obj) 20 | { 21 | if ($('.pagination > .page-prev, .pagination > .page-next').length) 22 | { 23 | return 2; 24 | } 25 | 26 | return false; 27 | }, 28 | 29 | main(_url_obj = global._url_obj) 30 | { 31 | require('root/lib/jquery/event').makeJQueryPlugin($, window); 32 | 33 | let _win = $(window); 34 | 35 | if (_win.eventExists('keydown')) 36 | { 37 | console.log(_win.events()); 38 | 39 | return false; 40 | } 41 | 42 | _win 43 | .on('keydown.page', require('root/lib/jquery/event/hotkey').packEvent(function (event) 44 | { 45 | const keycodes = require('keycodes'); 46 | const _uf_done = require('root/lib/event/done'); 47 | 48 | switch (event.which) 49 | { 50 | case keycodes('pageup'): 51 | case keycodes('left'): 52 | 53 | var _a = $('.pagination > .page-prev'); 54 | 55 | if (_a.length) 56 | { 57 | _uf_done(event); 58 | _a[0].click(); 59 | } 60 | else 61 | { 62 | console.log(event, _a); 63 | } 64 | 65 | break; 66 | case keycodes('pagedown'): 67 | case keycodes('right'): 68 | 69 | var _a = $('.pagination > .page-next'); 70 | 71 | if (_a.length) 72 | { 73 | _uf_done(event); 74 | _a[0].click(); 75 | } 76 | else 77 | { 78 | console.log(event, _a); 79 | } 80 | 81 | break; 82 | } 83 | })) 84 | ; 85 | }, 86 | 87 | adblock(_url_obj = global._url_obj) 88 | { 89 | 90 | }, 91 | 92 | clearly(_url_obj = global._url_obj, _dom_list = null) 93 | { 94 | let _dom = $(_dom_list); 95 | 96 | _dom = _dom 97 | .add([ 98 | 99 | ].join()) 100 | ; 101 | 102 | //_dom.remove(); 103 | 104 | return _dom; 105 | }, 106 | }; 107 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/global/pagination/pagination.active.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/22/022. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | priority: 0, 10 | 11 | script: true, 12 | 13 | metadata: { 14 | include: [ 15 | ], 16 | exclude: [], 17 | }, 18 | 19 | test(_url_obj = global._url_obj) 20 | { 21 | if ($('ul.pagination > .active').length) 22 | { 23 | return 2; 24 | } 25 | 26 | return false; 27 | }, 28 | 29 | main(_url_obj = global._url_obj) 30 | { 31 | require('root/lib/jquery/event').makeJQueryPlugin($, window); 32 | 33 | let _win = $(window); 34 | 35 | if (_win.eventExists('keydown')) 36 | { 37 | console.log(_win.events()); 38 | 39 | return false; 40 | } 41 | 42 | _win 43 | .on('keydown.page', require('root/lib/jquery/event/hotkey').packEvent(function (event) 44 | { 45 | const keycodes = require('keycodes'); 46 | const _uf_done = require('root/lib/event/done'); 47 | 48 | switch (event.which) 49 | { 50 | case keycodes('pageup'): 51 | case keycodes('left'): 52 | 53 | var _a = $('ul.pagination > .active').prev('li').find('a'); 54 | 55 | if (_a.length) 56 | { 57 | _uf_done(event); 58 | _a[0].click(); 59 | } 60 | else 61 | { 62 | console.log(event, _a); 63 | } 64 | 65 | break; 66 | case keycodes('pagedown'): 67 | case keycodes('right'): 68 | 69 | var _a = $('ul.pagination > .active').next('li').find('a'); 70 | 71 | if (_a.length) 72 | { 73 | _uf_done(event); 74 | _a[0].click(); 75 | } 76 | else 77 | { 78 | console.log(event, _a); 79 | } 80 | 81 | break; 82 | } 83 | })) 84 | ; 85 | }, 86 | 87 | adblock(_url_obj = global._url_obj) 88 | { 89 | 90 | }, 91 | 92 | clearly(_url_obj = global._url_obj, _dom_list = null) 93 | { 94 | let _dom = $(_dom_list); 95 | 96 | _dom = _dom 97 | .add([ 98 | 99 | ].join()) 100 | ; 101 | 102 | //_dom.remove(); 103 | 104 | return _dom; 105 | }, 106 | }; 107 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/global/pagination/srp_pagination.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | priority: 0, 10 | 11 | script: true, 12 | 13 | metadata: { 14 | include: [ 15 | ], 16 | exclude: [], 17 | }, 18 | 19 | test(_url_obj = global._url_obj) 20 | { 21 | if ($('#srp_pagination').length) 22 | { 23 | return 2; 24 | } 25 | 26 | return false; 27 | }, 28 | 29 | main(_url_obj = global._url_obj) 30 | { 31 | require('root/lib/jquery/event').makeJQueryPlugin($, window); 32 | 33 | let _win = $(window); 34 | 35 | if (_win.eventExists('keydown')) 36 | { 37 | console.log(_win.events()); 38 | 39 | return false; 40 | } 41 | 42 | _win 43 | .on('keydown.page', require('root/lib/jquery/event/hotkey').packEvent(function (event) 44 | { 45 | const _uf_done = require('root/lib/event/done'); 46 | const keycodes = require('keycodes'); 47 | 48 | switch (event.which) 49 | { 50 | case keycodes('pageup'): 51 | case keycodes('left'): 52 | var _a = $('#srp_pagination .pre-page a'); 53 | 54 | if (_a.length) 55 | { 56 | _uf_done(event); 57 | _a[0].click(); 58 | } 59 | 60 | break; 61 | case keycodes('pagedown'): 62 | case keycodes('right'): 63 | var _a = $('#srp_pagination .next-page a'); 64 | 65 | if (_a.length) 66 | { 67 | _uf_done(event); 68 | _a[0].click(); 69 | } 70 | 71 | break; 72 | } 73 | })) 74 | ; 75 | }, 76 | 77 | adblock(_url_obj = global._url_obj) 78 | { 79 | 80 | }, 81 | 82 | clearly(_url_obj = global._url_obj, _dom_list = null) 83 | { 84 | let _dom = $(_dom_list); 85 | 86 | _dom = _dom 87 | .add([ 88 | 89 | ].join()) 90 | ; 91 | 92 | //_dom.remove(); 93 | 94 | return _dom; 95 | }, 96 | }; 97 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/global/social.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | priority: 0, 10 | 11 | metadata: { 12 | include: [ 13 | ], 14 | exclude: [], 15 | }, 16 | 17 | test(_url_obj = global._url_obj) 18 | { 19 | return true; 20 | }, 21 | 22 | main(_url_obj = global._url_obj) 23 | { 24 | }, 25 | 26 | adblock(_url_obj = global._url_obj) 27 | { 28 | }, 29 | 30 | clearly(_url_obj = global._url_obj, _dom_list = null) 31 | { 32 | let _dom = $(_dom_list); 33 | 34 | _dom = _dom 35 | .add([ 36 | '#facebook-like-bottom, #fb-root', 37 | ].join()) 38 | ; 39 | 40 | //_dom.remove(); 41 | 42 | return _dom; 43 | }, 44 | }; 45 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/google/drive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/20/020. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | disable: true, 10 | 11 | metadata: { 12 | include: [ 13 | 'http*://drive.google.com/*', 14 | ], 15 | exclude: [], 16 | }, 17 | 18 | test(_url_obj = global._url_obj) 19 | { 20 | if (_url_obj.host.match(/drive\.google\.com/)) 21 | { 22 | return true; 23 | } 24 | 25 | return false; 26 | }, 27 | 28 | main(_url_obj = global._url_obj) 29 | { 30 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 31 | _uf_dom_filter_link([ 32 | 33 | ].join()) 34 | .prop('target', '_blank') 35 | ; 36 | 37 | require('root/lib/jquery/event/key').makeJQueryPlugin($, window); 38 | 39 | let _win = $(window); 40 | 41 | // TODO: fix me, this not work 42 | _win 43 | .on('keydown.page', '[role="dialog"], .a-b-lc.a-b-ta-lc, .a-b-ta-Ua', require('root/lib/jquery/event/hotkey').packEvent(function (event) 44 | { 45 | const keycodes = require('keycodes'); 46 | const _uf_done = require('root/lib/event/done'); 47 | 48 | switch (event.which) 49 | { 50 | case keycodes('pageup'): 51 | 52 | var _a = $('.a-b-Dd-d.a-b-d'); 53 | 54 | if (_a.length) 55 | { 56 | $(this).triggerKey(keycodes('left'), event.type); 57 | } 58 | else 59 | { 60 | console.log(event, _a); 61 | } 62 | 63 | break; 64 | case keycodes('pagedown'): 65 | 66 | var _a = $('.a-b-Zc-d.a-b-d'); 67 | 68 | if (_a.length) 69 | { 70 | $(this).triggerKey(keycodes('right'), event.type); 71 | } 72 | else 73 | { 74 | console.log(event, _a); 75 | } 76 | 77 | break; 78 | } 79 | })) 80 | ; 81 | }, 82 | 83 | adblock(_url_obj = global._url_obj) 84 | { 85 | 86 | }, 87 | 88 | clearly(_url_obj = global._url_obj, _dom_list = null) 89 | { 90 | let _dom = $(_dom_list); 91 | 92 | _dom = _dom 93 | .add([ 94 | 95 | ].join()) 96 | ; 97 | 98 | //_dom.remove(); 99 | 100 | return _dom; 101 | }, 102 | }; 103 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/lib/demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.3dmgame.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | let ret; 19 | 20 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 21 | { 22 | return true; 23 | } 24 | //console.debug(777, ret); 25 | 26 | /* 27 | if (_url_obj.host.match(/3dmgame\.com/)) 28 | { 29 | return true; 30 | } 31 | */ 32 | 33 | return false; 34 | }, 35 | 36 | main(_url_obj = global._url_obj) 37 | { 38 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 39 | _uf_dom_filter_link([ 40 | 41 | ].join()) 42 | .prop('target', '_blank') 43 | ; 44 | }, 45 | 46 | adblock(_url_obj = global._url_obj) 47 | { 48 | 49 | }, 50 | 51 | clearly(_url_obj = global._url_obj, _dom_list = null) 52 | { 53 | let _dom = $(_dom_list); 54 | 55 | _dom = _dom 56 | .add([ 57 | 58 | ].join()) 59 | ; 60 | 61 | //_dom.remove(); 62 | 63 | return _dom; 64 | }, 65 | }; 66 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/lib/metadata.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | module.exports.grant = [ 6 | 'GM_registerMenuCommand', 7 | 'GM_xmlhttpRequest', 8 | 'unsafeWindow', 9 | 'GM_deleteValue', 10 | 'GM_getValue', 11 | 'GM_listValues', 12 | 'GM_setValue', 13 | 'GM_openInTab', 14 | ]; 15 | 16 | module.exports.metadata = `// ==UserScript== 17 | // @name <%= pkg.name %> 18 | // @namespace bluelovers 19 | // 20 | // @description 各種網站 UX 優化 與 搭配某些插件/行為時的簡化動作 並且適合搭配 Scrapbook 擷取內容 21 | // 22 | // @version <%= pkg.version %> 23 | // 24 | // @grant <%= index.grant %> 25 | // g_r_a_n_t none 26 | // 27 | // @icon <%= index.icon %> 28 | // 29 | // @noframes 30 | // @encoding utf-8 31 | // 32 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 33 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 34 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/ux-tweak-sc.user.js 35 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/ux-tweak-sc.user.js 36 | // 37 | // @include <%= index.include %> 38 | // 39 | // @match <%= index.match %> 40 | // 41 | // @exclude <%= index.exclude %> 42 | // 43 | // ==/UserScript== 44 | `; 45 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/novel/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | *.js 3 | *.d.ts 4 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/novel/iqing.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | import { IDemo, IGlobal } from 'root/lib/core/demo'; 6 | 7 | declare const global: IGlobal; 8 | 9 | 'use strict'; 10 | 11 | let o: IDemo = { 12 | 13 | disable: true, 14 | 15 | metadata: { 16 | include: [], 17 | match: [ 18 | 'http*://*.iqing.com/*', 19 | 'http*://*.iqing.in/*', 20 | ], 21 | exclude: [], 22 | 23 | grant: [ 24 | 'GM_xmlhttpRequest', 25 | 'GM_getValue', 26 | 'GM_setValue', 27 | ], 28 | }, 29 | 30 | test(_url_obj = global._url_obj) 31 | { 32 | let ret; 33 | 34 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 35 | { 36 | return true; 37 | } 38 | 39 | return false; 40 | }, 41 | 42 | async main(_url_obj = global._url_obj) 43 | { 44 | await (new Promise(function (resolve, reject) 45 | { 46 | setTimeout(function () 47 | { 48 | resolve(); 49 | }, 1000); 50 | })); 51 | 52 | const GMApi = require('root/lib/greasemonkey/gm/api').GMApi; 53 | 54 | const TIMESTAMP_KEY = 'iqing_timestamp'; 55 | 56 | let _a; 57 | 58 | let _ok = false; 59 | 60 | let t = GMApi.getValue(TIMESTAMP_KEY, 0); 61 | let _do = null; 62 | 63 | if ((Date.now() - t) >= (10 * 60 * 1000)) 64 | { 65 | _do = true; 66 | } 67 | else 68 | { 69 | _do = false; 70 | 71 | console.info('[距離上次簽到]', (Date.now() - t) / 1000); 72 | } 73 | 74 | if (_do || 0) 75 | { 76 | const signin = require('root/lib/site/iqing/signin').default; 77 | 78 | await signin() 79 | .catch((err) => 80 | { 81 | console.error('[簽到錯誤]', err); 82 | }) 83 | .then(function (res) 84 | { 85 | GMApi.setValue(TIMESTAMP_KEY, Date.now()); 86 | 87 | console.log(res); 88 | }) 89 | ; 90 | } 91 | }, 92 | 93 | adblock(_url_obj = global._url_obj) 94 | { 95 | 96 | }, 97 | 98 | clearly(_url_obj = global._url_obj, _dom_list = null) 99 | { 100 | let _dom = $(_dom_list); 101 | 102 | _dom = _dom 103 | .add([ 104 | // 105 | ].join()) 106 | ; 107 | 108 | return _dom; 109 | }, 110 | 111 | }; 112 | 113 | export = o; 114 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/novel/lightnovel.cn.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://*.lightnovel.cn/*', 23 | 'http*://*.lightnovel.cn/*mod=viewthread*', 24 | ], 25 | match: [], 26 | nomatch: [], 27 | exclude: [], 28 | 29 | grant: [], 30 | }, 31 | 32 | test(_url_obj = global._url_obj) 33 | { 34 | let ret; 35 | 36 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 37 | { 38 | return true; 39 | } 40 | 41 | return false; 42 | }, 43 | 44 | async main(_url_obj = global._url_obj) 45 | { 46 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 47 | _uf_dom_filter_link([ 48 | // 49 | ]) 50 | .prop('target', '_blank') 51 | ; 52 | 53 | const copyonclick = require('root/lib/func/copy').copyonclick; 54 | 55 | let postlist = $('#postlist'); 56 | let posts = postlist.find('> div[id^="post_"]'); 57 | 58 | if (postlist.length && posts.length) 59 | { 60 | posts 61 | .each(function (index, element) 62 | { 63 | let _this = $(this); 64 | 65 | let target = $('[id^="postmessage_"]:eq(0)', _this).eq(0); 66 | 67 | $('i.pstatus', target).remove(); 68 | 69 | let button = $('COPY') 70 | .attr('onclick', copyonclick(target.attr('id'))) 71 | ; 72 | 73 | let authi = $('.plc .authi:eq(0)', _this) 74 | .append(button) 75 | ; 76 | 77 | console.log(authi, button); 78 | }) 79 | ; 80 | } 81 | }, 82 | 83 | adblock(_url_obj = global._url_obj) 84 | { 85 | // 86 | }, 87 | 88 | clearly(_url_obj = global._url_obj, _dom_list = null) 89 | { 90 | let _dom = $(_dom_list); 91 | 92 | _dom = _dom 93 | .add([ 94 | // 95 | ].join()) 96 | ; 97 | 98 | return _dom; 99 | }, 100 | 101 | }; 102 | 103 | export = o as IDemo; 104 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/shop/pchome.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/19/019. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://mall.pchome.com.tw/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/mall\.pchome\.com\.tw/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | 29 | }, 30 | 31 | adblock(_url_obj = global._url_obj) 32 | { 33 | 34 | }, 35 | 36 | clearly(_url_obj = global._url_obj) 37 | { 38 | let _dom = $(); 39 | 40 | _dom = _dom 41 | .add([ 42 | 43 | ].join()) 44 | ; 45 | 46 | _dom.remove(); 47 | 48 | return _dom; 49 | }, 50 | }; 51 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/shop/pchome/ecvip.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/26/026. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://ecvip.pchome.com.tw/*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 46 | _uf_dom_filter_link([ 47 | // 48 | ]) 49 | .prop('target', '_blank') 50 | ; 51 | 52 | $('#regMobile').attr('autocomplete', 'on'); 53 | }, 54 | 55 | adblock(_url_obj = global._url_obj) 56 | { 57 | // 58 | }, 59 | 60 | clearly(_url_obj = global._url_obj, _dom_list = null) 61 | { 62 | let _dom = $(_dom_list); 63 | 64 | _dom = _dom 65 | .add([ 66 | // 67 | ].join()) 68 | ; 69 | 70 | return _dom; 71 | }, 72 | 73 | }; 74 | 75 | export = o as IDemo; 76 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/shop/post/post/gov/tw/pstmail.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/13/013. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http://postserv.post.gov.tw/pstmail/main_mail.html*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | let ret; 19 | 20 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 21 | { 22 | return true; 23 | } 24 | //console.debug(777, ret); 25 | 26 | /* 27 | if (_url_obj.host.match(/3dmgame\.com/)) 28 | { 29 | return true; 30 | } 31 | */ 32 | 33 | return false; 34 | }, 35 | 36 | main(_url_obj = global._url_obj) 37 | { 38 | const { debounce } = require('throttle-debounce'); 39 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 40 | _uf_dom_filter_link([].join()) 41 | .prop('target', '_blank') 42 | ; 43 | 44 | $('#wrapper').on('DOMNodeInserted', debounce(500, function () 45 | { 46 | $(window).triggerHandler('load.ready'); 47 | })); 48 | 49 | $(window) 50 | .on('load.ready', debounce(100, function () 51 | { 52 | let input = $('#MAILNO1'); 53 | 54 | if (input.length && !input.val()) 55 | { 56 | let r = /MAILNO\d?=(\d+)/; 57 | 58 | if (document.referrer.match(r) || (_url_obj && _url_obj.query.match(r))) 59 | { 60 | input 61 | .val('123') 62 | .trigger('keydown') 63 | .trigger('keyup') 64 | .val(RegExp.$1) 65 | .trigger('change') 66 | ; 67 | 68 | { 69 | let event = new Event('change'); 70 | input[0].dispatchEvent(event); 71 | } 72 | } 73 | } 74 | })) 75 | ; 76 | }, 77 | 78 | adblock(_url_obj = global._url_obj) 79 | { 80 | 81 | }, 82 | 83 | clearly(_url_obj = global._url_obj, _dom_list = null) 84 | { 85 | let _dom = $(_dom_list); 86 | 87 | _dom = _dom 88 | .add([].join()) 89 | ; 90 | 91 | //_dom.remove(); 92 | 93 | return _dom; 94 | }, 95 | }; 96 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/torrent/jandown.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/16/016. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://www.jandown.com/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj) 17 | { 18 | if (_url_obj.host.match(/jandown\.com/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main() 27 | { 28 | const RETURN = module.exports.test(_url_obj); 29 | 30 | //console.log(_url_obj, RETURN); 31 | 32 | if (RETURN) 33 | { 34 | $('form :submit') 35 | .after('Clicked!') 36 | [0].click() 37 | ; 38 | 39 | return RETURN 40 | } 41 | }, 42 | 43 | adblock() 44 | { 45 | 46 | }, 47 | }; 48 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/torrent/nyaa.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/16/016. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://sukebei.nyaa.si/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj) 17 | { 18 | if (_url_obj.host.match(/sukebei\.nyaa\.si/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main() 27 | { 28 | const RETURN = module.exports.test(_url_obj); 29 | 30 | //console.log(_url_obj, RETURN); 31 | 32 | if (RETURN) 33 | { 34 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 35 | _uf_dom_filter_link('.torrent-list tr > td[colspan="2"] a, #torrent-description a') 36 | .attr('target', '_blank') 37 | ; 38 | 39 | return RETURN 40 | } 41 | }, 42 | 43 | adblock() 44 | { 45 | 46 | }, 47 | }; 48 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/wiki/moegirl.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/8/008. 3 | */ 4 | 5 | "use strict"; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | metadata: { 21 | include: [ 22 | //'http*://www.gamer.com.tw/*', 23 | ], 24 | match: [ 25 | '*://*.moegirl.org/*', 26 | ], 27 | nomatch: [], 28 | exclude: [], 29 | 30 | grant: [], 31 | }, 32 | 33 | test(_url_obj = global._url_obj) 34 | { 35 | let ret; 36 | 37 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 38 | { 39 | return true; 40 | } 41 | 42 | return false; 43 | }, 44 | 45 | async main(_url_obj = global._url_obj) 46 | { 47 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 48 | _uf_dom_filter_link([ 49 | '#topicpath a[href*=Category]', 50 | '.mw-category-generated a, .mw-category-generated a', 51 | '#catlinks a[href*=Category]', 52 | ].join(',')) 53 | .prop('target', '_blank') 54 | ; 55 | }, 56 | 57 | adblock(_url_obj = global._url_obj) 58 | { 59 | // 60 | }, 61 | 62 | clearly(_url_obj = global._url_obj, _dom_list = null) 63 | { 64 | let _dom = $(_dom_list); 65 | 66 | _dom = _dom 67 | .add([ 68 | // 69 | ].join()) 70 | ; 71 | 72 | return _dom; 73 | }, 74 | 75 | }; 76 | 77 | export = o as IDemo; 78 | 79 | -------------------------------------------------------------------------------- /src/ux-tweak-sc/wiki/wikipedia.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/7/24/024. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | module.exports = { 8 | 9 | metadata: { 10 | include: [ 11 | 'http*://*.wikipedia.org/*', 12 | ], 13 | exclude: [], 14 | }, 15 | 16 | test(_url_obj = global._url_obj) 17 | { 18 | if (_url_obj.host.match(/wikipedia\.org/)) 19 | { 20 | return true; 21 | } 22 | 23 | return false; 24 | }, 25 | 26 | main(_url_obj = global._url_obj) 27 | { 28 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 29 | _uf_dom_filter_link('a.external') 30 | .prop('target', '_blank') 31 | ; 32 | }, 33 | 34 | adblock(_url_obj = global._url_obj) 35 | { 36 | 37 | }, 38 | 39 | clearly(_url_obj = global._url_obj, _dom_list = null) 40 | { 41 | let _dom = $(_dom_list); 42 | 43 | _dom = _dom 44 | .add([ 45 | '.uls-settings-trigger, .wbc-editpage, .wb-langlinks-edit, .mw-editsection, #p-personal, #p-search', 46 | '#footer-icons, #footer-places, .mbox-image .image, #siteNotice', 47 | ].join()) 48 | ; 49 | 50 | $('.collapseButton') 51 | .parents('tr') 52 | .siblings() 53 | .find(':hidden') 54 | .addBack() 55 | .show() 56 | ; 57 | 58 | //_dom.remove(); 59 | 60 | return _dom; 61 | }, 62 | }; 63 | -------------------------------------------------------------------------------- /src/youtube-plus-sc/_fake.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/1/001. 3 | */ 4 | 5 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 6 | 7 | declare const global: IGlobal; 8 | declare const greasemonkey: IGreasemonkey; 9 | declare const window: IWindow; 10 | declare const unsafeWindow: IWindow; 11 | declare const $: IJQueryStatic; 12 | declare const jQuery: IJQueryStatic; 13 | 14 | 'use strict'; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | disable: 2, 21 | 22 | metadata: { 23 | include: [ 24 | '*://www.youtube.com/*', 25 | '*://youtube.com/*', 26 | ], 27 | match: [], 28 | nomatch: [], 29 | exclude: [ 30 | 'http*://*.youtube.com/embed/*', 31 | 'http*://*.youtube.com/v/*', 32 | 'http*://creatoracademy.youtube.com/*', 33 | 'http*://artists.youtube.com/*', 34 | 'http*://kids.youtube.com/*', 35 | ], 36 | 37 | grant: [], 38 | }, 39 | 40 | test(_url_obj = global._url_obj) 41 | { 42 | let ret; 43 | 44 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 45 | { 46 | return true; 47 | } 48 | 49 | return false; 50 | }, 51 | 52 | async main(_url_obj = global._url_obj) 53 | { 54 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 55 | _uf_dom_filter_link([ 56 | // 57 | ].join(',')) 58 | .prop('target', '_blank') 59 | ; 60 | }, 61 | 62 | adblock(_url_obj = global._url_obj) 63 | { 64 | // 65 | }, 66 | 67 | clearly(_url_obj = global._url_obj, _dom_list = null) 68 | { 69 | let _dom = $(_dom_list); 70 | 71 | _dom = _dom 72 | .add([ 73 | // 74 | ].join()) 75 | ; 76 | 77 | //_dom.remove(); 78 | 79 | return _dom; 80 | }, 81 | 82 | }; 83 | 84 | export = o as IDemo; 85 | -------------------------------------------------------------------------------- /src/youtube-plus-sc/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports.id = 'youtube-plus-sc'; 3 | module.exports.version = ''; 4 | 5 | module.exports.name = 'youtube-plus-sc'; 6 | module.exports.name_en = 'youtube-plus-sc'; 7 | module.exports.name_ja = 'youtube-plus-sc'; 8 | 9 | module.exports.desc = ''; 10 | module.exports.desc_en = ''; 11 | module.exports.desc_ja = ''; 12 | 13 | module.exports.namespace = ''; 14 | module.exports.author = ''; 15 | 16 | module.exports.icon = ''; 17 | 18 | module.exports.list = [ 19 | "youtube/2016/my_video", 20 | "youtube/2016/upload", 21 | "global/script" 22 | ]; 23 | 24 | module.exports.list_disable = [ 25 | "youtube/2016/watch", 26 | "youtube/2016" 27 | ]; 28 | 29 | // for webpack, don't use this method 30 | module.exports._lib = () => 31 | { 32 | require('root/src/youtube-plus-sc/youtube/2016/my_video'); 33 | require('root/src/youtube-plus-sc/youtube/2016/upload'); 34 | require('root/src/youtube-plus-sc/global/script'); 35 | }; 36 | 37 | module.exports.metadata = {}; 38 | module.exports.metadata.include = [ 39 | "*://www.youtube.com/*", 40 | "*://youtube.com/*", 41 | "https://www.youtube.com/my_videos*", 42 | "http*://www.youtube.com/upload*" 43 | ]; 44 | module.exports.metadata.match = []; 45 | module.exports.metadata.exclude = [ 46 | "http*://*.youtube.com/embed/*", 47 | "http*://*.youtube.com/v/*", 48 | "http*://creatoracademy.youtube.com/*", 49 | "http*://artists.youtube.com/*", 50 | "http*://kids.youtube.com/*" 51 | ]; 52 | module.exports.metadata.grant = [ 53 | "GM.xmlhttpRequest", 54 | "GM_xmlhttpRequest", 55 | "unsafeWindow" 56 | ]; 57 | 58 | module.exports.list_script = [ 59 | "global/script" 60 | ]; 61 | 62 | module.exports.current = []; 63 | 64 | module.exports.default = module.exports; 65 | 66 | -------------------------------------------------------------------------------- /src/youtube-plus-sc/index.user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/11/17/017. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import * as userScriptCore from 'root/lib/core'; 8 | import * as index from './index'; 9 | 10 | module.exports.id = index.id; 11 | module.exports.name = index.name; 12 | 13 | module.exports.indexScript = index; 14 | 15 | userScriptCore.run(module.exports.id, module.exports, jQuery, function (uxid, exports, global, window, $jq, _url) 16 | { 17 | userScriptCore.init(uxid, exports, global, window, $jq, _url); 18 | }); 19 | -------------------------------------------------------------------------------- /src/youtube-plus-sc/lib/metadata.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/6/006. 3 | */ 4 | 5 | export const desc = ''; 6 | 7 | export const grant = [ 8 | //'GM_registerMenuCommand', 9 | 'GM_xmlhttpRequest', 10 | 'unsafeWindow', 11 | ]; 12 | 13 | export const metadata = `// ==UserScript== 14 | // @name <%= index.name %> 15 | // @name:en <%= index.name_en %> 16 | // @name:zh <%= index.name %> 17 | // @namespace <%= index.namespace %> 18 | // @author <%= index.author %> 19 | // 20 | // @description <%= index.desc %> 21 | // @description:en <%= index.desc_en %> 22 | // @description:zh <%= index.desc %> 23 | // 24 | // @version <%= pkg.version %> 25 | // 26 | // @grant <%= index.grant %> 27 | // g_r_a_n_tnone 28 | // 29 | // @icon <%= index.icon %> 30 | // 31 | // @noframes 32 | // @encoding utf-8 33 | // 34 | // @homepageURL https://github.com/bluelovers/gm-user-scripts 35 | // @supportURL https://github.com/bluelovers/gm-user-scripts/issues 36 | // @downloadURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 37 | // @updateURL https://github.com/bluelovers/gm-user-scripts/raw/master/dist/<%= index.id %>.user.js 38 | // 39 | // @include <%= index.include %> 40 | // 41 | // @exclude <%= index.exclude %> 42 | // 43 | // ==/UserScript== 44 | `; 45 | 46 | export default metadata; 47 | -------------------------------------------------------------------------------- /src/youtube-plus-sc/youtube/2016/upload.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/1/001. 3 | */ 4 | 5 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 6 | 7 | declare const global: IGlobal; 8 | declare const greasemonkey: IGreasemonkey; 9 | declare const window: IWindow; 10 | declare const unsafeWindow: IWindow; 11 | declare const $: IJQueryStatic; 12 | declare const jQuery: IJQueryStatic; 13 | 14 | 'use strict'; 15 | 16 | let o: IDemo = { 17 | 18 | //priority: 100, 19 | 20 | //script: true, 21 | 22 | metadata: { 23 | include: [ 24 | 'http*://www.youtube.com/upload*', 25 | ], 26 | match: [], 27 | nomatch: [], 28 | exclude: [], 29 | 30 | grant: [], 31 | }, 32 | 33 | test(_url_obj = global._url_obj) 34 | { 35 | let ret; 36 | 37 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports)) 38 | { 39 | return true; 40 | } 41 | 42 | return false; 43 | }, 44 | 45 | async main(_url_obj = global._url_obj) 46 | { 47 | const { debounce } = require('throttle-debounce'); 48 | //const YU = require('root/lib/site/youtube'); 49 | 50 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 51 | 52 | $(window) 53 | .on('load.ready', debounce(1500, function () 54 | { 55 | $('#uploader-progress') 56 | .one('DOMNodeInserted', debounce(100, function () 57 | { 58 | _uf_dom_filter_link([ 59 | 'a#my_videos', 60 | ].join(',')) 61 | .prop('target', '_blank') 62 | ; 63 | })) 64 | ; 65 | })) 66 | .triggerHandler('load.ready') 67 | ; 68 | }, 69 | 70 | adblock(_url_obj = global._url_obj) 71 | { 72 | // 73 | }, 74 | 75 | clearly(_url_obj = global._url_obj, _dom_list = null) 76 | { 77 | let _dom = $(_dom_list); 78 | 79 | _dom = _dom 80 | .add([ 81 | // 82 | ].join()) 83 | ; 84 | 85 | //_dom.remove(); 86 | 87 | return _dom; 88 | }, 89 | 90 | }; 91 | 92 | export = o as IDemo; 93 | -------------------------------------------------------------------------------- /src/youtube-plus-sc/youtube/2016/watch.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/12/1/001. 3 | */ 4 | 5 | 'use strict'; 6 | 7 | import { IDemo, IGlobal, IGreasemonkey, IWindow, IJQueryStatic, IUrlObject2 } from 'root/lib/core/demo'; 8 | 9 | declare const global: IGlobal; 10 | declare const greasemonkey: IGreasemonkey; 11 | declare const window: IWindow; 12 | declare const unsafeWindow: IWindow; 13 | declare const $: IJQueryStatic; 14 | declare const jQuery: IJQueryStatic; 15 | 16 | let o: IDemo = { 17 | 18 | disable: true, 19 | 20 | metadata: { 21 | include: [ 22 | 'http*://www.youtube.com/watch*', 23 | ], 24 | match: [], 25 | nomatch: [], 26 | exclude: [], 27 | 28 | grant: [], 29 | }, 30 | 31 | test(_url_obj = global._url_obj) 32 | { 33 | let ret; 34 | 35 | if (ret = require('root/lib/greasemonkey/match').auto(_url_obj.source, module.exports) && !require('root/lib/site/youtube').isMaterial()) 36 | { 37 | return true; 38 | } 39 | 40 | return false; 41 | }, 42 | 43 | async main(_url_obj = global._url_obj) 44 | { 45 | const { debounce } = require('throttle-debounce'); 46 | const YU = require('root/lib/site/youtube'); 47 | 48 | const _uf_dom_filter_link = require('root/lib/dom/filter/link'); 49 | 50 | 51 | }, 52 | 53 | adblock(_url_obj = global._url_obj) 54 | { 55 | // 56 | }, 57 | 58 | clearly(_url_obj = global._url_obj, _dom_list = null) 59 | { 60 | let _dom = $(_dom_list); 61 | 62 | _dom = _dom 63 | .add([ 64 | // 65 | ].join()) 66 | ; 67 | 68 | //_dom.remove(); 69 | 70 | return _dom; 71 | }, 72 | 73 | }; 74 | 75 | export = o as IDemo; 76 | -------------------------------------------------------------------------------- /test/_local-dev.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by user on 2017/8/27/027. 3 | */ 4 | 5 | import * as chai from 'chai'; 6 | import * as path from 'path'; 7 | 8 | const rootDir = path.join(__dirname, '..'); 9 | 10 | export function relative(filename): string 11 | { 12 | return path.relative(rootDir, filename); 13 | } 14 | 15 | export const expect = chai.expect; 16 | -------------------------------------------------------------------------------- /test/match.test.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by USER on 2017/11/29/029. 3 | */ 4 | export {}; 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@bluelovers/tsconfig", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | 6 | "sourceMap": false, 7 | "inlineSourceMap": true, 8 | "inlineSources": true, 9 | 10 | "baseUrl": ".", 11 | // "sourceRoot": ".", 12 | // "rootDir": ".", 13 | // "outDir": ".", 14 | 15 | "paths": { 16 | "root/src/*": [ 17 | "./src/*" 18 | ], 19 | "root/*": [ 20 | "./*" 21 | ] 22 | } 23 | } 24 | } 25 | --------------------------------------------------------------------------------