yard 0.9.38 → 0.9.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -1
  3. data/README.md +18 -21
  4. data/docs/GettingStarted.md +41 -15
  5. data/docs/Parser.md +17 -42
  6. data/docs/Tags.md +5 -5
  7. data/docs/WhatsNew.md +59 -7
  8. data/docs/templates/default/yard_tags/html/setup.rb +1 -1
  9. data/lib/yard/autoload.rb +17 -0
  10. data/lib/yard/cli/diff.rb +7 -2
  11. data/lib/yard/code_objects/proxy.rb +1 -1
  12. data/lib/yard/handlers/processor.rb +1 -0
  13. data/lib/yard/handlers/rbs/attribute_handler.rb +43 -0
  14. data/lib/yard/handlers/rbs/base.rb +38 -0
  15. data/lib/yard/handlers/rbs/constant_handler.rb +18 -0
  16. data/lib/yard/handlers/rbs/method_handler.rb +327 -0
  17. data/lib/yard/handlers/rbs/mixin_handler.rb +20 -0
  18. data/lib/yard/handlers/rbs/namespace_handler.rb +26 -0
  19. data/lib/yard/handlers/ruby/attribute_handler.rb +7 -4
  20. data/lib/yard/handlers/ruby/constant_handler.rb +1 -0
  21. data/lib/yard/i18n/locale.rb +1 -1
  22. data/lib/yard/i18n/pot_generator.rb +1 -1
  23. data/lib/yard/parser/rbs/rbs_parser.rb +325 -0
  24. data/lib/yard/parser/rbs/statement.rb +75 -0
  25. data/lib/yard/parser/ruby/legacy/irb/slex.rb +19 -1
  26. data/lib/yard/parser/ruby/ruby_parser.rb +55 -3
  27. data/lib/yard/parser/source_parser.rb +3 -2
  28. data/lib/yard/registry_resolver.rb +7 -0
  29. data/lib/yard/rubygems/specification.rb +1 -1
  30. data/lib/yard/server/commands/base.rb +1 -1
  31. data/lib/yard/server/library_version.rb +1 -1
  32. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +168 -88
  33. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +203 -12
  34. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +1 -17
  35. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -2
  36. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +3 -3
  37. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +2 -3
  38. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +22 -16
  39. data/lib/yard/tags/directives.rb +7 -0
  40. data/lib/yard/tags/library.rb +3 -3
  41. data/lib/yard/tags/types_explainer.rb +2 -1
  42. data/lib/yard/templates/helpers/base_helper.rb +1 -1
  43. data/lib/yard/templates/helpers/html_helper.rb +16 -5
  44. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +6 -1
  45. data/lib/yard/templates/helpers/markup/hybrid_markdown.rb +2147 -0
  46. data/lib/yard/templates/helpers/markup_helper.rb +4 -2
  47. data/lib/yard/version.rb +1 -1
  48. data/po/ja.po +82 -82
  49. data/templates/default/fulldoc/html/css/common.css +1 -1
  50. data/templates/default/fulldoc/html/css/full_list.css +201 -53
  51. data/templates/default/fulldoc/html/css/style.css +988 -389
  52. data/templates/default/fulldoc/html/full_list.erb +4 -4
  53. data/templates/default/fulldoc/html/js/app.js +801 -395
  54. data/templates/default/fulldoc/html/js/full_list.js +332 -242
  55. data/templates/default/layout/html/headers.erb +1 -1
  56. data/templates/default/layout/html/layout.erb +3 -1
  57. data/templates/default/method/html/header.erb +3 -3
  58. data/templates/default/module/html/defines.erb +3 -3
  59. data/templates/default/module/html/inherited_methods.erb +1 -0
  60. data/templates/default/module/html/method_summary.erb +8 -0
  61. data/templates/default/module/setup.rb +20 -0
  62. data/templates/default/onefile/html/layout.erb +3 -4
  63. data/templates/guide/fulldoc/html/css/style.css +347 -97
  64. data/templates/guide/fulldoc/html/js/app.js +61 -33
  65. data/templates/guide/layout/html/layout.erb +69 -72
  66. metadata +14 -4
