From c37654fb47dd749c5b064e610f0170017027666b Mon Sep 17 00:00:00 2001 From: Mathias Markl Date: Fri, 13 Oct 2017 12:40:07 +0200 Subject: [PATCH] MuK Web Client --- .travis.yml | 84 +++++++++-------- README.md | 18 +--- LICENSE => muk_web_client/LICENSE | 0 muk_web_client/README.md | 24 +++++ muk_web_client/__init__.py | 20 ++++ muk_web_client/__manifest__.py | 61 ++++++++++++ muk_web_client/static/description/banner.png | Bin 0 -> 35894 bytes muk_web_client/static/description/icon.png | Bin 0 -> 5292 bytes muk_web_client/static/description/index.html | 55 +++++++++++ muk_web_client/static/description/logo.png | Bin 0 -> 38064 bytes .../static/src/js/client_channels.js | 87 ++++++++++++++++++ muk_web_client/template/assets.xml | 26 ++++++ 12 files changed, 317 insertions(+), 58 deletions(-) rename LICENSE => muk_web_client/LICENSE (100%) create mode 100644 muk_web_client/README.md create mode 100644 muk_web_client/__init__.py create mode 100644 muk_web_client/__manifest__.py create mode 100644 muk_web_client/static/description/banner.png create mode 100644 muk_web_client/static/description/icon.png create mode 100644 muk_web_client/static/description/index.html create mode 100644 muk_web_client/static/description/logo.png create mode 100644 muk_web_client/static/src/js/client_channels.js create mode 100644 muk_web_client/template/assets.xml diff --git a/.travis.yml b/.travis.yml index 79894f1..ae46418 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,43 +1,41 @@ -language: python - -python: - - "2.7" - -notifications: - email: false - -sudo: false -cache: pip - -addons: - apt: - packages: - - expect-dev - - python-lxml - -env: - global: - - VERSION="10.0" TESTS="0" LINT_CHECK="0" TRANSIFEX="0" - - matrix: - - TESTS="1" ODOO_REPO="odoo/odoo" - -virtualenv: - system_site_packages: true - - - -install: - - pip install requests - - pip install cachetools - - pip install pdfconv - - pip install anybox.testing.openerp - - git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools - - export PATH=${HOME}/maintainer-quality-tools/travis:${PATH} - - travis_install_nightly - -script: - - travis_run_tests - -after_success: - - travis_after_tests_success +language: python + +python: + - "2.7" + +notifications: + email: false + +sudo: false +cache: pip + +addons: + apt: + packages: + - expect-dev + - python-lxml + +env: + global: + - VERSION="10.0" TESTS="0" LINT_CHECK="0" TRANSIFEX="0" + + matrix: + - TESTS="1" ODOO_REPO="odoo/odoo" + +virtualenv: + system_site_packages: true + +install: + - pip install requests + - pip install cachetools + - pip install pdfconv + - pip install anybox.testing.openerp + - git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools + - export PATH=${HOME}/maintainer-quality-tools/travis:${PATH} + - travis_install_nightly + +script: + - travis_run_tests + +after_success: + - travis_after_tests_success diff --git a/README.md b/README.md index 8a5d5f8..f8b96c7 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,10 @@ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) -[![Build Status](https://travis-ci.org/muk-it/muk_web.svg?branch=10.0)](https://travis-ci.org/muk-it/muk_web) -[![codecov](https://codecov.io/gh/muk-it/muk_web/branch/10.0/graph/badge.svg)](https://codecov.io/gh/muk-it/muk_web) +[![Build Status](https://travis-ci.org/muk-it/muk_web.svg?branch=11.0)](https://travis-ci.org/muk-it/muk_web) +[![codecov](https://codecov.io/gh/muk-it/muk_web/branch/11.0/graph/badge.svg)](https://codecov.io/gh/muk-it/muk_web) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/eff47569926c435d98a3187623615bc4)](https://www.codacy.com/app/keshrath/muk_web?utm_source=github.com&utm_medium=referral&utm_content=muk-it/muk_web&utm_campaign=Badge_Grade) # MuK Odoo Web Modules addon | version | summary --- | --- | --- -[muk_web_export_attachment](muk_web_export_attachment/) | 10.0 | Export Odoo Attachments to PDF -[muk_web_glyphicons](muk_web_glyphicons/) | 10.0 | Bootstrap Glyphicons Support -[muk_web_preview](muk_web_preview/) | 10.0 | File Preview Dialog -[muk_web_preview_attachment](muk_web_preview_attachment/) | 10.0 | Attachment Preview Dialog -[muk_web_preview_audio](muk_web_preview_audio/) | 10.0 | Audio Preview -[muk_web_preview_csv](muk_web_preview_csv/) | 10.0 | CSV Preview -[muk_web_preview_image](muk_web_preview_image/) | 10.0 | Image Preview -[muk_web_preview_mail](muk_web_preview_mail/) | 10.0 | Mail Preview -[muk_web_preview_markdown](muk_web_preview_markdown/) | 10.0 | Markdown Preview -[muk_web_preview_msoffice](muk_web_preview_msoffice/) | 10.0 | MS Office Preview -[muk_web_preview_text](muk_web_preview_text/) | 10.0 | Text Preview -[muk_web_preview_vector](muk_web_preview_vector/) | 10.0 | Vector Preview -[muk_web_preview_video](muk_web_preview_video/) | 10.0 | Video Preview +[muk_web_client](muk_web_client/) | 11.0 | Odoo Web Client Extension diff --git a/LICENSE b/muk_web_client/LICENSE similarity index 100% rename from LICENSE rename to muk_web_client/LICENSE diff --git a/muk_web_client/README.md b/muk_web_client/README.md new file mode 100644 index 0000000..da8c4a4 --- /dev/null +++ b/muk_web_client/README.md @@ -0,0 +1,24 @@ +# MuK Web Client + +Extends the Odoo web client to include +bus channels. Channels can be created to listen to Odoo bus +notifications. To add a channel listener to the client just +extend the web client and declare a new bus channel. + +### Example + +```javascript +var WebClient = require('web.WebClient'); +var session = require('web.session'); + +WebClient.include({ + show_application: function() { + var channel = session.db + '_mychannel'; + this.bus_declare_channel(channel, this.doSomething); + return this._super(); + }, + doSomething: function(message) { + ... + } +}); +``` \ No newline at end of file diff --git a/muk_web_client/__init__.py b/muk_web_client/__init__.py new file mode 100644 index 0000000..48ccf85 --- /dev/null +++ b/muk_web_client/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +################################################################################### +# +# Copyright (C) 2017 MuK IT GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### diff --git a/muk_web_client/__manifest__.py b/muk_web_client/__manifest__.py new file mode 100644 index 0000000..0c9ccee --- /dev/null +++ b/muk_web_client/__manifest__.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +################################################################################### +# +# Copyright (C) 2017 MuK IT GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +{ + "name": "MuK Web Client", + "summary": """Odoo Web Client Extension""", + "description": """ + Extends the Odoo web client to include + bus channels. Channels can be created to listen to Odoo bus + notifications. To add a channel listener to the client just + extend the web client and declare a new bus channel. + """, + "version": "11.0.1.0.0", + "category": "Extra Tools", + "license": "AGPL-3", + "website": "http://www.mukit.at", + "author": "MuK IT", + "contributors": [ + "Mathias Markl ", + ], + "depends": [ + "web", + "bus", + ], + "data": [ + "template/assets.xml", + ], + "demo": [ + ], + "qweb": [ + "static/src/xml/*.xml", + ], + "images": [ + 'static/description/banner.png' + ], + "external_dependencies": { + "python": [], + "bin": [], + }, + "application": False, + "installable": True, + +} \ No newline at end of file diff --git a/muk_web_client/static/description/banner.png b/muk_web_client/static/description/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ffbb4a77bc0a2b1ae60086a45ad05205f2766a GIT binary patch literal 35894 zcmeGEWmJ`0_Xi9M0)mt@NJ)2xbV#=%-3^kP2C0oA-5r|}>5>LX>F(}Ex*OrS_BluH z|GDq?>-*su;~C=`4u{uXYt1!#{^q<4daEdf`uyedCr_TB%1DbVKY8*L^yCRlEg}N& zFK~nKG*6zqdLkn(s^X@%m-;LgTNUfe;if5)+#qkDw4{ir2!;%O;Hyt2DxYMdA&!xu zaH2?`@I~Ii!NG~Yb-<*gcpe=GiT@t-pt5$v(sw5Bs-(12=QT*8cJZa4bkSg`_;LrH zi?n%}$pi;tMzWUem$lrM4fy8+e1Z$p@o>`Me?6h5%V~^>Pv2pz zOoNtd>06mgRa(DM5jv9{+}@nJ37At?CVoE>6~+iTxg`H~Go+tQ|6F)?7BQrT=HMD{BN{<%m>R@Zxjg!Q}1EL_MH-8rL~ardR4b49kIq2h044pF z?oyv>tHJ?&^QK?VpAg3Un+;c-Fk%Ee7-VrFn-Wu+!qd)*?UQ~r`f6}fJ;>@@PruVF z^Gy}QVW?ru2$w1B%RUy~%7DrRq` zM0kkSCs+fAjb>HZ4-!Z(=uMRx3afbPU?BEyKKq)$p&;?33`g65FWTRZZOLYtC3Uen zPPhbU{#YN8W?nuEHD;lp`dX;eR?zDrA@y~@EWkzx!!y0~c0Wo!1+j;lD_vPUV{z}R z4cc=aZv>hDVl^f!;+H(< zNtwRgFXce%NGdeHrCknXR=uG3mqI{y5@+neZJkdVrJtjX!DT2zV!5slnX=1ITPY7% zq+T|uUq9O9QicE8*i`bowz?`!xmufVt{}hKMEv`6blw^>kM-sanI8-6`QVCk48)J#%u!@68G8YEw5Xr1Y%+EMOT%ZuC&Wt z>%l<~qW}g7s@S}X0LL)KW220GbWzxJQElPvb)&*DuC@q%B1b?_0x65JNvJOVw%Tl6 zQ5nRL(j9YA=zY893&x6K@S$l{Xix7aGa7Jd1S_=Uj=_dW;3TBcq{VO|XQbSX7pTvXYU!EAS}e)pnRA|GSJ329hoApl`26dh+9Y=R zsfl9lG=+_L#*AM)A`eE9a+xxThj(yZg=%T#Z-F|VDjUHno0WB3*|90UXa6?*W||D` zmZ0INE*Ie>Yr)w4XmX=(Zb3{8CiSu{YC+1tmH9`lVc)W=XfZbecb*w+p%NZT5NNHI zjT==gp_A6z7)?u;Ny^7ziz<$79im2{TfV!mka+el576QS`vV?=h&=P0cJ5)l%qBm! zIp&bcBmRsip}1HNxN1taX<>xD{F_I*PX0>&)N$;NSdjpjgD!c}4P)?~cn)JVP z##>1w0bCJ;GUv{GtS263?HVf_qt6iOw3~s=86{U2qvkH(WHY=du{d}DsgP&^RAz0u z98^xMB5pj|8@ZZpbDL*#o5cXjOxO0!Xd)iw8~F5g2$%TZ9&rrm7beIO&v?#H>BLc2 zS1;eM%h61&+<`ljW`auMl}v{e28cXbe7wh4sb%J-XNWj8fJ3aMhp3t<`lQih?OR~r zv_TVE-4R;SnsMd#!z;62Z7p`BJ>Kq)8souVd?YcDYUV|9WHZ29Xa0^zajRn zGToAfGTr|=pE^{h_%AMCf}{anQ^@_>jX^!dAw~xHl*D6D{$HX2H2Mc3Tor!v_kt1< z>;HL2xr_rVs+SZO6a8|mBr=%=#%g(R+qi$Ew1FAOR}(x=}=&Y zdbm$NTo1j6>Zw64|G5DO-PeAt^TUEo`z6_>A2}7AQxq6&Wp% zkRrjn03rP=-R~YL^o#^9iH`7vI_e2htvIlh%5(2g4$FPO&pmnhD#HK@5CJw(j86wV z?#lw*S0d4Z64)0F78}H8P)7I1OM-o%@-B57(E^Cw0(OCL7$HB>EldS4FxNM024H3Z z@UoWYksd}lfQItSY-7q7-+?!<+-FXZe@-k?0$$y)M{8nz`v0$sIN!uD>+;1iX*|A*75_t>;=pX|@o_8^28m(3(?dCvA!0+2jZBEF|!dI~4AfwOy9r{Zo7Waes zy3ZWugS1N_(+(S%V8<^cw@_OJ8^Z#;`vT=%7`O`v?|I$b-BMS?JfJ6p+}0q5DQr4r zgI~j$y+rIw^L363eCa5_B}^q)seQO@=YPG2jfOoK$&M8CaG`Q(?WCTDFyYUfTutfw z2wp`$Oy0b0`9Rg-0wp&i9T1JT*`6pYY(6Y#Ulh<6aW3U1CO5z=c{&~ZE{e-j#2JQSCBr3IXMU$}JIuZ5s3iBa)^Xc`z z8Lcd^V;uJ_G_eKq0dg)u`%9~i62UP=owtY0b_q+N1RSybU+PIPXk|F)knxzEtb7BF zI)XDz`{E;N*Fv_EX_pVo<+39K1%KLfCSzmJSSjwakuOu)#?h-PTjToHT1_#h_wFVC z3^Rsm5SRe4i~fvmHbBojgP?rlVFFSWos+H^yQKhs&?UF*oO}JcOT9MF z%N6WySjEY&CT9D^G8Bx&=k_YtlBHm|w0G454BAl%%(|A<+e8sixssT?Rx&he)6LmDvxBBw;mYTvnDz#Z| zvSBZ|V)xy8Nc9K8;l6_3^GAF*Y-2K#uDsW7=ldKtjzyH9ZP5(7jTd5e^^yUrh0}bF0C;s+_BzPd$w@h-TE*By; zB-$?q(v+C$*ZNo{e94y~rX}m}-aXM&IchXGWS6}RrL>y76>yL&#_Ia=UbR~(CA$&) z!fPcT=~u%*_<+}H-)2G5NCyK+56yv}V|;$(aI*We)Y)qx420-yN2;u~K~sE0SVg0; zTqV+pR#MEY?Xlc?rl%C4#JVwt;%}w>mDq!$qM~|FB4tY)O2*WulK7{-FP4QJP4YjR z12p6c8r_$I;F$pT%^CnbM=M*>zNd(Pr4r&CecfL$n_De7l&VgdSOy0x+R~HiS>8CY zxMq8tLnT>)_OJ6*1|N(hLx6;g2qj1{x!zC~OgciWFC zAQpf&;lx&XL-&c~bE=$gL_{T`|d=~+^9 zz*c)0N6COf#h7%af(B)aY2Xbzxn;ScmeI|liZatFFBI=<%WdA<2t*0q8g=eaH0Y4_j@Ww_+T|ARa48^6~0by`4 z_~oADBEruyLZmA?;EKYiL<7((QY{1dxmuDJjZUFjajZv8v@rRw zcwWA#=|8T0SC2k=1dA;B&fZx&#}?T5djZ(d2~D|oU+(y&zB?_g03p)J1*6@dBE1zj@u?T}KId-307KU3cKteZQG5 zGuFcRQJkt}Hjc;ec?SpkBqZ2+rd+U9(cAu&z9b33`&IhpSZTeg_eKnCansL*vm!#% z@7`5t?nTP~7{HzLavjy%8~(Am!4Y%kNTHrc>C;|HB^NJna_JC1fs-CqZX^s)dkR=# zQdcwu5OA*$U`mmBer8nfzq3>8UzDqF0HflwE|blgsf4L8=oyJ4&T2o8rYlm(kG4d* zTlZSeR_k5uOaDj$ICoDR?cO+s%kIAKjdkl(9zZY-7F_%|KG>Y(e3+i(y^RC1WaDsP z`V^S*lFO3TNM?0!FKSwr?bWsQj@RCG(!81GWwf9I^N+m&s0s-O_yY z*$_~wkk^lu`#qqlTlNBUYcT?b3F=D|z)FZfxf=HI!0&zE`V5w@L`@r;l%`%G%V9pDOsTm+=vuhQ?A__*%K%s z^JwZbX;*XJ$$k1}A8ieplrKyM$E=E$l-vek(ahr5V}s1R3V6_vu2=xwe+VOHq5-lr zr4|}?kWsSM2+}obbAuDV$DV3MWsTP;cR0h=)Ofj92{sGH2pP+S<*GtwJf7}x&&Bj0 z(v0yMBZuK`7PZSbv!E;Pv#N9t<#yfzk(n$h^epDu;&d8#ND&K$+y#AZ@aOWT=yd0p zb7px83W|O9;U7#BY3b3t?<*wGK?G9wsnTigIp8s|C>xoUWN7M3p#D(;)>pp891g+R& zG92PA(zgtuBN#qxbDbD?yp3^b6cp2mt9U0i@y(D-sPl7~N_%pY9ZI24|xZ<2?^ zL$SLM7|2DRc>Yk)O9DL$TE`}Q71ajL>VLKD2!yIs&;|QzAU=D2y9yu?&E8VBt77zj zmzm|_GBm*$)reJCc-b6pR z=qv1PW2k%_%*e;lWTSW53!}lgTJKL{h-mCj(25sRKuM%3-@DF}G9cW@sP;d@_Gja( zS@ix0|3weReBJsRF6kalh<&B^L>wi71(|OPa2%c+TW%MnfitWS-ST(= zBDK%8T3^~Wj*2DAtqjLg%Na^_xP*!VPcvpAu6Kph2>rb(`5nr3p=af9=bEI0DbPSEV}{+^5>{zQvwl6KWeOgmd6`{T2=kZ;yh*lcwAJ*4X5;90p^lYnpC0W(7zeF<^>F=}Mn2TZY& z?AafacxENHE{dyR1OIsoIw~6Gy4Am)UpQ z16>P$YVBWQ%*ri-MD}(^N1MrO^OP^7fqh}=X3yf_U_XO_2#DmX74)#a!e%T7$zpPq z*}^KLoukq90(>F(O{sPm;D=%W4ewD}|fzj+g1U#kqYYWugsGAFZutn_;Ami!=% ztSyPK8_Nq8#?bKGgqn9gGeCjZ@*3)5C5bHH0Rg$gdFr)%z)>}`7IadnW2JMb5RY%% zMegr?9>jXPTiOgM!RCT7_a`P#TQ4#?=^C3stNO&lUEd#^OEGQqc{Yio@za|_T-mA% zGn1&Q5)MOS6;QrC7hjs*qN1?4HBb#Lj{&#xiMOq_Hl(VYgT9t_S?70x|8JRB-vR6h z-sNsv5J@8nJcP{Sd$6}L7w2%_^Ld9+d(HAVdi^wCSO3-AO=w{I`USs7or_DV@4K>{ zUw2<~YYvbcF_g z;U#_*{KTa_99FTfz>x5-%o#`^6=K(b1kx=9tPf;l@^PqX@1hLRn`WzpwY52_Q>jwb zZ9?)IUhLx7Tdt0cxJaAB4h9mFYlu6|VacUUm*ib!V%C2nH$Ew(i>_H}_7SF(vpC~> zcC77}Qlve%W&=aR?YuubQF8cks?t*uS`8tNtw&_7ass*F{Z`s(jEDgy0Q&XUj#*)T zXNPHi0m6LZq2026I4~I4lNiqKeb7ykuiA`#O!?+bpO@}Lp?ZLc=AK|Udn^#FLup*P z@dvAoWwkMw%1v3XtB_APDuSD9PkhJeS543`99s3-6Do@1$Rqu-11+vOuA%f?@Dy}^ z2r1%&TURkz|-$@R)4;J~Xp{LdMhz;S#{H$bTJM`eHl$6S>Ui z=*sry`YqWed~tbcGwC62$sTE0Zt-2@s{U>H78yc}IP!JzamxV}nNAtM5EAW%-@Y$| zztmlA|M~%A?lL?0JUDW4wKyQmMd5$pTun z)|neJZE)D=6&%%RS3i-0tDGjA`ANjl8rY-gY_2+lj51+`036ljot*NYRLnd*s{Ir?cf2)uCcy3 zM5PM=2RI@Ih-|__)_Mbg<7hC=SfFY=D-0w_eafn@6^*nWM$Ebe9LDWIM^5&+H^;@Ap(+?ND;64@{WT3{Ljw-)eE#`+rx2Vhk;nSXwe{tPc?I_md7qP{vj=p`B?2Xto9J zWPaTDUKH3@cvYMMAgL1C7#j>`g39x+=PneuOgen%CLk*wXmy5-K?sG8|9bw7X#u!n z6=3Cm)AOIsiZ2*ghW9-)ckRzBC^j$|!6r!QD+0}nEiiJM|9SO71h@q(?X(k+d-wsJ zA~0OC?LSH)@(LO{+VjTDF~4&I^04YkSp0|OA|e3Q$iI%p+%dmX0_4gvwu54$#cmd5IVL^PR~rfXpp9A7BF!pHo4M+V(J&i%%HbkSj{d7F zW1SyvNL5x-tv^3MQy@wetAplHs-O1$ zsYlU0Kxr(^KH4cPH5wjXaXbAjRO`J)o#tJRedBB!k+x88I8$zVzY$8RmGat7&$G$^ zrutAYG~aQP!uZDN>MrZ}%4t$Q^d(m?`K*+YEX)>#ZwA5R?wf!g;YiP~m+X%udm2v6 z@4ph0V|*Mufu589e$5?aZxSY3F0OUS=V8BO`>FT*c>a6ijo!FgyqCT%3%3;9%!-E5 zOjfv_g2u3Eo+mO8K@aX_-fP$=&w2C%VQv1n7EBN_VDL2tTwcR@d9?B=+^E+i9m${!w1_%t;aFBq-6r{J5e;)?fe}`jz6Od9Z?JweV~VjaIMLf zK6}^o(WL(y8JAhJ#1a%QPjI{v2y^AU{}KhC6`b@c<_&}9zz0%= zuE^u}WiD-I6YtVXRbWz=Vt0vOE)QplQ4b6nh63FTjyGXmkGtP}0yNVufR2(94(RlX zk0>jB)xGqtC2;J^{0V=u*@;IQ)&;)*&E|FEwB#~~Uep)Q1oU{P1A{n(+jjK1R~H*S z3e=v#!)Lm7T}Wf0aavCgqc>EP1OY)Oj7jhxlko)ueX^}Nxr~qJJBeH#+`Ho1$Z54)%j6K z*%8ydZ}P={N^KrMQ6-^jA^=tTJASr6=Q0|Io;(|S_UxH)n?I^XqdQHLMx}T~CK=gJ z3*~0!+1GY{3Hsgy{4RUL^9iVjSdm}ZPB#a{l0!8|T-$kc>g~m_UiP$36l3d>Gg%gd8M}+l5#|oI0!XJacvKZ9rXz^v_ql#lFBtu0ecB+o_4u95u{Jl~TFj$03 z##VHB+l`ruS=xB$ncesN&Wxjxu-cMnIt2qm0UHeGH6$)^L|dV}rJZ2wLJnl*s*&0D!lk%9g2?rw%kO9QKR;SzIQXGK9k;NdG?B-VIrFg zezn~V&O*JbtGfVNMk;WEi<-5};|b=_6BrBt9I30c`965?slV}l>5gmocGZs^4kcsh z2t|t%N#i2@W<5LCzM6#K7`b@HpP6g9tVW|w?HwIStBw~%nn&B;-sR~Z;@sWWmlc1{ z!N)ZC3;+lkE!)ihIBhsgz|xn3T!OLbjymx4Uy*TQdP#-9cCOD-skEM2MIFyqBRJok z>bn1Z>(yn?qK%1x;Ts`*k3VyYE3)O?_5zR8E?MHIsHnwQ1Dl>t9fCOI0T?vM2^;Vo z2QpE6=f_O%uZfgHzv>TTIlpErUTe7?glX5z$!OgeG_=_+Hf&ed-5D+eR%vt; znfYtj9Pxt0VJX#Srre~n0bRI-!FktUsmbde+*xV^oU(f~;`XRrQ294B3n^#Ie$lKj zqf3yyB;tGNda&qR_|DzItZV$;=c9?OQ#PkxZ)*m#x!r;=sg4Hu4-F;?RC{MCJT4F1 z=fi>98g|lfu-SIzPS@Jx&TaXWI&-KnzDJoz^ATG9Qc-UR)Y>VmT|oWtx92~C&hC_E z`mov$By+Ldj@9MOP`#9#?cGE6j3gL`P8qJ=^|13>k|Wz~h@HTy&yUIx4Ni}jn?tFe zeV;!2*so6EdDn;z)LK%J7mv{)4{EvxtC2eaedCzp!7(K8nL)k8Vmqf^VX{cG z3_xD78Prfpi)zDhXb#B9dcu2NJ^3>F#puI6XLl%}#dsdZWRZP(qHeV{LF;=7hOI?` zICuHy#cSG3Zz=6u#`E5Zy_Rzs21c+H|7xoLk&+lx0g;nUnmUyre&N6USBBPT8jJ!1 zYsm!pDZEr_mB-ur*)P8!<4Fdf5g%Dr)Ev#|U$R=Nqu91DsN4RuuZdcn7n<+6xNQmzO-#O(JD2_34Z}Hhxm%|zWgSZ6;t(Qu z4a;Hf>4$_x?It1qvBMr+5y(+Qry;?Q5e1rB3H0%ATRY&*6~TubwGS)=%GBU1 zAyY{m+Bw)7hgjv!SZkfhJcBb@;xB6M2de<;s#dL+97X4`Up2+*-mAiCI|Xn4Ab1!Z zQQ{IGGV!eG0Zs4YHr3uj{nW(Dv@ijn-pojkCI+oIPCYFomgONl7#+Q_VpF~ppx^$N za@V;^3Am@Zp&gZUq(&#}J^mTeTm#Q>=ncA$qG}Tg;i&Jt371H3A6$Bl3Ui}2OV0y^ z8eWP9JqWwHu+VB?fD+_5TNY5RN&9u#wDE6*lQ7{|m5isCMKv1S*o=&fP-fJC!7j#| z3w{(L4kWAB)@+>qGpPudzx>*@Uk{g?BEN?#n7OzJBzPKYc;AKUZT!2ut0oY~)5Bu$uU;Xyarv_1uAG zA&TOlUV2_2ny6i)i{B%to1NFA zt?+X7OYp|qLNx`Q2Dgy|aR(+aV$GyoW7t!}>!ahJ{L>)rgP*)L*bgLc&NAZy`Reh0 zA|WtSqd)IVmHz_T2;vLuIsaxP26}O1lJl06fhZ_B%KT`dCL}hbdtz`eTQT(|FmES0 zspB43T%caM1VZP;lSD;E?MU=(w7)pavY0AKMW!gTQiehU=#PZ~bcAzDpi=q3YiB&a z*6WtrcHu`hr0s|MY0k-#%tPg+>!{kSZoLaCJTh*3&60OW$x|t#u?t;v8>-6YeAW*! z9_Tg#vB;%%^PDau{YhOID=YZI-_Xmy$z_@NN2l>4qoPWr3AleZ+K7-&;2?cj`os6! z+&C(a2c(qGoMii;{7vxa>8ArKo)p=!Av;rs@Kc;wG9lBOhhE4NRYyNV+bYi5-$QJi zUTdh?FQj$m+b-+Q_vi2yJkH(>NEQQi9G8OQwhi{nm!D$ay;H1*r`yon6L$D{*+6GJ z{9V+GNXT<~TjSzo;E@_R=rGNJ*e{n^{IyBZGro5%?oZfrA4`|NMzFW$H#TZzVyI>9 zBhI!Z#B1-nL#m6*SAQQKBEQn-p&eU{DY{AOw#k94NC^>wbi>-fFN4@jE=*GCHtJXm1q%CU{3NN^*md$%d!% zEY=!sM$Nq#gsL;7PjH;iPA9BDfa~WPk}Yyeo;m&9i7ZDx>631~IQ~;*dxu{~QNK7G z8s-KGf)l;!w|6b(8rZC1cbdX~u;kp2sr33hJa}w0A9&!MEnSL&O;*L7s3`CB&t^Lt zgyU`cACN^ogdc$7_ieMcmrmoyi8K7GF)-jOu$g9M|M-dwXsgvlr@TW!{EZGdtNXSj zq|rgl9VY>A`F+o*E4paGv>-U|8 zche(*;o)irZ?#XASQl@u`Ir~3eI!{=?l4TWh0(~$*uFAXJ>?o^XA^k-ptb`}B+9mV ziKzU`MCFT$TjARmLbrPyo~Hw^HR>FwKBAI_WDDP$7~tCITB;R?%Cy~x`9b2h6m=TN zo3Jns$rPKOy&y~nw|fN1BAnXpc^y-eGc&I=u{JRXE6F!3T{H_FBLxM@1*(fT-ZePg z?{!C!Y0VsH<;W9kSQ}&r1GC&su)l==NmMlw0ghcP`}_HcRBr%Y4}I#e-FOE*#r{q| zzu;G$l%Ju7G^8eVzpE$_6ribUF+P}=+~&jky6zEuB|;5db>MrgirGFQ$nv$_(z-&!-pm> zi{T8IaFX-Xf}D~PLG>GG^CSY=Jo&r2^MvBOO-J2*9z$t@Y@SyjNV5wvDf3)lMMB9g zVY}aCCQ#yO@6rkA^1N0no&ztobuF9qGhs=3yCGtP4yiFlkhS?|-AyIfZ#FZstrC(fd$_D6KB^Y;K(b;0yy~(v$d6Rg$@=Q98 zp3AIs(U&PeDREG@56luvANaZ;w)NWQK@^zO{_eP?$g}|a6%}4b#4kzl50VOP!i|w$ zc6Uo}klW5EyYHpNCKnIREe(rUb@_s#WgOZd6O7ps!ow=eGog0SKsTi{g@dU*>Q6#d8bar z9D~A+3clcXJd4$G6dftQ(+r>eu5mj-u^i+AMoM(Xzhb*!f22H4#x zgiE%w0UP}2^|#&Wx!p53uyaa{(JW+$ zv>-8WLCaAa;n}lHvk7|q>8j5THH&s0=!yJ4eX=BSWy12a5Z1P7Lm$@Dv+EYK8V2UkJvU2SUI(8 z>VlNw*6l-*)YjziJYdHp(SLTM=Q0S@XIV(+pllzDKBVO-XA*fY_zoBe@qY4UjY&IBffI3VzJJ!ZsSL1 zDt-=+0krmx6vv<{lHIiKICx$C;-bJ>*N<&L-2L;6Yd2$X^+QFbTbOPfzH(Ng&$diuD@HWiDsHyt=F{Kwzn zUv(k}h6jrrE;gF(a&)9THNXau=zoPoJ|@`jfdspsOgHZ>ndklW7Oi>-(d53MKa2Ow zzC8v_2U9^Dqo0|o+!|0843`ZV++APFI1rfJ z>qBlY1^g8fcjBKz0Nmi${oepsSaf~*L>4TN9 zCVp69YjmX;F=krQ(JW;8c!tkYb52g$6H-;b02mVkr#D`*F@E3v_2gY> zBFGb{T%9b(FwI$(S`zK1)_Mo#Hkok4D6*A^zZ{gRiH4(mV0BoR{tME3jk-s>%qe1o z^(e^)XnR#}o}8Q9e1n!q1H6$(QbLbx%lnpg35R(P8pHIl*s#Np1?7YUF zDoOFt*ADJRlqcbp&X=CC8J0d3;lr2lQ>~cV5oHG#^Pjg|haA*NH|p*0;Ez^tV7>^Y z>*HQI`f#aI?UZO5su%=(FWb7t%dv8Ez6*RyfB=91n;3)lLP-BVYF!RHd(W$t09vgd zjGc-pLGJH6$&LNbG@8~}acySJ7b#y#$zovS%wwoCD&g+USD-5_?eE0*D|DW1vpSEz z+7tG~Zlh5gvq(KQbGA}z`vuc@WR{>e{lh9k+cTP1@@(JVL-Z&9$%Yb-$IK~SRjxu3 z>|vu0%oj(KR`n$&vDHR#xP>s$3bTRv)r#Z5D>Eekun9#j20D^|XH~4efTbe6fEh2+ z#F9&35-SWBEHfU`i=}&q@?H{6+{uYkNWX@#c~97EP@GRP3iDQwP#}Pum&16ZJPx1F z@cF?!Tl1UE7^)D%n?%DzR%7lay>i$fTl!M{S_7d_;_+t{%~vnwyzgY5A?+*lB{2IQ zi`|fk-8dyyeSB6;B$U}$A;XkK-a35qrM%a4VfVF-SgB!FT>bB+D+}0+nX8qp2#%q1)^b?65GVANG2=CcxWjU0;-WPQ${UCy&9fAb_r^ryzr zE=keSmODlQFCWgw*PdwkQfhA?Nhp^q(D@wirbS=a^tQn)C&07St$-*DMxfw79eOTCOFfaPW?1*ia$ z@5O033p=p5dm&9oS9v`0iwqGtqNPjNwrwygS2z9b7UIaeDE!3+>QQkC10eWnT>VB5 zbZz5$#zZ(FwZ&chHdm7na=oRWs#fq?DUMyXPFy>!rv5_0v*FtH`^G?A07WqOpILyX z95kWgK#${iVe_{}^};Ev413N%8bcVKERHfW<>9m|;-G%R*^|(~+Pavo)giIl;T#3R z_8*yUAs<9fPeg#WG1`;dM>q*Y3b=!*X|*B^47qq_i3qZ+GW**SDTElyFcx(m660s* zY6bX%I#tBa6q9LeE4B0~)y*1imEqy2+Or;>VSRVlXVI#+v`rwFp#11+9q{S;B;);3 zrtD^SXfA*Oeid14_%&{aXgeRuX51anDV@aroTDp3q)wUY`^Ba3@wtCvEis|_jX*d; zEW@j0Ri@7cRL_^YM~vNkmO*!>Th9Z}K4h_3-65VG%n&oE6&>Y;-E$JaLxd$lsvkYt zFQAK_i##P3X1co`O(h39=tV^#66{$K;VM+?3}}1yik23RqFFCQcuE(=&vRd&^-U!ih;5#0lwWMoYD{oFinx#7+9ipK4(nS9c3 zg4NYf(+a)36BNqZ$-~b`)0O)pdpXp`5YC$nAM}PBBUB~MVa@(HC(xBcoaOW&URZS3p7}cEb5E~RYjz(mBGn1^3_kNG zN5{KdPYkN3>TBom$<|YIv`T|}8uuI44Z;RIlXvAZcCH&FjpX*&gbQM%8bHjL_)!6UI=SNK@w8d;)TN6NI(xQOXsBVF!DlP z9{}1}?N0FT8tjofmC}n-N-F|oxzF}$`1?5ZPprq2Rb%4upJ_S>I*o%jTfQ%?^-^d2+E=hCJpJrhvD+!Qi%;#io$- z0wdTtw^Z%Ec0zvjPN}?nfPiQr1CtmY2 z3v@e3ywJq6^Wr7uCl{tAk!#l3-CvRX7;C{kAbndzk^l;W6W}4vLQX~PYaqbKNx-d)Lx-@>* za_xn<{b#%*5)6f`y{sr4H~TeeyalNT?}&C^@Af59rpi2bg0^{B8jpzXg?w{g>qhMC=ti19Zxy0wU$lbbrJ)sEm-~zs|$cs<8|LKx=o0>#H+h;7W*?<8L4ePcl5f%-A;NSha7N#= z*jh7`<2tP>_8lFo`}(VHQ{dxKlK^W&`Fl!g>ebflzDV}#(&~@Tr0)4_f0R(o>x0L?i~G>4Op&1Bw$QK!5W6oogZ!=zUlVcr+lQlVPF zlOkl`tq6n1nwgXJ58*G|fJC&is{ue-64{;UUp7o&a%Km2Mf z@p_d>s+v*uUEI+T$g}=~u-cx0wd~y)N;HQt=M863aNw|kd?K3^M!%WB_SY;nul^T| z+ILIKnAO7RO%nz5gq{)ZbEkZ3O`rOQ-MlQ-kuGGzn_ro|+`a2c z*49LlifQ32xJ)B#U#oN69k<%0vI1V|AIx8Q@4_%HxV+Vt!qV<>nIJ(;lK_gXqnvPI&}nS>a;&wRR$n$1un^fZTn*HTIz_|X#Rs_;R0&0wN51mxIiM4fmG53 zgb2St)QWTfAe%mGd()l1dqL7RU&Zf?R|T5LS#>Y}`hLM2bU8@eFy{EA`fzb~Co0@?t;y`}g5z!Z9Hg&AQc?UXr04UQLma28>s3?6NovpNM@Rt+AxsDMA4iFhHht zY&gdk*~+%Ws2k*+)ycnW^lM95l|y?rHVLty~&t}5Pk>__X=!_1juNub^QnVDjbUbB&UOBMQKwp*!_GIPL@ulNZGqn(M1XG^gK=#h{||>@ z2_QDIl~jHhTkRtCX+JqnIi6T0bt>Z;t$lmnpmDrmEn(q#-bYfjxG(h6Vn_(Xeh9ZO z;&ov{Tb&O}hH5SekIQN-hPujaU?Aaq1;@)N4}z|Hp`cCTA8U6Vayf%!pTqX%P)jHB z!zj#|jYgxxYMozCp79c)(lQ2c=KBh0jv5}`i&@<0sn0uCpmL=bh63sC@^)@|XPTgg zz)mTPf+WnA+(-t~V>HhJz!1k!N1*n~JM(m|++AE!IS5B!P|kZI^imL;x5B)mA>DN) zp|R`5;m`gk>vJoWY|4TJdOs$9*R{sQ&!9E4(ENMz0fS^4=ff;a(Mup~yEmi{fuR?Dd*$nN_sVMOKTh1aCA}(2B z|E#WiNkI9@H!qlSfA`xSDW4bM&lgk3#?pqr&+T7;wW=;Yz>k0(Bv#?2e)LL8&<|xv z{Y!M~zuxcKW#|sU*b3LITab+d(-faQoZh^(;K}*@o#2_`{qBf!44Z=NnO7tI*DP|@ zhusc*E_Z*attpPA?=MGc2v;$Ek(TUQ^tbwj)wlZ7J}TjL^lgMJFP(0UlxPbR2_9Vc zwRTAM*!F7HhL|g5Dx`1+1|9F=Dw{**e>(#CBi8@Z-djdh*>(TI?Cqwd1qA610cntw zltx0NrKS4@q&6ZUNDD}pl$3yU3ew%(-62 zYiN~&LO;46(HeuOoIQC@Q$Ab0l$h8%J>KcbdgFmMpq!t42?=e@9}xidE!pG!z!5Ea zs@n)h<=dU7#AO@rjp*wV&Vx{}+LY$HC4*OcicNcnl@|9efSuICf?)hdA=-iPLS;aQ zX?r+C-}{=oSEstrIAPJlxa)P7)Gx|Yj~NAURE~E+3Ck=NZLR(N>6W_G^o+p6r(S3= zg<4yMw7KrnkxGK02jZ7h8ll^tZ;xzWRh+Vg*>L0g=EX3;P5Yu-&w~jEJog#GQsUHn zU*5LFzq!~9&bbleP89LhV&4a7qyrAqaiU0jB-o`HwehZYvmJ>KIPM zUv7zyH-^bYU`%vru~WU_Ix*O2DLXATf!At zGl)LWUR`6bx9aaY2>2Kv=voAJezevWnc4N^Cdy6t7p_gI@_W_2(4GFpUl)~j*93HI zQ#rd?j2nEG$$wCq*V=O$@pSP-xqChFxfxa^EO!UpR*Sj zb(DO$oLn(@UYg-JBU|aT!h{r-^ih4w>lZOr*#~kEN>v4yv|;WUoFA?To23Zc2W>Hs z)kFWSIKcyOVK;yhR80Zk+_HflJ79Lk_w#a`h;7Oc6=b;P$&wB(nAsNlN(tF_YxM2A zeA8(`9M-v$@Y!`x%R%2cdd}=O+TH28t%I`1l27X|TycX4Sl=rkE4}WGCk;HZ>n{1C zP+&Z(BITd4*M9KoyH#eNY31ffVW{aZiwviYL1D{`xZpr&uY5eozsNTm0D~E+x>qqsS{3E?D}4+OIT+GBkYG!ark&F_x|woDkM~ z&S}LDgPhwq!d1C79_YmrdUoa-R!FF%1XREIV&b2@DefZ7e^ze8`}>ti1YNPk>3SQ> z=T2Nd)-mHrO1w96x=jwhtp5YVb>l!Vphuv%@P2Ndt?L_<$zcz)74ohRzY@yRbi;1Q zI=07uYWv1oFiky|_PFLOY?&S~smTi|{i5J!^DB=+b(2Bx`*LuEQfRQ@CtjG* z?DD`}X5nR#-cAI69XAMCRkSKpf|7>GXX@2aw?cn@krgG`W&L@L3%Jr#lOlZbkscM-dT&B1-t(AL&789$JS#H!$ zmbV1Gx>Y_4=wpli0i3o(gI^@VF4V(mpVHP}8{l7fKlwr3G?MR)GRb56G1BjF9wfg` z;?VL;&tsfO{x{c`q90KQ)Tgn#pIFsS=VOE>?eEsT!wS01Ddn<4JduKmW6-?=LR}K86A-fp>jk z#Cw^q^MNh4u!)1bdQ5)LF#NJFD~u?p3GvXNqx{~h+7$#`yuA(5R=Z0QqQO+}3=3KI zFp!Zk1m&GsdiE4kbo#*c1|}coVz|V<-o?%5GEq9hOWiCskZVKxpeqV-i`P~>VAdDJ zOdYjfVj#CEwlU#%E=1W=D`(2$Tg}!^bfh zSE-leGq1_x60@FyJ5I+LWQ*+VuzXC9hqNa%=pki<8Pkv5R?EgxPH4Q4m{XQES# z(RXXtpj&$14y~~N!tAd58O92m8AG^<8#b^X1PCiPI>#nv*G0sxp^$F1}0cuBvp>9cd=@NgVB5bZ5)H_lCBSl zH5fmDh}P@1WY2Z><9jI$hGJnUBVW~ieoIbzv2(swY&$0`r0ZGFf|%GB5Quca2}yV( zcVX5E!nS!YS=2yKE^>9v$P1CG)1Mny z341_GHTL$`W0b4D)!Ij^bgpSf;zkwElio7#}7Bt}hgfnVic{rO47oI$By}#{ODe-#s>(032c7B^Y1_o;D zqrR9XbXs(#Da;y75}zYNHuGc=P<{Q7GlwvlQJYZg;Gm@9;g6LlPf$KHw+lr)<2 zD(#&^{tq-ze21U@oZQ1-bTB^wh4(xtI9PRiYqE@)%=^kdr8wH(HLNj$TKb90u8y3I z^&y!$=(~4<3X6nq4d>!bx~#u{%QBUqwK^L+_A*05uL*8LitWftHWXv~W1uv73W;G1 z?R(xYF4>hnf7_UXpN#`}IOIjF@gOTUuu!o2W-cA|rpiIQYHLTUn>1`8TKticQ1T<& zF@~@NUYpb|_`-OJV@2EQ>8J!KNcqg=fncL290oWzf3h<*%hB@Pjd5OHyu$~YB&u>i zKu%s%o7mRcy0|-2!=PD011xJVr>#%@^P406(awC$()~8_(VY8j-y-2`cqk7b8eg8{ zJl3qfpONM9j17zQR|Q(Eve(r#dt6qtVHcSdJIqn zt-sPm`z|Ir|Iuj4i+ii*8xUbw(f%5 zbz^HC$+YOE3J*gIb*mZtTCT3s;76w@gI*~V;X1W4qYCd6)F?mgpmCaZi^g-Ado;Zy zUU&op`y)cJgwN)m`H%AEr{mMS7J~Xv%!5$TH-jaq2W)!NZz1xF5m&crC5)j=Jo>d{ zzNo>x^T)K-Q$#%oF-#mJ*N-&BPmX(UMZ9@g$&4DV5xrfXs4@u0v?t*2)vG~3Z``k} zb5-tRhjCLPp;tbKD_!T;x9)fS9+n+G!s#iXz2zo@G0ssB>O6$5kB8Pl^Q1;jD!4Ri zcN`~j0A`g}81@7Rm*?Q2z#y?toh{VfrV$JpcbaZwVv`a0`#W1?DE3%jUJKsrnXFjF z1@bEi`IVRf>)uDjA*klu$;@lJv_xL9INx!U%pn(-{VF-%6=b%JpOa=jEwai?{M9lR zSnL{6Ff~>ovZF=_(8shF#LqS6< z8k)Exp-`^4GL5H&%H{V#PGn7bpw`yn%^Q@%wT^FQ-AC|H*b*7m5VufE%pdrdpTPQPP*0S#3VKxquI!%6Q19x=&# z;5tec%A1q&2s!TR>(uO49l7>yk6s*gl&%`=`1fcfP@jw{B=XlHquLk8U!GZrgWV$` z_jeA_p)#emRI?J_KG;QdQAxJT+|{5thj-PG3f? zxP4%A1OHE2OOyTi9}=K?X9k^Kssw^emH=7wRpS{JN2tMOp`8q6A}G41Ed*gs|K$+ z@c^2s$vh3VTl@H!NH{qz3Jrvi1oxd)ShPeCS12cI`4c)qyAK~uzpb5V{%k=WRSeGw zeDa_>8N%4qY+wr0S)vHv`F4~)ZM3zj0{;J>-rT=_!g#fH6y@R?83aOX&j3O zwn?(RiQm(OmhVJS4bxoG#qlPU% z9buPnp>ZXRqYKDQT)Ca3N5&1g$0!EHeQHm@xV*VRt}xo0L(cp40R=-cdhuNOrdX#v zj#8^w+VE)0XKDQH*%ycF#*itOGEB1%e?-b8&TMcuLwB3zr0sU}w{%`9Ld-sxDA3nF zYdk4QKHg3Uyc-5f^kHe8`{`3|rCzxSGPm=!C3je)ZS;3k-l-&Ss?inqsp{~%;V41Y z+>5g$N2vf{P)v_4eWNLn<)Am147w|pv6^)!v%Exz4qAOy?qvR{Ggruda zYYfMcw|7_9w$Q_Y<}#MW(?U?4kI+Koywc$%D-SE#TH$n~t#|T|!5w5uqCrtl9UMD* z7n`N+1);#2ty@A@5m$|EuW zd;6W(a4;IADsQU7ORZFXu$yIl&(ZrD?$DNyXeMydN1Mp!jR+7h9;lzNlWFg`rB7Ft zN|(wN>y(`Lb2OE*v%|KT`Jn!D5iGj}&|qAa=Se>~*pqKO%bI-FocZdU*xPj8gN5pQ zn=Q(?-lDYz@_4z@BrLJEyDPXhCiaYgMe8hNj_ZM}&PrE|XY@`n#Y2U>tlDR2i-Bxa%J64 z4xO#|J)qLPI*sIJtnpR_&ih>lfkxF)-O)&s<6oVpHp~tksk(_ z=AXLkZZnqhhoQo@TR=x}j|o`f=(uWQ95y!QGbkns>?=Gf=+k+pnw0Xl3m#e1`H$XC zV!pl+Pnn=B$!xwV=cVH1I-SliUYi*ZBKB_HYwM#FrhGPmtI41(RePj@_(cXM4Mmv0 z>yL{;Zh&<14oZ$}|EUFVXjNc6UtRhP$AQFx&_$Gc1-0;~V{DZ>Q|JS`WU3yw$I_w- zjU5EC+K93RYzH7er(SNff8Yr%r=l%UP$|ie^eM$J!hz7=7D(5sHlBNRo2Pl>0k@9+ zg???z#qG~H&<)8 zJY;-@YL&|wNq`=gqrrx=({ai!9n$bm1fXiOtT~2e9~;7nsB^kIBQq9;!q-{9iNE*2 z&g+3|{AMf+s@dr0FG(Riz=0C{+<^BFux*`n1Ees&$l?1jwHz+`srY?zUs<-AilL^z z9h*%O)zqAIBfFjZ>TYSk_)L@lhww={6zL-p{;5qz)__yk$%n4bM%CIoi657ULI;PU zU>TIwR0X(nunrFMDN0rrJe|eLc^aw+E($2qJG7EOcv?=K&5XNc?=4I6;%GrS=*a5g zIlJecuPS*kd+L_lce`+Q(|g2PV%Q^~GB-@6P;l*@39k|QxH}+=YDeC18pB2Q{is9@ zs^hfAA%yiRH9P7IbfDso9k9nGx3d?tssDCT4K>^K{&GUL$7g#YwulnAdb3s@ix@eV& z!V%1#;mDCd%h+&2!zi)gqWSj{1CNCHJlS-V9x>ZN*jg~XNKBi*#+^Pd^hKC9dEZuhVf}+Jw!fumMQ`% ztlCZ8_A;x(szWP8h3eRyd?&GoC@xa#HA0+HCb1C0!l>p;5g>|*?(>SD-xjV%F&^=;Bw0^@S0o=1^#KbBYT)4+*n}emeBd$yKG(eOP z0@Xoon_tKi@mV$dO`@Zh3_N&2Brp)OY7YVQ$KAb9#@wAH z8^Ad!nu1l{xE1q4lc0$|+gv!5FV9AkBczq!2rgetKS+p$iY!^JjX+_Q>pd%crgO;0R;RWWyhcnKKlV9}};> z@>!aDt_Hh6v%^T)jjEgCku>4Ew@VMPX?#yYQF!;IMM!oap>k1)D`j5zT zjef;U$Bejucc_m3-xrdwrJis-Qj>8NzD88F%9^1!lbeQ`2dvvin?zIkrzEB8naD5I_0wx7e@w zxOK-Inwl)RK}<60>N1*|D!3~qk3tqJH4DaVWQZ zvo}o}9gRPOz&Vll*uykB-`l&d(JpCBAW+A(wZowce~qMEz~T9|cTdSmU%QZq-Z;)8 zRdHFc)74n9Gt##|)?9Wb^1oNC(ZqJixbx8O>}YnFltwC4$X1tWPHJh>EO~GXur2Mf zG)lf}&QQdi7ksz!?F8Kp*Va2Ej7Q9Zd~TBSa2*wU{;EJzQ?u$5ZInukyo_6wmy)a- zhcnGI?NhO2yklI{jp+tK+Leo{=9GcCt+|A2E+o3n!=|*hW?8x@haGkO$Xl;AYn2xR zLO;vOO_mASZe(sMP0TtdGx8r(#>yu#@ajC(jYQ1z+;B>`Dr!rKMD{*mmZ>On6P z&qjRYzW7)k1n$9nEg0xkKXy!^U zpSx@NEk`m&1pRP0Jjht-QVokmHIkN7y{2?K`{5m-U~A1+>+px`_2b)3Net5@Im>`% zU73tkaT`GWwDR)9;s^6I!Z9W;ND4bk+U`>Z$d$&RvsQ|-)~*}6 zttf}oR^}x)a@qgp!) z^b;9<^QsGX%Zwcki~4Rv&ev!gV!nTpW7TA-GLBwWi5@I`mM_S-W5Q@YhTq9?&Cgh+ z7QM_AAe;5I^*p&CKf-E6xg+zdfV+w&D~Gd$3M-igrM^J1y#I)GY&5e*r>c?=Edb9J z9eIH*!$F?YgcOZcww*XeR6sS$qs=rw$@TQG>}$`U7ljAw^;`@sef`QrB;r+zx4b&d zt${=;@?vzSuk&=2tFs1~Gje0ERAkc8&7hEam=s_BIa+4YbX`y; z(gHHHBWU-W>|%%9Sl@bYkLr=g;=`(?ywc@L1M%wPblNG_U|#O7#IZ*bzSE-RX}Ry^ zi6TB7No6me^er#XOYe2;dEdIb&HEsO_@$4Cs|khYQt9s9;<8_6V82^j{*oesKxY0C z{dA2|pOaVQ9uA$1+3lYgRhP@BY@(vFQrHBvnODZNwT#b^3smMt=S-?X$u<_JG!(yn zlD;jGLdvcVs8q7pT3Ns^>gv5N6T&oD{ETy0z}&ZYQjLHSb96Jza9U)!S$kaiz}Mcl zYdOJ8t!rgTm7~1wWwPfYyJo#dmDTvSXBL+3yQ+*k`*HI?mHrrmlS!xn9UDl{>u00t zPKeD9g9-!vf!KX!dWn)_{q4+-4LiMB|VY}hCHD+c_;mpYph2DlVcb@6qziWWKSZ8(aErCMRK-Tt^Ta*49CC zWrfRbRDkzo{L#Ck+lvuRht0|e-Ow*ZS~aI4#49zH#KBsSVS0_tcXRw1s)zgeln$#; zB0vV@X>4Hq`D%h!#DL;+0Hi1xVKafr2=oU7d2!l8Stm9!4kWNzAlz=YBr61+U0q3X z%xrbXDpiM_%q#uhRE<|=|8TRB)*9XG3l!E_ev_crwFP&Zwit-zKlXy&A%SLslBKX3ajf2LRZC1T9t^xnzRuR4)$ z689E)yEOW_0UM4eyl52({*Ha>Q}-tmIdEni%`mmhNJ#(M~m7t+1`k z|L`qW;Vi@jQ$w42fCKO%;6d-b|55}`epO~=Nht~*NK`HOKUyv-YS7gB8WwHl@?~YA zBHmb|IfAf!W95@sm~7{f24)nF`b>&qTyMF+o~!#=K`3&;@d-71d)UXWb%+Ma{4Q@K+UP~mj(|3*(PIAa8jW^}-+?&2CBW1R&-cY4! z!(@%^BaQvkkfcMYs_GpBb^{88-Fh#6pr?uIc*WHIZ5kI?7TOMbLwdmaZP{7=*Z(#6 zZ>N**;Zk5Wk|3U>^N zyw{=t23e_o)$aOVhI^eIigL^<3ODknP)-MGfwoC=pWVXt84i({6`1*AM(%r(6g+@Y z%KiKCFH z!x7q+MG+uV;8x}8pAOFGzzuAN(<}og0}5%JP#{neM+6AWkQ#spgI^i9YlUQn zqo4(OlGcFg-^bzBfY2$XPFD}Sd74??&3yRGHrf{eAqK0`TFrC5ggp0eP2Fq}Bd8p6jw=0obn*L;2wd&|(~l#+Iz% z`@_~?{4)e0y$3m-P8O0%IDa262d2_0k74NmOo8iMj`$dM8J4chIyN-FksTRZ^nYgW zU&kAHAkai>d=tTXR6yP%=XK)rlQd>jQZYFGpX~oB1xFxEP~lXrK;--2qRsWRE#qV$ z7hg#7@8kdD^n8Q1k%%Jri~|^AsA_?!GX#LU)&uJ#VUyC?FOMHU{yP3T0W8q+AP%xQuyRjBo;qQ?xa^O9k4gFW zs#4M*}nz<37{U->Z4gep8Jo)C|}m2H1fTEEbziId2Ld!t=tgC->NY#)U+_ zq-QbX++|wYt6^!G$HmRfug}855~-MNvf3S|2$#!L@s!1xzo0Qhh9S|2!XIIilS?7^ zU;`~8_Ub|P0}Kf7JsmD7dA2%WF5S{P*>U)QN-*M~fd96<8R!~U9QY@`n@8Dtrl;Mx zkm(wnZ%J4HN#8dmZE-|XZNbMmscj$8Fd!3j{*S;<-Us|hP-y@G*afgfe_Lz--({3n zQ$iC*R!r+Bs^v`ZfvG#1n(t_uh0X6?fHR-0$L0-OiSVN{c*smMD54}VN3|?>@Tz9 zzbru(A`E+91K`Ob-U3Z9>e8Ig5KKP=LJDDpHZdT4!5o~=VTQDT9qLs?`3ZMC7sKk5hNH%UgZvk7iJa)nj8 zjwZdh1WwjbUwjOh9&$jRNbh&UG;ph?bfhOVP#uJIE+S^Yr2NjF*EoTGK$j7in1<_t zq1Gyg%(0`|9pv#-pZrZeB^-VV=-Uf1|DobzcyAh1`P0P7Ykh6}hC~(KVQdUuxOI;o zmLiGZBMg?bJPr)|H|^JgR5_;SuHcVFzN_8vhT$o+tgOrdq$4G>n~xv(pny4}dc{@! z5dm6vw-hLVtJSXx&&$h;y1002ZetTuUe42DT3TW?!4U_t+aC({*%J`UttO~Iy+)Z^ z;71IfMj($qv2dW%;az~r*k}AY9V_CqbYJ0ORC;d#ED?a_}sOm5FoZ-<;_+)41Y%XO#dRji=l@p5sCkL zBEKmPA^UQR2VgPH?{6a1UcPj|wLRAvnA{RP8wm5Fsrh5a!NLYgl4l!3n6lt^CzwGT z{a`ix;Q|<73-}CAE45ffEpxV6fa!xybtAaDDMBZF3X6 zKB>MAo&n{ki*P7mhK-zW5Wc(?qOjs4f_ z;8lWyg8dTr5|DT?9OxS3+bXP4tiPPuJMqLOKm9D? zU4O*YMp1FKp9N8DPSB%@BcJDL-$+q#T^fNrd-<_^3B+K6jYfz#p??6VydzTw^pn1Juik6T_b*Blb-=?FHHGJO<~8#OT_zPD5X=9PiK z-vqCXzVp}@@%XGecKwvBx5C0hW;=Oa=4Y-e(Hh2Q`wKo3C&PBu)&VTkH;sLA9d0k6&ozM_IX| zf0O%6RRg1^GtHmc^XV!&TkZV&h$q&dX};%{cKS2coPzxuUZ4{+?Ku}%yvtZ~>IYe& z_Q2A%lpTJ21aSvy;AAu=0+B(vlGuz@`f=?oi#$Z}UIY@a=UI>&LNHRbt@q^=@Xsn> zIc~>Uv26Ne>&@zDY`_H#F&bg{r0TEOq6{RWIi1rO_86E$O}*Ftgo&az7SjV>n1wE+ zED2t5?kC4-%orFLy|Fj>v5@+!!>(R&zNSj^#@fr>nj|?j-^oMqyVJkgeh)@~>WFm! z_z1ZK(t0xT3CB;K;`ZQ*j%&pmtEA>U_U-0oLOpyM#;5C718%euAaZ38uDe~j1KxGj zF0fZSwC1I^6YedNSpMS7tY~tj5`{uJ5diKM{$fHXii9+v^$xP39&cd^yqQujK{mlMnOsubK9de=G-7DEkiZ!wm1FQS%28E0i7J zmX_4^`#3(yFf?+#bY>gkX`t<7r@@{jRv8qtda$M=t;%vA5i|=tD|P2z~(ybnm-C2YnMO9 z^~{U{*A#(k^li1o5g>bD-ew;SL7{06p0MqVW-Afs3Fn42dmpqACb@i;G#Fy{SQD7D zpVe;j2aeP-5QfiKzac1C5O%w_>xbFfm#*i_q%PBx!2DX{NTcb+$YBu%FW z+8hmNbB0b)dH@h40YC`;OoHZVJfwr3XblfPcZfYl?1ls(_wsJ=vV)@}(`TnuMJLYkBDd## z;Kh|Jo;#g$)Ns*mux!|w`I;pukbv2K_#lpwDxB?gvT!a)Bi77z=iNK5DXa%!z@D19`w@{t5utRA=JNyiycl+?H@vzLciMFGYhGSb z7bEx2OqJZm$9Ny!JMw4OtLf<5r|M5OfYO*CBtBBraeY3rhh!Mk*p9&0F%*V86owK2 zJ^lDGlekzauTK*`pCf7}n7oG!@lR6_5YT&MB%Z0wH&K|sOF(MBi)D#~5Cku}Gix`NDyVSkb7qv)*!KdO29JwVh6+~rSK5W!~=eEd_kMp2d$~9VZuRV_Nxb0M{${S zyN|1DK7?Raf5?_({EMZXX@Cd%Pq-Ho0=r-XX10MSMYItOf?>WYC!TQLdF%NQ=_|7x z_#^SpKQ3g*fq$I{7MR_rpB^P#bOU@G+&QCxMi4wgY!snd_{}vB zid+CIvjCK}Uj@(ceF#hzSkdU!)@ z{~tGgQ>_0ttc?!)R}|P|5Z))sX5iB?`*$_hbD$c*Of^QAMw=J^8 zc zA~_ZI7TxaFb;pFm?TR7p_NT0y*;;*S_4ouUgmoXc|929wQB+bZ5L`~aESVghEiKRK z>FznbxR+!j;(8SwS(DHF_U(izV_Gmr3<-;AXPdYa=rhc{6@lRM+T*C%1qb&ir@Vx3`HWMg5`p zm0r;SNx$)DyIxhmfL?CVoW>flaGCT-q|}_DwlK z3!?+ej(GC>wYzQN&T-d!MhwMCdf+WCU*OFjb3@+>k_P+p>hgDC*;PAawT&uFjlI^c ztj_W-^6YOITS{`Bwp-(z)bJe4yivsXdUcf=4t1UHA$V)gYywC~`a0P~T6q-%WjXS<`?-di}B7GPH=s*#>JT}1vJ1aE>nL`pGF&DGZvVEJ5TKsupY0ANr>0CsiRk&64K8XLk~|AbnOqj) z=s`|Z!>JJNR@a~pv6;E7Ng6|Z)6Q|)_sa#bu;O)Atf@sMZR0N?%#^w4~ zHeEZH?POddC!GvSvoVfzz0mYww!tg`UfjQIf54c^Y+YTFiN(a8;Qv6kY7p7ufsNiy zk@eM+F@{d3QDZ>BFBu_wA31IKc_81G8W5?2LDBsDs_>)uFD>4)W>9&E^F zAT?g`pid2nBsB2ueHl98I*U`6#|Y-6Bij?SSGoMs(6BH_bhzH>tUGI@A@AmjW^$K( z|1YKbUKBW&@2L7gRQES+l=={;<^SL3`rKj#>{WHD^PLtUfPXTQiV}rluiyQD3)R3V literal 0 HcmV?d00001 diff --git a/muk_web_client/static/description/icon.png b/muk_web_client/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..142cddabb33e3f4cfbb4e612b9b4b571e0d5b1b5 GIT binary patch literal 5292 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 +
+

Web Client

+

Web Client Extension

+

MuK IT GmbH - + www.mukit.at

+
+ + +
+
+
+

Overview

+

Extends the Odoo web client to include + bus channels. Channels can be created to listen to Odoo bus + notifications. To add a channel listener to the client just + extend the web client and declare a new bus channel. +

+

+ Example: +

+
+			    
+var WebClient = require('web.WebClient');
+var session = require('web.session');	
+
+WebClient.include({
+	show_application: function() {
+		var channel = session.db + '_mychannel';
+        this.bus_declare_channel(channel, this.doSomething);
+        return this._super();
+    },
+	doSomething: function(message) {
+		...
+	}
+});
+			    
+			
+
+
+
+ +
+

Help and Support

+ + +
\ No newline at end of file diff --git a/muk_web_client/static/description/logo.png b/muk_web_client/static/description/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9427ce33ea36c2ec961356d01d612bae02d48ce2 GIT binary patch literal 38064 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 literal 0 HcmV?d00001 diff --git a/muk_web_client/static/src/js/client_channels.js b/muk_web_client/static/src/js/client_channels.js new file mode 100644 index 0000000..e93a229 --- /dev/null +++ b/muk_web_client/static/src/js/client_channels.js @@ -0,0 +1,87 @@ +/********************************************************************************** +* +* Copyright (C) 2017 MuK IT GmbH +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +* +**********************************************************************************/ + +odoo.define('muk_web_client.channel', function (require) { +"use strict"; + +var WebClient = require('web.WebClient'); +var session = require('web.session'); +var bus = require('bus.bus') + +WebClient.include({ + init: function(parent, client_options){ + this._super(parent, client_options); + this.bus_channels = []; + this.bus_events = []; + }, + show_application: function() { + var _super = this._super(); + bus.bus.on('notification', this, this.bus_notification); + bus.bus.start_polling(); + return _super; + }, + destroy: function() { + var self = this; + bus.bus.off('notification', this, this.bus_notification); + $.each(this.bus_channels, function(index, channel) { + self.bus_delete_channel(channel); + }); + $.each(this.bus_events, function(index, event) { + self.bus_off(event[0], event[1]); + }); + this._super(); + }, + bus_declare_channel: function(channel, method) { + if($.inArray(channel, this.bus_channels) === -1) { + this.bus_on(channel, method); + this.bus_channels.push(channel); + bus.bus.add_channel(channel); + } + }, + bus_delete_channel: function(channel) { + var index = $.inArray(channel, this.bus_channels); + bus.bus.delete_channel(channel); + this.bus_channels.splice(index, 1); + }, + bus_notification: function(notifications) { + var self = this; + $.each(notifications, function(index, notification) { + var channel = notification[0]; + var message = notification[1]; + if($.inArray(channel, self.bus_channels) !== -1) { + bus.bus.trigger(channel, message); + } + }); + }, + bus_on: function(name, event) { + bus.bus.on(name, this, event); + this.bus_events.push([name, event]); + }, + bus_off: function(name, event) { + var index = $.map(this.bus_events, function(tuple, index) { + if(tuple[0] === name && tuple[1] === event) { + return index; + } + }); + bus.bus.off(name, this, event); + this.bus_events.splice(index, 1); + }, +}); + +}); diff --git a/muk_web_client/template/assets.xml b/muk_web_client/template/assets.xml new file mode 100644 index 0000000..eea5223 --- /dev/null +++ b/muk_web_client/template/assets.xml @@ -0,0 +1,26 @@ + + + + + +