From cb0b2e02d7caa4263e4bc74063295a4f050fdc0e Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 26 Apr 2015 16:48:46 -0400 Subject: [PATCH] Add npm documentation --- assets/images/icons.png | Bin 28657 -> 28690 bytes assets/images/icons@2x.png | Bin 76383 -> 76413 bytes assets/javascripts/news.json | 3 ++ .../templates/pages/about_tmpl.coffee | 5 ++ assets/stylesheets/application-dark.css.scss | 1 + assets/stylesheets/application.css.scss | 1 + assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_base.scss | 1 + assets/stylesheets/pages/_npm.scss | 15 ++++++ lib/docs/filters/npm/clean_html.rb | 28 ++++++++++++ lib/docs/filters/npm/entries.rb | 43 ++++++++++++++++++ lib/docs/scrapers/npm.rb | 31 +++++++++++++ public/icons/docs/npm/16.png | Bin 0 -> 88 bytes public/icons/docs/npm/16@2x.png | Bin 0 -> 96 bytes public/icons/docs/npm/SOURCE | 1 + 15 files changed, 130 insertions(+) create mode 100644 assets/stylesheets/pages/_npm.scss create mode 100644 lib/docs/filters/npm/clean_html.rb create mode 100644 lib/docs/filters/npm/entries.rb create mode 100644 lib/docs/scrapers/npm.rb create mode 100644 public/icons/docs/npm/16.png create mode 100644 public/icons/docs/npm/16@2x.png create mode 100644 public/icons/docs/npm/SOURCE diff --git a/assets/images/icons.png b/assets/images/icons.png index eb4fa4894e5344c4727f2f310cc8aa90026b5063..1b1906a80d784e51531b3323b1568b697f7fb6d7 100644 GIT binary patch delta 9743 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 delta 9710 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 diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png index a027c7059185eaa065b4905bbae50d3427d1ebb5..8d236a2b3de66873fe0a8e945db7b181d91f0a03 100644 GIT binary patch delta 13305 zcmVFM6o5+_J0>pK|nwUQ6X$1o5BF1g90M@P(~3%0TmSnMMov< zYh-glmOw%h$O3)d{}g@w%KExH)tz(}r_X%9*VR?Gs)o$VFLymRi?SYGvUbT2#fgv0 za9NFKqY8K&Tn0#QRZUt-7v3RNI>tGsFR1vTYyyMkKnKD>Ea(Z6Kp&7IK7Z|@D3b(w zfjHZ<^q>W(4{BDJ8enpSR-Y7hjfGT}@H_e48Wn*Q_U$0Dv1r0>1qF^|h%#1g=JKv@ z_%vz$p3wws0;FJ*bghITR&+1~cmgyxdtH6T`&jSH_i~>hKSxNfq&1+Q&i}XX;#G?? zl;Y!ae2vR!$}a8!D?kyD_kXp{0+lN6vI(ggs0HfUMAZm1E+LI<&#G&CcD0H!03sqF zrGwv{nqbIvkIN75;CJymHEzV{(W9$Fc3r^|)cB4;dS@ZK*HHsZnlfdIkLG_P?gAab zJcf_?T&4Rr05?TgeftmF$1Ps9=rqH}d`?q-(F%+Lqk$i&Ji(oV<$sCoze79l0mugA zVX|%SYNv5M>VOu&3jrJukCl_?XXm1?V0hl;^uO&Z7~S12O;!urUio zMn+PP9zCdAw{B!InSZEe&6-Ln9tJa{XH??o73SYGK1BCK2aE68aEss3FpD37^tfQ{ z;^YWlt*75lME8Lw!FF&ObkgZh1Sip<>; zML9m^bJDe_iPNRBv2$MKd-)m8`ylN{BKQMP!-frM!h{J@enhpw8$b;iGKA{XsUswK z8T0`jj}s3(L(Wk1jPAjHPlrHmS(lmsBga37n%ogm z*7V}$y?-v%^1>gTz~DHC;$HffvS!Hl@-ti&V3Jt&g9(;WGE#Q~lgT-EnUG)}=u^=J z$TEux^rQE?neGU0NGKHz4593lV9JaOp)1iLl-VVO3i^c*jR>Rv^s-P4B-krVJ6isn zk!@;y;y+;?)q3k^(tL4?y7ugLmZyTKl;0mf8Gq?uA(#LrgXO^9U!^nPevLQWmLGnX zkI2P_?>kw7SjklbLLA^ofP9V1VIf5$d{0+g|4(^K5bqxbt}%S9N`S6LPEHO@ojSEt z1lVQaYKmX_j@@e!k4~haNAg&Nd~CN&{F3$j3|9mgE^2Qjke?4Y0OY~nqnzB6 z49?k+W!)0?J-!Rh*@Ro|e?@>SI|qVG$A7g{p=uH}SET4}Z3KY*!E5Jsg&rh${OWOjt z6I>(a^kG-8UL_I8ugDo~<$Zz;E1Cd%g=)ujK+W&#o))5^VU*n$;se)G@6`OP>wip? zeKv^p?~J3|bAfbwB_!B61OkkpcOLemQ2*8x=i6*qd`-<$`Vmi2&Cj#Q^u!F(d{5** z((uj2S2k(lO{rfb1ISm6Wa&e8*KK=TY*6i8YYt; z$c%^No(-ZipVg%`%coOjA<^o8j-^XqH6WT8LVJTBprJ|ev>SONw{Q7~-hZ4iiMkFN zL2bLHP{ViklLqSOm^y@pwev9-Bb;U+4~WbM}R`rrrnFdb!~xoaH|BIGBL$+f%{L3H@Db`;vW1C8wS7)AMo(XV@ai57;?OZPRP z>94#@@FM+o`6?Yhe}VR`OrzIBe5m#K1yuFj-zYJ{cwEIV@K_+i3V%Y~kboK7E{$3s zIgTQ*1T?H*0_+W};2$M<4)@`4GuQ+2TZcZxsuf9or7A#%x6_mdri_$GfI&$EY1r|6 z>iY6q)aT=$XwZ+BX!yw@0rvqi@^f5<%kn+ay_Vj6)d+BunCimQSzHYyhvgA*9`JB_ zKd#9KMMhT?0fw6W&VRnq#Y8kDOfEl(tG$CMcW^LKMi9L^uQi$OsZHxwwk0}>a}ef> z{>^F88*kF_6Q^kP+-cOSQv^MJ5q}I0TgRHQpGRur$EG>5{O_U5OKlX zwXsxuT(L>Js)xn)EO=kW8gP%IOf~Qr5W!_?lu&|4?8(E{M1Nk!6Q6ldgyCa8=cM`k zpNb|wj|dRcKa|r!To+%PHd3En;>JCaz=oeFq@)k`Qq)sv+?++f-wg_g>!G}l&+#=b z!)5s%zL%fD&*EqDv+W7cM=Y*K78Y_fRx`IBy+(|)1hs;DrAj)(zU4I+`>=8<9BU{nfN#kkp^HZpg z`GL(n{O|v&;k0#Bd)6lE8Xrd^eCthC`HOxUh?rgiVe|v?c+f)v6mb~DX*?8)8f`x4 zD7%&beggKI9J_=lT@Cy}uMbh=08;QPFguZs*;a-WkG%FFwej_n=K6J>wanrDxW;9;EZ@WT@-xJoKz=sA zLn*-K;4+YsysC}-{Cp|ls8|8gt5+{+L-Jxm%$H)Wfcr~ZaIOk4F2rxb$o6_}{_?0V zOV6$ZFMng|%k|_Cx;-(NvJx;IrfUcl4np|>VU%KQNydBYQD<$7d-{d=w;ZOeH*ZWU zq*QYu6#ak0OCSsrkVk}v1t?+*Xy*X|a=gnT2Tf(?S5fitiJME^M%%0TAxW~axO=&b zy_z6Dvm(gPV**S`NpZUmPz-Dg*?*0?E#E-C0e@x^=Yvy*(2xUJ6!Yv$G+^(qnCqwK z^StUqlG?!UFYqy+<7-@o%i^AFzE?blpUKab-r*k|D;HoSpt^PI(r>^0rnTu>JYx#LhfC&i+k`&~@ z0|8M{QK|))wCQ{9x3kkEZp(un+?*8y8h=v1p6K%vSbC-MH7>(t`5wMk`8<9HH;?54 z90{b+?5wOTDlWK|8y_FfH9ubIA&C>&u}N+4vN@#o76N>%yam`E%iUgj*eErBvz!S~ zHZoi|AViuf^K(iNg|yVt`2Kpjy3<7a-!{^h%Z&8iOn+MTgn^z<*3;u1b=1$Gqkn`4 zwb%PSsNFfhU!Rs7qBq$2ML!8d%q@X1IskdJDnkK^xCF+4Dy1zz9M=LDz%O75@B{Tg z0ub?UE?2^}y-FfocwVH6=UpgA`MEDZZq}|}zn#pSn1L6={ZUP@;R|m1b=07_#V5@f++b}asfUKc(SrIjitEYnjY_c!mB(m z<6Zh8yAnKiGCVw72=ImS79i&SZCjvHfY(tA%mpWsf@mcsKX>)T8sSKPq9bOaEbuEh z4NjQJde}sl_nYYWe@(P=hmq#3@~7_47$~-vj#4c;>JzH_x>pCkda_^a4}XA&10@iK zd{_DccO^un6FWU1z$9=Iw6rq{%<+n=|7I1kA|C8e`#dhI=9!LGXq1)wJhBpm=fCkL z-fhHyLs{1V$4+%#16;fo@A^(Iz-fS`B*{r_h*9os+qUt>P}07~M~@z*;vzRUmpXUu zECl#mc?&Qy&~M$0m^)42Y=0;6<7?bccql25{twIKUX2c*qoKjjRuItz6Gptik0#39 zWul)y3ZNZpjI?5@KTTigPeWfaQ1T)JMZRJn^Q#8xh8kl(JtP>WT`Kzp9tz|U?}jX@ zDCPq0=JVw!z^^_X^9KgR;h0-4|< zD8L{Hbqpt32KoIOK!3Ck^80}W2o8WlU_aPvrd=D1)Oxy}Oi$@4W}==tP1aM-o;vDl z(oss7?i0mC<|{x%2597>EXDzOB=Y%kYywyHfB<70l&dN`uH&Kre^s%>P4!?BmsKIa zU!4e$8RkLxxi3JT_JI`ac2|C2AVm3$QXU1)P%#Re;p!-G41ZvWN&T2=;>eLBg#Af{ z#H63oFTebvdH}`8$4A`Tsk{Z47@|$;8m6VgJs`85p?3y2l0m|q=`UAeupYQ8=x+Or z!bE8t=f7qlItTe3Wck@h2M2kojD=2oZ=yci{K@i}fm-Y`P}{u*(r-3U_UE@Q5og|wg4A^)SN9Y@NY&9rYGMg4TQ{_H&2=p zqc-pkA-_z}vb+VD6c%uQh|bTtdJtsxTqtGshWx-aWPg9jn;A$qmju%F2|<)SI*6{1 z3!)n@Vjb{KGuQm2+Fk)fm!Ez|dZ)fK(MP)jXz#ZH)P0LTY2Meqp(6$gTxFpC zemWY^4)P1s6(oi0R*38{iV3|tfjo|aASb`@Rl$=A`ElfeXf9JJr@^={z(TdBip~_c+4F2g#u`5AP#?_S|b-=#?4IMg^ ziVN&<%=hr*XQ?*qYT)N51o$DSQ`&-aXC+9SPWM%6XD#JOwK)qFZ84K|7o?T}$^8O& z^7BvNFgTCzr+}@=YlZX{eru$(gGLJ61?g=!P=7Vl`f7iV8sFCj>V&3m>=->Ibk<4z zekma!T-VphFK|PkOv7UZo4_Ct2z)^#mse-6`=mcb`DoYl3DUjSPpdmMppAa~pnq2S z#RJ;v&SJXDw@K{{A#VKQ*8sCY9;u7dz)JSxCg@s<$q<%;hMK=$h)mAufJzfiuuxJ7 zI+I_y3Xs#{fBNaCqzudzEO9b|;%ybP+<5Vz;fEhc z8T04Q_h?3FP+A$G>w|9quhig7&ho(>PI4+GJ9Q^GA*xoZ74q8)8dNj^a)0!V(0%s^ zBxpf%c+M~b$E<=JBzzHCl!G}R6j{=+N`BVd8*&E?rN)FQ|d$>7R3p@z)z{f$E zkxnF70D5{8qE?QCs4O^@@+*G<0^Scqxp@!|l5hr;(%TcnPb*f2u=sdS5a~Gf#g%-m zq&~ulsUR1SpP!!?>~JgaKR6GV2>Ino&qh>K0dgcq=q-?0 zA=l`-2iy^1R2%J?0a5yMPbKK-ISg=&eMHaas6%TlL6{XyfI?uy!EHxVIW^vJwu<9h zd&x{~gCirI$Zs(B^M5h;{=u$c`O5 zIH@X6mEn5?-%8J_gpm?ssEZnXHR%|MQ(1J5NDkMhR?xjNhAJd@1T@un!@Dth1rgu} z<@s)n^JoO-fPV}?0?y~h>v_Y%!nm)HN5Ms6R5?G}?)}?Lm*^9!pOzA?{V%4rya(y! zf#tlR(%^sqA5Fy#ktO;v_yXLk@rL?PzjpXnuK?Wudt_+wd957YeU0C(Q5S8%81SLU z9<4xZc67m3W|VY~H@s1qL;c!eK92Va&-;W$r^fa00r!Jw z@FbQ&WMX zNt3j?HEPUGs#9myV|U*@C$t1V^Ohi$$hwIXVLO+~Wi+J|cY$g^L|xDw%mp8##=Q@p zN5LT+|9=R!+PWO#6@P@PNzba-(F{}tWga`*=&3xZ%mNGpWFxE`1Q-THlVAQHL`{BFpnt}O;Gsp&->$A486jlD5tAd^o+*Yy{=84P% znb}2j@oFK%$2eyTl;N^`kGtz+6*6dv<%0_#xPP;N@ZBl4GG}nle6Fo4o>@_&E--?c zUIA8~=n9D8<8lySS0JKH-j97l{2;rx!7V_h0DlSF@ojvrHyVur)k9elQd|~35JjPoOEsX!5k{MMN-)A z?SHIsA>_3_NbG3{?HUfr#%)k&qey``e_JNXt9Zs_#k1Xx#Uo=a3r2RH3BH^^vhxX$ z!|*Ym<7-^T&Br$caSpmrs(1xhcF`K#qox%I$c8~hd0!Bt;+L*9xJN}f0}x?QQQp_x z9m33*2WK%Er<($dnHF;Z%g!#i#xlHW4u9~U0TGt_=x>c0v!)8+DS;S^?!P~+k%OPr zUEmoAtgy&RwDGGe^!Upel=Q+eN_zenrA$9YebbK1;d6XVV$7lpdhg52EKQam{_pJt z{7e_*cP}LNxlCjQHpy8TCpACDTDx}bBBU!TXx6NmNIts*b21ydE5Z4XcJ2eY9e)R; zlH+`j#`S0l2HTlA&;Z=;6`<#%6(EoU5>%9*3+AXO*9+tW0`X2H)e3OrfCLp%n+xWs zDAx<*yRp|q6-z)se{+EGs3bRq@SKSdvOH!s8wZxwU+)JWe5FCnnzQ3ka~of+TH4Gi zRnn&8c$|;V>@IEF{_}3T?Z~QWuYa@b9MPb`0<#18y#nay*_%?$F7f%JlrrNO^_zKI z6{#r8_dK=yG#x&3gJhfa+@(T(Eg`cEnfPu25^}Q#%1fVBt5&sQWM3{xzPI4M`|ji8 z6QH>(5?uIbm)4NkUO;ZLm!F|=En0vnpqb*l4g`Az=-FrrZU6#>AP$r?B7bD^D*}N| zMAa1BkgeG)@%xD=LMFc=5U8@b8*VZAZ%2(zG;v)5_Xu`aj7GOM=T1vYt5Uo6tW?z2 zz5+##YjZCYRjW2*N1Zye6aHe9YO|hkb`MKc+21GRxAUhgsaDr>>Jdq1eWY5SOmaAe z6d4@b7a`v>VD<_6{KqW01b?eK>GQi+Cck_kGQ}rDO8H@b7AtCed@O-#akh_9>5!pog-X7u59%u=FCuCO-n7fs)21 zS^v#o6~ao9r8obq6a=_QmMF5=_hapDOGs-uBzDtc7UFXs+cWabW`F-zgA9fTG%BNZ z?X>o&h4>uCep8dK%C-$genK^*Q?2#~0}Tc3z@Y zAOAtq@qO^z6O{1WQPl8`)1wPc(UVJmX84%Tar0LxLwpC2TCG|&>G-wRUb7;Tk9F(TtyW~=v0k`v!TR*mPfO2)Af@K8 z{M}CER|u$-D0D-DZNX}wQ=Cr#qZEHU44`>w3b2%;(hY)yf|U+3moxz*!CJ7L;bYr5 zd$a62fgPZ?3(^V&D?y~4YfZpNuoi4*_}F&tUOVMGfgQl<`+t$iraGFq6Cl6el>K}L zgForC1~TZ~6`|-K^#9##4w%UADyHx58BybN2i#jwv*xUE((q#4IUOOz3-arz8E$Ug z{PjADpOX>fa*y3Fm-2}}uEwU4h;!K+i=D zFbCuTa=;BR57hF&sBaB02jmr#{(K&A`TdaJi!3Q+bAQ)}Y%aaKn`rbf3nlk7k}Z=tKgYtdpcO`G-wty=XHJ^Snz)V%p3={)BB&A!urxTY5R4|`Ov zK5IyW26OH8`&9?KND+m%3n;fBi*6L=kTOpGPPF$VI6-s*$9VQ!Qnqy|!MmA5Mp-_g%UjT<-SV-kIS8#iv0JiXz)4S(L3 zo}MlV5V;)rJKuAwdiCmrcV$X_ZFWNR`FV)FDh7d+%~>PZ4U{#=r@(R`k_=P_!$1ec z#QoY{0hT-(i^KpjE`rZMCLjghfu^M>zs6vXoque=pMgxEjPHO;?}wmHD&@!c`5EYg zH^PXrJJA>KwI`jUJxA zet*D9`GrJ9x2)2X7^MW0(3kkhcUP5Dm$>$~P&Vj6O8Mc_E*NQ-KBr8XB8e_HFV~7K z3;w(w9UW~&LS8GnHKgyHokzR_@0{mgw3j?dF{8s(fUljtKMOcur~hvTcwZ*X8el5u zDf=D-ns^21e$-INZ$AhEBK85Y!w;Z#X@AuG6!O~-f@IhCk^T4qsD3}Bbi|$jS$K