@@ -1,96 +1,30 @@
1
- #search_results h1 { margin-bottom: 0; }
2
- #search_results p { margin-top: 0; margin-bottom: 25px; }
3
- #search_results ul { list-style-position: inside; padding-left: 0; list-style: none; }
4
- #search_results ul li { padding: 7px 15px; font-size: 1.1em; }
5
-
6
- form.search {
7
- z-index: 8000;
8
- position: absolute;
9
- color: #fff;
10
- border: 1px solid #99f; width: 210px; background: #05a;
11
- border-radius: 4px; border-top-left-radius: 0; border-top-right-radius: 0;
12
- }
13
- form.search input {
14
- height: 25px;
15
- padding: 0;
16
- padding-left: 4px;
17
- margin: 4px;
18
- margin-right: 0;
19
- width: 202px;
20
- border: 1px solid #99f;
21
- border-radius: 3px;
22
- font-size: 1.1em;
23
- box-sizing: border-box;
24
- -webkit-appearance: none;
25
- }
26
-
27
- @media (max-width: 920px) {
28
- form.search {
29
- position: absolute;
30
- color: #fff;
31
- width: 100%;
32
- margin-top: 0;
33
- background: #05a;
34
- border-radius: 0;
35
- border: 0;
36
- margin-bottom: 10px;
37
- left: 0;
38
- top: 0;
39
- }
40
- form.search input {
41
- margin-top: 9px;
42
- margin-bottom: 11px;
43
- margin-left: 12px;
44
- padding-left: 6px;
45
- border: 1px solid #eaf0ff;
46
- }
47
- #menu { margin-top: 41px; }
48
- #search a {
49
- border-top-left-radius: 3px; border-top-right-radius: 3px;
50
- background: none;
51
- border: 0;
52
- box-shadow: none;
53
- margin-top: 4px;
54
- padding-bottom: 5px;
55
- color: #eaf0ff; fill: #eaf0ff;
56
- }
57
- #search a.active {
58
- background: #048; border: 0;
59
- }
60
- }
61
-
62
- @media (min-width: 920px) {
63
- form.search { right: 12px; top: 0; }
64
- }
65
-
66
- #menu { padding-top: 5px; }
67
- #content h1 { margin-top: 15px; border-top: 0; }
68
-
69
- #content.error { font-size: 1.2em; }
70
- #content.error p tt { font-size: 1.2em; }
71
- #content.error .note { padding: 12px; }
72
-
73
- .signature .permalink { float: right; font-size: 0.9em; }
74
-
75
1
  /* autocomplete */
76
2
  .ac_results {
77
3
  padding: 0px;
78
- border: 1px solid black;
79
- width: 500px;
4
+ position: absolute;
5
+ top: calc(100% - 1px);
6
+ left: 4px;
7
+ right: 4px;
8
+ border: 1px solid #0a4f8a;
9
+ width: auto;
80
10
  overflow: hidden;
81
11
  z-index: 99999;
12
+ background: #f7fbff;
13
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.18);
14
+ border-radius: 0 0 4px 4px;
15
+ color: #123;
82
16
  }
83
17
 
84
18
  .ac_results ul {
85
19
  width: 100%;
86
- list-style-position: outside;
87
20
  list-style: none;
21
+ list-style-position: outside;
88
22
  padding: 0;
89
23
  margin: 0;
90
24
  }
91
25
 
92
26
  .ac_results li {
93
- cursor: pointer;
27
+ cursor: pointer;
94
28
  margin: 0px;
95
29
  padding: 3px;
96
30
  display: block;
@@ -98,30 +32,176 @@ form.search input {
98
32
  font-size: 12px;
99
33
  line-height: 16px;
100
34
  overflow: hidden;
35
+ color: #123;
36
+ }
101
37
 
38
+ #search_results h1 {
39
+ margin-bottom: 0;
40
+ }
41
+ #search_results p {
42
+ margin-top: 0;
43
+ margin-bottom: 25px;
44
+ }
45
+ #search_results ul {
46
+ list-style: none;
47
+ list-style-position: inside;
48
+ padding-left: 0;
49
+ }
50
+ #search_results ul li {
51
+ padding: 7px 15px;
52
+ font-size: 1.1em;
53
+ }
54
+
55
+ form.search {
56
+ z-index: 8000;
57
+ position: absolute;
58
+ color: #fff;
59
+ border: 1px solid #99f;
60
+ width: 210px;
61
+ background: #05a;
62
+ border-radius: 4px;
63
+ border-top-left-radius: 0;
64
+ border-top-right-radius: 0;
65
+ }
66
+ form.search input {
67
+ height: 25px;
68
+ padding: 0;
69
+ padding-left: 4px;
70
+ margin: 4px;
71
+ margin-right: 0;
72
+ width: 202px;
73
+ border: 1px solid #99f;
74
+ border-radius: 3px;
75
+ font-size: 1.1em;
76
+ box-sizing: border-box;
77
+ -webkit-appearance: none;
78
+ color: #123;
79
+ }
80
+
81
+ @media (max-width: 920px) {
82
+ form.search {
83
+ position: absolute;
84
+ color: #fff;
85
+ width: 100%;
86
+ margin-top: 0;
87
+ background: #05a;
88
+ border-radius: 0;
89
+ border: 0;
90
+ margin-bottom: 10px;
91
+ left: 0;
92
+ top: 0;
93
+ }
94
+ form.search input {
95
+ margin-top: 9px;
96
+ margin-bottom: 11px;
97
+ margin-left: 12px;
98
+ padding-left: 6px;
99
+ border: 1px solid #eaf0ff;
100
+ background: #fff;
101
+ }
102
+ #menu {
103
+ margin-top: 41px;
104
+ }
105
+ #search a {
106
+ border-top-left-radius: 3px;
107
+ border-top-right-radius: 3px;
108
+ background: none;
109
+ border: 0;
110
+ box-shadow: none;
111
+ margin-top: 4px;
112
+ padding-bottom: 5px;
113
+ color: #eaf0ff;
114
+ fill: #eaf0ff;
115
+ }
116
+ #search a.active {
117
+ background: #048;
118
+ border: 0;
119
+ }
120
+ }
121
+
122
+ @media (min-width: 920px) {
123
+ form.search {
124
+ right: 12px;
125
+ top: 0;
126
+ }
127
+ }
128
+
129
+ #menu {
130
+ padding-top: 5px;
131
+ }
132
+ #content h1 {
133
+ margin-top: 15px;
134
+ border-top: 0;
135
+ }
136
+
137
+ #content.error {
138
+ font-size: 1.2em;
139
+ }
140
+ #content.error p tt {
141
+ font-size: 1.2em;
142
+ }
143
+ #content.error .note {
144
+ padding: 12px;
145
+ }
146
+
147
+ .signature .permalink {
148
+ float: right;
149
+ font-size: 0.9em;
102
150
  }
