From 77102fe2a08b28c045f1a0166cdcbf5c98578dd4 Mon Sep 17 00:00:00 2001 From: iCodr8 Date: Sun, 29 May 2016 23:41:24 +0200 Subject: [PATCH] init --- .gitignore | 18 ++ LICENSE | 19 ++ README.md | 56 ++++ composer.json | 34 +++ docs/css-style-selector-nav.png | Bin 0 -> 14744 bytes docs/css-style-selector-preview.png | Bin 0 -> 52698 bytes docs/css-style-selector-small.png | Bin 0 -> 31225 bytes src/CraffftCssStyleSelectorBundle.php | 21 ++ src/DependencyInjection/Configuration.php | 38 +++ src/Models/CssStyleSelectorModel.php | 97 +++++++ src/Resources/contao/config/config.php | 16 ++ src/Resources/contao/dca/tl_article.php | 37 +++ src/Resources/contao/dca/tl_content.php | 37 +++ .../contao/dca/tl_css_style_selector.php | 199 +++++++++++++ src/Resources/contao/dca/tl_layout.php | 37 +++ src/Resources/contao/dca/tl_module.php | 37 +++ src/Resources/contao/dca/tl_news.php | 37 +++ src/Resources/contao/dca/tl_page.php | 37 +++ src/Resources/contao/languages/de/default.php | 15 + src/Resources/contao/languages/de/modules.php | 15 + .../languages/de/tl_css_style_selector.php | 48 ++++ src/Resources/public/icon.png | Bin 0 -> 1241 bytes src/Util/CssStyleSelectorUtil.php | 268 ++++++++++++++++++ 23 files changed, 1066 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 composer.json create mode 100644 docs/css-style-selector-nav.png create mode 100644 docs/css-style-selector-preview.png create mode 100644 docs/css-style-selector-small.png create mode 100644 src/CraffftCssStyleSelectorBundle.php create mode 100644 src/DependencyInjection/Configuration.php create mode 100644 src/Models/CssStyleSelectorModel.php create mode 100644 src/Resources/contao/config/config.php create mode 100644 src/Resources/contao/dca/tl_article.php create mode 100644 src/Resources/contao/dca/tl_content.php create mode 100644 src/Resources/contao/dca/tl_css_style_selector.php create mode 100644 src/Resources/contao/dca/tl_layout.php create mode 100644 src/Resources/contao/dca/tl_module.php create mode 100644 src/Resources/contao/dca/tl_news.php create mode 100644 src/Resources/contao/dca/tl_page.php create mode 100755 src/Resources/contao/languages/de/default.php create mode 100755 src/Resources/contao/languages/de/modules.php create mode 100755 src/Resources/contao/languages/de/tl_css_style_selector.php create mode 100644 src/Resources/public/icon.png create mode 100644 src/Util/CssStyleSelectorUtil.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff8e188 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +# OS +.DS_Store +Thumbs.db + +# IDEs +.buildpath +.project +.settings/ +.build/ +.external*/ +.idea/ +nbproject/ + +# composer related +vendor/ + +# build +build/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d8fe9ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014-2016 Daniel Kiesel + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d314633 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +Contao 4 Css Style Selector Bundle +======================= + +This Contao extension is a CSS style selector for content elements in Contao. + +### CSS styles can be defined here + +![css selector navigation](https://raw.githubusercontent.com/Craffft/css-style-selector-bundle/master/docs/css-style-selector-nav.png) + +### The predefined styles can be selected here + +![css selector navigation](https://raw.githubusercontent.com/Craffft/css-style-selector-bundle/master/docs/css-style-selector-preview.png) + + +Installation +------------ + +### Step 1: Download the Bundle + +Open a command console, enter your project directory and execute the +following command to download the latest stable version of this bundle: + +```bash +$ composer require craffft/css-style-selector-bundle "dev-master" +``` + +This command requires you to have Composer installed globally, as explained +in the [installation chapter](https://getcomposer.org/doc/00-intro.md) +of the Composer documentation. + +### Step 2: Enable the Bundle + +Then, enable the bundle by adding it to the list of registered bundles +in the `app/AppKernel.php` file of your project: + +```php +=5.4.0", + "contao/core-bundle": "~4.1" + }, + "conflict": { + "contao/core": "*" + }, + "autoload": { + "psr-4": { + "Craffft\\CssStyleSelectorBundle\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-develop": "4.2.x-dev" + } + } +} diff --git a/docs/css-style-selector-nav.png b/docs/css-style-selector-nav.png new file mode 100644 index 0000000000000000000000000000000000000000..b12f4d2b71c9a4ef18e3f8f70e48e186ed93c274 GIT binary patch literal 14744 zcmb`ub984xvnU$dwl%SB+nM}g+s4GUZ6_1kwmGqF+c)32_nmX!djGz?*52K_*i~zF zbyp)?QCUr9?!C6dmnMEv!v| zfB?bC9^e4g&6Y2ICkm{z{Em(ek#-qwF#{}1a|>iLF<^9BRlzuvcoaA!WMF6|FlgXD zAT)HbAwi`x0>Mw8@9VE?r`(QQvs@3e%cdufXI-n23}C;=Y%~Ibr~*hLGFIyTt$%*o zi&NQz&me++;I$y&z2YPiA?NFBn*QH)UW6iz@ysL*tIOY&&);-#{N3@!Ktx(#f8IqC zM3B7TfmkWIcu8P@CP_u<(Qwhb!+VI+xIl=ZfKn_`-|dX9p+Fn^#=k1I5#6 z_9$pKq?+bImW|wzh!;Xg>3Pf@fyBD{C`3iJ=^4|&>f8Pxk-cbf(SM2?71$3j87rbg zxPV%Ugt2E`Zw}V+Ce^9>vcJD&W8OLfdVdMw{yc&soiow@US}ueU3qHZ*FM0tw(Q}X zxk(Y2YRg}Yg|j9#sW z0;xg93pf%z&ug0fJ*tBEH^SVdahQI8HrzSJ_;5X%)mKra>*M=eR3!cp$t6$=u@II$c0K1ox^(aB zJX-)|h299PiMtzXFVRrIL1 zQv8a3h^`8>va#LL5?k}6_0B%X{Sq6+4B=-9N|N;=aTGh~JV6WOUg2v@!X`ON`hLvE z%f(G%sui;3r4PiGC-NHtatB;k5Dz<%L=jw55D^O$Rv#44A9p2i(h~?u2rv==76-yC z$UX{QD#T9(VX}i#1|FRU-57u{3rgT8vBQ)mY-ohg2^qP=1Mnw;f<6eap4 ziL4yzOk^|)Qy;oP#4t(-6I_rFMg>0}A}{!=2(1dvCdiSGP=<&TkR!-4%liQS795}i zhQ<;BNgk0P^0)9oDTPYnpKX$WB?C1Lh(XB;@t8n7npE<}` ziP_f^nG@U-`Ufaah^{c*5hSJ!tY1+S!+84R;+CWH^67%rgtzp)?>z51-5kDPd=U8{^axK0(ur5e zT}t9hW(#|#w8yk(zWsVs$HBo7!hy%(!GV!up3=ymVSP3?HTOZmf=&Pv34kQdu#Zxd zGNs z=g`MqQEw7$g7D?&CT+##i2C|<`+ZS-a(<$Kq6UHl!izu+AcsuAdBfRZJ46*k4M*`u zokp2Nxnb)u_sI&&hR7P1u$DNM*p_ga(l%fl6G8k7jKYTfI}&OBIABpB|aaL3b~nOj=otS+HKvQ4xl`m|85J zn}LliI({h*A(=jzAeDIZWMXhsbz*X~eq3{`WSo7>CkZvhDV2wQnWlxlhJ=t-k6xg- zw@g1ju6(xOModXLz7mkfSuU!|tR$^$`TMPsw)mn#yNEZxzsRu4QL`TH~MjSoI5#9ur?ykb~EPHl>6N_+EsEn6P)lAxq^0X@s8;*fAjSPGaT#jQV%1rfi2F)@J zGEHX<6k2@Rdpfh907+7*S*f&yu|!#wdxf@&-QF+;v68l))#zbLW7@I&l!CuBy;R+M z)zlT>9pGI9niyC*U=n&A0};a&qawd2KPR6(?L18|tu`&79i=VbD%&yMM$yi1zwcbw z%GR;Jk-f>#&Tz@R<>I-V6&fKCGO}V@x9QOF{$zgzz2&r?IGuRlu?V|=xaYEJm250R zO-|>L`3KXJApw5OZ1mdu!At&i^4;=1=f-=#^wO>Wx~ix7Tk882Xw$FL4?KdHJok=k zmbRAjMj}p5(PUPs~NN-a!%bV_k}HgC3?ajUkqHsAj5P1Mb4SH>TOYn`ats8%d! zv8x#C7(?-D?$5csImkjYLuW%6!xW=zqncr+!QkP?>%@)JwrjagDX$@)2cNsIX)ynw zq@Z-s&%p%HS>S8XY$;)>Qz@shlCf0fGL-;jf|Bvl9Ldj=qlBe|>BO9@ue-d{zB9PB zsIaJ85zWvD#6mOUXz&>^U|l)5>M{2u#g-+wDrw&nliTurD<)9{OUQ@l++XjC*z9S6-E=4eeJ zj{0irD=O-Z>ZEDB?03$*?vix<%rSEIF81^=sW2&|Wo2xWB2tc$4JHi7byIm#pMRIB ztLhwdrg=M5F*iECC43fFQ#X~DPi&+*l`AdIE#9*cu*F(NTV|dcpGlu-oHx|?(afoD zvAMHFv1ziq>Z+}5x}w9`AexprSYUFC9Fe!MbI)mav7F?sGHNX+Tzdh2q#ve>q| zT)61)(EIdR09}OScvE|;5m5DT_ZD>78O~eNzbB2BpcCN-I%|wREBXWV?0Q!tLfzvqRr*p3a;U@N7BX+<3ovrh&yK#NtQuLHl;UOx!B{ z5?dZ>n?cUy=*D{;ziqn9yla^zUoSr17U{0}7}Y!ibU&zknq4!b>e>A^RClN_TP9o5 zT%udfwGFbi4oW1E)KUk=`b#As0MxAtBIpe22R*i5X3=tAvke}?zJLIfMXYhcR}LE^ z8kx6kAYGfo3A}-(_KQDGGu|`VG)_@As$f%!QYf}K*W|>sb2MoTZ+LIga`LF3pg+FP z!@nZWQF5|uWQql&ZgMJiZoQA|>cbB1j4Mc#%wxT}~BdA(z^bl_Rs zngo17Nm0reg54!3_iOv|1H{8NRwZs7?nDMwdV3mpIwb(FfwsQ9p}VVL+jRb^X_EtT zG=69BX!5fEnEHU?h`vi^PQg&1`DHw8?*d*7ow`6T_LvU0gUBqnJ9#zSBdA@*MxTArAMOtNeC9UKoWH^NM#*rq=hJ%behc{;C2iB%t zGrQ9FsgKdCajv9u9JiRenZK0%QTmkg9e1VUspmB7Aa1Qt=o0XiH|L*CLQE(Ra>fMI z-Ai6nEtEa959`jt*7DxGqiv@UsHC?opFL*5)wwKnYH*~lB2ap}J+;CjG50!T__A#!nIwppVMr`Z&WOL$t z=enV`^&c16wd+OrS_Pi^J;*b5BvElkU89Yy{D8;@T zoHoyG;yF&uRkZJ{{qT~R)4!d76_AED0XZy3$H0766(>Sgwr{I$FEnj@lH07I34+)X zZ>xA)zNksG6J;;v$Zgl~ztGpIB5l!Y?&`QN>uM&gSop41!t`CXd={Nq+%kHm@(y|S zxbpR7T+w@FwCMFvJVJh(J5U_39}XKS>o=O*|63PwTM0dmIw3XmtGiTo<|K!u3n^_W z<2Hlu)zMl0<1xNPpZ~sVr+*+eJ4EiO6K({HFC8syZnBUT zz0$#Y>B8$m2Je|mrgg8?#(mI(cuT6g;)4ssKY&75SonODuUvywfmV9sx3IRMnxka7 zuxD;mQ>EX9SsTLZK8$WeeS|9cP_mATbQK`Gh`5ZYP@}TR401Wf;WCk%y%#XjNlsEzoGwl z@QxhT7zTZs2JCi43JF3Em{kUF1Dq&wrG2aMx7cXx8tu4v-Y$0Kb|>{KIerU49~rPzjp?jg)T^E z^0$yD=2q+a!&k;$N-_0z%q(@YJy;(2-&CeKx^mevzqY^dZ5#B}fXimZ*uf4q?5V)> zD$&PS7US;=L4dSKfMRff4zUpPj;DYed7hs?{Ne@^VP;9OOQ96k-l~Y9ib&cHTo}Rl zg`DF+4xolexputGp@)K*1;GpC3)U2`^<7ucVuCAnO3ghRp}CRA#xUY}X@SPNj%rC( zfUMb`Q02i>!_M;yO7HT@3*P)W1~B(}6f;#)m22i&7g$kOpl^eYMM(|e>1b?VE-ASc z+6_EW-`3&E;ozg{qg-SiW!2N!(s(pzH7Ed|8mX&}tK_R4T%BCRWYX}hN39L+2Oh)j zi7$h%;xC9$lF+=!ytGBc5ArXaVcAsjjdHZ&+PYps1=90+(z0jS&Q-ESl_7Z2)p}o* z0kH)MD3z?`UP|P;i@)VmZFIb~3zhEEe$OJn+DPFCOiOGccbR^|LZpW%iR%t8QG}Fm zo8laeW5A@`{k~g*;X$`iwQ0I|xSYbr!{f^q&O+63)S=nX+#GSEyENS_Je7Ll7Pq|r z+9SP^dFt5t4(P{~L@0*`&hO~Ix=0Q$3rmRVMn7*x#P#JMeipQ^mpH3-{*HPWVAGh1 zsXyilT@_eQB?UpkTS5k*oOV<&zIEojbYvys*QRQVuw7qu_5rOu#x+|!i4?XGv<_lW9QcNKZg@t{0_ zIInP|=UriO{-*T~3C8FL!3gR@1o?n`9qK2N2j}dk0R<{0^rQ%q@EKcJO9f8WG9%uU zhoR5Ef;=74vE$N6!HuyQq&sYGkifVJAX&oJig4G#bwlHjE0#@`VhddE&mH(K+7jE8 zClyZ=xsOB=Oe4}nS~pj-I6o~qEk89m!Nq39ZpXUBGD{;#|C=TQXhgCbA;v!9d%{9M zj)9&o)E?G8-)M2)^JsEkerIHWCt{9JYRd6-mfAU&0OXknIEHFWu4ETa33`{%S;Z~y3OZ!&S0ZNwvfN( z&ERjN`&RjZjb{@%*Q$-4&ZgVHcKt#oRoWX3XGJeLb0iO>n+jRkhZ%etUE`CuNORdkvoJ$4J%Pe6nzG`#*b3a^* zqzK70ZJD=oYgusSc13^eJTdat|6tT-bfEGkJ9X%7-9_Cq-d;F4o@9_V3o?V%-97ry zZRsMP=IP}5^w|M@D?FpT9wN=H@xuOma|yrgm_%GKnV%)FM4$Bm28=$lZafg5(9a2WkyJ7&+=1 z0eTnsc$oAAZBA#3$@}3ipD(fhjL%A0t6BGhbb>Stp&XLgQ{@AyLv#9jd+jrsqNI{6 zLfVpsa@FEpqN@`5A_u}%f}GN={5m3zkr;w!LiBV5RpaEsh@#N_#h48L?Mo?#oa4im)&@o2bM+!H zIKiYqZCl@dipNOh326xmCG|yzglLmxT$L%SiI-jnn{@};G5gV! zj|!XPDqIWh^8DYH`Dd?7h6AvOGMf`eGqku~ zYfF4KQEqSC%GXyXZ%Zmp3@_c50uT23Hy=nQq882;m9~b@WS-?W=_mJh7R~7^t6%CD zPR%t7TdJL1EZ;kuJMVvBTLhB4CSMNPsk&b-od!~8Ye@76z1MrlI-TD;?w^MUe@(m` z?hA1FVtg2WBsYOnU1+6iHR*PB4>!2l+xY1C^7($Ahdd4s$$d+_{rY8#Pl(h91T=Xc z9bHoZv?C8x>*{4>RP1bIR0Su+o&z#V(D}JNy`&+6C}?m^adv7c{q^ii`wfokIwP5K zFQ^Cv1e|T53UCI<$#NUn+0Yvp+ZmeByW80RY%Tx+@w#*WRBcS04T#)rtZkjR-T6rV zi-P;7{vR*{3DJL%I9u_N0OS;jMC=?*h}h^^=^07*VTg!`cpZ&Rxs^r5{}21mA0LUi zv$H)n1B08J8@(F~y`7^O0}~e)7Xu?R12Z$-4+Wi*hpn@LJDsf)>Hik;|Hu(FaWZnW zuy?kwvnBeETmwTp7iT^alK&|B@8^HF)5P84e>B-T{U5V_3}pBZhJlHmk>S5(|FH7@ z2gA) z4Eo>R`Y-5@yZB*v8UEY#{4fV>bw9g2gdS3&LaOe-mpbr(B(=5fWPfaIMa8(j9)3mD z$q$XOrlw|;se?ed7k)ST_n@VeRyf`iu!#18kG;InN(k*YA@~(;hRQydvCGevmOh z5_u9}Ax~)mlsi!NU|?XawKtIdq&pNK+JFtP2+DmZdxPB>Ac>JGvPW2B&kQ*NvM?obYi zi?p@0RBwTp3=$@0D0w7GT$2T%Dywk$Rtxm6U%y7TZiCy<&|Qs-RkXPgs9pSof;Thg z>%#8nblQ{dO7tayl_e`w2t+Xs;I`6YV@9zTWJj;BneRv9YDvKc1;!!9fHC1rc$&lU;RjjEkYu(__2LzE2D8 zolyn7nBN*WAeTSc4d;r>4IaIdC^mQqEUJg0#&*YyEq;d-oRRGi2BsT`U&t#A{&vM7 z0Dbk!1Jn^lWT}}?tp^`&r7EeZfUA83V73_m~$tz^!v68tRvw9ER( zN5kAEknBQ;EVLmJ=i>VWjo+gtDO=xXoO#roz&Q>qm;(Q0KyQIqL0Y0&TQW*SV#bAS zWceu0#IMC1kHDMvH>dau2yb#uOcA(2iPKju=?(~R3ma_a=*SSCzB(FeflTVz)BwX;<&wWW1){KRh z{&m{Yt?Y$g5w(&g-l$dmz{+)1jOXy4PCj2l$o7Q5Ey2O)V_*X#W?^!tvSD6coz{DJ zx&L+!A6KDFKnj;d1m1vYAMG#_-eO@T;@nuexy+E!RG@*KeEiMhYSUno#=ddm`@<~Y zu1exnqa(&QYC&my=}Qc-aE*Zl(wTAQp%bN!XA1&M5p$-NNH5+}ke2%s}XlMElT#>@J;B* zsgYCDoT{h=moqRJDPO?ImJVB#qm53E3I&^BE&U}Q7LvcmR=F7&FLs(75t8&FCuG|F zQdFak%hV#9lqg8Nzd7(GqX2djBA6Ns1}k?I=!S?M2@=c*>n2Bj7UAE_jj_yIX-6NT zq{|pjiugW;;uO{ok;(^7c(dxn83mO1UI;d^+}#p%%7-s3XA4} z9S8zUPaC+$elPz7{u2w|K*V&1^91z;VPveVX!t+!(CFw&qEiC*Agyf*c)dWC z>b%QqM2j3kGRmIC=6-${NZZLk+Gosp_2vC8h-lSQa_WCsO3UfpTmBR6ClMsJP&Ck5 z$BZ>r8`QS~96odttbqma8VW7ubg74NI^K-To$MksE1y|+6MqLsNoAH{LI~)=vop1- z)rzOluA*w1Aq4^iHsZiMXL1V~niWPF2fm1TB-H#OV-rjID z1Tw>$PS?oQi$1>Bq7A0P@$@sk|B+egwp zjozm53;syo6Z874fRAo<-{sYG(Ui^P)r~{vW1{Hc_s|ae{#=+byjZy%yysAE3DGZ0 zEi92j#=!pNtYrpOdhL|vYzEdp$%{e9GGD+IVdEiDR~qF&IuM`otv)EuJfRQ2lKM=` zo|=x8ys+PJBYXxTIrcTtec@7u!w2m0XH*cPI4d_T*t~~ybk%atT)bvl!W5)p*$?$y zR|o=o9;yGq9j!Ai0?H7*KK zNr+Lud%At4jb;Dp8B5TfVx{-d3{-qH`d)NW4E%&B$+D^mDROsEuWT%H74`N@ZjrvF0yn85kx51^T5+mUMYbUN@BF5r4H{7_=kuLgo0# zteFuay*kuai#e+GH)eSy;_^F8NyTbX-(}#Wlq<2Npy&8@Tf*=-n3~FQ@ZV@Vf)>zd zuL`|At6kvH(W{n3le!xdmc%tU7@|bN>DHeLW2jARLN|u zj)yR&QyI~S;}f+nyW}?{5JuM`H1Go`b=(FyjA&X^sYdrW@N@YUN}5u|!RmWWoz&cM ze&JGbY=x+?;xyQpiQf)vM~vufJ`ks*^Yl_ZqD4{Dgfafs_Yka!t0gMr!o==w@8W1I znV8ZA#f#d4s8{6O@QP2Kz+0*kMo)0em31qkRwb&u8x&CPqJR~~%C0WZT(1w}r|b1- zneAo6{UhNh7#Ik#!mIh`GX8tI0P*O-W*a*q<~#X$+9*0-RG|f!$oe|3KZ((p6c}?3 z6Lp3u0$n}C-05E6AE1F$OG)KT(Witc2qL&E>)F*#+{gjQHt^0!_@U?%*P@Xjs+p28 z+i#HbhQdGz=pBsj`ds`xn&FcLQ;lS)Aqg7*eqZK7Hy$q!Yb@8|ZUU53dtM~`K(nQ9 zv9v@+;4>nFIYeCOZJv_-9d*L}d=o?=c8Vlc8N%^8W9Ge4W^s)%hq$4RQ3ksep%&ZWDm67XJlITa^6e*0xmo>KAnp1vqGE@L z(#bQr2Mm{qWttGUXi{B=#|xGXcL#`DRWl+*GtScj1QPC<&2Rle*P(%9XCoA{+QZ^@ zfZ*^gD@IrLnEq&Z6kpM5j`nh7w!F;Mnyx)?y;L_7IGKJ(}K4pYx zJT;YZ4Vkb>Tc`*1iJThcjEi`Cy-5$fw}f={dx-U2D&DIQg1}z)haV|s^CClZbO?VN zX;lzx$LkpKT|!!sHdGag49vP;hQyT$Xp#|Iy$f(k79li+NQ#1teyV@yyF*$66U@GRN^$;s!WkTQ<`C(w`Da$a9e{Y+60kLvchAhCZ!Im9ab@n)9?7;in! zQJDu${rI*ZjWI1)^i5!o9$}?2S9#co1K1lBa4hV^>3ynwxqP(KvKH|vW5HF1xV@Hx zdKenh^G5LO+{0c1WK1uRXm6p+2%(n)4&jpa02sDSc_%3ri5*t(&4z>RGw6ozjc?Fa(bbQ+kI(vi=T0TW1(cc zNgV`7jn2?@ctVgBOl0#2*TP>+tl4^(CBXO`03SmlQhuFtM;tKM@%n8rP3U5hL~c7W zsdNL(eO1pSXi3ZM)kj)`boNV26DmXn3p+CblInPT%8# z!&^>I8t-kJPw018R$#m&w1oHqk*4ts;s~e%u|dKMhHK4bg`fJ%O;d`QzPF%*BIYwG z3~h(q5$!bURqLxB){6Lp<5`BXQa%Jc&sRhABpxQ@;=3;`eCDJDWSE_*et#!RizP#! zX|^R~1g2J;F}Fu@Y`>Uzcy^}!W21a{@vO-%k6k+!8vC+JatScCBzyR4go)r=oLTej z=37KID>3=`QJ5@Je>a|M&Y7RoA2{mR^{z%zhbDRl4zu!lkhu~BtbpKLK5E7#Mdsqt ziqKL%7;KVvHhkjqCcLBZQ+U>eeATN{Bn+pAS&OlkG-dVD%$Vx;gu6t&R0 z@)z0ghNl~(Uj7|lv%FZTMUIe$ReR+!W@w8si%hSnwascozA*1K2f4}l&UW z)1kZbA+;#1#T-C#UzRN;r zPeeIkTOsQ40q{K;QeMo>4R>%!Y-&{N^x`@bUOreg7?^W4bW9i)i%q&f5N8(cl z)*rQj>PnV1lZrJRCzPnK*|itZgX&;4Ig zbw%#rezPMAp#4}k@!3F9dw&0uRL|`yC!!5>TG$%0Xx;TUnS#py%^+IR4$ZB@-Zhfo zxy+;@f`dg_p_Gy=EMEy4%zDn#jNb|1_ZqhFU}W5Vl)!U%GLwQk_ymBxMr@NXhBbm@ zmhu!)gR&%y^$uM)s(QJC4W)~X4tb#wjEdt{{9WMV;$Z?;PHXO?o?^6u$Uux=lTX=Y zEndpvmT|Q>A{u2cy-aU#3{n-gvR=4v$Q159itqZ1vN6g^Z;UpKU^OzDZ=-1Ctf*@P zET@yVeOya6<$xUDgNt6Efoa#^opJG~W zZFBQ{IUrOVv?sH*ZJ%h`W{K1@PE{ABq&KBKjX27dK=eEW$C-d~jdbRZj>Y@wEf zACC)rB0q0eX-gM;3Ek9SvmDR4F2)3))jFG0{2r#rS=xpUzs;P2>4L!{@Jc>uOqvsV z07V&bdq)oAd2(O-?r^@F^6RxRRGp+Vt!&hR^`eknHdQE(rJx{EfOjEt#;oZ#u(#;9(hkA2Q^n4Ayh+OPY81jIF!ht*M0#aG^lCigA zt5USYRR=8MhD_orL4ZG)tisdK4ta>GA;bOEY$*IiFvVdi;BZ+vtAQDxJ=_9uK4g$Q zt#(eNyX)` z-FfFm|F>+{8yN)vi-8dyEdyd60mTB2tqg(R z`MNK00NW7vgN69<#S-r$!t0z)S0?9Y%#L91S)E9UObc}c~7sm2Tqn?B3YG0^~ph??YC z-#RnTw7<)14+a4PLV$`v0mjeI-#;?%p~NAwo8n#vurBqWUAA3p(ewz&x|1Ucm9U=R zLk#?BGIXSv6JuQZ_UQRAEXbDf8pR%ua}xa1rLjgX{NjZ$;#P#)rTi5K!w@EdF_DVG z`r*RV`r#$c2#GTlgFCj3OwQmQV>jIvv8ceFWGpo70!(z*Fk?@Xoz0ObbbbYHJ=Af^Tcc@a@3jCfPjOx>tzlz>*jmXekAXcM6};X zP_PBeQLfm!1NtKeJ=8$uSbZ*v$Q^Tco2oy1AweRD5B-IxDFOf=Qhh4|JDYQ83zuom z@qQkLD2EH={aIDHj+xB#6TwHK*{EWt4G^;UT0`W|i<3z;sFsGK8TtvL=Fa_-z1H>a zA*^mt9d`3pu4$X{CldQy62`Zuc^N5p1`L^gLtI;pDwup(#Yr@C-X>Ivi_J}p{xY>8 z3F&j@y5k@-${M)}Q>6P|h6UqocAf9#oGU8y&24tN1sXqc>;p;oyS9 zIFJu2RgA9Jfmj)Ji(Hl4WNV|yWPX&=_RAcsy4yi}P)tV-Az%DhOWeAq8X8if83hOD#;fNLoKIsnC`xIXv{jlLC5H9L{y-V8s!WF)=p z-6_2OU{c5w(Mm6uj~b>d>x6-Md6&~G$;3wGbtoq~lO0_K;F>fA(|%0S>j?f&|69o# zx`Td57SiyI3en3&!93vhCKPwSfdhMuCN(QLuvs}}oWxeH?nKT!8ML`j&-ApKmz+A` z<-lBRlH5GJO!J^`Ml{|q)S!+Ltr?a9pV8-yZ{CsxES)AMASZcq!#ZuzTlC^xP-jKo zMa(E_WQ9+)32GWZ8+O3IUYs8@wZH(!!Vdr-S0k_*&?)Y-L()dKjp}J5WJz^MFPV{d z3(b&K9C>x@kSSge)CaQi|G{$C6+=lF5@|26#w{%%Zvvw4d{JcP1R&f14A!UB(2XB$ z_rBs7CS;mP7Gt?cZOai*pWd+st2~e$e#G^{i&9D z;k3bcOEgxzg1svTvi-lI_w5}4(${J$>)sSZ7do;)Opxgqj_B51=p9eu);cldx#>=( z?f;~3O=G>Vl~Xk+uJ7Yp?$rb8!aQY&6C^+AxnQul!UM#xf)q-H2o@-0v*X|!)NU0I zj7efl-)=oR;?4$T?r639hoeNTSyRsmlcV~vKk#F~kNjUQnfNE>3MF`2Y8m@}CK0D& zNi?u1;i5=b6tuE_wiK-*l&-(4pHz`k_+c-KpV@Sc&4q=N^v(M6)C$8**@0u`B-bCMM>fqpFM| zJcv%)0agPE)=`i=--|ehIx)~$pn$nQ@{HTl(R^$QUCnUC4q6|mpS5{xy4#SeD2OZ zJYbril{tWaA0ih>^-nst2ZQeuO{yOZgo#1J_(Ckviw=^b(PCXZv{HI%^CB?Xfykxp zf<4Lyj)Dn{`&;80*C9Pv?*Pgj1bC)0gs%yFrL)xS(?cBL;IqWd!`(7QP=I77-5@Q1 zRoZR<_x;bb&=tu)OS;Q}dWG>Qvx>3Ix}`a>JG%{Bg%M#*%Ey)ENkcfroEH%3roa%c z>0TpWFerCZtR?T0rYqz-Ff`zg`A(LzE&*UdLQq}z7TEeLkM`=>hO+*vXkX^U7Fo=X zfx_F1NGqn1Ym$hsEdM>~id|iIUKozj0Gkt&oS5Y}Q1yz60|7^#*H}C=ok07_imKk+ z<%8b#veR3QQ8^t!`51(~!>-=M)5s~i^F=B^BOHgh0N@DE4sUccC?{s&_y#k}wf9Ss zl$VrtX=g)$B8J%){*zF*AN~Yc_PyYyCU*9##rZ^lKgNJCr$zp92N3G5KxueBW?$6R zh>s|b5OlPs?#|-ECq458vAnG%7Qjq6gURo&Q7C5KdPCmKs}(iTnD5rPc5ur1bAiNc za0^^%g3YVV7d9fj)QHF6@6ZH|l;R4+NE9FnqiJU&^-rC_A9!anT9i$(r1-l()SL67 z0%T|h1B@X@+W!~?nz<4$s}6Rbg#4PbAAAK_ZS0wRmGw?eIDN|Z$$Zx40^WJ{qtV>> zAKPMFc~`KH%M5JT$njw@=`Y;hWo23>eo!JWD6 ztGX1*88%=%R^?{^p~uc!xfV~rS_%ukZ-FO(=XYh;H6Z>~UIO(q`M}h*(%RT z;?_#I&E|20=gTem7vDrfaiw_J@wbmQl)G-jWDbbYCOS^L`&`au^;ziBBIyq0!U@MK z(hyIsG#i_4o*p%qA!)noLxxX#(ZQKkM4QZjQY9cTX$^}uEF)YBb%2qLMAn{_?5uC0 zZb~7~nFJ#kG=j~cEIOXl@(4{9jug|=fO%~n!+#_vOx&az%XgzT3r-`AUA{afS zW}xx+FHsDws})pcO3zgy{vCz(oZkv;E}EPVxdg?1>Z#j*^3NhuiF4TFsd_ITPPh<5 zj&MasarRmJqKfENe2yikC`-#iWpu@q;4`y>_PK^IHYlBTPdPnul27XQK;s%sFipKx zV`5{o1jj0d7}3c?_a2QM@$kqR4M1$ZST7k(Gw&_~W4u(DU86`9M*GRe`C((R^M0HI z*y0ANNdoiibzKo=cH@St`A!TP3X5-6x1J6GkIyrgzD?$azQ>!+7Q^B&15Q{8J!Ji7 zxR8)c^#E|V1Y}ApiNr6gR1WjO%mkTBrLNDULiB~Q4X$J@Bin7LrRo_dH)r%Sw2^qe@#o3tn%k$6il_%YV5KU_0$#Lz~B zE*)1|Vh(fLK*Ezd0#Q9NoV)-6wMkvg8xCD{vQ^Qy^}%_gi<%`+9 z9-GO?*@Dmcz*UV&NMYc>24ys6BB_Sfe;s@rS2usA14oB{yon4liR(Z4_?N0)n8U}0 z-v?bPkUW`2VdOXVO1?X-X)tviKik|{zjGxyt`W;hD~%!Wo(YUGeJm+F=}7hF1ULcz z+(=NbbBw+0J#K1F+|=poa<4=$i`|XH(7KJ&-_pMyE;x>I%sh?!GN84{tf!bM3D~xz z7MG7dN3=h&y;A|Hx`w|h@eou@VRceHU`-KvY(x}tVr-OI22edo#XPu-6<{=ns(mt1 zxD`Avq1#v}1+bu?oPA^7O69^~FPl3U^P!r{r$|_{mBwVa5wi(6^R6@I+e^+PsB+iw zG3TUHBL`zn`(w0d$@>m>M5`cNe;L zclEETR;ZkeC_D@f3=j|yyttT<0uT_$5fBit3>3tl9H(_9O8YR9MlvorvBxGP{ zc`#_;9w0Py;Q>DRQv$vZ@2{)RD~Ig1Y}0Hv(~E{jwtmTn>QSfW#rN*K8^m~VaA0Y0BlQ1CvE@cqTez=Tp(Y@)DJn6rjkC%v*1El9bPNC_@bDF4&iQo@BtIX#gh5Qwg}aTKysXX z4Tcqj&}s@1HpHVCUq0h{hz6{DT@s@2;hLXcLqa~MX?|SZ*_vHX@-`1g8yH0CeVdhA z+6BeaZgk6QHK3g2M3xHQ7LDacNa}jX9)iTWe9uQkw(1&D$LiU7Cy_dDa?*Q@8Rp&d zHy$aVML36A42Q90UTX~0_9E4;__V#dVPV=l1bTZ80(>08k!0acwZRnc4D2BUU zvxr=&g#xKU#`8ZEI?HL8RvA`A{2gZIR6j__>D|g}Gk{|lS#6?*THdcqU=-lQpg;pqullV-xsj?gcW z-m(g@=R4LnT5EnW-UMF2?ZWNdZQ0kwMZp#vN#i?wp66a3D`tSc+H)sVm=7OX7f&te z+iiMqoN?g``T@EU(DM3LQ&V)+qvjiHKj1k!f(gRc0+b}8S_Ak|U@B0l5t>z=ww&Pa+4d!H0+i3abZ-=ZCxeYup_OieGKW zA1nrhiH~&{yqKSd62f>Jr35@O2fE%LVH%XcS9F^(MZmxip&c@On^Vn?2nrIJm^=h@ z_m>dScQIszU`HauVVK(Bbt3vGIW65LOW4e1NcZiMDJ49=icYY=WdqVjrg1aUZL8(JGOZ2-!oVzAw+wHcbIICY+0H)oAuZ6 ztW(2+!lET&M*~JPsS>CXsiIGrlyMgr7H~_^xwv(}szRH3-nO519Ig+ZG2V&15xN8> z_-I8cq%Xwq#WDrFl3Jr$(_g)o#!p!_L`(&X&=^+%C4Iwi%~|yhVOJZvAont!1qFttHvj z)lJH+*KP7<{Xl)&_+ViVexG|_ZIE+nsK2;Rbcb`mCHM-T7q*MXhv7^8lkQU(*c$kU zpP3(uAFv-fKO;Xyk5Z3&kEy`Cz^Q<@Kyd&d5F_vL1X$x{i0I+qUlo1M;X>^BJoVJ5y>K6^PB zvO+51SO7iCx5(JV7=%Q+M1o}E;p4IXVWqM0;o4D+k)l!75$^=lB!^^9x+Ur+x+)Sv z8eKZx!tN5i+?dkoylY{3h1hbn9QINnB_??Z1q+qea+<>PGOYrx+};9%3VX3aMPq4Y zX%>M787CcSwF$`zIV-J9^$nGekXLT_h#)_aIFYhJS!v}7$_bGPSq&x)evRaY%}b=U zowj_>AxSHKt2pP-$9jaWsN_lTOml5u?Ktb-m*rV8S<#!q9c-^CuYRvAuY~aX@FZ}R zxbF<}%u>vjZ2pl_k+l&J5!jKL5qFW<=}>9U=}PG|X{9NbY*uW2De7tXY`APkj1=jr zsq`8p>fbaR)lq2hY3^uE|2RmJa*cBNMT|v?itJ0Y73|i!5s2lKwTyZ<6Ka#TrN<=v z#mU9W?#qS_e=mQpD$w{}#eK%XS5XjA98rogyD~E}nUju_1e3~>yjl@jGR;zLqb=mE zJhpp|`OPeCd+V7S^sV$4Oq)*bOBumoqCrE;)-@Y;ZEugZm(ZIIYw?ru`)&)cdk4Et zD?byB1gXeq-O@cU-Ra}tM@)yWyzV_^UdG=n-m{VIi_i<*{?-oq~(mKMXDujy`YpsREHo$X;nj zR7W&pK?`3-SwQxyzjkl zKPSQb0ulmJg+BV@K&OGPKr_V!#81Q>Mv6v~6-pHS6$pw(i?hT&k`Ch*<0j*?GCpr} zPI^w^RwF_pZUi-g!w~Zk6%i1PsEo75w5D!HTC-`hGm|^q13dRXUrGu(7t|`D{jenWL=IaPEzv-dXc}5->a9^O&kSG z9b{=vAP)Oz>B-6I4r`~VKkv0qz3h;5{J|JmyXU*Qn3S005>k@Z31LZxiTYy(qdLi) z$xkXJs!H1X?I~V%6-@Q^uW=uRl~fI-rDN;K4yE!7GYfYt1T4`OkrwG^MyC>|>SuLT zzSJ|Sn=Gy@5iA<4&N|9n8ZOfN8aqx!XXsP zOqaebYAn(&Wm^YWS_Z_Eh-s<}R(wC^tVh3JFQ~u5qqY>+#Xc8kQ6_K|gPQf2tm~DJ)(mtFpf;YH3ZZUq? zOVAtJpkEuc#nt1i|J46!6lzbPsXAg;kDQgFBXnmD-vDo=TyHS4UG@TG!c8w`DT> z*s#F{IUKv)e>i^8dqlNQen{6LIV0%Mv_l{%OF_@{ef$mRr9`&I=9g~Mmr=I?kus7` zwMdAdnVOo4>%eAI$Wbiy%sC@fO_ZI-)4|}<6`|C#qc4y6_m%HtbPWs@q#sTYJ2A8R zPvi6DrRTAvWkW&^miABh^t?CM`^9sPZZM`9lY^Pm<5!ff4q0ji3g>pj75nxlax2j= zm*KC8oyiEw+O6xFAEhSwQ5`y;VdlR?4f_|ye+n;Et(#f3uB|)VS&vm{HdMScDXtE? z+^?>zZaJ-=OSSx54ZLdI%ACpHs+;w=(2>j5+uHxwLo9!V{t!gGgII@jgES>fM0|k{ zN1Te*B7pa#d3pX&dvKi&xbF|9c!>8XPAE>wZsd`4v%d9zHgE*^m`s&#pTCctRUu5c zbuN07-Y0nz+#x(5PMxbr<{Cre?(Og$pLtL-jnCjK7QZ-)6The4@ZG5K( z)8=pKfwLub#|*+z40jT?W_eKh#>M#w>;#Ae1{Q3V73q?x<_?{UWs!lk!8Qh)XDUz;D^$qkZZpq5lc0rQ3G-F6NNSoUtweR$vDWE zVn1tySJk!XS;<_%P3xfMG-NgB)hp6^0--{av(kL&G~w*auNY&~V7QhFdBt z=18>ayF#`LYD@1?flaG!n2!Y?4jC;23neW(%QsqPS{fEECmRbP3nL392}gS=drJka z*-p@#&^J^R6qF~z5ZTpaykH?w84Y3gv!0oVr{Eo_Ntyx6I#L}`!)W}G?^9MBpU3@Y z@nyx>xBZi5*$tdW$=PzY?bYv|k~4ZYW3apu(8eGKrRW%#Pf8+0$O^VCm962ca>VD^X+7+Ztx{V!ecO@N-q-AqomGYQAOBPQ;Qwy7h zPn2FkPi~h!J`BscFAV10ZgPjnuQU5{eYS%kLnXb2<9okrf^N#8M^VSb2flX}OHCbT z{pdhSSxmc0<9@MslzD%MZPMep>)7t?i%t!9*6r__p`rbHzQ5ZT4Q{B?{7eSXjv-_A zTMc{#g6tVPR)XU!LM!w4@?AGuDuKBMJe!{iGKVqKL#_1V_k*wAIX>Pq-*3PTVR5IT zrOb@y)1a5zSuUP?o=f6AaY#1rHe0#&yAf}Scb2_#fcW{73kV3D4Re>OGt1IQtg8rU z87SL}l?u3LM>LfCo}0EHyzIf~gw=-eCIVtVdiWEyog^yMG7E@H81vQ38%!aWqU z0j#Y;8~PodUbTMpJ*s`0A}50?@-sRgnxHYa-3-8?<9k)wSh z;6lpUkG0IoOQT8{OhG90;duraUQWO7M5pT3cA9SP4znvMi&$-ZQm9qh+v?wScay^HxH& z&vEaRrSVLH%`y!n9dVP!+`NNj@wFw=RiwAI5s>%sdhzm5K>`}fy& zUnBoH=~V6}^4QEuO>gM($a68K?zX9gPNv(Bd!ARtNw$t`mh{i9Pkie-J!RmMX<=5d z{dHSP@SJk=ksk}OcljVdnj}C`I6wzjh&e|SK=zzZPw&1l{qZo@Z^xQ+`Qu3oYK5kKej&1-7dLw#bkx5ndUiW)MeBiTqzuUL~VqVl)aQ{DoYBdI*mHH+J}1biv0@NN*hNz2k|!v_~ygr zI@f)-LD%@_{uhyFL?|(6E@Up60^)m_=k}0HN|}0T8WAlWPyRfKSzQUK(@e(-sey2i$k3+;u;M*fNT zBS6IB?sJ#)Qu48F`^&!tp%7@NLANXxhSUC#rmd(CC| z8QZ-=AL6X+p{`e%`Pr-H8zdNmF9ZXqHxcAL@>Q^}U=Ez4uR0W{IRB#@NZdzsel;cd zx27qPh8zq%o@M08ptfzNdU629Mu5(snSLC@h8oEtwq}^CHm(aAn{=U6qBzU1rQYnm zuYyhC4H;6Ac)`1HB)$|P4Wuf|Jq{<6~TGX6#n13oO$VlGNWRl4|uxHbcbN zhun`?2*^>;llfYMT4(D`uDfmxu1hbi&(ToqurScx7_HP96e!;;CqgxYqs#b00I@mLM70QG0_#3;aSw3M^IfrIPXqOphv&VqL#zx8UK5LiREcYpF zl<+39mz*j5Ep(p>U$D_kBFAdw;gji9+n0{-$fWYS!=cRR#f|jz-W)xoH`Z~Ew<}7P z8kVnbaI?7-sZr{JqL$H7hs_5v**O`rlc?Nd35b~QTwjIHiX+Lj*_boQYIKr|SPL&& z9P_RRtKsB9=_XCHHZDzbjsR!$hxTJbFTHmLJq9~UuWu)I-OW3wyGC1c$4BGz5~cyB zusS=3?>bE#WRsljoFCrXps)F-6juYJ*;Ss{AFocKH*MpHbH=k%A6+u#N)?;xxSBpq z2R>-Euh@P-wU4yEh_$zp{D^A4YD8X?cvOLda$pH`R5;4v?y%v#o!4Zpz!d>9d|Q3h z2JZ}PHT7z`=lFP-bObF9r*esVq0b-B(ep;9#mtq=djZ-3>IP7DiLA*o{*}R5z1`im z>5LKL3Fbj92?N>6u}+Z{@!a8kp^5p zQ9$A(6q07qQl(ZjTI64ph2_aO4?w9FN@eGNGtV=7HOO2YFY3&qFE}hrv6`{HThmyf z=((?){|byV&Qso!aZcx3WA!izMjFyF)lXJh!glG?MsK_E=;ay`18geuly{nY>wnaJEY#F4ox1V`>7ngAhP&Fr)Bln-s$6Y zfPC$+A!&7y+bY846`*i+dHlMl=s^G6X~BDMt9Sj5WGrOvXkKn@@bt~S^g8wU?$*39 zb$R7e_1vMcYHm}hz2nE%_Qv*`2W%5>g6H`2ek*0?^MylS@^lr6E}_?2*SB`Zx3;^d z0mAQN&j)+F96lKD2JeXtAQk7DshSNs9i4-9&bC(G+CJPqA7?=ig9FlEqOae-TjLWV z^#B2l-$h1NiL+*bOcS(!Y)vkz3nKFAUy+}lSV(+6`OtiU z<2p}?CEfAK{i!5mnk%U}s!2-$3~j9F^o?u`jOkphZ2uG&fPlDM0e>E?j2-ofT&*mv z9RRM}B>$QL`1AZ%H$4f_zot0;O!t4kp9L8^1sH08M9p!~c^eABi35U;`EQ#?263D`8|Isn z`kN_{->R(dq}v4{sfE}-H4ufG=BOeCmHr|AKc>E57QDcKqXwUd65_v^#_-`2^BuKE z!7)#K`~N~&PNunx>@Y711^py}H!D%6RMCH``2lvnuoYMs-0_BDOLY;@cM0-KV>`)O zdn_px!EiE7)vi=YyhZLjl=NMY=1Z_T7k+BOzn`%S?UW3~!mm9uY(zk{Io!+n`j(xtJHr@MPfvk&TL!EV7 z`5qm1=szp!?sKI<-Y&v4Ya#ymH?Sa;ARlRQY@8J1>@J~F%+w0sp_r6#(O(52;5kUL z9Aq@zc7gMEK9(LDtTpl)CZCx}b>`D+6;8%_)m^)pXtpzKd!Mg8l0UXV5L0+jGZoS> z9IJDAq!(s!upy5%exZ8Y(cXGErANlHHT4#5EgDR2{%EEiM&%_~gYt^^X7^%}rRwg z?~*@hcA@F6%!3&koZL6BAI9*VQq@{x_UPGY%Uw%p^;m#$_wp$A>rM)d2r=8|j)EiJ zJd%PSB`jS!%Bm4-XIrsS&9hyf1wvvCDR9HOYv2VwrS1sHAJ@p>DK%dKDf%vwb0h zuQ$2sx0GMp-8F-G{NO>yRL4gAI*zoyxCo2i{`uy)evI=yuR(;SY_?CJ?HF=1{@ zvE(Vv1d@WX@~bmN)n^*D0NhU=yyEq1*^LKpe(0`~dD}^hiWJ~F9WNNeb#63*?R4l0 zLt=8bZ^-Q3J;+!#-k)#J1&f*Tufl!bWc$bp9Dmo|b^OAo-^2;&=bqBvxTI}1 zJhs)6N~4Z?F^@ok(B3aMdYa_jThkg-pI)e~%T`1{Gr{;;V)`T#Cv2 zbcvYJ)f_+~;)@hV;WOjTH;yVAPsU*^&f3%Tg0>r9C@<r3+v?ndY`_ELjFejB=yLgV4B(@;rQwj!dP z^3|yiemd?{}9rw6~be!TM;Qk%zi^gri$tsR&Z`%Gb<`h z5R*B`<9RPQY~uBbc+X*|hixTvDV4)g^aUH77mXL0*r8yj%iNHQnjmYXs>wH6F5dOp zDG2Wlna;u~<^&-0v}STJKxJq9yg*yiZgpEpqtWLCHdS3KYAQIBohvE+v}Z21G=3-l zpA+`O4diQJKbqWTwpoE-T+5$nRhF!f7`-vNKVj=uccRsW{b{}lO8hx`LYu0^jT1&% zs>O>quPQm?JW_yXSfPaBqs`3>sW#vwc)Gc1#|}7_W_Yh0>d?;eZ%U@&&Te2?hATSR(&x2hLX+;JC%f?3Y{+b zsM22CL|mb2k(NSlZiz+_8S8mgp=sU78dt2imge9ccwWGP`j4$d1|nQ(DvfoqcMuiR zcwu+F&3_?kRn~qRXAktFZZ0O-2jj?rme*~Rlo`M84fm+G>EowstF&SHG8g>NJX7;G z%$JeT$(VFe>E`D(2+y>nU>#bG-UU^Ib}|Bwr7DU6Mg;yda$ttc@Sz#l#UPEdUBr$` z9vG&_z4qY|>gjw*F-qG*kBs*X+0`JT>5YK?dENSSm2l0(&A4e4SzYGZPuH_>{EhGy zQ`^pMfmm%!SiCcNjl9(^M`uXZ_q1qD0nwck;JWK-#29OMV!Om2k))=Ry_P7VUrbhX zmuEC6vRN3|rZqNS7NI}sTjF%IrWy}I5op&WN+u27T>6?wu%{l zFe{z5NBO1hUGFrFU9V06ZQVRE8Y+LIiRQ@gM{cn(Fu#viv#`3@a0I!Gv2qg7(-c+_ zE__nX^0JqQJvSA4eBITuaZA|!+0;Ni(^#L8=e0q0F5`)=S~X_BGBA@x!W90*JQB%2sU6fM%W;Rid&{ z0GsP_g%Rf=(G*WCxD^{48+x9#cr8gLh25?-UDh;5j8&Nm>XwBQ*HXFlI}P@uA;#Od zL3UZD*B|}zUJBn~8RqZMR)nqHUdTtJ8;$~%^IuQNmtmK0FWCE;6&N4w2YQk$kU7&O z{;AcfKu(;Fs+D|`z59OnUb%IF5VxI7Ci9K0!#i4H?ZSW`{mIklX?-#KgYi$DaJ1`ZQsipds^MAsoKX8)%FF5I9S%UpHk3Vpd^e;FG&ptu+KTigX zQqu7k_T8+>HTgf-H{vhs%eu{+{7*Rci1G*fdJF}n#r_xg{z1U=jDKO@W#2iizYoG6 z>?`>f_Ql7w5c!9~azlS%UqetChyR0p|9@q39#N)MgDw8Vob0aGL{WsiQFljEoacG+ z`66a>MeqQpQ!sjZ`e3IN@qbwJPlOWs*O@9^-EMAX-#<7Yrlf@8;o(6TFf}$Nrlo}^ zARvH(g>_I99b-1yJ%$edwMA4755l$Z5&)e#dc$^tOo`B$bfDF1oP-tQd<^6*-UWmi z9b~p#&8X361xk3qJQ$Eof@z>#NT=Alx}Tb z5~aamvs_K={k#Jie9$<)uB&1=yMK_hv2CaJaUn zoGAAjuempQ1si;}wj3Yp_;%=)3q;)GGTK3TtK$bATe7|XCOP6_1D=9Qk1zrY?%yDR!m7vAO;q+OT()mbcU^69w4SA3w3XR<^yF?w z8);+nA7Fp0>I_JX)?(7wJHU?H-rXlO_(&7h7kbkhCMyrn?CUR~r04TNR?;%{2M@S;b07T^KAB?yr-o2w~hQ zEz7hw7!scc(XY1m>ka>d+EavpsEnZ0z0sg)%C|3o8*5y+$~!0$&kZ;i?u@b}rLM|r zQA-NO3-$Z{dC%@VuI=PB$`o`{)Me`O{SMx^PN9sP5={3nX0f5x7pw0MSW+hkuBfJn z-r(KS$U=mcXV)>llrBO30vrN-B5EAhGh&MWZ^6~x1ScriuLlejblh;v;x7MBD=vNZ zR-MMBo-SPx|(EE^o``US6kcHh0PFQ2R{yY0qjnyIj&%BG~ z!kY8%(aLcgZ_K-K#uQh05gH;q2o&T$2QU}HnkHN6-9l$dL8kBXROV_)vrjyp)EaTQ zB78y&tw-6T@{hmkXiKbNmiRR9UHvUj9FImz1Yb&H=rxk zA!|J4(ef~)f^3Esu-1?dMq394r19>8uAk`n>YWq2$pM&Wx_E(4{q%^qcO-+(tOh&t zD{4FrTsTe0_-O}**#;SI8is$$ab2N?l@JBM5D{>}`cwA(!`3E8o_71u27{zN{1FL} zZgv;|T%Z2=l`;m0cewgx22{Ty2ZOAL$a+MiVx4kf5oZz;y7jQmAHlZZ8?4{{zHXa$ zpq0WMbZF-VD0cgXru1j$4|e+}8Y_h~J!%IUhfk|Eid57Lc!}^}dDB8n0N-bm9c`tB zJ6p?~9ggV#RETR~elNzcG;Y+v6NEwaEvB%ab9=-6UPQOiiW@BQ)T&4kdN43r!h z%%teAj()aSDr+dXOtHEU<(VQFI9v7I7@9B60flIcQYPCQH=OW7JG_Ao8H00caN0q4 zCj|bOp7F%GD~CNa_h2)8Ar?fwi*U#j{Gle`#C)jEUcF&ogvMi)8-V|^WA+PlH-o~$ z$=+v$E~-UhWx34_9|1ec+=CB?4nxc}#);l_AJ3DklG+{>LqDZ;is%B*zMx!cIi`W9 z>+giuwg{>12m2Aq(MH}7d;2m4%n!q`T{fCMeTQyo9Q&0XsIZo; z$7=?+!E@EGXJ+RdF}^7!LUv-R`trNXmfnrIV6N=qz?pVWzC5;!kHP`r$e6e9633=> z1%9+<9T8ZdB)WLNz|%BHZ^mJFmY-i8Tg)4z2J%poXKPXVD@VfnA0hNz4R@sOALAQa z1}-?CI&rs8?@^~ zJA7B)*vT?o(#QI}``yUtspCfQX16%K+U86D-K3)8{mZkgZ-s~w%bU(kjN9Z0_~
`F|7~c!^u~qnic+IR7-QO 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 literal 0 HcmV?d00001 diff --git a/docs/css-style-selector-small.png b/docs/css-style-selector-small.png new file mode 100644 index 0000000000000000000000000000000000000000..758225e99f5be948fae96c7a2114a38ba2539dd6 GIT binary patch literal 31225 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�S^X#!QFN`TzT8JVwpCV6Wu``1~Q4!dHC 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 + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Craffft\CssStyleSelectorBundle; + +use Symfony\Component\HttpKernel\Bundle\Bundle; + +/** + * Configures the Craffft Css Style Selector Bundle. + */ +class CraffftCssStyleSelectorBundle extends Bundle +{ +} diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php new file mode 100644 index 0000000..bafd983 --- /dev/null +++ b/src/DependencyInjection/Configuration.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Craffft\CssStyleSelectorBundle\DependencyInjection; + +use Symfony\Component\Config\Definition\Builder\TreeBuilder; +use Symfony\Component\Config\Definition\ConfigurationInterface; + +/** + * This is the class that validates and merges configuration from your app/config files + * + * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class} + */ +class Configuration implements ConfigurationInterface +{ + /** + * @return TreeBuilder + */ + public function getConfigTreeBuilder() + { + $treeBuilder = new TreeBuilder(); + $rootNode = $treeBuilder->root('craffft_css_style_selector'); + + // Here you should define the parameters that are allowed to + // configure your bundle. See the documentation linked above for + // more information on that topic. + + return $treeBuilder; + } +} diff --git a/src/Models/CssStyleSelectorModel.php b/src/Models/CssStyleSelectorModel.php new file mode 100644 index 0000000..23f3371 --- /dev/null +++ b/src/Models/CssStyleSelectorModel.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Craffft\CssStyleSelectorBundle\Models; + +use Contao\Database; +use Contao\Model; + +class CssStyleSelectorModel extends Model +{ + const TYPE_ARTICLE = 'article'; + const TYPE_CONTENT = 'content'; + const TYPE_LAYOUT = 'layout'; + const TYPE_NEWS = 'news'; + const TYPE_MODEL = 'module'; + const TYPE_PAGE = 'page'; + + /** + * Name of the table + * @var string + */ + protected static $strTable = 'tl_css_style_selector'; + + public static function getAvailableTypes() + { + return array( + self::TYPE_ARTICLE, + self::TYPE_CONTENT, + self::TYPE_LAYOUT, + self::TYPE_NEWS, + self::TYPE_MODEL, + self::TYPE_PAGE + ); + } + + /** + * @param array $arrIds + * @return array + */ + public static function findCssClassesByIds(array $arrIds) + { + $t = self::$strTable; + $objDatabase = Database::getInstance(); + + $objCssStyleSelector = $objDatabase->prepare("SELECT cssClasses FROM $t WHERE id IN(". implode(',', array_map('intval', array_unique($arrIds))) .")")->execute(); + + return $objCssStyleSelector->fetchEach('cssClasses'); + } + + /** + * @param $strType + * @return array + */ + public static function findCssClassesByNotDisabledType($strType) + { + if (!in_array($strType, self::getAvailableTypes())) { + return array(); + } + + $t = self::$strTable; + $objDatabase = Database::getInstance(); + + $objCssStyleSelector = $objDatabase + ->prepare("SELECT cssClasses FROM $t WHERE disableIn" . ucfirst($strType) . "=?") + ->execute(0); + + return $objCssStyleSelector->fetchEach('cssClasses'); + } + + /** + * @param $strType + * @return array + */ + public static function findStyleDesignationByNotDisabledType($strType) + { + if (!in_array($strType, self::getAvailableTypes())) { + return array(); + } + + $t = self::$strTable; + $objDatabase = Database::getInstance(); + + $objCssStyleSelector = $objDatabase + ->prepare("SELECT id, styleDesignation FROM $t WHERE disableIn" . ucfirst($strType) . "=? ORDER BY styleDesignation ASC") + ->execute(0); + + return $objCssStyleSelector->fetchEach('styleDesignation'); + } +} diff --git a/src/Resources/contao/config/config.php b/src/Resources/contao/config/config.php new file mode 100644 index 0000000..8342443 --- /dev/null +++ b/src/Resources/contao/config/config.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +$GLOBALS['BE_MOD']['design']['cssStyleSelector'] = array +( + 'tables' => array('tl_css_style_selector'), + 'icon' => 'bundles/craffftcssstyleselector/icon.png' +); diff --git a/src/Resources/contao/dca/tl_article.php b/src/Resources/contao/dca/tl_article.php new file mode 100644 index 0000000..d8ef9b7 --- /dev/null +++ b/src/Resources/contao/dca/tl_article.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (isset($GLOBALS['TL_DCA']['tl_article'])) { + // Palettes + foreach ($GLOBALS['TL_DCA']['tl_article']['palettes'] as $k => $v) { + $GLOBALS['TL_DCA']['tl_article']['palettes'][$k] = str_replace(',cssID', ',cssStyleSelector,cssID', $v); + } + + // Fields + $GLOBALS['TL_DCA']['tl_article']['fields']['cssStyleSelector'] = array + ( + 'label' => &$GLOBALS['TL_LANG']['MSC']['cssStyleSelector'], + 'exclude' => true, + 'inputType' => 'select', + 'options_callback' => function () { + return \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::findStyleDesignationByNotDisabledType( + \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::TYPE_ARTICLE + ); + }, + 'search' => true, + 'eval' => array('chosen' => true, 'multiple' => true, 'tl_class' => 'clr'), + 'save_callback' => array + ( + array('Craffft\\CssStyleSelectorBundle\\Util\\CssStyleSelectorUtil', 'saveCssIdCallback') + ), + 'sql' => "blob NULL" + ); +} diff --git a/src/Resources/contao/dca/tl_content.php b/src/Resources/contao/dca/tl_content.php new file mode 100644 index 0000000..3d94265 --- /dev/null +++ b/src/Resources/contao/dca/tl_content.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (isset($GLOBALS['TL_DCA']['tl_content'])) { + // Palettes + foreach ($GLOBALS['TL_DCA']['tl_content']['palettes'] as $k => $v) { + $GLOBALS['TL_DCA']['tl_content']['palettes'][$k] = str_replace(',cssID', ',cssStyleSelector,cssID', $v); + } + + // Fields + $GLOBALS['TL_DCA']['tl_content']['fields']['cssStyleSelector'] = array + ( + 'label' => &$GLOBALS['TL_LANG']['MSC']['cssStyleSelector'], + 'exclude' => true, + 'inputType' => 'select', + 'options_callback' => function () { + return \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::findStyleDesignationByNotDisabledType( + \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::TYPE_CONTENT + ); + }, + 'search' => true, + 'eval' => array('chosen' => true, 'multiple' => true, 'tl_class' => 'clr'), + 'save_callback' => array + ( + array('Craffft\\CssStyleSelectorBundle\\Util\\CssStyleSelectorUtil', 'saveCssIdCallback') + ), + 'sql' => "blob NULL" + ); +} diff --git a/src/Resources/contao/dca/tl_css_style_selector.php b/src/Resources/contao/dca/tl_css_style_selector.php new file mode 100644 index 0000000..ee3490b --- /dev/null +++ b/src/Resources/contao/dca/tl_css_style_selector.php @@ -0,0 +1,199 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Table tl_css_style_selector + */ +$GLOBALS['TL_DCA']['tl_css_style_selector'] = array +( + // Config + 'config' => array + ( + 'dataContainer' => 'Table', + 'enableVersioning' => true, + 'sql' => array + ( + 'keys' => array + ( + 'id' => 'primary' + ) + ) + ), + // List + 'list' => array + ( + 'sorting' => array + ( + 'mode' => 11, + 'fields' => array('styleDesignation'), + 'panelLayout' => 'filter;search,limit' + ), + 'label' => array + ( + 'fields' => array('styleDesignation', 'cssClasses', 'articleEnabled', 'contentEnabled', 'layoutEnabled', 'moduleEnabled', 'newsEnabled', 'pageEnabled'), + 'showColumns' => true, + 'label_callback' => function ($row, $label, DataContainer $dc, $args) { + $args[2] = $GLOBALS['TL_LANG']['MSC'][($row['disableInArticle'] ? 'no' : 'yes')]; + $args[3] = $GLOBALS['TL_LANG']['MSC'][($row['disableInContent'] ? 'no' : 'yes')]; + $args[4] = $GLOBALS['TL_LANG']['MSC'][($row['disableInLayout'] ? 'no' : 'yes')]; + $args[5] = $GLOBALS['TL_LANG']['MSC'][($row['disableInModule'] ? 'no' : 'yes')]; + $args[6] = $GLOBALS['TL_LANG']['MSC'][($row['disableInNews'] ? 'no' : 'yes')]; + $args[7] = $GLOBALS['TL_LANG']['MSC'][($row['disableInPage'] ? 'no' : 'yes')]; + + return $args; + } + ), + 'global_operations' => array + ( + 'all' => array + ( + 'label' => &$GLOBALS['TL_LANG']['MSC']['all'], + 'href' => 'act=select', + 'class' => 'header_edit_all', + 'attributes' => 'onclick="Backend.getScrollOffset()" accesskey="e"' + ) + ), + 'operations' => array + ( + 'edit' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['edit'], + 'href' => 'act=edit', + 'icon' => 'edit.gif' + ), + 'copy' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['copy'], + 'href' => 'act=paste&mode=copy', + 'icon' => 'copy.gif', + ), + 'delete' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['delete'], + 'href' => 'act=delete', + 'icon' => 'delete.gif', + 'attributes' => 'onclick="if(!confirm(\'' . $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\'))return false;Backend.getScrollOffset()"' + ), + 'show' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['show'], + 'href' => 'act=show', + 'icon' => 'show.gif' + ) + ) + ), + // Palettes + 'palettes' => array + ( + 'default' => '{style_legend},styleDesignation;{css_legend},cssClasses;{permissions_legend},disableInArticle,disableInContent,disableInLayout,disableInModule,disableInNews,disableInPage' + ), + // Fields + 'fields' => array + ( + 'id' => array + ( + 'sql' => "int(10) unsigned NOT NULL auto_increment" + ), + 'tstamp' => array + ( + 'sql' => "int(10) unsigned NOT NULL default '0'" + ), + 'styleDesignation' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['styleDesignation'], + 'exclude' => true, + 'search' => true, + 'inputType' => 'text', + 'eval' => array('mandatory' => true, 'maxlength' => 255, 'tl_class' => 'w50'), + 'sql' => "varchar(255) NOT NULL default ''" + ), + 'cssClasses' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['cssClasses'], + 'exclude' => true, + 'inputType' => 'text', + 'eval' => array('mandatory'=>true, 'maxlength'=>255, 'rgxp'=>'alphanumeric', 'tl_class'=>'w50'), + 'sql' => "varchar(255) NOT NULL default ''" + ), + 'disableInArticle' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInArticle'], + 'exclude' => true, + 'filter' => true, + 'inputType' => 'checkbox', + 'sql' => "int(1) NOT NULL default '0'" + ), + 'disableInContent' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInContent'], + 'exclude' => true, + 'filter' => true, + 'inputType' => 'checkbox', + 'sql' => "int(1) NOT NULL default '0'" + ), + 'disableInLayout' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInLayout'], + 'exclude' => true, + 'filter' => true, + 'inputType' => 'checkbox', + 'sql' => "int(1) NOT NULL default '0'" + ), + 'disableInModule' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInModule'], + 'exclude' => true, + 'filter' => true, + 'inputType' => 'checkbox', + 'sql' => "int(1) NOT NULL default '0'" + ), + 'disableInNews' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInNews'], + 'exclude' => true, + 'filter' => true, + 'inputType' => 'checkbox', + 'sql' => "int(1) NOT NULL default '0'" + ), + 'disableInPage' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInPage'], + 'exclude' => true, + 'filter' => true, + 'inputType' => 'checkbox', + 'sql' => "int(1) NOT NULL default '0'" + ), + 'articleEnabled' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['articleEnabled'], + ), + 'contentEnabled' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['contentEnabled'], + ), + 'layoutEnabled' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['layoutEnabled'], + ), + 'moduleEnabled' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['moduleEnabled'], + ), + 'newsEnabled' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['newsEnabled'], + ), + 'pageEnabled' => array + ( + 'label' => &$GLOBALS['TL_LANG']['tl_css_style_selector']['pageEnabled'], + ) + ) +); diff --git a/src/Resources/contao/dca/tl_layout.php b/src/Resources/contao/dca/tl_layout.php new file mode 100644 index 0000000..9fc9f9a --- /dev/null +++ b/src/Resources/contao/dca/tl_layout.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (isset($GLOBALS['TL_DCA']['tl_layout'])) { + // Palettes + foreach ($GLOBALS['TL_DCA']['tl_layout']['palettes'] as $k => $v) { + $GLOBALS['TL_DCA']['tl_layout']['palettes'][$k] = str_replace(',cssClass', ',cssStyleSelector,cssClass', $v); + } + + // Fields + $GLOBALS['TL_DCA']['tl_layout']['fields']['cssStyleSelector'] = array + ( + 'label' => &$GLOBALS['TL_LANG']['MSC']['cssStyleSelector'], + 'exclude' => true, + 'inputType' => 'select', + 'options_callback' => function () { + return \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::findStyleDesignationByNotDisabledType( + \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::TYPE_LAYOUT + ); + }, + 'search' => true, + 'eval' => array('chosen' => true, 'multiple' => true, 'tl_class' => 'clr'), + 'save_callback' => array + ( + array('Craffft\\CssStyleSelectorBundle\\Util\\CssStyleSelectorUtil', 'saveCssClassCallback') + ), + 'sql' => "blob NULL" + ); +} diff --git a/src/Resources/contao/dca/tl_module.php b/src/Resources/contao/dca/tl_module.php new file mode 100644 index 0000000..662aec5 --- /dev/null +++ b/src/Resources/contao/dca/tl_module.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (isset($GLOBALS['TL_DCA']['tl_module'])) { + // Palettes + foreach ($GLOBALS['TL_DCA']['tl_module']['palettes'] as $k => $v) { + $GLOBALS['TL_DCA']['tl_module']['palettes'][$k] = str_replace(',cssID', ',cssStyleSelector,cssID', $v); + } + + // Fields + $GLOBALS['TL_DCA']['tl_module']['fields']['cssStyleSelector'] = array + ( + 'label' => &$GLOBALS['TL_LANG']['MSC']['cssStyleSelector'], + 'exclude' => true, + 'inputType' => 'select', + 'options_callback' => function () { + return \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::findStyleDesignationByNotDisabledType( + \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::TYPE_MODEL + ); + }, + 'search' => true, + 'eval' => array('chosen' => true, 'multiple' => true, 'tl_class' => 'clr'), + 'save_callback' => array + ( + array('Craffft\\CssStyleSelectorBundle\\Util\\CssStyleSelectorUtil', 'saveCssIdCallback') + ), + 'sql' => "blob NULL" + ); +} diff --git a/src/Resources/contao/dca/tl_news.php b/src/Resources/contao/dca/tl_news.php new file mode 100644 index 0000000..1215309 --- /dev/null +++ b/src/Resources/contao/dca/tl_news.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (isset($GLOBALS['TL_DCA']['tl_news'])) { + // Palettes + foreach ($GLOBALS['TL_DCA']['tl_news']['palettes'] as $k => $v) { + $GLOBALS['TL_DCA']['tl_news']['palettes'][$k] = str_replace(',cssClass', ',cssStyleSelector,cssClass', $v); + } + + // Fields + $GLOBALS['TL_DCA']['tl_news']['fields']['cssStyleSelector'] = array + ( + 'label' => &$GLOBALS['TL_LANG']['MSC']['cssStyleSelector'], + 'exclude' => true, + 'inputType' => 'select', + 'options_callback' => function () { + return \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::findStyleDesignationByNotDisabledType( + \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::TYPE_NEWS + ); + }, + 'search' => true, + 'eval' => array('chosen' => true, 'multiple' => true, 'tl_class' => 'clr'), + 'save_callback' => array + ( + array('Craffft\\CssStyleSelectorBundle\\Util\\CssStyleSelectorUtil', 'saveCssClassCallback') + ), + 'sql' => "blob NULL" + ); +} diff --git a/src/Resources/contao/dca/tl_page.php b/src/Resources/contao/dca/tl_page.php new file mode 100644 index 0000000..4f34c39 --- /dev/null +++ b/src/Resources/contao/dca/tl_page.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (isset($GLOBALS['TL_DCA']['tl_page'])) { + // Palettes + foreach ($GLOBALS['TL_DCA']['tl_page']['palettes'] as $k => $v) { + $GLOBALS['TL_DCA']['tl_page']['palettes'][$k] = str_replace(',cssClass', ',cssStyleSelector,cssClass', $v); + } + + // Fields + $GLOBALS['TL_DCA']['tl_page']['fields']['cssStyleSelector'] = array + ( + 'label' => &$GLOBALS['TL_LANG']['MSC']['cssStyleSelector'], + 'exclude' => true, + 'inputType' => 'select', + 'options_callback' => function () { + return \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::findStyleDesignationByNotDisabledType( + \Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel::TYPE_PAGE + ); + }, + 'search' => true, + 'eval' => array('chosen' => true, 'multiple' => true, 'tl_class' => 'clr'), + 'save_callback' => array + ( + array('Craffft\\CssStyleSelectorBundle\\Util\\CssStyleSelectorUtil', 'saveCssClassCallback') + ), + 'sql' => "blob NULL" + ); +} diff --git a/src/Resources/contao/languages/de/default.php b/src/Resources/contao/languages/de/default.php new file mode 100755 index 0000000..274df08 --- /dev/null +++ b/src/Resources/contao/languages/de/default.php @@ -0,0 +1,15 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Miscellaneous + */ +$GLOBALS['TL_LANG']['MSC']['cssStyleSelector'] = array('CSS-Stil Auswahl', 'Hier können Sie die CSS-Stile mit den vordefinierten CSS-Klassen auswählen.'); diff --git a/src/Resources/contao/languages/de/modules.php b/src/Resources/contao/languages/de/modules.php new file mode 100755 index 0000000..1c24ca0 --- /dev/null +++ b/src/Resources/contao/languages/de/modules.php @@ -0,0 +1,15 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Back end modules + */ +$GLOBALS['TL_LANG']['MOD']['cssStyleSelector'] = array('CSS Stile', 'Hier können CSS Stile mit vordefinierten CSS-Klassen erstellt werden.'); diff --git a/src/Resources/contao/languages/de/tl_css_style_selector.php b/src/Resources/contao/languages/de/tl_css_style_selector.php new file mode 100755 index 0000000..ed65ea8 --- /dev/null +++ b/src/Resources/contao/languages/de/tl_css_style_selector.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Legends + */ +$GLOBALS['TL_LANG']['tl_css_style_selector']['style_legend'] = 'Stil'; +$GLOBALS['TL_LANG']['tl_css_style_selector']['css_legend'] = 'CSS'; +$GLOBALS['TL_LANG']['tl_css_style_selector']['permissions_legend'] = 'Berechtigungen'; + +/** + * Fields + */ +$GLOBALS['TL_LANG']['tl_css_style_selector']['styleDesignation'] = array('Stil Bezeichnung', 'Bitte geben Sie eine Stil Bezeichnung ein.'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['cssClasses'] = array('CSS-Klassen', 'Bitte geben Sie eine oder mehrere CSS-Klassen mit jeweils einem Leerzeichen getrennt ein.'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInArticle'] = array('In Artikeln deaktivieren', 'Bitte wählen Sie dieses Feld aus, um den Stil in den Artikeln zu deaktivieren.'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInContent'] = array('In Content Elementen deaktivieren', 'Bitte wählen Sie dieses Feld aus, um den Stil in den Content Elementen zu deaktivieren.'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInLayout'] = array('In Layout deaktivieren', 'Bitte wählen Sie dieses Feld aus, um den Stil in den Layouts zu deaktivieren.'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInModule'] = array('In Modulen deaktivieren', 'Bitte wählen Sie dieses Feld aus, um den Stil in den Modulen zu deaktivieren.'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInNews'] = array('In Neuigkeiten deaktivieren', 'Bitte wählen Sie dieses Feld aus, um den Stil in den Neuigkeiten zu deaktivieren.'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['disableInPage'] = array('In Seiten deaktivieren', 'Bitte wählen Sie dieses Feld aus, um den Stil in den Seiten zu deaktivieren.'); + +/** + * Labels + */ +$GLOBALS['TL_LANG']['tl_css_style_selector']['articleEnabled'] = array('Artikel', 'In Artikel aktiviert'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['contentEnabled'] = array('CE', 'In Content Element aktiviert'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['layoutEnabled'] = array('Layout', 'In Layout aktiviert'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['moduleEnabled'] = array('Modul', 'In Modul aktiviert'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['newsEnabled'] = array('Neuigkeiten', 'In Neuigkeiten aktiviert'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['pageEnabled'] = array('Seite', 'In Seite aktiviert'); + +/** + * Buttons + */ +$GLOBALS['TL_LANG']['tl_css_style_selector']['new'] = array('Neuer CSS-Stil', 'Neuen CSS-Stil erstellen'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['edit'] = array('CSS-Stil bearbeiten', 'CSS-Stil ID %s bearbeiten'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['copy'] = array('CSS-Stil duplizieren', 'CSS-Stil ID %s duplizieren'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['delete'] = array('CSS-Stil löschen', 'CSS-Stil ID %s löschen'); +$GLOBALS['TL_LANG']['tl_css_style_selector']['show'] = array('CSS-Stil anzeigen', 'CSS-Stil ID %s anzeigen'); diff --git a/src/Resources/public/icon.png b/src/Resources/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce009edcf2782ca048a65dc3d88c8a32c5121fb GIT binary patch literal 1241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nAI{vB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuU&_u!9QqR!T z%-qskN5Kfl*Eg`xH!{#Qu(UEYwlXkMfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz{qpj1 zy>er{{GxPyLrY6beFGzXBO_g)3fZE`@j@w*YQzUNJP7fB~jokyxN_sAmB35=^15FMg%Dxp39RB|)hO_hL1;IHa;5 zRX-@TIKQ+g85nVC${?!>telHd6HD@oLh|!-V4)b0kzbNuoRMFk;OqDbScNdMzG^P)5m(IAF?639{kMQR~qyb&M99Ca$Iriy+h1Fj;~B7 z(iDYa`HMOY&Ty}omCYLna+RS`-`ru_Af5|$hBWChR zKiEZnzgW^@EFkC*-1qSQU3Z@HWqD~2QWM%beD89LRWH`$HTfjZ$joz9@}Eup(F43! z&am?*CuG>ypH)a$;o8DD%ZtZ;-95Hrg37CYOrFj&XVxj6`y5gma;%wGcZ=R&)i@B+ z{_y#xTnFZVLIw;RH&k6D?-~Db6lLkEt^7UDv88cp1LFaP-^Cw9n%~@=%CT`bx1>bF z#!rPu4HH%@sNzj`Vsd?`zM$Ata>s!`uN{tmX56cK_CTMhqOMyxhliq%u|-Z}j>=gD z19nUOhDov~ayMSs(#OB2Ju0I64eKUGhXzK5oBI<#?78od3@U6qUHx3vIVCg!00=gs ARR910 literal 0 HcmV?d00001 diff --git a/src/Util/CssStyleSelectorUtil.php b/src/Util/CssStyleSelectorUtil.php new file mode 100644 index 0000000..9e38594 --- /dev/null +++ b/src/Util/CssStyleSelectorUtil.php @@ -0,0 +1,268 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Craffft\CssStyleSelectorBundle\Util; + +use Contao\Database; +use Contao\DataContainer; +use Contao\Input; +use Craffft\CssStyleSelectorBundle\Models\CssStyleSelectorModel; + +class CssStyleSelectorUtil +{ + /** + * @param $varValue + * @param DataContainer $dc + * @return mixed + */ + public function saveCssIdCallback($varValue, DataContainer $dc) + { + if (!$dc->activeRecord) { + return false; + } + + $arrCssID = $this->getCssIDValue($dc); + $arrClasses = $this->getClassesFromCssIDAsArray($arrCssID); + + // Remove all known cssStyleSelector classes from cssID classes + $arrClasses = array_diff($arrClasses, $this->getAllCssStyleSelectorClassesByTable($dc->table)); + + // Add all selected classes of CssStyleSelector to the classes of cssID + $arrCssClassesSelectorIds = $this->convertSerializedCssStyleSelectorToArray($varValue); + $arrClasses = array_merge($arrClasses, $this->getCssStyleSelectorClassesByIds($arrCssClassesSelectorIds)); + + $arrClasses = array_unique($arrClasses); + + $this->saveClassesToCssID($arrClasses, $dc); + + return $varValue; + } + + /** + * @param $varValue + * @param DataContainer $dc + * @return mixed + */ + public function saveCssClassCallback($varValue, DataContainer $dc) + { + if (!$dc->activeRecord) { + return false; + } + + $strCssClasses = $this->getCssClassValue($dc); + $arrClasses = $this->convertClassesStringToArray($strCssClasses); + + // Remove all known cssStyleSelector classes from cssID classes + $arrClasses = array_diff($arrClasses, $this->getAllCssStyleSelectorClassesByTable($dc->table)); + + // Add all selected classes of CssStyleSelector to the classes of cssID + $arrCssClassesSelectorIds = $this->convertSerializedCssStyleSelectorToArray($varValue); + $arrClasses = array_merge($arrClasses, $this->getCssStyleSelectorClassesByIds($arrCssClassesSelectorIds)); + + $arrClasses = array_unique($arrClasses); + + $this->saveClassesToCssClass($arrClasses, $dc); + + return $varValue; + } + + /** + * @param integer $intId + * @return string + */ + protected function getCssIDName($intId) + { + return 'cssID' . ((Input::get('act') == 'editAll') ? '_' . $intId : ''); + } + + /** + * @param DataContainer $dc + * @return array + */ + protected function getCssIDValue(DataContainer $dc) + { + $arrCssID = Input::post($this->getCssIDName($dc->id)); + + if ($arrCssID === null) { + $arrCssID = deserialize($dc->activeRecord->cssID); + } + + if (!is_array($arrCssID)) { + $arrCssID = array(); + } + + return $arrCssID; + } + + /** + * @param integer $intId + * @return string + */ + protected function getCssClassName($intId) + { + return 'cssClass' . ((Input::get('act') == 'editAll') ? '_' . $intId : ''); + } + + /** + * @param DataContainer $dc + * @return array + */ + protected function getCssClassValue(DataContainer $dc) + { + $strCssClass = Input::post($this->getCssClassName($dc->id)); + + if ($strCssClass === null) { + $strCssClass = $dc->activeRecord->cssClass; + } + + if (!is_string($strCssClass)) { + $strCssClass = ''; + } + + return $strCssClass; + } + + /** + * @param string $strValue + * @return array + */ + protected function convertSerializedCssStyleSelectorToArray($strValue) + { + $arrIds = deserialize($strValue); + + if (!is_array($arrIds)) { + $arrIds = array(); + } + + return $arrIds; + } + + /** + * @param array $arrClasses + * @param DataContainer $dc + */ + protected function saveClassesToCssID(array $arrClasses, DataContainer $dc) + { + $strCssIDName = $this->getCssIDName($dc->id); + + $arrPostedCssID = Input::post($strCssIDName); + $arrPostedCssID[1] = implode(' ', $arrClasses); + $arrPostedCssID[1] = str_replace(' ', ' ', $arrPostedCssID[1]); + $arrPostedCssID[1] = trim($arrPostedCssID[1]); + + $dc->activeRecord->cssID = serialize($arrPostedCssID); + Input::setPost($strCssIDName, $arrPostedCssID); + + $objDatabase = Database::getInstance(); + $objDatabase->prepare("UPDATE $dc->table SET cssID=? WHERE id=?") + ->execute(serialize($arrPostedCssID), $dc->id); + } + + /** + * @param array $arrClasses + * @param DataContainer $dc + */ + protected function saveClassesToCssClass(array $arrClasses, DataContainer $dc) + { + $strCssClassName = $this->getCssClassName($dc->id); + + $strClasses = implode(' ', $arrClasses); + $strClasses = str_replace(' ', ' ', $strClasses); + $strClasses = trim($strClasses); + + $dc->activeRecord->cssClass = $strClasses; + Input::setPost($strCssClassName, $strClasses); + + $objDatabase = Database::getInstance(); + $objDatabase->prepare("UPDATE $dc->table SET cssClass=? WHERE id=?") + ->execute($strClasses, $dc->id); + } + + /** + * @param array $arrCssID + * @return array + */ + protected function getClassesFromCssIDAsArray(array $arrCssID) + { + list($strId, $strClasses) = $arrCssID; + + $arrClasses = $this->convertClassesStringToArray($strClasses); + + return $arrClasses; + } + + /** + * @param array $arrIds + * @return array + */ + protected function getCssStyleSelectorClassesByIds(array $arrIds) + { + if (empty($arrIds)) { + return array(); + } + + $arrClasses = CssStyleSelectorModel::findCssClassesByIds($arrIds); + + return $this->convertCombinedClassesToSingleClasses($arrClasses); + } + + /** + * @param string $strTable + * @return array + */ + protected function getAllCssStyleSelectorClassesByTable($strTable) + { + if (empty($strTable)) { + return array(); + } + + $strType = strtolower(substr($strTable, 3)); + + $arrClasses = CssStyleSelectorModel::findCssClassesByNotDisabledType($strType); + $arrClasses = $this->convertCombinedClassesToSingleClasses($arrClasses); + + return $arrClasses; + } + + /** + * @param array $arrClasses + * @return array + */ + protected function convertCombinedClassesToSingleClasses(array $arrClasses) + { + $arrSingleClasses = array(); + + if (is_array($arrClasses)) { + foreach ($arrClasses as $k => $v) { + $arrSingleClasses = array_merge($arrSingleClasses, $this->convertClassesStringToArray($v)); + } + } + + $arrSingleClasses = array_unique($arrSingleClasses); + + return $arrSingleClasses; + } + + /** + * @param string $strClasses + * @return array + */ + protected function convertClassesStringToArray($strClasses) + { + $arrClasses = explode(' ', $strClasses); + + if (empty($arrClasses)) { + $arrClasses = array(); + } + + return $arrClasses; + } +}