yard 0.9.38 → 0.9.40

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -1
  3. data/README.md +18 -21
  4. data/docs/GettingStarted.md +41 -15
  5. data/docs/Tags.md +5 -5
  6. data/docs/WhatsNew.md +59 -7
  7. data/docs/templates/default/yard_tags/html/setup.rb +1 -1
  8. data/lib/yard/autoload.rb +17 -0
  9. data/lib/yard/cli/diff.rb +7 -2
  10. data/lib/yard/code_objects/proxy.rb +1 -1
  11. data/lib/yard/handlers/processor.rb +1 -0
  12. data/lib/yard/handlers/rbs/attribute_handler.rb +43 -0
  13. data/lib/yard/handlers/rbs/base.rb +38 -0
  14. data/lib/yard/handlers/rbs/constant_handler.rb +18 -0
  15. data/lib/yard/handlers/rbs/method_handler.rb +327 -0
  16. data/lib/yard/handlers/rbs/mixin_handler.rb +20 -0
  17. data/lib/yard/handlers/rbs/namespace_handler.rb +26 -0
  18. data/lib/yard/handlers/ruby/attribute_handler.rb +7 -4
  19. data/lib/yard/handlers/ruby/constant_handler.rb +1 -0
  20. data/lib/yard/i18n/locale.rb +1 -1
  21. data/lib/yard/i18n/pot_generator.rb +1 -1
  22. data/lib/yard/parser/rbs/rbs_parser.rb +325 -0
  23. data/lib/yard/parser/rbs/statement.rb +75 -0
  24. data/lib/yard/parser/ruby/legacy/irb/slex.rb +19 -1
  25. data/lib/yard/parser/ruby/ruby_parser.rb +55 -3
  26. data/lib/yard/parser/source_parser.rb +3 -2
  27. data/lib/yard/registry_resolver.rb +7 -0
  28. data/lib/yard/rubygems/specification.rb +1 -1
  29. data/lib/yard/server/library_version.rb +1 -1
  30. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +208 -12
  31. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +1 -17
  32. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -2
  33. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +3 -3
  34. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +2 -3
  35. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +22 -16
  36. data/lib/yard/tags/directives.rb +7 -0
  37. data/lib/yard/tags/library.rb +3 -3
  38. data/lib/yard/tags/types_explainer.rb +2 -1
  39. data/lib/yard/templates/helpers/base_helper.rb +1 -1
  40. data/lib/yard/templates/helpers/html_helper.rb +16 -5
  41. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +6 -1
  42. data/lib/yard/templates/helpers/markup/hybrid_markdown.rb +2125 -0
  43. data/lib/yard/templates/helpers/markup_helper.rb +4 -2
  44. data/lib/yard/version.rb +1 -1
  45. data/po/ja.po +82 -82
  46. data/templates/default/fulldoc/html/full_list.erb +4 -4
  47. data/templates/default/fulldoc/html/js/app.js +503 -319
  48. data/templates/default/fulldoc/html/js/full_list.js +310 -212
  49. data/templates/default/layout/html/headers.erb +1 -1
  50. data/templates/default/method/html/header.erb +3 -3
  51. data/templates/default/module/html/defines.erb +3 -3
  52. data/templates/default/module/html/inherited_methods.erb +1 -0
  53. data/templates/default/module/html/method_summary.erb +8 -0
  54. data/templates/default/module/setup.rb +20 -0
  55. data/templates/default/onefile/html/layout.erb +3 -4
  56. data/templates/guide/fulldoc/html/js/app.js +57 -26
  57. data/templates/guide/layout/html/layout.erb +9 -11
  58. metadata +14 -4