103
151
 
104
152
  .ac_loading {
105
- background: white url('/images/processing.gif') right center no-repeat;
153
+ background: white url("/images/processing.gif") right center no-repeat;
106
154
  }
107
155
 
108
156
  .ac_even {
109
- background: #fafafa; border: 1px dotted #fafafa; border-left-width: 0; border-right-width: 0;
157
+ background: #fafafa;
158
+ border: 1px dotted #fafafa;
159
+ border-left-width: 0;
160
+ border-right-width: 0;
110
161
  }
111
162
 
112
163
  .ac_odd {
113
- background: #f0f0f0; border: 1px dotted #f0f0f0; border-left-width: 0; border-right-width: 0;
164
+ background: #f0f0f0;
165
+ border: 1px dotted #f0f0f0;
166
+ border-left-width: 0;
167
+ border-right-width: 0;
114
168
  }
115
169
 
116
170
  .ac_over {
117
- background: #ddd; cursor: pointer; border: 1px dotted #fff; border-left-width: 0; border-right-width: 0;
171
+ background: #cfe5ff;
172
+ cursor: pointer;
173
+ border: 1px dotted #f7fbff;
174
+ border-left-width: 0;
175
+ border-right-width: 0;
118
176
  }
119
177
 
120
- #fade { display: none; position: absolute; top: 0px; left: 0; background: #eee; z-index: -1; width: 100%; height: 100%; border-top: 1px solid #e0e0e0; }
178
+ #fade {
179
+ display: none;
180
+ position: absolute;
181
+ top: 0px;
182
+ left: 0;
183
+ background: #eee;
184
+ z-index: -1;
185
+ width: 100%;
186
+ height: 100%;
187
+ border-top: 1px solid #e0e0e0;
188
+ }
121
189
  #processing {
122
- position: absolute; width: 400px; height: 200px; margin: auto; background: #fff; padding: 10px 30px; z-index: 20;
123
- -webkit-box-shadow: 0px 0px 20px #444; -moz-box-shadow: 0px 0px 20px #444;
124
- -webkit-border-radius: 4px;
125
- display: none;
190
+ position: absolute;
191
+ width: 400px;
192
+ height: 200px;
193
+ margin: auto;
194
+ background: #fff;
195
+ padding: 10px 30px;
196
+ z-index: 20;
197
+ -webkit-box-shadow: 0px 0px 20px #444;
198
+ -moz-box-shadow: 0px 0px 20px #444;
199
+ -webkit-border-radius: 4px;
200
+ display: none;
201
+ }
202
+ #processing img {
203
+ display: block;
204
+ position: absolute;
205
+ bottom: 30px;
206
+ left: 44%;
126
207
  }
