From c73e1ed9b4a1c9089d8efedf1f8b7927e2642264 Mon Sep 17 00:00:00 2001 From: Rikard Bartholf Date: Tue, 9 May 2017 12:18:29 +0200 Subject: [PATCH] Initial commit --- .gitignore | 2 + .jshintrc | 30 ++++ README.md | 1 + build-tasks/compile-js.js | 35 +++++ build-tasks/watcher.js | 24 +++ fonts/breuertext-medium-webfont.ttf | Bin 0 -> 61724 bytes fonts/breuertext-medium-webfont.woff | Bin 0 -> 27576 bytes fonts/breuertext-regular-webfont.ttf | Bin 0 -> 61732 bytes fonts/breuertext-regular-webfont.woff | Bin 0 -> 27212 bytes gulpfile.js | 20 +++ index.php | 31 ++++ main.css | 28 ++++ package.json | 39 +++++ .../components/ImageEditor/ApertureHandler.js | 69 ++++++++ src/js/components/ImageEditor/ButtonMenu.js | 95 +++++++++++ src/js/components/ImageEditor/Canvas.js | 102 ++++++++++++ src/js/components/ImageEditor/DragHandle.js | 97 ++++++++++++ .../components/ImageEditor/DragbarHandler.js | 81 ++++++++++ src/js/components/ImageEditor/Draggable.js | 37 +++++ src/js/components/ImageEditor/GoreHandler.js | 70 +++++++++ src/js/components/ImageEditor/ImageEditor.js | 110 +++++++++++++ .../ImageEditor/ImageTransformationHandler.js | 22 +++ src/js/components/ImageEditor/RulerHandler.js | 119 ++++++++++++++ src/js/components/ImageEditor/TextButton.js | 120 ++++++++++++++ src/js/components/ImageEditor/Util.js | 124 +++++++++++++++ src/js/components/ImageEditor/Viewport.js | 148 ++++++++++++++++++ .../ImageEditor/fabric.ext/ObjectDefaults.js | 61 ++++++++ .../ImageEditor/settings/TopMenu.js | 9 ++ src/js/main.js | 7 + 29 files changed, 1481 insertions(+) create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 README.md create mode 100644 build-tasks/compile-js.js create mode 100644 build-tasks/watcher.js create mode 100644 fonts/breuertext-medium-webfont.ttf create mode 100644 fonts/breuertext-medium-webfont.woff create mode 100644 fonts/breuertext-regular-webfont.ttf create mode 100644 fonts/breuertext-regular-webfont.woff create mode 100644 gulpfile.js create mode 100644 index.php create mode 100644 main.css create mode 100644 package.json create mode 100644 src/js/components/ImageEditor/ApertureHandler.js create mode 100644 src/js/components/ImageEditor/ButtonMenu.js create mode 100644 src/js/components/ImageEditor/Canvas.js create mode 100644 src/js/components/ImageEditor/DragHandle.js create mode 100644 src/js/components/ImageEditor/DragbarHandler.js create mode 100644 src/js/components/ImageEditor/Draggable.js create mode 100644 src/js/components/ImageEditor/GoreHandler.js create mode 100644 src/js/components/ImageEditor/ImageEditor.js create mode 100644 src/js/components/ImageEditor/ImageTransformationHandler.js create mode 100644 src/js/components/ImageEditor/RulerHandler.js create mode 100644 src/js/components/ImageEditor/TextButton.js create mode 100644 src/js/components/ImageEditor/Util.js create mode 100644 src/js/components/ImageEditor/Viewport.js create mode 100644 src/js/components/ImageEditor/fabric.ext/ObjectDefaults.js create mode 100644 src/js/components/ImageEditor/settings/TopMenu.js create mode 100644 src/js/main.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f06235c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..5738b8c --- /dev/null +++ b/.jshintrc @@ -0,0 +1,30 @@ +{ + "globalstrict": true, + + "globals": { + "$": false, + "console": false, + "document": false, + "fabric": false, + "jQuery": false, + "module": false, + "QUnit": false, + "require": false, + "strict": false, + "node": false + }, + "browserify": false, + "strict": true, + "curly": true, + "forin": true, + "latedef": true, + "noarg": true, + "nonbsp": true, + "undef": true, + "unused": true, + "eqeqeq": true, + "esversion": 5, + "freeze": true, + "futurehostile": true, + "scripturl": true +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..fe7bb0d --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# My project's README diff --git a/build-tasks/compile-js.js b/build-tasks/compile-js.js new file mode 100644 index 0000000..6af823e --- /dev/null +++ b/build-tasks/compile-js.js @@ -0,0 +1,35 @@ +'use strict'; + +const gulp = require('gulp'); +const path = require('path'); +const browserify = require('browserify'); +const source = require('vinyl-source-stream'); +const buffer = require('vinyl-buffer'); +const uglifyJs = require('gulp-uglify'); +const sourcemaps = require('gulp-sourcemaps'); +const concat = require('gulp-concat'); +const rename = require('gulp-rename'); +const merge = require('merge-stream'); + +module.exports = () => { + const debug = browserify(path.join('src', 'js', 'main.js'), { + debug: true + }) + .bundle() + .pipe(source('main.js')) + .pipe(buffer()) + .pipe(sourcemaps.init({ loadMaps: true })) + .pipe(sourcemaps.write()) + .pipe(gulp.dest(path.join('dist', 'js'))); + + const min = browserify(path.join('src', 'js', 'main.js'), { + debug: false + }) + .bundle() + .pipe(source('main.min.js')) + .pipe(buffer()) + .pipe(uglifyJs()) + .pipe(gulp.dest(path.join('dist', 'js'))); + + return merge(debug, min); +}; diff --git a/build-tasks/watcher.js b/build-tasks/watcher.js new file mode 100644 index 0000000..b83b5ea --- /dev/null +++ b/build-tasks/watcher.js @@ -0,0 +1,24 @@ +'use strict'; + +const gulp = require('gulp'); +const path = require('path'); +const watch = require('gulp-watch'); + +module.exports = () => { + const less = watch(path.join('src', 'less', '**', '*.less'), () => { + gulp.start('compile-less'); + }); + + const js = watch(path.join('src', 'js', '**', '*.js'), () => { + gulp.start('compile-js'); + }); +/* + const vendorJs = watch(path.join('src', 'vendor', '**', '*.js'), () => { + gulp.start('compile-vendor-js'); + }); + + const handlebars = watch(path.join('src', 'js', 'handlebars', '**', '*.hbs'), () => { + gulp.start('compile-handlebars'); + }); +*/ +}; diff --git a/fonts/breuertext-medium-webfont.ttf b/fonts/breuertext-medium-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8625ebcbb2d8b9adc7410cf100288f824f0e85d8 GIT binary patch literal 61724 zcmeFaeSDPFnKypl^O{VO$;{;aJ(EcYVF-Z?Ap{675do1RMoa@uDI&%cMP4ETMjn=> zEDA+M6cCZNmPKSKy=M|A(r!1@TIwR($9BbK+Z54Smo8;35ArAtljr+A_Y4Ua+WPG0 z`Th6He7Em!Vf9m90r|33Z z(e!2<7f+pa$6eb}+fLwkm8RYOcT?}WyWzpD4?m@8U&dvv_>Q}(s-K_O^;H}f<9PnP zi|<)_>vL0H!|~r}n#FbRBM%pQhh_Y&rp@^#uFq;+djI0Px~g8r@o#YbzWeWKUyAb{ zO>3EqZNmKzu5O*Yb$=?3XK30JgWK-AXQB0H4;N_K2M^==s5YEPzU=tlI6jEu(zeA9 zuPXfBtT(n^h`}VKNMv)7T>dKseW1S(zHL|eOmED_bk4zI(62M zaNLXcPg}aA{oy&kIQeT$`y<|O*|>E1eM^5?bKa?G|Me#BpStqC1+BmP+Fga3_NR2* z?*K?W?alg^e!=Z)Kbh;}_7{_%{jIv<#z8jEXcipn+GzmP#F2TYODoidYWjosJp7QB zpsr|red$)i(SEOeqFZ#2-k{IY=jjjX zkLushBRJD-aa-nF9nm%e$iob<~oNb;~zd7&x?KB z|AHstiXW$#`K-hI{G5&+Cg>AieFvOvNWHTi{B+{seL_~7f9=S2UkvM z89-*=TUu7%IW4>Iq?Uv8xqTmKdD!OT8t=b?t5Oj=~|AKfl_3md|7=5@V<}m)Dc=9jtlU-!q_t};=Tf0acF7UkiK4R zBv6aG*7fa24I^3uN-`PeZteR-n~KuiiS2BZpsDY;_GM6EPT!BTHc;X*oPVM3GU#wb zdke?uS}C4c4SuP^U1Rz#YU5DGM{sT>unJfWJPLH++D82Dao`DH6R;WB0z89zy0ATh ztyK%+Ny7l%Vb?0LSBq=r^FPwYf~uvc|7y*Hx_YrK?K^>AUDYP_okjUCXm{XzBg%d^ z@CdH01Xcm7fk%N3;5qzuJKA{%wmY$X9@vHb7jgeS-2XDLA9w{g02~Cqhvyvvz7H6{ zVVpYw{2WL@nF>JBD9U*rba)?hcn5SS038ZIhXT-{0CXtOI?xi&;Mx(uiL&>ijJ+sh zFUr`9GWMd3y{hhmP{ZBYAUtabPz~CQQnaW?P1#cKqoyCCmgmtrC(ttQYa8*K$AKq+ zO~7Vg3-BC%za7{C>;#?%c7bC1aR1A|e&7}00B{ia9-es!_&U43t(wjZLlyHVTS zXpJG73$@*a+P;L^9zzLULd|Nl$I#NJ`kJ)Cpob4-?^WDZjqM~*=~k5g4(#6z4tfOF zR|2bm)xe`b2YSbXMKROUqab0 zqwH7FTCbtCUPEiWhSquwt@Rr2T#T|^ik0osfU;eRmF;S*Y*$gXtJlkR82cyiuAc*C zc zw$B5*aNgwUODMr5Q0Ed#a0w;21nOJ@buNH97eJj0pw0zQ<`OvbJW6#DrDFf9g>A)R*ThM2p(C+G6k2*d9xw9K`XAAghC*;m*P<=nBz8_TI z53276)%T+$d%$lAkSZ=n6&Iw63sS`esp5iEN!Fgh`<}!5wgWqWoxt4vcb-;aMB;tjB>TfK9+=U<pdl}ddyaF5m4)*;DHSIx7dr;FJ)U*dR{RlOE3pG81nw~*TkFgc; zJqZ1!8YLMC+=^at2exUjvoh}05$=efi1v3;ALPx@CtAMI0$?X_Z|Yi z4;Vlf&K(9$;9Wlll0d_Aic4+<$4%|q3qCuEo^l1WS_rzV!_z6hUqTrdV*GEyGv=Ti zHf=h7(*!R1GFom9V8zjS9KDaD_wmbVxbJqrcKv)a&hlCT+NlS%>(Qow>u-a+nhwkW z?!eW%@buZ>%I9!>JIb~L+nv}x5A4GJi@>+>+wTA`0pA7o;l7uF{lF{00f1x9VQl{y z+RP~+1#hLyyMi}e23K6h8z|c@;0=^*AK?uj;SCp*bbT2dbpWuU#2?}r7=Zu_CP=_;Ut*vOSt)xFnF$Y^4+UatPvZVh9824-YHsI_hIC~-14*eyE%!PD` zw@|ZcGq%!ffHkB<*^Bz@ML*k%+9jZ$B`AvB0&ba%cX70s0ys@_dCE#z;}UtxPJ4<3-}4gd#%!@xg70-pkkKuH6Xya-AfcuNRx z3E?g8V~lzqZ+agTyr|7UJKll*au-VY9G<)#*a7SWo(Fc}cP{|Dffs>2z&`x`Wne$> z3UB~mA3uz3d~D_0U&q@o;?RGH}E2`2l(th_5t4hKHh#AG`n!SZ7EeB_sCfYO`4IIvfcgYcpWt7hCi~p~3u=Cd`g}+Y z9A&756s*JCWDF=eu5SrOkh2&;&SC^PixK23Mv$|RlrKSFS^_<131n(1=qokBM{sT> zunJfWJPJ@dbZ8COi}#*^qkLS(#(VPz==HUj#npiVV?c|Jz6Iz@sgT!RpcEyT3~Jv2 zG=i({LiuOo=}nNO9Qz)@^_9RXU^Vb4(9t&*)b9cHdqDjjP`?M%?*a9DK>Z$7|08%O z`-&g$^g-V$!jq2RNk{OcBY4sgJn0CY)C}FI2>MHrx@%{wq!qX;4|i4IuAR7RC+^yb zyLRHPow#cR?yA6D6}$`5#nk`54O$-ot=B-K&w)mt1C2fh8hs8l`W$HVZqRxSXuSqK zIR}#13u{7}mJexN3i_nrX+vS26p@y18B(a-@O!yOy&84q1>Gqk8JDCuPFIcPM~wSC$F+;I?}dD>x={%hI^ z^#6ObH?@D!?$dsWPn)Jsd>ZYgfo?PO@s@n+A;;f1|1Kdt$?YEQ*_5_4`*gv4{~t<+ z4|=5hvGQX>v>{IpIaoDn_(!36HE-6=t9x_IFUK17|6}|&CTyyE6ZE4!K!WxG3EB%J zXg`pkJwbx@1qs?4Bxrw-pglr@_6Z5vDuS0^q z4++|BqT@j zSaKwf>D7~>K?#XEyj_A`LO3;fb@ifj!(90=7ucrh(1roGdOVE=bLA$mDy{HoOs!GUtP2B5B`}aW57A`@r ztOUKZ67KO3(`|LEF3py~Gl|@5{x{OU?h?RBa$pNidR4f{|?!jC7M= zbPJ)q#5{yKYU}T~MBNZhWxhTO%MhQkX zN-)wjO za#Ug?o+rV`QVB+yN-*+Nf{~~aj7*haq^iWr zI47|m=Oh@}DscekBp4MZ!AMvMM#f4oQdWYIvl5J?m0)D81S4%F7E;)jG~p8j&l->vXx-etpp=jB^Z?}!6;n`M(s*4idTZsh7yeOm0;Ab1fzf@7!@qR zC}9ak4NEYJSb`Cc5{xpIVAQb$qmU&Sl`J9sc=4!ZMpX_3qnITa)hsay9Q0W>*PH!f zjDnV6RJ4S&d-9l3(-P9|8IP)FWc5HW%36X^*Aky)eP>j*1f#SiQdLYdXz85V!IjNJrIobmSF6+g!D3Fdkbj<-YXW@t9G!64GxM zk4Y`X+w-6a_NF2PuM3C6}tFjihd%J+Eo!xxkBpFqan z2*%z^Fcx2evH21K#Mx}P35?H|V7$Hr^C%<+@^XA%@^d^>LGrW{*4``76&Q8RIQbj$ z*VJ5UFXmD=g4qBP%np!Xwtxh)2P8gAGBLYAg4qTVpXD`THi87R6C{|eAi?Yf31%}$ zFuOs5*$xtn-!R!kOW@AV&J41rm8WPOj zkdQuF9!n2dJlo@DKkXOwlHEK~Fk3`|*&`C4W~WFD^wh=o zrME7g&GO&(*j<4%yb;WXkvN2N63mv7FmO&ndh2-1>>3GX+ek3`MuOQm5)XlQ>uv(` zbR=XnTRe}4xjX~GydDYW`AEoUF&@ikF&@ikF&@ikF&@ikF&@ikF&;CoNP>Ar63jc2 zU>=eL^O7W(rzF9=C5gj0C&9cX3FbLTynyk;xCx&XdBD6V3Fb*jFmFnNc~lb2tCEm$ zjq$vzsTgktf_YdH%*&Eso|XhNjU<@ICBeKd3Fdi8Jdbk{%mb5PUYG>)#3YzECc!*1 z3FehaFwabad1n&LLz7@$nuMH<$Me>hyEYIf&^{7B$2kdd+v_)hd2bTTgOgxhoCNda zBtC0K&OAB^=G93s&rX7QcM@{uZRWr-Gw?<*PftS5vdw&1=FHv*Im?dc`F)X@HuC@_ zm=`F)JV6QO4NAxvHIL-=9@~0NHjU2F|AA`^;OEU>>8yLdcxUH-UMM63ly) zU>>9d^CBgfCn+IkZ}B`z=28yCz?oZoU(Vjl>|2szU5SdKLD zEaLxvw7J>-J8+bV@1Fn-C7Aasfm|B!pak=RC735H!MtG!<`GLUuULY4#uCgsmS7&T z1oM(5n5Qhkyk!aIF-z2f0-xLj<~d8$VfG*~2K+2B79+a^^Q0x1H!Z+MHQxh#u(rW3HH&2)S2fUw>(6S5umWg(z4%;4)S;{I zlfH|vaRmB~L%$sO$5jyIpEw73e8V5ckNBSp6e`eYHYtVPjd^UJe>wBti4^|-1P{XZ#7cj?4{>+DRZOizd1vDCjkB&Z9juiu{ z@UbG|yBbs+g^wL;O^k-DABT?aAAwRvT8un1piNf{z0c zjJM%Qci@wt-HlHYcv`KXr^>{YFf6Jx7F8OnDvb@RV(h{bUckqJc)0K430xr~L9LLH zpnXp>@SHAuELbh$aID-mteNq1l=h$Tae=!|;ak^=QQkqIR29lP3Z)zeiadfov zQIuf=DDpTWpf{l;TTq6lw5LIpXF!h^wLPH85xnCkZ`;K)-nt-xidF zEn!g~e(e=d_aNSONc%o$ zdsw~k4ZJD74r@NzUarGxR?cdT=$BCsn|+r(gr66gTkBg|E6HQg><*BO>r0u>GVj9o z($&k`wTW6vS+Aot+KT03Kh(b;|BX%Kv(R>Ygf)hI)B}II4QIHQk7xb|wxjSnt}Uuz zotCd^YfzuC_5X`OV+E2CL>5Z}bv|>+jc5%MCuWrD7df&%=@Atji_v5~Q?E7Kgt9?iM z4)=BSE$AD6?N8T!^X{wfcD);Z*Le4P?|$dqo$o&U?%=bX|Nif0`PCc$FTZrGrK>8B z`*f46H$DLutv0*EnULs8N=|X7dc3~0^o-1`?3~=Z{DQ)wVt+}Xv}{oM;EEx^p_Rj` zhL5NYjjS0}JGySn*m3paCrrfSCNN-Ht!K_Q`g}WKY#Po8~^+dTIUh%U*GyA zt}H+KFWRcLEB|KA->(10y2qc;Ha_+AliClCKByjHeks0qRqH`deI6WqRQnNHt6Mv+ zy{;|8*>l<%eE%y}%>9FQ5nS*u+7fLq+Vp$cHuUsY(C1q)7QKeZ*?-U`+r5T1)X>sy zH)hOgHl{x^$It>3vJFSDxqgm1w`NZ9zZ!bluf%ksQ#VbyC$On_Q$W2gU}%la#zg!Q_2X-e ziTCjU_qf%Y>Q86;{dvWwH-QYe={A(@?pWDSKKv|oXrTCX?B#*t=G*Ve^Bek{=1r*3 zZGlaJ;!U@03f#kzusZx^c|2?eADY3-3UJ3KDu99prUdR;G=E@Ccx&2FRASRcl5P6J zz$T|rJga$JUN^3!5AD<@>Ju9p^xKbmw0kx6%^%;5k{54kYz{0y=>rXU*yw=tHDV~@y)WBKL1z(k9Tu5L@np8-$$qoY8M!$+j~tpRIID5FF7PuyE^#UARtH@fHwbtsG0XboBB z#@;niQ_nYSp)RXUOTZHy)#_!|(|oWSCoG<@QxA4I)Dd43c3Ql?ux_iX)9|8@H9$0e zFm~A=0DCBkS48=qX;{#^2Jgw!iu60QNG|FW$;iwJg+dW0>J&*xO2&Sdrsq0Sf}Iv` zenDwg2vs=WnVyxMSDIA~3aCp~Phk-+*>TB{=t{vQ-5~Fs?n+RV@61VXf+o2pO>(Qc za?HI1PdF1r&oFv2|vBMi91HFr_++_Obd2e z)whG+MvkX5F(&~#nVwEpW)gNXJe?^S$@rN^eS6h+I=}gwEcF}Qm96f=GxOrl$&Wv$ zfWPT1jQ_HT=dBYx7Avdh@sb9V{KLebF)^29uMMRIfRI(e8L)oI!^ zwCWvNq*Mnt=3o(WaAPL+jZsxyPzrFU8{?{sjML%r)boa3ZIpY$8uqj*?u`P4v#Yym z(lkG~D7V_E@q~-OJ%wrKjiln!-f&gw`EWf>jLHDhdh3iDZ>PsmI;1qK&M5L3!8$GM z7zIWPjjpRRO1+(0Mqw4N<@k&|a(F1c&=RU1Z>bqM%u+tgS~GG~Ef~H~&j{c|pu~}p zo|#o>%}94!oEd?dVb<2)dMantH#AndeKlXbeaY6Q!2TB^`=9MesknXo{N|Y}*M9eF zCBDfU+an9s&n(h^T~Sx&@%XF!flx`7BcWni+q5m)-TU`@cI_>ytH^1nZ@4AFRWap( z+iM?~U6**|NW#e34?~M;>^pD!m3=y71*(nt)CB0D5vY~H2n0zmTFZyVA`bnC=PZn>~QZ6YQ!suT^`(V{kOs zUr;Bp1=g{g%#*w2!)tRJHpk$aO zO%Lf-Mb}X^BL{(q`VE(B2VQF2@YI&a{ZrbeOl!NvKg)W{p59~4DfuHyr;HstWy)Cn zb#?jHudB=3`Y+i0``4}8Kf8TOe*Tp9-jF?X^^|SI*y%yftq&}k($Kq3U0pu8pkVUy z`*7MjWznLk4N7iJ0BsL~wu7;D-#4|$AQH6FdOlLjouY*Ekwg;Jmw3J_yLwO}h?+Md z6bff2fSjYMjMUR%HyExq*6;0?Ppj@eVwl?)-fa)(c|Ua<`Q2JLfB3LrdS_n#@Dc2I z=xsXg1A}@%!J=a91nR=sAgf`mGkjjdO&X5ZYlrEz(MZ!59nIXS3z>TwH zP`O(Vlnfe0h8;CQ_v7+}^zHXen~~=K^yG?NP3gYh`tJJrf)zf`t+Op1{vDN`FU>A$ zT_33V$5rpY_K7FdShH?zMj-m1GuQj{w$P)(kS{3$~MXR-2{noN9dzv#zFV}ak z(t|$T^1Qw@5MBMrg}G;r=#AFMl@oeLbi;`&fj;dyePML>b5zeE_p~k6L)Le+B+RiW z$DE?G+(r-TvlZ<_dW&`ixy_41`fJg8lSZxjSxc*BC!SNn=Y)0Zd4dlLYmgb% zOb+<*_OJ10V8W-Lef3q74qB`XRp1?TFqT4TBmMia5{0dq=M~Iygdl`luP9Xmb*b+= zWSNO}w_?^hpavWfte&urQb5bV5lg}Gc>LTyJ;Q!!GqhobWf+#t4O_E5r4FKJeQN2% zezyUu`LrPw2aHwf2_Z{HnJoXS`t|sof>`T-#%_^8=I9i zwyjY=(bzUFGjm*9V~pQ4OAh*|10!w3j?zXfEU9ks6nCSQI21Um4EyP@&2t_qCArB? zZc0FbZKkrv&RbI!QVdo8&G&5W4>dxhw#Rq?^UABBM==y*)sEppP{YS}Bw;7X$0sJG zl9T;ahJM;etqvDvoHyLnMxjT&B?~XkO5o43it%C$J>i5xudmad6Gwe#P5=MU=+wgwk$JNWDZ%Yk(pjgIEI zi)XhlUE2P}ug5LgIdA0)OB$P(+;!Y6e+$~vjq(qNO(!yxt!YECZ9`ce8we4}XH_zA zE+e1kGIA1wUG9{j`4InZO8yaSZX>5UtfR%Vs|{Ugv*Ge|v_F*)KdR^R^HyI9s#lHb z`E(4Lw)~+OG!3WMC`BDpY!LY6b%vXVMuyMun;J+a?^pkAZ)DEa$q?r=gIiH)o+ z=N50=xGYdNqhjmEmW6E{Yun!Y^~H{Z4^}U0S@KxrL$5xuu4~B%eM|e&h3$1SE7Oj) z+&90CBpKbh^{Wdu2LjvH&U?0X^yo#qNf!%pxHVfn_{IeZ-K<3ttkX9K1 zuofmR^_FqE|GVFPFWRi{*8_*F3wrk-jrQn)qn6DvUQ>N91ZlHZGY4hWR>jxbDwS>J zOFG|`=_*b|17$kTM_ie_>;mn9DVfD=$UJY@-B^-oW0+1^$gdg$=FD?Mzij&0jkjmo$Dq&vE! zysBdU-i~Geuwwkb#pI9+d|L>+`YLno6D}p^UhjFTFDGG;=<*H8wSgKw2iSF(s(%sc zj~-a$373N(GjNpQF`Q&qwqZh5*a@msu_qRJeO)$RuF{&d@Q_l}Eko%gscb*5sl5f1 zDp#PhcGp$C8+18m>u>(^(y!iIxOU}36P}%S=4jP};q@E47FWKPIlASRE%(pgIBji6 zKc>HS;oR##ZJWP*=b`e7*N-iDX~o2bl?NZ3(KexAMMuZ-V42AWu>4uKDVYYnL&-Fl zynzt%%7nL^pJIabo@pAxUIc=|DRV-dRdh&T?QIvX#vFjZPFqc z?EiV7qEhrmB%kl9@Mlobt8n7cBdZL@>2N6sRO&IZNh}SW9OGU#Hl?2MFwhIK-YDcH zU;6oQ4NjCgR5^@c-p-6Xe$vz_$eB#f8Si`>+sWU3P;Z$hT#t2_H8N&nUimAph z9TN^kPP3PrqeMSLrCpz$ki8n$war^}{%p^M2fy0(w-b_i8v}E<_hx7$c><*M|U2$sv{!=TqmIYqebn4*u&Mj+cS+-*SeEppXcUE~kRkJ3p zxD$hiIo6TKieVcEkKvzj#U!DdT`I$i4sIvmD?zCIQnww1$|sKvS3Cy6XZSs)5cFc- zTcrj?zbBlH?p9tMP6CgO0Ex0OE_T`7`K6Ug+?VEqVmWn2CCqP%7B>u(HKBCUpkAlK zJIqq6j%q0)L50@g4;t$?9)7U$*I>4D_kr0OwzVvN{+{4_iovpKTPAO5wQgPT-G{+f zhZaTa!EUd&-P69~U|B`=f~W55Xs;++JEOHBe}$5Ptx!~2tS#UaC-`HamI4hYW<621 z3=9CaYN{xZhe}hSt%RdhD1$Zede<)=CiPg>0`?L0)@mI zO2SZpN47qFMX6%e5FShY_mE{R^dP&^ryXp8E{myu!MMU9Tn{Dcfku7B(db5f^-;?% z%YR4k{^>I6K)M(!i`v8Z(9eb?T- zW}obTzaM&-dOwv`+w~%Z;m@G#r&g87vNYiL0Ql-&w=N1;7wX= z%C)XMQ!`Xk+RViBkxVQ3FB7ARZWJnB%K?Aoc*42hrUF>7QVMcSLk!JJ1(4!6??8v7 zb)X;@xQhCtJ7$%&x3#vn zT(SP>wUftBE!w^yl<=fJ(j8hbd)fSX?Y)!DcD88?`zq}3*p6YQUI1NjvOZs9C&;v) zH%3>5>#-SB6|S%=*>tEb}z_UP*VjA?H(LQunb5{*NCu)!q;Ww(9QiMEj>k z0O#$O|5XinSso*|8{+3vBdMFVr}T_`Semk6V9Lsc6)A_`JYT@`VSh=2G11dmGBJQ_ zllUFM4YY;^9B!|#&M2sh;70D{)M*nvnx2%Lo}E+RF9}qKCQfSL06OqbpO`xECpZ5> zO_M8zfP==>86&+v@H#T{233u&SB+Rd8s}>uEAp`HeW{uwTiq60pjb<@_>1#&pTF3O zDf9%3IdKk*w?eKutpRh=TX%n$pQ&%q zTlC=ix1RaZm!5fRee~`1Z*85aSL$x1+vMr{qs`Ix+wO5BPiv?dJ8j0ou~`pnj%JJv zR4iICuOe@~$A*#4g6Im(R)lfRsU^WnuH=tl4Z+xp*^(nc(;;siR6#LC#EioUt=j1c z+rZ=2jPslhhHXypx^79}u!A8n0c3K4Od;J54)IHiHA8v~-oVG%r^rDUS z65Ss?tDmuKfkfC4D}x)OWWSD|iZN2nBZ{GHWoK#72u(W(bbJ&g72Of4aH`q!l2EXG zj)`^%e5&{MG!!HOCCZ}RBdN~F_Ttbe_8E4T&g-WV5g+x+OuhHI0vyyg=*K^NWB$x# zt-ts~pZ3X;wukTiG3)+5X5ABOA+u<+!)|#WQ9&dVZ+3cfp=PywIS(En0^Y9H# zM^9|hA~_t%e5ivjhds}ifsyPp6sNd!VRcZK40ODN>To8GoYhK}WT5BT#KZz#O^rN^Qh_MD^j~r8tAF%AS+b2aDh4SfP`vl z38P!NGGTIBNy;7UIJ$P?#I;8|PM(;tsG*>2O6%kk_E34-(PyITw!XTk{CNJv*6I4* z=C%-Kww$M<99H^mlMt(+I53=uQYd}PhPJnxY-sOi!$cH_HVS1vNKArEvs9bLikOAM zv`)}M;m_D$&A9faej%D}8EFr7N4Fe}u8z&i_}+HBH&LSp0k!|^ce)f2ZhR-qCb1VL z#i^lQ=J#%}T)g(b^w*>{Rvx)33o}IsP$Pk?PkoxIb^Jpi+gDX#`HQ{nh|4QrSFN&n^2va#D&d9C(fOV z*4abXPFWyCEYsrjMO*5vc%Ky(>;AU9Zr#DttU%1VgQsmcM3Y3~c%u7bqcu7PxTOL#&xTkXZ zq_cW=-j^PKu%_j>E2ZH!>-g?ot+8Wv1^Sxedz%Gi_OSPn|6r+8EQpz}j$xc)&Z7u} z>3nRy5w@l(BL%9U`xABlFl+gsa?)j!o)9h9-;egrT-h|%7qo*!CoMJCI<7UgA6hdz zw_d+?B;ME9=k55Pwq{?m#`;=JqavN+hB-UxX=-+=5i;Ot}_n~~D(4qJ0EAGUNK ztKWU`fT>TohS{MqgzdR7Z`-=HPOHt8!l7M1Y(c<5QnESBbNr@8?DfN=45H! z4f;gA(54sZ6Mvf${n^3jiDWnuZPs3J&pCbZpCh)J(QVf-44Umxfchlif4tt<9(L5k z908NOaQv7fpwk;00h7?jED7vmoDqhtiDnD=bt_uQuZobTA99_Eeh_VRfqrN75tb`3 zZrsEi~ z-il~}Wp{e0W!kis5GK-!cIAq8x$vmW)FSvt&OswJ6fT4cugF)H47&qng)~A|C@MmF z8hIZ2PT8fyL$KvEIpWAh&%(^v8%|4)jkW{qr?7&J)tv!&LEt1Y$6ZO*!#_)?AGy40 z!@>=zC%Qg|wr9`yYW&NZm-yZ}JAk|~`c|sGl&^gy#(ha4lf?NTvD>3a>?Vl|%sz#B zcvPQ)dsvaU5Zg>rIE6O9unSWTE$o4=42{gl_ufEwhm&sB8%cj;g|TAnq9s>8Is4I> z`mfaH<<-s|f5xQ!z9Z$=uIe8|^DKLOHFM+SN1vguFaf+fLOZXS?m=ZQtE8M%w#{^k zQQAB5(s?c~n=`8FD#Lp^T!0}h8>`@#9xNPQhrCUKVYs;<9eA%C)O+}t%yG%!@$^Sn7;RX}f92VQYfS~$S*roe@53Z_wIEPxFOig3j4 zAj$1eRw52NcOA5n_Rq8_BrB}V(br*c@9zHd7G-eP5s^$?B?Ng?8RRI+ce6db~9a9)}oLjkK#Utm&t~j`K*})ZK^?lYYy$@_$ zym+Jax!(4*2k#FC?>}hPuYXQbuSM{W-Ocb3H7Fv21cRauZ6BspPDAXNhOi7am`TG9 zCtFIxjKqu|31J|>P*8MU&#>v~e~500z7O$x$Ohj6uy9Ip zf{~0t&5?*}_HHX2eGZOS`Vof8AxtjDgJ3v39(8cJRUO!CRSXP5Bhvf;>XD@T>wo_< z`_J^i3ER(pAN{ZB$)CIyJ!#g+td*_t&xcGJ!sueXgu105?$jL15>07hI8ZBhm1!%t zaJ;f5sqqR16TSup97Nru>+R89(f2LyN29y+_TEdDOO}I{jnPW|SJzfwo2_4oGO88r zWR2n-iHK^AB;3$W(3ul3U4(pvejIjURv5Ox{D{Wk1o3*sLOM9G=;KdppInKqgGP33 zucf8;^=N|r3EQUy&;PM{{xGu+VJG-dsmoUCWv(hdT?->Nm|9raM*edsZA|ymkmS#3 zu}r!43v1oAqn4I~))U=_ddJ0dm#5&%O@J-S37wDjRl8eRqjZiFipjd1nOYJ|J1{WW zl~*)=!de~cL0Onw1mIeDN?-l<+gBVN9alRL0Y$$041b}nJcMK->rMW`FT1 zqA&zQhpE{UuN3Yw#X=SoZK$yR*0PJBn^`I1ydr6A?JRtS z3lO~EMm$Z}i5;i1+Bz{K>$3W@+|==DX)05lC>Kg#E(ACweiHVRs=_XHDqM{I1hV=d z@&|!kiXo^Y?yLe1$B0fy2isUNkHHRPucs15Yo*U9=Uiq+Y|aArCTGL7HFh`5ezWuu zGgd6Qv**7dWb;)k zk8=S6pTdp+`ZgK|u2a+F92f@Ex!Z!esL5q*DDFY5UABK&>z+lUers!9)X-Ful~vQ! zu&CMg+fj@5w6^bGQmda_wE2e*4J&VcdeO2wavN4OFPhulkUMkvqNkh7hdp#mwGHd> ztNym3-9ofYG22G@>>P-77}z#u!x)Lx;pAA`C>5Hm0@V+ZFj_b#1#RN43p+DgW=0mYB}DV( z2+eM&Z=E|kI4kntvV+UV^k8NboIQ0)(+Dry{?&(u z4}0k7lj~=;Hssn8k`oVmGJ=bb>1k8iCi#mdAS4L#E`$!c+P((X!h5s`LhjM}Bu_eg z#agw2Kr`I|(;-e7DKK@@$dFxSWHP`dOg8pZBZ8AWpOFTh&&=R14gKL94kjsHv^w-< zhd0*taQx8dmX*P#b`MOn2KHNiuNdaTo)FKXGoIXNj}OBq!)|0tao zCa*@Hvi=Hf$~d~ErsXGGhA=M|if6X!P%A8dFxgYHhh7ZzrUZp7@vu0?V3SXw2!~4` zGQz$z@M(^>(~+8qKvU)CO9aanU>azo)rE&r`_HX2T=BxI{+O9n3oQ&r!a?PxnL>EB zZeZf(owru*eCyZKBGYHRG;7HMC2}M;|9Dqi#8{3;($fDaD|6<9^D0Au1&6lpS{ba; zFU7eUx+KQ%U!bq1X*{9r82HqZ9{>4{8FLL~E`C6?L$J z1LY;0-sn?0pUHShXyi^l zF1adfb%EEa!d^ZVm2;d1=YRqa?R%E`Y zcU?EJflj1Vzlp7*$KG;vuX&IC4fKIh?E&+iurCjKHp#A7!AK5;A+e1tOkPY?p%ev% zw;KVYFd3-ndKz})`avlNPed+aO6x#S1ckJb<~5SRA39|AbpuQ&iz8~L`lhM+I-^|Q z>DW;@eRI=-_TaRgbDP^I<@8K!tXfpvGoi6!S(QzLpdMXYH8D76%L0>&s)D_}ILsR`aOlQR)xW5pU<`!Dr3S!CY>Nllkm4hFObem+n)h8}1HeL6AT3>eAuEm%jSM^&Jl5 zxee`e7d5Zo&WdJq9rnlQUh5@QZl!0Lwl9?1tGp)2_`~Ej&L>p4;$t}ld1f_L5?Vdt zV|hl5sD)nBC>GA4G*7P!>v26R&1-T6hpU*Lm7}xcsTxwRbb{Jbb~VKnEez^VvoMHf zFW`V4-D__#2XIr*s;-Q-Sei|Fx0^#c>ePZdQRY*3ge^zaiEYs@^HC9uP4T+K+63lq zqp)8uNnx|Z^%4sCJk|wziHmi)K`()L4|vTXHx?07t7N*v)JvLnL8P0?BP4l_sV_n^ znSXCgFM+anb+5ixsgKW@3L`a>l`(q*f=I2rQ-7eP2x;JlO!qDg0PMttrerG z3lTx#WVDORY!9$E=j1WDP4>xHOSnGjG&I{ zAQz8N;{>@O8{81~8 zwumd`>8+OW=(oy7Wc>v)e3b0#*TC6WYB;5#$Q;o*j>Zi|Xa?GYV}_!*!tF2>ZWIdx zl35_^#9Zec7|v_gj)G#{`278m%{qqjYb_kmt+rkz2q{N&Es+8sr`m{DzxV+pVok$m)fK!9bmYEy$OXiU6o(J-qdJuMP1g^Yad(uJ1xf1UDq08{$J(}?1YVGkoGkV2K;a? zY%~mK#|ElmB26{rRYu8aMCo^BnFbnk;4Ecd$byWc(`+y(l11U420Cbnd8v z0-@r8WTq0BgHK?5kxbk~%?6t7}C3c(&>J86)oqC0%PaEglI&QgjrBOI-)tqSbGOd&=B z(!>qNQ!8p89OW;|aIpTHJ1VMHf+|H57ED>zF=CXyZN~fpPq1$K2z~L0nvS-O(c4B; ztSJvgXH03Sh3U)EcPV;G{}BAbxdc4N6w+Nb6-TC~5eRs9fTeB9Hy;x@b`~AM$#BnD zEo%B~O+&O@ZOG|9xA(r=gC7T@r>rmb-fOE@0bZopJJyrX?JF1^$&5p4$R(k09yqg1 z#Q>C*f-;zAV4@4NhHeZQsOK^2*iqdTFs+XX)kZ)mOrUVM2yz*woFE7qz_1whU_K8e zqYMQcRA+d+k>tW6^t;#uKc1Fm+B*i=bsVw8w92nMF*owkz8>2g+I2EBm0ic)v+t!y z%M)J-S{6RA=FrkH35MZ0@WW-Z@+PfleqiqMhP;{WKicm#4ke6P8nas?HqTZGf6_?( zwpbt3;lUeH9nV)81{FX>{wtS~iu|WbsVgB-^T96S@*`U+0by^YphQiTk)nde;b;mM z4XLhT-*`FT!$=ZvzLzXAuxYLnrPYc>RUEEy1(3zwT zkI%dGZ|ZkNp3dT;QvS}*O#}x6>@oOp{}Cq&hv_sZDmJY#`eB#9)R7cBGJRI%XiA!9 z(3FX2N`}CPY8c=@s60>;V#IIUL}yx2kzfdm24nmkPCtI9EOo7m+cJ|oH~9vSS@g`@ zWzWwKo@<=HU}mBBzus}B1Vei6w8nFRnQP}AU$EMLSMZsJ$7U>evN>4Z^km!o#@X|x zubuQv*{y-5C4(m{n75&cHfrV^2W^{?3>?6^EbW?6R28lOzmBX5r_eq#MkNNvW_^rt zruT0wwx#GVhjnM73o8e}+%e1>E=oan&+;AideU<8@|6}>fdKMOEjPb}KN;!m)YEdD z+)eRyCb&F4><%9>K_7-Jn~}BUwXsQIZ5E^=_}H1{G-LG2o$+wz{;AI79eJ4}c0977 z=Gpo4o~`}6hj--UhIXvpP_y-G^S9Rg-AOs`dCI7HX5Isl#gT=(%l-cH-3yJHr&}KQ z(bo^P?g|tYmF>3Fk>~Romd|~ldBvnW_5#YqI`BO6XR@#sh|2bfr!$AWsZ62a{1^^w z3;|sknW-8wBOIY{22Lb^$zj?;R$y9Ib#)kVTJST0&E3kZ;wGCXRYy{lQ9cy`Xok0% zRwb1SXv&|kM$6Fve+*)#)CW!g^HbM*$#$tXx=wdQuM+Q>8{GkK%|6TA-V=+TcyQ;= z2cKAsW=1>rj}1<=b-y_!HZo8cnaN*qe*?w{hDkj2^wUpYvAlY1s`WL?(QBsdEHAp( zwj8oxEOdqsVGpGzxfF7*RLQ;4VpOP3$-Ri9PR$RHNTwUJstn6%MzK)qq?f-KWVzGq zyMMABKS52)ZFoFz%Z10Md}=gwQTBT+drMyZV8TBKzTsvTuUoW`>K?t^;VjSc zp7YJ$xPFBv!Cia*9qV6eOiN8}oG`zrK6Z0ZF$8^Ua(d*j0hwrr{zoz1}9<9k>UzL!@_8}r0*^JyY>Z` zJ7Be1z0}Oj4hJE%W1-7v)oR2nSF2X79))&}$1IPlG6tWfyru`M++&P_aAtNk4{NHr zMyWj}WK&X)zkGS6+1fXRFHdOy-{0YBqu68kyTerlpBlsdyHU!2F(f%zi-jZ?`-fG< zctvgWiJyB(@y@8h=#&*;jUaP$%OSr0Le#Nu&;&CnCYH3Ds+;^1QmnD0ChOsU(p?7+ z{MR=t5pVp+@mRd^sTmfl#d3S~^lR4;Z@fLrn_l#zy@!_NJeOS8(sHja!#C;Pmd51m zS$iV09=5>I&fwyiTR$hvxOH`N`=KoxpO`#p%A)oKvnJoNVY45yV4Z#maSGEBF;s^2 zP9kphUnflS{a!+7{^25e2;n@-h^LCvW5(vQ{jPhs*?hW(?)B0_6;3|>QBFJ@X0_^CW))E`Kc7WfQ)mY6QO)tj}5IvTb zj*%taHu@2s=|927K*BT<&5cYdLZd3t#gvUGK+7WXr27NB*=Hx{PRF`3-KX19-Ayx_ zXS$5MWBc0HPEJl<(2+6r*$KOs|J+s6Fy+Czyvs{0J!dm~jk88f9k=ZpfhnzUQ%?z2 zu3c4CQ(n2VAX&-MC0d8A+{%25Buums$&eN>znAC_orpg5A1C(2wn%y15bcO|Abd(~ zscY*+$hWA$y`gxvMLhf0Mk$Hx37g8pMbC-YRI&rZbz52qxwsnhG+N`Cwiv!{=+i-HZ!@$=5hqR~`+GGM(~3}dC_45KmHId&2wkqQd~kJj z_4WP@m96k}SJ3RxK@X=qvECk6zdo;1$8zEAP~D88ZX@V1Ms^?j$@>@jR97GDF)F&< zlo*5hySkg9vtK+T!H$P^4hfC~GY#eUU+nvd@xDJO&RoOviSGExqCpiyhK{^`MeV4b zKRAd{!<(1MQKKBr;t^_&@E3Z2o{mU%4h3m}@_;jq9`I3^?|iXt|KvJ->Qnb;dcIuK zym!{2$|;fhF<1{`!lA#~;cb?l)^+p0mXCx*<%k-^AGYEw=_fBRp;zI8c)98yVugbSHCm*{kVmIn_-D zvY?^dhm0NCZ?cvBh9Sdlgb=$`aDdy#UYlQKjr}K%1X{G+|JMYpOt2n@Sq(KSkv|k@BZ9XRm1< z<4#}D*7}X~_X3ySKmSAheDF$e^4mu}Pe$L2r~e@((7KI0Vm0%(98bXll>|u?_px8k z;DVkBtB8t$FeC9r1{Y+D%HTST3@%qP7NtUYb@l`<2}9qo%HaxSadSf+SMz&Q*KQe@ z%jJ0L^93}_R0ZeqUo7rleuLhrk*=6FuzP6`SHg$l*x@% zkZ+lbTK_})uG1HB7N=o&ZWunX0JCIJbAXK?ilB#m`xz+1i?;ksmTJ~KZ zf4p|BBA6}KhOMzSOw-ny<4J!W-t|^wbb=?utQ1V;<6<~gR0gLe(c$Hxqd%O6UAUYX zBg<4hO6DXG5e|3w{%PNX6#&~bA0#VGDxcZz2tZ(E7>F>C&KceFS(jUm$LVa}*WKM4 zvTV^Oc6UP;RPnox4^baRMC57PWPOmUX;PbksF^Ti#2SBH zi$H;gi4iRo3!FxfEo1nTS#K=qft)tAt8&`lCWDz0rWrHEtSe2`GLoj0fHY_fofFeA z&Z+PvI%2qFiV6f$wa8$OTMWpy^oA-dhIPxeQ!3*v)O#U1>*Re{&YK|2NM+$ccn+?1k5VF}ZuBNe`SSSpo4 zpEk`P7p)SRk0;KgkDa-=b>)gsAP}mkI&!qP1%w$Kgpr8?~x7Qa$Z2wGwl-ATCpG5SO1{#LnbI4Fh;8BxmAvAxh?zw1Yh4 zx(fpfyz2ORh{HJjAP*r4*^V^ut^-feM^tXEiK$dsWf|pSn9vreJv*T-z+eGs1@7l~ z3st%K+_beD&w(MXLb9l2MKgZwZ0vazCXcG@kC>&Ec2D&@D?O(+I}##H?t_&TE#7f% z9~6B)Of@me2lYpP2hVdLx&zNs*%nkZRZs`A9$k2zisZoH7tw9VG*cyvjdUoa&1|XU zbLNnCy{MWM|8-5%KSEov?nzknS*-|aD)LyBECH*Mp<(EiZ=42$&8D@2-W{r%a{(b?yi51n6j>;1PNiPh4y+cK#?DcaH$eV{)tI=Xf@>Vdc$ zo6oTlv@7AtQQ)Wk3{iUsi-%&RFRUD>jQz#Q7$?$Gi$T3SoJ?0H^7Je!uI6$?X5ykz zLW6019EBV=M^xwx98rZ6`{W0@!a-AS@Fy8IKR}=kqmPZ zy2lU|T{t8YeWoyH2>J}B)sez7_W43T`^;FyR+V6@N{=y=T_V%$DVbGWL(RQP5Azer zZ-$>gFuPKC9M1WNLc8(iILe0CejYW{lBKf8SXJ=T=jQ9~Rh=kQHlP#L|HTwu+gEPr zQoY3kb53nBUTp=va?rnmoC7P06~rlq#lD#BH#ii|f~2m1oHT<-b3NxfGjlms=0H;C z#==Q)GMG#OH2D8CcQw#am1p|9b8lwyJDEu)Gx^Vi{7n8QlSv2x0wjbO5onAwMm8s6 zOozZC5kf#rl~SPU`qygf@wnJko8wxSW#=Y=BDEN-ZN-1OwbZR>ZCCs$c6->?tw#v^ zyx;fDZw5%a$8(mP%e~*dGk5Oy-tXuA-uHc;7bg+kQHepD;!De5kVDJJE54{KXiSf& zI;S6shAY2y>~OHQ3y#HX7~0=sAz}&D(ooK)VbXQkQFXaGhOv~TlM@*3U&W-FeCN&$ zPfrg|D{KUo%!cW6*o~aKz(y2yp0}xv3n#S&u%l&R4630Be!?5*E=VXDv!o#LDj@k&N=FH5(%;~SNPS_K;ApAI)lnksN)Ls`YOO#ApFR<#l zHP|Pl=}EW-8ly%;$ZyIP|~rc_yrON0uC05llwYLX5}aic%z4^*d0TVm_8OjG>d}YQoHN zIpxNdlK^c;$%$f@rJSgJT;zdZ7o@Q=N>sm-17s{=(Noc=sLJOOeLRowGSL#F4i1nJ zb?_W?aKUwj$DFXMfesEoIydm*WL|OtI(Rnqdbgg34o-Ae*<^7Kk`T-kDA^B4UyiE4 z%Tv3L#g^$#sXjxl9AgT(CIHDgHyULMR!E651@j}f+)f%)fV*j+iG?&J18Wd%x|nOi zA;hWr1ieZAE}?fJya9ISyZ|Q>*Rdy4t=w>t3KddC=o{AZAkPTM3``xm!3tlNMX^ZbIcd)5dv6i#LDR5*e! zx$CyEe%D!LJRKHL&>ld!C0`4*H%HuNAaCE3nxVrxj%y&$;=y6WRbK4YOAu&Y11Km( zS$cU-twY!s__nF#rKWx~VM@)%3$4V-N-#3Qgbx-lvK;^ShGR>(vD{JPC;XTLs&5WL zQZd+PK(nA^Lv+WZ*J}=O1idh!*WeKw*SEX?f2y-*Y)h~8~MlUT`7r&&B=p1I(-W> zpUIzlg=?U*ulsYt45`So{gL`4p96{!y9iA@68&026T#&mu!4JHRuEX4JQ5Mz=`TT; zi1i?Vut=Fg(n%vI14td=U;!;8rU}(5LU(3^i6sTMBY=y2=hYLx`{BbJ7yB=Si`_Pt zaItpSAuf%L)ih#sj+Do}(efz$0^~uEV3I^hsgQ(Kx4CHQ{2OI~ao{qtI6wpbC2_*4 znTKdb$ioRO>Y;FX6eAv<;+A5!kFpR%S}0b9=!f9ci-t%Sat_r1M4EJ}LW+XUZqi+l z%OSHPCpX{8J5U+~1Kc!&4mRsXBBvLjfpPqFOxe6i^UXTnj$m_%DIWFRPd|lW`@$&1B#bg$0|zC;`5!Gj z*dMWumBO2-N-M@U$}xeJyY(teU=(dge2uyTgjqzBYKG0kUzH|UVDyr|LXJT-mJ5+| z*qDNR>Dc~|4Bf|Ki}4H;+5G__syW=QF8bXh$KY47diJAmIbI%zPb0h=#&)k;cagCj zu@*44UwlY{iDR-lxYh|_^e4*Gpyf|`#3hegQb2joU zfa*1?QA?WV8>MMJra(g@n31gYJIPQVQ>sCXzxpK1_lL=HPvbkd4U7wbIr4(5Y`K!m z#sQZH^wz64V)k^x9S_H#-{vKT1AjZx;e<#InhkD{9Qc=b^=257vY|g+#f4greq2AZ zDb`zPc}Pu>P>o9v_F~Z~+eH@U-4$Zq4T84IFzJ>~=|uo-mrP9*7lG5pUuKzbm6c+S zMKNrS#W@bzE-5W4c5$z*a*!XF2^TJR+b-m!3hqXznZzS)1?b7&k~VI0mXqSCH{!+k ztD5}H#E6SNfD*a3(kn)N)NUmJW#mEj(5&(a9fu^!VvN7y>*yY}L zv+uE?rt>2}g10oU6G-q~PrE$_zva8HxBT7Zy`BB@(xyM{=rru)*zk__F9RE%r8I03 zj16-e7t}>##OGbPys_p>L#tXBXSe!REqylx7l*FYJAE7HJ!m37M+3dvB8)W%B+YK1 z75~Mk571vGtE8U;0m|qrk^}*(ItogHD{8#fMR%yJf^iVpVj|fQD1NyX+RwpMV|H82|y#e+C9@ckh!h~4P4z>4U3<`Dq-?|=-kB#dBj*o!{Z*X6XPQiC?Pq`u7 z17d6#f`L(GoPz+m4sj6FAh%fr3qd8#WHG4-u=<63W>OJARHRJ?TlE(~MKB2}f=a>b zTuDsW)zoeSVeZil73pCD?UFR2*%1?D(4zG6h6hQ8RW;N` z0Z6V!8?7QyR?b$GP^e}n$|p##y1Xcr*SK;O*&aQ}vlr1GFD^?#q%gBR!eaM@w?{6^ zYM$l^vaIUY79fYAXWJEb3`rC(p30}loJ@Q z$;Sr!2+j$@e2&5mIt8I$(9Of0f`~ao2iMTSVU`fi!Bc*8PP#LX1T^68OnDRcCf^|L z&3%Ik4PWt4h=LA6+&kJqC}^NLvwp}?Xb|?Q#8Y(lojZedP?5==DW~EJc^$(1grs#z zKOyYUVSYliuD{Ap7=OI|RNHZ_@5ev>{0Uw?9FgpLFPuSMnWtd;ZUiPtFd|haa0QtH zI0K|C^Z49WhIdqEA&V|CGlKw0Z=(6V42>=>&CbzD`PT8wEY6Cfd!YwIk@6$Ir>V)G znl=He6akU^cI!lXW;Qv~&_sn{x1ru;ay6EkKt0ev+7;QR1D4(Z{{oT`z`6kZl9bg22N zr@I=4I!7Ezn&pT&ebMI5jlO5j|JUID9ZOqw92n^EEiJg~+eh2WI|gKX0$)oTqF5>@ zKN+EGOw6=K04 zcrf5()j=3A>EtJgvWO>c88_yFN(w`!BznL{NH zQoGII&(Qiu*X0%E6_Mw0PTmUCnXd^rZwx{2R|+f9kZA!5=AB%+9-)$pJ?M5_U} z2cJ~sbXpTRokm0@hcj%DW^#F!4GWoTX2Z0hx`bXr9B#zLBkFW@Se>fr^#&BX%hU-D z$|^CtfiH_@w`$T9s%Bd?XbP9F+N97DE>9w2@JKx&RJUBrXg#uS#L-5rR@4o7_5xPW zJhV_428f%D;+8Qt>3I~ZV<#Q`pw*F?ool4-iaaV=sG@_a$RQx1Sw+6Rp!GzAy@s%Z zGioUfD5KG+!5HsQEv6yz{8wU;rUcq%8~1azA|gh#%{tVTrta}9>ZTRwru>CAqle~~ zG-siQ=2PO7rF=B2M*T14*(9odf3 z$IKpEG8>UOBRcW<^|559aUR3hVcRF4ryDE&by9i-vZeSvUfmAGr#7Vc@T@$-QWEL) zr0@s`X~LUKHl(8VxJQc`OVa^t2IiM0&5U$=qu}>(anU|_y=z~O$3yf*53ViQ*S+?X7O(tWR%>M| zxQo`fdx**?MM}4P!Cg)IF3w`)YT7%5WXY=v3=VT5F&Itnb|{?EsBfXr#pL*!F4$Wl zSy6}wIYf;D)Gk_76g3J#bA>n1#sNT*k5JO1Apb(3uR&pprb*$x)F`SH8%+>1_);{i zQn|lU^0GNtpUC|nU4wXC8MA-Z39Bu`!ADA1PVv;3xdodG;^y$UoU$|4 zK8eDO!*Nd{+6-nuz<1#34PzfGN0st96)Hl`!68aMU+|6@!K}e~uPD$UU^?X!K&dN? zcZ}lYKs**s@EYPBlLW8RW5&Y~6t5A~V?ml%jKku+c=>yAvfIU*@#lN>EVQmX$^skt zj*w6X$d+9AQxqijhCc<+7Mc^V%attKNO*c5*SxftCjW+>%dV zmh?O{i%>|wMPJ*)$97M}rs~l)2il(x{N0^=E-wgbe8`)Ctb-yz5WM-A#wHU}tVEfb zNJJA(J~qhkHDVZ|+%`b!nX}1`Yo;K|C1zw2r8OS719(6Nt$svv`ckz4^O71Z(JN96j#xCTClN^q*J zV5iu)i&k1rukJxp!w5jlj(8syqS#S4ncnK6I;2w_R`NPjK|8DB3CcNVW-I5+T#6c5 z(K=T}nYjq#l|QBDz?qOYHIbW>2WNuQGEv~nhcf}iFlPeJac4qaeon5)+pZks$Kfm^ zb78>NT?hvDr(5-eV(gcujVEVP${D76KtX~Gqq=b+_7OaFfesMK6C3g!L@Prf7XncZ zZXav#j*ST4fvx_UR_QyqY4rPZy-#kBNknLPOgWHTxw^fr+mj|I^tp>$z2rT(yJKKU zu4I_4ZE3D2vcegPQ(@}>XlGmcF}j`b{F~QeZnlCo}UCR`ehuwTy>fhRDm!m^L{_x^5-siv~f);7Skln_v{n1L!B= zyy@zJK$2gt3O| zudsft%Wwj=0Xw^fjVIA)&(r1E07-lOXV_NH)!XM|+j$ zslMdrwRJo>H8|pt*PQb35Jpr47pWR$vgQcgU|w?wn8qcQkoodgL5$aYdNa>(PVXd? zA3bm%g!BjQbBRpbn2*%1_qVEE1CzPZnX*EmR*tr!x+lZ#5_%d0SK(<4pgRvfjauY8 zJ+fJ$o8TXC+_)ox@o^s$#x-6ur~@)-J221OBpJG6sD4CuZ-QgZC>(1h&OmMgR{>cr zX&gqyY3q9b<^%8Z`tv8J-}K=(hoXKHtWKf|Ku}9Fs3e{VBsT(C45?BYeiJxha^{&h z|C0$xg#*6{A;IpXqKf0EM}(~Sui`f^FauTtyq?QRV!$Rx{bHz=A-P4>(r6-q8Y$0G zpq47-krhHMl9Ck_RoG3)q4{O40BhGg4yd0Dr45FF=$=#j~0B&pl zJ-xlVmZt%L+d6P}Z|~QYop-G79=u~!Uf!xZ2D=CE!~wlSg@Jd%FvfAUb};yWDI!Lm zPjFELSSSMQ6a2ftEZ&wM)-oQ?(1sVW4=sh;}7tw#l6B3b@1g(qvq5(q%!xK}e;V?9ugT{EIi?$UL zd2$A^OiMJfKaS@s3EE$gUm7jlEX=KTp&u-|@TUnLgK3(OG1wuF-Aj@i=GJlja~IFcE|r#y_2+i)N%S^joIlC{Ity6mp#;StyUS zvLrzRg;!FFMWnUnQ3(i2;K)s`H~Lepv|=$!uv~g$p$SW{`0r+Y0@AbBCzZ2Ml`TI7b z&-ek#@pyOQAHHM!VESr0bz$tnYrsG8Cy`fachYc%wb9)aklxV-I)+ihe%7UZm33%N z=8G%F@g!TU+y!2Y`HxFVzcA=empN7FJ`04&uP0broJJLjZ5)aoDY5vpEEoT27v#8jHd9L zSK|2R%og_n^Qx~foB9zeK)K6so^_$#_hau9vc7Ou^WgVy$Myzm)2?PsbRBicLBi7^ zbsO8IwXh*BBgmP~8U74e<_ozg@8S9ITXB=@yZGLSx)I-P!S7#zI+7ftHsfJjBe_DR z;hS=j^coWb+hw0luMl4;b2cR}YmxLirLfsN$agYqD@WL%HhjQ8T1NxqP6 z_y*Zl3;8kwWc(K{bJU5;mflPFhPJ}XbUl2FN4@C%VQ)MDIZ^w?^BDHBHL92OtHaa} z(D~%vuo7+k8EmCuV{c=B13CeeYiiGd4eyR{)IMb^YsS{4Jc?^m{2kNYr+yXlAiiff ziuZDqmD4@7m+;%Su#=E4{i~9H{p=xStHEM8s&=be)qUy<>L0Z_ty|lwJ*>SER~FY3 zci7lwyw7AaJzzQ%-yZ+d__GPQ3G)+r6TX&kI?0&Sk+eTqOYTVClYAtlE@eZ?ohdJ* zOq+|%_n2Qy%}({DzGNx2{Kjgrc3SsX&!!cptxo$oVCEmDXQw}qe$KYm_DaUuj6?Rh z_S@}G**|pTJLWmY93N-4XZo`;vsPujmOUqXL-xL$_?-DU_v9SOb>=S29mC%*^H$~0 z&wsI?reL*mNnw5AFAC4j$(>VCR8_RR=!v4U#g^jL#s1=7lnj*YDLGwQTY78hi>_MN z(`8!OJ!L;Hx0UymA1Z&R!dOvXadX8lDpyw?s7kKdSglpxTK!Osy{50`>6%a7-R^I? ze_Q*o$LV>hZeHEn-aG4WX)rhV=XN);#zT##=h^0U%-hpsZhD~U-24smf3x8B1?Lu4 zE!^L1XkOENWKr>=I~VC`c9c+D~ z_3fn={M9U7fxp+l4 zneAX(fa+hz2Ejz*L=5)A$NEQWF1#*eq-+gtFRLBv@& zvC`j&KWEsz=#yJuI~&Hfg>A$C1N@Vn_CBfb~w6V8ZFbo1XF#`6y0 ziJbD6oU^$1KqCFKV$GHTnulD5c`mQ1L(&`kwa)qiDUo3{)6pi53+mF6Yc~L-*?&5>^S=wq{U3pO_$8u*-b6e8J^O^+ z1>47Z>&FIyF*JTDh0y)&?rq;RABdKaX;qEQ4@~U$2+@ zz~|@6a--bOllvyQZxMTsysyWT=v%*TWXo3uZWtaEm+IQZzM)-PHnL@i7aH1^vct-S zy?*6hc9lQAvqx8y`>xa5jg>uxe#>=N`E6Y|_}X=Oeq&{C4_1}VWq!4?4J1R$#?=x7 z)~hJQp`hi;f)RzdK3OoKVEmFS#G_!EBMS*A#23m!qI201mY{r{$#N1dCOTyynJy-2 z%K{fua54FPdC`nQid7VlTSh*eg}#!iKm&%0rF|P7(Mo45;b+q5j8#bqeI_0EO4}Oz jiVel|P%#5V+YQ01b`&#~1&Y`CZD1==uF3z;KF0nRMJA%2 literal 0 HcmV?d00001 diff --git a/fonts/breuertext-medium-webfont.woff b/fonts/breuertext-medium-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..a2583863b5b2ef77d45dbae3f28ce7b2d10bb672 GIT binary patch literal 27576 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

-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 lM7oopBv0MZjBau@&r literal 0 HcmV?d00001 diff --git a/fonts/breuertext-regular-webfont.woff b/fonts/breuertext-regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..2341d1db93b1a5268afdbeddb3ad8e93dc891c79 GIT binary patch literal 27212 zcmZU)19To=j|;FTX$TefPayy?6Ki*0-yx zcI~QDU8|3~yqFjO1n_lO$pFy)xn7g~+y3YN{~lsuDzX3oNa+`f_mAj{Cd`V9{t)}Z z2ES~AFChW}2Y`z!$SZ$gdjP<IVgtr*E?+)aKfgGF{|LM|@~D}Ex$PI$`^BsK z;+ZNpGL)DbI)C}%xO{P-|0BreHlAi*m=6FTK@R{#X#^b=fm)avng9Ssm0ujDFJTAk zb;Y;%0>7~BFPrE~$l$M_5G`z7JOBXWFB23B007g$36mSOu{ZwWnSPZIQuHOY6m=4L zwuT;G&o%p}ynlR&K<+?#>yzZO3snJ)Rtwg_U$bV$-ukt^!1^E)d1Yg1QKi7eNt^9wk)1t`+ z9&5%1CI$xEU`8;I$Oc9R;QiKu6QBoQZA0(@fdK$K)+RT+ZFE%qdaqfGdEBxF-Gqt8 zNyR!_3LrjRpx?0Lx*Tm@eH|qqk?Zpz+z8U4OH6;QH$rK@W|QTFO=-Ud z6NAwn+H!y=tAqsV^EpvZ8S?uij?YDvdSGfhqi;K-;=%8-r-vbX z#n)-+1oEEmbl-hTUF1iD=%=eD+&bJFF54XUI$T%X)YJLS%j?mqsWXe{)XZMrb#mKO zt0#0*yS7u>=gvayxT?oK;_d%zF0LxNBlKt`XS)D*@3r`Q=y~?5&2w<6)ctaIwE0~l z-#VzJw1;?|Kk$28+^_8BdU(b=&^x7H-OW8(65Jc?V8(q@_W8$OPc^qvlRSRzPu6#` zk^_fsnC;lu7((A3;QTr=fK$p_I96ArA5HX`ME&3>ZXHnJ`;>3RA(sSy=93!8dCqf) z4{TRkHWBr5$NkP87^j6uKI8mrTv~1_U{#pi(NS#jY~60V5$`PoNi&}O7-}XhgubuM zTu5#B`8fyr$6jR|UXX=!%!)?CZRoDvE-;Hcvm^=ZE;TH`8u^bTGd()#*-s)eEjLz- zY1Zt~ z&s!qC(AO#_*_CN`QYx|o_-m6eN)cY{ol#`@5D&AB^TrA33%8{goaVZSGfF!;y0)0I zjH;rL$4reSwQiu$owvv4xcR>u8iRNcOB8{%BcZTt=LZZT^O_Cy>lD%i!x}`EL%wFr zjaABJ`leKfUErH+p--|#y0DE-(h;gvw28B16~dO0FRP~T>3JZh{ONg;UA$#^lAXWR z&^QgdW)5-Q5cr@e^jevh#4MFgnc`{me-vw7Q8>9Qt)-D9nsi1}Iz`U^rxD@iDIRA3 zsDp6If%yCcSG^(1(^b+;jp_XbU;K0Wd;hqmTb|~T$5Qtbr7rhdP5hJDpJJ@0?n*V^ z?xhs}trk8NYl69>jNl(@7rveH=5_^=Vu&ZbKAVyQRj%6u*z{%jtlzrhZmL>>y4;X% zFMhCS%|x&_?k>OC5$X+`uE=BKztIO$8HJGs4EU|fD~^9_lKGEPu{%|K_zI807FCTg zRorX`){hFD*G3v7g9zx zPPh#WsE3hw9eOUYH}A$PgO}E;OYG*SVO=rCt9mh}HMN^f4z#c0OHzSN2?kYU8sA~Q zZgB=T{Kn4mCjOH`O8=8WrVm8ndUyG```vxaP>f;3S$P*nA6EkhF<2QH)8Ie*}06(GpXLY7zrDL3{} z*)mGv%FIC~HujO(GK%A7k$lV#`e!_KZ1{?L{gR*zyMs0_^LZ%sA>orNY7q6xkuVRx z1C8I3E-DoD%8&q(jya<5XNr1eQN^O|I~MTDB@KtyM^c%GJEidUx|~Gfu&)p;s7#u<8k7dFfbiz%$hPy`s-i>Gsx)u$%L}>2VG@HzKU8YjEt$1N3>)h(PKGhUsX$LekvereKxt3aNlT0*U=Xnib&d$B% zLB+mngMeF2vFzLhcC}c`tl4^7&U#-DPa4NRqfcb*h-jR5um`CSP5kLx(dBQNz@z3e z)}dt&>v?MN`&^^`%g+4|%Jb#XW`+K*^SLUkb@}Bx)GDwz%xvk>`Qam}07E%-v&7`H zExvi({W`*#Fg`?6nCZ9toLfC#ZvJGkMIpmG`k|TsJ?Cfwh2|WYbcTs!BCTaaD`l8= z^C`=q?*X%Vj5(Nkc>NuUe~$jtsg+jK#^&H$iN?z}>0Gm8bIlhB!d)}1vY=_wFp>~X z)CuRfWswPgtn6B2e)sFNI)@m&hweWZk=AA~PV z@YP=F*7%2AQZWyzc+?yYNvo6QuBGB&IJ1K(?YWm?wIh5I&r6;+6~>b;+Zv?mBJNH} zuPn`PnQ51l7glT6;I_hg4Wdk554nMi^@(`g)2SEJVGAt;< z%mV-4%7;}l#T9P6J>0ZvCt^=bN=iv7At50tsi=sIyy|dlM{MeY<3%4Idcgs#CRO{x zuNyaDgW=n(6GG$0c%u#_T}$HWUy|z3$W{XS9k14~e;JswPCS-v*)~JaO&^^M&N>VtCA7h>-xj05kG zuJ-<}-o})DcGNzCVuTCTVyM<)8)tz78Ycl$7YEg=(o;8IJh+$ik1+(a0XdE_zn4mH z;CtV>6Cu-kHr)G@8L-eH(YwDX)jB9 z4?8_=ySNTt*^3XhV}zL^cfrIhP+2b|)??W(Lnv_zQr3&G(Y2dU=!@nDDf@!YdK@}a zq%WN42P^wR$9g>cWr%#|IJ?bt{L4V*EyX}<| zyX9nG_}Px(7K`jv61$bErWEWg7+G;L;O8(aqOt6*eVf+oM84JpGX@r{68g0d&6l`K zMKv0U-Nv#n32evOOH0^^cYM}!m{p@)zbSkdGwyV)=TfUAfz3-c7EFyeYw+ig$2`j< zA*IA-VYsN>HJlO`nN0*Db2HXQEO)p?m-_#%8RZ)awZ#e$6Kb>p!gk^+-oHJMj$>pV zN;XH#;>JZdu>?Kij=+))(o-r=(!YyBUZ9a%q$|H~#v-nSI)hht_5mjYfi6T%Br|`L zh|gZ@zfo~mA(FRj{GZ3|Jx8z`V6nnu?;WSGpXI89|9ESlm(B6DyrGpzG&j!R{XW09 zn*JdBh~v3byoh~*fDj@U#M?2yr!ZhIj%r7UKV{3&D z>G@DL+MrN1XO0H`l?Lxbo^Ium@}(5hYHXfM<(k7zo){IQ4Vtz!`KvQV7Ho~!YX~>A z8tdjBlUMCRIpo&(AIIAN+mqAPO?Lhe=>O@!5Wj&IKU(um%bPRZMDy#6yH{)DHerD) z`I08)&nRk%oE_^M75&7Lw+!C%rKP8e8lq9y88T_X3Ra3yk{PlJ!9-dx*?PoAoPmL_ z=+*F<#nD2_*5j~_I?XiWkiiKjRzl0xld+Cw{KNfk;*O4e6(N#Xi9lx*hGP`cN^BTc zi7d-Z)>s%qKfn}Zl5W8lQk1_uV;)zDE?ckB2r`goI6|b!m|-$xkw9K3xfI227FUTw z?s97yqfz24(H%|k%%RoR$899p9YgWVld*SekpL`|?2e^)7SM_ox(Q-El^}Z-(W<)K zMNHtukY#pc9Tk|Xo`~Q5jhAp)bk4?#s|8;b!YvWagTvNwNOM`P#55E2ARB>A%` zo?SEc)-4nKzlMS_!U2#6Ox-b!@u&M5RF1D{((U3@ zgF#>2=xGDE1YYLJja>^(*&EHKt`IYk$o$0_GYbxvr|zA+e>XJbm(b10|7LObd)1pv z%-=|^czw#}p|!NXnEapW4fTv<0vd@M+O`eT9`Ff1MzS}NP5+IP`cftQFFTP~V#_18 zJM79RkWscJGJh>x4i)|4OO|Ajo0=xA0r%z0)G^}cZLQq=g~Lee1cB;kT)jul{S1?I z>jc;8)oB!gk?Y!?df1m@?--LNYxM)obxba@NWBhbZ#nwWwPi^7pb+AqCdx4?fbE1s zBq2=R=m1IS-&sEA?P5P-Q#zn!*|92+zD^ib(;+jW%HrAXm6e;;TX2N@Tfb~JWIs)~M#XUL3 z5zpk75!E(t0-r-+eA5^mg5$rBLT3ELialSVIgEvUTQZ6z_}|g_cREW5>Ky}<%owq0 zAVh8;naeDD-0;!ar*H#$ihXIbJ}Q5~MCNz%=%EnQXqxnSM|)5TQ_feY7EItvm;U`j z@iouX=C8$aEts)*}Oqi zsLY1VRAGD5H6+yZkwaq9AV3K@8m28P*85){B2p_h?7tQFSP3C|BDwiMMw`+H(g-$e z!^+VxV_7jGYi1J7M3k}rj@KI>%^NzJG6VVoS zqc8t%Hf)gU(J%*Du`p|9Bb`K)z5n%hkrgZb@<+C=QTez@@0g6$?it@aAFc!*e#S^9 zYhMyLA$5pAeFi zDP9x4j}|u^a=uhfJ(wPDEPw2t@E;1iW28mA9tf71Vi^C3)$XObay zhf-eI97sB(@nL_^Dh72Im?wE?K&V#8A*!9gDIWT;hy3*hgol3Z!6sV$!w+2PqSuB{ z&OdcCAp-c}_ey>gIAWteZKR8m``ys}I^y-c0UO-}WfXr9D<5Wf)o`4#fV z$0hE!HjWMC{VW664#Q#+{YxK?lRu^B9Wp~U;k$1FqI~v4_>CG6_no;fs`JbptK%oD zK{#bY6$=HcO|5Dtb8>VKZOf&jekaI|ikOA2h;0Mai4WL@o|jKOc~@bt2-0Jpx%YRA z%`TRi6FrR-)27-_pP{K+J)=43DLv*RD%;wez!rx9``>Zv6W<%)=`ky^Y zV*@k2an68%-nHQL8%~wWhvkf^0h(pBTKe2uF$UlF z0AlQrt!82rM18-i0a&86l{RO1SvniMojz}%fx`VH1x7ol2}*O!^-edi5mI9`r%Qq-2%o82A|1zGU2vvhSfH~4tFI(>cK-@rhF0!4%e`bkL& z3yh7hv1lr+PS)Bfc@R==4I&B^>RLU+d zcp^W1JwSOCHS$$)HtCcqUS3W4IWrmNT?r!9oMiGTza zFt|d*wf3zcJ?@WpJ_O9*VziM7Pw+mpC5Kadq$3ESV1OvXS`Btyevw2bBr&Fhk1#(m zDvNbk0V@wrgY#56i}YB0x%;v8wDKWYT>mEIB>TIZL{kIcvFP+PI;t@UO3TLVZp`)d z0}e8CHi^dyu+L{tjf5@B6QI>t@-h1c8}j-_c*}#;$U1+wzzuUu41SR5C>?Z(J=s2v z^b)xE*NBm^D6M#hUZ7a%qlNX*YP_~7ezr4+1?72^RZ!X57Chr)fq3!O@tbtqcyS$j zT3Y=F8CqZPsEev{)5OzSpKg7_kwFm6WB}C4fSM;f0U{E`x49OwFKyCF@Gf8v*W^VsDZK6x``ZSC>j?kT-a3nu;CzmE0KhHkuA5#>#7az$iPgZA=U-?$l%=um5$ ziWGLYFSjb4qn>=#o9Z40%OQXp5Hjw|oPPa~3V7kAt!A}A1Q+q*@cJxhIti=j#N@B1 zobRdA`lri503cuE9?4^EvkOTB_b{D-8#r334Q-VUnGFvZ~Sh5dHg-@iDkMbIcMcZ%swB{DFoV#qowK=NavjKvi{+&m zj=7r^&vYXsi7WRSt?CenZh{ZzPZnku1W_gxlXmc^z^(S??U5T8=xW;;Tfh(&aVD_JZ`|qC2wK0 zb~ydpOFe;;O~L5^-GC8_-Ay!Oj_W(sZ~hh&=?C>ellg(J!@}X2-MQz=`;@)mOYO12lo}oVE_dTi_jPC~h;=J@1LftIm@n@Hmta#Dnd6FUdxe*en`Mgm@{Nsp!6PCu%$$0!9F z=L4J*+jcg73TX-#H6`s2@HT)14dGV$l{E2umJSqU`Mcn7GY+*;CVJygMWim9l2Gxt zO2a*)Dmv#B$Gy-ion~3L{Y3?*=`r)6D=&5>)xMYStrDuP-%15?Iei@Z)r(wBxOAVh zNXN%c@VX@+IGE2XpU+ZaybA&w?8Lo4mpk4|V(@rB_8Lj&Hd`NWJ18H08-@=zd^1@6h$itMNZt4I#LYwvwrHlVO~&w$Nv%_izN~s8^Vc zL*T26i^ULA`|5`D0mD&vOatsw-vj6Ecu-v%o8@mgXcu-(c_rDD+#+NJo zj4RF61eu0q&v=jo28ANZ$`Nqi8Q?D8_P)8dbGSEiaJ0Cy#*aS-TNieWPb}ch%?9{K3`7#=>6v`+m6Z^43l+ zB%U;O{4*ljcd;uqu=D-h04PLw=)B(PA#gCILId_*wHjJ>jh`!`tD|5cs>G7slFeY~ zN=~A4jc`uTL}N^oLr%g^?py?UJ8?vsSGZ<*L(o1pARcB2S;E0)nR^gdyw8HUTR3HN z6f7SZIHT#*j%*1AiH)#fv#_X&+c%28e!hv;444ODiYt}@r2zU7+g{Bv9w2@3IZIp1 zdT&FqG3VJU0_}yNd=8DT7ayT-ee9fY&P^BhR5GLlLU`f(B??^;P|Jq5wU;c z->SZ`e_HRe7Hbw|>C?dC5h44olv~*_F^WBwTESdckm71$+V1oFY@35H6Dv1|AeZxv zb^VV0d3{$LE!XR^OLTd5caJQl5UDyj(~s^V!A3@RTs0fJ%;>#zfB*EaLmvKKAA*x41xGvSuRap2Yrx1E8LDR zyq#4P>T)|e*T(vccRgd@xsx6|xS1uph4LXGK_ic4`x0JiaJb8Zsqy>FtFZm$P<8JV z8)gOSWsK`*YuEemrt#p|3=rR>xE1RW_H0+485OKRJSp5wZtj;cyimJgRER+oqlW}1 zSkxF^LR2alJ01tsYXZ_Ryx7}HUXVQwbvzC>7;-A}L)bE;RKS4s?JDGGv*KJPC%4px zagvR+Oe{sWB)_<)17DdbeXkcJb~xM+HmR{zea3Ge#y?ITrYTqnaJa$2_*}s5L*bqA zRt(yKhq}Zh3IhV>zXw+VnDN-#xLMJ&40ED`r@aCO6qIG~KPmSgMFiz*uXhGVIRA3Y z#~fSyRO4L7^QFQ>4M2;{>TwY2tG`&YY$iMkFy`+o1;#pK6yquEfT#CTX}lnQVv##< zwrr&+65XOI6W5`ml8$7(`z}a_z5BYQ5Yv`Khy>n&%T&Zn$WZWaR(qaX0mKA6&gm{_ zt`MQNn`6RP<4pHX4vn--uz!1{`C#KWuoxp2)#*U4S}e}8yAxN8RLc|^_D|K%Eb#4g}ic=-|N_#d~9xp-?+Hn;-8soH+KeUlOV|T zIQS?ppB7-rS%DBQ@c3jw>(cKUKkYiL=-Rv9s%gf+XqMZEwuUfxhkvNS@X(V9Vh$QY zK~tmRMXLB66mTk>aF8%zJ`oTRep)RQF;@|(P6EnwkFxoI?N{6YxpF3xkb-@o{!<)f zerS*xB^q8ZNQwvv&w~oW6RXHbU!q<=A+0tGWaV4%Z+M|85RE&4Jk!l2yg`)N6hs7W zy{HG}sV+4&sD!DeCqA-kkrkgj1cdNiA}|IINN~o3>g`22{?YO*{u-ObH7DTHdf_Zf zzR|$Ysj%o>YW}p+UG=`3n|*@I$LBUZRW}_2ywq7^n7(ZlN-o@_-3Gk{Gje-tUYREo+dK|-x~bOl4M^7BOSG0({5(Oo>2fRDBF zc2DNAIewV%x#BY6DU;#R{o-Ti^s?(U*5tDsFHBoRHhMg}KGAuO5+4LTMYBFVD;I#y@Q0t5AoA0Fkfdkcj`<|jo0 zwc@X|yv>It&vZ+J_Fbk*$j}PGrWI22O^0_~!vbu(p~;!an0?;^1Gz>G%K~Q8u@&+J z)C2ISq>A=Aj0COPTZOKq7OYwiTTgoG8=XWx(p>qdC?Eh%n7RFC6S5c*!NEVg-FlVZ zAL^r3L5D`hq#+jr5Ap>1oU@qn8?Rgk)DL+v?@U-Bh%8oiskYjr*oO^H5#v)e41QNMuLrs}z5G7V$A5br%O6ysLPdSU7^B8yVs( zhPo5t*iId>|`P zLHVKOozjp(22)|~Q|hmNzAfYbsSosDzxc=x_iyvMUmhmp@_VbBEjf*edJz*ld5GoZ zbhSvZ$>uz`_4O`&%$Muwx$WH)0X{s($aX%tmwZfLzh2-Ha(cvdw)i_-j+odp%q+^~ zRk#CEg^N*-Vd)T7LH70-Nx8U~;mgZVK!4syPg>~jkqR10sq6hD0wWfr?Mzyh4yd&O z2#T6K8b}UuIr~{kfPkxRZ{SdyB&Mt>vTG8 zZfQKTpt9iJyuUR!Qz=lQit>KhA76YNdZ1iG`+N&BKW$&yN8ez3Nu>n)3&+r+RPWX3 z-pFO2a3fis>%g~ALrg!bAUGOkt@17^4*?()y9f86SX6?irVB3281tM_T`8HacuPIe zJ#qb>X1cs{)D-4K=b?Ddc%M+}vwB3n{+I=Y5cLY*MRhV*Qx_@}y9j`orxPTjQ~jm! z17x0>IV%iu=af{QKc_X6_ny=Hm#>}SyDM1S&zIs zGB0FX$TOic!k_@RRE*E__(VNZ60=HPsj*;HvOI#w0lH8?c{0fGeCS6x

8V59rzL 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 g5lsIj;g$G2aKcRXKWa+x4fhR3jQ{~t9^~Kv05% del('dist')); +//gulp.task('compile-vendor-js', require(path.join(buildTasks, 'compile-vendor-js'))); +gulp.task('compile-js', require(path.join(buildTasks, 'compile-js'))); +gulp.task('watcher', require(path.join(buildTasks, 'watcher'))); + +gulp.task('build', ['clean-dist'], () => { + mkdirp.sync('dist'); + gulp.start('compile-js'); +}); + +gulp.task('watch', ['build', 'watcher']); +gulp.task('default', ['build']); diff --git a/index.php b/index.php new file mode 100644 index 0000000..f2195d7 --- /dev/null +++ b/index.php @@ -0,0 +1,31 @@ + + + + + + + + Crop - dev + + +

+

Test

+
+
+ + + + Mirror: +
+
+

+
+ +
+


+
+ + + + + diff --git a/main.css b/main.css new file mode 100644 index 0000000..543e825 --- /dev/null +++ b/main.css @@ -0,0 +1,28 @@ +@font-face { + font-family: breuer; + font-style: normal; + font-weight: normal; + src: url('/fonts/breuertext-regular-webfont.woff') format('woff'), + url('/fonts/breuertext-regular-webfont.ttf') format('truetype'); +} + +@font-face { + font-family: breuerMedium; + src: url('/fonts/breuertext-medium-webfont.woff') format('woff'), + url('/fonts/breuertext-medium-webfont.ttf') format('truetype'); +} + +* { + font-family: breuer; +} + +#container { + background: #fff; + text-align:center; + margin: 0; + width: 100%; +} + +.canvas-container { + margin: 0 auto; +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c36517a --- /dev/null +++ b/package.json @@ -0,0 +1,39 @@ +{ + "name": "Croppy", + "version": "0.0.1", + "description": "Croppy", + "main": "gulpfile.js", + "repository": { + "type": "git", + "url": "git@bitbucket.org:rikbar/croppy.git" + }, + "devDependencies": { + "browserify": "^13.1.1", + "del": "^2.2.2", + "gulp": "^3.9.0", + "gulp-autoprefixer": "^3.1.1", + "gulp-concat": "^2.6.0", + "gulp-declare": "^0.3.0", + "gulp-handlebars": "^4.0.0", + "gulp-jscs": "^4.0.0", + "gulp-jshint": "^2.0.4", + "gulp-less": "^3.0.3", + "gulp-pxtorem": "^2.0.0", + "gulp-rename": "^1.2.2", + "gulp-sourcemaps": "^1.9.1", + "gulp-strip-comments": "^2.4.3", + "gulp-uglify": "^2.0.0", + "gulp-uglifycss": "^1.0.6", + "gulp-watch": "^4.3.11", + "gulp-wrap": "^0.13.0", + "handlebars": "^4.0.6", + "jshint": "^2.9.4", + "gulp-wrap": "^0.13.0", + "handlebars": "^4.0.6", + "jshint-stylish": "^2.2.1", + "merge-stream": "^1.0.1", + "mkdirp": "^0.5.1", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0" + } +} diff --git a/src/js/components/ImageEditor/ApertureHandler.js b/src/js/components/ImageEditor/ApertureHandler.js new file mode 100644 index 0000000..d49fa7a --- /dev/null +++ b/src/js/components/ImageEditor/ApertureHandler.js @@ -0,0 +1,69 @@ +'use strict'; + +function ApertureHandler(canvas) { + var _items = {x: [], y: []}; + + function init() { + var bounds = canvas; + var hRect = new fabric.Rect({ + width: bounds.width, + height: bounds.height / 2, + fill: canvas.backgroundColor, + opacity: 0.7, + }); + + var vRect = hRect.clone().set({ + width: bounds.width / 2, + height: bounds.height + }); + + _items.x = [].concat([hRect, hRect.clone()]); + _items.y = [].concat([vRect, vRect.clone()]); + + [].concat(_items.x, _items.y).forEach(function (o) { + canvas.add(o); + }); + canvas.renderAll(); + } + init(); + + this.apply = function (axis, viewport) { + this.getApertures(axis).forEach(function (o) { + o.visible = false; + }); + + var active = this.getApertures(axis === 'x' ? 'y' : 'x'); + + active.forEach(function (o) { + o.visible = true; + }); + + if (axis === 'y') { + active[0].top = viewport.top - active[0].height + 0.5; + active[1].top = viewport.top + viewport.height - 0.5; + } else { + active[0].left = viewport.left - active[0].width + 0.5; + active[1].left = viewport.left + viewport.width - 0.5; + } + + this.getApertures().forEach(function (o) { + o.setCoords(); + }); + + canvas.renderAll(); + }; + + this.getApertures = function (axis) { + return axis ? _items[axis] : [].concat(_items.x, _items.y); + }; + + this.setTransparent = function (apply) { + this.getApertures().forEach(function (o) { + o.opacity = apply ? 0.7 : 1; + }); + canvas.renderAll(); + return this; + }; +} + +module.exports = ApertureHandler; diff --git a/src/js/components/ImageEditor/ButtonMenu.js b/src/js/components/ImageEditor/ButtonMenu.js new file mode 100644 index 0000000..61500b3 --- /dev/null +++ b/src/js/components/ImageEditor/ButtonMenu.js @@ -0,0 +1,95 @@ +'use strict'; + +var TextButton = require('./TextButton'); + +function ButtonMenu(canvas, settings) { + var _items = []; + var _width = 0; + + var _settings = $.extend({}, settings, { + background: '#444', + fontSize: 14, + height: 30, + margin: 5, + padding: 20 + }); + + /** + * Calculates the width of all contained items + * @return {Number} + */ + function calcWidth() { + var width = 0; + _items.forEach(function (o) { + width += o.width; + }); + width += _settings.margin * (_items.length - 1); + return width; + } + + /** + * @param {String} text + * @param {Function} callback + * @return {ButtonMenu} + */ + this.addItem = function (text, callback) { + _items.push( + new TextButton(text, _settings) + .onClick(callback) + .set({ __group: this }) + ); + return this; + }; + + /** + * @return {ButtonMenu} + */ + this.bringToFront = function () { + _items.forEach(function (o) { + o.bringToFront(); + }); + return this; + }; + + /** + * @return {Array} + */ + this.getItems = function () { + return _items; + }; + + /** + * @return {Number} + */ + this.getWidth = function () { + _width = calcWidth(); + return _width; + }; + + /** + * Recalculate boundaries and add all items to canvas if required + * @return {ButtonMenu} + */ + this.render = function () { + var start = canvas.width / 2 - this.getWidth() / 2; + var currPos = Math.round(start); + + _items.forEach(function (o) { + o.set({ top: 10, left: currPos }) + .setCoords(); + + if (!o.canvas) { + o.addTo(canvas); + } + currPos += Math.round(o.width + _settings.margin); + + // Disable moving of buttons + o.lockMovementX = o.lockMovementY = true; + }); + + canvas.renderAll(); + return this; + }; +} + +module.exports = ButtonMenu; diff --git a/src/js/components/ImageEditor/Canvas.js b/src/js/components/ImageEditor/Canvas.js new file mode 100644 index 0000000..585b45e --- /dev/null +++ b/src/js/components/ImageEditor/Canvas.js @@ -0,0 +1,102 @@ +'use strict'; +var util = require('./Util'); +var ApertureHandler = require('./ApertureHandler'); +var ButtonMenu = require('./ButtonMenu'); +var DragbarHandler = require('./DragbarHandler'); +var Viewport = require('./Viewport'); + +var Canvas = fabric.util.createClass(fabric.Canvas, { + initialize: function (id) { + this.callSuper('initialize', id, { + enableRetinaScaling: true, + renderOnAddRemove: false, + stateful: false, + backgroundColor: '#d4d4d4', + preserveObjectStacking: true, + selection: false, + }); + + this.on('mouse:up', function () { + if (this.image.__moved) { + this.aperture.setTransparent(false); + } + $(this.upperCanvasEl).css('cursor', 'default'); + this.renderAll(); + }); + }, + + get_apertures: function () { + return this.__aperturehandler || + (this.__aperturehandler = new ApertureHandler(this)); + }, + + get_dragbars: function () { + return this.__dragbars || + (this.__dragbars = new DragbarHandler(this)); + }, + + /** + * @return {fabric.Image} + */ + get_image: function () { + return this.__image; + }, + + /** + * @return {Viewport} + */ + get_viewport: function () { + return this.__viewport || + (this.__viewport = new Viewport(this)); + }, + + /** + * @return {Canvas} + */ + removeImage: function () { + if (!this.__image) { + return this; + } + return this.remove(this.__image); + }, + + /** + * @param {fabric.Image} img + * @return {Canvas} + */ + setImage: function (img) { + this.removeImage(); + this.__image = img; + this.__image.addTo(this).center().on('mousedown', function () { + img.canvas.aperture.setTransparent(true); + }).setCoords(); + this.viewport.reset(); + return this; + } +}); + +// Define properties +util.setProperties(Canvas.prototype, { + aperture: { + get: Canvas.prototype.get_apertures + }, + dragbars: { + get: Canvas.prototype.get_dragbars + }, + image: { + get: Canvas.prototype.get_image + }, + topMenu: { + get: function () { + if (!this.__topMenu) { + this.__topMenu = new ButtonMenu(this); + } + return this.__topMenu; + } + }, + viewport: { + get: Canvas.prototype.get_viewport + } +}); + +module.exports = Canvas; diff --git a/src/js/components/ImageEditor/DragHandle.js b/src/js/components/ImageEditor/DragHandle.js new file mode 100644 index 0000000..1a68e75 --- /dev/null +++ b/src/js/components/ImageEditor/DragHandle.js @@ -0,0 +1,97 @@ +'use strict'; + +var DragHandle = function (handler) { + var _currentAxis; + var _dragging; + + // Event declarations + var events = { + mouseDown: function () { + _dragging = true; + _currentAxis = this.axis; + handler.canvas.image.trigger('mousedown'); + }, + mouseUp: function () { + _dragging = false; + _currentAxis = null; + handler.canvas.image.trigger('mouseup'); + }, + mouseMove: function (e) { + if (!_dragging) { + return; + } + + if (_currentAxis === 'h') { + handler.canvas.image.left -= e.e.movementX; + } else { + handler.canvas.image.top -= e.e.movementY; + } + // Trigger moving for image, to stay within bounds + handler.canvas.image.setCoords().trigger('moving'); + handler.canvas.renderAll(); + } + }; + + function getRect(text, width) { + var txt = new fabric.Text(text, { + fontFamily: 'breuer', + fontSize: 12, + fill: '#fff', + originX: 'center', + top: 2 + }); + + var rect = new fabric.Rect({ + fill: '#666', + width: width, + height: 20, + originX: 'center', + }); + + return new fabric.Group([rect, txt]).set({ + evented: false, + }); + } + + this.getCanvas = function () { + return handler.canvas; + }; + + this.getHandles = function () { + if (!this.__handles) { + return []; + } + + return [].concat(this.__handles.h, this.__handles.v); + }; + + this.init = function () { + var viewportData = this.getCanvas().viewport.data; + var tracks = handler.getTracks(); + + if (this.__handles) { + this.getCanvas().remove(this.__handles.h); + this.getCanvas().remove(this.__handles.v); + } + + this.__handles = { + h: getRect(viewportData.dim.width + ' cm', viewportData.width), + v: getRect(viewportData.dim.height + ' cm', viewportData.height) + }; + + this.__handles.h.addTo(this.getCanvas()).centerH().set({ top: tracks.h.top }).setCoords(); + this.__handles.v.addTo(this.getCanvas()) + .setAngle(90) + .centerV().set({ left: tracks.v.left + tracks.v.width }) + .setCoords(); + + this.getCanvas() + .on('mouse:move', events.mouseMove) + .on('mouse:up', events.mouseUp); + + tracks.h.on('mousedown', events.mouseDown.bind(tracks.h)); + tracks.v.on('mousedown', events.mouseDown.bind(tracks.v)); + }; +}; + +module.exports = DragHandle; diff --git a/src/js/components/ImageEditor/DragbarHandler.js b/src/js/components/ImageEditor/DragbarHandler.js new file mode 100644 index 0000000..9c2d585 --- /dev/null +++ b/src/js/components/ImageEditor/DragbarHandler.js @@ -0,0 +1,81 @@ +'use strict'; +var DragHandle = require('./DragHandle'); + +function DragbarHandler(canvas) { + var _items = { h: null, v: null }; + + /** + * @return {DragbarHandler} + */ + this.apply = function () { + if (!canvas.__hasDragbars) { + this.init(); + canvas.__hasDragbars = true; + } + this.sync(); + + if (!this.__handles) { + this.__handles = new DragHandle(this); + } + + this.__handles.init(); + + [].concat(_items.h, _items.v).forEach(function (o) { + o.bringToFront(); + }); + + this.__handles.getHandles().forEach(function (o) { + o.bringToFront(); + }); + + canvas.renderAll(); + return this; + }; + + this.canvas = canvas; + + /** + * Removes dragbars from canvas + */ + this.clear = function () { + canvas + .remove(_items.h) + .remove(_items.v) + .renderAll(); + return this; + }; + + this.getTracks = function () { + return _items; + }; + + /** + * @return {DragbarHandler} + */ + this.init = function () { + this.clear(); + + _items.h = new fabric.Rect({ axis: 'h', fill: '#bbb', width: canvas.image.width, height: 20 }) + .addTo(canvas) + .centerH().set({top: canvas.height - 30}).setCoords(); + + _items.v = new fabric.Rect({ axis: 'v', fill: '#bbb', width: 20, height: canvas.image.height }) + .addTo(canvas) + .set({left: canvas.width - 30}).setCoords(); + + canvas.image.on('moving', this.sync); + + return this; + }; + + /** + * @return {DragbarHandler} + */ + this.sync = function () { + _items.h.set({left: canvas.image.left}).setCoords(); + _items.v.set({top: canvas.image.top}).setCoords(); + return this; + }; +} + +module.exports = DragbarHandler; diff --git a/src/js/components/ImageEditor/Draggable.js b/src/js/components/ImageEditor/Draggable.js new file mode 100644 index 0000000..258f72d --- /dev/null +++ b/src/js/components/ImageEditor/Draggable.js @@ -0,0 +1,37 @@ +'use strict'; + +var util = require('./Util'); + +/** + * @param {fabric.Image} img + * @param {fabric.Rect} boundingRect + */ +function Draggable(img, boundingRect) { + var _bounds = boundingRect; + + /** + * Triggers when object is moved + */ + function onMove() { + this.__moved = true; + util.setPositionInside(this, _bounds); + } + + // Attach onMove event to image + img.on('moving', onMove); + + /** + * @param {fabric.Rect} localBoundingRect + * @return {Draggable} + */ + this.enable = function (localBoundingRect) { + if (localBoundingRect) { + _bounds = localBoundingRect; + } + img.lockMovementX = img.lockMovementY = false; + img.selectable = true; + return this; + }; +} + +module.exports = Draggable; diff --git a/src/js/components/ImageEditor/GoreHandler.js b/src/js/components/ImageEditor/GoreHandler.js new file mode 100644 index 0000000..9d2871e --- /dev/null +++ b/src/js/components/ImageEditor/GoreHandler.js @@ -0,0 +1,70 @@ +'use strict'; + +function GoreHandler(viewport) { + var _enabled = false; + var _lines = []; + + /** + * @return {fabric.Line} + */ + function getLine(left) { + return new fabric.Line([0, 0, 0, viewport.data.height], { + evented: false, + strokeDashArray: [5, 5], + stroke: '#000', + strokeWidth: 1, + left: left, + top: viewport.getBounds().top + }); + } + + /** + * @return {GoreHandler} + */ + this.clear = function () { + _lines.forEach(function (o) { + viewport.canvas.remove(o); + }); + _lines = []; + return this; + }; + + /** + * @param {Boolean} enabled + * @return {GoreHandler} + */ + this.enable = function (enabled) { + _enabled = enabled; + this.clear(); + + if (!_enabled) { + viewport.canvas.renderAll(); + return; + } + + var bounds = viewport.getBounds(); + var step = viewport.data.ppmm * 450; + var count = Math.ceil(bounds.width / step); + + for (var i = 1; i < count; i++) { + _lines.push(getLine(bounds.left + step * i)); + } + + _lines.forEach(function (o) { + viewport.canvas.add(o); + }); + + viewport.canvas.renderAll(); + + return this; + }; + + /** + * @return {GoreHandler} + */ + this.reset = function () { + return this.enable(_enabled); + }; +} + +module.exports = GoreHandler; diff --git a/src/js/components/ImageEditor/ImageEditor.js b/src/js/components/ImageEditor/ImageEditor.js new file mode 100644 index 0000000..01cd42a --- /dev/null +++ b/src/js/components/ImageEditor/ImageEditor.js @@ -0,0 +1,110 @@ +'use strict'; + +var Canvas = require('./Canvas'); +var util = require('./Util'); + +function ImageEditor(args) { + var _canvas; + + var _settings = $.extend({ + 'type': 'wallpaper' + }, args); + + // Initialize canvas + _canvas = new Canvas('canvas'); + + _canvas.topMenu + .addItem(['Show Murals Panel', 'Hide Murals Panel'], function () { + _canvas.viewport.gores.enable(this.isActive()); + }) + .addItem(['Show Ruler', 'Hide Ruler'], function () { + _canvas.viewport.rulers.enable(this.isActive()); + }) + .addItem(['Fullscreen', 'Exit Fullscreen'], function () { + util.toggleFullScreen(_canvas.getSelectionElement().parentNode); + }) + .render(); + + /** + * Crops image to desired dimensions + * @param {int} width [description] + * @param {int} height [description] + * @return {ImageEditor} + */ + this.crop = function (width, height) { + _canvas.viewport.set(width, height); + return this; + }; + + /** + * @param {string|object} key + * @param {object} defaultValue + * @return {object} + */ + this.get = function (key, defaultValue) { + var value = _settings[key]; + return typeof value === 'undefined' ? defaultValue : value; + }; + + /** + * @param {Number|String} url + * @param {Function} callback + * @return {ImageEditor} + */ + this.loadImage = function (url, callback) { + callback = typeof callback === 'function' ? callback : function () {}; + fabric.Image.fromURL(url, function (img) { + _canvas.setImage(img); + callback(img); + }); + return this; + }; + + /** + * @param {string|object} key + * @param {object} value + * @return {ImageEditor} + */ + this.set = function (key, value) { + $.extend(_settings, util.assertKeyValuePair(key, value)); + return this; + }; + + util.setProperties(this, { + canvas: { + get: function () { + return _canvas; + } + } + }); +} + +$(function () { + // Inputs for the editor + var $input = { + w: $('#form-control input[name="w"]'), + h: $('#form-control input[name="h"]'), + image_id: $('#form-control input[name="image_id"]'), + mirror: $('#form-control input[name="mirror"]') + }; + + var imageUrl = '//images.photowall.com/products/' + $input.image_id.val() + '.jpg?h=450'; + + var editor = new ImageEditor({ 'type': 'canvas' }) + .loadImage(imageUrl, function () { + $input.w.trigger('keyup'); + }); + + var Event = { + DimensionChange: function () { + editor.crop($input.w.val(), $input.h.val()); + }, + Mirror: function () { + editor.canvas.image.transformation.set('mirror', this.checked); + } + }; + + $input.w.keyup(Event.DimensionChange); + $input.h.keyup(Event.DimensionChange); + $input.mirror.click(Event.Mirror); +}); diff --git a/src/js/components/ImageEditor/ImageTransformationHandler.js b/src/js/components/ImageEditor/ImageTransformationHandler.js new file mode 100644 index 0000000..0b2be17 --- /dev/null +++ b/src/js/components/ImageEditor/ImageTransformationHandler.js @@ -0,0 +1,22 @@ +'use strict'; + +function ImageTransformationHandler(img) { + var _transformations = {}; + + /** + * @param {String} name + * @param {*} args + * @return {ImageTransformationHandler} + */ + this.set = function (name, args) { + switch (name) { + case 'mirror': + _transformations.mirror = (img.flipX = args); + } + img.setCoords().canvas.renderAll(); + + return this; + }; +} + +module.exports = ImageTransformationHandler; diff --git a/src/js/components/ImageEditor/RulerHandler.js b/src/js/components/ImageEditor/RulerHandler.js new file mode 100644 index 0000000..47eed1f --- /dev/null +++ b/src/js/components/ImageEditor/RulerHandler.js @@ -0,0 +1,119 @@ +'use strict'; +var util = require('./Util'); +var TextButton = require('./TextButton'); + +function RulerHandler(viewport) { + var _enabled = false; + var _lines = { h: null, v: null }; + var _rect = { h: null, v: null }; + + var Event = { + /** + * Triggers when handlebar is moved + */ + onMove: function () { + var axis = this.axis; + var bounds = viewport.getBounds(); + var pos = util.assertBetween(this[axis], bounds.min[axis], bounds.max[axis]); + this.marker[axis] = this[axis] = pos; + var dim = (this[axis] - bounds[axis]) / (viewport.data.ppmm * 10); + + if (axis === 'left') { + dim = viewport.data.dim.width - dim; + } + + if (axis === 'top') { + dim = viewport.data.dim.height - dim; + } + + this.setText(Math.round(dim * 100) / 100 + ' cm'); + } + }; + + /** + * @return {fabric.Line} + */ + function getLine(axis) { + var bounds = viewport.getBounds(); + return new fabric.Line([ + 0, 0, + axis === 'h' ? bounds.width : 0, + axis === 'v' ? bounds.height : 0 + ], { + evented: false, + strokeDashArray: [5, 5], + stroke: '#000', + strokeWidth: 1, + top: axis === 'h' ? bounds.top + bounds.height / 2 : bounds.top, + left: axis === 'v' ? bounds.left + bounds.width / 2 : bounds.left + }); + } + + /** + * @return {RulerHandler} + */ + this.clear = function () { + [].concat(_rect.h, _rect.v, _lines.h, _lines.v).forEach(function (o) { + viewport.canvas.remove(o); + }); + return this; + }; + + /** + * @param {Boolean} enabled + * @return {RulerHandler} + */ + this.enable = function (enabled) { + _enabled = enabled; + this.clear(); + + if (!_enabled) { + viewport.canvas.renderAll(); + return; + } + + var bounds = viewport.getBounds(); + + _lines = { h: getLine('h'), v: getLine('v') }; + + viewport.canvas.add(_lines.h); + viewport.canvas.add(_lines.v); + + var textSettings = { + width: 75, + height: 20, + color: '#3f3', + }; + + _rect.h = new TextButton('H', textSettings).set({ + axis: 'left', + marker: _lines.v, + top: Math.ceil(bounds.top + bounds.height + 5), + left: _lines.v.left, + originX: 'center', + lockMovementY: true, + }).addTo(viewport.canvas).on('moving', Event.onMove).trigger('moving'); + + _rect.v = new TextButton('V', textSettings).set({ + axis: 'top', + marker: _lines.h, + top: _lines.h.top, + left: Math.ceil(bounds.left + bounds.width + 5), + originY: 'center', + lockMovementX: true, + }).addTo(viewport.canvas).on('moving', Event.onMove).trigger('moving'); + + viewport.canvas.renderAll(); + + return this; + }; + + /** + * @return {RulerHandler} + */ + this.reset = function () { + return this.enable(_enabled); + }; +} + +module.exports = RulerHandler; diff --git a/src/js/components/ImageEditor/TextButton.js b/src/js/components/ImageEditor/TextButton.js new file mode 100644 index 0000000..761ff0d --- /dev/null +++ b/src/js/components/ImageEditor/TextButton.js @@ -0,0 +1,120 @@ +'use strict'; + +var defaults = { + activeBackground: '#000', + background: '#000', + color: '#fff', + fontFamily: 'breuer', + fontSize: 12, + padding: 10, +}; + +/** + * @param {String} text + * @param {Object} settings + */ +function TextButton(text, settings) { + fabric.Group.call(this); + + var _callback = function () {}; + + var _rect = null; + var _text = null; + + settings = $.extend({}, defaults, settings); + + settings.text = Array.isArray(text) ? text[0] : text; + settings.textActive = Array.isArray(text) ? text[1] : text; + + var _rectSettings = { + fill: settings.background, + width: settings.width, + height: settings.height, + originX: 'center', + originY: 'center', + }; + + var _textSettings = { + fill: settings.color, + fontFamily: settings.fontFamily, + fontSize: settings.fontSize, + originX: 'center', + originY: 'center', + }; + + // If width or height is omitted, the size for this button needs to be + // calculated when setting Text. + // An initial value for width and height needs to be set, else we won't + // render correctly. + if ((settings.dynamicW = !settings.width)) { + _rectSettings.width = 1; + } + + if ((settings.dynamicH = !settings.height)) { + _rectSettings.height = 1; + } + + // Make sure we're interactive + this.selectable = true; + + this.hoverCursor = 'default'; + + // Initialize text and rectangle + _text = new fabric.Text('', _textSettings); + _rect = new fabric.Rect(_rectSettings); + this.addWithUpdate(_rect) + .addWithUpdate(_text); + + var Event = { + mouseDown: function (e) { + this.__active = !this.__active; + _rect.setFill(this.__active ? settings.activeBackground : settings.background); + this.setText(settings[this.isActive() ? 'textActive' : 'text']); + _callback.call(this, e); + + if (this.__group) { + this.__group.render(); + } + } + }; + + /** + * @return {Boolean} + */ + this.isActive = function () { + return this.__active; + }; + + this.onClick = function (callback) { + _callback = callback || function () {}; + this.on('mousedown', Event.mouseDown); + return this; + }; + + /** + * @param {String} text + * @return {TextButton} + */ + this.setText = function (text) { + _text.setText((text || '').toString()).setCoords(); + + if (settings.dynamicW) { + this.width = _rect.width = _text.width + settings.padding; + } + + if (settings.dynamicH) { + this.height = _rect.height = _text.height + settings.padding; + } + + return this.setCoords(); + }; + + if (settings.text) { + this.setText(settings.text); + } +} + +TextButton.prototype = Object.create(fabric.Group.prototype); +TextButton.prototype.constructor = TextButton; + +module.exports = TextButton; diff --git a/src/js/components/ImageEditor/Util.js b/src/js/components/ImageEditor/Util.js new file mode 100644 index 0000000..aea888f --- /dev/null +++ b/src/js/components/ImageEditor/Util.js @@ -0,0 +1,124 @@ +/* jshint -W097 */ +'use strict'; + +module.exports = { + assertKeyValuePair: function (key, value) { + if (typeof key === 'object') { + return key; + } + + var returnValue = {}; + returnValue[key] = value; + + return returnValue; + }, + + assertBetween: function (value, min, max) { + if (value < min) { + return min; + } + if (value > max) { + return max; + } + return value; + }, + + /** + * @param {Integer} width + * @param {Integer} height + * @return {Object} + * axis: STRING, + * dim: OBJECT( width: NUMBER, height: NUMBER), + * width: NUMBER, + * height: NUMBER, + * ppmm: NUMBER + */ + calcCrop: function (obj, width, height) { + var cropRatio = width / height; + var objRatio = obj.width / obj.height; + + var returnValue = { + image: obj, + axis: objRatio > cropRatio ? 'x' : 'y', + dim: { width: width, height: height }, + width: obj.width, + height: obj.height + }; + + if (objRatio > cropRatio) { + returnValue.width *= cropRatio / objRatio; + } else { + returnValue.height /= cropRatio / objRatio; + } + + // Pixels per milimeter + returnValue.ppmm = returnValue.width / (returnValue.dim.width * 10); + + return returnValue; + }, + + /** + * @param {fabric.Object} obj + * @param {Object} bounds + * @return {fabric.Object} + */ + setPositionInside: function (obj, bounds) { + ['left', 'top'].forEach(function (v) { + if (obj[v] < bounds[v].min) { + obj.set(v, bounds[v].min).setCoords(); + } + + if (obj[v] > bounds[v].max) { + obj.set(v, bounds[v].max).setCoords(); + } + }); + return obj; + }, + + /** + * @param {Object} obj + * @param {Object} properties + */ + setProperties: function (obj, properties) { + for (var o in properties) { + if (properties.hasOwnProperty(o)) { + Object.defineProperty(obj, o, properties[o]); + } + } + }, + + /** + * Toggles the full screen state for passed DOM object + * @param {HTMLElement} elm + */ + toggleFullScreen: function (elm) { + var isFullScreen = + document.fullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement || + document.msFullscreenElement; + + if (isFullScreen) { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } + return; + } + + if(elm.requestFullScreen) { + elm.requestFullScreen(); + } + else if(elm.webkitRequestFullScreen) { + elm.webkitRequestFullScreen(); + } + else if(elm.mozRequestFullScreen) { + elm.mozRequestFullScreen(); + } + } +}; diff --git a/src/js/components/ImageEditor/Viewport.js b/src/js/components/ImageEditor/Viewport.js new file mode 100644 index 0000000..715f2e0 --- /dev/null +++ b/src/js/components/ImageEditor/Viewport.js @@ -0,0 +1,148 @@ +'use strict'; + +var GoreHandler = require('./GoreHandler'); +var RulerHandler = require('./RulerHandler'); +var util = require('./Util'); + +function Viewport(canvas) { + var _beams = []; + var _borderWidth = 2; + var _data = null; + var _rect; + + /** + * Applies viewport to page + */ + function apply() { + canvas.remove(_rect); + + _rect = new fabric.Rect({ + evented: false, + fill: 'transparent', + width: _data.width, + height: _data.height, + stroke: '#fff', + strokeWidth: _borderWidth, + }); + + _rect.width += _borderWidth; + _rect.height += _borderWidth; + _rect.addTo(canvas).center().setCoords(); + + canvas.image + .center() + .drag.enable(calcMinMaxBoundsForRect(_rect.getInsideBoundingRect(), canvas.image)); + canvas.aperture.apply(_data.axis, _rect.getBoundingRect()); + + drawBeams(); + canvas.dragbars.apply(); + + // Apertures sometimes overlaps the viewports bounding rect. + // Solve this by bringing it to the front after apertures are applied. + _rect.bringToFront(); + } + + + /** + * Render the diagonal lines from viewport to edge of the canvas + */ + function drawBeams() { + _beams.forEach(function (o) { + canvas.remove(o); + }); + + _beams = []; + + // TOP LEFT + _beams.push(new fabric.Line( + [_rect.left, _rect.top, _rect.left - _rect.top, -1], { + stroke: '#fff', + strokeWidth: 2, + } + )); + + // TOP RIGHT + _beams.push(_beams[0].clone().set({ flipX: true, left: _rect.left + _rect.width })); + // BOTTOM RIGHT + _beams.push(_beams[1].clone().set({ flipY: true, top: _rect.top + _rect.height })); + // BOTTOM LEFT + _beams.push(_beams[0].clone().set({ flipY: true, top: _rect.top + _rect.height })); + + _beams.forEach(function (o) { + canvas.add(o); + o.bringToFront(); + }); + } + + /** + * Gets an object with min / max values for each axis, based on the bounds + * of passed fabric.Rect + * @param {fabric.Rect} rect + * @return {Object} + */ + function calcMinMaxBoundsForRect(rect, img) { + return { + left: { + min: rect.left + rect.width - img.width, + max: rect.left + }, + top: { + min: rect.top + rect.height - img.height, + max: rect.top + } + }; + } + + this.canvas = canvas; + + this.getBounds = function () { + return _rect.getInsideBoundingRect(); + }; + + /** + * @return {Viewport} + */ + this.reset = function () { + if (_data) { + return this.set(_data.dim.width, _data.dim.height); + } + return this; + }; + + /** + * @param {Number} width + * @param {Number} height + * @return {Viewport} + */ + this.set = function (width, height) { + _data = util.calcCrop(canvas.image, width, height); + apply(); + this.gores.reset(); + this.rulers.reset(); + canvas.aperture.setTransparent(true); + canvas.image.__moved = false; + canvas.topMenu.bringToFront(); + }; + + util.setProperties(this, { + data: { + get: function () { + return _data; + } + }, + gores: { + get: function () { + return this.__goreHandler || + (this.__goreHandler = new GoreHandler(this)); + } + }, + rulers: { + get: function () { + return this.__rulerHandler || + (this.__rulerHandler = new RulerHandler(this)); + } + } + }); +} + +module.exports = Viewport; diff --git a/src/js/components/ImageEditor/fabric.ext/ObjectDefaults.js b/src/js/components/ImageEditor/fabric.ext/ObjectDefaults.js new file mode 100644 index 0000000..fc62591 --- /dev/null +++ b/src/js/components/ImageEditor/fabric.ext/ObjectDefaults.js @@ -0,0 +1,61 @@ +'use strict'; + +var Draggable = require('../Draggable'); +var ImageTransformationHandler = require('../ImageTransformationHandler'); +var util = require('../Util'); + +$.extend(fabric.Object.prototype, { + cornerSize: 0, + hasBorders: false, + hasControls: false, + padding: 0, + selectable: false, + strokeWidth: 0, + addTo: function (canvas) { + canvas.add(this); + return this; + }, +}); + +util.setProperties(fabric.Image.prototype, { + drag: { + get: function () { + return this.__draggable || (this.__draggable = new Draggable(this)); + } + }, + + transformation: { + get: function () { + return this.__ImageTransformationHandler || + (this.__ImageTransformationHandler = new ImageTransformationHandler(this)); + } + } +}); + +$.extend(fabric.Rect.prototype, { + /** + * Gets the inner bounds of this fabric.Rect + * @return {Object} + */ + getInsideBoundingRect: function () { + var bounds = this.getBoundingRect(); + var returnValue = { + left: bounds.left + this.strokeWidth, + top: bounds.top + this.strokeWidth, + width: bounds.width - this.strokeWidth * 2, + height: bounds.height - this.strokeWidth * 2 + }; + + returnValue.min = { + left: returnValue.left, + top: returnValue.top + }; + + returnValue.max = { + left: returnValue.left + returnValue.width, + top: returnValue.top + returnValue.height + }; + + return returnValue; + } +}); diff --git a/src/js/components/ImageEditor/settings/TopMenu.js b/src/js/components/ImageEditor/settings/TopMenu.js new file mode 100644 index 0000000..a9886e3 --- /dev/null +++ b/src/js/components/ImageEditor/settings/TopMenu.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = { + activeBackground: '#000', + background: '#444', + fontSize: 14, + height: 30, + padding: 20 +}; diff --git a/src/js/main.js b/src/js/main.js new file mode 100644 index 0000000..32655ca --- /dev/null +++ b/src/js/main.js @@ -0,0 +1,7 @@ +(function () { + 'use strict'; + + require('./components/ImageEditor/fabric.ext/ObjectDefaults'); + //require('./components/ImageEditor/fabric.ext/BaseEventHandlers'); + require('./components/ImageEditor/ImageEditor'); +}());