@@ -1,12 +1,208 @@
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
+ (function() {
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
+ var form = input.form;
16
+ var results = document.createElement("div");
17
+ var list = document.createElement("ul");
18
+ var requestTimer = null;
19
+ var controller = null;
20
+ var items = [];
21
+ var activeIndex = -1;
22
+ var 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(function(item, itemIndex) {
55
+ item.element.classList.toggle("ac_over", itemIndex === activeIndex);
56
+ });
57
+ input.setAttribute("aria-activedescendant", items[activeIndex].element.id);
58
+ }
59
+
60
+ function selectItem(item) {
61
+ input.value = item.values[1];
62
+ window.location.href = item.values[3];
63
+ }
64
+
65
+ function renderItems(lines) {
66
+ syncResultsWidth();
67
+ list.innerHTML = "";
68
+ items = lines.map(function(line, index) {
69
+ var values = line.split(",");
70
+ var element = document.createElement("li");
71
+ var label = document.createElement("span");
72
+ var namespace = document.createElement("small");
73
+
74
+ element.id = results.id + "_item_" + index;
75
+ element.setAttribute("role", "option");
76
+ element.className = index % 2 === 0 ? "ac_even" : "ac_odd";
77
+ label.textContent = values[0];
78
+ element.appendChild(label);
79
+
80
+ if (values[1] !== "") {
81
+ namespace.textContent = "(" + values[1] + ")";
82
+ element.appendChild(document.createTextNode(" "));
83
+ element.appendChild(namespace);
84
+ }
85
+
86
+ element.addEventListener("mouseenter", function() {
87
+ setActive(index);
88
+ });
89
+ element.addEventListener("mousedown", function(event) {
90
+ event.preventDefault();
91
+ selectItem(items[index]);
92
+ });
93
+
94
+ list.appendChild(element);
95
+
96
+ return { element: element, values: values };
97
+ });
98
+
99
+ if (items.length) {
100
+ results.hidden = false;
101
+ input.setAttribute("aria-expanded", "true");
102
+ setActive(0);
103
+ } else {
104
+ hideResults();
105
+ }
106
+ }
107
+
108
+ function fetchResults(term) {
109
+ if (controller) controller.abort();
110
+ controller = new AbortController();
111
+ input.classList.add("ac_loading");
112
+
113
+ fetch(
114
+ form.action +
115
+ "?q=" +
116
+ encodeURIComponent(term) +
117
+ "&_=" +
118
+ new Date().getTime(),
119
+ {
120
+ headers: {
121
+ "X-Requested-With": "XMLHttpRequest"
122
+ },
123
+ signal: controller.signal
124
+ }
125
+ )
126
+ .then(function(response) {
127
+ return response.text();
128
+ })
129
+ .then(function(text) {
130
+ var lines = text
131
+ .split("\n")
132
+ .map(function(line) {
133
+ return line.trim();
134
+ })
135
+ .filter(Boolean);
136
+
137
+ renderItems(lines);
138
+ })
139
+ .catch(function(error) {
140
+ if (error.name !== "AbortError") hideResults();
141
+ })
142
+ .finally(function() {
143
+ input.classList.remove("ac_loading");
144
+ });
145
+ }
146
+
147
+ input.addEventListener("input", function() {
148
+ clearTimeout(requestTimer);
149
+ if (blurTimer) clearTimeout(blurTimer);
150
+
151
+ if (!input.value.trim()) {
152
+ hideResults();
153
+ return;
154
+ }
155
+
156
+ requestTimer = setTimeout(function() {
157
+ fetchResults(input.value.trim());
158
+ }, 200);
159
+ });
160
+
161
+ input.addEventListener("keydown", function(event) {
162
+ if (results.hidden && (event.key === "ArrowDown" || event.key === "ArrowUp")) {
163
+ if (!input.value.trim()) return;
164
+ fetchResults(input.value.trim());
165
+ return;
166
+ }
167
+
168
+ if (event.key === "ArrowDown") {
169
+ event.preventDefault();
170
+ setActive(activeIndex + 1);
171
+ } else if (event.key === "ArrowUp") {
172
+ event.preventDefault();
173
+ setActive(activeIndex - 1);
174
+ } else if (event.key === "Enter") {
175
+ if (activeIndex >= 0 && items[activeIndex]) {
176
+ event.preventDefault();
177
+ selectItem(items[activeIndex]);
178
+ }
179
+ } else if (event.key === "Escape") {
180
+ hideResults();
181
+ }
182
+ });
183
+
184
+ input.addEventListener("blur", function() {
185
+ blurTimer = setTimeout(hideResults, 150);
186
+ });
187
+
188
+ input.addEventListener("focus", function() {
189
+ syncResultsWidth();
190
+ if (items.length) {
191
+ results.hidden = false;
192
+ input.setAttribute("aria-expanded", "true");
193
+ }
194
+ });
195
+
196
+ document.addEventListener("click", function(event) {
197
+ if (!form.contains(event.target)) hideResults();
198
+ });
199
+
200
+ window.addEventListener("resize", syncResultsWidth);
201
+ syncResultsWidth();
202
+ }
203
+
204
+ ready(function() {
205
+ var input = query("#search_box");
206
+ if (input) createAutocomplete(input);
207
+ });
208
+ })();
@@ -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
 
@@ -507,7 +507,7 @@ module YARD
507
507
  #
508
508
  # @example
509
509
  # # Synchronizes system time using NTP.
510
- # # @see http://ntp.org/documentation.html NTP Documentation
510
+ # # @see https://ntp.org/documentation.html NTP Documentation
511
511
  # # @see NTPHelperMethods
512
512
  # class NTPUpdater; end
513
513
  define_tag "See Also", :see, :with_name
@@ -541,7 +541,7 @@ module YARD
541
541
  # @example
542
542
  # # @todo Add support for Jabberwocky service.
543
543
  # # There is an open source Jabberwocky library available
544
- # # at http://jbrwcky.org that can be easily integrated.
544
+ # # at https://jbrwcky.org that can be easily integrated.
545
545
  # class Wonderlander; end
546
546
  # @see tag:note
547
547
  define_tag "Todo Item", :todo
@@ -554,7 +554,7 @@ module YARD
554
554
  # of a specific object.
555
555
  #
556
556
  # @example
557
- # # The public REST API for http://jbrwcky.org
557
+ # # The public REST API for https://jbrwcky.org
558
558
  # # @version 2.0