127
- #processing img { display: block; position: absolute; bottom: 30px; left: 44%; }
@@ -1,12 +1,203 @@
1
- /*
2
- * jQuery Autocomplete plugin 1.1
3
- *
4
- * Copyright (c) 2009 Jörn Zaefferer
5
- *
6
- * Dual licensed under the MIT and GPL licenses:
7
- * http://www.opensource.org/licenses/mit-license.php
8
- * http://www.gnu.org/licenses/gpl.html
9
- *
10
- * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
11
- */
12
- eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';(3($){$.2e.1u({19:3(b,d){5 c=W b=="1B";d=$.1u({},$.M.1T,{Y:c?b:P,y:c?P:b,1J:c?$.M.1T.1J:10,X:d&&!d.1D?10:48},d);d.1y=d.1y||3(a){6 a};d.1v=d.1v||d.1R;6 A.I(3(){1M $.M(A,d)})},L:3(a){6 A.11("L",a)},1k:3(a){6 A.14("1k",[a])},2b:3(){6 A.14("2b")},28:3(a){6 A.14("28",[a])},24:3(){6 A.14("24")}});$.M=3(o,r){5 t={2Y:38,2S:40,2N:46,2I:9,2E:13,2B:27,2x:3I,2v:33,2p:34,2n:8};5 u=$(o).3r("19","3o").Q(r.2Q);5 p;5 m="";5 n=$.M.3c(r);5 s=0;5 k;5 h={1F:C};5 l=$.M.32(r,o,1Z,h);5 j;$.1Y.2X&&$(o.2U).11("45.19",3(){4(j){j=C;6 C}});u.11(($.1Y.2X?"43":"42")+".19",3(a){s=1;k=a.2M;3V(a.2M){O t.2Y:a.1d();4(l.N()){l.30()}w{12(0,D)}R;O t.2S:a.1d();4(l.N()){l.2D()}w{12(0,D)}R;O t.2v:a.1d();4(l.N()){l.2C()}w{12(0,D)}R;O t.2p:a.1d();4(l.N()){l.2A()}w{12(0,D)}R;O r.17&&$.1c(r.S)==","&&t.2x:O t.2I:O t.2E:4(1Z()){a.1d();j=D;6 C}R;O t.2B:l.Z();R;3J:1P(p);p=1O(12,r.1J);R}}).2t(3(){s++}).3E(3(){s=0;4(!h.1F){2r()}}).2q(3(){4(s++>1&&!l.N()){12(0,D)}}).11("1k",3(){5 c=(1r.7>1)?1r[1]:P;3 1N(q,a){5 b;4(a&&a.7){16(5 i=0;i<a.7;i++){4(a[i].L.J()==q.J()){b=a[i];R}}}4(W c=="3")c(b);w u.14("L",b&&[b.y,b.F])}$.I(15(u.K()),3(i,a){21(a,1N,1N)})}).11("2b",3(){n.1o()}).11("28",3(){$.1u(r,1r[1]);4("y"2h 1r[1])n.1e()}).11("24",3(){l.1p();u.1p();$(o.2U).1p(".19")});3 1Z(){5 e=l.2g();4(!e)6 C;5 v=e.L;m=v;4(r.17){5 b=15(u.K());4(b.7>1){5 f=r.S.7;5 c=$(o).18().1I;5 d,1H=0;$.I(b,3(i,a){1H+=a.7;4(c<=1H){d=i;6 C}1H+=f});b[d]=v;v=b.3f(r.S)}v+=r.S}u.K(v);1l();u.14("L",[e.y,e.F]);6 D}3 12(b,c){4(k==t.2N){l.Z();6}5 a=u.K();4(!c&&a==m)6;m=a;a=1m(a);4(a.7>=r.29){u.Q(r.26);4(!r.1s)a=a.J();21(a,3a,1l)}w{1q();l.Z()}};3 15(b){4(!b)6[""];4(!r.17)6[$.1c(b)];6 $.4h(b.23(r.S),3(a){6 $.1c(b).7?$.1c(a):P})}3 1m(a){4(!r.17)6 a;5 c=15(a);4(c.7==1)6 c[0];5 b=$(o).18().1I;4(b==a.7){c=15(a)}w{c=15(a.22(a.37(b),""))}6 c[c.7-1]}3 1G(q,a){4(r.1G&&(1m(u.K()).J()==q.J())&&k!=t.2n){u.K(u.K()+a.37(1m(m).7));$(o).18(m.7,m.7+a.7)}};3 2r(){1P(p);p=1O(1l,4g)};3 1l(){5 c=l.N();l.Z();1P(p);1q();4(r.36){u.1k(3(a){4(!a){4(r.17){5 b=15(u.K()).1n(0,-1);u.K(b.3f(r.S)+(b.7?r.S:""))}w{u.K("");u.14("L",P)}}})}};3 3a(q,a){4(a&&a.7&&s){1q();l.35(a,q);1G(q,a[0].F);l.20()}w{1l()}};3 21(f,d,g){4(!r.1s)f=f.J();5 e=n.31(f);4(e&&e.7){d(f,e)}w 4((W r.Y=="1B")&&(r.Y.7>0)){5 c={4f:+1M 4e()};$.I(r.2Z,3(a,b){c[a]=W b=="3"?b():b});$.4d({4c:"4b",4a:"19"+o.49,2V:r.2V,Y:r.Y,y:$.1u({q:1m(f),47:r.X},c),44:3(a){5 b=r.1A&&r.1A(a)||1A(a);n.1i(f,b);d(f,b)}})}w{l.2T();g(f)}};3 1A(c){5 d=[];5 b=c.23("\\n");16(5 i=0;i<b.7;i++){5 a=$.1c(b[i]);4(a){a=a.23("|");d[d.7]={y:a,F:a[0],L:r.1z&&r.1z(a,a[0])||a[0]}}}6 d};3 1q(){u.1h(r.26)}};$.M.1T={2Q:"41",2P:"3Z",26:"3Y",29:1,1J:3W,1s:C,1f:D,1w:C,1g:10,X:3U,36:C,2Z:{},1X:D,1R:3(a){6 a[0]},1v:P,1G:C,E:0,17:C,S:", ",1y:3(b,a){6 b.22(1M 3T("(?![^&;]+;)(?!<[^<>]*)("+a.22(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/2K,"\\\\$1")+")(?![^<>]*>)(?![^&;]+;)","2K"),"<2J>$1</2J>")},1D:D,1E:3S};$.M.3c=3(g){5 h={};5 j=0;3 1f(s,a){4(!g.1s)s=s.J();5 i=s.2H(a);4(g.1w=="3R"){i=s.J().1k("\\\\b"+a.J())}4(i==-1)6 C;6 i==0||g.1w};3 1i(q,a){4(j>g.1g){1o()}4(!h[q]){j++}h[q]=a}3 1e(){4(!g.y)6 C;5 f={},2G=0;4(!g.Y)g.1g=1;f[""]=[];16(5 i=0,2F=g.y.7;i<2F;i++){5 c=g.y[i];c=(W c=="1B")?[c]:c;5 d=g.1v(c,i+1,g.y.7);4(d===C)1V;5 e=d.3Q(0).J();4(!f[e])f[e]=[];5 b={F:d,y:c,L:g.1z&&g.1z(c)||d};f[e].1U(b);4(2G++<g.X){f[""].1U(b)}};$.I(f,3(i,a){g.1g++;1i(i,a)})}1O(1e,25);3 1o(){h={};j=0}6{1o:1o,1i:1i,1e:1e,31:3(q){4(!g.1g||!j)6 P;4(!g.Y&&g.1w){5 a=[];16(5 k 2h h){4(k.7>0){5 c=h[k];$.I(c,3(i,x){4(1f(x.F,q)){a.1U(x)}})}}6 a}w 4(h[q]){6 h[q]}w 4(g.1f){16(5 i=q.7-1;i>=g.29;i--){5 c=h[q.3O(0,i)];4(c){5 a=[];$.I(c,3(i,x){4(1f(x.F,q)){a[a.7]=x}});6 a}}}6 P}}};$.M.32=3(e,g,f,k){5 h={H:"3N"};5 j,z=-1,y,1t="",1S=D,G,B;3 2y(){4(!1S)6;G=$("<3M/>").Z().Q(e.2P).T("3L","3K").1Q(1K.2w);B=$("<3H/>").1Q(G).3G(3(a){4(U(a).2u&&U(a).2u.3F()==\'2s\'){z=$("1L",B).1h(h.H).3D(U(a));$(U(a)).Q(h.H)}}).2q(3(a){$(U(a)).Q(h.H);f();g.2t();6 C}).3C(3(){k.1F=D}).3B(3(){k.1F=C});4(e.E>0)G.T("E",e.E);1S=C}3 U(a){5 b=a.U;3A(b&&b.3z!="2s")b=b.3y;4(!b)6[];6 b}3 V(b){j.1n(z,z+1).1h(h.H);2o(b);5 a=j.1n(z,z+1).Q(h.H);4(e.1D){5 c=0;j.1n(0,z).I(3(){c+=A.1a});4((c+a[0].1a-B.1b())>B[0].3x){B.1b(c+a[0].1a-B.3w())}w 4(c<B.1b()){B.1b(c)}}};3 2o(a){z+=a;4(z<0){z=j.1j()-1}w 4(z>=j.1j()){z=0}}3 2m(a){6 e.X&&e.X<a?e.X:a}3 2l(){B.2z();5 b=2m(y.7);16(5 i=0;i<b;i++){4(!y[i])1V;5 a=e.1R(y[i].y,i+1,b,y[i].F,1t);4(a===C)1V;5 c=$("<1L/>").3v(e.1y(a,1t)).Q(i%2==0?"3u":"3P").1Q(B)[0];$.y(c,"2k",y[i])}j=B.3t("1L");4(e.1X){j.1n(0,1).Q(h.H);z=0}4($.2e.2W)B.2W()}6{35:3(d,q){2y();y=d;1t=q;2l()},2D:3(){V(1)},30:3(){V(-1)},2C:3(){4(z!=0&&z-8<0){V(-z)}w{V(-8)}},2A:3(){4(z!=j.1j()-1&&z+8>j.1j()){V(j.1j()-1-z)}w{V(8)}},Z:3(){G&&G.Z();j&&j.1h(h.H);z=-1},N:3(){6 G&&G.3s(":N")},3q:3(){6 A.N()&&(j.2j("."+h.H)[0]||e.1X&&j[0])},20:3(){5 a=$(g).3p();G.T({E:W e.E=="1B"||e.E>0?e.E:$(g).E(),2i:a.2i+g.1a,1W:a.1W}).20();4(e.1D){B.1b(0);B.T({2L:e.1E,3n:\'3X\'});4($.1Y.3m&&W 1K.2w.3l.2L==="1x"){5 c=0;j.I(3(){c+=A.1a});5 b=c>e.1E;B.T(\'3k\',b?e.1E:c);4(!b){j.E(B.E()-2R(j.T("2O-1W"))-2R(j.T("2O-3j")))}}}},2g:3(){5 a=j&&j.2j("."+h.H).1h(h.H);6 a&&a.7&&$.y(a[0],"2k")},2T:3(){B&&B.2z()},1p:3(){G&&G.3i()}}};$.2e.18=3(b,f){4(b!==1x){6 A.I(3(){4(A.2d){5 a=A.2d();4(f===1x||b==f){a.4n("2c",b);a.3h()}w{a.4m(D);a.4l("2c",b);a.4k("2c",f);a.3h()}}w 4(A.3g){A.3g(b,f)}w 4(A.1C){A.1C=b;A.3e=f}})}5 c=A[0];4(c.2d){5 e=1K.18.4j(),3d=c.F,2a="<->",2f=e.3b.7;e.3b=2a;5 d=c.F.2H(2a);c.F=3d;A.18(d,d+2f);6{1I:d,39:d+2f}}w 4(c.1C!==1x){6{1I:c.1C,39:c.3e}}}})(4i);',62,272,'|||function|if|var|return|length|||||||||||||||||||||||||else||data|active|this|list|false|true|width|value|element|ACTIVE|each|toLowerCase|val|result|Autocompleter|visible|case|null|addClass|break|multipleSeparator|css|target|moveSelect|typeof|max|url|hide||bind|onChange||trigger|trimWords|for|multiple|selection|autocomplete|offsetHeight|scrollTop|trim|preventDefault|populate|matchSubset|cacheLength|removeClass|add|size|search|hideResultsNow|lastWord|slice|flush|unbind|stopLoading|arguments|matchCase|term|extend|formatMatch|matchContains|undefined|highlight|formatResult|parse|string|selectionStart|scroll|scrollHeight|mouseDownOnSelect|autoFill|progress|start|delay|document|li|new|findValueCallback|setTimeout|clearTimeout|appendTo|formatItem|needsInit|defaults|push|continue|left|selectFirst|browser|selectCurrent|show|request|replace|split|unautocomplete||loadingClass||setOptions|minChars|teststring|flushCache|character|createTextRange|fn|textLength|selected|in|top|filter|ac_data|fillList|limitNumberOfItems|BACKSPACE|movePosition|PAGEDOWN|click|hideResults|LI|focus|nodeName|PAGEUP|body|COMMA|init|empty|pageDown|ESC|pageUp|next|RETURN|ol|nullData|indexOf|TAB|strong|gi|maxHeight|keyCode|DEL|padding|resultsClass|inputClass|parseInt|DOWN|emptyList|form|dataType|bgiframe|opera|UP|extraParams|prev|load|Select|||display|mustMatch|substring||end|receiveData|text|Cache|orig|selectionEnd|join|setSelectionRange|select|remove|right|height|style|msie|overflow|off|offset|current|attr|is|find|ac_even|html|innerHeight|clientHeight|parentNode|tagName|while|mouseup|mousedown|index|blur|toUpperCase|mouseover|ul|188|default|absolute|position|div|ac_over|substr|ac_odd|charAt|word|180|RegExp|100|switch|400|auto|ac_loading|ac_results||ac_input|keydown|keypress|success|submit||limit|150|name|port|abort|mode|ajax|Date|timestamp|200|map|jQuery|createRange|moveEnd|moveStart|collapse|move'.split('|'),0,{}))
1
+ (() => {
2
+ function query(selector, root) {
3
+ return (root || document).querySelector(selector);
4
+ }
5
+
6
+ function ready(callback) {
7
+ if (document.readyState === "loading") {
8
+ document.addEventListener("DOMContentLoaded", callback, { once: true });
9
+ } else {
10
+ callback();
11
+ }
12
+ }
13
+
14
+ function createAutocomplete(input) {
15
+ const form = input.form;
16
+ const results = document.createElement("div");
17
+ const list = document.createElement("ul");
18
+ let requestTimer = null;
19
+ let controller = null;
20
+ let items = [];
21
+ let activeIndex = -1;
22
+ let blurTimer = null;
23
+
24
+ if (!form) return;
25
+
26
+ results.className = "ac_results";
27
+ results.hidden = true;
28
+ results.setAttribute("role", "listbox");
29
+ results.id = `${input.id}_results`;
30
+ list.setAttribute("role", "presentation");
31
+ results.appendChild(list);
32
+ input.setAttribute("autocomplete", "off");
33
+ input.setAttribute("aria-autocomplete", "list");
34
+ input.setAttribute("aria-controls", results.id);
35
+ input.setAttribute("aria-expanded", "false");
36
+ form.appendChild(results);
37
+
38
+ function syncResultsWidth() {
39
+ results.style.width = `${input.offsetWidth}px`;
40
+ }
41
+
42
+ function hideResults() {
43
+ results.hidden = true;
44
+ input.setAttribute("aria-expanded", "false");
45
+ input.removeAttribute("aria-activedescendant");
46
+ activeIndex = -1;
47
+ items = [];
48
+ list.innerHTML = "";
49
+ }
50
+
51
+ function setActive(index) {
52
+ if (!items.length) return;
53
+ activeIndex = (index + items.length) % items.length;
54
+ items.forEach((item, itemIndex) => {
55
+ item.element.classList.toggle("ac_over", itemIndex === activeIndex);
56
+ });
57
+ input.setAttribute(
58
+ "aria-activedescendant",
59
+ items[activeIndex].element.id,
60
+ );
61
+ }
62
+
63
+ function selectItem(item) {
64
+ input.value = item.values[1];
65
+ window.location.href = item.values[3];
66
+ }
67
+
68
+ function renderItems(lines) {
69
+ syncResultsWidth();
70
+ list.innerHTML = "";
71
+ items = lines.map((line, index) => {
72
+ const values = line.split(",");
73
+ const element = document.createElement("li");
74
+ const label = document.createElement("span");
75
+ const namespace = document.createElement("small");
76
+
77
+ element.id = `${results.id}_item_${index}`;
78
+ element.setAttribute("role", "option");
79
+ element.className = index % 2 === 0 ? "ac_even" : "ac_odd";
80
+ label.textContent = values[0];
81
+ element.appendChild(label);
82
+
83
+ if (values[1] !== "") {
84
+ namespace.textContent = `(${values[1]})`;
85
+ element.appendChild(document.createTextNode(" "));
86
+ element.appendChild(namespace);
87
+ }
88
+
89
+ element.addEventListener("mouseenter", () => {
90
+ setActive(index);
91
+ });
92
+ element.addEventListener("mousedown", (event) => {
93
+ event.preventDefault();
94
+ selectItem(items[index]);
95
+ });
96
+
97
+ list.appendChild(element);
98
+
99
+ return { element: element, values: values };
100
+ });
101
+
102
+ if (items.length) {
103
+ results.hidden = false;
104
+ input.setAttribute("aria-expanded", "true");
105
+ setActive(0);
106
+ } else {
107
+ hideResults();
108
+ }
109
+ }
110
+
111
+ function fetchResults(term) {
112
+ if (controller) controller.abort();
113
+ controller = new AbortController();
114
+ input.classList.add("ac_loading");
115
+
116
+ fetch(`${form.action}?q=${encodeURIComponent(term)}&_=${Date.now()}`, {
117
+ headers: {
118
+ "X-Requested-With": "XMLHttpRequest",
119
+ },
120
+ signal: controller.signal,
121
+ })
122
+ .then((response) => response.text())
123
+ .then((text) => {
124
+ const lines = text
125
+ .split("\n")
126
+ .map((line) => line.trim())
127
+ .filter(Boolean);
128
+
129
+ renderItems(lines);
130
+ })
131
+ .catch((error) => {
132
+ if (error.name !== "AbortError") hideResults();
133
+ })
134
+ .finally(() => {
135
+ input.classList.remove("ac_loading");
136
+ });
137
+ }
138
+
139
+ input.addEventListener("input", () => {
140
+ clearTimeout(requestTimer);
141
+ if (blurTimer) clearTimeout(blurTimer);
142
+
143
+ if (!input.value.trim()) {
144
+ hideResults();
145
+ return;
146
+ }
147
+
148
+ requestTimer = setTimeout(() => {
149
+ fetchResults(input.value.trim());
150
+ }, 200);
151
+ });
152
+
153
+ input.addEventListener("keydown", (event) => {
154
+ if (
155
+ results.hidden &&
156
+ (event.key === "ArrowDown" || event.key === "ArrowUp")
157
+ ) {
158
+ if (!input.value.trim()) return;
159
+ fetchResults(input.value.trim());
160
+ return;
161
+ }
162
+
163
+ if (event.key === "ArrowDown") {
164
+ event.preventDefault();
165
+ setActive(activeIndex + 1);
166
+ } else if (event.key === "ArrowUp") {
167
+ event.preventDefault();
168
+ setActive(activeIndex - 1);
169
+ } else if (event.key === "Enter") {
170
+ if (activeIndex >= 0 && items[activeIndex]) {
171
+ event.preventDefault();
172
+ selectItem(items[activeIndex]);
173
+ }
174
+ } else if (event.key === "Escape") {
175
+ hideResults();
176
+ }
177
+ });
178
+
179
+ input.addEventListener("blur", () => {
180
+ blurTimer = setTimeout(hideResults, 150);
181
+ });
182
+
183
+ input.addEventListener("focus", () => {
184
+ syncResultsWidth();
185
+ if (items.length) {
186
+ results.hidden = false;
187
+ input.setAttribute("aria-expanded", "true");
188
+ }
189
+ });
190
+
191
+ document.addEventListener("click", (event) => {
192
+ if (!form.contains(event.target)) hideResults();
193
+ });
194
+
195
+ window.addEventListener("resize", syncResultsWidth);
196
+ syncResultsWidth();
197
+ }
198
+
199
+ ready(() => {
200
+ const input = query("#search_box");
201
+ if (input) createAutocomplete(input);
202
+ });
203
+ })();
@@ -1,22 +1,6 @@
1
1
  <form class="search" method="get" action="<%= abs_url base_path(router.search_prefix) %>">
