1+ /*
2+ managerLinks v0.1
3+ https://github.com/hoothin/UserScripts/tree/master/True%20URL%20downloads/managerLinks.js
4+ (c) 2017-2017 by Hoothin Wang. All rights reserved.
5+ */
6+ var resReg = / .* ( ^ m a g n e t | ^ e d 2 k | \. t o r r e n t $ | \. m p 4 $ | \. r a r $ | \. 7 z $ | \. z i p $ | \. r m v b $ | \. m k v $ | \. a v i $ | \. i s o $ | \. m p 3 $ | \. t x t $ | \. e x e $ | \. c h m $ | \. p d f $ | \. p p t $ | \. d o c $ | \. p p t x $ | \. d o c x $ | \. e p u b $ | \. x l s x $ | \. x l s $ | \. f l a c $ | \. w m a $ | \. w a v $ | \. a a c $ | \. a p e $ | \. m i d $ | \. o g g $ | \. m 4 a $ | \. d t s $ | \. d s d $ | \. a p k $ ) .* / i,
7+ linksArr = [ ] ,
8+ frame ;
9+ var by = function ( byName , secName ) {
10+ var compare = function ( o , p , name ) {
11+ var a , b ;
12+ if ( typeof o === "object" && typeof p === "object" && o && p ) {
13+ a = o [ name ] ;
14+ b = p [ name ] ;
15+ if ( a === b ) {
16+ return 0 ;
17+ }
18+ if ( typeof a === typeof b ) {
19+ return a < b ? - 1 : 1 ;
20+ }
21+ return typeof a < typeof b ? - 1 : 1 ;
22+ } else {
23+ throw ( "error" ) ;
24+ }
25+ }
26+ return function ( o , p ) {
27+ var result = compare ( o , p , byName ) ;
28+ if ( secName && result == 0 ) {
29+ result = compare ( o , p , secName ) ;
30+ }
31+ return result ;
32+ }
33+ }
34+
35+ function getLinks ( ) {
36+ var links = document . querySelectorAll ( 'a' ) ;
37+ [ ] . forEach . call ( document . querySelectorAll ( 'a' ) , function ( link ) {
38+ if ( resReg . test ( link . href ) && linksArr . toString ( ) . indexOf ( link . href ) == - 1 ) {
39+ linksArr . push ( link . href ) ;
40+ }
41+ } ) ;
42+ }
43+
44+ function showLinkFrame ( callBack ) {
45+ var linkItems = [ ] ;
46+ var typeHtml = "类型:" ;
47+ if ( ! frame ) {
48+ frame = $ ( '<div id="managerLinksContent" style="display:none;">
49+ < div style = "height:100%; width:100%; position:fixed; top:0; z-index:99998; opacity:0.3; filter: alpha(opacity=30); background-color:#000" > </ div >
50+ < div id = "managerLinksBody" style = "width:300px;height:300px;position:fixed;left:50%;top:50%;margin-top:-150px;margin-left:-150px;z-index:100000;background-color:#ffffff;border:1px solid #afb3b6;border-radius:10px;opacity:0.95;filter:alpha(opacity=95);box-shadow:5px 5px 20px 0px #000;" >
51+ < div id = "managerLinksType" style = "width:290px;margin-left:5px;" > </ div >
52+ < div > < input id = "managerLinksSortByName" value = "按文件名排序" style = "width: 33.3%;" type = "button" > < input id = "managerLinksSortByUrl" value = "按网址排序" style = "width: 33.3%;" type = "button" > < input id = "managerLinksSortByType" value = "按扩展名排序" style = "width: 33.3%;" type = "button" >
53+ </ div >
54+ < div id = "managerLinksLinks" style = "width:100%;overflow:auto;word-wrap:break-word;" > </ div >
55+ < div title = "%i代表递增 %n代表文件名" > < input id = "managerLinksPre" style = "width: 48%;" type = "text" placeholder = "批量前缀" > < input id = "managerLinksAfter" style = "width: 48%;" type = "text" placeholder = "批量后缀" >
56+ </ div >
57+ < div > < input id = "managerLinksCopyAll" value = "全部复制" style = "width: 33.3%;" type = "button" > < input id = "managerLinksCopySel" value = "复制选中" style = "width: 33.3%;" type = "button" > < input id = "managerLinksClose" value = "关闭" style = "width: 33.3%;" type = "button" >
58+ </ div >
59+ </ div >
60+ </ div > ');
61+ $(document.body).append(frame);
62+ $("#managerLinksSortByName").click(function() {
63+ $ ( "#managerLinksLinks" ) . html ( "" ) ;
64+ linkItems . sort ( by ( "linkName" , "href" ) ) ;
65+ linkItems . forEach ( function ( item ) {
66+ $ ( "#managerLinksLinks" ) . append ( item . item ) ;
67+ } ) ;
68+ } );
69+ $("#managerLinksSortByUrl").click(function() {
70+ $ ( "#managerLinksLinks" ) . html ( "" ) ;
71+ linkItems . sort ( by ( "href" , "type" ) ) ;
72+ linkItems . forEach ( function ( item ) {
73+ $ ( "#managerLinksLinks" ) . append ( item . item ) ;
74+ } ) ;
75+ } );
76+ $("#managerLinksSortByType").click(function() {
77+ $ ( "#managerLinksLinks" ) . html ( "" ) ;
78+ linkItems . sort ( by ( "type" , "href" ) ) ;
79+ linkItems . forEach ( function ( item ) {
80+ $ ( "#managerLinksLinks" ) . append ( item . item ) ;
81+ } ) ;
82+ } );
83+ $("#managerLinksCopyAll").click(function() {
84+ var pre = $ ( "#managerLinksPre" ) . val ( ) ;
85+ var after = $ ( "#managerLinksAfter" ) . val ( ) ;
86+ callBack ( pre + linksArr . join ( after + "\n" + pre ) + after ) ;
87+ } );
88+ $("#managerLinksCopySel").click(function() {
89+ var pre = $ ( "#managerLinksPre" ) . val ( ) ;
90+ var after = $ ( "#managerLinksAfter" ) . val ( ) ;
91+ var resultStr = "" ;
92+ linkItems . forEach ( function ( item ) {
93+ if ( item . item [ 0 ] . checked ) {
94+ resultStr += ( pre + item . href + after + "\n" ) ;
95+ }
96+ } ) ;
97+ callBack ( resultStr ) ;
98+ } );
99+ $("#managerLinksClose").click(function() {
100+ frame . hide ( ) ;
101+ } );
102+ $("#managerLinksContent> div ") [ 0 ] . onclick = function ( ) {
103+ frame . hide ( ) ;
104+ } ;
105+ }
106+ getLinks ( ) ;
107+ if ( linksArr . length == 0 ) {
108+ callBack ( ) ;
109+ return ;
110+ }
111+ $ ( "#managerLinksLinks" ) . html ( "" ) ;
112+ linksArr . forEach ( function ( link ) {
113+ var type = link . replace ( resReg , "$1" ) ;
114+ var linkName = type . indexOf ( "." ) == - 1 ? link : link . replace ( / .* \/ ( [ ^ \/ ] + ) $ / i, "$1" ) ;
115+ if ( typeHtml . indexOf ( type ) == - 1 ) {
116+ typeHtml += '<a href="javascript:void(0);">' + type + "</a> " ;
117+ }
118+ var linkItem = $ ( '<input type="checkbox" style="float:left;"/><a href="' + link + '" style="width:230px;display:block;overflow:hidden;word-break:keep-all;white-space:nowrap;text-overflow:ellipsis;float:left">' + decodeURIComponent ( linkName ) + '</a><br>' ) ;
119+ $ ( "#managerLinksLinks" ) . append ( linkItem ) ;
120+ linkItems . push ( {
121+ item : linkItem ,
122+ href : link ,
123+ type : type ,
124+ linkName : linkName
125+ } ) ;
126+ } ) ;
127+ $ ( "#managerLinksType" ) . html ( typeHtml ) ;
128+ $ ( "#managerLinksType>a" ) . click ( function ( e ) {
129+ var selected = this . style . textDecoration == "underline" ;
130+ this . style . textDecoration = selected ? "" : "underline" ;
131+ var type = this . innerHTML ;
132+ linkItems . forEach ( function ( item ) {
133+ if ( item . type == type ) {
134+ item . item [ 0 ] . checked = ! selected ;
135+ }
136+ } ) ;
137+ } ) ;
138+ frame . show ( ) ;
139+ $ ( "#managerLinksLinks" ) . height ( $ ( "#managerLinksBody" ) . height ( ) - $ ( "#managerLinksType" ) . height ( ) - $ ( "#managerLinksSortByName" ) . height ( ) * 3 - 20 ) ;
140+ $ ( "#managerLinksBody" ) . hide ( ) ;
141+ $ ( "#managerLinksBody" ) . show ( "slow" ) ;
142+ }
0 commit comments