559
559
  # class JabberwockyAPI; end
560
560
  define_tag "Version", :version
@@ -102,6 +102,7 @@ module YARD
102
102
  :fixed_collection_start => /\(/,
103
103
  :fixed_collection_end => /\)/,
104
104
  :type_name => /#{ISEP}#{METHODNAMEMATCH}|#{NAMESPACEMATCH}|\w+/,
105
+ :symbol => /:#{METHODNAMEMATCH}/,
105
106
  :type_next => /[,;]/,
106
107
  :whitespace => /\s+/,
107
108
  :hash_collection_start => /\{/,
@@ -130,7 +131,7 @@ module YARD
130
131
  next unless (match.nil? && @scanner.eos?) || (match && token = @scanner.scan(match))
131
132
  found = true
132
133
  case token_type
133
- when :type_name
134
+ when :type_name, :symbol
134
135
  raise SyntaxError, "expecting END, got name '#{token}'" if name
135
136
  name = token
136
137
  when :type_next
@@ -45,7 +45,7 @@ module YARD::Templates::Helpers
45
45
  # method depending on the arguments passed in.
46
46
  #
47
47
  # @example Linking a URL
48
- # linkify('http://example.com')
48
+ # linkify('https://example.com')
49
49
  # @example Including docstring contents of an object
50
50
  # linkify('include:YARD::Docstring')
51
51
  # @example Linking to an extra file
@@ -93,10 +93,16 @@ module YARD
93
93
  :tables,
94
94
  :with_toc_data,
95
95
  :no_intraemphasis).to_html
96
+ when 'Commonmarker'
97
+ provider.to_html(text, :options => { }, :plugins => { :syntax_highlighter => nil })
96
98
  when 'CommonMarker'
97
- CommonMarker.render_html(text, %i[DEFAULT GITHUB_PRE_LANG], %i[autolink table])
99
+ provider.render_html(text, %i[DEFAULT GITHUB_PRE_LANG], %i[autolink table])
98
100
  else
99
- provider.new(text).to_html
101
+ if provider.respond_to?(:to_html)
102
+ provider.to_html(text)
103
+ else
104
+ provider.new(text).to_html
105
+ end
100
106
  end
101
107
  end
102
108
 
@@ -156,7 +162,7 @@ module YARD
156
162
  # @return [String] the output HTML
157
163
  # @since 0.6.0
158
164
  def html_markup_text(text)
159
- h(text).gsub(/\r?\n/, '<br/>')
165
+ h(text).gsub(/\r?\n/, '<br>')
160
166
  end
161
167
 
162
168
  # @return [String] the same text with no markup
@@ -228,7 +234,7 @@ module YARD
228
234
  # @return [String] HTML with linkified references
229
235
  def resolve_links(text)
230
236
  code_tags = 0
231
- text.gsub(%r{<(/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+</|$)}m) do |str|
237
+ text.gsub(%r{<(/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=\W|.+</|$)}m) do |str|
232
238
  closed = $1
233
239
  tag = $2
234
240
  escape = $3
@@ -650,7 +656,12 @@ module YARD
650
656
  language ||= detect_lang_in_codeblock_attributes($1, $2)
651
657
  language ||= object.source_type
652
658
 
653
- if options.highlight
659
+ # Skip re-highlighting if the block is already highlighted (e.g. from a recursive
660
+ # htmlify call via {include:} or {yard:include_tags}). Passing pre-highlighted HTML
661
+ # through CGI.unescapeHTML would corrupt deliberately-escaped entities inside spans.
662
+ # Note: this heuristic suppresses highlighting for code blocks in :html markup that
663
+ # contain a literal <span> tag in the source being documented (an uncommon edge case).
664
+ if options.highlight && string !~ HtmlSyntaxHighlightHelper::ALREADY_HIGHLIGHTED_RE
654
665
  string = html_syntax_highlight(CGI.unescapeHTML(string), language)
655
666
  end
656
667
  classes = ['code', language].compact.join(' ')
@@ -6,6 +6,11 @@ module YARD
6
6
  module HtmlSyntaxHighlightHelper
7
7
  include ModuleHelper
8
8
 
9
+ # Matches source that has already been highlighted (i.e. contains a span tag).
10
+ # Used to avoid double-processing pre-highlighted HTML in the rescue clause of
11
+ # {#html_syntax_highlight_ruby_ripper} and in the {HtmlHelper#parse_codeblocks} guard.
12
+ ALREADY_HIGHLIGHTED_RE = /<span[\s>]/
13
+
9
14
  # Highlights Ruby source
10
15
  # @param [String] source the Ruby source code
11
16
  # @return [String] the highlighted Ruby source
@@ -39,7 +44,7 @@ module YARD
39
44
  end
40
45
  output
41
46
  rescue Parser::ParserSyntaxError
42
- source =~ /^<span\s+class=/ ? source : h(source)
47
+ source =~ ALREADY_HIGHLIGHTED_RE ? source : h(source)
43
48
  end
44
49
 
45
50
  def html_syntax_highlight_ruby_legacy(source)