2
- <input name="q" type="search" placeholder="Search" id="search_box" size="30" value="<%= h @query %>" />
2
+ <input name="q" type="search" placeholder="Search" id="search_box" size="30" value="<%= h @query %>">
3
3
  </form>
4
- <script type="text/javascript" charset="utf-8">
5
- $(function() {
6
- $('#search_box').autocomplete($('#search_box').parent().attr('action'), {
7
- width: 200,
8
- formatItem: function(item) {
9
- var values = item[0].split(",");
10
- return values[0] + (values[1] == '' ? "" : " <small>(" + values[1] + ")</small>");
11
- }
12
- }).result(function(event, item) {
13
- var values = item[0].split(",")
14
- $('#search_box').val(values[1]);
15
- location.href = values[3];
16
- return false;
17
- });
18
- });
19
- </script>
20
4
 
21
5
  <div id="menu">
22
6
  <% unless @single_library %>
@@ -1,4 +1,6 @@
1
1
  <script>
2
- $(document.getElementById("<%= anchor_for(object) %>")).prepend(
3
- '<a class="permalink" href="<%= abs_url base_path(router.docs_prefix) %>/<%= urlencode serializer.serialized_path(object) %>">permalink</a>');
2
+ document.getElementById("<%= anchor_for(object) %>").insertAdjacentHTML(
3
+ "afterbegin",
4
+ '<a class="permalink" href="<%= abs_url base_path(router.docs_prefix) %>/<%= urlencode serializer.serialized_path(object) %>">permalink</a>'
5
+ );
4
6
  </script>
