From 05e7c2babd72204111e2f9fd889d87c4f91c7d33 Mon Sep 17 00:00:00 2001 From: Eric Jinks Date: Tue, 23 Jan 2018 12:21:56 +1000 Subject: [PATCH] To Vanilla! --- package.json | 21 ++-- public/images/logo.png | Bin 0 -> 12943 bytes public/index.html | 2 +- src/components/BackgroundImage.css | 18 +++ src/components/BackgroundImage.js | 74 ++++++++++++ src/components/Content.css | 8 ++ src/components/Content.js | 24 ++-- src/components/EnquiryFormSimple.css | 60 ++++++++++ src/components/EnquiryFormSimple.js | 62 ++++++++++ src/components/GithubCorner.css | 48 ++++++++ src/components/GithubCorner.js | 65 ++-------- src/components/LazyEmbed.css | 18 +++ src/components/LazyEmbed.js | 55 +++++++++ src/components/LazyImage.css | 14 +++ src/components/LazyImage.js | 80 +++++++++---- src/components/Logo.css | 9 ++ src/components/Logo.js | 17 ++- src/components/Nav.css | 6 + src/components/Nav.js | 46 +++---- src/components/NavLink.css | 17 +++ src/components/NavLink.js | 31 +---- src/components/NetlifySimpleForm.js | 119 ------------------- src/components/Page.js | 7 -- src/components/PageHeader.css | 13 ++ src/components/PageHeader.js | 36 ++---- src/components/ServiceWorkerNotifications.js | 45 +------ src/components/common.js | 82 ------------- src/globalStyles.css | 4 +- src/views/About.css | 2 + src/views/About.js | 23 ++-- src/views/Contact.css | 2 + src/views/Contact.js | 28 ++--- src/views/Home.css | 2 + src/views/Home.js | 16 +-- src/views/NoMatch.css | 5 + src/views/NoMatch.js | 29 +++-- yarn.lock | 67 +---------- 37 files changed, 610 insertions(+), 545 deletions(-) create mode 100644 public/images/logo.png create mode 100644 src/components/BackgroundImage.css create mode 100644 src/components/BackgroundImage.js create mode 100644 src/components/Content.css create mode 100644 src/components/EnquiryFormSimple.css create mode 100644 src/components/EnquiryFormSimple.js create mode 100644 src/components/GithubCorner.css create mode 100644 src/components/LazyEmbed.css create mode 100644 src/components/LazyEmbed.js create mode 100644 src/components/LazyImage.css create mode 100644 src/components/Logo.css create mode 100644 src/components/Nav.css create mode 100644 src/components/NavLink.css delete mode 100644 src/components/NetlifySimpleForm.js delete mode 100644 src/components/Page.js create mode 100644 src/components/PageHeader.css delete mode 100644 src/components/common.js create mode 100644 src/views/About.css create mode 100644 src/views/Contact.css create mode 100644 src/views/Home.css create mode 100644 src/views/NoMatch.css diff --git a/package.json b/package.json index 09be3b4..be5a9e9 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "glob": "^7.1.2", "gray-matter": "^3.1.1", "js-yaml": "^3.10.0", + "prop-types": "^15.6.0", "react-scripts": "^1.0.10", "sharp": "^0.18.4", "snazzy": "^7.0.0", @@ -23,35 +24,33 @@ "sw-precache": "^5.2.0" }, "dependencies": { - "@researchgate/react-intersection-observer": "^0.5.0", + "@researchgate/react-intersection-observer": "^0.6.0", "core-js": "^2.5.3", "intersection-observer": "^0.5.0", "lodash": "^4.17.4", "netlify-identity-widget": "^1.2.0", "normalize.css": "^7.0.0", - "polished": "^1.7.0", "react": "^16.0.0", "react-dom": "^16.0.0", "react-helmet": "^5.1.3", "react-markdown": "^2.5.0", "react-router-dom": "^4.1.1", - "react-snapshot": "^1.1.0", - "styled-components": "^2.1.0" + "react-snapshot": "^1.1.0" }, "scripts": { - "start": "npm run watch:content & react-scripts start", - "build": "npm run prepare-content && react-scripts build && react-snapshot && npm run sw", + "start": "npm run watch:content && react-scripts start", + "build": + "npm run prepare-content && react-scripts build && react-snapshot && npm run sw", "parse-content": "node ./functions/parse-content.js", "resize-images": "node ./functions/resize-images.js", - "prepare-content": "npm run parse-content & npm run resize-images", - "watch:content": "chokidar 'content/**/**' -c 'npm run prepare-content' --initial", + "prepare-content": "npm run parse-content && npm run resize-images", + "watch:content": + "chokidar 'content/**/**' -c 'npm run prepare-content' --initial", "sw": "sw-precache --config='sw-precache-config.js'", "test": "standard | snazzy && react-scripts test --env=jsdom", "eject": "react-scripts eject" }, "reactSnapshot": { - "include": [ - "/404" - ] + "include": ["/404"] } } diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..820aca9746550ccac2bf77ba70d403f93a33790c GIT binary patch literal 12943 zcmV;AGH}g_P)(zUGf`W)3AtH04C<+LQ1|bj-5(E-RLLftTC!Li-XovPI2|x+PhI?k-YzYkwvjzL9XZB zwzODUdGL!!|;V7H%?evw~EYTj|r!!P2g)AyH_Y{17ZGF!Q_vEL1ApA3HU+~Tt~5 zD4g*7)kn1hT|C(N6VI$2xCD9N`Na-j+HXQTKl7RNsw;Z~nT#b1vj-#xD_-w+zw0VK zpIG|$-@028U3R}{Y_6(ueJ7nH61UzePC4~#rPioGW9&y#(Co6SRteWMMbop-3T^y^ z9dG$q^SE&{Ixf1%Z5cb(-G-bWnLHWopdW%w3kF|Q0s-NI&31unLi6UmWoBa6tXXdI z?z`QVkt5wEok@@Rig}H7WWsk^!y*7a_o%!>B`GNcHyK0XI`Qsu~^{r6Hgu;Uoi9T zIfMEBe!c7AmoMvIGw9db`f=0pQ$!?`Ti_=a_L7C-?Sb#H;ID#SgAoCG#6}O4~m4p_Mzp!sjiod*s5U>dBd` zC2~1S1cHY6#?7<32A$HTy1L(Kq0oZzYpxOYjvd0@wM&YG&;=KW#9eoZ92oYIc-%K= z)$1-#{E zJ^#E^5nM=>1fcsY#H+G(_M|!w{(n z<3)7hq$RVjyY4&Q^AgjQ5Vy01$oGuim4obC=ghg??d-hVIBtpv&YvgDjT=Q04Tb%P zfXrovO~|mVp+SrpKR)#C6)V!EualWBi$oq8t0?cE)Hqv2rccW&Q9V7v>FpI%9N7ct zBS#8t>{$6bhn~QO3hUq=s&}N!L1r0bMq%F+4vX*^XZ-Q}<;%}6&CENNnR-9C|8+Q= zu2a=OB{HfgFBc)aKtWgIq|>s?v5^6jgA6j*_hL_ltqof@j(tMZ{hvglP2O~XfBR&* z_kG_lFJF{)oUa1>>Bz)j)gigqr?Rel%lK^e>q~@?GIj4~56f>1_4z*sMJVUlP43$M)W)FPbI((Y4jqOMuDRrm*Eh78Ecw5@O7C8|a7H|lov>|d z_flr~j(QNj;6UkTzkC1BW0k?n!V!Pjx|erC9t$}v8T1UB8XG6I%xKuuI@VDPU4wvk zMRj$VXb$yWio$(w&?U{zsZ(7YT7e2R}>55ZA#MDui@T-s%`J{ z&9$|g)M&ISv}lpQUX1M%;(_kX?z^wwp;WBy60Irc>_Mflxw_g7U38Jqs;Y$D)+X$h z7GcboA@tFsMduAS2=(~m(}RZLw((=m6^VRDZ#6Yz9Q%}T`}%~vbEojnIajoxpB1rK z>!4+*CDJRXK61h*x9%0;CKAF$=S&Tu<mLGq7_c_0~?Qf;;Q67s%-H8Ca4D+R0dHEk}8X7*LtXQ#+a*K?# zU8kM)6pD6+fkvP~Tyd_|eDzh~w6;pspP4~?ifw2_DOBa6l`HoVoyu~&NQp$OV=61f zm=AnFsAXls#tY;a0!++ObHv0khE`W6XS&VTUX!C>4rVwF$8iQT;~Xugt>PFzUb1G* zKADly;z>;M=0T8=xNvhUd_|3;EUm@hvN9MHQDmqiLpPa}BPNH`;N_%-e8z!jFEZ)C z)`s6oF!bIv{`MaqJr$Dm(VaW`#D8UrTu?i*qVl&- zeKPeP#jglRPm#g|N+pP}EJyV9rbKUVMvfjaTpU$Oz-;kBz)kk}zj;W&y~KSJoJ zh%82$Z5uWUyJ55#Q(xy#y!47PB#CUwwq0}FT_!L@wy__3RAVq09 zXJZb|;Q}Xy=^RBfaki0*gmE<8Rt)EREi`3JFmYZkwQbwidC!m{(p|Vv(|UWKX2Ce& z!KSJLNj6VT4$HX+@*@aiazJd(wlPE3D|UjwIDVTAql9nFSdq?Te)+yX{i&Vz4Jjg9 zo_z8t5D?`QJDaIKe!LVgTo32!GN*4zAW`(@9ODqDG#BcFK4;d|ir{!y3F!KcS=V1* zv^5$sL^d}x{1cUa1_gfyEqr-wEjc^sm zxmyYo^nWU5UTKe_!IHy)kg?FIO9Z)AL*fd8h6Hk)vmuZ ze0s$iNTq$#A=P+V&ph*!;JMqlswIF1C8+PT(}X?&EQIDr;Uy#Q$7sAcDPko_yFxdz>j#+(0aL>fAf-Si}1cmL!r(BaxeG6y-BjXy;X6{1}>m zj!dM%5Ben*4l6h7VQsxevF(SIWb&V`qR8Gj3(1F!|{ zVWrnfo2vo~sOti*duI#)LA=4RobBBZ8L=*Xp{EbtmN7B)+&Wo(ib_F23)g>zgB;8Iu$6{VoxEFUxG z;q!mV!(x)g6%uS} zI0BUd7IG%g0C6sqX4!F5XwdYF=RDzo0(+(7o?43eyOkT5uAF*=`D%eJBJ@cqZOEP zSg1PAwRm_6Y~+LwgwTwF8(&D2D9cF{5#sV6J8%y@3KK~z_E-n&!M%Tj zJ3*WsW17bXuFTUl7B=9%?xcE{ygk5f# z?g+8JwyXP05 zcGM9_f*e=*l_X48q%YP{g&+yT5>BhstXyRZe;tJc=2b`6$y)&)g#=n7pdE^IIw$+X zqmDpBRp!#p**4u(M`aULROO0v$`oxoi|Ji{1tF8hU%uIVG3fbkq^3`}CVL z8KBpe-1f!GpP(i1(IZ8FxB8>=UDr8@PMsZX@jFQz(@`O0maY6mz|quuQsBK#EQzO5 zc5znVs35Q`ka-AT#jyM>oi>6!eNxdTf`?`Hn;8#Ay5YC;M~@g8xzFd*&g_FBLvL>y ztHf5$oF3)WkW5Dufph~UBYE3WvpqWf>z za$+`$(Yz##>X?^w1C!SkK~WJ4ig47gs5RxYylX>#z`N^Xmwa1|C%;3(h4q+hZuP<5 zMn!X6R4-~zs=^wNiq!^FB$GLjPMTupu0HN}mGzuA5))Gnp&YVldt>8tBb8omtzR#f z3`R|xE+*BD5fk;8h(6XLwob)bN>CM4&2k8f5|3v^7O@62T`hNlTe_coWZQuq4~7EO z&Gq%KD6TtQ!FmN_6)+?Zmj!6Vz?G_(+t!Qb&)14p825FwC0r|M3q7POMo1HVooUz_ z<*ppELS{!p!&z9wnJ%#4!{u)ct4&<@;5s80f4Dd_?loP!+|(yp|J>%D`I@SX>gbkB z29H&$4(z1Vz!ZJkkmbSVy1Eyz5;c<{5`rK8u+U(NB3G^C;tq@#(i!Q8V+KRQ7+LS? z@axDv{j_ud;?(&@ETD?&nu~`dg0CHSToud^XL6O8NYU{~u3TXS%b`0CH=2iG@5frc zQCFu(&qAzjrT+Fe;o!Nc^i(S=3k^vE!@a#%u^H0L3k$4y;?Oi5m}lB;uyrdeta2Hg z#KN~o7}&V7+>2*YAkbG{M)@;DRW--CfA=AJG)yv@a}L zWPn$5ot*S9?r`nxL$0HLbNX~RyIB+DiZalHueFq%(gc$ZcC?bh>M>V~ zJ&DQ%*bHpodNyoOU=k)=NL@D&bp1W?XNMetMo$md7F21>fYoKihjnM5MJH(TowPYE zRbvW-rf@yp(J3sf66=wuaDBcM4BXN~jzGmU<%BJpC+z_g_{&n5NY6%^o{+dw0#O?| z@LUqUn;BXu(u5Pp+qV7eq7^IbAw^)@w3>31?07a$x@WQvB$BdO(gYJ|6$vaHo2u%j zPytDF{xoQ?t6}K@sSD%UpOcS=6oI)O-<2RhBT+1*%BDu?Sr96oaf4?QKmn6AO(hQN zjtq2Fi_#R5)HMt{*VXmJkRuSpe2RsF^Q~;2Y77L@jD?m{G)tlN1{0bniRAjf^bp0V zG`a_Y`)LW1O{dq)TajM~9Wn^EPMkPhv8<^yQK5|~nn(TwmW0WkulMkRi}Yr*D&80|bjC5T?+Qpo0C4M38(}Ad=|8*g=}3 zm}t^!B@E!JYIrW*+0*lfAw^*G*s*6oDSnp}F5n?r2&-snQhFBpJ&!Q%IpIR|*eq#p zbXSXXOx~phCn*J>veU%r}GHy+@y^+tQ6Vb(aud;E*3@*lJ`(@4?Xf9 zq^NK!(43)^tA@|EGdus=BaZvS-b5SEJ@*y}k6ML_HH3>c8rJsc%cKz>J^M>7^h?nL zg3{0km4fK9LcwUmOebzT_tq5%H?}(+Rswfiyl@_b$|t3E0tEF56XAw1LN-ll+l|hf zE9ZeP7;Vj^oW`y4ton-1JTn$Whu3#<(u-Rz5X3?0$-m$-|w%g zdc|#TuaQK+0M?i~RTwbNrS`&eGLQv_NFH$@kR;N+ltP7)lPHR4MEGl}g_%fvcJ_)D zFlya59nt~s`h^R96}r9_=FJm0#9=TY+H?EQJX6rmN%9>`pBePTn|oomz$DQlaYT^l zVM>Cdc-`==L*SY__9ZQU=8zG%zOk{qrmO1}JDncKW~g8&#GsA7Q)Wu_il~{G9<<rGu*q>`#8XE(_Z1zVOuwKLa z$z$}NV6)WVK1T^E9kwtUFgI+Feihz`fr5p^aihUH&7Ql_=XH_yFrgHiJo&Hl?zm$P zE*&)K>ypWL&stZ! zThRI*ntqm(Ke=20?d5dXZ8kz!oC-~368a~Fvs_YfMqkCINyNx&(lVc3pcuo+evsD+ z&61-9GL#$&p*bdSz89zwy$s4%Hfd6(tfuDJxyzO{^@~8>baO?;nGwtSD_jixkaD6D zJ{1*HrV1ZIqjB1RwJR;_Ib{HXr22${$lB%@4K>T54T<4cjwq=RB2=CwLPUy$VUtc- z>;gExqmBszN{J(K(%k@iHcQ4*?S+I*qlJYgOt8vpYfqVX*IoS%)>E9>{!uhKeuV3+ zDT7v5i2}z^;28KN1Rq@XQ3m`eC=giVvXCHFj=YgMCurqxhPCe@g;6+t1?ll3D~CvX z1QqrkaU_ta$$k!%!ttF)TpaJtp=k#j8nV$5Bi?h~op-)~Tl<}g1oDZSYHG?unam&I zI?z~wj3OX33PQ`#!~$^DF~&dglTv0T7#)Ls^5CnzLO#B$9>1c*|ClNS{U<54?LWQ%;^nh`JoZOROqFsU(-%q5N z*c7Gs$Ga&=h?*p>Ko|uJhe4HN#y(R$Y0~>=|LRxL?nOR4fPecXkk8*-S6=JSXv+hR zb2gD=)GX;B0@Okv)`tyUi{Of@)EUWB)cmPGvY8gpA)gkB!ZAmp4&EglMev(MkvMkX z2#_TuCim#Na)FA9&tAD@%WW*r+f4@~(0k!8qS13huDcYDAPoVW3>FCWykHCv2(*i9 z0DPh6n2}Vi756=1xe|m zX}*^5X+MtoU`VnjDr_h05O1 zla6?X^w}WR0%3g_$9Wh~{{vmo@|$~myS;b*EB0@jz`YCe0=!Hg+PTwc>g*i3T~WqD z$V5RETdxZ~?Fc*0&Ng!3bO(k;=#J6=nyKST0GHqH7`%%#*+5>?=*~IFR;kk%_wHO~8 zIsu@%x~{!on$|a8et7a=?Bd1bDx{!Z#ZMZRS0th@z|`z4)5P)soVVb> zwV}7udP-4t5Bi5e9HJo7Ia@C`zlJs9Pv>&BkxU>)a%U=$=*!&t?N2?iwY1p7AePp~ z5IMf<*-Ij2YWCakfcktcYa59~mH@hK?a9YoSAPP<++)UP7{nn0oL7wBuDoQlqB++C zzz>_IjZmVJ1I4b^cz1VO;{IR$*S@A)!ytOKcbNB>*jA^^ef7Qgrru8tMVV^mY(Wm> zH!ixmQlh&jy)sl5T)Dqu4uiPAS~-O0R^sa`t@?T@%j}1$UI1FNGZTzc_FeXz}M zygTUE@C9`p7E1UIJ3FL= zTh8@e*>aNe5%Wo>-i|tYb*x^&1U3u<;d<@Ehh;T{ljdqL5&`5mkc-8MzMM#=acRvCOm{E(^DhVVyxhoz74Q^cW5LIqwy?!g<5v)6r0b+2cplb5DNN6d`B1l z=ioqqNHDYDM(*XR1pxGh_nZVbEoWUOox67D_;F9HShT_(2Jvlx*g0uZB$Y~iQ_1D7 z#pCcJhtVN@pBfs3al#40fd3PHp`=p@0R*`8!;roh^Z)>m=GLuZXLFNy{X>F_>UC2$2_bbUt)ipJM2%t^Jg@Co6MIJW|gE&AC z+b2&BXXEkz3pV)*9>vG0(6_-KMWcVp3CGI-UGn246rtGY*}#pf@-p$5TnSfT6V5js zx+S)Z)`hVMB;Q9t+T z&70Q_Yo`MM(dAbR-+1Fv$hgl+0MXx3T;@gSMEUVPdfrRl8hS;+Ersr0MKC>J3+FYs zi;ckZBYhP@n+DN~-*6{`Y>AYD|95Ys(htoJ9S0GR7pwg+f{uE@s$HQhmM?Ux-Fu z83u6xAnw?*RTi2TrVe1^uo91&C=F#D0Rv z=v?r%{~Q3EUVMb26y9%22>l-v6Dj)0i4>Ozd&JO4^i`BGXbRq?@)KkQr!l^VZh>^v zR2c}Q7e4zKo@n?|9$nsTfNesQ(jh;sOg=XU{@TMJ%4$3Kzm~CMPgm0E zFF^j$aZ!pn>0C0`Cpb?6=qWc|cK9tdSY9XhVzU6C z4QEBf_EOS)029};n8|SwP(ne>1r3oB;jG~}rnyFY?X@@gs$mel3O&Gn$Fav&L&RN; z{%*Xyg?%A_Q|QZ1FKPI{%kX&=qbWM*<0FUUKn8&-bspx!1Z^)MJiKvnc>GGqj`Q;N#M_)zYdj|XC5&w&R3bZsgzxHpT2KoHZ2 zkw~{&Mn7>8vxd=WRftnJ5U{OGW|h5t`&zHq!<^{V#D4atuU$I@m3|EXsF#;fp>*FT z7s|Mf0FYWKr`Z@5Ln<-Ym-c@WJP$Arz(Su$t^|lKgAAGA+8iP+!TVO^&;U#-HWbz1 zK%KKd(HK0?5!1)A)}?c~>*oIX&qa6RVG#EN9#3tVF(an!+VutKf2YY?C`KXHBxtBy zmB$>{QQWaVqZZ2G5>#ReTqyfH0!HvkH@wTic`7sL4Hc|Vh#Y=r2qe$pI>o4huL1iJ zRFL^Faw(#1bSLBS|D1d4ts7*S3jc;dEUk^g@#~W&`L*`;&tjl{87g0PTXH-|&=?z+ zQL8EujuKqRc~Kdh1^~)H8q`8Lm?wDDMho00`$BRa&Px%Bycnr~;xY?PWV8^u5kNK& zh)|=dQU)#6%gTkTX_nd7ceA~D^Pl!E@^GKHSB=PcP^S4=)il2b060;SpOt|a<&c6K zzI2XR8pJYEpfx6;ePV1UC&0l;5};TBL^~ujSS-n&={72n+&B( zr3rZ$=mULhD9}i4C{Ni;=7Cgq_s>ejC?1h%m=nF4z@94;zD=9H3U2u_euCw|gy0f# zp9~en2=R=8g$m{(uH?W3`a<@D1u-h4Dv=8dpmFaV6F|TzLv64h%y7ed$bm%>ihkCp zt`bH~t#GSrgoC{8Ty8bO2Y&}qm-bl@#-qbS3|0cuj>g7nrK{_E7#4gI@xc&V4%JNn z+5cflNk!N=8ETc&Ye+KGF_jsLQE(#rK?$J8bp;@$V#E8f5kMJ5ssJEE(#bxM*EnH7 zF2`(*ADhcr8}x&=X|BhR<@0lvEqfKW?Kcf`BC4fr&YY8+T<&@pzRUs`id+Lk1j5UCWE z6rBumS^SU)`$0~bdEk|BAS;~Ud16#5F?cuoJ_#PKQ8TpynDK!o%H=Er02+A!H(TA^ z*UY))mdE&>w@UwZAZ}UE7z;)lzN}i#=b(&4N|h2%iP1-omeEP2_(Vm^{*U88icijo za#{@lN(~gi$>9WR+5?e?g_`%`^2uP<08nb7xJItDIp+!ytyNXae$WSQ$N2FjgrL0Y zoTW?uQFz5$?*45+WOU;i!&s~t#`iEdA6*2mFs|bqs2W4G{t4srtMeQWQq%z~4j07~woGK1%f zV?Yl))^-Vi5=8v=!1F%qAi0oW5Ik@-vn~}Uo_G-m{5HaGPmtp{_Fn`J08sJ0gxQX0GcwYJl^Ha#xNK(KViY|bJ*pWG{+dwKeAo~tE#&YGx_@+ z9Uc6X1xFkMPDdSx?Pr};kHyt1umb;CC>{01sV`KZ1P+=Y2kR<^3_6AmUf^9>a{x$! zN9_{;%1FZeG6lI04M2iN&6A116~N<9Pl@3;kR0eKG91Vgz*GT17xSSmW@3W)E?yv3 zu@0BMbj~feJPsi8vKS`@nk0x+wZrN33HUJUDQ-SWLnk`e4VdnEJsnCUr><{L<3^5E zhh)N3SuB`N&tv#kRP<>8Pp8Hx{Tw)v%rO|027)IC?3{JspdA$}wM$N5v+rYn$G(s8 ztqC4}(-!7H+9xZ+1CI!BE|dUr`Ya1EP4USAz2rbDNYp~Xfx!`Vwl7@1!nK^Q^f$0K z^Eyyco(qSoEM5N{!o;5CMNIZVUTaXR4T>IwaEB7m0T6eIva%-3-v1dZ&@ZAwnwpcz z=2O8q;Fssz zy7ZBE!hOi9n3Nk}I~k6}t}b_+Zz3{uwTuo8xgA2LL9|$8DxlE`jTTxUwnRL^G)uEk zY2BFVcwViDzKON2CMTYJ9!n}4@d>dcKKhoM^rt_WC~QFn74tpl!Ag1+ZQA7P3+FUn zE*$a&gVUi=o}vYVlhi=qOmNTyemVhpqjSR_xs3y6ZUvyYcuS>)*Ci)$l^rxl;0PYg zCb)qM<++*p04`GiFoSxdVUv#4k3dybIuMKf zA`lGz*X&zw-NTmxuXslZ6z0<{6&1(hLrULAo0*Fy?PCON0vg1!NDzRQW9$^Dt#u8m z#kwvlPqt2W^j<}#IjaJm+*6EUnoGV1#lUqP3#|B% zs)5gysZoH0ubdz>H9!J*c{2!t1nV*h7z~CaSR{d!%(4`~@<1wr#`EMZg2nRjUhXMv z3S5Tr=8yS4mXGh`F%nD7V=67|SESg)u@@AZ9G3=Y1Tc%uLA^=vYHD&uxa>h)Grl$d zuDdqk(Lql|5c%dM=p||*k(oiqxfVgMKLoeqGJsl)-5!9L3IfDnzGX?951I{V=x?}S z%1;nboU!#wF+@;NadKlN0yKO|lv&{(Y-qLeem+O8k(`5bI*tqPlGn*qxL0x&pCtf% zFDIZ2i?MPNnjFRk#fId8MUV&xHd&?uI1;#0pgaHx9FLLq2F?auatR67(Hx3__1X93 zP&YZ$frG}z???DzG0Pu|{UsO*ef!)y?_2|Nz4pLY4{F*2#L_q4P+nexASzdBwtW@) z%LasOS7Z==+{8UTRU!i55QsXsYT?T{0GBO~D!Ybd6fSB?b9RD(`y>FY99Eo{@E!>q z0b=5H4QtfEKRFW1iz} z+;E4BeYZc*MP@92p*{fmr6j%r393r>KT{c0LK_;ksv}^Fw=^eeH4`>2`KmY zVyuGcCJ8M2GIFj5B0%tfkfJUFZX;;qFmB{#ZUmT|MvfzR1g^kw1P_zh`DTxOF`<02 zk$Bf|L4t+f1d4YOG$|@^j>-z&DrZ>;8aMWR1dhi9lw&@A>=pWh8yGQSJ3gba455Q> zJLlKGZo%b4mfjM?(vsYO0d%0NYo=jYSEHiNgOIBwpi~P9A_2uY0WmE26$t}G>fl%% z;Bu1+68krt=LUr+FGdL>Dn^3o!?6Uc zu$RLF9Fyw^kmNq>$!P>n0$Df@CqYaUl#4*9yd9qfc{I|{@bi%k4Qo!h^;SN5$kTv8 zEG->5^u4jz2^fYf1RNg$hmHeyghqZPLxNd2CaCe`NuR+P^me$78wSH}|DL;%6R!5+DlPk>@B}mw*+n6D)2X_+G7h z;Np_xG=e3yOFW*{wN%D+HY<+!10=+AVEyOA@p#vg{HyrLkWBv)5cfyvE%>@iYTIko zT261!UH3hx;4>^&)I*P)2*9ebLAU}$a4$u#S1=CTEi;7nk0lTtsSXS$; zs7(s1p~7? Netlify CMS + React Starter - +
diff --git a/src/components/BackgroundImage.css b/src/components/BackgroundImage.css new file mode 100644 index 0000000..59d1da2 --- /dev/null +++ b/src/components/BackgroundImage.css @@ -0,0 +1,18 @@ +.BackgroundImage { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background-position: center; + transition: opacity 0.5s ease; + overflow: hidden; +} + +.BackgroundImage-lazy { + filter: blur(5px); +} + +.BackgroundImage-lazy-loaded { + filter: blur(0); +} diff --git a/src/components/BackgroundImage.js b/src/components/BackgroundImage.js new file mode 100644 index 0000000..25f4130 --- /dev/null +++ b/src/components/BackgroundImage.js @@ -0,0 +1,74 @@ +import React from 'react' +import PropTypes from 'prop-types' +import 'intersection-observer' +import Observer from '@researchgate/react-intersection-observer' + +import './BackgroundImage.css' +import { getImageSrc } from '../util/getImageUrl' + +export default class BackgroundImage extends React.Component { + static defaultProps = { + lazy: false, + src: '' + } + + state = { + src: + this.props.src.indexOf('http') === 0 + ? '' + : getImageSrc(this.props.src, this.props.lazy ? 10 : 1800), + dataSrc: getImageSrc(this.props.src, 1800), + loaded: false + } + + handleIntersection = e => { + if (e.isIntersecting) { + const img = new Image() + img.src = this.state.dataSrc + img.onload = () => { + this.setState({ + src: this.state.dataSrc, + loaded: true + }) + } + } + } + + componentWillReceiveProps (nextProps) { + if (this.props.src === nextProps.src) return + + this.setState({ + src: getImageSrc(nextProps.src, nextProps.lazy ? 10 : 1800), + dataSrc: getImageSrc(nextProps.src, 1800) + }) + } + + render () { + let className = this.props.className || '' + if (this.state.loaded) className += ' BackgroundImage-lazy-loaded' + if (this.props.lazy) className += ' BackgroundImage-lazy' + const options = { + onChange: this.handleIntersection, + onlyOnce: true, + rootMargin: '0% 0% 100%' + } + + return ( + +
+ + ) + } +} + +BackgroundImage.propTypes = { + src: PropTypes.string.isRequired +} diff --git a/src/components/Content.css b/src/components/Content.css new file mode 100644 index 0000000..07463a3 --- /dev/null +++ b/src/components/Content.css @@ -0,0 +1,8 @@ +.Content { + white-space: pre-line; +} + +.Content--Image { + max-width: 100%; + height: auto; +} diff --git a/src/components/Content.js b/src/components/Content.js index d03d5a0..9f70e04 100644 --- a/src/components/Content.js +++ b/src/components/Content.js @@ -1,10 +1,12 @@ import React from 'react' -import styled from 'styled-components' import Marked from 'react-markdown' + import { getImageSrc, getImageSrcset } from '../util/getImageUrl' +import './Content.css' export default ({ source }) => ( - ( /> ) -const Image = styled.img` - max-width: 100%; - height: auto; -` -const Content = styled(Marked)` - white-space: pre-line; -` - -const ImageWithSrcset = props => ( - ( + {alt} ) diff --git a/src/components/EnquiryFormSimple.css b/src/components/EnquiryFormSimple.css new file mode 100644 index 0000000..6ae5d2f --- /dev/null +++ b/src/components/EnquiryFormSimple.css @@ -0,0 +1,60 @@ +.EnquiryForm { + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + max-width: 500px; + margin: 2.5rem 0; +} + +.EnquiryForm > * + * { + margin-top: 1.5rem; +} + +.EnquiryForm--Label { + width: 100%; + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.EnquiryForm--Input, +.EnquiryForm--Textarea { + font-family: inherit; + font-weight: 400; + flex-grow: 1; + box-sizing: border-box; + display: block; + margin: 0; + border: none; + padding: 1em; + line-height: 1; + transition: border-color 0.2s; + resize: none; + background: var(--lightGrey); + border-radius: 0; +} + +.EnquiryForm--Input:-webkit-autofill { + -webkit-box-shadow: 0 0 0 1000px var(--lightGrey) inset !important; +} + +.EnquiryForm--Input:focus { + outline: none; + border-color: black; +} + +.EnquiryForm--Input[disabled] { + opacity: 0.4; + pointer-events: none; + cursor: progress; +} + +.EnquiryForm--Input::placeholder { + text-transform: uppercase; +} + +.EnquiryForm--SubmitButton { + width: 90%; + margin: 2rem auto 0; +} diff --git a/src/components/EnquiryFormSimple.js b/src/components/EnquiryFormSimple.js new file mode 100644 index 0000000..401db84 --- /dev/null +++ b/src/components/EnquiryFormSimple.js @@ -0,0 +1,62 @@ +import React from 'react' + +import './EnquiryFormSimple.css' + +export default ({ + name = 'Simple Form', + subject = '', // optional subject of the notification email + action = '' +}) => ( +
+ + + +