><< 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 DFB_7x delta 13275 zcmV<1GbGIY)CAwu1dt>FCb1>e_J5Zh0RbIEg|LZi3Im7^3W(@K8AK2TR8$xg9f7c~ zk+5u?JLx1iedhbUuCBUOHDq3Xx$C(Zl=0-^HH&{LN_<>~ z%WB*k6~HKP6(GG;C21*LXq#l|80VOtp!|oj2@Dzo9S8-{peslKJwTH9w10=9OakZz zVr+CZ=!g^=Em-`I)IYN5HtpV-7_}`w3RxV0Y zijU9nH7=tmy?6*L2L(Xh*MB+_+*k2{O-PkMHBi$gs(PS)F{x*JR!!TpE0vc45D|V! zZG7(41cPq6U4D26zl-0gaUq5eA6^-<>j)O3#&-hJI}h2tg&JVO=QL#(&A>1)9Qc6yC%AL4EPt{6cW4DRf=obe zCe!w=RvPD{2517zpf8vNhJ)T995j+7?+H(M!XrSH8Cretd7}*8eS_bvc68n*x((nm zAO&LB|14MshJnT!Pk7>Q7+3@miP<7Q@-j zJe<08=|Y`4bt03=M1NJQR#i&zD3~ri<35gVA-)Y`gLI?YSiIMST6~U&SbPYi#sq2? zC5Cxx-Ti(ddIUTJwu7@E2iydwz(z0-)Yf>S)B@7G1W3Upj{sf5akJMyp${d0ahwJo z&8DPnhbUrV3boYgl;!vwU*j@dmha(vi+XpKrtoMDb^`*ux_^a6j2OYIV5F?fH*emg zoSYm9Y$-~}q$91n?cKXK3sNq^Js<+ySCJI#(>%i8`%_4d`iJRgMwBnDi1DK}9sOuo zv>y#`qbHVO=OCZu4xfX$Tf>@Z;(J+|FNtq$e5X&iv93z-)dX|FEh;+F!9-A5K522hO}HG~AO zf*!!_aq6+>$q{Ov(K*oPxgf}GT!ewX>SCt!o`FPtgMW$of&Kv8=^aG>?qsGX1GE$! z=(FD5bA~mq{7lz&VL2^cdWXW0Ot+tJgDooM*9;sc=i@)1fyNWX6iORYmtw# zy0ZerVu}Vhw-pdr4{F|b0_@qdC#O~_6wZ~GpP$d0C~-f4l(`t`tV>LQ;p1LJP3{;e zYkDzr-+z*7d7)2_XKf~7Oh_;X^eFEF zWSK?y`_M<7O!tI0AeajJ22o~GAf?9y(Y44RO79RvdA)*&hJ?_6x>+a+66_YD9WH;) z&=%D`^Bq5zs=fO&X}-Ec9lLfq&r?BE%I^=LjDJ+H0E`Edz%pR(uhKd2sKyg6%MZWH z$K+ze_nj<3tmLW!A@(UufP9V1VIf65d{0$e|4&&<5bqxZZZLeTN`THrR#p~GnKGqB z1lVE0DvDk5zTInKPfwtM$8uPNd~CN&?BaF&3}*xwDr$a_k&#kTSXVWzAytJ$?W#*o0f@e?@>SyFvt)ihpbAeC!BYnX`plUtPxXBN;bb5+L_|aq4v@ zGc!}F2`U5UcvV8N1=wlndg`!nwcTsMeTUJYS1^YIq81F_)W2CQh74*REY7c_1}AkCYZmfPdWg*X5m0NqOGXu`3Nca+9043?K73WjVf=pP^QO zGXT}AS5Ha;;Y#oyhe?wr5!Oo6ojZ3(9{kJ(4H^gu&Mr>^jBoAtaG=>IXE_ErXpl^P zAUzh6dm(_%eNmHEFPlc``9!P!Ifkx$Q-^3m5bX_oj0Pse(r)C9+`i=#dVgp7MC#aY z2(|2(M0GznNE)c4ZSnvb)XK|Tgm4;x93bKVsNsaLYJ+1y#2sL8S%CKAbD%Ac;v%9L zkWd1$SnnSsUY2L$H!A%ULM(t(W6Jp=LkMQ+_m-z67rKs=UU$K06O|bD++GjhKBYSNfACF^y?mPq6I

LYb% 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 Z_FvqMC0z@D0p$Py002ovPDHLkV1igNQpNxP diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index f18e4523..d333742b 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,5 +1,8 @@ [ [ + "2015-04-26", + "New npm documentation" + ], [ "2015-03-22", "New Meteor and mocha documentations" ], [ diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index d9591eef..81ee046f 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -265,6 +265,11 @@ credits = [ '2008-2014 2014 Aaron Patterson, Mike Dalessio, Charles Nutter, Sergio Arbeo, Patrick Mahoney, Yoko Harada, Akinori Musha', 'MIT', 'https://github.com/sparklemotion/nokogiri/blob/master/README.rdoc#license' + ], [ + 'npm', + 'npm, Inc. and Contributors
npm is a trademark of npm, Inc.', + 'npm', + 'https://raw.githubusercontent.com/npm/npm/master/LICENSE' ], [ 'PHP', '1997-2015 The PHP Documentation Group', diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss index 0e40ef14..34eb902d 100644 --- a/assets/stylesheets/application-dark.css.scss +++ b/assets/stylesheets/application-dark.css.scss @@ -52,6 +52,7 @@ 'pages/moment', 'pages/nginx', 'pages/node', + 'pages/npm', 'pages/php', 'pages/phpunit', 'pages/postgres', diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index a7810b94..4fc1fc87 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -52,6 +52,7 @@ 'pages/moment', 'pages/nginx', 'pages/node', + 'pages/npm', 'pages/php', 'pages/phpunit', 'pages/postgres', diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index abe57e13..3093a756 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -99,3 +99,4 @@ ._icon-symfony:before { background-position: -5rem -7rem; } ._icon-mocha:before { background-position: -6rem -7rem; } ._icon-meteor:before { background-position: -7rem -7rem; @extend %darkIconFix !optional; } +._icon-npm:before { background-position: -8rem -7rem } diff --git a/assets/stylesheets/pages/_base.scss b/assets/stylesheets/pages/_base.scss index 0d61b1ab..59bfaf48 100644 --- a/assets/stylesheets/pages/_base.scss +++ b/assets/stylesheets/pages/_base.scss @@ -27,3 +27,4 @@ ._sinon { @extend %simple; } + diff --git a/assets/stylesheets/pages/_npm.scss b/assets/stylesheets/pages/_npm.scss new file mode 100644 index 00000000..9bbcc74c --- /dev/null +++ b/assets/stylesheets/pages/_npm.scss @@ -0,0 +1,15 @@ +._npm { + @extend %simple; + + .pageColumns { + padding-left: 0; + list-style: none; + } + + .faint.heading { + font-size: .9em; + color: $textColorLight; + } + + .youtube-video iframe { width: 420px; height: 315px; } +} diff --git a/lib/docs/filters/npm/clean_html.rb b/lib/docs/filters/npm/clean_html.rb new file mode 100644 index 00000000..c86dcdfd --- /dev/null +++ b/lib/docs/filters/npm/clean_html.rb @@ -0,0 +1,28 @@ +module Docs + class Npm + class CleanHtmlFilter < Filter + def call + if root_page? + css('#enterprise', '#policies', '#viewAll').remove + else + @doc = doc.at_css('#page') + css('meta', '.colophon').remove + end + + css('> section', '.deep-link > a').each do |node| + node.before(node.children).remove + end + + css('pre.editor').each do |node| + node.inner_html = node.inner_html.gsub(/<\/div>(?!\n|\z)/, "\n") + end + + css('pre').each do |node| + node.content = node.content + end + + doc + end + end + end +end diff --git a/lib/docs/filters/npm/entries.rb b/lib/docs/filters/npm/entries.rb new file mode 100644 index 00000000..690f2e6f --- /dev/null +++ b/lib/docs/filters/npm/entries.rb @@ -0,0 +1,43 @@ +module Docs + class Npm + class EntriesFilter < Docs::EntriesFilter + def get_name + if slug.start_with?('api') && at_css('pre').content =~ /\A\s*npm\.([\w\-]+\.)*[\w\-]+/ + name = $&.strip + else + name = at_css('nav > section.active a.active').content + end + + name << ' (CLI)' if slug.start_with?('cli') + name + end + + def get_type + case slug + when 'files/package.json' + 'package.json' + when 'misc/config' + 'Config' + else + at_css('nav > section.active > h2').content + end + end + + def additional_entries + case slug + when 'files/package.json' + css('#page > h2[id]').each_with_object [] do |node, entries| + next if node.content =~ /\A[A-Z]/ + entries << ["package.json: #{node.content}", node['id']] + end + when 'misc/config' + css('#config-settings ~ h3[id]').map do |node| + ["config: #{node.content}", node['id']] + end + else + [] + end + end + end + end +end diff --git a/lib/docs/scrapers/npm.rb b/lib/docs/scrapers/npm.rb new file mode 100644 index 00000000..e3bc6f8a --- /dev/null +++ b/lib/docs/scrapers/npm.rb @@ -0,0 +1,31 @@ +module Docs + class Npm < UrlScraper + self.name = 'npm' + self.type = 'npm' + self.version = '2.8.4' + self.base_url = 'https://docs.npmjs.com/' + self.links = { + home: 'https://www.npmjs.com/', + code: 'https://github.com/npm/npm' + } + + html_filters.push 'npm/entries', 'npm/clean_html', 'title' + + options[:container] = ->(filter) { filter.root_page? ? '.toc' : nil } + options[:title] = false + options[:root_title] = 'npm' + + options[:skip] = %w(all) + options[:skip_patterns] = [ + /\Aenterprise/, + /\Acompany/, + /\Apolicies/ + ] + + options[:attribution] = <<-HTML + © npm, Inc. and Contributors
+ Licensed under the npm License.
+ npm is a trademark of npm, Inc. + HTML + end +end diff --git a/public/icons/docs/npm/16.png b/public/icons/docs/npm/16.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2f7787f74b03e8647085ce39cf0672b7c38f7d GIT binary patch literal 88 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|@}4e^Ar*|tH&(B46O$O*>F2gQu&X%Q~loCIE(m7~22< literal 0 HcmV?d00001 diff --git a/public/icons/docs/npm/16@2x.png b/public/icons/docs/npm/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..17f4c2d62eb29bad6676d56a7cee59385e03da35 GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T=yz#{r~^pE4lRtP(;+z s#WAFUG5G-hjQ{`b8$1nyryk&DxOGlFbmN*AO+W<zopr0G)#!Y5)KL literal 0 HcmV?d00001 diff --git a/public/icons/docs/npm/SOURCE b/public/icons/docs/npm/SOURCE new file mode 100644 index 00000000..82a6a1d4 --- /dev/null +++ b/public/icons/docs/npm/SOURCE @@ -0,0 +1 @@ +https://www.npmjs.com/