@@ -1,7 +1,7 @@
1
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
1
+ <meta charset="UTF-8">
2
2
  <title>YARD Documentation Server <%= YARD::VERSION %> - Library Listing</title>
3
- <link rel="stylesheet" href="<%= abs_url('css', 'style.css') %>?<%= mtime('css/style.css') %>" type="text/css" media="screen" charset="utf-8" />
4
- <link rel="stylesheet" href="<%= abs_url('css', 'custom.css') %>?<%= mtime('css/custom.css') %>" type="text/css" media="screen" charset="utf-8" />
3
+ <link rel="stylesheet" href="<%= abs_url('css', 'style.css') %>?<%= mtime('css/style.css') %>" type="text/css" media="screen" charset="utf-8">
4
+ <link rel="stylesheet" href="<%= abs_url('css', 'custom.css') %>?<%= mtime('css/custom.css') %>" type="text/css" media="screen" charset="utf-8">
5
5
  <style type="text/css" media="screen">
6
6
  ul { list-style: circle inside none; padding: 0; }
7
7
  li { font-size: 1.2em; line-height: 1.4em; padding: 3px 5px; }
@@ -1,6 +1,5 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
1
+ <!DOCTYPE html>
2
+ <html lang="en">
4
3
  <head>
5
4
  <%= erb(:headers) %>
