From e91ca0e6e29e4570f6760e34aba1326941f2cb18 Mon Sep 17 00:00:00 2001 From: George Treviranus Date: Thu, 25 Oct 2018 20:44:55 -0700 Subject: [PATCH] fixes to scripts/ for consistent release versioning and hash creation --- README.md | 19 +++++++------- dist/undernet.bundle.js | 2 +- dist/undernet.bundle.min.js | 2 +- dist/undernet.css | 2 +- dist/undernet.css.zip | Bin 25217 -> 25217 bytes dist/undernet.js.zip | Bin 28590 -> 28590 bytes dist/undernet.min.css | 2 +- dist/undernet.modules.js.zip | Bin 9057 -> 9057 bytes dist/undernet.scss.zip | Bin 12646 -> 12646 bytes docs/introduction.md | 6 ++--- package-lock.json | 2 +- package.json | 7 ++--- scripts/create-hashes.js | 49 +++++++++++++++++++++++++++++++++++ scripts/update-version.js | 40 ++++++---------------------- scss/undernet.scss | 2 +- 15 files changed, 80 insertions(+), 53 deletions(-) create mode 100755 scripts/create-hashes.js diff --git a/README.md b/README.md index f9b59dde..ba5be7d3 100644 --- a/README.md +++ b/README.md @@ -126,10 +126,10 @@ Clone the repo and re-clone the wiki contents. ```sh $ git clone git@github.com:USER_NAME/undernet.git $ cd undernet/ -$ npm run setup +$ npm install ``` -The site is both a demo and marketing tool. It is built with my own webpack setup called [Pulsar](https://github.com/geotrev/pulsar). It's basically just Webpack + React, so don't panic. +The site is both a demo and marketing tool. It is built with my own webpack setup called [Pulsar](https://github.com/geotrev/pulsar). It's basically just Webpack + React, so don't panic. :) ### Run the dev server @@ -183,18 +183,19 @@ $ npm run js:watch ### New releases -New releases are simply zipped and compiled files. +New releases are simply zipped and compiled files to be distributed on npm, then for use on a CDN, such as jsdelivr. -To increment the version of the release, run the following command, where `VERSION` is the semver value. E.g., `--tag=2.3.0`. The script will find specific files: `package.json`, `scss/undernet.scss`, and `docs/introduction.md`. It then increments the version, creates new sub-resource integrity hashes, and updates unpkg.com links for CDN access. +To run a release build, run the following two commands, where `VERSION` is the semver value incremented from `package.json`: ```sh $ update-version --tag=VERSION +$ npm run build:release ``` -Then to build assets: +These will do three things: -```sh -$ npm run build:release -``` +1. Increment the project version across multiple files that require it. +2. Build all assets with the new version. +3. Generate new sha-256 hashes for CDN access (see `docs/introduction.md`, "Get Started" section). -All that's left is a `npm publish` and the new version is out in the wild! +All that's left is a `npm publish` and the new version is out in the wild! Crazy cool! diff --git a/dist/undernet.bundle.js b/dist/undernet.bundle.js index 38a9c9d6..ed8cdbc6 100644 --- a/dist/undernet.bundle.js +++ b/dist/undernet.bundle.js @@ -1,6 +1,6 @@ /*! * @license MIT (https://github.com/geotrev/undernet/blob/master/LICENSE) - * Undernet v2.3.0 (https://undernet.io) + * Undernet v2.4.1 (https://undernet.io) * Copyright 2017-2018 George Treviranus */ (function (global, factory) { diff --git a/dist/undernet.bundle.min.js b/dist/undernet.bundle.min.js index a9947d96..f155d999 100644 --- a/dist/undernet.bundle.min.js +++ b/dist/undernet.bundle.min.js @@ -1,6 +1,6 @@ /*! * @license MIT (https://github.com/geotrev/undernet/blob/master/LICENSE) - * Undernet v2.3.0 (https://undernet.io) + * Undernet v2.4.1 (https://undernet.io) * Copyright 2017-2018 George Treviranus */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.undernet=e()}(this,function(){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;n;1w$Z?jOTC6)gw(#g%$}Z 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 H)vNyj?H5ZN delta 6929 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 diff --git a/dist/undernet.js.zip b/dist/undernet.js.zip index 755fcc34b68540aa87140b0e7ca0eba378cbd697..62c3ffceaabc27ad460ec7075ac7e7fe46a2d2de 100644 GIT binary patch delta 9519 zcmY+qRZyJ`ux-o23GVLh?(V@YxD(vn0(>|mxCDpb?(QzZA?U*0-JSdITeZ)r^U_s4 ztGeIEs9C)Us@?=)s474~V?jVbz(dRx>M8|=isvU_P{IjE|I-(Z{+A#`0eHH#g;4(- z@wW6Ihd|{7pIslIoAT;()bIT^$8#L`4A6XEuX2=Qo9G@_fGoJEuC6YxcKVrJV{DIp z!~OgtW5PyD{U*Ry`DMIZFZG9@Ag^50nt}AKUz3~UZFz2sV5YrzRJ4|$woO1&!>{pQ zID)cs*L&VP_-v}AgGjC&gn&O`*W%3HKf2N93776}*2GK;X;0&>k8z&2O(4;Wi`9{i zKcXv{Rdbdk_D3vv=4F=Ac+%io(`A2s}6Q3_zk7>tgi3ThiL0Z#LbnUh?G4C6=xIdbKMkLN0IPslmKG`sbstZZI8DZz{?h`Dg%x=aJ&Mm6hhGFVZp-n|X(E z>s@^7x#ts^NKWBIS9rSNbkCA<394_NiOS)UN13+~&Yc?vKvsnCl2-S@`NQ@c&2+NH zxPo^I+1)B z5HO9BKFa_Spq*P!Z>>uqQK6)Z{$&M?eBI8gP)5$=_IcCir}jCRwTzRX)&@60vI znvi8@c3u|YEiK0OIBzM*O$Or{H(C(jC@(;YDTzwtlQat3#;Tx~Enlfz{jPZJd_8QG zqEIdfmBIBOl502QX7yndA)K7MKf6y&dAv`}0AiH_bZC~XMy-ik593iBTwA$LvMgHM z@*Phg<8&fGF|C(Gn#BDAVW|0sWW7?YeTOEc#k%U$E*WpEhIa}XMwz%MpOZ{`4mnJJ z88@W`3YHpkO@am;BvxfpT++KLw{B*TxacE{|G|I{IG`V9vVtrlS+W$Ur$X?&XN(V> zHN~p|=vY6vnBTTNWy@8gWwI@W@=e4=v$nUT%mL}oLG~Ff-OTfW^~;F5ntX_O5CniUaGDNCCxs$?G`G1Cx$oa zc-Vkl{aq*QcW9oNdTQKUPmHS|5&tv)y;>mc?e4(b-P4<2gkTcF(@BE{Jjs)F&kz?S zJuQUNRis-q4XJ>t5+D@L&GsW<(*kmxy|qBJcaHz5vFC2NAiJjLU;^T?QT|_HJ1rxi z$9yY2x)wW-^q70Tqpz3D-pUJx%$ee)7SXQ(Wq)P)=(r+7|4L7CVec?181}WE+_g3= zGr+^g=Vja8)dwL7N%xE~RaV3_>P64o;4`)(!hTU~&8SmN4&RUkw4U58?KcfFykqy9 zrYsZ;;aqN69N@07e&AsZK%>$|v!w*i*@nN~2tYivHopX&oyFfDe1UB-U?Hw6>J1_? zQFG14GBHVD7sIV>q&H+&(-~UuL(to4|Eq1LF*ABLV?97)W(4HowZ=wyO9x~IX=kqs zU|I!cB}JOQi!Mt_fHK ztfW;4^i4B=L#HLZe2EG&odjQ}8N}{iDXux?w(8{%hD7c9r57U3H2NLTj2uEvlgI+F6Wdv3y6U&((ydq0 zn13v+OQrY$9px5_2zHi4Ya-EQx^%akUYoXXdsTZSP?+j~nJA(?|vG}ME}pl@ScRN54)8ME{`vL|802kM_7dIBF-v2vjp zwy+7IVpzWU^$jBe@i}auJ8Ht1i|$4W%JV!)9erSXw@9s0yaNlF%G&CLjBp*=T{sVSs3))Bm zhYD}>1fI?n8tSpz_?E9~wcWPk_(CK((MdFX{kttn; zE+8)wVJm4-sBQpW2p}YvKs|SbVJW!78j!G1JVA^$bVxyPHN()#zdwbgBlDkB%P4Qs zgNANLT7~ayy6cWZXwC~>+JR?-Bi2};rlfNfOZ@hWLl+9)1_Xjb6z$72s+tKwhqE<_ zB@~;n&pCjUX;JMr`w6l7la`yeJAvP$WRuW>>`(GYY#s0rwjFz#=~M!pui43Ci%asr z$YQ%Z>#M=?+C_4(bm&qvi=RkxjJ)?9LGfcXB4ok>Ns-zpl?)q#9s_UrEsIu{)D0`d z(&Z(`XT8YXi~~J07^!Y1d59BFVo(nvC-;06ruX_|pwo-yg*XO}W>bEa?Xra1l|XdFX!f~-WvX0 zRD6V7bDqqv$ti;6p!y{BT8i7)HpDw?Y)!TryDz{O)wzVupsFsus%^)eX-QvVr+?*6 z&pDukt+zSa~$T%wD+ya=3Tb@P8b1?Xy9V#iDCwZVnjm~hJ=(1PR6yRNTQ=J6% zb{7Csb^zd;{fwCO-Z!O`H-@pVmntZ-vZ=dCySKA<-oZZ)r45EwEBw$)B>b=G=Opdy z1p!^10Vk2HKYxf;HOyHulmtcEvSOx{V`EK}Q=C$_a*JHy#C{TbJ=6e-RvK(%7>f@5 z^3V)%ejFN-)(iW+&qrtLdj_#r!Bw!N(}z0Pon~N|2WNL4V#5GYVWBLtMVEv@iar*c zIu}nKe*1sWD8V|t_;(*pEF~imNkISibU^iyY7AM%UEz1sJ59s!XDzV}f^sd4Hw#;qLa6n1zC;cW?C@0h{bVZ?gx2k#&YO-XsarLczkjgRwW&gj`qx$L{W3prk zYL_^&Wi|Fz+lfnP<{EzGt-N+Tn9O~Gns98 zgh$PNnPL3Qz<4{UxPRBWP8El!v6cs6;w!==GnMj*sj-XnZ@SAw+v5gNy$Cl=`$hCH z9?z3V>g6&9yu-TLZo;KH4dC+E&L90z4GtaDXsE|=k3nL!ssWo$@wJ5AmV$$w)iWfM zBLlErRej#dF@Ki)ZBrq~prrjAzT9(dYzYw;-|E9@PSWpM35*c*d}!NCi`b>v?@$kr z6b2P!t}Cm92hnDdKeYJBmukLO{xyMZgu(K%7bQ$_9s;494%|U~sRm?deIkq6`6ivt znozZ%vBUzjrDV)0oiy{|Qr~8=jI|nEdw#YmsBxWk*wl4W^1>6<69VH4R=o-o`w0f(kx&D^}b&gDX+dbkjtJ^~?&7MzAC_ zc*T1d&S1K@LrdQ4Q#h|!WDiAP6@6G~u^WAOxpu4CjOsPe1_9qsODBY-w5Iyzlh@{M zZC_>na7rOTxpdIX&I;CdEyd2?Pz~!F7{)E#4^p;W%zuBQ-$d_@l)Ps+Qb`9LMN_|9 zPT00-oE-0t%o?NBRTzJ}wKDMLA593l`gYYllwN--M=oeby9 zyI6DWbu-%B95hI4t6Iyfc+ze~mnMDmUG_OIGTZNr&Vj*(?DE!y+`cI~?+uu$XRx0uPNhw6lq zg`}L3%0Rs?^d5&FZtBi`BWxRXUX%CX;GP0A47sDV_6=c5QOrXMx~nl)8Ch=k~pvy9hHp3yhI3B|oZU_vzYKP-WK=TNlu z>4{e3Y00qkyzj^;DY!O|^K0nXKTn^*HyZi~68q*xC9Woxj=H;?q~I5a`bU=P? z>`pg~TYz-+i3wEXu=1$b5Mj0b`yk%7#J3tJ5pjfONgw?_?caKRl2q^`S7zvzfI?Rn zO}N?HzjvCPisicR=Dat265HJsfT0@KZA%I?>ubXqQ*`tCE%plk8hA(g#s!~;G|+0S z?p&mOXlUQRbuOQ$!LB9jEFU6^*RESpBdsy6w zL0MfZl-k0)fM(dR%P52Kco4aRc62QE9L;uVC?+*x>IF}!v(o&=R9*uJ7}PrU)htcx zCLGP}gPP-@G5WhG`L=?pkdo9hYA*`LjI-ZLBRZw5JY3q6rdAG>&nf(|FlI zVl3KUXic5Q?Q?7vBK9#|yw^XX-sj7f@hB0W+b|9`j$a=Hw6jg`!+&kqNTg38zg7$P z$C&b>D-!WfWRd(=->zcQ_)FAZMVB@hT)8`8jvyt1>^}CQF->~{OwuMm-+dDw68w=P z2*x+BLM)U7L2l}%#>g{`4`6aoKc@yDuE@W>N3~=&D1=_NeOIQv#-`XiJw*sGbxPh= z>4ujG_RAU6xv|PMbA<}hv+R7Cyo?9k&|g+}ES1+i*LlMAQQ&u?y|%PpijkJQGP`uF zzZt*jXmFm=OyoxZ>ddCgnC-HH$^LJ@x~m>%vp2h%zQw*K;#3*NH@!(C%fqdo2dzrG zz|F!3pUpRFYwz`$k5QtGbM7#U{lRE~%@9SF$|Mk*OjZ`O5#W+-UM*s=Z#b)QkJ$Z( zg<#iVJqmZ~jywCKN`)Jut4swu)A3v?V8lrCl*>TXoXl(-STFDgJz|m6CQ69UWJur$ z`XdN_lDESsZ@(FBp}}i)_r%0Ylf#LRj~E?!7UBv-#g?G)$O0-N>Zwj8d z6h7L>i^R)JFE+|c*oUEKX%n2c13EOq*TW7++ow07 z=QGC&2P3*iJM=!N?b)tRLl>`q2e!sBYD=Bup9Przw1@Q>+f$i2q0HD&hkY%74zC_> z#=kYwKmD-kQo65(P!cCEg8!n~8Q)Eg@D-(j4cTFkxi&0td8VV;);>;p%Bv?|0Fwy05OHS`w#)Q}okehVu`OWj>FMz)Ln~h6_k7nKeWW z(Og4#a#8}B9~z7`nAy{Ab_JMDM)5%O$hke-BT_nTVAZ+Lns_{AW8>wI-15QI8w+kt zFrdC+yP1oppNp!Y*S`zQe=<2Pk8SAJ+NK!;yeRi?2DEhI-@zFg_7fW}N&_PN2)=`7 zpx#0vn)_eSqJDl308Owzcf41RhZeKZKDgNEjX-Ul=0=-+ukZJpRjpQZhX^8dABc2N&V_>8B1-;^ljHmBw|+*sazu9 z?{8Z~^k5eYNRHIE#J0F!y+01B%+8fQtaAovPbRky#lAPw zx-2J7db+Mga(nk4+>7d~$x1Qrq)FxTn{SfLAC)2yQ2$`~f%Du=)^j$VfROtc3TFK?B+{YDlXuem(7Lai)vv^r!|Kgcvw-n>Dud`%mNlkIGNN!y|{huuT%g^9FieFA40i zOG!0+TooHMNv3fpe0pv#rkS5^RSq%pp0oH;#Tcgs8kwF(&v^+OII`>0idhB*e@NXu z2&QvjLEHaE7jXM4DdVPP??|C+fm1>yLAY>`C}SbaLdtknaORC2di|rWxu7iUU+G5>^?Z(%Yd|(`DfM9J{k`W`96ihG~K}wGEjcnNJ9E zhxT=uAJ-9&f0t~;s{frDo+LFIBnovZea#gW5_aeuz;e%?+VP=(1b98!+7XiybMcPs z9oy%7roR_I2>H=8ZYexx9dc3f>w^U6KgG4ue5a99*$**FHohzCq?e$4#lw4S$l@5I zM%C^u(+QDG;|?@s?v&AOvIHsU(TvKVp>LQPN8H%`%S%^FyBzq&WQ?$Ro}m z%wJzv{xXkU!jFKT2J{}#%z6hv+XOX_(-%A+seQE_bf(Tnk5s{>6%rNwf#<9^l${}n z!%_jgi-SEHTzmWLAJ|@{YAR+yZ5OA>JRNYO)ah*V@vWEW+qR1PEW?jS(qvLRXA%-l zS6(i{MVrZ5YB!kjfx2Ix<#Y9fbmmgh#5I?3h1|%!8zLUl1wy4?Qi6Qpmz4+__!M`7 zrKVCeoIToeT!Mcfcz3kuU(dxWyUXzQ4py}05ynqeKJd*^-b@geAZ@%u$@cYJQFy<3 z^Lz+^Kb>8@Ir)Y7iHvg$qi5g^7VdY=PFYyww=9~PA`2o5N%|+R$KO?wX0gAZ%d}8` z7efkBv7io70fsPTVC432Wk_`3ao~(=dXvo}`B9gS2uMi-UY(l(7iUfp@E=7PG>0Ac zZkTRQg#jUn=_eMkE3DZcy`qRSSotrgp-xcDQVad2SMg);!@av(b3MADHp%gE?s_<> zK4~zEntwQ{AQ;(HQ7MmQGe{Y=f^+UcGwg>=$h0`zK(1BMcM_#)lI?OzE@V!f#5Hmz zf7Qn?K`z5yBU~2b(B*y~psYdR^HYXS_(mLv7P5NA%9rTWJ378aRI2l~_N zOWbRBPy%y**~2#xVR3lFK~7jcPeXXoGC2N5%d-?2Mq?_kDO}vVjw>ZxV4L97pr;@` zec@JUb$x^*z@2r&3vP7Ju4Z;%mY|y5#BePeU}U{mGE~~JlDpB|2frei#|q?~9s0E1 z3@|BZvDDytd(M@)2g^hdCG7p%I%$_^zna|JVjY-hGQXXl9y8mf7-Vd)`D+lI5Yl<_ zb79jxRMQo*NXtblDLnIK(*5 zNI4hC+L>|g&7THca|J$-4f@pfiCUa3QkGUo711V}HkWi#92j-cGU)az-33ncbC_b+ zv-G%*-gl~Xx8XyD;0v=|65=58}QMoPLw#I#B+7mii zFQPLk)VBpT_&+uq1`Mg=(u9=>bMG;F~6d&=HW8I;M-G_M3<)mIt1 zk=~)@RtRWae0Ps|VmIw44Xt#r%BrBrC(&Yq^gxe{tjVDY_f;Cus~L^=Udcis`7^m+ zKqvOsKwUez68tD&eL~TUY_e@$$>|I8+eTA1B3{{1m}nq^p#-tk#*%&j$dJ&LQKrsz zbhYtBZYs^SjI2YfJhq^}QynsYhZN@07g)qFR?&1a#elRAz*EMRp~3OL3fSMdkd1EM z$P;Lg7cUJCaMLi>hXT`c{qT_s?Xy4wsXv6t3<`1T?oQwp;KwINL}!!YeK}{#yTuuo z&%hb3AQpVh);l9fqRD~)V%l@*@Xm42g;Tf`=d`#U602~l)=gCEyFhg^RJhK59O{&F zi*N!E0qNc}ljVepgopI@|bq-&Q_cAGgy#EVuLQYv;efv-HNQ_{lz<#dpt1 zwx+q(&aom)wNs^D_ScH_rosXiFv2$vG}~-mR9l$5$fDCcQeKzZ82@72D;}YpjZ`i~ zPuTV`PDw4xNsjrL4MJz%E)ILGnqRf&7!&Y5=aaY+n#NcLl2GBn*z1UDig-%NrcSuf z>f*}f!uoSf;Wqccu@Mbirpvo=w!#8LNJtDf@>tHshkEA8WUgJ>Z{@Wd4GZ52-@9rS zO^;b}OLM)<__Mw8kAROaof$EDwuw1RZ|%87fiGqWD;LOYMoof|!^x;{^ZT-vKZVM`VYDuGM*# zxDaU9+g~{WGjIL7NhT9nx<%Qvx29WIUBOFjFG7VWA1kNL<4i=wdS_dF2E1|NWxc{| z*mWwsBSSAcg}bq_h|^$=%fSxj0RIw1UnkF(+8M_yQ#qhgE-kR?I^06iDmSrSC-K0a z&fcqELWY67WKEDC$e^m9*1xE1ZV+#ac!6uci^! z+Ulkc`8_5O7LIJ6t-f2q?`VxUakeSg!2>zp1Nve?Gu^7_tDH%!z6JdKZ-z%i>r${qCglyNME^eO0{=1W-#8 zgBpQ1?%yPa1)CYo@oo*(;nF1!FSDb1C(XFPruX$yjWOZhl42wKiqapEqF4=A-bmbq9Km$fX1&c}fhI!Gyp$$$g?%4Xd5!{LBFErjdT?E$NPW2L!p ztU6oDeOMW=q}R$r!->XIhuJytf*^iU`2*nKAd#e|6=jZF#U7V+(ioxT(6yp^o3~)X z$;Z}jThxxCDm%LJlL7z1t}9iQaGIciBy28lKIt5>5@>?)KTvK31&gF}l-t%G#_@ z!cxDuTOI1k2XiO*|J-*E#P6MulUDwTAD}PM#h&|P9eoFO1(z=EBpoU-H)X#}!Xe`7 zgvpk7st|lOa0{8}n+%EH7$!q1b_ zS(+{YCGaFeSao>UOU3xr*mSt?A7f@sK2g$-RrgQhWyiKrkLnnGk=j3Q$Pii|v4Q^3Lo9l^IXmwLZ+uMBTc@jx+N4>y2z>gw zV9b9W?=|oJTrwUm`|R3sTJ3sf{eJ)_$%vZmf7zztH#H9#)PMb@q$z2p|Lra{fMhu7 z;QzPOlqBTH4)tHFDaqN92>$=@QL-a9)c>&2e<9R=VbZCi$p6{@=beI+!2f>~=|uDY E0sk(b;Q#;t delta 9519 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,pre .code,.pre>code,.pre .code{word-break:normal;width:auto}strong,.strong{font-size:inherit;font-style:normal;font-weight:bold}em,.em{font-size:inherit;font-style:italic;font-weight:normal}mark,.mark{font-size:inherit;padding:0;background:khaki;color:#222}small,.small{font-weight:inherit;font-size:75%}a{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:normal;color:#de8bf2;text-decoration:none}a:visited{color:#de8bf2}a:hover,a:focus{color:#d15ded;text-decoration:underline}a:active{color:#d15ded}input[type="button"],input[type="submit"],input[type="file"],input[type="reset"],button,.button{-webkit-appearance:none;align-self:flex-start;border-radius:4px;border-style:solid;border-width:2px;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:normal;line-height:1.5;margin:0 0 16px 0;padding:10px 16px;text-align:center;text-decoration:none;transition:cubic-bezier(0.12, 0.72, 0.58, 1.03) 0.2s;background:#fff;color:#222;border-color:#888;box-shadow:none;text-decoration:none}input[type="button"]:visited,input[type="submit"]:visited,input[type="file"]:visited,input[type="reset"]:visited,button:visited,.button:visited{background:#fff;color:#222;border-color:#888;box-shadow:none;text-decoration:none}input[type="button"]:hover,input[type="submit"]:hover,input[type="file"]:hover,input[type="reset"]:hover,button:hover,.button:hover{background:#fff;color:#222;border-color:#666;box-shadow:none;text-decoration:none}input[type="button"]:active,input[type="submit"]:active,input[type="file"]:active,input[type="reset"]:active,button:active,.button:active{background:#f8f8f8;color:#222;border-color:#444;box-shadow:none;text-decoration:none}input[type="button"]:focus,input[type="submit"]:focus,input[type="file"]:focus,input[type="reset"]:focus,button:focus,.button:focus{background:#fff;color:#222;border-color:#666;box-shadow:none;text-decoration:none}input[type="button"].small,input[type="submit"].small,input[type="file"].small,input[type="reset"].small,button.small,.button.small{padding:8px 14px;font-size:14px}input[type="button"].medium,input[type="submit"].medium,input[type="file"].medium,input[type="reset"].medium,button.medium,.button.medium{padding:12px 18px;font-size:16px}input[type="button"].large,input[type="submit"].large,input[type="file"].large,input[type="reset"].large,button.large,.button.large{padding:16px 22px;font-size:20px}input[type="button"].huge,input[type="submit"].huge,input[type="file"].huge,input[type="reset"].huge,button.huge,.button.huge{padding:20px 30px;font-size:24px}input[type="button"].wide,input[type="submit"].wide,input[type="file"].wide,input[type="reset"].wide,button.wide,.button.wide{display:block;max-width:100%;width:100%}input[type="button"].primary,input[type="submit"].primary,input[type="file"].primary,input[type="reset"].primary,button.primary,.button.primary{background:#d874f0;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].primary:visited,input[type="submit"].primary:visited,input[type="file"].primary:visited,input[type="reset"].primary:visited,button.primary:visited,.button.primary:visited{background:#d874f0;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].primary:hover,input[type="submit"].primary:hover,input[type="file"].primary:hover,input[type="reset"].primary:hover,button.primary:hover,.button.primary:hover{background:#d15ded;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].primary:active,input[type="submit"].primary:active,input[type="file"].primary:active,input[type="reset"].primary:active,button.primary:active,.button.primary:active{background:#ce54ec;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].primary:focus,input[type="submit"].primary:focus,input[type="file"].primary:focus,input[type="reset"].primary:focus,button.primary:focus,.button.primary:focus{background:#d15ded;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].secondary,input[type="submit"].secondary,input[type="file"].secondary,input[type="reset"].secondary,button.secondary,.button.secondary{background:transparent;color:#d874f0;border-color:#d874f0;box-shadow:none}input[type="button"].secondary:visited,input[type="submit"].secondary:visited,input[type="file"].secondary:visited,input[type="reset"].secondary:visited,button.secondary:visited,.button.secondary:visited{background:transparent;color:#d874f0;border-color:#d874f0;box-shadow:none}input[type="button"].secondary:hover,input[type="submit"].secondary:hover,input[type="file"].secondary:hover,input[type="reset"].secondary:hover,button.secondary:hover,.button.secondary:hover{background:transparent;color:#d15ded;border-color:#d15ded;box-shadow:none}input[type="button"].secondary:active,input[type="submit"].secondary:active,input[type="file"].secondary:active,input[type="reset"].secondary:active,button.secondary:active,.button.secondary:active{background:transparent;color:#ce54ec;border-color:#ce54ec;box-shadow:none}input[type="button"].secondary:focus,input[type="submit"].secondary:focus,input[type="file"].secondary:focus,input[type="reset"].secondary:focus,button.secondary:focus,.button.secondary:focus{background:transparent;color:#d15ded;border-color:#d15ded;box-shadow:none}input[type="button"].tertiary,input[type="submit"].tertiary,input[type="file"].tertiary,input[type="reset"].tertiary,button.tertiary,.button.tertiary{background:transparent;color:#d15ded;border-color:transparent;box-shadow:none}input[type="button"].tertiary:visited,input[type="submit"].tertiary:visited,input[type="file"].tertiary:visited,input[type="reset"].tertiary:visited,button.tertiary:visited,.button.tertiary:visited{background:transparent;color:#d15ded;border-color:transparent;box-shadow:none}input[type="button"].tertiary:hover,input[type="submit"].tertiary:hover,input[type="file"].tertiary:hover,input[type="reset"].tertiary:hover,button.tertiary:hover,.button.tertiary:hover{background:rgba(222,222,222,0.2);color:#d15ded;border-color:transparent;box-shadow:none}input[type="button"].tertiary:active,input[type="submit"].tertiary:active,input[type="file"].tertiary:active,input[type="reset"].tertiary:active,button.tertiary:active,.button.tertiary:active{background:rgba(222,222,222,0.3);color:#d15ded;border-color:transparent;box-shadow:none}input[type="button"].tertiary:focus,input[type="submit"].tertiary:focus,input[type="file"].tertiary:focus,input[type="reset"].tertiary:focus,button.tertiary:focus,.button.tertiary:focus{background:rgba(222,222,222,0.2);color:#d15ded;border-color:transparent;box-shadow:none}input[type="button"].inverted,input[type="submit"].inverted,input[type="file"].inverted,input[type="reset"].inverted,button.inverted,.button.inverted{background:#ebebeb;color:#222;border-color:transparent;box-shadow:none}input[type="button"].inverted:visited,input[type="submit"].inverted:visited,input[type="file"].inverted:visited,input[type="reset"].inverted:visited,button.inverted:visited,.button.inverted:visited{background:#ebebeb;color:#222;border-color:transparent;box-shadow:none}input[type="button"].inverted:hover,input[type="submit"].inverted:hover,input[type="file"].inverted:hover,input[type="reset"].inverted:hover,button.inverted:hover,.button.inverted:hover{background:#fff;color:#222;border-color:transparent;box-shadow:none}input[type="button"].inverted:active,input[type="submit"].inverted:active,input[type="file"].inverted:active,input[type="reset"].inverted:active,button.inverted:active,.button.inverted:active{background:#dedede;color:#222;border-color:transparent;box-shadow:none}input[type="button"].inverted:focus,input[type="submit"].inverted:focus,input[type="file"].inverted:focus,input[type="reset"].inverted:focus,button.inverted:focus,.button.inverted:focus{background:#fff;color:#222;border-color:transparent;box-shadow:none}input[type="button"].inverted-outline,input[type="submit"].inverted-outline,input[type="file"].inverted-outline,input[type="reset"].inverted-outline,button.inverted-outline,.button.inverted-outline{background:transparent;color:#fff;border-color:#dedede;box-shadow:none}input[type="button"].inverted-outline:visited,input[type="submit"].inverted-outline:visited,input[type="file"].inverted-outline:visited,input[type="reset"].inverted-outline:visited,button.inverted-outline:visited,.button.inverted-outline:visited{background:transparent;color:#fff;border-color:#dedede;box-shadow:none}input[type="button"].inverted-outline:hover,input[type="submit"].inverted-outline:hover,input[type="file"].inverted-outline:hover,input[type="reset"].inverted-outline:hover,button.inverted-outline:hover,.button.inverted-outline:hover{background:transparent;color:#fff;border-color:#fff;box-shadow:none}input[type="button"].inverted-outline:active,input[type="submit"].inverted-outline:active,input[type="file"].inverted-outline:active,input[type="reset"].inverted-outline:active,button.inverted-outline:active,.button.inverted-outline:active{background:transparent;color:#fff;border-color:#d9d9d9;box-shadow:none}input[type="button"].inverted-outline:focus,input[type="submit"].inverted-outline:focus,input[type="file"].inverted-outline:focus,input[type="reset"].inverted-outline:focus,button.inverted-outline:focus,.button.inverted-outline:focus{background:transparent;color:#fff;border-color:#fff;box-shadow:none}input[type="button"].warning,input[type="submit"].warning,input[type="file"].warning,input[type="reset"].warning,button.warning,.button.warning{background:#ede175;color:#000111;border-color:transparent;box-shadow:none}input[type="button"].warning:visited,input[type="submit"].warning:visited,input[type="file"].warning:visited,input[type="reset"].warning:visited,button.warning:visited,.button.warning:visited{background:#ede175;color:#000111;border-color:transparent;box-shadow:none}input[type="button"].warning:hover,input[type="submit"].warning:hover,input[type="file"].warning:hover,input[type="reset"].warning:hover,button.warning:hover,.button.warning:hover{background:khaki;color:#000111;border-color:transparent;box-shadow:none}input[type="button"].warning:active,input[type="submit"].warning:active,input[type="file"].warning:active,input[type="reset"].warning:active,button.warning:active,.button.warning:active{background:#efe483;color:#000111;border-color:transparent;box-shadow:none}input[type="button"].warning:focus,input[type="submit"].warning:focus,input[type="file"].warning:focus,input[type="reset"].warning:focus,button.warning:focus,.button.warning:focus{background:khaki;color:#000111;border-color:transparent;box-shadow:none}input[type="button"].success,input[type="submit"].success,input[type="file"].success,input[type="reset"].success,button.success,.button.success{background:#59b300;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].success:visited,input[type="submit"].success:visited,input[type="file"].success:visited,input[type="reset"].success:visited,button.success:visited,.button.success:visited{background:#59b300;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].success:hover,input[type="submit"].success:hover,input[type="file"].success:hover,input[type="reset"].success:hover,button.success:hover,.button.success:hover{background:#6c0;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].success:active,input[type="submit"].success:active,input[type="file"].success:active,input[type="reset"].success:active,button.success:active,.button.success:active{background:#61c200;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].success:focus,input[type="submit"].success:focus,input[type="file"].success:focus,input[type="reset"].success:focus,button.success:focus,.button.success:focus{background:#6c0;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].destroy,input[type="submit"].destroy,input[type="file"].destroy,input[type="reset"].destroy,button.destroy,.button.destroy{background:#fc4f4f;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].destroy:visited,input[type="submit"].destroy:visited,input[type="file"].destroy:visited,input[type="reset"].destroy:visited,button.destroy:visited,.button.destroy:visited{background:#fc4f4f;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].destroy:hover,input[type="submit"].destroy:hover,input[type="file"].destroy:hover,input[type="reset"].destroy:hover,button.destroy:hover,.button.destroy:hover{background:#fc6868;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].destroy:active,input[type="submit"].destroy:active,input[type="file"].destroy:active,input[type="reset"].destroy:active,button.destroy:active,.button.destroy:active{background:#fc5e5e;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].destroy:focus,input[type="submit"].destroy:focus,input[type="file"].destroy:focus,input[type="reset"].destroy:focus,button.destroy:focus,.button.destroy:focus{background:#fc6868;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].notice,input[type="submit"].notice,input[type="file"].notice,input[type="reset"].notice,button.notice,.button.notice{background:#3f75a2;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].notice:visited,input[type="submit"].notice:visited,input[type="file"].notice:visited,input[type="reset"].notice:visited,button.notice:visited,.button.notice:visited{background:#3f75a2;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].notice:hover,input[type="submit"].notice:hover,input[type="file"].notice:hover,input[type="reset"].notice:hover,button.notice:hover,.button.notice:hover{background:#4682b4;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].notice:active,input[type="submit"].notice:active,input[type="file"].notice:active,input[type="reset"].notice:active,button.notice:active,.button.notice:active{background:#437dad;color:#fff;border-color:transparent;box-shadow:none}input[type="button"].notice:focus,input[type="submit"].notice:focus,input[type="file"].notice:focus,input[type="reset"].notice:focus,button.notice:focus,.button.notice:focus{background:#4682b4;color:#fff;border-color:transparent;box-shadow:none}input[type="text"],input[type="password"],input[type="email"],input[type="date"],input[type="datetime-local"],input[type="month"],input[type="number"],input[type="tel"],input[type="search"],input[type="time"],input[type="url"],input[type="week"],textarea{background:#fff;appearance:none;border-radius:4px;border:2px solid #888;box-shadow:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;margin:8px 0 16px 0;padding:12px}textarea,input[type="text"]{resize:vertical}fieldset{display:flex;flex-flow:column;background:transparent;border-radius:4px;border:2px solid #dedede;box-shadow:none;margin:0 0 16px 0;padding:16px}fieldset legend{align-self:flex-start;background:#fff;border-radius:4px;border:2px solid #dedede;box-shadow:none;color:#222;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;padding:6px 12px}form{background:transparent;border:none;box-shadow:none;margin:0;padding:0}label{display:flex;flex-flow:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.has-check{display:flex;flex-flow:row nowrap;align-items:center;padding:0 0 16px 0}input[type="radio"],input[type="checkbox"]{cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin:0 12px 0 0;padding:0}input[type="text"]:disabled,input[type="text"].disabled,input[type="password"]:disabled,input[type="password"].disabled,input[type="email"]:disabled,input[type="email"].disabled,input[type="date"]:disabled,input[type="date"].disabled,input[type="datetime-local"]:disabled,input[type="datetime-local"].disabled,input[type="month"]:disabled,input[type="month"].disabled,input[type="number"]:disabled,input[type="number"].disabled,input[type="tel"]:disabled,input[type="tel"].disabled,input[type="search"]:disabled,input[type="search"].disabled,input[type="time"]:disabled,input[type="time"].disabled,input[type="url"]:disabled,input[type="url"].disabled,input[type="week"]:disabled,input[type="week"].disabled,input[type="submit"]:disabled,input[type="submit"].disabled,input[type="file"]:disabled,input[type="file"].disabled,input[type="reset"]:disabled,input[type="reset"].disabled,input[type="button"]:disabled,input[type="button"].disabled,input[type="radio"]:disabled,input[type="radio"].disabled,input[type="checkbox"]:disabled,input[type="checkbox"].disabled,textarea:disabled,textarea.disabled,button:disabled,button.disabled,a:disabled,a.disabled,.button:disabled,.button.disabled{background:#dedede !important;border:2px solid #dedede !important;color:#444 !important;cursor:not-allowed;resize:none !important;opacity:1}input[type="text"]:disabled:hover,input[type="text"].disabled:hover,input[type="password"]:disabled:hover,input[type="password"].disabled:hover,input[type="email"]:disabled:hover,input[type="email"].disabled:hover,input[type="date"]:disabled:hover,input[type="date"].disabled:hover,input[type="datetime-local"]:disabled:hover,input[type="datetime-local"].disabled:hover,input[type="month"]:disabled:hover,input[type="month"].disabled:hover,input[type="number"]:disabled:hover,input[type="number"].disabled:hover,input[type="tel"]:disabled:hover,input[type="tel"].disabled:hover,input[type="search"]:disabled:hover,input[type="search"].disabled:hover,input[type="time"]:disabled:hover,input[type="time"].disabled:hover,input[type="url"]:disabled:hover,input[type="url"].disabled:hover,input[type="week"]:disabled:hover,input[type="week"].disabled:hover,input[type="submit"]:disabled:hover,input[type="submit"].disabled:hover,input[type="file"]:disabled:hover,input[type="file"].disabled:hover,input[type="reset"]:disabled:hover,input[type="reset"].disabled:hover,input[type="button"]:disabled:hover,input[type="button"].disabled:hover,input[type="radio"]:disabled:hover,input[type="radio"].disabled:hover,input[type="checkbox"]:disabled:hover,input[type="checkbox"].disabled:hover,textarea:disabled:hover,textarea.disabled:hover,button:disabled:hover,button.disabled:hover,a:disabled:hover,a.disabled:hover,.button:disabled:hover,.button.disabled:hover{background:#dedede !important;border:2px solid #dedede !important;color:#444 !important}input[type="text"],input[type="password"],input[type="email"],input[type="date"],input[type="datetime-local"],input[type="month"],input[type="number"],input[type="tel"],input[type="search"],input[type="time"],input[type="url"],input[type="week"],textarea{transition:cubic-bezier(0.12, 0.72, 0.58, 1.03) 0.2s}input[type="text"]:focus,input[type="text"]:active,input[type="password"]:focus,input[type="password"]:active,input[type="email"]:focus,input[type="email"]:active,input[type="date"]:focus,input[type="date"]:active,input[type="datetime-local"]:focus,input[type="datetime-local"]:active,input[type="month"]:focus,input[type="month"]:active,input[type="number"]:focus,input[type="number"]:active,input[type="tel"]:focus,input[type="tel"]:active,input[type="search"]:focus,input[type="search"]:active,input[type="time"]:focus,input[type="time"]:active,input[type="url"]:focus,input[type="url"]:active,input[type="week"]:focus,input[type="week"]:active,textarea:focus,textarea:active{background:#fff !important;border:2px solid #d15ded !important;box-shadow:none !important}input[type="text"]:hover,input[type="password"]:hover,input[type="email"]:hover,input[type="date"]:hover,input[type="datetime-local"]:hover,input[type="month"]:hover,input[type="number"]:hover,input[type="tel"]:hover,input[type="search"]:hover,input[type="time"]:hover,input[type="url"]:hover,input[type="week"]:hover,textarea:hover{background:#fff;border:2px solid #666;box-shadow:none;transition:cubic-bezier(0.12, 0.72, 0.58, 1.03) 0.2s}.no-scroll{overflow:hidden !important}.modal-overlay{display:block;background:rgba(0,0,0,0.5);z-index:2000;overflow-y:auto;overflow-x:hidden;opacity:0;position:fixed;height:100%;width:100%;top:0;bottom:0;left:0;right:0;transition:opacity .5s cubic-bezier(0.12, 0.72, 0.58, 1.03);pointer-events:none}.modal-overlay[data-visible="true"]{opacity:1;cursor:pointer;pointer-events:auto}.modal-overlay.is-centered{display:flex;align-items:center;justify-content:center;flex-flow:row nowrap}.modal-dialog{background:#fff;width:95%;position:relative;flex-flow:column nowrap;display:flex;cursor:default;margin:16px auto;border-radius:4px;border:1px solid transparent}@media screen and (min-width: 576px) and (min-height: 576px){.modal-dialog{width:450px;margin:40px auto}}.modal-dialog header{display:flex;align-items:center}.modal-dialog header h1,.modal-dialog header h2,.modal-dialog header h3,.modal-dialog header h4,.modal-dialog header h5,.modal-dialog header h6{font-size:20px;display:inline-flex;margin-bottom:0}.modal-dialog header>button[data-close],.modal-dialog header>a[data-close]{margin-left:auto;font-size:32px;text-decoration:none;padding:0 8px}.modal-dialog header,.modal-dialog section,.modal-dialog footer{padding:16px}.modal-dialog header,.modal-dialog section{border-bottom:1px solid #dedede}.modal-dialog footer{display:flex;flex-flow:row nowrap;justify-content:flex-end}.modal-dialog footer a:first-child,.modal-dialog footer button:first-child{margin-right:16px}.modal-dialog footer a,.modal-dialog footer button{margin-bottom:0}.accordion{border:2px solid #dedede;overflow:hidden;border-radius:4px}.accordion [data-expanded="false"] .accordion-button::after{transform:rotate(180deg)}.accordion .accordion-button{display:flex;flex-flow:row nowrap;justify-content:space-between;text-decoration:none;align-items:center;width:100%;border:none;color:#d15ded;background:#fff;padding:16px;margin:0;border-radius:0;font-size:16px}.accordion .accordion-button:hover,.accordion .accordion-button:focus{color:#ce54ec;background:#f8f8f8}.accordion .accordion-button::after{content:"▲";font-size:12px;transition:.5s cubic-bezier(0.12, 0.72, 0.58, 1.03)}.accordion .accordion-row h1,.accordion .accordion-row h2,.accordion .accordion-row h3,.accordion .accordion-row h4,.accordion .accordion-row h5,.accordion .accordion-row h6{padding:0;margin:0}.accordion .accordion-row:last-child .accordion-content{border-bottom:none}.accordion .accordion-row .accordion-content{overflow:hidden;padding:0;max-height:0;background:#fff;transition:max-height .5s cubic-bezier(0.12, 0.72, 0.58, 1.03);border-bottom:2px solid #dedede}.accordion .accordion-row .accordion-content .accordion-inner-content{margin:16px} /*# sourceMappingURL=undernet.min.css.map */ diff --git a/dist/undernet.modules.js.zip b/dist/undernet.modules.js.zip index 1532c4034a20eab2e41e8a7e50c85de58d745df6..44107f873a41417ebce71b6c8d05a6aa1f1177c9 100644 GIT binary patch delta 202 zcmaFp_Rx(tz?+#xgn@y9gW=MW$cem)?AAS(qHTLFZ8Ys=WY%30Ir%7~B0F0*SZwlJ zMk!{XvdLUbnlN>nt(e5P!GgiOx^TgE-W(pV;5SJ*b{mL^o28|uv4aJ-DC#o4 delta 202 zcmaFp_Rx(tz?+#xgn@y9gW*O^$V6U6_VRV7qbt^(-e}s($UI}4>*S-1itHPFcYwqu zzh#tS1}dA(#iR*Sx7mtGjGOs7P%xNRm%R+4d2>5&4i8x6H%U3TN@=NS>|ntyiu%kz zYbH-n6653o+ReZKvWQhlpBZQoP*eu2Don{7s!9fI{(2>AW}x|Sc^+jQu)MXh8UR_7 BOlJT9 diff --git a/dist/undernet.scss.zip b/dist/undernet.scss.zip index e71fe4e0abf0f53bbf2015ac64aa0df0a9c7954f..28657ae56e613ad0aca1f53b500e04ac2db59063 100644 GIT binary patch delta 614 zcmaEs^em}9z?+#xgn@y9gCS^1r0)dpjmtF{85o?H7#MgNWEe{GQc{cZQcLuTlZ%T( zLpT|jy}K_(oA+FbF0J5ZU}X6UR14OgJK?Suv!Oui`|p~UUbTwt+UOeaWm!O%$Q9|= z%qg2U-#n$G~8@-ArOwD&Tn-pp0d|klZaLqxp1CC*9uM3`RfB0H5>yzlL z)6*B>|xG+qEP0+;j#n}fr3}P}rBvhOmDhy8KZ`)q2 z`R2&C|2ny$90gl%oIGkUZLdO}l+l`5RhPSUf6b2z*kU;8y{qWP+xj(u{=0tkS!zw) zyYAhQDc6pumaWr#vu^ocy+0OHPiXp!f8_@SI2SO$85ned0Y15wQGuNe5~h>A6{RNc zV>D+5hVSMdj7CgghAxW{Gl&6}tzkC<3vOjU43VwoTEhqy(c*D{h~)CEhcM&?|A85k z6+|w9m3$Qm=7E~z2d3vJt^!MVDuqL|ELLG=WNwHHoxD<2oBjN$GoYB>d|P!MD+erb qOm5WH0i}V-j5=bRaBoaLudUAv^u=OE9agY@7DG#Bp#I4YhH3z@ul?`< delta 609 zcmaEs^em}9z?+#xgn@y9gW+;yh_9eRUA+b)1A`M20|PIE3`1#NN@`JFYKdNPa&d8J z2qyz`Z^7y4;&rE^ODnh;7+Jmo)q=I>PB`m#*g&A=ePvhfLx!nR(~B4mE)5D@=yjm= z6T`aAg*rL;TgtQ+t$N=l{WbhaQslp5o2`}Inse$|jI%|4HGJ3@b1+skSvIcaf?C*F ztMDf+Ze2an7k@C_Ocu%Z&VHEEapF;}WqeJY?z_nszc(IEn`QrO^5*Lwlk+mx&knx3 z>0)Th%O?*r=k%plI4AXP@G9o<{5UC+tb(`UwErK_LI5bWg5>*2=HmG$`RgPaC2*!n!Zy>)X{A@cC1wBd*N-qaob=vRb>nUQnn3?uKl&`Smh4^k z?#Pm$BdsrEf^Wq7|Bn4ps5LQop57~YP=Ip*1Dt_jM^K3GL|52WpZZn4Y7!3M}EN6b{j{ScRF98R)FZD^;~&uG)NCbsj4REOAV3)Ybu| pfys + ``` ```html - + diff --git a/package-lock.json b/package-lock.json index 7d455b35..9b6c23fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "undernet", - "version": "2.3.0", + "version": "2.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c2bff590..1cb0f420 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "undernet", - "version": "2.4.0", + "version": "2.4.1", "homepage": "https://undernet.io", "description": "Undernet is a Front-End Framework for Modern Web Development", "main": "js/dist/undernet.js", @@ -20,7 +20,8 @@ "framework" ], "bin": { - "update-version": "./scripts/update-version.js" + "update-version": "./scripts/update-version.js", + "create-hashes": "./scripts/create-hashes.js" }, "scripts": { "test": "BABEL_ENV=test nyc mocha -r @babel/register -r config/mocha.config.js --recursive src/**/*.spec.js", @@ -30,7 +31,7 @@ "lint": "prettier --write 'src/**/*.js' && prettier --write 'src/**/*.scss'", "build:development": "npm run build:lint && npm run js:build && npm run css:build && npm run css:minify", "build:lint": "npm run js:lint && npm run scss:lint", - "build:release": "npm run clean && npm run build:lint && npm run scss:prepublish && npm run css:prepublish && npm run js:prepublish", + "build:release": "npm run clean && npm run build:lint && npm run scss:prepublish && npm run css:prepublish && npm run js:prepublish && create-hashes", "clean": "rm -rf dist/ && mkdir dist/", "js:build": "babel js/src/ --out-dir js/dist/", "js:merge": "BABEL_ENV=rollup rollup -c config/rollup.config.js", diff --git a/scripts/create-hashes.js b/scripts/create-hashes.js new file mode 100755 index 00000000..ca4b6a0a --- /dev/null +++ b/scripts/create-hashes.js @@ -0,0 +1,49 @@ +#!/usr/bin/env node + +const fs = require("fs") +const path = require("path") +const Hashes = require("jshashes") + +// set up for operations + +const distJsFilePath = path.resolve(__dirname, "../dist/undernet.bundle.min.js") +const distCssFilePath = path.resolve(__dirname, "../dist/undernet.min.css") +const introArticleFilePath = path.resolve(__dirname, "../docs/introduction.md") +const readFormat = "utf-8" + +// update hashes in docs/introduction.md + +const introArticleFile = fs.readFileSync(introArticleFilePath, readFormat) + +function createNewHash(str) { + return new Hashes.SHA256().b64(str) +} + +// regex pattern to detect base 64 encoded string. +// https://stackoverflow.com/a/31245864 +const reb64 = /\"sha256-([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}|[A-Za-z0-9+/]{2})=\"/g + +// retrieve existing hashes +const b64Strings = introArticleFile.match(reb64) + +// apply new hashes and return new introduction.md +const distCssFile = fs.readFileSync(distCssFilePath, readFormat) +const distJsFile = fs.readFileSync(distJsFilePath, readFormat) +const newCssHash = `"sha256-${createNewHash(distCssFile)}"` +const newJsHash = `"sha256-${createNewHash(distJsFile)}"` + +// get new hashes and inject them into docs/introduction.md +function getNewIntroductionArticle() { + const currentCssHash = b64Strings[0] + const currentJsHash = b64Strings[1] + return introArticleFile.replace(currentJsHash, newJsHash).replace(currentCssHash, newCssHash) +} + +fs.writeFileSync("docs/introduction.md", getNewIntroductionArticle(), readFormat) +console.log(` +#========================================# + +-> New content hashes created! They're used in docs/introduction.md. + - CSS: ${newCssHash.slice(1, -1)} + - JS: ${newJsHash.slice(1, -1)} +`) diff --git a/scripts/update-version.js b/scripts/update-version.js index 873e813e..22760b3e 100755 --- a/scripts/update-version.js +++ b/scripts/update-version.js @@ -1,6 +1,5 @@ #!/usr/bin/env node -const Hashes = require("jshashes") const fs = require("fs") const path = require("path") const args = require("yargs").argv @@ -11,8 +10,6 @@ const newUndernetVersion = args["tag"] const packageFilePath = path.resolve(__dirname, "../package.json") const pkg = require(packageFilePath) const undernetScssFilePath = path.resolve(__dirname, "../scss/undernet.scss") -const distJsFilePath = path.resolve(__dirname, "../dist/undernet.bundle.min.js") -const distCssFilePath = path.resolve(__dirname, "../dist/undernet.min.css") const introArticleFilePath = path.resolve(__dirname, "../docs/introduction.md") const readFormat = "utf-8" @@ -44,34 +41,16 @@ function getNewScssVersion() { // get update for docs/introduction.md -const introArticleFile = fs.readFileSync(introArticleFilePath, readFormat) - -function createNewHash(str) { - return new Hashes.SHA256().b64(str) +function getArticleVersion(version) { + return `@${version}` } -// regex pattern to detect base 64 encoded string. -// https://stackoverflow.com/a/31245864 -const reb64 = /\"sha256-([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}|[A-Za-z0-9+/]{2})=\"/g - -// retrieve existing hashes -const b64Strings = introArticleFile.match(reb64) - -// apply new hashes and return new introduction.md -const distCssFile = fs.readFileSync(distCssFilePath, readFormat) -const distJsFile = fs.readFileSync(distJsFilePath, readFormat) -const newCssHash = `"sha256-${createNewHash(distCssFile)}"` -const newJsHash = `"sha256-${createNewHash(distJsFile)}"` - -// get new hashes and inject them into docs/introduction.md function getNewIntroductionArticle() { - const currentCssHash = b64Strings[0] - const currentJsHash = b64Strings[1] - const versionRegEx = new RegExp(pkg.version, "g") - return introArticleFile - .replace(currentJsHash, newJsHash) - .replace(currentCssHash, newCssHash) - .replace(versionRegEx, newUndernetVersion) + const articleVersion = getArticleVersion(pkg.version) + const newArticleVersion = getArticleVersion(newUndernetVersion) + const introArticleFile = fs.readFileSync(introArticleFilePath, readFormat) + const versionRegEx = new RegExp(articleVersion, "g") + return introArticleFile.replace(versionRegEx, newArticleVersion) } // write to files @@ -83,7 +62,4 @@ fs.writeFileSync("scss/undernet.scss", getNewScssVersion(), readFormat) console.log(`-> scss/undernet.scss version updated to ${newUndernetVersion}!`) fs.writeFileSync("docs/introduction.md", getNewIntroductionArticle(), readFormat) -console.log(`-> docs/introduction.md example hashes updated! - - CSS: ${newCssHash.slice(1, -1)} - - JS: ${newJsHash.slice(1, -1)} -`) +console.log(`-> docs/introduction.md version updated to ${newUndernetVersion}!`) diff --git a/scss/undernet.scss b/scss/undernet.scss index 96996dca..97427716 100644 --- a/scss/undernet.scss +++ b/scss/undernet.scss @@ -1,6 +1,6 @@ /*! * @license MIT (https://github.com/geotrev/undernet/blob/master/LICENSE) -* Undernet v2.4.0 (https://undernet.io) +* Undernet v2.4.1 (https://undernet.io) * Copyright 2017-2018 George Treviranus */