From 4ce964c1342e150c5596248165f33ed5f1004d70 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 11:22:09 -0500 Subject: [PATCH] Finish Elixir scraper --- assets/images/icons.png | Bin 33826 -> 34387 bytes assets/images/icons@2x.png | Bin 89511 -> 91408 bytes assets/javascripts/news.json | 3 ++ .../templates/pages/about_tmpl.coffee | 5 ++ assets/javascripts/views/pages/elixir.coffee | 2 +- assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_elixir.scss | 5 +- lib/docs/filters/elixir/clean_html.rb | 47 +++++++----------- lib/docs/filters/elixir/entries.rb | 41 ++++++++------- lib/docs/scrapers/elixir.rb | 27 ++++------ public/icons/docs/elixir/16.png | Bin 1361 -> 646 bytes public/icons/docs/elixir/16@2x.png | Bin 2369 -> 1750 bytes 12 files changed, 65 insertions(+), 66 deletions(-) diff --git a/assets/images/icons.png b/assets/images/icons.png index 4622399ccd7b1b4fd3ad955d9331be241fcb3212..d7340fa7d43d32769a45c7389e68f6399f19eec2 100644 GIT binary patch delta 4595 zcmVaY zqd(>BZCDV|j6@q=>@pt_Yr!nmoX?XOH+d41Gdl?rcH8K@uVXJUXpd&Zup^AInKo}m zAI8`4gnVrfiN}_q2#CZRl7KX!_@itt=%wEh586%pU#uw%8Bo^RGQfW`-UcYBqfPr{ z^mFtcFVTO#v&pM5Sr#q_WZ~057EW&}LO_<_dnqYEp2@OsIUoz42C{H^ zQxO8P(D|=rIETC@B-V&!dlnGO=oli0af1t4*WyYnI(87_7H^{4m`e1|L=*i}5%d{O z44PxmMt!`{2Ys=R{QKFNS+E5O$R->LCjklTe-a(px^Ql%eR6;QbJeijpsZm#pscZ_ zA9b{08~U*O&h#sW*#QMWY}>#<9H!Fn^_w{@e((CV>39hr)JKep)YNA`E zt*%JmR(S3GPT@s0|D^L;wn^tSHxXhm_ed5c;1eDcr}6t^f>q%DRUW*&s|?*|c#ud( zzSd)W`1XGW4Tv!?3780E zWBl!35|D=2_1&9^X{Q^}J(*1O>XV3ORVpL84asyQOd)2SuIR%M(0F(PA}*YfAQ9Pu zHhBg%N8N(#y-DlHFeS zDzlp4R<%hZJ}#pAtG8N`+E-h}wdh(k+*#1%aok2S!KG@${GgnT3xab@*aR#}<@ZMi zs=$xEJh)iLgN#@exI@EmVVVlGH}aW;M4CM!0#4y3<=6ws#zD%l0cN*yl1&b30+;g7 z;8cIlBM{X0!s4hFVA{NEfY@cgeAf){D{O{Y_QEH>2*IYU&cyPH9a-1rPV^c@M7JrK zXdh2Op|6vOUV{kR7$1{X7h?F25X?cc;ekGE5?Ys)F?BWFn&{;;%s$s?*bmy(5&bBr zqYc~GzKFC=RY<+43S~F{46f3xnq%Kh325le z7!-m>r%s2c=cp5oZk>+1Z~d>Y6S|e%mJ=|Xl5X&cRD~V4Va1*jNT}|FpZ@*=5K(^> z=e{6vUV1p6Wg{{3a0f(t||fNIIh%Hu+*3<6}&HvCj}?7<{5lQ3A5V zDjn%!4B8SfBYuv8I@;Jia^QR~@w_G+?^^#xZAMG|t8qfR&Zx2O|hLcvj|n>_Y)LWJYtBXR=Xdhiqm zkX)~lA^*SvU^Yk6j}lDNu8+J+=Y4>JI@;JiawN5{5mN$6q%`}r z$oBbfV%Kc@R#;{+C0X&j;2f2-ODd}}FR2uZFRm^YT~KqF>0S8#RIjpprQn<*x+Etg zL}N}imSLW(0=TdI;yf+GB!_>iK)A08q(<{0+@H<~uVEpY2bZu6^I+u*_(2tN64kp2 zQJtkgoo;OEgxqzy->6QAuoJ&aS2~^%?^=kc?*Tck-T5ncP49n*fckl$FZN-T z2#|Q}5X>pq&iTh>kAig(j+phLpw4b%W0qf$>I`4W`k6kZ#>BnmwYNg^-lprk*0TZ% ztriQCX8a{7X~uLKifJjvYHC2)JNUh6;o49sD9>_kaGo0e-h4rD$vo5 zDMVKn@CFX-;e&t@@p^x=@&G(s`4Z=eJ?B+H7@>B~!cfZy`;J1L?spt@!cnZ#4NpGK zI-x?aiPI%Ei7$V@IT79uI1DPGMNG0W!yy&4Bg^2=zPYf#Ed!?Q5P_1TFoX;R)x=3e zCtrtXmj)A^vM8cm9KwiBNfdn@L^LJZ@)Z!o5Octh5D$eLtkr)7o%+abl)-Im(1hdJ zRPQpF;#m%F_({y?hh`s=*9PYVK;o&wcXVB^--$RA>QDq6E==ooo@KP zZ*bHJ8;Qc$kYImEHpYF4#6z(a*TA0AR`}@SO7NF713$FzDcKMkLS6w%vKd7CusP9^ zgc7ZyJw&^}jOb-d=cLR?WrV;aLqtkIfF3sU^oB(K1w`+a{OT)y91*L>%ypyp9KlZhG`87-zi zVbmeq=%g|gh0zs+Y)&#&CfHwLY~g!4+phHfK5C~}Ds&gVM#eEVkdq0I&85G^fRd6D zNJ&Y-_{#f{VQ}@^UY#rVdp~LW=Gx1uFWPh6yuFv|>+1U$>g(66 zGdF)XWVwn5&Gp11Xk!yj48Mf<)ot8}_e=Z0@?EDdOyAxCz7|p4arUD5WE^8lz=aDJ z0zJ8aecH+)5|QbI8`D{STv>k{XMb!18D4d~T&QET(EPpaV7SN@oHT>) zCwOM4lW~kK0Ws7X8ykaAD8$f;r_e!BL=z}^Z0k6Te36~%AdUQSP`|e~< zC&U$|!RGB-o*C%qy)d=50J|vPevi_GbiexiDT-#ooCH)5WEfPH)bhM-!ft)^m+gOG zw8R!Rt#E(*u}@}PemwoY;}{zPE?TsRIUEu%iovV7=<#B3VkxHcy78VAD zg@th9#0flP2kj`RqYc~e`d0L1?AVvEU`$qll8PHz3XXt-+qFjGD-O@~ z53@gT&urO_emiXsu+!NM9@c*$;ARp8yG=tO%;7+bFf!w9GLF#$CKTb};dl`tbEtM; zU?5)8ir1myg@GujqYV$+MjyzaBwvaJTzXG8AV`81+QiG^YdfME%b~#Jk1?%ti+KI z1$DGx8|vuG^pW57=2e<>Hu7Zt!-`MN+{rk5^jUOM0c4!7gp>N%Pm>*qC0>Dbe9vn?PAbw8@M0&-8-`0KLyGa1<=6k@)BFvtQWAy8QcpGIx zLITj!oS0>|+S*za)X|1*=rgzuh=&PH!KYj|GB>gC6YsxT-gWAys_qsD%KaGjHsm%q z!~}haN3kg|0xEwLg4s|s1Pg41(}Jwxs{^cKp7~mb!wx-9*rM$W&gMSgw`CuAZwvz( zo`H^#FQPn?Ey*}W2kd1yeSLi>Dk=g#pO14v)KO4J8|vtTzMOSHLk$h3kG9)n@5mIi z`BkT$%kOG{u$Tz2*=2uM(3rcPV_lUa3sx)%fk99t3BiAb^eDSjzc|;7zF7A(IN+NG z{@eD!PBSm?un7WzTO818AmpVK-7OTBEhpm`Jp!^f9RvplGxNNC`}V=IWy?@dM;o@u zHzaTp5KAlu>(;%uC1lrz(3bq#xYm-Fhii^Jrs2KT`*73(`HqSIi*>*VThaT;UWZSX zimLmo@*97kJg*Xxqr?y$asZN|L{OGr0Y~zr>GTTIKaz2b{$>POQ5xrWxY~hFwk|I| zzj8Ce8vdFk4g%jQL7U`U+QrJljaOU!jm=GV*oy>QYpP-eRzWz{f=3K7;RO6HdS|9d z{(;Kt^~Go5bX6F9efUE)m(=4)##1@)GKtQ3JO=tuWXciR&MMSoYQ3gU1jWOsLCq^eTvfNkqpYEAI z$d7c6@sV@-JLjJN{HT`emSJ-W$^S+k-#G*Nh5n)Rx z+UV%G1$`J_;c3;{AQF!)qY)5^H!1;XLh&o*TyU>>!$B~vJut9R8a#ijW3+XcXSEGb zP)D0_UDRXrL0?s048Is&iAxpOWqNHY>RFN#ads7mFRp~R^TzJ424%Ww`R2i#eK{~U zAg46`lD>_kMGvCuEg+`B9O$R~n(oy3jE;Om@}vBrFke21MLej==fgMMJh<1b1E-_{ z5Pv8D5pAoG@@Yus4at8qR$QTdXOpL6iZWadE5oOSGMsj+LqL|`XKAZJo+-+3Ijjty z7RqqitquWMXnnE_=X9(Vi8XH7o(^O~R5Ve+s@j!UH@Fd-mL0^Z!JC-YBoXs-QN;XA zIDLi@i~4A^QJ=l&gTB~D*&7_!+OP!)$R->LCjklTe-a(pI&gn(XIyvSv2N%d&@pfr z)-l*RggV-=4Sm>sXZq#A?0_5~4ozT@7%Hg#^4FR1%?5C^V;Q8iFLjvdm%HW#*V8c7 zrvP4XJ(ZErthYS-&+h_~FtG&>NHU#Qn5O$Ve9MCz34bV-hTTsZctA%w91-E4U(n}0 z9cZoNLrf4K3e$fm0Uy$5%8Ise5)iROnK-QZkr{Lki-1UEg__C35-RP=1VZia$Ao3X zsSqQ+-?gBB+~o5t1F~5RWaGig{}8a&g@#vWV%ts=juv-fR+m6bDyf`0OpMCJ#H2z( zZ4zulAI8^`_8H?)sMuJ47;PSiGHJ*Ru!`Ih&5aGv%l1xg#M|?POgqwgIB%4Z}6Od%1*nYzA-(5U7F7o+Q;rx#h z@DPwq2XFk4fHcIe@7hAvw7L`1y2HdwAtr`pNsO3QAEqN=JXzc7hCU1dt;QxG;?g-8 z5|J%vQ)OVIj)X>vNVzg0d93%Ry~8M|qs>SWE@yxHB4Qhj*G8Q;`9tazo^x^ElD0P^ z54*p-x6t-Q_p;3f2V=v_zj(Dl+`Pgzw!zf4`sRXK&r|lY7hTIX&JWDov>+&RHJgCB zN&KOxeFFHdmj{=tc#s++fSWW7OOplAT*GG)5_!hB2so94l+Oi7HV#t$G{EduMY1V@ zwcvkR^a-5lxd$ReFD!~|0H)2m0*GTO%y&x#KWRP8+L`d+2O)S(qYK&4?ntbgJcwD1 zgqYSICdQ}YQRusvm{m)#jqzFC=t_kD4#6BG8yo1uCZSznAyZc~t%!PyhS|p^)d#@1 zJbVZRb+lm{+ZU1CstZY%b)m5P4RDkH!H|FKI4hY!=X{eqN?@{A(T2!+i%rM6-h<>T z%OU6LTLrI+j_44l8la&Ww0!dc3Ha|2oWLK73Fbq06CdvP>VPbn4+D2};L{c!d_+e= zv51D=RE`kLQKwS_3XVGAv#rx{_f`D(I-z^v4HW^y6unQJNF{B#0ZTu~hq&@q`2K&N z1AvGuzVI1Q0W)CBT2Hd}yfYo$c2eDkhTk}%UvPvNoJe7GVXZH=F+Nt*7yFD-hQTM= z)FmK0tkRJ#+M+2AGvdc6sH2VTqXN$N4qY^aQ+e_ z@}aJP5AgS8%)Z9GPRpUDfJa9_-cWJ+50a2>jym0x=TRrbgo2|^H|3|V6C!pUKcOPv zU+z4Fk@)7j@8Rf~kKyk~J|*@XtvO9pFhA)+2^C0IRqZ9K6mDcyxf?Mr@gjeQ1qX;> z-T_8mRpEwh=!3r4XOu!T3X0^s7YEjTI5M=)4b5P)8fvM+I^7%0x;) znVe?7HW@y@Cyw5^OmAqI0YunhBHIY7V8z(s#rhB+K2fG}SHBt`Kd%wGWgSFsSygDY5uxwC8lzSV`y zL;78W=+08JPWSBVgxqzy=Ts*|I41s%u5>&i-jxup=m8b3-ux?g9y=_IRt<0a zABXF=?!l*D-yeFBI@Uf zzSxIVB0%D?Lokdx?$t)J;rU`0GCUV1g;*niV? zUb|TVQrkr$@r?f!i)U!jP)tiPw$lO%U&lW;EnEw=1CMQ(8+1$$|MAzFuUwlPqu26z zn=a7NjVVNz=kSLA^Z|b#M3jiv>UDU6(Qw@#>j zoo;OMan=ddf_s2hZ}?`x0{2vyzC!}qyAp!Q zXwW@0nV4jo5aWU%Vp14MjPrsSG0Bgl?}5ZnW~^EPL5wm791nl-P`JTbT`*BZbfJuF zV}m9fkEVGS!c?y!c*Re)ZhlC{QB`elPC&NPBoFzvmuWltyzE_&N7sT4u?>AFQUAfJ zNX~G0-yk6Wh~5_udYKgwxJj4d?sV}6;cq%{_u6uhCavh%Ak^DKeP4b?bvnc=9CgB) zXI7^hyYDL;b;5rdqBb_h3CX6|&yjd24v7`;K|v$D|4}LU%j$t2B7I0U#srh6fRbzm zF+RSI7|BA2QSJxCIA<*}OV#3}%y?y-z$8OSKobZ8QJX_}g-Hh;O+*(D+c7I-ArU@?1;k#1ov;&XZsNQkTN1r?ze(x%6 z*SWT1{bql@k$y~&?%7B`-Ktln>kFR4cC5Mhx&NPAtbP>vCQqIWbn_(M`-_4{^Wr-` z$F$))_9f#$`<+k!r=!2uW{kTkMmwRQ6Gf?WgZqSrP88IM1``)-^5Jh91OfqbM=$-M z5T0v?f;!r;jqzcVkURxf`upB(>+h|qzu76OxYvKoWTKXqmW$|57)=N_TB%G!VRSX2 zoRdsLL7iwYaiJm;9-B*livjuh`4Ar;kH?AOZA2)jqYc~8hw)YQBV(ZR>t2)g{@#z9 zzPdVC_E~e5ySMieb5nC4p}Bd5^}2OJmTTgOxnANp+Sr6k1Qzgp%r*@s9syr_?KPn1 znLvMHVj}*K2CrIV2zy(I7a#oc^1T_ z_$jids+$RO5^$W*5O9JLaN)v*%;AuDQ4C(qMUNMQ>({SCdU`qv>S$xyLPA2&7yFD# zz)N3U*JX#c*qXgQBX%4w&C@y=*!r#FJZxsmKe(a(tJ=>DTnpz z*E2r0u8!cG8U}lEV!+3^7ow4oOwF`ZaT-bl-2?8ecRJ@c@CM$B@=LOpW_kep!1njTMfW*dP z$gVBVPSX?A#KR-XF+=6G^DHIC4u@Xl<6x7j% zZK$I!(?@mJ+uj24`G~sgyTu=$yP0~v@4y0Zzh4@P)5L2IfJEAIUpNBMIx;pbZ zHu<<^>`@KLr%6U8I8-%2ZEb&Tu(q~_($Z3JadBauc;Y7t+lE=N>XJfL60&{Y?ksuN zIo-yqt*?281sh9p)8*A4Ul=IwYk|X8N*_eG$y1`+OBUf$ks2eQ+5}{efEoh+4C{b+ z8)aNv9MIF8m}R%h%1RW}(S~j4^F$qx7N@7;Q>9z3TW#Z)c%ZYWov!MyWKNGN*;mpm=AvZS{_jx{%#b4WZHDV846kEm2L@dXaKtz<9D?b(0Vn0ZkI}Ga(>*(?L*B z5HrvF@WT)3sibeBppJhwY*TGW;3OcHSS+lq-`*O$dt*pLc4cg1{^0S76ZdI&uk=11 zxj?mJLQ@CS;EBx$%Az#R?{KvPpKM)Ke17U?gq8f2i=9NiWuhk8h2+bn$7?zp{jJum z-mz06n$Py*Uhm}=?zLcUXx4%!F4)_#)DrIPSj;Fm$-&p7-RN8hgdymM*8C#~8- kJK-#kgoKxf1{$#Ne`P+YE{TmQ&;S4c07*qoM6N<$f-@q^FaQ7m diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png index edf961c08e0e0f9d879f6f14a35bdb3fed9c5017..6773058750ddac42c7046e0103ee015d316cf9ba 100644 GIT binary patch delta 5687 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 delta 3775 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 diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index c2959755..62501ce6 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,5 +1,8 @@ [ [ + "2015-11-08", + "New documentation: Elixir" + ], [ "2015-10-18", "Added a \"Copy to clipboard\" button inside each code block." ], [ diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index bcf46dd8..062d4d0d 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -144,6 +144,11 @@ credits = [ '2015 Yehuda Katz, Tom Dale and Ember.js contributors', 'MIT', 'https://raw.github.com/emberjs/ember.js/master/LICENSE' + ], [ + 'Elixir', + '2012 Plataformatec', + 'Apache', + 'https://raw.githubusercontent.com/elixir-lang/elixir/master/LICENSE' ], [ 'Express', '2009-2015 TJ Holowaychuk', diff --git a/assets/javascripts/views/pages/elixir.coffee b/assets/javascripts/views/pages/elixir.coffee index f46e2517..8c6b4f99 100644 --- a/assets/javascripts/views/pages/elixir.coffee +++ b/assets/javascripts/views/pages/elixir.coffee @@ -2,5 +2,5 @@ class app.views.ElixirPage extends app.views.BasePage prepare: -> - @highlightCode @findAll('pre.elixir'), 'elixir' + @highlightCode @findAllByTag('pre'), 'elixir' return diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index ef72511f..51431421 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -116,3 +116,4 @@ ._icon-phalcon:before { background-position: -1rem -9rem; } %icon-clipboard { background-position: -2rem -9rem; } %icon-clipboard-white { background-position: -3rem -9rem; } +._icon-elixir:before { background-position: -4rem -9rem; @extend %darkIconFix !optional; } diff --git a/assets/stylesheets/pages/_elixir.scss b/assets/stylesheets/pages/_elixir.scss index a05cb6c3..4c38e936 100644 --- a/assets/stylesheets/pages/_elixir.scss +++ b/assets/stylesheets/pages/_elixir.scss @@ -1,4 +1,7 @@ ._elixir { @extend %simple; - h3 { @extend %block-label; } + + .type-detail { margin-bottom: 2em; } + .type-detail pre { margin-left: -1rem; } + ._mobile & .type-detail pre { margin-left: 0; } } diff --git a/lib/docs/filters/elixir/clean_html.rb b/lib/docs/filters/elixir/clean_html.rb index 6031967b..7b0db95d 100644 --- a/lib/docs/filters/elixir/clean_html.rb +++ b/lib/docs/filters/elixir/clean_html.rb @@ -2,45 +2,32 @@ module Docs class Elixir class CleanHtmlFilter < Filter def call + at_css('footer', '.view-source').remove - # Strip h1 content - css('h1').each do |node| - node.content = node.content.strip - end - - # Make subtitles smaller - css('h2').each do |node| + css('section section.docstring h2').each do |node| node.name = 'h4' end - # Remove footer - at_css('footer').remove - - # Remove behaviour after module name - css('h1').each do |node| - if !(node.has_attribute?('id')) - node.content = node.content.split(" ")[0] - end - end - - # Remove links from summary headings - css('.summary > h4 > a').each do |node| - node.delete('href') + css('h1 .hover-link', '.detail-link').each do |node| + node.parent['id'] = node['href'].remove('#') + node.remove end - # Add elixir class to each pre for syntax highlighting - css('pre').each do |node| - node['class'] = "elixir" + css('.details-list').each do |list| + type = list['id'].remove(/s\z/) + list.css('.detail-header').each do |node| + node.name = 'h3' + node['class'] += " #{type}" + end end - # Rewrite .detail -> .method-detail - css('.detail').each do |node| - node['class'] = "method-detail" - end + css('.summary h2').each { |node| node.parent.before(node) } + css('.summary').each { |node| node.name = 'dl' } + css('.summary-signature').each { |node| node.name = 'dt' } + css('.summary-synopsis').each { |node| node.name = 'dd' } - # Change .detail-header to h3 - css('.detail-header .signature').each do |node| - node.name = 'h3' + css('section', 'div:not(.type-detail)', 'h2 a').each do |node| + node.before(node.children).remove end doc diff --git a/lib/docs/filters/elixir/entries.rb b/lib/docs/filters/elixir/entries.rb index ee830983..aac7481e 100644 --- a/lib/docs/filters/elixir/entries.rb +++ b/lib/docs/filters/elixir/entries.rb @@ -2,33 +2,38 @@ module Docs class Elixir class EntriesFilter < Docs::EntriesFilter def get_name - at_css('h1').content.gsub('behaviour', ' ').strip + at_css('h1').content.split(' ').first.strip end def get_type - return nil if (slug.split("#")[1] == "functions") - slug.split("#")[1] + case at_css('h1 small').try(:content) + when 'exception' + 'Exceptions' + when 'protocol' + 'Protocols' + else + name.split('.').first + end end def additional_entries - return [] if root_page? - - entries = [] + return [] if type == 'Exceptions' - # Add itself (moduledoc) to entries - klass = at_css('h1').content.strip.split(" ")[0] - entries << [klass, klass, name] + css('.detail-header .signature').map do |node| + id = node.parent['id'] + name = node.content.strip + name.remove! %r{\(.*\)} + name.remove! 'left ' + name.remove! ' right' + name.sub! 'sigil_', '~' - # Add functions - css('.summary-functions .summary-signature a').each do |node| - entries << [(name + node['href']), node['href'][1..-1], name] - end + unless node.parent['class'].end_with?('macro') || self.name.start_with?('Kernel') + name.prepend "#{self.name}." + name << " (#{id.split('/').last})" + end - return entries - end - - def include_default_entry? - !initial_page? + [name, id] + end end end end diff --git a/lib/docs/scrapers/elixir.rb b/lib/docs/scrapers/elixir.rb index e427002f..d78d1388 100644 --- a/lib/docs/scrapers/elixir.rb +++ b/lib/docs/scrapers/elixir.rb @@ -3,34 +3,29 @@ module Docs self.name = 'Elixir' self.type = 'elixir' self.version = '1.1.1' - self.base_url = 'http://elixir-lang.org/docs/stable/elixir/' - self.root_path = 'extra-api-reference.html' + self.base_url = 'http://elixir-lang.org/docs/stable/' + self.root_path = 'elixir/extra-api-reference.html' + self.initial_paths = %w( + eex/EEx.html + ex_unit/ExUnit.html + iex/IEx.html + logger/Logger.html + mix/Mix.html + ) self.links = { - home: 'https://elixir-lang.org/', + home: 'http://elixir-lang.org/', code: 'https://github.com/elixir-lang/elixir' } html_filters.push 'elixir/clean_html', 'elixir/entries', 'title' - # Skip exceptions - options[:skip_patterns] = [/Error/] - # Skip protocols - options[:skip] = %w( - Collectable.html - Enumerable.html - Inspect.html - List.Chars.html - String.Chars.html - ) - - options[:follow_links] = ->(filter) { filter.root_page? } options[:container] = "#content" options[:title] = false options[:root_title] = 'Elixir' options[:attribution] = <<-HTML © 2012 Plataformatec
- Licensed under the Apache License, Version 2.0 + Licensed under the Apache License, Version 2.0. HTML end end diff --git a/public/icons/docs/elixir/16.png b/public/icons/docs/elixir/16.png index eeef08a36eb019b1c786c396c356ee11716324cf..5a980afa2934d70fb8905091d00b511492e34c9f 100644 GIT binary patch delta 632 zcmV-;0*C$43Wf!c8Gi-<001BJ|6u?C0!>LoK~#7FjgteIh#e* zyaPSogQbyTLFNwbx8S*lUOCCJ$(0lfP&8nf7Eg1y?twLrDSZlFdg3*)y0q>VTPG#F z$bzf?0?JSP^GE4uKglJOgaE&^g_BN@}(i(whMVPrqZffX1e3ZjUm6o?TH zoX8*yf?KM~YES7RaGe~JwR1w~gNdi&00Wr1g?b@C0e{5FAeZyO3w)x!?8q)Rk!J_(5|_f8Z@M@AJH_0xr_s*od6P|u65 z>#n@!j+=cnL!le)Tl&N~ho5}l(r8LP!?aAlaPQRL3{O3-YsQ{a&p4$D?f4&U;`TP| Sxb(vS0000 literal 1361 zcmY*XX;2eJ6y8`Ag(9{nP=BZ$#}*W72q2xb9f5%oFbSYRzyy+z8%YQxAqPYf5+w&m zFc1*JsfGjz2!*1t^iVp=S+5GkOhqhOt@Q-$)Y^1I+nIJ}cHj4X?|pA~cAho`pWx%Q z(F*|JlZc7i3*$QXUi}6jOAb`miB9&^47Zi_{+k5d zw(jq*OhZbF;uFIQ)Qnm!r=hx_87f2eVI{k=Qe3|;go)cq6{M;U(@ZK_t)ulk%#L1| z`ugmM%jGJemnVl%5;hZ=(Xt9|lZMk^I@FEWFGrS-S*z`hE z#x73Q?t=srogQCE{)Asl)||0_L5~x{;y<6c%ttJGNo}2?Ri2~62UE#0JYJeC7c0rb zl|aR)Fslw$7} zfH)J)B1GgIVrwMXY8FP6hm)}r#idyWIk8HXp_dZN+1MgNRE{81!A&mCPnFZ-g(^y& zid-il=!??I1!+oZTt2)@MkzncGblL~2Hx@S2JfiICN1ZfhHKIZOp07>qqd{1#?o%I zwjb@(Fk4jF^<^ZJf!}U34)k|8y4(5;>e?eRUA5ZS)nPx?-ZN-Bd)hKkOx9`{&ACyA za$4hYZQt3>3t#n*4D~opnytOoKD(vY(rUFdTdn494XsI?UB9^avQ=gOc5w3Q#pw~p z=nvO#I%k~|qmzAI{grCN+{_(vY#uL7BB3b@NyQp*l`3CP$MW>WH7dSdm{m%OVX=}6 zg{0Dgbh#+Il!52-G9>Wxf1T~^gwt?NxEJppTL4yxwJVkZ0IVlHo^JTTE!WkJ%bLeg zm+L+pQ2-)mU9QJkZ-`cFp1J#QmJ7l!{sxKb@^TFj-Fxk3=eNS#nyyD~>@vfa8!kL? z!^da<0>_@aVGaOm2bLgs1z&*>{^-^gwnJO!@Nx^6tKI`L1a{h;dHva@<=Z~`a_Q+6 zc>u%-QP>CWe9oSPxQUI^#%qwQ;bSrd0C@YkHv%-81EJ_COvJ@|-tzMIKt$}Eks6@K zJ25VX5O|G7q32L2Oe%wRZ;no(%*`|Ba^`O@+zD8>{%!x;aLrTa?!L9buij95)KpXF zw_(BL=@k^TJ@}Nh%XW|*yK-PaBwSkbd9$(tw`GNedDq{x|HiJ*i(ahVf=GCu6_6e! z_D$ZIznQ$dO;H+6N#S35boulX%_S?lEgG9gDv6zM8BQDxwsG!9D=Q|tADW%=SH3?j z1g!T*tkmsE8Xw!Sb`!efM1PlKRZt2s{nq6f;o{6wzsXQLH(L3kYO3c^i?I{`^2Jhe z!|L@75z?{ioNKHJb7b+9Q~G@2oxp$)(tu?2Dq}pon=~k!JiuG^X^ZHWs66L@bo>VQ zrud6Z9Y_=! qiA10sBmXmS^XVL>^uGpV1R5EJj{L_ELd5Kb29Ow!kL!u0l>G(tN>b>XZt-Z86O?MUo-7Lu@v;rT@ z&tyb^e2^#tF(Wo1%}3B6G1Bk_nTQXNKnQ{OVGTc{2@=B)5j7eiBnU!$Bmp{fCxQ@K zq@C4H+G}jT{k`H=wcv}z-K4Qqwq#p%Pn~n_xn&AVd-Vz=R0rRy|b9lKYGQ=p%mvVxzvMbODIluJ^0+;P8>b?jO(~rp+(Scw}yW= z0IxmupFe%`*>}5%Bhq%KXVm6v*;cbXUO(H_mL0(K7t^J$KA(NO*XoY)ga-9`-3)>d zqEM{e_xk^n%YP2wvyYDbwR+~_W`@NDi@@$WTHpmD3ZgOJ_e;wPVCvA3YtGD`d%*KN z9hd-(Y2dp7>9%a*JKCMyX*iy*nhyXJNA~! zsf#NK5mW)t7K#%|hC#^ra&?s-`d4b4KKRNLd$X4nfYWnt#&u)0T+eWWA@v$id3u5X zD1enU01cQwe&pLfU?$wjP3@m=zdC7L76AWyW75Fl+qz9VQ$N?rP)>nyrWio|<>|pp z8EUl~9e?ZS!EXj*i2t&B-SD3;3ji#B4Yt|M?OI2_)aaQY2WI2RVK93 zCQz<{^aeL^8Hx$gtaio^ymRR8Qzy>dGvBD1OPYqBvA^5*9d+FUM~R7 zIS4bxVy5x~XH0oQvLYe@R>p*Ot$XDs`w#!4cD^}>+r6`B20YuJz|&^}FC>BQQ;kd4 z6MxjXqx4T^6G%T-jOciJwNMVGQ{|0JE(PeD(Jwwew)=&Dy>{KA0PKB!zm74xAw>Fd z5vi?AKDoK)`ZxnzNEa+L9~MRW4Fs|Pf~(?;6EM)6QX(|+#@Xq)NA~S`PwyK*z1lQG zFB*{md^gmPQq4faNf0szT;BnzFSMj#8Govnu0U|*1;U5|gz|xbpZSh|*Wm**H}(y{ z>3KX1q6|(sf)b$LsFp3HmCn*=avn4;wtz7TscaI9>#92>6Q=AElnaLz#IaDU;ovIS zJ?Hkm0bt9K(2sfO3y6Z4iU?>Xm&VN)#6n=Z=_rE@cF%=eF^gG%VU#o!3qS<4>wlMU zM)VXw*)ftSwCDOgPw%z*>H>^>Sy+Hf9)UI&1UX=kFXo_fwt^>%)G3?D0`@x=Vpz}y zr{hY^0l$W167MHewgo^erzfQx8PWP;AdxivI23hcfg%tI0(U{@CoLGr4?y6D5+=CV zmR}#41)P-Nc6~tER9niE|2VMJJAZaXKGhmoJLvbt!1%hWdUo5H>UHgnn1rT={v|RH z@R`fy@HNJk6cPin5ksTigkrIP`G7wZ0SF`y%Px2T*(na^AXmzi@3?oX-xmYh|Gqgg zO!Lc3HhnUcNzGYF%aansfdE}M;M(=$Xtso!h_XN&Mo_OckbwX{L){5ezJDmKD!|yp zDp;|m;9zLYEGh{JAv5T=hG81!@Y+HPr<~Pkca-)CG@N`d&z(ZOBmAwd%ohj`a)lfe zN;z0Fwi0=YrJ-djm(hq*ivn=P+ETfE{M@IZ7j6sOxHC{nsbGvZ|F z;*oRNZWLVG1!BbVmV`IA1%HNUQhRsR)gz}D6~*^Iwk_s5-zQ>H!6DQ|6Z#A*%O&Mt zl);LTA@s}DkV<1J8W=*V-SCc(FqAJE%?9+G?lgY)@0AVmH$6n$*fco&?~AnJFPBCFaX7&g1R+faGl4vet-0?`*s}sS*iQE zG(36#OPeyq)UKhG`R(a}6ien35TV;8%^K#uATcy+E%~=iIX*x$hGFzIw#%-q+i#mh zKZ)N2Kt7(``TB~X)y0Q%gPDiMZdhHiG6`tZnlN9jsn{(J=V8tGXcR_a1#d)?VGzE& zZo~Co{o1}{F*n%C$v}Bl{`Tx`IFKH~VA004R>004l5008;`004mK z004C`008P>0026e000+ooVrmw00006VoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU z3ljkVnw%H_000McNliru-wGB40W>ezd5{1A2rx-RK~z}7wSU%mj9pb72k`IN@A8&; z@6FZ~I>5AL3KVPF&-gEq85{(w7jNtkEtJm#I;gOxWe7hk&gp0B*QdG7;h znl1&bZ(*_S7thWZz(455ef#zyXle|czKDGLmiunqy>tH$GN16YrD`ucF=S-0c-t3H1IJ8$f}hXgj;ZnT=^qh(=Y+kbz@55G*;ui0Q`3iv=*uzm9m zY8#|hHJ_C5K~v;JhYIpYc(7qD@|CMZW?<+T^% zjhAB{uJVm=1&^U^18mFgdt-FJEga__^QGzt_Z9(i%(iIi$C=EAMndnYd;zQ7Yu1?P#&!;IdZUkL9@~JC?}wdfHDfo zD4LT^5N^k~U}u)c>H|SL!sqY0?!yC~`qeYgVSkJ?NxgQXebMOf_&h=^qnv=!sc=F7 zrU)4s8k?^Zy?_dKi}GZC&5zdN@t?2zaDYs~LlkHPt?-<>FI)l`i%lB`XAW5Ng9%JE`{PJbzop&|*2Igbq z#*N1Sju}RjP?V2Wkk94MOih|2l(b^485L7qUpv}>=lJmRE~F~}Lm(9gr38cmsW#w> zAty2zA1%+_ym8k(tG@HyH`m_(%zxWEU)pp03Pd_W|H6K$!}#<>r$}^4+^hoQ1Y9yi zp+>tIB3tqxB!^TS%AKl+bOg9!;DSJT5?Ai^6F7CbWit5{5K3 z7O(`CQdmM6F@@%wqj!EMX7_auJ^r(&b@%+z^jBcK9Cp3-_f)ygHpbZg zIE`H}b7~ldp4J-DQGZypq#wgW??OirD5o$%^RXNI;)mN$+7_U)pfC&oMS73r-=)f>cnt~7s5R2GG zD3l5)br*2rDf3`pphFEECPQ5CE!G&k(Rk@U^4Na^HoW#bTz~q>Ytef`XT4T#%r;3n z;AK6TFJ?NuoQu+|0y0GpopTB(_T*t`f^4UUVowhFt}If-@Ny0cr93F1fCadqs~0Ss zyDp9sd*kPBn7#r4U=o8vd&i8B;>jp5%bL}8rlT{fITMmo0YWXn40`AE!0{zU4voNA z14=1E5IC+vwSO`J5P%Z8J)h4%^6vh_hS6i=*n0t9*t{NBEWZKOv5A^=#AqDGXSi9_ zt6b$uCBX&z*O$!8_{in6FeXK#)gg@u(rYd`ChL8F zL^{wY%`V{JTSI>}#(b}KwDCtB=p@w!f=f^^Fv`IhM}H=pK}WubllxD`z|uv?7jnoI za&Hxig|A+J^R>_RFFXlRn7n5Wdq2Pno7dx_v#vn*f?mX-9tG^5os1JHS1z94Kg;i# z*98D*Of(TRL-fq<#%aqIr}<)j#LxJTW^>tZ9r(xozcia6f*`=kD_6W{4#9EOPrm*z zbQq)5n}5gUw_eDH_8j^Y357=#-fM{Peid^k?x z6acX7?6cnY{C@(xT!YUzf2n~0001R)MObuXVRU6WV{&C-bY%cCFflbPF)%GMGE^}! zIx{yqFfuDJGCD9Y0Xn+G0000bbVXQnWMOn=IxuZ-WNBu305UK!H7zkPEiy7xFf=+a dF*-FeD=;!TFfc4zNIw7o002ovPDHLkV1looOy>Xq