6
5
  </head>
@@ -2,29 +2,35 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <link rel="stylesheet" href="<%= abs_url('css', 'style.css') %>?<%= mtime('css/style.css') %>" type="text/css" media="screen" charset="utf-8" />
6
- <link rel="stylesheet" href="<%= abs_url('css', 'custom.css') %>?<%= mtime('css/custom.css') %>" type="text/css" media="screen" charset="utf-8" />
7
- <script type="text/javascript" charset="utf-8" src="<%= abs_url('js', 'jquery.js') %>?<%= mtime('js/jquery.js') %>"></script>
5
+ <link rel="stylesheet" href="<%= abs_url('css', 'style.css') %>?<%= mtime('css/style.css') %>" type="text/css" media="screen" charset="utf-8">
6
+ <link rel="stylesheet" href="<%= abs_url('css', 'custom.css') %>?<%= mtime('css/custom.css') %>" type="text/css" media="screen" charset="utf-8">
8
7
  <script type="text/javascript" charset="utf-8">
9
8
  function checkPage(process) {
10
- $.ajax({cache: false, url: "<%= router.request.path %>" + (process ? "?process=true" : ""),
11
- statusCode: { 200: function() { window.location.reload(true); } } });
12
- setTimeout('checkPage()', 2000);
9
+ fetch("<%= router.request.path %>" + (process ? "?process=true" : ""), { cache: "no-store" })
10
+ .then(function(response) {
11
+ if (response.status === 200) window.location.reload();
12
+ });
13
+ setTimeout(checkPage, 2000);
13
14
  }
14
15
  function setFade() {
15
16
  centerMessage();
16
- $(window).resize(function() { centerMessage(); });
17
- $('#fade').fadeIn();
18
- $('#processing').fadeIn();
17
+ window.addEventListener("resize", centerMessage);
18
+ document.getElementById('fade').style.display = 'block';
19
+ document.getElementById('processing').style.display = 'block';
19
20
  }
20
21
  function centerMessage() {
21
- $('#fade').css('width', $(window).width() + 'px');
22
- $('#fade').css('height', $(window).height() - parseInt($('#fade').css('top')) + 'px');
23
- $('#processing').css('left', ($(window).width() / 2 - $('#processing').width() / 2) + 'px');
24
- $('#processing').css('top', ($(window).height() / 2 - $('#processing').height() / 2) + 'px');
22
+ var fade = document.getElementById('fade');
23
+ var processing = document.getElementById('processing');
24
+ var fadeTop = parseInt(window.getComputedStyle(fade).top, 10) || 0;
25
+ fade.style.width = window.innerWidth + 'px';
26
+ fade.style.height = (window.innerHeight - fadeTop) + 'px';
27
+ processing.style.left = (window.innerWidth / 2 - processing.offsetWidth / 2) + 'px';
28
+ processing.style.top = (window.innerHeight / 2 - processing.offsetHeight / 2) + 'px';
25
29
  }
26
- $(function() { checkPage(true); });
27
- $(setFade);
30
+ document.addEventListener("DOMContentLoaded", function() {
31
+ checkPage(true);
32
+ setFade();
33
+ });
28
34
  </script>
29
35
  <style type="text/css" media="screen">
30
36
  body { overflow: hidden; margin: 12px; display: block; }
@@ -46,7 +52,7 @@
46
52
  <strong><%= @library.name %></strong> <% if @library.version %>(<%= @library.version %>)<% end %> is being processed.
47
53
  You'll be redirected when the pages are built, it shouldn't take much longer.
48
54
  </p>
49
- <img src="<%= abs_url('images', 'processing.gif') %>?<%= mtime('images/processing.gif') %>" align="center" />
55
+ <img src="<%= abs_url('images', 'processing.gif') %>?<%= mtime('images/processing.gif') %>" align="center">
50
56
  </div>
51
57
  </body>
52
58
  </html>
@@ -543,6 +543,7 @@ module YARD
543
543
  # @since 0.8.0
544
544
  class ParseDirective < Directive
545
545
  def call
546
+ existing = YARD::Registry.all.lazy.map(&:path).to_set if handler
546
547
  lang = tag.types ? tag.types.first.to_sym :
547
548
  (handler ? handler.parser.parser_type : :ruby)
548
549
  if handler && lang == handler.parser.parser_type
@@ -555,6 +556,12 @@ module YARD
555
556
  src_parser.file = handler.parser.file if handler
556
557
  src_parser.parse(StringIO.new(tag.text))
557
558
  end
559
+ return unless handler
560
+ YARD::Registry.all.each do |obj|
561
+ next if existing.include? obj.path
562
+ obj.files.each { |entry| entry[1] = handler.statement.line if entry[0] == handler.parser.file.to_s }
563
+ obj.source = handler.statement.source
564
+ end
558
565
  end
559
566
  end
560
567