From 4aac4837f27c1df2fdfc6b8999c4e22a022b3a66 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 25 Aug 2020 14:42:51 +0300 Subject: [PATCH 001/376] [PE][SSE] Bug 44511: update help --- .../en/UsageInstructions/InsertEquation.htm | 6 ++++++ .../help/en/images/convertequation.png | Bin 0 -> 17210 bytes .../ru/UsageInstructions/InsertEquation.htm | 6 ++++++ .../help/ru/images/convertequation.png | Bin 0 -> 21148 bytes .../en/UsageInstructions/InsertEquation.htm | 6 ++++++ .../help/en/images/convertequation.png | Bin 0 -> 17210 bytes .../ru/UsageInstructions/InsertEquation.htm | 6 ++++++ .../help/ru/images/convertequation.png | Bin 0 -> 21148 bytes 8 files changed, 24 insertions(+) create mode 100644 apps/presentationeditor/main/resources/help/en/images/convertequation.png create mode 100644 apps/presentationeditor/main/resources/help/ru/images/convertequation.png create mode 100644 apps/spreadsheeteditor/main/resources/help/en/images/convertequation.png create mode 100644 apps/spreadsheeteditor/main/resources/help/ru/images/convertequation.png diff --git a/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertEquation.htm b/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertEquation.htm index 83bebdcaa..0664c8c50 100644 --- a/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertEquation.htm +++ b/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertEquation.htm @@ -89,6 +89,12 @@
  • To delete an Accent, you can right-click on it and select the Remove accent character, Delete char or Remove bar option from the menu (the available options differ depending on the selected accent).
  • To delete a row or a column of a Matrix, you can right-click on the placeholder within the row/column you need to delete, select the Delete option from the menu, then select Delete Row/Column.
  • +

    Convert equations

    +

    If you open an existing document containing equations which were created with an old version of equation editor (for example, with MS Office versions before 2007), you need to convert these equations to the Office Math ML format to be able to edit them.

    +

    To convert an equation, double-click it. The warning window will appear:

    +

    Convert equation

    +

    To convert the selected equation only, click the Yes button in the warning window. To convert all equations in this document, check the Apply to all equations box and click Yes.

    +

    Once the equation is converted, you can edit it.

    \ No newline at end of file diff --git a/apps/presentationeditor/main/resources/help/en/images/convertequation.png b/apps/presentationeditor/main/resources/help/en/images/convertequation.png new file mode 100644 index 0000000000000000000000000000000000000000..a97a5bea221f7b28fad43c6411647cfca8b5f515 GIT binary patch literal 17210 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 TMk4Tg7c@`RbW|%IT8IBP+ag|v literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm b/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm index 3367087e6..0bd2610af 100644 --- a/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm +++ b/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm @@ -91,6 +91,12 @@
  • Чтобы удалить Диакритический знак, можно щелкнуть по нему правой кнопкой мыши и выбрать из контекстного меню пункт Удалить диакритический знак, Удалить символ или Удалить черту (доступные опции отличаются в зависимости от выбранного диакритического знака).
  • Чтобы удалить строку или столбец Матрицы, можно щелкнуть правой кнопкой мыши по полю для заполнения внутри строки/столбца, который требуется удалить, выбрать из контекстного меню пункт Удалить, а затем - Удалить строку/столбец.
  • +

    Преобразование уравнений

    +

    Если вы открываете существующий документ с уравнениями, которые были созданы с помощью старой версии редактора уравнений (например, в версиях, предшествующих MS Office 2007), эти уравнения необходимо преобразовать в формат Office Math ML, чтобы иметь возможность их редактировать.

    +

    Чтобы преобразовать уравнение, дважды щелкните по нему. Откроется окно с предупреждением:

    +

    Преобразование уравнений

    +

    Чтобы преобразовать только выбранное уравнение, нажмите кнопку Да в окне предупреждения. Чтобы преобразовать все уравнения в документе, поставьте галочку Применить ко всем уравнениям и нажмите кнопку Да.

    +

    После преобразования уравнения вы сможете его редактировать.

    \ No newline at end of file diff --git a/apps/presentationeditor/main/resources/help/ru/images/convertequation.png b/apps/presentationeditor/main/resources/help/ru/images/convertequation.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad46ae4e51e77aff57c7c129a9d47ec18d777a4 GIT binary patch literal 21148 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 literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/InsertEquation.htm b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/InsertEquation.htm index 298f804f3..52ecb4340 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/InsertEquation.htm +++ b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/InsertEquation.htm @@ -88,6 +88,12 @@
  • To delete an Accent, you can right-click on it and select the Remove accent character, Delete char or Remove bar option from the menu (the available options differ depending on the selected accent).
  • To delete a row or a column of a Matrix, you can right-click on the placeholder within the row/column you need to delete, select the Delete option from the menu, then select Delete Row/Column.
  • +

    Convert equations

    +

    If you open an existing document containing equations which were created with an old version of equation editor (for example, with MS Office versions before 2007), you need to convert these equations to the Office Math ML format to be able to edit them.

    +

    To convert an equation, double-click it. The warning window will appear:

    +

    Convert equation

    +

    To convert the selected equation only, click the Yes button in the warning window. To convert all equations in this document, check the Apply to all equations box and click Yes.

    +

    Once the equation is converted, you can edit it.

    \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/resources/help/en/images/convertequation.png b/apps/spreadsheeteditor/main/resources/help/en/images/convertequation.png new file mode 100644 index 0000000000000000000000000000000000000000..a97a5bea221f7b28fad43c6411647cfca8b5f515 GIT binary patch literal 17210 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 TMk4Tg7c@`RbW|%IT8IBP+ag|v literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm index 4d33edbeb..ec7c53177 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm +++ b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/InsertEquation.htm @@ -90,6 +90,12 @@
  • Чтобы удалить Диакритический знак, можно щелкнуть по нему правой кнопкой мыши и выбрать из контекстного меню пункт Удалить диакритический знак, Удалить символ или Удалить черту (доступные опции отличаются в зависимости от выбранного диакритического знака).
  • Чтобы удалить строку или столбец Матрицы, можно щелкнуть правой кнопкой мыши по полю для заполнения внутри строки/столбца, который требуется удалить, выбрать из контекстного меню пункт Удалить, а затем - Удалить строку/столбец.
  • +

    Преобразование уравнений

    +

    Если вы открываете существующий документ с уравнениями, которые были созданы с помощью старой версии редактора уравнений (например, в версиях, предшествующих MS Office 2007), эти уравнения необходимо преобразовать в формат Office Math ML, чтобы иметь возможность их редактировать.

    +

    Чтобы преобразовать уравнение, дважды щелкните по нему. Откроется окно с предупреждением:

    +

    Преобразование уравнений

    +

    Чтобы преобразовать только выбранное уравнение, нажмите кнопку Да в окне предупреждения. Чтобы преобразовать все уравнения в документе, поставьте галочку Применить ко всем уравнениям и нажмите кнопку Да.

    +

    После преобразования уравнения вы сможете его редактировать.

    \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/resources/help/ru/images/convertequation.png b/apps/spreadsheeteditor/main/resources/help/ru/images/convertequation.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad46ae4e51e77aff57c7c129a9d47ec18d777a4 GIT binary patch literal 21148 zcmcG$cQ9OU{688YdX4CvgoLosi58vcAw;x@=%PklY{Y8Of(RmrPK4E>msmA=5OuBI z%j&yWyZ88fe>1K0R>ioonJZ%?~cJrxu zES?Q|)dVIQ7$fO<4TRjAfk7DONoCd8qRpZzcxSHLIGE7WFU6 zm6@MLqI$3qv?|eYx!Dln2Stu|e=w%{59MXI)1D_CjBt08LY^l)kLquBFbbqFVlKV9 z-j?`--o6kt2**-TfsQK*IZ3*7nw{wTJe=W}&5-r)E$cIblNraHnBgPiOmq=XYCSDO z;WQcK_VxAvDoF==2pddw{KFZ`}n6eIZX_c%MEUft1)Ir4#Gpuw*=a@ zG$_d>!$+!x(Bix%#+mZuS&x}~IqCVA{@N{s@R=En-<_x7QJeohEeaun7=cR4Zf>k3 z7Hc}re6K)~@ThfvI$+969{eghF6n{f6(i$O+cO?~qjdf0?VmR7NGgtt2G_rNfp7Sr zw5KFw5FSB-50Jlk5$?rVcY!hSC5b<$Fw$!|S*F;WF?aSNys?S#H5JL&~Fe3S5HPtpNO$wtG~OTtiQMrkd0} z`IAL%>41Z9_pPye`)~@7r}SAnlIs9bGtwXg!#0AKV|b8m@(RJ}mj|6Rh^Et>`R^qA zKK|GqISs0~)qc!WUCpf`uN-{40NWbh7c$ERLSUwVFBPsi0=@af~} zy?=$V7Og?Q(CF@uAOtAXs};PO#DkML>hox@v9uWb1l;@|PvADuyn)!mUc@aX>}U?` z01nyF#Ya#uT`bf!qn0W#Ic12?e^RW_`w9p-6n2gyXmbi7P~*^;eYuCa`rS;A^o`;O z4R|AHd%Qjrdi9}`S`Kl#X;huiL7zzDwXl1vS3l?ew#A&3=P3938b2*T*w)+7tv-Ay zK0;Nh3luR!Hs8oa%xhtOYJU& zt}G{5I@|(AgKMh6%T8%u$$y_6z2}j$`&Gg@*(Y_F22*TL}A4V|YCTnsOLz*% zMmj#+dN$X&+nbuVy6KvUunNJG8-aC($!zS>n(O2kL*9w310$xC=fEPOb@$8tX)a2d3IKK4)f)K7p z?thhf%Q|BMI<&glzGOX$WdfavU-=`vG(9v54eV?a{q_)GS!G$TvAgK=jpKP5NI>q+ z{G}nPxTs2OLx?cb?Zv~xEZo_AeKEdu{cClzh*)5f<0g3H^I%p0&s1!Vv`0lVW*L9B zE(bwd)caQu{HsU#x1MwH<@f;g<4pCg=T3RMUvYL&lN@GIwdEWMMh$oW%8@(l@&MQ5 z3WunFdElo60ctfV1E0mWB96n4DKYM58>}}N2yCD28b#}6N}U_53;syPVUI_yK&{&b zjw5FqzX(!p=pD3QO=j-T`}a16(`@Z+(0)s%cbKwSSjh6a@JDo^k;kE|L}XSUOSwWe zsUMe^z45Lv?oHU=t6w;Yl@FUS90L4($#JQEdbB*d3cDn~em+Axk#) ziJe#V@BTc)XDLx7OS+mi&(tU#s@@_Y{!mo`--zbRfedpo*zV2#a_{(1ZHM9ThI28` z;YT*`ha2TD_jVz<_5-FkrhjdXQMDsv_?bqr0@5S z>{LCAVIo{8o8y%{PjC%2GL`&BB!~xU5!~QYezA=G(dB*@y@9vV`5*iJn)73C=a(xz zZD%g}(+iskkAEcM+i(-c`sgXKNnBYbWaR>lPo27PS5K@=+i%vn*fM`Z1V4l);R;>c zZ#k~tA2)Dp&an(K&zQlbu8kxrKARA=>*@W=z~I;=-Z>AqwEM}66&Qm0Y5O&SYxB@PL7)?sQnE=6mMM+@Zhbo^wGV=@ zZ14Ax{Q$bpWsI4bO-MxZVUJCth}Bs_uqh4Yt?vwvm{se%-qhR2PTikle_xEdc%vT> zx~>2Cd_qjnjv|~mGVIIJ0zPzrirG{1P0FwxB(w|EWjr3}kC#?2I;!ld)Z-lN z^>6br%>YsUY$1<7A3w%liW^)Ww=G;{Q2R-zy5;f!UsUM9JDDDv0Da^K85ghG%Lq4>Ads7)p?aBf(z#f$@oVf8`yT-NMV%o zz;Dn7t`vU9ShnrztR3-JlgmQz&G`f>j0CqzOpVP)c`@*c{2rgK*BtR~#bbU&@MEpc z#&a4dKo>^(C2k>$DNv;kIo7Bv8u>dj1;%NPNleB#hQb$1Icn-qJo+*Vr7u&psza){ z(|oxvcO@>lF+Q`8ZalWZ9XSB)z^dhPx(e3VezjNn%@cIa`+@Hrm+0$;%gy{!>lJ!l zpt;)?oH50Wf)UL+Q+=x~UooyxoTfY-of|JA5`tCcqZ79j=}+aCXdn%}QKFb!W%obH z_mbXyqc(>U9G9${P$GS_ZBnp>*bZaZi^@i40)c#l)IvV6`ycdUWA3fiYQl} zYHek*2cl)L$04 zv*&1dEZ(z~dVB3`0sjOB=aLTnCU@{VJUG#NW3qgHAyR2=5@xYcHx~+qaM)H-dSpty zZFP8W(A&lqZyZ~G@T;rek|mK1pD-sq#ccPic+bd?(vmAQQafLS7bcEc3No zohfm9&p#C%@lO-Er%IwCA;BNg^80kwap&2pGtj~BCWIZmmCX5m7&vbra^;-Y^o=}p zLJ0p(++p~g)!BCPPV3%ks3-E=J&MCGI@lxulaALG$l8ujOfTZTBNb;9S)bMM!~GhGxtwJ;zlXOrGAH+78wGUX`MsPus_z*| z&X96}%lFs*6pYmple*qJFn=TS2gJp?0)Xk;xV*8{m2es)iduHHtgW|4`t0g*;d9w& z{V;vWL$4(pC%DaRMh%%I*kcxj3p|3}Kz?0d@Na&|&Jd(gBcAor07FUtiB#$fk#(bY zq1?r$9d`P3+yFmxHG;R?i?9#j6Tu4kwEv(7kaa(RR*js~??f*a7i)OH1c@NeJ7pkx zmA0KhN)%b$pQvRE>UX9~Ys~V;Nk#P)&rLvg%-0gkww?N4gyp=OrRW(qkbd@2u5{FW&o3T4TvbXQKZ1&q(e_7}B+#xCNQ>n4i zNvOrG<|%-2J->$VE;rhyJpSgXZ?PUXquQE1ZnP*lCrd{?s=D?+g|zf)MyaSx3xt` zC1mqly5NX0FYnR1&0rja3{Uw?i|XZ^%b2J5x8S?NSr$yCJ8M>S+nue>T5G~;>JLmY zI(wjPcG85`)JDg5=c5W#NsZ(-0g?;w|GT`u0NSk~EchSo=Ka=jhr>7;Pf&Xv}RJs#180w(I zxtYW0)s;e^1vAbpPHCxtRQ8EjH|*(fosTfKfuJ&V?B6S zkWPpOFMG?63}-HPuK)7OpyUh`G^lh3cTNi3O-OEz(%iI)%7 zS+57ejqMyN`+4hc@wZ;*lbTGf=_4Bf^cnHQEzh(Ep_n)*};mric%xss#&Q&K|qyMLmP3Ok_x9>J5|Dv?pw4p{q8u`^Gf&xOnyZ$#6;H+|h+9EzxYAi5SpiN)zwW8qx zy8gZ<5^wN$k)AuUB@ifDzJ=a$BG@ZlCG8Jfv{*2zwZ1-OkqJ1ZZK*z&H&WGXEbdUT z?EFD;NG{)x&>-y26b$VL{25xp#oe5=)OR$LDGhEmM5bBH<=7lY|FF3p=u?`MrCdwt zK${_*}IaPo}%aLE-C|laJ!$Lb;ZsFB`Z$s(L&Q&u+A##KH z*JH9R?Zq-;B#5Q*xqhd1B_J{-3o1UNQTXpB%85sd5Wx{~i{{fXj_+@bFN&Xy;zdh~oZgih)RtHAHmqtK@*NO&dbe9Wm{( z+4%!f$aeYuN+m!r z0}fxqJ^)J5e9JsQezrzNNv)=05_*0y!X z>2rv?=bl$D$Ht1&cu~CEUhQ~`g2S@P+#|o;Y42Im*c4L*Tfcoo;{?qHqds%7Gf44r zSKPyYRGFlakVbyAIIW@me8}U%=ZGVcG)U$2lj!S%$GA8skw(qv-hHj4Hd?p>XMJ{zO;D8fkQ8$Rj4zMRR)8^fLq~>?n z&D87xxtwdGd*rpOwm=)ORhVW8h&S^FkPBnrH?Ki&RkT{G1d0!B$eaKU(;&In@4bDlj3m7{K*&ai;Cqf}S`PyG7( z%Dt~DhSsa%tK$Yrr|sHXzvllyo%#;4&0#tIU&DQN$BzE*v6CdN}j zn|H0r`Oo{N<&=bHSj)FseRs@~aMx5NuziYxtPf`3zG)CGG3g*c3jWJniop#4e`%gC z&`xQ|_@kt|sjwW)hp_NyU1Q^zGz7Fez7QEFDeecYP81E1b_a_c?u);}+=su(D&i$r zUjc1-|N1sMvvdWbTG7Fr+EGcMR?|=w36lUA^NQxQ_)?;1DD`kvCzaB30$$4F? z9bFPZ1-eDKj)_g*!n1##eqe#M0Yw6#$rZBt4?#(m{!)RAfBH6mR4F!=1En$d1orA^ z^^bJ}KvU=y&sXU|qg){;Mv(9Bn%#--9k2_F?76xZe~jBsW*^-O%@BG5!j~3j3ubMS z7AWaG2gnGs%KLzz456xWK?9!c#}dEMa~?|m{SS&iv+%F7%OMVGgrQ>AL(V*c%D`-I zskC!=tP;y|*-{{o^)8tSi(Y`V=g{`LLHPIn4roNYRlRwQ@tkSW85PpE+rceCW+bF<=#wd# zrZL7Qwek%cHFX?20}a_^N*)t}mb{!eX3G08s#7EoTS*?_rl`yITar|oueP31 z7G}6sOaSZyEm5j`D5Dd1Jn(F;uFn9;fTLD88Qt^-wp5vro-T=Hz%9dVT>fw0pbEc+ z4}E|V^RVfVeyp~(LL*hgazC_b{0aK0ykuVr+h zVbi?cb{NISbbTcz&>$Xcy&DGc7IWgCR0^f?+4r`X97)twiT?N~;NX?C>*T|Fw;3^X zT08b$HACLnV&G~c6llXUnd+xTASnJKL%K;g(^S3a_9Ix1uko87fdJ^(aBo;5_J@-R zU{(N6=7gb?_B0GY9>Z2XLz4U7e1^R)cWVsZ2&wH=p^@O`e`RKu7bm}_tbI5hzl*k1 z^Br~CovyO*ZUCTJnylZvubKa5Zj=VnB~edEpg|IK_DB12C`nI?uYTOj#$WGch@{vQ zB`IzJyDr@pJp6d)p@(!RHUOB?=tjU)7}x`V1ycX|hU$IN(@7KYjc1kg*83{q70)Iu zBFl?@+|O8#TPb@+q_h}Xh%eV(AIU*|mG;;NX!B}c&w1qUt>T>h|EB#7r<=M$uSlc` zo=*by$lj3i><93EW3R&Tpm@@sb06vo&ACUfe!usg>XoGXX2(>&!OhOiDJKo_^1-r> z8DJa23(0(#vs0CG50bgRHM9p$WkUM@nM53dKaIriggx40zkfW+UL@3_#FLv7jN?Ah zL13t0YuqCPX&_LFzmSJeia<_q^+^W#3f~|`@=1$n=;7s^WDw{auHoyt7At!<+p%IL zuo~P6nmURF2PkYD9^7a*v-FBcO!MpnQ`vrV4qPNXrt|M~JNrTmZ`yC#!O~r5b8JcZ1XwW}ywG?O`e>thiruyq zF1d82#Y;JIZp{nhh{q=OFm2`R~f%2q9R@ za+BZQwtM3mqdzimBTyWNYB?VErok9#a;$N2@5&Ydc<%}>hibWof9637@l@Oi^ZpC- zbM&YWwBU`~>x&9Qf;#>zW-LDd*uaH_yIMPJd zNNSFkFaLJ&gh1nMCepgskJIfE4%e?6ZWf?kMJ*=;PBV zn?&8U3~7&S2%0n#y|Wa>b%y>bvvZZ1@TJAb8Ij82yBnqFK7hwD^0-CU22O^ED zx25fRC;<>Z3kWLm6Xh>|9i_@2R6a|}*Cwq>OZOZc>S=%Mzi+vIVW4>46$L(DOS>d= z3g*U)J^8dKKm}j1|4w(4gx&M~&fokfGY$qq5DC>6yF`V_%vh=sL8W6&K34#sDVCeK zx3ri9`zhESRUhB9P^E;J65Ly(hhXZLSR3}ku4dGSXR}c9g6Y)O$uw65&pORu__+a`smiW}e-AJwn(; z(G#vAlpRH0@-78l%q#ux4vkPbBs?uHGDgx+U;eOb>_FF^rJZ=$-PBn>{ZYrv@`6GROV*4wT_az%ndp7U>sw1L2NT;y2m^ zrU6W0fU#a7-0P?KlW+oM`*=aEGQJ}P^pf0=kL?GEpK{AnhN06-kz5Gf-~6qbz)9$3 zX?`P}dHoyKiZ;#emcP^xMfr`1C!-Yq8g692GRSyV=bQBS0k-}peh|{{DB)6_GFLI= z40O~zKe>C3?Z3t@y!YqrStd|CS#9Qg0|e(b^$Hguiqkjj-xfLo=kty z9@=WgHtTs41QOH=m-zdrgG!QN+mwhLx?Os}I_5kzZJTOU!n=C$37Eo{Ov$GHT5Sh$ z1=hk{dn=%aYkIKt1i5`rpsm6{X8jKJ^M0|xZnvbZO$Mab{+1dS_xYBwrW2lWcd@a( zx_LLIQn%DoRs|SlqQD`4j}F1+O3P&i)0U+SzntZQwR;Z*5-OSQe2LFu>aS^)n@o|= z;zJRnIw|&Ll4WDS_JNh1wfA+tJUm3bVL#Fe(k*0z^!$-SIX>ffbtlMSY%G?Xb@!^; z@e%dX_ycBzpxX8g+s1qU=m2A09l4*p{v+? zl8$F*bcePdwxOn?G>_tMgp-F?FKAJ`H*TlV6 z#F-iT!}xpg9TbNt(bx&8-|e?cN=I1Vc#wH z+Eku#R2>h?foqI*eR7CT=|@;cm<%;O3p)>M0?#o`V>+=jJ1hCs#pyBCjeWCRMQ4FWn63U@KIO;&wEuxZ zBwBZCl&>(E-z}R&hsNG>w&Rx+ zk7P{ni0;cEZMK_{m9VC5LD0l~ai{@1D}{XXp@!2l4&@M)bmx(f;QNWSb62|XZLw{I zid_B9xDX!TDW6qltD{inK2B9`i@de;SF1qNdUGbxcynGqsC{go{_9Kro@MK)QoDt7 z4=-2bl|u!AVVmSU_8_L>P+x)9xI(#7YDy^d@;4Bc;ui)tXHj37?f*22QCEl{;qaXt z0o186rilIzrn`W6m5%Nne0-u-O53@ScBGc7ea}Mo)^n~W+?7b8RI{P>vOk7rCk0x@ zdSRZg8a9eD-37OiMG6!xHWC$XFTOXGI0cPskr(Gq(*0Bk9Mcx~x7lpLv;gb>Ew0Q5 z(}!%}*ES6J$wQy;(N=H8*5}n!SKc2@%b|(aJ*BsH3DQ52Nq*U<678lMp>J?!NKKEt zYxZ{#mP#Q4M9J(fgO#Uz$3s_nU8VZ@FZERVom9h@hGu5HWjq&dRN<(U-l0}OP&I3r!JODX| zT#MdjoupmP*IslcAK#H0Y?Wr(-|YiD8x_)geNz0XIIQp%ZN{_d7R9L>n3C0ZL%qmv zX_f&yj!0UT>y2zDnhq9fu~hY5w&y6Pl$omZw`>lDT>}>UrH}Dn|kKch*1EL7}R6c2oU= z?%jvq0$A?U=m#k-Z&7u|6{pF2SFQ@N;nFixIXpSnSsEgDR?cWI1oW4sYSxs3Jt`@V z-E5=$w6`K3RXo!B7BwQ*4(%2H4U4ev1q|Vg3(m+F?0y{R;UnhAUfV6wD~p$^z%FX6 zS`-7_M+rwiecrZIkma!X#P;^udL8KmvRHbo*S>rC^5I+Cmn%zN*7sXf7Dp<`2B4lR zXSrFeHhD5G>KG5}%b2-GXqu$b0I85ekNUIlW5Hjc_{c!?+OqJ>?rRHMt5XuL;8B>p z9xB?mz+C7X`Fo~_(~21dioF|^)(uG>^<{6vWL|`S^^D1sfTpVP91L6>LQ_8Pf2x&F zhg29mB@7h~@k&OJ7slx6HIVFPcV8U2t#(uw{X87vXD3ES_}0%P^0bxZMYuu(^X1Kj z@nxe#ZUipuXIfG;^6b zl?*l-!p{z0xms2<)L-RN+65W95vookAArtlVZV!m$RuXgn5SxYgc}#^_%g{q#d=)D z9f3#87_B9YkLNVFO)P&FbVagESJg=|DAG9PGI>~VyDe8zDMmM^54or`ApIC?-Wh9K zlr__0I+dopS_{KG<7->TdH$3ee%cBmpSu?D@%aq9b^bjP1EfTX`hU-uasWGicsh z=xg_a`e{dQGC`jpSTCo=(J(J%X#*J-y!tU9EC<8bwdmo~tgZ|XHtzP3+^iL>GrQ-` zM!lq1N$HPOWG;Y>f(iVT8kH>R-PbsfOj2=G8aM4(+zZ(kq7|4^(PQ>q{#I$3IZ{zp|T~ z3V6vK7iIMm{#Kze($$OapQ zqBNpSHn^wLmD@VutfkBUDmHvF9*k%Oqx*`WwFgH=gO_T^Kqb{9$xyXG7gLPK%NtH&Fz4bhzmk}JbLFgDYDA=@y~aAtV%m2FkWIDiK3L$6!1 z(U|>Il3fl8=>3ys(T7Mw=A2SDx*I22_d&Zx3Xyj#+z-XbbKx6E?uRh~LpG#dv}Vlp zrzpd^|AdpRWVsrC{T`3%C3>w@T)^e0E1C_2cF^pYaKn6YwXO z8ZF`1J}6xppaeU6?CtVvZc7QXF=RcbWF)=t#&sr@dLJZ@saB=Mn1T%d7=?+N#&Cch z+ZCONq(GIQD^HhD2FixL6Fo2Hoh2O8y5}6I^1kPmgW|4zZI$Pdfh=uBs=+gsRUe_x z{D=}tSsBf~m9+j%z`{HWy}_eD`%olER9mH#c{iJt;eoUepRt}dRZ16T4H?l|v&{?4 z*iC{kyOB?g8BI-M@)w)=Ye#D7w&&eToMYk)ln+cTysNb;CZq#DYo)GE|bap67T0)d~*B&ytnFu=(&fFvlJYTl=WA4ObsW=3^{`}uCv0v zlK)F)Z|(2R}sXIaTCXB$Uz5*wQ!uQ$;^@ltOF}5dcQ(y zh-9mX>6P>1tvBt*A5E~96swsM#?(*Fp+7VbkCaYERZHDJo8?OQ?o1AOgy;s+3c$a4 z^@d(ur0PfudIu>{`i%0C{Tt%3eVP8`&C;`_+cfA1QR{uCAAKLcu;JjBUB6B$t8`rA z3`-+y0^Ee0M+9EL;%b*7xyf^Qz|=!~t~Qr1SCc6f8ZhF0>5>d}Yf5eRgyZRJxeuQP zTVxv`Z&iRIgHgF*3M!OJXS-|QsRJ5J4VqV2VKuYr(6Avts|IslZa~^T=IJ-jYjllA z9JBM>?+pH=LFAPy_8VfqP0Om-V&gRiUood{7b7q23t0~=ta^eIOtv;siFe;>-nPlo zVcIU$V}09R=6V>P{O_jvDV!qViG!|Oa2VbGbzZqUnVt#;$0{6ckcpn zdWqgLQ zY=p3k8(2RnA%qi%1lhV0Mc>A_w~YR9@ueF3cE$-svqRR?x_xAR@WReSdd$AmG{go< z2U2UZE!L+;eEk@o=J|r9x^3RfsQ%LdjPO9L#+ylKbS7xBGm2*FCiAWDEiXzzmL!(3 zxCtBGzOZ?NNxb7dJ^FWb9TYqNYJRW@%~XZT?+p2v{M-2R^Jb&>TK|}y-+P~3&oU7g zA?qZCyI3KDaufj}@#nhX(scObV~3qa=$UC_M&@&;-L9Ud?T4;0t-lUd6e1sG*H*r_ zj+*g#K|`eEM?L9N?Gr@Lm=?h`Tev24_r#85tLh*-_((fPsYd!JLT?sc`Cg(byFr+N zt;xKRic@}it{3cLdk%HCWhE~hIbsnWRND4-eg!cB!j@yV>udP39p}IVx$dJk9AquwcG z#aTYrRUi7q+>8_N(RN;BP#?k4!}8_%i-g<|cA`CH5{}ihG)b9Wkvni(mY3NwZkpOh z9`aWw<46OnBJ>U$jCSrL6vEJ{GZbs!LDWI?EvkKbT*uZ5jI9}33#U=syg;K+U^x@N zdW3hZ&2Y-E?$Vah&oi_=la2Zm1K)X+UmS8YP-3g;G_-()N>A&dh4mf8cZqQ^;Rnm- zA5-dFnd4X``(axiYpMA7NX-6$$#O@QYx$8Q6(lI4p=w=v zZtYoQ!wL<)p^8Mt0j`?zguTI>{ro7aj*xxhXNbqv>#I{hX24|al7?GtkkX((ItjwF z{=FE<+Tf+$(pX$c+=u~BSKI4&tT$GB-+!l+vQJ+r$OaywCx%`Y+xc%~`CrtUXLzFS z)B8E(KRjE2Ks*w`Eou5Mrn{%S96Ln&J%_$Z?pHMLAK7B}{o9Y7>#HfzTlMdzs=Xba=x<8`CN?BEi>3PpsdP zfD#JC__Ex_S*%rMGk)84(o0DbAPybf3)sXLqatrmvG$82ct4BX8YCp4e%MNa5%6$6 zUk~k3UaX<#U}$@Oab9;gZ~AbLC-+97ymqsKz^;b#n&EvLZ8X{RRiXxst)U`9U`{2? z(`k{G(KF=viK!4PwKHE%T?A-rDfC6>Y^{uf&qJvMpF$((Ojo_6;jd*i=--)` zp2J^OzllK!7ls9;lDB}-`$>9aZ)a-{Ef|bT={2UsRpsbZFsY@}L=-M0j zBxxuATmD5=Cqw8q+S5_(`$mt5?Jh#IFdMXBGFo@Z++G(Vte|2noFZ^!N_ynxEXEM@ z?I0sx+I>WoT__6UqimkhIC?cG&^KH6c885nUSOAzsYf~S-;uKH*h;yx)AV#U+N)1` zi#G%zK9)B5e(jtG0@Vx+bi6lCt41XZxBi<56bg8;yHfN@_NzUFj-yci9g1{ks6lFt7Wf_ zZB+zx#S2o+@4xunAA?QmshnaYml$(Mecb+KlF26cFMhT)mPTh(r;CcGCkeEWJIj?S zIt?cM?4FB-{OsB+z zb76na8L_-b6nXHlSxOHhuKe+%L^(V^&o=KiwADq>WSKj7`L6r2P@S~hi?xKuDM$s| zf>ajV=9aNJ-wRL2?3>Pat@{`Mnc199EhdcCYEXTMdlY8FW=gum3MU3kd@ok#bHE5_ zn19e%k)92Ct~~Q1(5Rd)J_9X_JQo@}9tKWQMXCIjMlmHv-0P}}g28|khOK~AjE zT;(dFpG4LvZ%p|d=pQuN$Phgz9qV|bd8EVahyQyw;!KybI}R_=#}&B95_g$jrIMdq z?eJOzJydJd;&?cNW8krAiA=5GkVj2Wb^m<84XrzQ`{ZC*T+MSW)$9u$IX{Mu@z*Vd z{A=G^k?P--CBU`;*}r+KDD%j4*Zjtks%piw80^pGU1&+D)19#!Q(xNtizOJ1T&EPA zz5_{$Yke#6|CEjR`)W~KQt|Byo1-GyE^nU__*81;S5d1)EDWMW^#5{qDTX zdgxkNN3c*^vq>J?S*iTg_jePSAC22R6#x+#Y#O&eegE6u%GZ>Nf+s zcg(uHD@`=I*b%Pti!S$!K*@otDZ-hw^J%P7g)b?%#Y=k7OO6_DH?UYBd6Gg3o?dF& zTIF#!2!QHbgxM^wFex4G41F_Ir2P`HmR1;L-t&(&IyuH`o+jH+{mb+Y7)uhY^Vgh*3ZXF-{)b#M%-MpT$RvLwqPyVW#(B`JrlQEsp zEN?$%)h9f`UY#_djgbLfd?Hem)e?)t{14BUqdYehD(+FjUvq%x<`aAu>3;qMCuCq} z^j&r*((2}3vb#Rq9f=GanRP11ws**&{WqtTnqXK*|oa3!uszt^AviQQjNFB}FG% zuNZQH88Y+i($5Q#XIqKB@JU*l^Ss(zN^Nmh5j8z zc;z5K8dM{of5fpML8A1T%3^Vy&*r?VKB@4hN-j;8YG1B%D;G<7vZ*22~_c@{=bSPcvgYml(@P!6wL)@3b-$7Iw6p~;LjO`#LvX;3m#Yo4XoDq%(nK5HSSaG(SuqF zu2}-V7cDy#&B3z3P=u%eLyQPjgGGDmlRH%rZdAOE1Hw#h^es(B_6C9-)@K6ySRz|>x+G+C?d6#VBxqljQ z5xThbjG|{+V-SIL}c(UhyK55W(iG3EC(9uPm>Q-Ws2N2nU{L#sD+@O z@uzNE<@AnPZJ5}wY+sowcZ=^;cCEfg(8yQ)pC4F%qStit@XFf;)=NQ|j=Y?>U)Y6d z=-#$HAEl*;lD`l06nhmstp-Gn>2Kry_2Dj2sOOz0Qd@;K-hb{Pvuyz1WSB?}$_h`@ z2J61=q~dX3`9pesJfgHvR^%oAytPAm@7fb-m4lDKR}hiRqm0woo4XlK(F*NMR_~Hr zfiR~FmiEWhp(=9;&Y7DQv}MOHuQDycsSS0(2PjfP%T6ad<-7Ns??l)gelC=ZCQpI| zlM=?0qDkrxa0FBdm7?50sG2Nf!$xn^Rs9JfU?u*aA`2ytnt|+{4?s;Ks*a|PZ#(`k zs+AD*UwDd8UE#k#f587^Wb6OLp#Ep+|Nq~+#`h#}G~bJwYYFtpu$!{-_XUz2POEy* zhd|!f%J<)McOYJzG-RqTw&JrMJ0IC#?xs z0My8@_Z3*y&UUE^Z@VusZ&g2L#A0gXQ=h$S3@AooWJ{ z##PN)9Y4P^14oN2KfLwoR(oT537jSNQO8~^w<9-1obp8B+_;uq( z4g@)Oosz`gbU8P(4(y%-{ttkBweNpPd?3Dy+yjC+J~T>LPv=hV2l7Pt5~F-Xo_Z`+ zvO(Cgq4N80jnM_~0pa~wSJ>$ku>F9mcyz2QS$Ji%9grk!Te?1`?e#IgJ8S__4!Onm zgqAf9LkM%ntTkY0OlF&rJ|hZO9^ZiQdLxkjozLO&85C{fc?7{>Cl1;$%duip>1=RT zP46X)0P16G7?=KCk@tI0Yo7dRlWcKG#H_@nE{ZiD&CYTM<$(DO_2Bu^mo zi?qJ}CZHAr-{c>(FJ$`jVB^{mzxkL9n|@<`szRG05h?otSwVoHy?D>|18i~$ta0+m zdhC02<~eN}75GologE_9{@G90L?VV*fsZ@*@W*+1QqdAzbs z>fAFf_imH+{2|3n4qwHCx$CgBv~UX`JvU}6fWHhAK9V-UOHhtInQwp9ag&SFlPU$5 zuKK>8OWZcedRG+ishpU#FlO{|sp1(x_^U#QBT)&B@VUC%49HXga>n&`b${NU48Ap0 zx|uaX_I6i+lXL3k2hIlKdLU2Ly66a@q(4C|EEw>vKIT8Q?a4kM4XlMQ ztC#Z(Ybs0QxCkYTKA`h+RdTMI^MmpngYTev*(w+AbAM| zXdPrS7(jdd0c5!C;sE%45(`yzm<8O}V&(}p9Tq@ShbnIpQn?h0oy&HQn!SH zkjQ7+3!sxpYYI5{)(sp~hv2eEz-!+EMey!XAZL4Q4MD1I;HAoHq<6p&)FH4=hcx#( z?e9GF%Bu1+MZIzly*bt<4yZFI5PUcQe$+vVHm#Ozp?T|(2; zl#ggvO>`gzm5Lex{1?g1h#a;|N1>2j*xb9#ZLn9tBOAiW&3ws~oxEyMUY6CynOa|g zz*xu~pzSQJk;V?LcE$VozkbRhE*xCO-Fb*{;>DM`C@CjbsFf@){e;i}Wf>*Rk%+9L zpm)f*CW6EYVAiX^3mI6V3&1`qsKv;nl$-&T7Wd{yLI9M+!}tvp_6+!s!ggGEfH|25 z3+lJ@NQwucJ|;o&{Y!kq%*5x+SrQ4LoRXh^OSv@zSx{`qY)NGekPS7~iX5=Z3fYLy7^|%eEC4u%KPjjGa!QL zhf@D)?sho{D!h)rHBZ;?4XmZ9^T2~T z`}l1aeEs#M5Gj8V73(Qtjw|5)($fdzz#cN$hBjFczoZ1ieFseVBIiGEMwqVFMCxtE zY1CYz=~*vOvZCG1X)@}?CHdB(=ONKYy(el&T8>wHPHi#ru$}Lht40ADHu6A>K_u}j zbK*F|hCthfSl0^i5e3O)(@zD_WtuMEJ|Wc3m#%lO>IFRUXycHES!02JsZG;x3@rU_ zmPNO!MVBD_Kv6d%x`ksKiU+XzKoKGWDFw1kIAq54^!NT!es7$(Z$;l9XP7_n#7JV9 z+ytD{G&XT)AdMjRN?kAY8J|slXX+bHOX(^W9?N{WyTNpj6IKXc(J=)&tauz&2N%Gm zy-;=ALGb`;7HCb-08zi|P?}WXMoHd(nZu&an*a<=-Hfna1iF!<1;>4`4yc);_3=xf z8Ngao4nOdPN*1z(#R~#)Yb&ZXQ+d}yMMUg_A3eHaEEB_?YY@(sd*mJp#kCC?VU{X@ z1qaP4&qa(!pWACEMekX;Fd8lKMpJM~oPGMTAayMBj|t#EnLt7en+}>K9J?>@RWdSem>9L4RceP4Uni_jB<6f_c8!tH>3hkT z)?uG6`@lg+c5kn3?np2=U*ui*vxg!>4GUB0GP z?-1LBHBL0@C+FSU3(Zw;odKS^zpoOC+oHS?_s(D5UFu5l7|>u^n$Y<G}QXqN0*?$D#+E51l<$La&eSazOH(dmNtTc2u928C(U~GsP)j@Zyz>_H7x1sg8aS zyjl!Ugekn)AJx4`I29Tb#1+2KW8eIu%v2w;=ViQb{PO1Q z$DoL^!@whm0BO?ylz;y}yGcS;r+V`zC|fYKW7f+F*Rk7N`B@uXi7K zUWxs1c+e~RbJn~90r{OdK_+;o+}s+x!z;>zWws~&Ho5e@E&xQ{uhFzYnvvu}o6w1i z_+|+|f8S42*ECp5rZ;qN2pjpw@>}k4w# zInT#!Ph1@^alON=S$7AD=+}-UW?K>63iy-sN~d8UI~#UqjN_@kWSXC{_e3edFOJN+ zM)e@H7DAnc)(Dc=GyNrx7MelO1DYW4cwx4Jd$y6&V`fy@c%BVd7~E6rY;Y=BHwQy+ z15KpJHj-l1`@5Eaq}^WZxWJYf6`M&RuP^x8I-GcsuCvig?AV#p7<`bbwXP32I1hq< zmkj>&Ay%bbg9vGH#+qnrD93P?qn;WP_8S*UspWfqc^R$j1LGAHg)5+fq~AfU;`Zs5 z43;_fSd*~z8Ja;R4z)sG7?=i@CT+`VG?-)~*HdO`Mt*KArdmZ@#^B&hf$=(hhNnK> z2OT{qUWMZQwWBT7pBHbZ5!NcZTr;14jnBr(pomxL%jk}nUU&>vFkw47!<`&TU zUfkK@XjCH7bw=l&=NXOjHiyhqlFs&HOeJ#N<`Qc8PB|wmDKsD&Ggc#v^uq_v+DK3X z+wqx{cg@OH6>yJmy@!!Fkj(qW)vRSAn|8_)8^+J3YIQJ~lBz}(^1ZKE$TM`u9V>G2 ziNQ@rAh z`skT+>0MZmUwxnM9mN^ZtuLm#HWpfQAeqRQV(9AJ9Kx%@5^E`D3JY7xzMIIDam#5z6l>Jz44ESB1o&Cvy5Y1s|q}D^%wjmA>_G^`^ zYUVuX?8NqubH{?xvXIHSg&=A(a0FKYYNEK4XH*93mk^hHhWtPt?EWFD!zS^PjUL-HSzhe$&3hByKkZC1%fxw>yO*hXTC+?wb zx~18eh5qc}v>1Uz)gpJKK6I8^L|ZXXql-zT{(8S<1$~Nrpr{E+Y literal 0 HcmV?d00001 From 1a1e6c6f040c8d22106768444782aca210486ed8 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 25 Aug 2020 19:09:31 +0300 Subject: [PATCH 002/376] [PE][SSE] Bug 44511 --- .../main/app/controller/Main.js | 30 ++++++++++++++++++- apps/presentationeditor/main/locale/en.json | 3 ++ .../main/app/controller/Main.js | 30 ++++++++++++++++++- apps/spreadsheeteditor/main/locale/en.json | 3 ++ 4 files changed, 64 insertions(+), 2 deletions(-) diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index 363e5bf26..0ece3593a 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -1069,6 +1069,7 @@ define([ me.api.asc_registerCallback('asc_OnTryUndoInFastCollaborative',_.bind(me.onTryUndoInFastCollaborative, me)); me.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(me.onAuthParticipantsChanged, me)); me.api.asc_registerCallback('asc_onParticipantsChanged', _.bind(me.onAuthParticipantsChanged, me)); + me.api.asc_registerCallback('asc_onConvertEquationToMath', _.bind(me.onConvertEquationToMath, me)); /** coauthoring end **/ if (me.stackLongActions.exist({id: ApplyEditRights, type: Asc.c_oAscAsyncActionType['BlockInteraction']})) { @@ -1936,6 +1937,30 @@ define([ } }, + onConvertEquationToMath: function(equation) { + var me = this, + win; + var msg = this.textConvertEquation + '

    ' + this.textLearnMore + ''; + win = Common.UI.warning({ + width: 500, + msg: msg, + buttons: ['yes', 'cancel'], + primary: 'yes', + dontshow: true, + textDontShow: this.textApplyAll, + callback: _.bind(function(btn, dontshow){ + if (btn == 'yes') { + this.api.asc_ConvertEquationToMath(equation, dontshow); + } + this.onEditComplete(); + }, this) + }); + win.$window.find('#id-equation-convert-help').on('click', function (e) { + win && win.close(); + me.getApplication().getController('LeftMenu').getView('LeftMenu').showMenu('file:help', 'UsageInstructions\/InsertEquation.htm#convertequation'); + }) + }, + // Translation leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', @@ -2289,7 +2314,10 @@ define([ errorFileSizeExceed: 'The file size exceeds the limitation set for your server.
    Please contact your Document Server administrator for details.', errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
    Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.', textHasMacros: 'The file contains automatic macros.
    Do you want to run macros?', - textRemember: 'Remember my choice' + textRemember: 'Remember my choice', + textConvertEquation: 'This equation was created with an old version of equation editor which is no longer supported. Converting this equation to Office Math ML format will make it editable.
    Do you want to convert this equation?', + textApplyAll: 'Apply to all equations', + textLearnMore: 'Learn More' } })(), PE.Controllers.Main || {})) }); diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 20b959388..847fd0df0 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -637,6 +637,9 @@ "PE.Controllers.Main.warnLicenseExceeded": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact your administrator to learn more.", "PE.Controllers.Main.warnLicenseUsersExceeded": "You've reached the user limit for %1 editors. Contact your administrator to learn more.", "PE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "PE.Controllers.Main.textConvertEquation": "This equation was created with an old version of the equation editor which is no longer supported. To edit it, convert the equation to the Office Math ML format.
    Convert now?", + "PE.Controllers.Main.textLearnMore": "Learn More", + "PE.Controllers.Main.textApplyAll": "Apply to all equations", "PE.Controllers.Statusbar.zoomText": "Zoom {0}%", "PE.Controllers.Toolbar.confirmAddFontName": "The font you are going to save is not available on the current device.
    The text style will be displayed using one of the system fonts, the saved font will be used when it is available.
    Do you want to continue?", "PE.Controllers.Toolbar.textAccent": "Accents", diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 7f02a4144..ca581e308 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -1168,6 +1168,7 @@ define([ /** coauthoring begin **/ me.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(me.onAuthParticipantsChanged, me)); me.api.asc_registerCallback('asc_onParticipantsChanged', _.bind(me.onAuthParticipantsChanged, me)); + me.api.asc_registerCallback('asc_onConvertEquationToMath', _.bind(me.onConvertEquationToMath, me)); /** coauthoring end **/ if (me.appOptions.isEditDiagram) me.api.asc_registerCallback('asc_onSelectionChanged', _.bind(me.onSelectionChanged, me)); @@ -2251,6 +2252,30 @@ define([ } }, + onConvertEquationToMath: function(equation) { + var me = this, + win; + var msg = this.textConvertEquation + '

    ' + this.textLearnMore + ''; + win = Common.UI.warning({ + width: 500, + msg: msg, + buttons: ['yes', 'cancel'], + primary: 'yes', + dontshow: true, + textDontShow: this.textApplyAll, + callback: _.bind(function(btn, dontshow){ + if (btn == 'yes') { + this.api.asc_ConvertEquationToMath(equation, dontshow); + } + this.onEditComplete(); + }, this) + }); + win.$window.find('#id-equation-convert-help').on('click', function (e) { + win && win.close(); + me.getApplication().getController('LeftMenu').getView('LeftMenu').showMenu('file:help', 'UsageInstructions\/InsertEquation.htm#convertequation'); + }) + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', @@ -2624,7 +2649,10 @@ define([ textRemember: 'Remember my choice', errorPasteSlicerError: 'Table slicers cannot be copied from one workbook to another.
    Try again by selecting the entire table and the slicers.', errorFrmlMaxLength: 'You cannot add this formula as its length exceeded the allowed number of characters.
    Please edit it and try again.', - errorFrmlMaxReference: 'You cannot enter this formula because it has too many values,
    cell references, and/or names.' + errorFrmlMaxReference: 'You cannot enter this formula because it has too many values,
    cell references, and/or names.', + textConvertEquation: 'This equation was created with an old version of equation editor which is no longer supported. Converting this equation to Office Math ML format will make it editable.
    Do you want to convert this equation?', + textApplyAll: 'Apply to all equations', + textLearnMore: 'Learn More' } })(), SSE.Controllers.Main || {})) }); diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index eea01955a..981d27e1d 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -832,6 +832,9 @@ "SSE.Controllers.Main.warnLicenseExceeded": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact your administrator to learn more.", "SSE.Controllers.Main.warnLicenseUsersExceeded": "You've reached the user limit for %1 editors. Contact your administrator to learn more.", "SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "SSE.Controllers.Main.textConvertEquation": "This equation was created with an old version of the equation editor which is no longer supported. To edit it, convert the equation to the Office Math ML format.
    Convert now?", + "SSE.Controllers.Main.textLearnMore": "Learn More", + "SSE.Controllers.Main.textApplyAll": "Apply to all equations", "SSE.Controllers.Print.strAllSheets": "All Sheets", "SSE.Controllers.Print.textFirstCol": "First column", "SSE.Controllers.Print.textFirstRow": "First row", From d3ef5bd61c16d57780fd55e518d4b7fb3b3b9ab7 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 25 Aug 2020 19:38:52 +0300 Subject: [PATCH 003/376] [PE][SSE] Show specified help page --- .../main/app/view/FileMenu.js | 8 ++--- .../main/app/view/FileMenuPanels.js | 33 ++++++++++++++++--- .../main/app/view/LeftMenu.js | 4 +-- .../main/app/view/FileMenu.js | 8 ++--- .../main/app/view/FileMenuPanels.js | 33 ++++++++++++++++--- .../main/app/view/LeftMenu.js | 4 +-- 6 files changed, 68 insertions(+), 22 deletions(-) diff --git a/apps/presentationeditor/main/app/view/FileMenu.js b/apps/presentationeditor/main/app/view/FileMenu.js index 9c5ef6561..e17d015f5 100644 --- a/apps/presentationeditor/main/app/view/FileMenu.js +++ b/apps/presentationeditor/main/app/view/FileMenu.js @@ -231,7 +231,7 @@ define([ return this; }, - show: function(panel) { + show: function(panel, opts) { if (this.isVisible() && panel===undefined || !this.mode) return; if ( !this.rendered ) @@ -241,7 +241,7 @@ define([ if (!panel) panel = this.active || defPanel; this.$el.show(); - this.selectMenu(panel, defPanel); + this.selectMenu(panel, opts, defPanel); this.api && this.api.asc_enableKeyEvents(false); @@ -364,7 +364,7 @@ define([ this.document = data.doc; }, - selectMenu: function(menu, defMenu) { + selectMenu: function(menu, opts, defMenu) { if ( menu ) { var item = this._getMenuItem(menu), panel = this.panels[menu]; @@ -377,7 +377,7 @@ define([ item.$el.addClass('active'); this.$el.find('.content-box:visible').hide(); - panel.show(); + panel.show(opts); this.active = menu; } diff --git a/apps/presentationeditor/main/app/view/FileMenuPanels.js b/apps/presentationeditor/main/app/view/FileMenuPanels.js index c7bd22e8e..7c17a1431 100644 --- a/apps/presentationeditor/main/app/view/FileMenuPanels.js +++ b/apps/presentationeditor/main/app/view/FileMenuPanels.js @@ -1252,6 +1252,7 @@ define([ this.menu = options.menu; this.urlPref = 'resources/help/en/'; + this.openUrl = null; this.en_data = [ {"src": "ProgramInterface/ProgramInterface.htm", "name": "Introducing Presentation Editor user interface", "headername": "Program Interface"}, @@ -1315,7 +1316,7 @@ define([ }); this.viewHelpPicker.on('item:select', function(dataview, itemview, record) { - me.iFrame.src = me.urlPref + record.get('src'); + me.onSelectItem(record.get('src')); }); this.iFrame = document.createElement('iframe'); @@ -1361,9 +1362,14 @@ define([ } }, success: function () { - var rec = store.at(0); - me.viewHelpPicker.selectRecord(rec); - me.iFrame.src = me.urlPref + rec.get('src'); + var rec = me.openUrl ? store.find(function(record){ + return (me.openUrl.indexOf(record.get('src'))>=0); + }) : store.at(0); + if (rec) { + me.viewHelpPicker.selectRecord(rec, true); + me.viewHelpPicker.scrollToRecord(rec); + } + me.onSelectItem(me.openUrl ? me.openUrl : rec.get('src')); } }; store.url = 'resources/help/' + lang + '/Contents.json'; @@ -1372,12 +1378,29 @@ define([ } }, - show: function () { + show: function (url) { Common.UI.BaseView.prototype.show.call(this); if (!this._scrollerInited) { this.viewHelpPicker.scroller.update(); this._scrollerInited = true; } + if (url) { + if (this.viewHelpPicker.store.length>0) { + var rec = this.viewHelpPicker.store.find(function(record){ + return (url.indexOf(record.get('src'))>=0); + }); + if (rec) { + this.viewHelpPicker.selectRecord(rec, true); + this.viewHelpPicker.scrollToRecord(rec); + } + this.onSelectItem(url); + } else + this.openUrl = url; + } + }, + + onSelectItem: function(src) { + this.iFrame.src = this.urlPref + src; } }); diff --git a/apps/presentationeditor/main/app/view/LeftMenu.js b/apps/presentationeditor/main/app/view/LeftMenu.js index b47ddeb81..72a5c7435 100644 --- a/apps/presentationeditor/main/app/view/LeftMenu.js +++ b/apps/presentationeditor/main/app/view/LeftMenu.js @@ -318,10 +318,10 @@ define([ this.btnPlugins.setDisabled(disable); }, - showMenu: function(menu) { + showMenu: function(menu, opts) { var re = /^(\w+):?(\w*)$/.exec(menu); if ( re[1] == 'file' ) { - this.menuFile.show(re[2].length ? re[2] : undefined); + this.menuFile.show(re[2].length ? re[2] : undefined, opts); } else { /** coauthoring begin **/ if (menu == 'chat') { diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index 698bc13f5..1e0173764 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -221,7 +221,7 @@ define([ return this; }, - show: function(panel) { + show: function(panel, opts) { if (this.isVisible() && panel===undefined || !this.mode) return; if ( !this.rendered ) @@ -231,7 +231,7 @@ define([ if (!panel) panel = this.active || defPanel; this.$el.show(); - this.selectMenu(panel, defPanel); + this.selectMenu(panel, opts, defPanel); this.api.asc_enableKeyEvents(false); @@ -352,7 +352,7 @@ define([ this.document = data.doc; }, - selectMenu: function(menu, defMenu) { + selectMenu: function(menu, opts, defMenu) { if ( menu ) { var item = this._getMenuItem(menu), panel = this.panels[menu]; @@ -365,7 +365,7 @@ define([ item.$el.addClass('active'); this.$el.find('.content-box:visible').hide(); - panel.show(); + panel.show(opts); this.active = menu; } diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index 04a4ab069..64cc4df5b 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -2056,6 +2056,7 @@ define([ this.menu = options.menu; this.urlPref = 'resources/help/en/'; + this.openUrl = null; this.en_data = [ {"src": "ProgramInterface/ProgramInterface.htm", "name": "Introducing Spreadsheet Editor user interface", "headername": "Program Interface"}, @@ -2121,7 +2122,7 @@ define([ }); this.viewHelpPicker.on('item:select', function(dataview, itemview, record) { - me.iFrame.src = me.urlPref + record.get('src'); + me.onSelectItem(record.get('src')); }); this.iFrame = document.createElement('iframe'); @@ -2167,9 +2168,14 @@ define([ } }, success: function () { - var rec = store.at(0); - me.viewHelpPicker.selectRecord(rec); - me.iFrame.src = me.urlPref + rec.get('src'); + var rec = me.openUrl ? store.find(function(record){ + return (me.openUrl.indexOf(record.get('src'))>=0); + }) : store.at(0); + if (rec) { + me.viewHelpPicker.selectRecord(rec, true); + me.viewHelpPicker.scrollToRecord(rec); + } + me.onSelectItem(me.openUrl ? me.openUrl : rec.get('src')); } }; store.url = 'resources/help/' + lang + '/Contents.json'; @@ -2178,12 +2184,29 @@ define([ } }, - show: function () { + show: function (url) { Common.UI.BaseView.prototype.show.call(this); if (!this._scrollerInited) { this.viewHelpPicker.scroller.update(); this._scrollerInited = true; } + if (url) { + if (this.viewHelpPicker.store.length>0) { + var rec = this.viewHelpPicker.store.find(function(record){ + return (url.indexOf(record.get('src'))>=0); + }); + if (rec) { + this.viewHelpPicker.selectRecord(rec, true); + this.viewHelpPicker.scrollToRecord(rec); + } + this.onSelectItem(url); + } else + this.openUrl = url; + } + }, + + onSelectItem: function(src) { + this.iFrame.src = this.urlPref + src; } }); diff --git a/apps/spreadsheeteditor/main/app/view/LeftMenu.js b/apps/spreadsheeteditor/main/app/view/LeftMenu.js index 16778fbce..d3a37fbb5 100644 --- a/apps/spreadsheeteditor/main/app/view/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/view/LeftMenu.js @@ -307,10 +307,10 @@ define([ this.btnSpellcheck.setDisabled(false); }, - showMenu: function(menu) { + showMenu: function(menu, opts) { var re = /^(\w+):?(\w*)$/.exec(menu); if ( re[1] == 'file' ) { - this.menuFile.show(re[2].length ? re[2] : undefined); + this.menuFile.show(re[2].length ? re[2] : undefined, opts); } else { /** coauthoring begin **/ if (menu == 'chat') { From 1349be4fb3a3a8f43ef9916cb05dca615aef9d7a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 21 Apr 2021 20:52:17 +0300 Subject: [PATCH 004/376] Add hint manager for alt+keys --- apps/common/main/lib/component/HintManager.js | 154 ++++++++++++++++++ apps/common/main/lib/component/Mixtbar.js | 4 +- .../main/resources/less/hint-manager.less | 12 ++ .../main/app/controller/Main.js | 4 +- .../main/app/template/LeftMenu.template | 14 +- .../main/resources/less/app.less | 1 + 6 files changed, 179 insertions(+), 10 deletions(-) create mode 100644 apps/common/main/lib/component/HintManager.js create mode 100644 apps/common/main/resources/less/hint-manager.less diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js new file mode 100644 index 000000000..c06dba5aa --- /dev/null +++ b/apps/common/main/lib/component/HintManager.js @@ -0,0 +1,154 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2021 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ +/** + * HintManager.js + * + * Created by Julia Radzhabova on 21.04.2021 + * Copyright (c) 2021 Ascensio System SIA. All rights reserved. + * + */ + + +if (Common === undefined) + var Common = {}; + +if (Common.UI === undefined) { + Common.UI = {}; +} + +Common.UI.HintManager = new(function() { + var _isAlt = false, + _hintVisible = false, + _currentLevel = -1, + _controls = [], + _currentControls = [], + _currentHints = []; + + var _showHints = function() { + _hintVisible = !_hintVisible; + if (_hintVisible) { + _currentLevel++; + _getHints(); + } else { + _removeHints(); + _currentLevel--; + } + }; + + var _getControls = function() { + if (!_controls[_currentLevel + 1]) { + _controls[_currentLevel + 1] = $('[data-hint=' + (_currentLevel + 1) + ']').toArray(); + if (_currentLevel==0 && !_controls[_currentLevel]) + _controls[_currentLevel] = $('[data-hint=0]').toArray(); + } + + _currentControls = []; + var arr = []; + if (_currentLevel==0) { + arr = arr.concat(_controls[_currentLevel]); + !$('.toolbar-fullview-panel').is(':visible') && (arr = arr.concat(_controls[_currentLevel+1])); + } else + arr = _controls[_currentLevel+1]; + arr.forEach(function(item, index) { + var el = $(item); + if (el.is(':visible')) { + el.attr('data-hint-title', String.fromCharCode(65 + index)); + _currentControls.push(el); + } + }); + return _currentControls; + }; + + var _getHints = function() { + _removeHints(); + _getControls(); + _currentControls.forEach(function(item, index) { + var offset = item.offset(); + var hint = $('
    ' + item.attr('data-hint-title') + '
    '); + var direction = item.attr('data-hint-direction'); + if (direction=='right') + hint.css({left: offset.left + item.outerWidth(), top: offset.top + (item.outerHeight()-20)/2}); + else + hint.css({left: offset.left + (item.outerWidth() - 20)/2, top: offset.top + item.outerHeight()}); + $(document.body).append(hint); + + _currentHints.push(hint); + }); + }; + + var _removeHints = function() { + _currentHints && _currentHints.forEach(function(item) { + item.remove() + }); + }; + + var _init = function() { + $(document).on('keyup', function(e) { + if (e.keyCode == Common.UI.Keys.ALT &&_isAlt) { + console.log(' keyup ALT'); + e.preventDefault(); + _showHints(); + } + _isAlt = false; + }); + $(document).on('keydown', function(e) { + console.log('keydown ' + e.keyCode); + if (_hintVisible) { + if (e.keyCode == Common.UI.Keys.ESC ) { + _showHints(); + } else if ((e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 64 && e.keyCode < 91) && e.key) { + var curr; + for (var i = 0; i < _currentControls.length; i++) { + var item = _currentControls[i]; + if (item.attr('data-hint-title').charCodeAt(0) == e.keyCode) { // for latin chars + // if (item.attr('data-hint-title').charAt(0) == e.key.toUpperCase()) { // for all chars + curr = item; + break; + } + } + if (curr) { + _showHints(); + curr && curr.trigger(jQuery.Event('click', {which: 1})); + } + } + e.preventDefault(); + } + + _isAlt = (e.keyCode == Common.UI.Keys.ALT); + }); + }; + + return { + init: _init + } +})(); \ No newline at end of file diff --git a/apps/common/main/lib/component/Mixtbar.js b/apps/common/main/lib/component/Mixtbar.js index e166d79f1..165a1c653 100644 --- a/apps/common/main/lib/component/Mixtbar.js +++ b/apps/common/main/lib/component/Mixtbar.js @@ -100,7 +100,7 @@ define([ '
  • ' + '<% if (items[i].extcls) print(\' \' + items[i].extcls) %>">' + - '<%= items[i].caption %>' + + '<%= items[i].caption %>' + '
  • ' + '<% } %>' + '<% } %>' + @@ -316,7 +316,7 @@ define([ return config.tabs[index].action; } - var _tabTemplate = _.template(''); + var _tabTemplate = _.template(''); config.tabs[after + 1] = tab; var _after_action = _get_tab_action(after); diff --git a/apps/common/main/resources/less/hint-manager.less b/apps/common/main/resources/less/hint-manager.less new file mode 100644 index 000000000..7f61ca418 --- /dev/null +++ b/apps/common/main/resources/less/hint-manager.less @@ -0,0 +1,12 @@ +.hint-div { + position: absolute; + z-index: @zindex-navbar + 3; + width: 20px; + text-align: center; + background-color: @background-notification-popover-ie; + background-color: @background-notification-popover; + color: @text-normal; + .box-shadow(0 4px 15px -2px rgba(0, 0, 0, 0.5)); + font-size: 12px; + line-height: 18px; +} \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index d83c38d90..dcf97d45a 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -52,7 +52,8 @@ define([ 'common/main/lib/view/UserNameDialog', 'common/main/lib/util/LocalStorage', 'documenteditor/main/app/collection/ShapeGroups', - 'documenteditor/main/app/collection/EquationGroups' + 'documenteditor/main/app/collection/EquationGroups', + 'common/main/lib/component/HintManager' ], function () { 'use strict'; @@ -174,6 +175,7 @@ define([ this.api = this.getApplication().getController('Viewport').getApi(); Common.UI.FocusManager.init(); + Common.UI.HintManager.init(); Common.UI.Themes.init(this.api); if (this.api){ diff --git a/apps/documenteditor/main/app/template/LeftMenu.template b/apps/documenteditor/main/app/template/LeftMenu.template index 96827d295..18e31b081 100644 --- a/apps/documenteditor/main/app/template/LeftMenu.template +++ b/apps/documenteditor/main/app/template/LeftMenu.template @@ -1,14 +1,14 @@
    - + - - + + - - - - + + + +
    diff --git a/apps/documenteditor/main/resources/less/app.less b/apps/documenteditor/main/resources/less/app.less index 07982a8c8..1e6e06162 100644 --- a/apps/documenteditor/main/resources/less/app.less +++ b/apps/documenteditor/main/resources/less/app.less @@ -122,6 +122,7 @@ @import "../../../../common/main/resources/less/winxp_fix.less"; @import "../../../../common/main/resources/less/calendar.less"; @import "../../../../common/main/resources/less/symboltable.less"; +@import "../../../../common/main/resources/less/hint-manager.less"; // App // -------------------------------------------------- From dd22ef6c6aa5e259ec3c86b897f166f279504a30 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 21 Apr 2021 20:54:13 +0300 Subject: [PATCH 005/376] Refactoring --- apps/common/main/lib/component/HintManager.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index c06dba5aa..c12c7d9ae 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -115,14 +115,12 @@ Common.UI.HintManager = new(function() { var _init = function() { $(document).on('keyup', function(e) { if (e.keyCode == Common.UI.Keys.ALT &&_isAlt) { - console.log(' keyup ALT'); e.preventDefault(); _showHints(); } _isAlt = false; }); $(document).on('keydown', function(e) { - console.log('keydown ' + e.keyCode); if (_hintVisible) { if (e.keyCode == Common.UI.Keys.ESC ) { _showHints(); @@ -131,7 +129,6 @@ Common.UI.HintManager = new(function() { for (var i = 0; i < _currentControls.length; i++) { var item = _currentControls[i]; if (item.attr('data-hint-title').charCodeAt(0) == e.keyCode) { // for latin chars - // if (item.attr('data-hint-title').charAt(0) == e.key.toUpperCase()) { // for all chars curr = item; break; } From e8d4de37e6d2baa89e58855ef063f3fbe49c8f68 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 12 May 2021 01:33:51 +0300 Subject: [PATCH 006/376] Add parameter for default interface language --- apps/common/locale.js | 15 ++++++++------- .../main/lib/controller/ExternalDiagramEditor.js | 2 +- .../main/lib/controller/ExternalMergeEditor.js | 2 +- apps/common/main/lib/controller/Themes.js | 2 ++ .../main/app/view/FileMenuPanels.js | 10 +++++----- .../main/app/view/FileMenuPanels.js | 10 +++++----- .../main/app/view/FileMenuPanels.js | 10 +++++----- build/Gruntfile.js | 3 +++ 8 files changed, 30 insertions(+), 24 deletions(-) diff --git a/apps/common/locale.js b/apps/common/locale.js index 7990b2c8d..bcd4270ba 100644 --- a/apps/common/locale.js +++ b/apps/common/locale.js @@ -39,7 +39,8 @@ Common.Locale = new(function() { var l10n = null; var loadcallback, apply = false, - currentLang = 'en'; + defLang = '{{DEFAULT_LANG}}', + currentLang = defLang; var _applyLocalization = function(callback) { try { @@ -83,7 +84,7 @@ Common.Locale = new(function() { }; var _getCurrentLanguage = function() { - return (currentLang || 'en'); + return (currentLang || defLang); }; var _getUrlParameterByName = function(name) { @@ -94,21 +95,21 @@ Common.Locale = new(function() { }; var _requireLang = function () { - var lang = (_getUrlParameterByName('lang') || 'en').split(/[\-_]/)[0]; + var lang = (_getUrlParameterByName('lang') || defLang).split(/[\-_]/)[0]; currentLang = lang; fetch('locale/' + lang + '.json') .then(function(response) { if (!response.ok) { - currentLang = 'en'; - if (lang != 'en') + currentLang = defLang; + if (lang != defLang) /* load default lang if fetch failed */ - return fetch('locale/en.json'); + return fetch('locale/' + defLang + '.json'); throw new Error('server error'); } return response.json(); }).then(function(response) { - if ( response.then ) + if ( response.json ) return response.json(); else { l10n = response; diff --git a/apps/common/main/lib/controller/ExternalDiagramEditor.js b/apps/common/main/lib/controller/ExternalDiagramEditor.js index 731df5d8d..f21868e2b 100644 --- a/apps/common/main/lib/controller/ExternalDiagramEditor.js +++ b/apps/common/main/lib/controller/ExternalDiagramEditor.js @@ -48,7 +48,7 @@ define([ 'common/main/lib/view/ExternalDiagramEditor' ], function () { 'use strict'; Common.Controllers.ExternalDiagramEditor = Backbone.Controller.extend(_.extend((function() { - var appLang = 'en', + var appLang = '{{DEFAULT_LANG}}', customization = undefined, targetApp = '', externalEditor = null, diff --git a/apps/common/main/lib/controller/ExternalMergeEditor.js b/apps/common/main/lib/controller/ExternalMergeEditor.js index 69e659c22..89017051a 100644 --- a/apps/common/main/lib/controller/ExternalMergeEditor.js +++ b/apps/common/main/lib/controller/ExternalMergeEditor.js @@ -48,7 +48,7 @@ define([ 'common/main/lib/view/ExternalMergeEditor' ], function () { 'use strict'; Common.Controllers.ExternalMergeEditor = Backbone.Controller.extend(_.extend((function() { - var appLang = 'en', + var appLang = '{{DEFAULT_LANG}}', customization = undefined, targetApp = '', externalEditor = null; diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index 0e952e05d..daedc3281 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -7,6 +7,8 @@ define([ ], function () { 'use strict'; + !Common.UI && (Common.UI = {}); + Common.UI.Themes = new (function(locale) { !locale && (locale = {}); var themes_map = { diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js index f097325a7..af8575b36 100644 --- a/apps/documenteditor/main/app/view/FileMenuPanels.js +++ b/apps/documenteditor/main/app/view/FileMenuPanels.js @@ -1520,7 +1520,7 @@ define([ Common.UI.BaseView.prototype.initialize.call(this,arguments); this.menu = options.menu; - this.urlPref = 'resources/help/en/'; + this.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; this.openUrl = null; this.en_data = [ @@ -1638,12 +1638,12 @@ define([ var config = { dataType: 'json', error: function () { - if ( me.urlPref.indexOf('resources/help/en/')<0 ) { - me.urlPref = 'resources/help/en/'; - store.url = 'resources/help/en/Contents.json'; + if ( me.urlPref.indexOf('resources/help/{{DEFAULT_LANG}}/')<0 ) { + me.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; + store.url = 'resources/help/{{DEFAULT_LANG}}/Contents.json'; store.fetch(config); } else { - me.urlPref = 'resources/help/en/'; + me.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; store.reset(me.en_data); } }, diff --git a/apps/presentationeditor/main/app/view/FileMenuPanels.js b/apps/presentationeditor/main/app/view/FileMenuPanels.js index c775fee34..7759139d3 100644 --- a/apps/presentationeditor/main/app/view/FileMenuPanels.js +++ b/apps/presentationeditor/main/app/view/FileMenuPanels.js @@ -1321,7 +1321,7 @@ define([ Common.UI.BaseView.prototype.initialize.call(this,arguments); this.menu = options.menu; - this.urlPref = 'resources/help/en/'; + this.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; this.en_data = [ {"src": "ProgramInterface/ProgramInterface.htm", "name": "Introducing Presentation Editor user interface", "headername": "Program Interface"}, @@ -1421,12 +1421,12 @@ define([ var config = { dataType: 'json', error: function () { - if ( me.urlPref.indexOf('resources/help/en/')<0 ) { - me.urlPref = 'resources/help/en/'; - store.url = 'resources/help/en/Contents.json'; + if ( me.urlPref.indexOf('resources/help/{{DEFAULT_LANG}}/')<0 ) { + me.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; + store.url = 'resources/help/{{DEFAULT_LANG}}/Contents.json'; store.fetch(config); } else { - me.urlPref = 'resources/help/en/'; + me.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; store.reset(me.en_data); } }, diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index ded4333a6..ebdcf47a3 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -2176,7 +2176,7 @@ define([ Common.UI.BaseView.prototype.initialize.call(this,arguments); this.menu = options.menu; - this.urlPref = 'resources/help/en/'; + this.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; this.en_data = [ {"src": "ProgramInterface/ProgramInterface.htm", "name": "Introducing Spreadsheet Editor user interface", "headername": "Program Interface"}, @@ -2278,12 +2278,12 @@ define([ var config = { dataType: 'json', error: function () { - if ( me.urlPref.indexOf('resources/help/en/')<0 ) { - me.urlPref = 'resources/help/en/'; - store.url = 'resources/help/en/Contents.json'; + if ( me.urlPref.indexOf('resources/help/{{DEFAULT_LANG}}/')<0 ) { + me.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; + store.url = 'resources/help/{{DEFAULT_LANG}}/Contents.json'; store.fetch(config); } else { - me.urlPref = 'resources/help/en/'; + me.urlPref = 'resources/help/{{DEFAULT_LANG}}/'; store.reset(me.en_data); } }, diff --git a/build/Gruntfile.js b/build/Gruntfile.js index 9715241cd..28d2101fa 100644 --- a/build/Gruntfile.js +++ b/build/Gruntfile.js @@ -66,6 +66,9 @@ module.exports = function(grunt) { }, { from: /\{\{HELP_URL\}\}/g, to: _encode(process.env.HELP_URL) || 'https://helpcenter.onlyoffice.com' + }, { + from: /\{\{DEFAULT_LANG\}\}/g, + to: _encode(process.env.DEFAULT_LANG) || 'en' }]; var helpreplacements = [ From 59bb490069b89221bbf6557cfafacdab8e79a553 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 12 May 2021 12:33:10 +0300 Subject: [PATCH 007/376] Show error if default lang isn't loaded --- apps/common/locale.js | 17 +++++++++++++---- apps/common/main/lib/component/Window.js | 2 +- apps/documenteditor/main/app/controller/Main.js | 17 +++++++++++++++-- .../mobile/app/controller/Main.js | 16 ++++++++++++++-- .../main/app/controller/Main.js | 17 +++++++++++++++-- .../mobile/app/controller/Main.js | 16 ++++++++++++++-- .../main/app/controller/Main.js | 17 +++++++++++++++-- .../mobile/app/controller/Main.js | 16 ++++++++++++++-- 8 files changed, 101 insertions(+), 17 deletions(-) diff --git a/apps/common/locale.js b/apps/common/locale.js index bcd4270ba..abed04e94 100644 --- a/apps/common/locale.js +++ b/apps/common/locale.js @@ -84,7 +84,11 @@ Common.Locale = new(function() { }; var _getCurrentLanguage = function() { - return (currentLang || defLang); + return currentLang; + }; + + var _getLoadedLanguage = function() { + return loadedLang; }; var _getUrlParameterByName = function(name) { @@ -109,9 +113,12 @@ Common.Locale = new(function() { } return response.json(); }).then(function(response) { - if ( response.json ) + if ( response.json ) { + if (!response.ok) + throw new Error('server error'); + return response.json(); - else { + } else { l10n = response; /* to break promises chain */ throw new Error('loaded'); @@ -123,8 +130,10 @@ Common.Locale = new(function() { l10n = l10n || {}; apply && _applyLocalization(); if ( e.message == 'loaded' ) { - } else + } else { + currentLang = null; console.log('fetch error: ' + e); + } }); }; diff --git a/apps/common/main/lib/component/Window.js b/apps/common/main/lib/component/Window.js index 661424bc2..95edd58b9 100644 --- a/apps/common/main/lib/component/Window.js +++ b/apps/common/main/lib/component/Window.js @@ -632,7 +632,7 @@ define([ this.$window = $('#' + this.initConfig.id); - if (Common.Locale.getCurrentLanguage() !== 'en') + if (Common.Locale.getCurrentLanguage() && Common.Locale.getCurrentLanguage() !== 'en') this.$window.attr('applang', Common.Locale.getCurrentLanguage()); this.binding.keydown = _.bind(_keydown,this); diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 183a3194a..b74fd5b0e 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -1250,7 +1250,7 @@ define([ if (Asc.c_oLicenseResult.ExpiredLimited === licType) this._state.licenseType = licType; - if ( this.onServerVersion(params.asc_getBuildVersion()) ) return; + if ( this.onServerVersion(params.asc_getBuildVersion()) || !this.onLanguageLoaded()) return; this.permissions.review = (this.permissions.review === undefined) ? (this.permissions.edit !== false) : this.permissions.review; @@ -2476,6 +2476,18 @@ define([ this._renameDialog.show(Common.Utils.innerWidth() - this._renameDialog.options.width - 15, 30); }, + onLanguageLoaded: function() { + if (!Common.Locale.getCurrentLanguage()) { + Common.UI.warning({ + msg: this.errorLang, + callback: function() { + } + }); + return false; + } + return true; + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', @@ -2844,7 +2856,8 @@ define([ txtNoTableOfFigures: "No table of figures entries found.", txtTableOfFigures: 'Table of figures', txtStyle_endnote_text: 'Endnote Text', - txtTOCHeading: 'TOC Heading' + txtTOCHeading: 'TOC Heading', + errorLang: 'The interface language is not loaded.
    Please contact your Document Server administrator.' } })(), DE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/documenteditor/mobile/app/controller/Main.js b/apps/documenteditor/mobile/app/controller/Main.js index 66f8d59fc..9f6c281d5 100644 --- a/apps/documenteditor/mobile/app/controller/Main.js +++ b/apps/documenteditor/mobile/app/controller/Main.js @@ -783,7 +783,7 @@ define([ if (Asc.c_oLicenseResult.ExpiredLimited === licType) me._state.licenseType = licType; - if ( me.onServerVersion(params.asc_getBuildVersion()) ) return; + if ( me.onServerVersion(params.asc_getBuildVersion()) || !me.onLanguageLoaded()) return; me.appOptions.permissionsLicense = licType; me.permissions.review = (me.permissions.review === undefined) ? (me.permissions.edit !== false) : me.permissions.review; @@ -1497,6 +1497,17 @@ define([ } }, + onLanguageLoaded: function() { + if (!Common.Locale.getCurrentLanguage()) { + uiApp.alert( + this.errorLang, + this.notcriticalErrorTitle + ); + return false; + } + return true; + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', @@ -1643,7 +1654,8 @@ define([ txtEvenPage: "Even Page", txtOddPage: "Odd Page", txtSameAsPrev: "Same as Previous", - txtCurrentDocument: "Current Document" + txtCurrentDocument: "Current Document", + errorLang: 'The interface language is not loaded.
    Please contact your Document Server administrator.' } })(), DE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index c2fcc6337..764938ed8 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -976,7 +976,7 @@ define([ if (Asc.c_oLicenseResult.ExpiredLimited === licType) this._state.licenseType = licType; - if ( this.onServerVersion(params.asc_getBuildVersion()) ) return; + if ( this.onServerVersion(params.asc_getBuildVersion()) || !this.onLanguageLoaded() ) return; if (params.asc_getRights() !== Asc.c_oRights.Edit) this.permissions.edit = false; @@ -2107,6 +2107,18 @@ define([ this._renameDialog.show(Common.Utils.innerWidth() - this._renameDialog.options.width - 15, 30); }, + onLanguageLoaded: function() { + if (!Common.Locale.getCurrentLanguage()) { + Common.UI.warning({ + msg: this.errorLang, + callback: function() { + } + }); + return false; + } + return true; + }, + // Translation leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', @@ -2469,7 +2481,8 @@ define([ textRenameLabel: 'Enter a name to be used for collaboration', textRenameError: 'User name must not be empty.', textLongName: 'Enter a name that is less than 128 characters.', - textGuest: 'Guest' + textGuest: 'Guest', + errorLang: 'The interface language is not loaded.
    Please contact your Document Server administrator.' } })(), PE.Controllers.Main || {})) }); diff --git a/apps/presentationeditor/mobile/app/controller/Main.js b/apps/presentationeditor/mobile/app/controller/Main.js index 4c9c14894..2c66e159b 100644 --- a/apps/presentationeditor/mobile/app/controller/Main.js +++ b/apps/presentationeditor/mobile/app/controller/Main.js @@ -715,7 +715,7 @@ define([ if (Asc.c_oLicenseResult.ExpiredLimited === licType) me._state.licenseType = licType; - if ( me.onServerVersion(params.asc_getBuildVersion()) ) return; + if ( me.onServerVersion(params.asc_getBuildVersion()) || !me.onLanguageLoaded() ) return; me.appOptions.permissionsLicense = licType; me.permissions.review = (me.permissions.review === undefined) ? (me.permissions.edit !== false) : me.permissions.review; @@ -1398,6 +1398,17 @@ define([ } }, + onLanguageLoaded: function() { + if (!Common.Locale.getCurrentLanguage()) { + uiApp.alert( + this.errorLang, + this.notcriticalErrorTitle + ); + return false; + } + return true; + }, + // Translation leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', @@ -1573,7 +1584,8 @@ define([ warnLicenseLimitedRenewed: 'License needs to be renewed.
    You have a limited access to document editing functionality.
    Please contact your administrator to get full access', warnLicenseLimitedNoAccess: 'License expired.
    You have no access to document editing functionality.
    Please contact your administrator.', textGuest: 'Guest', - txtAddFirstSlide: 'Click to add first slide' + txtAddFirstSlide: 'Click to add first slide', + errorLang: 'The interface language is not loaded.
    Please contact your Document Server administrator.' } })(), PE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index d674000e4..3e34f052c 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -1049,7 +1049,7 @@ define([ if (Asc.c_oLicenseResult.ExpiredLimited === licType) this._state.licenseType = licType; - if ( this.onServerVersion(params.asc_getBuildVersion()) ) return; + if ( this.onServerVersion(params.asc_getBuildVersion()) || !this.onLanguageLoaded() ) return; if (params.asc_getRights() !== Asc.c_oRights.Edit) this.permissions.edit = false; @@ -2452,6 +2452,18 @@ define([ this._renameDialog.show(Common.Utils.innerWidth() - this._renameDialog.options.width - 15, 30); }, + onLanguageLoaded: function() { + if (!Common.Locale.getCurrentLanguage()) { + Common.UI.warning({ + msg: this.errorLang, + callback: function() { + } + }); + return false; + } + return true; + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', @@ -2849,7 +2861,8 @@ define([ errorPasteMultiSelect: 'This action cannot be done on a multiple range selection.
    Select a single range and try again.', errorPivotWithoutUnderlying: 'The Pivot Table report was saved without the underlying data.
    Use the \'Refresh\' button to update the report.', txtQuarter: 'Qtr', - txtOr: '%1 or %2' + txtOr: '%1 or %2', + errorLang: 'The interface language is not loaded.
    Please contact your Document Server administrator.' } })(), SSE.Controllers.Main || {})) }); diff --git a/apps/spreadsheeteditor/mobile/app/controller/Main.js b/apps/spreadsheeteditor/mobile/app/controller/Main.js index 07f75cbf8..e73df8db7 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/Main.js +++ b/apps/spreadsheeteditor/mobile/app/controller/Main.js @@ -741,7 +741,7 @@ define([ if (Asc.c_oLicenseResult.ExpiredLimited === licType) me._state.licenseType = licType; - if ( me.onServerVersion(params.asc_getBuildVersion()) ) return; + if ( me.onServerVersion(params.asc_getBuildVersion()) || !me.onLanguageLoaded() ) return; if (params.asc_getRights() !== Asc.c_oRights.Edit) { me.permissions.edit = false; @@ -1601,6 +1601,17 @@ define([ } }, + onLanguageLoaded: function() { + if (!Common.Locale.getCurrentLanguage()) { + uiApp.alert( + this.errorLang, + this.notcriticalErrorTitle + ); + return false; + } + return true; + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', @@ -1795,7 +1806,8 @@ define([ warnLicenseLimitedNoAccess: 'License expired.
    You have no access to document editing functionality.
    Please contact your administrator.', textGuest: 'Guest', errorDataValidate: 'The value you entered is not valid.
    A user has restricted values that can be entered into this cell.', - errorLockedCellPivot: 'You cannot change data inside a pivot table.' + errorLockedCellPivot: 'You cannot change data inside a pivot table.', + errorLang: 'The interface language is not loaded.
    Please contact your Document Server administrator.' } })(), SSE.Controllers.Main || {})) }); \ No newline at end of file From df1015d8263ee4138fcf1a8bba3dda4d88e68436 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 12 May 2021 14:36:24 +0300 Subject: [PATCH 008/376] Refactoring --- apps/documenteditor/main/app/controller/Main.js | 4 ++-- apps/documenteditor/mobile/app/controller/Main.js | 8 ++++---- apps/presentationeditor/main/app/controller/Main.js | 4 ++-- apps/presentationeditor/mobile/app/controller/Main.js | 8 ++++---- apps/spreadsheeteditor/main/app/controller/Main.js | 4 ++-- apps/spreadsheeteditor/mobile/app/controller/Main.js | 8 ++++---- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index b74fd5b0e..8c929dd01 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -2480,8 +2480,8 @@ define([ if (!Common.Locale.getCurrentLanguage()) { Common.UI.warning({ msg: this.errorLang, - callback: function() { - } + buttons: [], + closable: false }); return false; } diff --git a/apps/documenteditor/mobile/app/controller/Main.js b/apps/documenteditor/mobile/app/controller/Main.js index 9f6c281d5..b53ab6578 100644 --- a/apps/documenteditor/mobile/app/controller/Main.js +++ b/apps/documenteditor/mobile/app/controller/Main.js @@ -1499,10 +1499,10 @@ define([ onLanguageLoaded: function() { if (!Common.Locale.getCurrentLanguage()) { - uiApp.alert( - this.errorLang, - this.notcriticalErrorTitle - ); + uiApp.modal({ + title : this.notcriticalErrorTitle, + text : this.errorLang + }); return false; } return true; diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index 764938ed8..419c9a5eb 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -2111,8 +2111,8 @@ define([ if (!Common.Locale.getCurrentLanguage()) { Common.UI.warning({ msg: this.errorLang, - callback: function() { - } + buttons: [], + closable: false }); return false; } diff --git a/apps/presentationeditor/mobile/app/controller/Main.js b/apps/presentationeditor/mobile/app/controller/Main.js index 2c66e159b..012b4ce3d 100644 --- a/apps/presentationeditor/mobile/app/controller/Main.js +++ b/apps/presentationeditor/mobile/app/controller/Main.js @@ -1400,10 +1400,10 @@ define([ onLanguageLoaded: function() { if (!Common.Locale.getCurrentLanguage()) { - uiApp.alert( - this.errorLang, - this.notcriticalErrorTitle - ); + uiApp.modal({ + title : this.notcriticalErrorTitle, + text : this.errorLang + }); return false; } return true; diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 3e34f052c..54d99bab3 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -2456,8 +2456,8 @@ define([ if (!Common.Locale.getCurrentLanguage()) { Common.UI.warning({ msg: this.errorLang, - callback: function() { - } + buttons: [], + closable: false }); return false; } diff --git a/apps/spreadsheeteditor/mobile/app/controller/Main.js b/apps/spreadsheeteditor/mobile/app/controller/Main.js index e73df8db7..71f96d868 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/Main.js +++ b/apps/spreadsheeteditor/mobile/app/controller/Main.js @@ -1603,10 +1603,10 @@ define([ onLanguageLoaded: function() { if (!Common.Locale.getCurrentLanguage()) { - uiApp.alert( - this.errorLang, - this.notcriticalErrorTitle - ); + uiApp.modal({ + title : this.notcriticalErrorTitle, + text : this.errorLang + }); return false; } return true; From 745231f3b79fc475961b700716dc1806010b2f06 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 17 May 2021 17:52:29 +0300 Subject: [PATCH 009/376] [SSE] Fix disabled buttons in statusbar --- apps/common/main/resources/less/buttons.less | 2 +- apps/spreadsheeteditor/main/resources/less/statusbar.less | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/apps/common/main/resources/less/buttons.less b/apps/common/main/resources/less/buttons.less index bed7c4f18..7436891fc 100644 --- a/apps/common/main/resources/less/buttons.less +++ b/apps/common/main/resources/less/buttons.less @@ -332,7 +332,7 @@ .border-radius(1px); background-color: transparent; - .masked & { + .masked:not(.statusbar) & { &:disabled { opacity: 1; } diff --git a/apps/spreadsheeteditor/main/resources/less/statusbar.less b/apps/spreadsheeteditor/main/resources/less/statusbar.less index 909cc3619..6874612ed 100644 --- a/apps/spreadsheeteditor/main/resources/less/statusbar.less +++ b/apps/spreadsheeteditor/main/resources/less/statusbar.less @@ -23,8 +23,6 @@ text-align: center; &.disabled { - color: @border-preview-select-ie; - color: @border-preview-select; cursor: default; } } @@ -400,12 +398,6 @@ } } - &.masked #status-addtabs-box{ - button.disabled .btn-icon { - background-position-x: 0px !important; - } - opacity: 0.4; - } } .statusbar-mask { From f49703ddf739549947de1c75e069a19271f2ee75 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 18 May 2021 13:38:59 +0300 Subject: [PATCH 010/376] Update help --- .../resources/help/en/HelpfulHints/About.htm | 2 +- .../help/en/HelpfulHints/SupportedFormats.htm | 10 +-- .../UsageInstructions/ChangeWrappingStyle.htm | 2 +- .../help/en/UsageInstructions/CreateLists.htm | 2 +- .../UsageInstructions/FontTypeSizeColor.htm | 4 +- .../UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/en/search/indexes.js | 14 +-- .../resources/help/fr/HelpfulHints/About.htm | 2 +- .../help/fr/HelpfulHints/SupportedFormats.htm | 10 +-- .../UsageInstructions/ChangeWrappingStyle.htm | 2 +- .../help/fr/UsageInstructions/CreateLists.htm | 2 +- .../UsageInstructions/FontTypeSizeColor.htm | 4 +- .../UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/fr/search/indexes.js | 12 +-- .../resources/help/ru/HelpfulHints/About.htm | 2 +- .../help/ru/HelpfulHints/SupportedFormats.htm | 9 +- .../UsageInstructions/ChangeWrappingStyle.htm | 2 +- .../help/ru/UsageInstructions/CreateLists.htm | 2 +- .../UsageInstructions/FontTypeSizeColor.htm | 4 +- .../UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/ru/search/indexes.js | 14 +-- .../resources/help/en/HelpfulHints/About.htm | 2 +- .../help/en/UsageInstructions/InsertText.htm | 4 +- .../main/resources/help/en/search/indexes.js | 4 +- .../resources/help/fr/HelpfulHints/About.htm | 2 +- .../help/fr/UsageInstructions/InsertText.htm | 4 +- .../main/resources/help/fr/search/indexes.js | 4 +- .../resources/help/ru/HelpfulHints/About.htm | 2 +- .../help/ru/UsageInstructions/InsertText.htm | 4 +- .../main/resources/help/ru/search/indexes.js | 6 +- .../resources/help/en/Functions/xlookup.htm | 8 +- .../resources/help/en/HelpfulHints/About.htm | 2 +- .../help/en/UsageInstructions/AlignText.htm | 80 ++++++++++-------- .../help/en/UsageInstructions/PivotTables.htm | 6 ++ .../main/resources/help/en/search/indexes.js | 8 +- .../resources/help/fr/Functions/xlookup.htm | 6 +- .../resources/help/fr/HelpfulHints/About.htm | 2 +- .../help/fr/UsageInstructions/AlignText.htm | 75 ++++++++-------- .../help/fr/UsageInstructions/PivotTables.htm | 14 ++- .../main/resources/help/fr/images/xlookup.png | Bin 0 -> 30745 bytes .../main/resources/help/fr/search/indexes.js | 8 +- .../resources/help/ru/Functions/xlookup.htm | 8 +- .../resources/help/ru/HelpfulHints/About.htm | 2 +- .../help/ru/UsageInstructions/AlignText.htm | 22 +++-- .../help/ru/UsageInstructions/PivotTables.htm | 6 ++ .../main/resources/help/ru/search/indexes.js | 10 +-- 46 files changed, 221 insertions(+), 173 deletions(-) create mode 100644 apps/spreadsheeteditor/main/resources/help/fr/images/xlookup.png diff --git a/apps/documenteditor/main/resources/help/en/HelpfulHints/About.htm b/apps/documenteditor/main/resources/help/en/HelpfulHints/About.htm index c2391dbdd..add7415bd 100644 --- a/apps/documenteditor/main/resources/help/en/HelpfulHints/About.htm +++ b/apps/documenteditor/main/resources/help/en/HelpfulHints/About.htm @@ -18,7 +18,7 @@ and edit documents directly in your browser.

    Using the Document Editor, you can perform various editing operations like in any desktop editor, print the edited documents keeping all the formatting details or download them onto your computer hard disk drive of your computer as DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB files.

    -

    To view the current software version and licensor details in the online version, click the About icon icon on the left sidebar. To view the current software version and licensor details in the desktop version, select the About menu item on the left sidebar of the main program window.

    +

    To view the current software version and licensor details in the online version, click the About icon icon on the left sidebar. To view the current software version and licensor details in the desktop version for Windows, select the About menu item on the left sidebar of the main program window. In the desktop version for Mac OS, open the ONLYOFFICE menu at the top of the screen and select the About ONLYOFFICE menu item.

    \ No newline at end of file diff --git a/apps/documenteditor/main/resources/help/en/HelpfulHints/SupportedFormats.htm b/apps/documenteditor/main/resources/help/en/HelpfulHints/SupportedFormats.htm index 72f1fdd2c..6baf4daa6 100644 --- a/apps/documenteditor/main/resources/help/en/HelpfulHints/SupportedFormats.htm +++ b/apps/documenteditor/main/resources/help/en/HelpfulHints/SupportedFormats.htm @@ -53,7 +53,7 @@ FB2 An ebook extension that lets you read books on your computer or mobile devices + - + + + @@ -103,13 +103,13 @@ HyperText Markup Language
    The main markup language for web pages + + - in the online version + + EPUB Electronic Publication
    Free and open e-book standard created by the International Digital Publishing Forum + - + + + @@ -130,7 +130,7 @@ XML Extensible Markup Language (XML).
    A simple and flexible markup language that derived from SGML (ISO 8879) and is designed to store and transport data. + - + + -

    Note: the HTML/EPUB/MHT formats run without Chromium and are available on all platforms.

    +

    Note: all formats run without Chromium and are available on all platforms.

    \ No newline at end of file diff --git a/apps/documenteditor/main/resources/help/en/UsageInstructions/ChangeWrappingStyle.htm b/apps/documenteditor/main/resources/help/en/UsageInstructions/ChangeWrappingStyle.htm index f25b080d3..aa830343e 100644 --- a/apps/documenteditor/main/resources/help/en/UsageInstructions/ChangeWrappingStyle.htm +++ b/apps/documenteditor/main/resources/help/en/UsageInstructions/ChangeWrappingStyle.htm @@ -43,7 +43,7 @@

    If you select the Square, Tight, Through, or Top and bottom style, you will be able to set up some additional parameters - Distance from Text at all sides (top, bottom, left, right). To access these parameters, right-click the object, select the Advanced Settings option and switch to the Text Wrapping tab of the object Advanced Settings window. Set the required values and click OK.

    If you select a wrapping style other than Inline, the Position tab is also available in the object Advanced Settings window. To learn more on these parameters, please refer to the corresponding pages with the instructions on how to work with shapes, images or charts.

    -

    If you select a wrapping style other than Inline, you can also edit the wrap boundary for images or shapes. Right-click the object, select the Wrapping Style option from the contextual menu and click the Edit Wrap Boundary option. Drag wrap points to customize the boundary. To create a new wrap point, click anywhere on the red line and drag it to the required position. Editing Wrap Boundary

    +

    If you select a wrapping style other than Inline, you can also edit the wrap boundary for images or shapes. Right-click the object, select the Wrapping Style option from the contextual menu and click the Edit Wrap Boundary option. You can also use the Wrapping -> Edit Wrap Boundary menu on the Layout tab of the top toolbar. Drag wrap points to customize the boundary. To create a new wrap point, click anywhere on the red line and drag it to the required position. Editing Wrap Boundary

    Change text wrapping for tables

    For tables, the following two wrapping styles are available: Inline table and Flow table.

    To change the currently selected wrapping style:

    diff --git a/apps/documenteditor/main/resources/help/en/UsageInstructions/CreateLists.htm b/apps/documenteditor/main/resources/help/en/UsageInstructions/CreateLists.htm index 686c3a409..8b11857af 100644 --- a/apps/documenteditor/main/resources/help/en/UsageInstructions/CreateLists.htm +++ b/apps/documenteditor/main/resources/help/en/UsageInstructions/CreateLists.htm @@ -32,7 +32,7 @@

    The program also creates numbered lists automatically when you enter digit 1 with a dot or a bracket and a space after it: 1., 1). Bulleted lists can be created automatically when you enter the -, * characters and a space after them.

    You can also change the text indentation in the lists and their nesting by clicking the Multilevel list Multilevel list icon, Decrease indent Decrease indent icon, and Increase indent Increase indent icon icons on the Home tab of the top toolbar.

    -

    To change the list level, click the Numbering Ordered List icon or Bullets Unordered List icon icon and choose the Change list level option, or place the cursor at the beginning of the line and press the Tab key on a keyboard to move to the next level of the list. Proceed with the list level needed.

    +

    To change the list level, click the Numbering Ordered List icon, Bullets Unordered List icon, or Multilevel list Multilevel list icon icon and choose the Change List Level option, or place the cursor at the beginning of the line and press the Tab key on a keyboard to move to the next level of the list. Proceed with the list level needed.

    change list level

    The additional indentation and spacing parameters can be changed on the right sidebar and in the advanced settings window. To learn more about it, read the Change paragraph indents and Set paragraph line spacing section.

    diff --git a/apps/documenteditor/main/resources/help/en/UsageInstructions/FontTypeSizeColor.htm b/apps/documenteditor/main/resources/help/en/UsageInstructions/FontTypeSizeColor.htm index e8749fa76..104a18416 100644 --- a/apps/documenteditor/main/resources/help/en/UsageInstructions/FontTypeSizeColor.htm +++ b/apps/documenteditor/main/resources/help/en/UsageInstructions/FontTypeSizeColor.htm @@ -15,7 +15,7 @@

    Set the font type, size, and color

    In the Document Editor, you can select the font type, its size and color using the corresponding icons on the Home tab of the top toolbar.

    -

    In case you want to apply the formatting to the already existing text in the document, select it with the mouse or use the keyboard and apply the formatting.

    +

    In case you want to apply the formatting to the already existing text in the document, select it with the mouse or use the keyboard and apply the formatting. You can also place the mouse cursor within the necessary word to apply the formatting to this word only.

    @@ -40,7 +40,7 @@ - + diff --git a/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm index 54aab2ea1..1d955c208 100644 --- a/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
    1. click the File tab of the top toolbar,
    2. select the Save as... option,
    3. -
    4. choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDFA. You can also choose the Document template (DOTX or OTT) option.
    5. +
    6. choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. You can also choose the Document template (DOTX or OTT) option.
    diff --git a/apps/documenteditor/main/resources/help/en/search/indexes.js b/apps/documenteditor/main/resources/help/en/search/indexes.js index d8d86cca6..007833abe 100644 --- a/apps/documenteditor/main/resources/help/en/search/indexes.js +++ b/apps/documenteditor/main/resources/help/en/search/indexes.js @@ -3,7 +3,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "About Document Editor", - "body": "About the Document Editor The Document Editor is an online application that allows you to view through and edit documents directly in your browser . Using the Document Editor, you can perform various editing operations like in any desktop editor, print the edited documents keeping all the formatting details or download them onto your computer hard disk drive of your computer as DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB files. To view the current software version and licensor details in the online version, click the icon on the left sidebar. To view the current software version and licensor details in the desktop version, select the About menu item on the left sidebar of the main program window." + "body": "About the Document Editor The Document Editor is an online application that allows you to view through and edit documents directly in your browser . Using the Document Editor, you can perform various editing operations like in any desktop editor, print the edited documents keeping all the formatting details or download them onto your computer hard disk drive of your computer as DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB files. To view the current software version and licensor details in the online version, click the icon on the left sidebar. To view the current software version and licensor details in the desktop version for Windows, select the About menu item on the left sidebar of the main program window. In the desktop version for Mac OS, open the ONLYOFFICE menu at the top of the screen and select the About ONLYOFFICE menu item." }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -53,7 +53,7 @@ var indexes = { "id": "HelpfulHints/SupportedFormats.htm", "title": "Supported Formats of Electronic Documents", - "body": "An electronic document is one of the most commonly used computer. Due to the highly developed modern computer network, it's more convenient to distribute electronic documents than printed ones. Nowadays, a lot of devices are used for document presentation, so there are plenty of proprietary and open file formats. The Document Editor handles the most popular of them. Formats Description View Edit Download DOC Filename extension for word processing documents created with Microsoft Word + + DOCX Office Open XML Zipped, XML-based file format developed by Microsoft for representing spreadsheets, charts, presentations, and word processing documents + + + DOTX Word Open XML Document Template Zipped, XML-based file format developed by Microsoft for text document templates. A DOTX template contains formatting settings, styles etc. and can be used to create multiple documents with the same formatting + + + FB2 An ebook extension that lets you read books on your computer or mobile devices + + ODT Word processing file format of OpenDocument, an open standard for electronic documents + + + OTT OpenDocument Document Template OpenDocument file format for text document templates. An OTT template contains formatting settings, styles etc. and can be used to create multiple documents with the same formatting + + + RTF Rich Text Format Document file format developed by Microsoft for cross-platform document interchange + + + TXT Filename extension for text files usually containing very little formatting + + + PDF Portable Document Format File format used to represent documents regardless of the used software, hardware, and operating systems + + PDF/A Portable Document Format / A An ISO-standardized version of the Portable Document Format (PDF) specialized for use in the archiving and long-term preservation of electronic documents. + + HTML HyperText Markup Language The main markup language for web pages + + in the online version EPUB Electronic Publication Free and open e-book standard created by the International Digital Publishing Forum + + XPS Open XML Paper Specification Open royalty-free fixed-layout document format developed by Microsoft + DjVu File format designed primarily to store scanned documents, especially those containing a combination of text, line drawings, and photographs + XML Extensible Markup Language (XML). A simple and flexible markup language that derived from SGML (ISO 8879) and is designed to store and transport data. + Note: the HTML/EPUB/MHT formats run without Chromium and are available on all platforms." + "body": "An electronic document is one of the most commonly used computer. Due to the highly developed modern computer network, it's more convenient to distribute electronic documents than printed ones. Nowadays, a lot of devices are used for document presentation, so there are plenty of proprietary and open file formats. The Document Editor handles the most popular of them. Formats Description View Edit Download DOC Filename extension for word processing documents created with Microsoft Word + + DOCX Office Open XML Zipped, XML-based file format developed by Microsoft for representing spreadsheets, charts, presentations, and word processing documents + + + DOTX Word Open XML Document Template Zipped, XML-based file format developed by Microsoft for text document templates. A DOTX template contains formatting settings, styles etc. and can be used to create multiple documents with the same formatting + + + FB2 An ebook extension that lets you read books on your computer or mobile devices + + + ODT Word processing file format of OpenDocument, an open standard for electronic documents + + + OTT OpenDocument Document Template OpenDocument file format for text document templates. An OTT template contains formatting settings, styles etc. and can be used to create multiple documents with the same formatting + + + RTF Rich Text Format Document file format developed by Microsoft for cross-platform document interchange + + + TXT Filename extension for text files usually containing very little formatting + + + PDF Portable Document Format File format used to represent documents regardless of the used software, hardware, and operating systems + + PDF/A Portable Document Format / A An ISO-standardized version of the Portable Document Format (PDF) specialized for use in the archiving and long-term preservation of electronic documents. + + HTML HyperText Markup Language The main markup language for web pages + + + EPUB Electronic Publication Free and open e-book standard created by the International Digital Publishing Forum + + + XPS Open XML Paper Specification Open royalty-free fixed-layout document format developed by Microsoft + DjVu File format designed primarily to store scanned documents, especially those containing a combination of text, line drawings, and photographs + XML Extensible Markup Language (XML). A simple and flexible markup language that derived from SGML (ISO 8879) and is designed to store and transport data. + + Note: all formats run without Chromium and are available on all platforms." }, { "id": "ProgramInterface/FileTab.htm", @@ -78,7 +78,7 @@ var indexes = { "id": "ProgramInterface/PluginsTab.htm", "title": "Plugins tab", - "body": "The Plugins tab of the Document Editor allows accessing the advanced editing features using the available third-party components. This tab also makes it possible to use macros to simplify routine operations. The corresponding window of the Online Document Editor: The corresponding window of the Desktop Document Editor: The Settings button allows viewing and managing all the installed plugins as well as adding new ones. The Macros button allows you to create and run your own macros. To learn more about macros, please refer to our API Documentation. Currently, the following plugins are available by default: Send allows to send the document via email using the default desktop mail client (available in the desktop version only), Highlight code allows to highlight syntax of the code selecting the necessary language, style, background color, OCR allows to recognize text included into a picture and insert it into the document text, Photo Editor allows to edit images: crop, flip, rotate them, draw lines and shapes, add icons and text, load a mask and apply filters such as Grayscale, Invert, Sepia, Blur, Sharpen, Emboss, etc., Speech allows to convert the selected text into speech (available in the online version only), Thesaurus allows to search for synonyms and antonyms of a word and replace it with the selected one, Translator allows to translate the selected text into other languages, This plugin doesn't work in Internet Explorer. YouTube allows to embed YouTube videos into your document, Mendeley allows to manage research papers and generate bibliographies for scholarly articles (available in the online version only), Zotero allows to manage bibliographic data and related research materials (available in the online version only), EasyBib helps to find and insert related books, journal articles and websites (available in the online version only). The Wordpress and EasyBib plugins can be used if you connect the corresponding services in your portal settings. You can use the following instructions for the server version or for the SaaS version. To learn more about plugins, please refer to our API Documentation. All the currently existing open source plugin examples are available on GitHub." + "body": "The Plugins tab of the Document Editor allows accessing the advanced editing features using the available third-party components. This tab also makes it possible to use macros to simplify routine operations. The corresponding window of the Online Document Editor: The corresponding window of the Desktop Document Editor: The Settings button allows viewing and managing all the installed plugins as well as adding new ones. The Macros button allows you to create and run your own macros. To learn more about macros, please refer to our API Documentation. Currently, the following plugins are available by default: Send allows to send the document via email using the default desktop mail client (available in the desktop version only), Highlight code allows to highlight syntax of the code selecting the necessary language, style, background color, OCR allows to recognize text included into a picture and insert it into the document text, Photo Editor allows to edit images: crop, flip, rotate them, draw lines and shapes, add icons and text, load a mask and apply filters such as Grayscale, Invert, Sepia, Blur, Sharpen, Emboss, etc., Speech allows to convert the selected text into speech (available in the online version only), Thesaurus allows to search for synonyms and antonyms of a word and replace it with the selected one, Translator allows to translate the selected text into other languages, This plugin doesn't work in Internet Explorer. YouTube allows to embed YouTube videos into your document, Mendeley allows to manage research papers and generate bibliographies for scholarly articles (available in the online version only), Zotero allows to manage bibliographic data and related research materials (available in the online version only), EasyBib helps to find and insert related books, journal articles and websites (available in the online version only). The Wordpress and EasyBib plugins can be used if you connect the corresponding services in your portal settings. You can use the following instructions for the server version or for the SaaS version. The Wordpress and EasyBib plugins are not included in the free version of the editors. To learn more about plugins, please refer to our API Documentation. All the currently existing open source plugin examples are available on GitHub." }, { "id": "ProgramInterface/ProgramInterface.htm", @@ -148,7 +148,7 @@ var indexes = { "id": "UsageInstructions/ChangeWrappingStyle.htm", "title": "Change text wrapping", - "body": "Change the text wrapping The Wrapping Style option determines the way the object is positioned relative to the text. In the Document Editor, you can change the text wrapping style for inserted objects, such as shapes, images, charts, text boxes or tables. Change text wrapping for shapes, images, charts, text boxes To change the currently selected wrapping style: left-click a separate object to select it. To select a text box, click on its border, not the text within it. open the text wrapping settings: switch to the the Layout tab of the top toolbar and click the arrow next to the Wrapping icon, or right-click the object and select the Wrapping Style option from the contextual menu, or right-click the object, select the Advanced Settings option and switch to the Text Wrapping tab of the object Advanced Settings window. select the necessary wrapping style: Inline - the object is considered to be a part of the text, like a character, so when the text moves, the object moves as well. In this case the positioning options are inaccessible. If one of the following styles is selected, the object can be moved independently of the text and precisely positioned on the page: Square - the text wraps the rectangular box that bounds the object. Tight - the text wraps the actual object edges. Through - the text wraps around the object edges and fills the open white space within the object. To apply this effect, use the Edit Wrap Boundary option from the right-click menu. Top and bottom - the text is only above and below the object. In front - the object overlaps the text. Behind - the text overlaps the object. If you select the Square, Tight, Through, or Top and bottom style, you will be able to set up some additional parameters - Distance from Text at all sides (top, bottom, left, right). To access these parameters, right-click the object, select the Advanced Settings option and switch to the Text Wrapping tab of the object Advanced Settings window. Set the required values and click OK. If you select a wrapping style other than Inline, the Position tab is also available in the object Advanced Settings window. To learn more on these parameters, please refer to the corresponding pages with the instructions on how to work with shapes, images or charts. If you select a wrapping style other than Inline, you can also edit the wrap boundary for images or shapes. Right-click the object, select the Wrapping Style option from the contextual menu and click the Edit Wrap Boundary option. Drag wrap points to customize the boundary. To create a new wrap point, click anywhere on the red line and drag it to the required position. Change text wrapping for tables For tables, the following two wrapping styles are available: Inline table and Flow table. To change the currently selected wrapping style: right-click the table and select the Table Advanced Settings option, switch to the Text Wrapping tab of the Table - Advanced Settings window, select one of the following options: Inline table is used to select the wrapping style when the text is broken by the table as well as to set the alignment: left, center, right. Flow table is used to select the wrapping style when the text is wrapped around the table. Using the Text Wrapping tab of the Table - Advanced Settings window, you can also set up the following additional parameters: For inline tables, you can set the table Alignment type (left, center or right) and Indent from left. For floating tables, you can set the Distance from text and the table position on the Table Position tab." + "body": "Change the text wrapping The Wrapping Style option determines the way the object is positioned relative to the text. In the Document Editor, you can change the text wrapping style for inserted objects, such as shapes, images, charts, text boxes or tables. Change text wrapping for shapes, images, charts, text boxes To change the currently selected wrapping style: left-click a separate object to select it. To select a text box, click on its border, not the text within it. open the text wrapping settings: switch to the the Layout tab of the top toolbar and click the arrow next to the Wrapping icon, or right-click the object and select the Wrapping Style option from the contextual menu, or right-click the object, select the Advanced Settings option and switch to the Text Wrapping tab of the object Advanced Settings window. select the necessary wrapping style: Inline - the object is considered to be a part of the text, like a character, so when the text moves, the object moves as well. In this case the positioning options are inaccessible. If one of the following styles is selected, the object can be moved independently of the text and precisely positioned on the page: Square - the text wraps the rectangular box that bounds the object. Tight - the text wraps the actual object edges. Through - the text wraps around the object edges and fills the open white space within the object. To apply this effect, use the Edit Wrap Boundary option from the right-click menu. Top and bottom - the text is only above and below the object. In front - the object overlaps the text. Behind - the text overlaps the object. If you select the Square, Tight, Through, or Top and bottom style, you will be able to set up some additional parameters - Distance from Text at all sides (top, bottom, left, right). To access these parameters, right-click the object, select the Advanced Settings option and switch to the Text Wrapping tab of the object Advanced Settings window. Set the required values and click OK. If you select a wrapping style other than Inline, the Position tab is also available in the object Advanced Settings window. To learn more on these parameters, please refer to the corresponding pages with the instructions on how to work with shapes, images or charts. If you select a wrapping style other than Inline, you can also edit the wrap boundary for images or shapes. Right-click the object, select the Wrapping Style option from the contextual menu and click the Edit Wrap Boundary option. You can also use the Wrapping -> Edit Wrap Boundary menu on the Layout tab of the top toolbar. Drag wrap points to customize the boundary. To create a new wrap point, click anywhere on the red line and drag it to the required position. Change text wrapping for tables For tables, the following two wrapping styles are available: Inline table and Flow table. To change the currently selected wrapping style: right-click the table and select the Table Advanced Settings option, switch to the Text Wrapping tab of the Table - Advanced Settings window, select one of the following options: Inline table is used to select the wrapping style when the text is broken by the table as well as to set the alignment: left, center, right. Flow table is used to select the wrapping style when the text is wrapped around the table. Using the Text Wrapping tab of the Table - Advanced Settings window, you can also set up the following additional parameters: For inline tables, you can set the table Alignment type (left, center or right) and Indent from left. For floating tables, you can set the Distance from text and the table position on the Table Position tab." }, { "id": "UsageInstructions/ConvertFootnotesEndnotes.htm", @@ -168,7 +168,7 @@ var indexes = { "id": "UsageInstructions/CreateLists.htm", "title": "Create lists", - "body": "To create a list in the Document Editor, place the cursor to the position where a list will be started (this can be a new line or the already entered text), switch to the Home tab of the top toolbar, select the list type you would like to start: Unordered list with markers is created using the Bullets icon on the top toolbar Ordered list with digits or letters is created using the Numbering icon on the top toolbar Click the downward arrow next to the Bullets or Numbering icon to select how the list is going to look like. each time you press the Enter key at the end of the line, a new ordered or unordered list item will appear. To stop that, press the Backspace key and keep on typing common text paragraphs. The program also creates numbered lists automatically when you enter digit 1 with a dot or a bracket and a space after it: 1., 1). Bulleted lists can be created automatically when you enter the -, * characters and a space after them. You can also change the text indentation in the lists and their nesting by clicking the Multilevel list , Decrease indent , and Increase indent icons on the Home tab of the top toolbar. To change the list level, click the Numbering or Bullets icon and choose the Change list level option, or place the cursor at the beginning of the line and press the Tab key on a keyboard to move to the next level of the list. Proceed with the list level needed. The additional indentation and spacing parameters can be changed on the right sidebar and in the advanced settings window. To learn more about it, read the Change paragraph indents and Set paragraph line spacing section. Combine and separate lists To combine a list with the previous one: click the first item of the second list with the right mouse button, use the Join to previous list option from the contextual menu. The lists will be joined and the numbering will continue in accordance with the first list numbering. To separate a list: click the list item where you want to begin a new list with the right mouse button, use the Separate list option from the contextual menu. The lists will be combined, and the numbering will continue in accordance with the first list numbering. Change numbering To continue sequential numbering in the second list according to the previous list numbering: click the first item of the second list with the right mouse button, use the Continue numbering option from the contextual menu. The numbering will continue in accordance with the first list numbering. To set a certain numbering initial value: click the list item where you want to apply a new numbering value with the right mouse button, use the Set numbering value option from the contextual menu, in the new opened window, set the required numeric value and click the OK button. Change the list settings To change the bulleted or numbered list settings, such as a bullet/number type, alignment, size and color: click an existing list item or select the text you want to format as a list, click the Bullets or Numbering icon on the Home tab of the top toolbar, select the List Settings option, the List Settings window will open. The bulleted list settings window looks like this: The numbered list settings window looks like this: For the bulleted list, you can choose a character used as a bullet, while for the numbered list you can choose the numbering type. The Alignment, Size and Color options are the same both for the bulleted and numbered lists. Bullet allows selecting the required character used for the bulleted list. When you click on the Font and Symbol field, the Symbol window will appear, and you will be able to choose one of the available characters. To learn more on how to work with symbols, please refer to this article. Type allows selecting the required numbering type used for the numbered list. The following options are available: None, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Alignment allows selecting the required bullet/number alignment type that is used to align bullets/numbers horizontally. The following alignment types are available: Left, Center, Right. Size allows selecting the required bullet/number size. The Like a text option is selected by default. When this option is selected, the bullet or number size corresponds to the text size. You can choose one of the predefined sizes ranging from 8 to 96. Color allows selecting the required bullet/number color. The Like a text option is selected by default. When this option is selected, the bullet or number color corresponds to the text color. You can choose the Automatic option to apply the automatic color, or select one of the theme colors, or standard colors in the palette, or specify a custom color. All the changes are displayed in the Preview field. click OK to apply the changes and close the settings window. To change the multilevel list settings, click a list item, click the Multilevel list icon on the Home tab of the top toolbar, select the List Settings option, the List Settings window will open. The multilevel list settings window looks like this: Choose the necessary level of the list in the Level field on the left, then use the buttons on the top to adjust the bullet or number appearance for the selected level: Type allows selecting the required numbering type used for the numbered list or the required character used for the bulleted list. The following options are available for the numbered list: None, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... For the bulleted list, you can choose one of the default symbols or use the New bullet option. When you click this option, the Symbol window will appear, and you will be able to choose one of the available characters. To learn more on how to work with symbols, please refer to this article. Alignment allows selecting the required bullet/number alignment type that is used to align bullets/numbers horizontally at the beginning of the paragraph. The following alignment types are available: Left, Center, Right. Size allows selecting the required bullet/number size. The Like a text option is selected by default. You can choose one of the predefined sizes ranging from 8 to 96. Color allows selecting the required bullet/number color. The Like a text option is selected by default. When this option is selected, the bullet or number color corresponds to the text color. You can choose the Automatic option to apply the automatic color, or select one of the theme colors, or standard colors on the palette, or specify a custom color. All the changes are displayed in the Preview field. click OK to apply the changes and close the settings window." + "body": "To create a list in the Document Editor, place the cursor to the position where a list will be started (this can be a new line or the already entered text), switch to the Home tab of the top toolbar, select the list type you would like to start: Unordered list with markers is created using the Bullets icon on the top toolbar Ordered list with digits or letters is created using the Numbering icon on the top toolbar Click the downward arrow next to the Bullets or Numbering icon to select how the list is going to look like. each time you press the Enter key at the end of the line, a new ordered or unordered list item will appear. To stop that, press the Backspace key and keep on typing common text paragraphs. The program also creates numbered lists automatically when you enter digit 1 with a dot or a bracket and a space after it: 1., 1). Bulleted lists can be created automatically when you enter the -, * characters and a space after them. You can also change the text indentation in the lists and their nesting by clicking the Multilevel list , Decrease indent , and Increase indent icons on the Home tab of the top toolbar. To change the list level, click the Numbering , Bullets , or Multilevel list icon and choose the Change List Level option, or place the cursor at the beginning of the line and press the Tab key on a keyboard to move to the next level of the list. Proceed with the list level needed. The additional indentation and spacing parameters can be changed on the right sidebar and in the advanced settings window. To learn more about it, read the Change paragraph indents and Set paragraph line spacing section. Combine and separate lists To combine a list with the previous one: click the first item of the second list with the right mouse button, use the Join to previous list option from the contextual menu. The lists will be joined and the numbering will continue in accordance with the first list numbering. To separate a list: click the list item where you want to begin a new list with the right mouse button, use the Separate list option from the contextual menu. The lists will be combined, and the numbering will continue in accordance with the first list numbering. Change numbering To continue sequential numbering in the second list according to the previous list numbering: click the first item of the second list with the right mouse button, use the Continue numbering option from the contextual menu. The numbering will continue in accordance with the first list numbering. To set a certain numbering initial value: click the list item where you want to apply a new numbering value with the right mouse button, use the Set numbering value option from the contextual menu, in the new opened window, set the required numeric value and click the OK button. Change the list settings To change the bulleted or numbered list settings, such as a bullet/number type, alignment, size and color: click an existing list item or select the text you want to format as a list, click the Bullets or Numbering icon on the Home tab of the top toolbar, select the List Settings option, the List Settings window will open. The bulleted list settings window looks like this: The numbered list settings window looks like this: For the bulleted list, you can choose a character used as a bullet, while for the numbered list you can choose the numbering type. The Alignment, Size and Color options are the same both for the bulleted and numbered lists. Bullet allows selecting the required character used for the bulleted list. When you click on the Font and Symbol field, the Symbol window will appear, and you will be able to choose one of the available characters. To learn more on how to work with symbols, please refer to this article. Type allows selecting the required numbering type used for the numbered list. The following options are available: None, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Alignment allows selecting the required bullet/number alignment type that is used to align bullets/numbers horizontally. The following alignment types are available: Left, Center, Right. Size allows selecting the required bullet/number size. The Like a text option is selected by default. When this option is selected, the bullet or number size corresponds to the text size. You can choose one of the predefined sizes ranging from 8 to 96. Color allows selecting the required bullet/number color. The Like a text option is selected by default. When this option is selected, the bullet or number color corresponds to the text color. You can choose the Automatic option to apply the automatic color, or select one of the theme colors, or standard colors in the palette, or specify a custom color. All the changes are displayed in the Preview field. click OK to apply the changes and close the settings window. To change the multilevel list settings, click a list item, click the Multilevel list icon on the Home tab of the top toolbar, select the List Settings option, the List Settings window will open. The multilevel list settings window looks like this: Choose the necessary level of the list in the Level field on the left, then use the buttons on the top to adjust the bullet or number appearance for the selected level: Type allows selecting the required numbering type used for the numbered list or the required character used for the bulleted list. The following options are available for the numbered list: None, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... For the bulleted list, you can choose one of the default symbols or use the New bullet option. When you click this option, the Symbol window will appear, and you will be able to choose one of the available characters. To learn more on how to work with symbols, please refer to this article. Alignment allows selecting the required bullet/number alignment type that is used to align bullets/numbers horizontally at the beginning of the paragraph. The following alignment types are available: Left, Center, Right. Size allows selecting the required bullet/number size. The Like a text option is selected by default. You can choose one of the predefined sizes ranging from 8 to 96. Color allows selecting the required bullet/number color. The Like a text option is selected by default. When this option is selected, the bullet or number color corresponds to the text color. You can choose the Automatic option to apply the automatic color, or select one of the theme colors, or standard colors on the palette, or specify a custom color. All the changes are displayed in the Preview field. click OK to apply the changes and close the settings window." }, { "id": "UsageInstructions/CreateTableOfContents.htm", @@ -183,7 +183,7 @@ var indexes = { "id": "UsageInstructions/FontTypeSizeColor.htm", "title": "Set font type, size, and color", - "body": "Set the font type, size, and color In the Document Editor, you can select the font type, its size and color using the corresponding icons on the Home tab of the top toolbar. In case you want to apply the formatting to the already existing text in the document, select it with the mouse or use the keyboard and apply the formatting. Font Used to select a font from the list of the the available fonts. If the required font is not available in the list, you can download and install it on your operating system, and the font will be available in the desktop version. Font size Used to choose from the preset font size values in the dropdown list (the default values are: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 and 96). It's also possible to manually enter a custom value up to 300 pt in the font size field. Press Enter to confirm. Increment font size Used to change the font size making it one point bigger each time the button is pressed. Decrement font size Used to change the font size making it one point smaller each time the button is pressed. Change case Used to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text. Highlight color Used to mark separate sentences, phrases, words, or even characters by adding a color band that imitates the highlighter pen effect throughout the text. You can select the required part of the text and click the downward arrow next to the icon to select a color in the palette (this color set does not depend on the selected Color scheme and includes 16 colors) - the color will be applied to the selected text. Alternatively, you can first choose a highlight color and then start selecting the text with the mouse - the mouse pointer will look like this and you'll be able to highlight several different parts of your text sequentially. To stop highlighting, just click the icon once again. To delete the highlight color, choose the No Fill option. The Highlight color is different from the Background color as the latter is applied to the whole paragraph and completely fills all the paragraph space from the left page margin to the right page margin. Font color Used to change the color of the letters/characters in the text. By default, the automatic font color is set in a new blank document. It is displayed as a black font on the white background. If you change the background color to black, the font color will automatically change to white to keep the text clearly visible. To choose a different color, click the downward arrow next to the icon and select a color from the available palettes (the colors in the Theme Colors palette depend on the selected color scheme). After you change the default font color, you can use the Automatic option in the color palettes window to quickly restore the automatic color for the selected text passage. To learn more about color palettes, please refer to this page." + "body": "Set the font type, size, and color In the Document Editor, you can select the font type, its size and color using the corresponding icons on the Home tab of the top toolbar. In case you want to apply the formatting to the already existing text in the document, select it with the mouse or use the keyboard and apply the formatting. You can also place the mouse cursor within the necessary word to apply the formatting to this word only. Font Used to select a font from the list of the the available fonts. If the required font is not available in the list, you can download and install it on your operating system, and the font will be available in the desktop version. Font size Used to choose from the preset font size values in the dropdown list (the default values are: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 and 96). It's also possible to manually enter a custom value up to 300 pt in the font size field. Press Enter to confirm. Increment font size Used to change the font size making it one point bigger each time the button is pressed. Decrement font size Used to change the font size making it one point smaller each time the button is pressed. Change case Used to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text or the word where the mouse cursor is positioned. Highlight color Used to mark separate sentences, phrases, words, or even characters by adding a color band that imitates the highlighter pen effect throughout the text. You can select the required part of the text and click the downward arrow next to the icon to select a color in the palette (this color set does not depend on the selected Color scheme and includes 16 colors) - the color will be applied to the selected text. Alternatively, you can first choose a highlight color and then start selecting the text with the mouse - the mouse pointer will look like this and you'll be able to highlight several different parts of your text sequentially. To stop highlighting, just click the icon once again. To delete the highlight color, choose the No Fill option. The Highlight color is different from the Background color as the latter is applied to the whole paragraph and completely fills all the paragraph space from the left page margin to the right page margin. Font color Used to change the color of the letters/characters in the text. By default, the automatic font color is set in a new blank document. It is displayed as a black font on the white background. If you change the background color to black, the font color will automatically change to white to keep the text clearly visible. To choose a different color, click the downward arrow next to the icon and select a color from the available palettes (the colors in the Theme Colors palette depend on the selected color scheme). After you change the default font color, you can use the Automatic option in the color palettes window to quickly restore the automatic color for the selected text passage. To learn more about color palettes, please refer to this page." }, { "id": "UsageInstructions/FormattingPresets.htm", @@ -328,7 +328,7 @@ var indexes = { "id": "UsageInstructions/SavePrintDownload.htm", "title": "Save/download/print your document", - "body": "Save/download/ print your document Saving By default, online Document Editor automatically saves your file each 2 seconds when you work on it to prevent your data loss in case the program closes unexpectedly. If you co-edit the file in the Fast mode, the timer requests for updates 25 times a second and saves the changes if they have been made. When the file is being co-edited in the Strict mode, changes are automatically saved at 10-minute intervals. If necessary, you can easily select the preferred co-editing mode or disable the Autosave feature on the Advanced Settings page. To save your current document manually in the current format and location, press the Save icon in the left part of the editor header, or use the Ctrl+S key combination, or click the File tab of the top toolbar and select the Save option. In the desktop version, to prevent data from loss in case program closes unexpectedly, you can turn on the Autorecover option on the Advanced Settings page. In the desktop version, you can save the document with another name, in a new location or format, click the File tab of the top toolbar, select the Save as... option, choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDFA. You can also choose the Document template (DOTX or OTT) option. Downloading In the online version, you can download the resulting document onto your computer hard disk drive, click the File tab of the top toolbar, select the Download as... option, choose one of the available formats depending on your needs: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Saving a copy In the online version, you can save a copy of the file on your portal, click the File tab of the top toolbar, select the Save Copy as... option, choose one of the available formats depending on your needs: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB, select a location of the file on the portal and press Save. Printing To print out the current document, click the Print icon in the left part of the editor header, or use the Ctrl+P key combination, or click the File tab of the top toolbar and select the Print option. The Firefox browser enables printing without downloading the document as a .pdf file first. It's also possible to print a selected text passage using the Print Selection option from the contextual menu both in the Edit and View modes (Right Mouse Button Click and choose option Print selection). In the desktop version, the file will be printed directly. In the online version, a PDF file will be generated on the basis of the document. You can open and print it out, or save onto your computer hard disk drive or removable medium to print it out later. Some browsers (e.g. Chrome and Opera) support direct printing." + "body": "Save/download/ print your document Saving By default, online Document Editor automatically saves your file each 2 seconds when you work on it to prevent your data loss in case the program closes unexpectedly. If you co-edit the file in the Fast mode, the timer requests for updates 25 times a second and saves the changes if they have been made. When the file is being co-edited in the Strict mode, changes are automatically saved at 10-minute intervals. If necessary, you can easily select the preferred co-editing mode or disable the Autosave feature on the Advanced Settings page. To save your current document manually in the current format and location, press the Save icon in the left part of the editor header, or use the Ctrl+S key combination, or click the File tab of the top toolbar and select the Save option. In the desktop version, to prevent data from loss in case program closes unexpectedly, you can turn on the Autorecover option on the Advanced Settings page. In the desktop version, you can save the document with another name, in a new location or format, click the File tab of the top toolbar, select the Save as... option, choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. You can also choose the Document template (DOTX or OTT) option. Downloading In the online version, you can download the resulting document onto your computer hard disk drive, click the File tab of the top toolbar, select the Download as... option, choose one of the available formats depending on your needs: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Saving a copy In the online version, you can save a copy of the file on your portal, click the File tab of the top toolbar, select the Save Copy as... option, choose one of the available formats depending on your needs: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB, select a location of the file on the portal and press Save. Printing To print out the current document, click the Print icon in the left part of the editor header, or use the Ctrl+P key combination, or click the File tab of the top toolbar and select the Print option. The Firefox browser enables printing without downloading the document as a .pdf file first. It's also possible to print a selected text passage using the Print Selection option from the contextual menu both in the Edit and View modes (Right Mouse Button Click and choose option Print selection). In the desktop version, the file will be printed directly. In the online version, a PDF file will be generated on the basis of the document. You can open and print it out, or save onto your computer hard disk drive or removable medium to print it out later. Some browsers (e.g. Chrome and Opera) support direct printing." }, { "id": "UsageInstructions/SectionBreaks.htm", diff --git a/apps/documenteditor/main/resources/help/fr/HelpfulHints/About.htm b/apps/documenteditor/main/resources/help/fr/HelpfulHints/About.htm index 7eeb62559..29fa7a9a2 100644 --- a/apps/documenteditor/main/resources/help/fr/HelpfulHints/About.htm +++ b/apps/documenteditor/main/resources/help/fr/HelpfulHints/About.htm @@ -16,7 +16,7 @@

    À propos de Document Editor

    Document Editor est une application en ligne qui vous permet de parcourir et de modifier des documents dans votre navigateur.

    En utilisant Document Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les documents modifiés en gardant la mise en forme ou les télécharger sur votre disque dur au format DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB.

    -

    Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône L'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la versionde bureau, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme.

    +

    Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône L'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau pour Windows, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme. Dans la version de bureau pour Mac OS, accédez au menu ONLYOFFICE en haut de l'écran et sélectionnez l'élément de menu À propos d'ONLYOFFICE.

    \ No newline at end of file diff --git a/apps/documenteditor/main/resources/help/fr/HelpfulHints/SupportedFormats.htm b/apps/documenteditor/main/resources/help/fr/HelpfulHints/SupportedFormats.htm index e9e684917..25ffdb379 100644 --- a/apps/documenteditor/main/resources/help/fr/HelpfulHints/SupportedFormats.htm +++ b/apps/documenteditor/main/resources/help/fr/HelpfulHints/SupportedFormats.htm @@ -50,7 +50,7 @@ - + @@ -100,13 +100,13 @@ - + - + @@ -127,7 +127,7 @@ - +
    Font
    Change case Change caseUsed to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text.Used to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text or the word where the mouse cursor is positioned.
    Highlight color FB2 Une extension de livres électroniques qui peut être lancé par votre ordinateur ou appareil mobile ++ +
    HyperText Markup Language
    Le principale langage de balisage pour les pages web
    + +dans la version en ligne+
    EPUB Electronic Publication
    Le format ebook standardisé, gratuit et ouvert créé par l'International Digital Publishing Forum
    ++ +
    XML Extensible Markup Language (XML).
    Le langage de balisage extensible est une forme restreinte d'application du langage de balisage généralisé standard SGM (ISO 8879) conçu pour stockage et traitement de données.
    ++
    -

    Remarque: Les formats HTML/EPUB/MHT n'ont pas besoin de Chromium et sont disponibles sur toutes les plateformes.

    +

    Remarque: tous les formats n'ont pas besoin de Chromium et sont disponibles sur toutes les plateformes.

    \ No newline at end of file diff --git a/apps/documenteditor/main/resources/help/fr/UsageInstructions/ChangeWrappingStyle.htm b/apps/documenteditor/main/resources/help/fr/UsageInstructions/ChangeWrappingStyle.htm index dfde26b4d..016b88968 100644 --- a/apps/documenteditor/main/resources/help/fr/UsageInstructions/ChangeWrappingStyle.htm +++ b/apps/documenteditor/main/resources/help/fr/UsageInstructions/ChangeWrappingStyle.htm @@ -43,7 +43,7 @@

    Si vous avez choisi l'un des styles Carré, Rapproché, Au travers, Haut et bas, vous avez la possibilité de configurer des paramètres supplémentaires - Distance du texte de tous les côtés (haut, bas, droite, gauche). Pour accéder à ces paramètres, cliquez avec le bouton droit sur l'objet, sélectionnez l'option Paramètres avancés et passez à l'onglet Style d'habillage du texte de la fenêtre Paramètres avancés de l'objet. Définissez les valeurs voulues et cliquez sur OK.

    Si vous sélectionnez un style d'habillage autre que En ligne, l'onglet Position est également disponible dans la fenêtre Paramètres avancés de l'objet. Pour en savoir plus sur ces paramètres, reportez-vous aux pages correspondantes avec les instructions sur la façon de travailler avec des formes, des images ou des graphiques.

    -

    Si vous sélectionnez un style d'habillage autre que En ligne, vous pouvez également modifier la limite d'habillage pour les images ou les formes. Cliquez avec le bouton droit sur l'objet, sélectionnez l'option Style d'habillage dans le menu contextuel et cliquez sur Modifier les limites du renvoi à la ligne. Faites glisser les points d'habillage pour personnaliser les limites. Pour créer un nouveau point d'habillage, cliquez sur la ligne rouge et faites-la glisser vers la position désirée. Modifier les limites du renvoi à la ligne

    +

    Si vous sélectionnez un style d'habillage autre que En ligne, vous pouvez également modifier la limite d'habillage pour les images ou les formes. Cliquez avec le bouton droit sur l'objet, sélectionnez l'option Style d'habillage dans le menu contextuel et cliquez sur Modifier les limites du renvoi à la ligne. Il est aussi possible d'utiliser le menu Retour à la ligne -> Modifier les limites du renvoi à la ligne sous l'onglet Mise en page de la barre d'outils supérieure. Faites glisser les points d'habillage pour personnaliser les limites. Pour créer un nouveau point d'habillage, cliquez sur la ligne rouge et faites-la glisser vers la position désirée. Modifier les limites du renvoi à la ligne

    Modifier l'habillage de texte pour les tableaux

    Pour les tableaux, les deux styles d'habillage suivants sont disponibles: Tableau aligné et Tableau flottant.

    Pour changer le style d'habillage actuellement sélectionné:

    diff --git a/apps/documenteditor/main/resources/help/fr/UsageInstructions/CreateLists.htm b/apps/documenteditor/main/resources/help/fr/UsageInstructions/CreateLists.htm index 87a7822a6..f6abe3003 100644 --- a/apps/documenteditor/main/resources/help/fr/UsageInstructions/CreateLists.htm +++ b/apps/documenteditor/main/resources/help/fr/UsageInstructions/CreateLists.htm @@ -32,7 +32,7 @@

    L'éditeur commence automatiquement une liste numérotée lorsque vous tapez 1 et un point ou une parenthèse droite et un espace: 1., 1). La liste à puces commence automatiquement lorsque vous tapez - ou * et un espace.

    Vous pouvez aussi changer le retrait du texte dans les listes et leur imbrication en utilisant les icônes Liste multi-niveaux L'icône de la liste multi-niveaux, Réduire le retrait L'icône Réduire le retrait et Augmenter le retrait L'icône Augmenter le retrait sous l'onglet Accueil de la barre d'outils supérieure.

    -

    Pour modifier le niveau de la liste, cliquez sur l'icône Numérotation L'icône de la liste ordonnée ou Puces L'icône de la liste non ordonnée et choisissez Changer le niveau de liste, ou placer le curseur au début de la ligne et appuyez sur la touche Tab du clavier pour augmenter le niveau de la liste. Procédez au niveau de liste approprié.

    +

    Pour modifier le niveau de la liste, cliquez sur l'icône Numérotation L'icône de la liste ordonnée, Puces L'icône de la liste non ordonnée, ou Liste multi-niveaux L'icône de la liste multi-niveaux et choisissez Changer le niveau de liste, ou placer le curseur au début de la ligne et appuyez sur la touche Tab du clavier pour augmenter le niveau de la liste. Procédez au niveau de liste approprié.

    Changer le niveau de liste

    Vous pouvez configurez les paramètres supplémentaires du retrait et de l'espacement sur la barre latérale droite et dans la fenêtre de configuration de paramètres avancées. Pour en savoir plus, consultez les pages Modifier le retrait des paragraphes et Régler l'interligne du paragraphe .

    diff --git a/apps/documenteditor/main/resources/help/fr/UsageInstructions/FontTypeSizeColor.htm b/apps/documenteditor/main/resources/help/fr/UsageInstructions/FontTypeSizeColor.htm index 0293ccb67..bbd674c36 100644 --- a/apps/documenteditor/main/resources/help/fr/UsageInstructions/FontTypeSizeColor.htm +++ b/apps/documenteditor/main/resources/help/fr/UsageInstructions/FontTypeSizeColor.htm @@ -15,7 +15,7 @@

    Définir le type de police, la taille et la couleur

    Dans Document Editor, vous pouvez sélectionner le type, la taille et la couleur de police à l'aide des icônes correspondantes situées dans l'onglet Accueil de la barre d'outils supérieure.

    -

    Si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavier et appliquez la mise en forme appropriée.

    +

    Si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavier et appliquez la mise en forme appropriée. Vous pouvez aussi positionner le curseur de la souris sur le mot à mettre en forme.

    @@ -40,7 +40,7 @@ - + diff --git a/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm index 9a3679400..9d9c33c40 100644 --- a/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
    1. cliquez sur l'onglet Fichier de la barre d'outils supérieure,
    2. sélectionnez l'option Enregistrer sous...,
    3. -
    4. sélectionnez l'un des formats disponibles selon vos besoins: DOCX, ODT, RTF, TXT, PDF, PDFA. Vous pouvez également choisir l'option Modèle de document (DOTX or OTT).
    5. +
    6. sélectionnez l'un des formats disponibles selon vos besoins: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. Vous pouvez également choisir l'option Modèle de document (DOTX or OTT).
    diff --git a/apps/documenteditor/main/resources/help/fr/search/indexes.js b/apps/documenteditor/main/resources/help/fr/search/indexes.js index 3e6b4773d..3ab0a01fa 100644 --- a/apps/documenteditor/main/resources/help/fr/search/indexes.js +++ b/apps/documenteditor/main/resources/help/fr/search/indexes.js @@ -3,7 +3,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "À propos de Document Editor", - "body": "Document Editor est une application en ligne qui vous permet de parcourir et de modifier des documents dans votre navigateur . En utilisant Document Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les documents modifiés en gardant la mise en forme ou les télécharger sur votre disque dur au format DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la versionde bureau, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme." + "body": "Document Editor est une application en ligne qui vous permet de parcourir et de modifier des documents dans votre navigateur . En utilisant Document Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les documents modifiés en gardant la mise en forme ou les télécharger sur votre disque dur au format DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau pour Windows, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme. Dans la version de bureau pour Mac OS, accédez au menu ONLYOFFICE en haut de l'écran et sélectionnez l'élément de menu À propos d'ONLYOFFICE." }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -53,7 +53,7 @@ var indexes = { "id": "HelpfulHints/SupportedFormats.htm", "title": "Formats des documents électroniques pris en charge", - "body": "Les documents électroniques représentent l'un des types des fichiers les plus utilisés en informatique. Grâce à l'utilisation du réseau informatique tant développé aujourd'hui, il est possible et plus pratique de distribuer des documents électroniques que des versions imprimées. Les formats de fichier ouverts et propriétaires sont bien nombreux à cause de la variété des périphériques utilisés pour la présentation des documents. Document Editor prend en charge les formats les plus populaires. Formats Description Affichage Édition Téléchargement DOC L'extension de nom de fichier pour les documents du traitement textuel créé avec Microsoft Word + + DOCX Office Open XML Le format de fichier compressé basé sur XML développé par Microsoft pour représenter des feuilles de calcul et les graphiques, les présentations et les document du traitement textuel + + + DOTX Word Open XML Document Template Format de fichier zippé, basé sur XML, développé par Microsoft pour les modèles de documents texte. Un modèle DOTX contient des paramètres de mise en forme, des styles, etc. et peut être utilisé pour créer plusieurs documents avec la même mise en forme + + + FB2 Une extension de livres électroniques qui peut être lancé par votre ordinateur ou appareil mobile + + ODT Le format de fichier du traitement textuel d'OpenDocument, le standard ouvert pour les documents électroniques + + + OTT OpenDocument Document Template Format de fichier OpenDocument pour les modèles de document texte. Un modèle OTT contient des paramètres de mise en forme, des styles, etc. et peut être utilisé pour créer plusieurs documents avec la même mise en forme + + + RTF Rich Text Format Le format de fichier du document développé par Microsoft pour la multiplateforme d'échange des documents + + + TXT L'extension de nom de fichier pour les fichiers de texte contenant habituellement une mise en forme minimale + + + PDF Portable Document Format Format de fichier utilisé pour représenter les documents d'une manière indépendante du logiciel, du matériel et des systèmes d'exploitation + + PDF/A Portable Document Format / A Une version normalisée ISO du format PDF (Portable Document Format) conçue pour l'archivage et la conservation à long terme des documents électroniques. + + HTML HyperText Markup Language Le principale langage de balisage pour les pages web + + dans la version en ligne EPUB Electronic Publication Le format ebook standardisé, gratuit et ouvert créé par l'International Digital Publishing Forum + + XPS Open XML Paper Specification Le format ouvert de la mise en page fixe, libre de redevance créé par Microsoft + DjVu Le format de fichier conçu principalement pour stocker les documents numérisés, en particulier ceux qui contiennent une combinaison du texte, des dessins au trait et des photographies + XML Extensible Markup Language (XML). Le langage de balisage extensible est une forme restreinte d'application du langage de balisage généralisé standard SGM (ISO 8879) conçu pour stockage et traitement de données. + Remarque: Les formats HTML/EPUB/MHT n'ont pas besoin de Chromium et sont disponibles sur toutes les plateformes." + "body": "Les documents électroniques représentent l'un des types des fichiers les plus utilisés en informatique. Grâce à l'utilisation du réseau informatique tant développé aujourd'hui, il est possible et plus pratique de distribuer des documents électroniques que des versions imprimées. Les formats de fichier ouverts et propriétaires sont bien nombreux à cause de la variété des périphériques utilisés pour la présentation des documents. Document Editor prend en charge les formats les plus populaires. Formats Description Affichage Édition Téléchargement DOC L'extension de nom de fichier pour les documents du traitement textuel créé avec Microsoft Word + + DOCX Office Open XML Le format de fichier compressé basé sur XML développé par Microsoft pour représenter des feuilles de calcul et les graphiques, les présentations et les document du traitement textuel + + + DOTX Word Open XML Document Template Format de fichier zippé, basé sur XML, développé par Microsoft pour les modèles de documents texte. Un modèle DOTX contient des paramètres de mise en forme, des styles, etc. et peut être utilisé pour créer plusieurs documents avec la même mise en forme + + + FB2 Une extension de livres électroniques qui peut être lancé par votre ordinateur ou appareil mobile + + + ODT Le format de fichier du traitement textuel d'OpenDocument, le standard ouvert pour les documents électroniques + + + OTT OpenDocument Document Template Format de fichier OpenDocument pour les modèles de document texte. Un modèle OTT contient des paramètres de mise en forme, des styles, etc. et peut être utilisé pour créer plusieurs documents avec la même mise en forme + + + RTF Rich Text Format Le format de fichier du document développé par Microsoft pour la multiplateforme d'échange des documents + + + TXT L'extension de nom de fichier pour les fichiers de texte contenant habituellement une mise en forme minimale + + + PDF Portable Document Format Format de fichier utilisé pour représenter les documents d'une manière indépendante du logiciel, du matériel et des systèmes d'exploitation + + PDF/A Portable Document Format / A Une version normalisée ISO du format PDF (Portable Document Format) conçue pour l'archivage et la conservation à long terme des documents électroniques. + + HTML HyperText Markup Language Le principale langage de balisage pour les pages web + + + EPUB Electronic Publication Le format ebook standardisé, gratuit et ouvert créé par l'International Digital Publishing Forum + + + XPS Open XML Paper Specification Le format ouvert de la mise en page fixe, libre de redevance créé par Microsoft + DjVu Le format de fichier conçu principalement pour stocker les documents numérisés, en particulier ceux qui contiennent une combinaison du texte, des dessins au trait et des photographies + XML Extensible Markup Language (XML). Le langage de balisage extensible est une forme restreinte d'application du langage de balisage généralisé standard SGM (ISO 8879) conçu pour stockage et traitement de données. + + Remarque: tous les formats n'ont pas besoin de Chromium et sont disponibles sur toutes les plateformes." }, { "id": "ProgramInterface/FileTab.htm", @@ -148,7 +148,7 @@ var indexes = { "id": "UsageInstructions/ChangeWrappingStyle.htm", "title": "Changer l'habillage du texte", - "body": "L'option Style d'habillage détermine la position de l'objet par rapport au texte. Dans Document Editor, vous pouvez modifier le style d'habillage de texte pour les objets insérés, tels que les formes, , les images, les graphiques,, les zones de texte ou les tableaux. Modifier l'habillage de texte pour les formes, les images, les graphiques, les zones de texte Pour changer le style d'habillage actuellement sélectionné: sélectionnez un objet séparé sur la page en cliquant dessus. Pour sélectionner un bloc de texte, cliquez sur son bord, pas sur le texte à l'intérieur. ouvrez les paramètres d'habillage du texte: Passez à l'onglet Mise en page de la barre d'outils supérieure et cliquez sur la flèche située en regard de l'icône Retour à la ligne, ou cliquez avec le bouton droit sur l'objet et sélectionnez l'option Style d'habillage dans le menu contextuel, ou cliquez avec le bouton droit sur l'objet, sélectionnez l'option Paramètres avancés et passez à l'onglet Habillage du texte de la fenêtre Paramètres avancés de l'objet. sélectionnez le style d'habillage voulu: En ligne sur le texte - l'image fait partie du texte, comme un caractère, ainsi si le texte est déplacé, l'image est déplacée elle aussi. Dans ce cas-là les options de position ne sont pas accessibles. Si vous sélectionnez un des styles suivants, vous pouvez déplacer l'image indépendamment du texte et définir sa position exacte: Carré - le texte est ajusté autour des bords de l'objet. Rapproché - le texte est ajusté sur le contour de l'objet. Au travers - le texte est ajusté autour des bords de l'image et occupe l'espace vide à l'intérieur de celle-ci. Pour créer l'effet, utilisez l'option Modifier les limites du renvoi à la ligne du menu contextuel. Haut et bas - le texte est ajusté en haut et en bas de l'image. Devant le texte - l'image est affichée sur le texte. Derrière le texte - le texte est affiché sur l'objet. Si vous avez choisi l'un des styles Carré, Rapproché, Au travers, Haut et bas, vous avez la possibilité de configurer des paramètres supplémentaires - Distance du texte de tous les côtés (haut, bas, droite, gauche). Pour accéder à ces paramètres, cliquez avec le bouton droit sur l'objet, sélectionnez l'option Paramètres avancés et passez à l'onglet Style d'habillage du texte de la fenêtre Paramètres avancés de l'objet. Définissez les valeurs voulues et cliquez sur OK. Si vous sélectionnez un style d'habillage autre que En ligne, l'onglet Position est également disponible dans la fenêtre Paramètres avancés de l'objet. Pour en savoir plus sur ces paramètres, reportez-vous aux pages correspondantes avec les instructions sur la façon de travailler avec des formes, des images ou des graphiques. Si vous sélectionnez un style d'habillage autre que En ligne, vous pouvez également modifier la limite d'habillage pour les images ou les formes. Cliquez avec le bouton droit sur l'objet, sélectionnez l'option Style d'habillage dans le menu contextuel et cliquez sur Modifier les limites du renvoi à la ligne. Faites glisser les points d'habillage pour personnaliser les limites. Pour créer un nouveau point d'habillage, cliquez sur la ligne rouge et faites-la glisser vers la position désirée. Modifier l'habillage de texte pour les tableaux Pour les tableaux, les deux styles d'habillage suivants sont disponibles: Tableau aligné et Tableau flottant. Pour changer le style d'habillage actuellement sélectionné: cliquez avec le bouton droit sur le tableau et sélectionnez l'option Paramètres avancés du tableau, passez à l'onglet Habillage du texte dans la fenêtre Tableau - Paramètres avancés ouverte, sélectionnez l'une des options suivantes: Tableau aligné est utilisé pour sélectionner le style d'habillage où le texte est interrompu par le tableau ainsi que l'alignement: gauche, au centre, droit. Tableau flottant est utilisé pour sélectionner le style d'habillage où le texte est enroulé autour du tableau. À l'aide de l'onglet Habillage du texte de la fenêtre Tableau - Paramètres avancésvous pouvez également configurer les paramètres suivants: Pour les tableaux alignés, vous pouvez définir le type d'alignement du tableau (à gauche, centre ou à droite) et le Retrait à gauche. Pour les tableaux flottants, vous pouvez spécifier la Distance du texte et la position du tableau dans l'onglet Position du tableau ." + "body": "L'option Style d'habillage détermine la position de l'objet par rapport au texte. Dans Document Editor, vous pouvez modifier le style d'habillage de texte pour les objets insérés, tels que les formes, , les images, les graphiques,, les zones de texte ou les tableaux. Modifier l'habillage de texte pour les formes, les images, les graphiques, les zones de texte Pour changer le style d'habillage actuellement sélectionné: sélectionnez un objet séparé sur la page en cliquant dessus. Pour sélectionner un bloc de texte, cliquez sur son bord, pas sur le texte à l'intérieur. ouvrez les paramètres d'habillage du texte: Passez à l'onglet Mise en page de la barre d'outils supérieure et cliquez sur la flèche située en regard de l'icône Retour à la ligne, ou cliquez avec le bouton droit sur l'objet et sélectionnez l'option Style d'habillage dans le menu contextuel, ou cliquez avec le bouton droit sur l'objet, sélectionnez l'option Paramètres avancés et passez à l'onglet Habillage du texte de la fenêtre Paramètres avancés de l'objet. sélectionnez le style d'habillage voulu: En ligne sur le texte - l'image fait partie du texte, comme un caractère, ainsi si le texte est déplacé, l'image est déplacée elle aussi. Dans ce cas-là les options de position ne sont pas accessibles. Si vous sélectionnez un des styles suivants, vous pouvez déplacer l'image indépendamment du texte et définir sa position exacte: Carré - le texte est ajusté autour des bords de l'objet. Rapproché - le texte est ajusté sur le contour de l'objet. Au travers - le texte est ajusté autour des bords de l'image et occupe l'espace vide à l'intérieur de celle-ci. Pour créer l'effet, utilisez l'option Modifier les limites du renvoi à la ligne du menu contextuel. Haut et bas - le texte est ajusté en haut et en bas de l'image. Devant le texte - l'image est affichée sur le texte. Derrière le texte - le texte est affiché sur l'objet. Si vous avez choisi l'un des styles Carré, Rapproché, Au travers, Haut et bas, vous avez la possibilité de configurer des paramètres supplémentaires - Distance du texte de tous les côtés (haut, bas, droite, gauche). Pour accéder à ces paramètres, cliquez avec le bouton droit sur l'objet, sélectionnez l'option Paramètres avancés et passez à l'onglet Style d'habillage du texte de la fenêtre Paramètres avancés de l'objet. Définissez les valeurs voulues et cliquez sur OK. Si vous sélectionnez un style d'habillage autre que En ligne, l'onglet Position est également disponible dans la fenêtre Paramètres avancés de l'objet. Pour en savoir plus sur ces paramètres, reportez-vous aux pages correspondantes avec les instructions sur la façon de travailler avec des formes, des images ou des graphiques. Si vous sélectionnez un style d'habillage autre que En ligne, vous pouvez également modifier la limite d'habillage pour les images ou les formes. Cliquez avec le bouton droit sur l'objet, sélectionnez l'option Style d'habillage dans le menu contextuel et cliquez sur Modifier les limites du renvoi à la ligne. Il est aussi possible d'utiliser le menu Retour à la ligne -> Modifier les limites du renvoi à la ligne sous l'onglet Mise en page de la barre d'outils supérieure. Faites glisser les points d'habillage pour personnaliser les limites. Pour créer un nouveau point d'habillage, cliquez sur la ligne rouge et faites-la glisser vers la position désirée. Modifier l'habillage de texte pour les tableaux Pour les tableaux, les deux styles d'habillage suivants sont disponibles: Tableau aligné et Tableau flottant. Pour changer le style d'habillage actuellement sélectionné: cliquez avec le bouton droit sur le tableau et sélectionnez l'option Paramètres avancés du tableau, passez à l'onglet Habillage du texte dans la fenêtre Tableau - Paramètres avancés ouverte, sélectionnez l'une des options suivantes: Tableau aligné est utilisé pour sélectionner le style d'habillage où le texte est interrompu par le tableau ainsi que l'alignement: gauche, au centre, droit. Tableau flottant est utilisé pour sélectionner le style d'habillage où le texte est enroulé autour du tableau. À l'aide de l'onglet Habillage du texte de la fenêtre Tableau - Paramètres avancésvous pouvez également configurer les paramètres suivants: Pour les tableaux alignés, vous pouvez définir le type d'alignement du tableau (à gauche, centre ou à droite) et le Retrait à gauche. Pour les tableaux flottants, vous pouvez spécifier la Distance du texte et la position du tableau dans l'onglet Position du tableau ." }, { "id": "UsageInstructions/ConvertFootnotesEndnotes.htm", @@ -168,7 +168,7 @@ var indexes = { "id": "UsageInstructions/CreateLists.htm", "title": "Créer des listes", - "body": "Pour créer une liste dans Document Editor, placez le curseur à la position où vous voulez commencer la liste (cela peut être une nouvelle ligne ou le texte existant), passez à l'onglet Accueil de la barre d'outils supérieure, sélectionnez le type de liste à créer: Liste non ordonnée avec des marqueurs est créée à l'aide de l'icône Puces de la barre d'outils supérieure Liste ordonnée avec numérotage spécial est créée à l'aide de l'icône Numérotation de la barre d'outils supérieure Cliquez sur la flèche vers le bas à côté de l'icône Puces ou Numérotation pour sélectionner le format de puces ou de numérotation souhaité. appuyez sur la touche Entrée à la fin de la ligne pour ajouter un nouvel élément à la liste. Pour terminer la liste, appuyez sur la touche Retour arrière et continuez le travail. L'éditeur commence automatiquement une liste numérotée lorsque vous tapez 1 et un point ou une parenthèse droite et un espace: 1., 1). La liste à puces commence automatiquement lorsque vous tapez - ou * et un espace. Vous pouvez aussi changer le retrait du texte dans les listes et leur imbrication en utilisant les icônes Liste multi-niveaux , Réduire le retrait et Augmenter le retrait sous l'onglet Accueil de la barre d'outils supérieure. Pour modifier le niveau de la liste, cliquez sur l'icône Numérotation ou Puces et choisissez Changer le niveau de liste, ou placer le curseur au début de la ligne et appuyez sur la touche Tab du clavier pour augmenter le niveau de la liste. Procédez au niveau de liste approprié. Vous pouvez configurez les paramètres supplémentaires du retrait et de l'espacement sur la barre latérale droite et dans la fenêtre de configuration de paramètres avancées. Pour en savoir plus, consultez les pages Modifier le retrait des paragraphes et Régler l'interligne du paragraphe . Joindre et séparer des listes Pour joindre une liste à la précédente: cliquez avec le bouton droit sur le premier élément de la seconde liste, utilisez l'option Joindre à la liste précédente du menu contextuel. Les listes seront jointes et la numérotation se poursuivra conformément à la numérotation de la première liste. Pour séparer une liste: cliquez avec le bouton droit de la souris sur l'élément de la liste où vous voulez commencer une nouvelle liste, sélectionnez l'option Séparer la liste du menu contextuel. La liste sera séparée et la numérotation dans la deuxième liste recommencera. Modifier la numérotation Poursuivre la numérotation séquentielle dans la deuxième liste selon la numérotation de la liste précédente: cliquez avec le bouton droit sur le premier élément de la seconde liste, sélectionnez l'option Continuer la numérotation du menu contextuel. La numérotation se poursuivra conformément à la numérotation de la première liste. Pour définir une certaine valeur initiale de numérotation: cliquez avec le bouton droit de la souris sur l'élément de la liste où vous souhaitez appliquer une nouvelle valeur de numérotation, sélectionnez l'option Définit la valeur de la numérotation du menu contextuel, dans une nouvelle fenêtre qui s'ouvre, définissez la valeur numérique voulue et cliquez sur le bouton OK. Configurer les paramètres de la liste Pour configurer les paramètres de la liste comme la puce/la numérotation, l'alignement, la taille et la couleur: cliquez sur un élément de la liste actuelle ou sélectionnez le texte à partir duquel vous souhaitez créer une liste, cliquez sur l'icône Puces ou Numérotation sous l'onglet Accueil dans la barre d'outils en haut, sélectionnez l'option Paramètres de la liste, la fenêtre Paramètres de la liste s'affiche. La fenêtre de paramètres de la liste à puces se présente sous cet aspect: La fenêtre de paramètres de la liste numérotée se présente sous cet aspect: Pour la liste à puces on peut choisir le caractère à utiliser comme puce et pour la liste numérotée on peut choisir le type de numérotation. Les options Alignement, Taille et Couleur sont identiques pour toutes les listes soit à puces soit numérotée. Puce permet de sélectionner le caractère approprié pour les éléments de la liste. Lorsque vous appuyez sur le champ Symboles et caractères, la fenêtre Symbole va apparaître dans laquelle vous pouvez choisir parmi les caractères disponibles. Veuillez consulter cet articlepour en savoir plus sur utilisation des symboles. Type permet de sélectionner la numérotation appropriée pour la liste. Les options suivantes sont disponibles: Rien, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Alignement permet de sélectionner le type d'alignement approprié pour aligner les puces/nombres horizontalement. Les options d'alignement disponibles: À gauche, Au centre, À droite. Taille permet d'ajuster la taille des puces/numéros. L'option par défaut est En tant que texte. Lorsque cette option est active, la taille des puces correspond à la taille du texte; Ajustez la taille en utilisant les valeurs prédéfinies de 8 à 96. Couleur permet de choisir la couleur des puces/numéros. L'option par défaut est En tant que texte. Lorsque cette option est active, la couleur des puces ou des chiffres correspond à la couleur du texte. Choisissez l'option Automatique pour appliquer la couleur automatiquement, sélectionnez les Couleurs de thème ou les Couleurs standard de la palette ou définissez la Couleur personnalisée. Toutes les modifications sont affichées dans le champ Aperçu. Cliquez sur OK pour appliquer toutes les modifications et fermer la fenêtre. Pour configurer les paramètres de la liste à plusieurs niveaux, appuyez sur un élément de la liste, cliquez sur l'icône Liste multiniveaux sous l'onglet Accueil dans la barre d'outils en haut, sélectionnez l'option Paramètres de la liste, la fenêtre Paramètres de la liste s'affiche. La fenêtre Paramètres de la liste multiniveaux se présente sous cet aspect: Choisissez le niveau approprié dans la liste Niveau à gauche, puis personnalisez l'aspect des puces et des nombres pour le niveau choisi: Type permet de sélectionner la numérotation appropriée pour la liste numérotée ou le caractère approprié pour la liste à puces. Les options disponibles pour la liste numérotée: Rien, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Pour la liste à puces vous pouvez choisir un des symboles prédéfinis ou utiliser l'option Nouvelle puce. Lorsque vous appuyez sur cette option, la fenêtre Symbole va apparaître dans laquelle vous pouvez choisir parmi les caractères disponibles. Veuillez consulter cet articlepour en savoir plus sur utilisation des symboles. Alignement permet de sélectionner le type d'alignement approprié pour aligner les puces/nombres horizontalement du début du paragraphe. À gauche, Au centre, À droite. Les options d'alignement disponibles: À gauche, Au centre, À droite. Taille permet d'ajuster la taille des puces/numéros. L'option par défaut est En tant que texte. Ajustez la taille en utilisant les paramètres prédéfinis de 8 à 96. Couleur permet de choisir la couleur des puces/numéros. L'option par défaut est En tant que texte. Lorsque cette option est active, la couleur des puces ou des chiffres correspond à la couleur du texte. Choisissez l'option Automatique pour appliquer la couleur automatiquement, sélectionnez les Couleurs de thème ou les Couleurs standard de la palette ou définissez la Couleur personnalisée. Toutes les modifications sont affichées dans le champ Aperçu. Cliquez sur OK pour appliquer toutes les modifications et fermer la fenêtre." + "body": "Pour créer une liste dans Document Editor, placez le curseur à la position où vous voulez commencer la liste (cela peut être une nouvelle ligne ou le texte existant), passez à l'onglet Accueil de la barre d'outils supérieure, sélectionnez le type de liste à créer: Liste non ordonnée avec des marqueurs est créée à l'aide de l'icône Puces de la barre d'outils supérieure Liste ordonnée avec numérotage spécial est créée à l'aide de l'icône Numérotation de la barre d'outils supérieure Cliquez sur la flèche vers le bas à côté de l'icône Puces ou Numérotation pour sélectionner le format de puces ou de numérotation souhaité. appuyez sur la touche Entrée à la fin de la ligne pour ajouter un nouvel élément à la liste. Pour terminer la liste, appuyez sur la touche Retour arrière et continuez le travail. L'éditeur commence automatiquement une liste numérotée lorsque vous tapez 1 et un point ou une parenthèse droite et un espace: 1., 1). La liste à puces commence automatiquement lorsque vous tapez - ou * et un espace. Vous pouvez aussi changer le retrait du texte dans les listes et leur imbrication en utilisant les icônes Liste multi-niveaux , Réduire le retrait et Augmenter le retrait sous l'onglet Accueil de la barre d'outils supérieure. Pour modifier le niveau de la liste, cliquez sur l'icône Numérotation , Puces , ou Liste multi-niveaux et choisissez Changer le niveau de liste, ou placer le curseur au début de la ligne et appuyez sur la touche Tab du clavier pour augmenter le niveau de la liste. Procédez au niveau de liste approprié. Vous pouvez configurez les paramètres supplémentaires du retrait et de l'espacement sur la barre latérale droite et dans la fenêtre de configuration de paramètres avancées. Pour en savoir plus, consultez les pages Modifier le retrait des paragraphes et Régler l'interligne du paragraphe . Joindre et séparer des listes Pour joindre une liste à la précédente: cliquez avec le bouton droit sur le premier élément de la seconde liste, utilisez l'option Joindre à la liste précédente du menu contextuel. Les listes seront jointes et la numérotation se poursuivra conformément à la numérotation de la première liste. Pour séparer une liste: cliquez avec le bouton droit de la souris sur l'élément de la liste où vous voulez commencer une nouvelle liste, sélectionnez l'option Séparer la liste du menu contextuel. La liste sera séparée et la numérotation dans la deuxième liste recommencera. Modifier la numérotation Poursuivre la numérotation séquentielle dans la deuxième liste selon la numérotation de la liste précédente: cliquez avec le bouton droit sur le premier élément de la seconde liste, sélectionnez l'option Continuer la numérotation du menu contextuel. La numérotation se poursuivra conformément à la numérotation de la première liste. Pour définir une certaine valeur initiale de numérotation: cliquez avec le bouton droit de la souris sur l'élément de la liste où vous souhaitez appliquer une nouvelle valeur de numérotation, sélectionnez l'option Définit la valeur de la numérotation du menu contextuel, dans une nouvelle fenêtre qui s'ouvre, définissez la valeur numérique voulue et cliquez sur le bouton OK. Configurer les paramètres de la liste Pour configurer les paramètres de la liste comme la puce/la numérotation, l'alignement, la taille et la couleur: cliquez sur un élément de la liste actuelle ou sélectionnez le texte à partir duquel vous souhaitez créer une liste, cliquez sur l'icône Puces ou Numérotation sous l'onglet Accueil dans la barre d'outils en haut, sélectionnez l'option Paramètres de la liste, la fenêtre Paramètres de la liste s'affiche. La fenêtre de paramètres de la liste à puces se présente sous cet aspect: La fenêtre de paramètres de la liste numérotée se présente sous cet aspect: Pour la liste à puces on peut choisir le caractère à utiliser comme puce et pour la liste numérotée on peut choisir le type de numérotation. Les options Alignement, Taille et Couleur sont identiques pour toutes les listes soit à puces soit numérotée. Puce permet de sélectionner le caractère approprié pour les éléments de la liste. Lorsque vous appuyez sur le champ Symboles et caractères, la fenêtre Symbole va apparaître dans laquelle vous pouvez choisir parmi les caractères disponibles. Veuillez consulter cet articlepour en savoir plus sur utilisation des symboles. Type permet de sélectionner la numérotation appropriée pour la liste. Les options suivantes sont disponibles: Rien, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Alignement permet de sélectionner le type d'alignement approprié pour aligner les puces/nombres horizontalement. Les options d'alignement disponibles: À gauche, Au centre, À droite. Taille permet d'ajuster la taille des puces/numéros. L'option par défaut est En tant que texte. Lorsque cette option est active, la taille des puces correspond à la taille du texte; Ajustez la taille en utilisant les valeurs prédéfinies de 8 à 96. Couleur permet de choisir la couleur des puces/numéros. L'option par défaut est En tant que texte. Lorsque cette option est active, la couleur des puces ou des chiffres correspond à la couleur du texte. Choisissez l'option Automatique pour appliquer la couleur automatiquement, sélectionnez les Couleurs de thème ou les Couleurs standard de la palette ou définissez la Couleur personnalisée. Toutes les modifications sont affichées dans le champ Aperçu. Cliquez sur OK pour appliquer toutes les modifications et fermer la fenêtre. Pour configurer les paramètres de la liste à plusieurs niveaux, appuyez sur un élément de la liste, cliquez sur l'icône Liste multiniveaux sous l'onglet Accueil dans la barre d'outils en haut, sélectionnez l'option Paramètres de la liste, la fenêtre Paramètres de la liste s'affiche. La fenêtre Paramètres de la liste multiniveaux se présente sous cet aspect: Choisissez le niveau approprié dans la liste Niveau à gauche, puis personnalisez l'aspect des puces et des nombres pour le niveau choisi: Type permet de sélectionner la numérotation appropriée pour la liste numérotée ou le caractère approprié pour la liste à puces. Les options disponibles pour la liste numérotée: Rien, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Pour la liste à puces vous pouvez choisir un des symboles prédéfinis ou utiliser l'option Nouvelle puce. Lorsque vous appuyez sur cette option, la fenêtre Symbole va apparaître dans laquelle vous pouvez choisir parmi les caractères disponibles. Veuillez consulter cet articlepour en savoir plus sur utilisation des symboles. Alignement permet de sélectionner le type d'alignement approprié pour aligner les puces/nombres horizontalement du début du paragraphe. À gauche, Au centre, À droite. Les options d'alignement disponibles: À gauche, Au centre, À droite. Taille permet d'ajuster la taille des puces/numéros. L'option par défaut est En tant que texte. Ajustez la taille en utilisant les paramètres prédéfinis de 8 à 96. Couleur permet de choisir la couleur des puces/numéros. L'option par défaut est En tant que texte. Lorsque cette option est active, la couleur des puces ou des chiffres correspond à la couleur du texte. Choisissez l'option Automatique pour appliquer la couleur automatiquement, sélectionnez les Couleurs de thème ou les Couleurs standard de la palette ou définissez la Couleur personnalisée. Toutes les modifications sont affichées dans le champ Aperçu. Cliquez sur OK pour appliquer toutes les modifications et fermer la fenêtre." }, { "id": "UsageInstructions/CreateTableOfContents.htm", @@ -183,7 +183,7 @@ var indexes = { "id": "UsageInstructions/FontTypeSizeColor.htm", "title": "Définir le type de police, la taille et la couleur", - "body": "Dans Document Editor, vous pouvez sélectionner le type, la taille et la couleur de police à l'aide des icônes correspondantes situées dans l'onglet Accueil de la barre d'outils supérieure. Si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavier et appliquez la mise en forme appropriée. Nom de la police Sert à sélectionner l'une des polices disponibles dans la liste. Si une police requise n'est pas disponible dans la liste, vous pouvez la télécharger et l'installer sur votre système d'exploitation, après quoi la police sera disponible pour utilisation dans la version de bureau. Taille de la police Sert à sélectionner la taille de la police parmi les valeurs disponibles dans la liste déroulante, les valeurs par défaut sont: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 et 96). Il est également possible d'entrer manuellement une valeur personnalisée dans le champ de taille de police jusqu'à 300 pt. Appuyer sur la touche Entrée pour confirmer Augmenter la taille de la police Sert à modifier la taille de la police en la rendant plus grande à un point chaque fois que vous appuyez sur le bouton. Diminuer la taille de la police Sert à modifier la taille de la police en la rendant plus petite à un point chaque fois que vous appuyez sur le bouton. Modifier la casse Sert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres MAJUSCULES - mettre en majuscule toutes les lettres Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot Inverser la casse - basculer entre d'affichages de la casse du texte. Couleur de surlignage Est utilisé pour marquer des phrases, des fragments, des mots ou même des caractères séparés en ajoutant une bande de couleur qui imite l'effet du surligneur sur le texte. Vous pouvez sélectionner la partie voulue du texte, puis cliquer sur la flèche vers le bas à côté de l'icône pour sélectionner une couleur dans la palette (cet ensemble de couleurs ne dépend pas du Jeux de couleurs sélectionné et comprend 16 couleurs). La couleur sera appliquée à la sélection. Alternativement, vous pouvez d'abord choisir une couleur de surbrillance et ensuite commencer à sélectionner le texte avec la souris - le pointeur de la souris ressemblera à ceci et vous serez en mesure de surligner plusieurs parties différentes de votre texte de manière séquentielle. Pour enlever la mise en surbrillance, cliquez à nouveau sur l'icône. Pour effacer la couleur de surbrillance, choisissez l'option Pas de remplissage. La Couleur de surlignage est différente de la Couleur de fond car cette dernière est appliquée au paragraphe entier et remplit complètement l'espace du paragraphe de la marge de page gauche à la marge de page droite. Couleur de police Sert à changer la couleur des lettres /caractères dans le texte. Par défaut, la couleur de police automatique est définie dans un nouveau document vide. Elle s'affiche comme la police noire sur l'arrière-plan blanc. Si vous choisissez le noir comme la couleur d'arrière-plan, la couleur de la police se change automatiquement à la couleur blanche pour que le texte soit visible. Pour choisir une autre couleur, cliquez sur la flèche vers le bas située à côté de l'icône et sélectionnez une couleur disponible dans les palettes (les couleurs de la palette Couleurs de thème dépend du jeu de couleurssélectionné). Après avoir modifié la couleur de police par défaut, vous pouvez utiliser l'option Automatique dans la fenêtre des palettes de couleurs pour restaurer rapidement la couleur automatique pour le fragment du texte sélectionné. Pour en savoir plus sur l'utilisation des palettes de couleurs, consultez cette page." + "body": "Dans Document Editor, vous pouvez sélectionner le type, la taille et la couleur de police à l'aide des icônes correspondantes situées dans l'onglet Accueil de la barre d'outils supérieure. Si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavier et appliquez la mise en forme appropriée. Vous pouvez aussi positionner le curseur de la souris sur le mot à mettre en forme. Nom de la police Sert à sélectionner l'une des polices disponibles dans la liste. Si une police requise n'est pas disponible dans la liste, vous pouvez la télécharger et l'installer sur votre système d'exploitation, après quoi la police sera disponible pour utilisation dans la version de bureau. Taille de la police Sert à sélectionner la taille de la police parmi les valeurs disponibles dans la liste déroulante, les valeurs par défaut sont: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 et 96). Il est également possible d'entrer manuellement une valeur personnalisée dans le champ de taille de police jusqu'à 300 pt. Appuyer sur la touche Entrée pour confirmer Augmenter la taille de la police Sert à modifier la taille de la police en la rendant plus grande à un point chaque fois que vous appuyez sur le bouton. Diminuer la taille de la police Sert à modifier la taille de la police en la rendant plus petite à un point chaque fois que vous appuyez sur le bouton. Modifier la casse Sert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres. MAJUSCULES - mettre en majuscule toutes les lettres. Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot. Inverser la casse - basculer entre d'affichages de la casse du texte ou le mot sur lequel le curseur de la souris est positionné. Couleur de surlignage Est utilisé pour marquer des phrases, des fragments, des mots ou même des caractères séparés en ajoutant une bande de couleur qui imite l'effet du surligneur sur le texte. Vous pouvez sélectionner la partie voulue du texte, puis cliquer sur la flèche vers le bas à côté de l'icône pour sélectionner une couleur dans la palette (cet ensemble de couleurs ne dépend pas du Jeux de couleurs sélectionné et comprend 16 couleurs). La couleur sera appliquée à la sélection. Alternativement, vous pouvez d'abord choisir une couleur de surbrillance et ensuite commencer à sélectionner le texte avec la souris - le pointeur de la souris ressemblera à ceci et vous serez en mesure de surligner plusieurs parties différentes de votre texte de manière séquentielle. Pour enlever la mise en surbrillance, cliquez à nouveau sur l'icône. Pour effacer la couleur de surbrillance, choisissez l'option Pas de remplissage. La Couleur de surlignage est différente de la Couleur de fond car cette dernière est appliquée au paragraphe entier et remplit complètement l'espace du paragraphe de la marge de page gauche à la marge de page droite. Couleur de police Sert à changer la couleur des lettres /caractères dans le texte. Par défaut, la couleur de police automatique est définie dans un nouveau document vide. Elle s'affiche comme la police noire sur l'arrière-plan blanc. Si vous choisissez le noir comme la couleur d'arrière-plan, la couleur de la police se change automatiquement à la couleur blanche pour que le texte soit visible. Pour choisir une autre couleur, cliquez sur la flèche vers le bas située à côté de l'icône et sélectionnez une couleur disponible dans les palettes (les couleurs de la palette Couleurs de thème dépend du jeu de couleurssélectionné). Après avoir modifié la couleur de police par défaut, vous pouvez utiliser l'option Automatique dans la fenêtre des palettes de couleurs pour restaurer rapidement la couleur automatique pour le fragment du texte sélectionné. Pour en savoir plus sur l'utilisation des palettes de couleurs, consultez cette page." }, { "id": "UsageInstructions/FormattingPresets.htm", @@ -323,7 +323,7 @@ var indexes = { "id": "UsageInstructions/SavePrintDownload.htm", "title": "Enregistrer / exporter / imprimer votre document", - "body": "Enregistrer /exporter / imprimer votre document Enregistrement Par défaut, Document Editor en ligne enregistre automatiquement votre fichier toutes les 2 secondes afin de prévenir la perte des données en cas de fermeture inattendue de l'éditeur. Si vous co-éditez le fichier en mode Rapide, le minuteur récupère les mises à jour 25 fois par seconde et enregistre les modifications si elles ont été effectuées. Lorsque le fichier est co-édité en mode Strict, les modifications sont automatiquement sauvegardées à des intervalles de 10 minutes. Si nécessaire, vous pouvez facilement changer la périodicité de l'enregistrement automatique ou même désactiver cette fonction sur la page Paramètres avancés . Pour enregistrer manuellement votre document actuel dans le format et l'emplacement actuels, cliquez sur l'icône Enregistrer dans la partie gauche de l'en-tête de l'éditeur, ou utilisez la combinaison des touches Ctrl+S, ou cliquez sur l'onglet Fichier de la barre d'outils supérieure et sélectionnez l'option Enregistrer. Dans la version de bureau, pour éviter la perte de données en cas de fermeture inattendue du programme, vous pouvez activer l'option Récupération automatique sur la page Paramètres avancés . Dans la version de bureau, vous pouvez enregistrer le document sous un autre nom, dans un nouvel emplacement ou format, cliquez sur l'onglet Fichier de la barre d'outils supérieure, sélectionnez l'option Enregistrer sous..., sélectionnez l'un des formats disponibles selon vos besoins: DOCX, ODT, RTF, TXT, PDF, PDFA. Vous pouvez également choisir l'option Modèle de document (DOTX or OTT). Téléchargement en cours Dans la version en ligne, vous pouvez télécharger le document résultant sur le disque dur de votre ordinateur, cliquez sur l'onglet Fichier de la barre d'outils supérieure, sélectionnez l'option Télécharger comme..., sélectionnez l'un des formats disponibles selon vos besoins: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Enregistrer une copie Dans la version en ligne, vous pouvez enregistrer une copie du fichier sur votre portail, cliquez sur l'onglet Fichier de la barre d'outils supérieure, sélectionnez l'option Enregistrer la copie sous..., sélectionnez l'un des formats disponibles selon vos besoins: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB, sélectionnez un emplacement pour le fichier sur le portail et appuyez sur Enregistrer. Impression Pour imprimer le document actif, cliquez sur l'icône Imprimer le fichier dans la partie gauche de l'en-tête de l'éditeur, ou utilisez la combinaison des touches Ctrl+P, ou cliquez sur l'onglet Fichier de la barre d'outils supérieure et sélectionnez l'option Imprimer. Le navigateur Firefox permet d'imprimer sans télécharger le document au format .pdf d'avance. Il est aussi possible d'imprimer un fragment de texte en utilisant l'option Imprimer la sélection du menu contextuel en mode Édition aussi que en mode Affichage (cliquez avec le bouton droit de la souris et choisissez Imprimer la sélection). Dans la version de bureau, le fichier sera imprimé directement. Dans la version en ligne, un fichier PDF sera généré à partir du document. Vous pouvez l'ouvrir et l'imprimer, ou l'enregistrer sur le disque dur de l'ordinateur ou sur un support amovible pour l'imprimer plus tard. Certains navigateurs (par ex. Chrome et Opera) supportent l'impression directe." + "body": "Enregistrer /exporter / imprimer votre document Enregistrement Par défaut, Document Editor en ligne enregistre automatiquement votre fichier toutes les 2 secondes afin de prévenir la perte des données en cas de fermeture inattendue de l'éditeur. Si vous co-éditez le fichier en mode Rapide, le minuteur récupère les mises à jour 25 fois par seconde et enregistre les modifications si elles ont été effectuées. Lorsque le fichier est co-édité en mode Strict, les modifications sont automatiquement sauvegardées à des intervalles de 10 minutes. Si nécessaire, vous pouvez facilement changer la périodicité de l'enregistrement automatique ou même désactiver cette fonction sur la page Paramètres avancés . Pour enregistrer manuellement votre document actuel dans le format et l'emplacement actuels, cliquez sur l'icône Enregistrer dans la partie gauche de l'en-tête de l'éditeur, ou utilisez la combinaison des touches Ctrl+S, ou cliquez sur l'onglet Fichier de la barre d'outils supérieure et sélectionnez l'option Enregistrer. Dans la version de bureau, pour éviter la perte de données en cas de fermeture inattendue du programme, vous pouvez activer l'option Récupération automatique sur la page Paramètres avancés . Dans la version de bureau, vous pouvez enregistrer le document sous un autre nom, dans un nouvel emplacement ou format, cliquez sur l'onglet Fichier de la barre d'outils supérieure, sélectionnez l'option Enregistrer sous..., sélectionnez l'un des formats disponibles selon vos besoins: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. Vous pouvez également choisir l'option Modèle de document (DOTX or OTT). Téléchargement en cours Dans la version en ligne, vous pouvez télécharger le document résultant sur le disque dur de votre ordinateur, cliquez sur l'onglet Fichier de la barre d'outils supérieure, sélectionnez l'option Télécharger comme..., sélectionnez l'un des formats disponibles selon vos besoins: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Enregistrer une copie Dans la version en ligne, vous pouvez enregistrer une copie du fichier sur votre portail, cliquez sur l'onglet Fichier de la barre d'outils supérieure, sélectionnez l'option Enregistrer la copie sous..., sélectionnez l'un des formats disponibles selon vos besoins: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB, sélectionnez un emplacement pour le fichier sur le portail et appuyez sur Enregistrer. Impression Pour imprimer le document actif, cliquez sur l'icône Imprimer le fichier dans la partie gauche de l'en-tête de l'éditeur, ou utilisez la combinaison des touches Ctrl+P, ou cliquez sur l'onglet Fichier de la barre d'outils supérieure et sélectionnez l'option Imprimer. Le navigateur Firefox permet d'imprimer sans télécharger le document au format .pdf d'avance. Il est aussi possible d'imprimer un fragment de texte en utilisant l'option Imprimer la sélection du menu contextuel en mode Édition aussi que en mode Affichage (cliquez avec le bouton droit de la souris et choisissez Imprimer la sélection). Dans la version de bureau, le fichier sera imprimé directement. Dans la version en ligne, un fichier PDF sera généré à partir du document. Vous pouvez l'ouvrir et l'imprimer, ou l'enregistrer sur le disque dur de l'ordinateur ou sur un support amovible pour l'imprimer plus tard. Certains navigateurs (par ex. Chrome et Opera) supportent l'impression directe." }, { "id": "UsageInstructions/SectionBreaks.htm", diff --git a/apps/documenteditor/main/resources/help/ru/HelpfulHints/About.htm b/apps/documenteditor/main/resources/help/ru/HelpfulHints/About.htm index 8a20060d4..5f2423b3e 100644 --- a/apps/documenteditor/main/resources/help/ru/HelpfulHints/About.htm +++ b/apps/documenteditor/main/resources/help/ru/HelpfulHints/About.htm @@ -23,7 +23,7 @@ распечатывать отредактированные документы, сохраняя все детали форматирования, или сохранять документы на жесткий диск компьютера как файлы в формате DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB.

    -

    Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку Значок О программе на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии выберите пункт меню О программе на левой боковой панели в главном окне приложения.

    +

    Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку Значок О программе на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии для Windows выберите пункт меню О программе на левой боковой панели в главном окне приложения. В десктопной версии для Mac OS откройте меню ONLYOFFICE в верхней части и выберите пункт меню О программе ONLYOFFICE.

    \ No newline at end of file diff --git a/apps/documenteditor/main/resources/help/ru/HelpfulHints/SupportedFormats.htm b/apps/documenteditor/main/resources/help/ru/HelpfulHints/SupportedFormats.htm index a3c15f949..3f8fc6c09 100644 --- a/apps/documenteditor/main/resources/help/ru/HelpfulHints/SupportedFormats.htm +++ b/apps/documenteditor/main/resources/help/ru/HelpfulHints/SupportedFormats.htm @@ -51,7 +51,7 @@ - + @@ -101,13 +101,13 @@ - + - + @@ -128,7 +128,7 @@ - +
    Nom de la police
    Modifier la casse Modifier la casseSert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres MAJUSCULES - mettre en majuscule toutes les lettres Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot Inverser la casse - basculer entre d'affichages de la casse du texte.Sert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres. MAJUSCULES - mettre en majuscule toutes les lettres. Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot. Inverser la casse - basculer entre d'affichages de la casse du texte ou le mot sur lequel le curseur de la souris est positionné.
    Couleur de surlignage FB2 Расширение для электронных книг, позволяющее читать книги на компьютере или мобильных устройствах ++ +
    HyperText Markup Language
    Основной язык разметки веб-страниц
    + +в онлайн-версии+
    EPUB Electronic Publication
    Бесплатный открытый стандарт для электронных книг, созданный Международным форумом по цифровым публикациям (International Digital Publishing Forum)
    ++ +
    XML Расширяемый язык разметки (XML).
    Простой и гибкий язык разметки, созданный на основе SGML (ISO 8879) и предназначенный для хранения и передачи данных
    ++
    +

    Все форматы работают без Chromium и доступны на всех платформах.

    \ No newline at end of file diff --git a/apps/documenteditor/main/resources/help/ru/UsageInstructions/ChangeWrappingStyle.htm b/apps/documenteditor/main/resources/help/ru/UsageInstructions/ChangeWrappingStyle.htm index c4c060c76..3ca378df1 100644 --- a/apps/documenteditor/main/resources/help/ru/UsageInstructions/ChangeWrappingStyle.htm +++ b/apps/documenteditor/main/resources/help/ru/UsageInstructions/ChangeWrappingStyle.htm @@ -43,7 +43,7 @@

    При выборе стиля обтекания Вокруг рамки, По контуру, Сквозное или Сверху и снизу можно задать дополнительные параметры - Расстояние до текста со всех сторон (сверху, снизу, слева, справа). Чтобы открыть эти настройки, щелкните по объекту правой кнопкой мыши, выберите опцию Дополнительные параметры и перейдите на вкладку Обтекание текстом в окне Дополнительные параметры объекта. Укажите нужные значения и нажмите кнопку OK.

    Если выбран стиль обтекания, отличный от стиля В тексте, в окне Дополнительные параметры объекта также становится доступна вкладка Положение. Для получения дополнительной информации об этих параметрах обратитесь к соответствующим страницам с инструкциями по работе с фигурами, изображениями или диаграммами.

    -

    Если выбран стиль обтекания, отличный от стиля В тексте, можно также редактировать контур обтекания для изображений или фигур. Щелкните по объекту правой кнопкой мыши, выберите в контекстном меню пункт Стиль обтекания и щелкните по опции Изменить границу обтекания. Чтобы произвольно изменить границу, перетаскивайте точки границы обтекания. Чтобы создать новую точку границы обтекания, щелкните в любом месте на красной линии и перетащите ее в нужную позицию. Изменение границы обтекания

    +

    Если выбран стиль обтекания, отличный от стиля В тексте, можно также редактировать контур обтекания для изображений или фигур. Щелкните по объекту правой кнопкой мыши, выберите в контекстном меню пункт Стиль обтекания и щелкните по опции Изменить границу обтекания. Вы также можете использовтаь опцию Обтекание -> Изменить границу обтекания на вкладке Макет верхней панели инструментов. Чтобы произвольно изменить границу, перетаскивайте точки границы обтекания. Чтобы создать новую точку границы обтекания, щелкните в любом месте на красной линии и перетащите ее в нужную позицию. Изменение границы обтекания

    Изменение стиля обтекания текстом для таблиц

    Для таблиц доступны два следующих стиля обтекания: Встроенная таблица и Плавающая таблица.

    Для изменения выбранного в данный момент стиля обтекания:

    diff --git a/apps/documenteditor/main/resources/help/ru/UsageInstructions/CreateLists.htm b/apps/documenteditor/main/resources/help/ru/UsageInstructions/CreateLists.htm index adaebe97d..17a0d5958 100644 --- a/apps/documenteditor/main/resources/help/ru/UsageInstructions/CreateLists.htm +++ b/apps/documenteditor/main/resources/help/ru/UsageInstructions/CreateLists.htm @@ -32,7 +32,7 @@

    Нумерованные списки также создаются автоматически при вводе цифры 1 с точкой или скобкой и пробелом после нее: 1., 1). Маркированные списки создаются автоматически при вводе символов -, * и пробела после них.

    Можно также изменить отступы текста в списках и их вложенность с помощью значков Многоуровневый список Значок Многоуровневый список, Уменьшить отступ Значок Уменьшить отступ и Увеличить отступ Значок Увеличить отступ на вкладке Главная верхней панели инструментов.

    -

    Чтобы изменить уровень списка, щелкните значок Нумерованный список Значок Нумерованный список или Маркированный список Значок Маркированный список и в пункте меню Изменить уровень списка выберите подходящий стиль списка. Чтобы перейти на следующий уровень списка, поместите курсор на начало строки и нажмите на клавиатуре клавишу Tab.

    +

    Чтобы изменить уровень списка, щелкните значок Нумерованный список Значок Нумерованный список, Маркированный список Значок Маркированный список или Многоуровневый список Многоуровневый список и в пункте меню Изменить уровень списка выберите подходящий стиль списка. Чтобы перейти на следующий уровень списка, поместите курсор на начало строки и нажмите на клавиатуре клавишу Tab.

    изменить уровень списка

    Примечание: дополнительные параметры отступов и интервалов можно изменить на правой боковой панели и в окне дополнительных параметров. Чтобы получить дополнительную информацию об этом, прочитайте разделы Изменение отступов абзацев и Настройка междустрочного интервала в абзацах.

    diff --git a/apps/documenteditor/main/resources/help/ru/UsageInstructions/FontTypeSizeColor.htm b/apps/documenteditor/main/resources/help/ru/UsageInstructions/FontTypeSizeColor.htm index 0f7182aac..022d91d7c 100644 --- a/apps/documenteditor/main/resources/help/ru/UsageInstructions/FontTypeSizeColor.htm +++ b/apps/documenteditor/main/resources/help/ru/UsageInstructions/FontTypeSizeColor.htm @@ -15,7 +15,7 @@

    Настройка типа, размера и цвета шрифта

    Вы можете выбрать тип шрифта, его размер и цвет, используя соответствующие значки на вкладке Главная верхней панели инструментов.

    -

    Примечание: если требуется отформатировать текст, который уже есть в документе, выделите его мышью или с помощью клавиатуры, а затем примените форматирование.

    +

    Примечание: если требуется отформатировать текст, который уже есть в документе, выделите его мышью или с помощью клавиатуры, а затем примените форматирование. Также можно поместить курсор мыши в нужное слово, чтобы применить форматирование только к этому слову.

    @@ -40,7 +40,7 @@ - + diff --git a/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm index f073b2d25..ead323a23 100644 --- a/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
    1. нажмите на вкладку Файл на верхней панели инструментов,
    2. выберите опцию Сохранить как,
    3. -
    4. выберите один из доступных форматов: DOCX, ODT, RTF, TXT, PDF, PDFA. Также можно выбрать вариант Шаблон документа DOTX или OTT.
    5. +
    6. выберите один из доступных форматов: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. Также можно выбрать вариант Шаблон документа DOTX или OTT.
    diff --git a/apps/documenteditor/main/resources/help/ru/search/indexes.js b/apps/documenteditor/main/resources/help/ru/search/indexes.js index c611f58db..86b7b2f36 100644 --- a/apps/documenteditor/main/resources/help/ru/search/indexes.js +++ b/apps/documenteditor/main/resources/help/ru/search/indexes.js @@ -3,7 +3,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "О редакторе документов", - "body": "Редактор документов - это онлайн- приложение, которое позволяет просматривать и редактировать документы непосредственно в браузере . Используя онлайн- редактор документов, Вы можете выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные документы, сохраняя все детали форматирования, или сохранять документы на жесткий диск компьютера как файлы в формате DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии выберите пункт меню О программе на левой боковой панели в главном окне приложения." + "body": "Редактор документов - это онлайн- приложение, которое позволяет просматривать и редактировать документы непосредственно в браузере . Используя онлайн- редактор документов, Вы можете выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные документы, сохраняя все детали форматирования, или сохранять документы на жесткий диск компьютера как файлы в формате DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии для Windows выберите пункт меню О программе на левой боковой панели в главном окне приложения. В десктопной версии для Mac OS откройте меню ONLYOFFICE в верхней части и выберите пункт меню О программе ONLYOFFICE." }, { "id": "HelpfulHints/CollaborativeEditing.htm", @@ -43,7 +43,7 @@ var indexes = { "id": "HelpfulHints/SupportedFormats.htm", "title": "Поддерживаемые форматы электронных документов", - "body": "Электронные документы - это одни из наиболее широко используемых компьютерных файлов. Благодаря высокому уровню развития современных компьютерных сетей распространять электронные документы становится удобнее, чем печатные. Многообразие устройств, используемых для представления документов, обуславливает большое количество проприетарных и открытых файловых форматов. Редактор документов работает с самыми популярными из них. Форматы Описание Просмотр Редактирование Скачивание DOC Расширение имени файла для текстовых документов, созданных программой Microsoft Word + + DOCX Office Open XML разработанный компанией Microsoft формат файлов на основе XML, сжатых по технологии ZIP. Предназначен для представления электронных таблиц, диаграмм, презентаций и текстовых документов + + + DOTX Word Open XML Document Template разработанный компанией Microsoft формат файлов на основе XML, сжатых по технологии ZIP. Предназначен для шаблонов текстовых документов. Шаблон DOTX содержит настройки форматирования, стили и т.д. и может использоваться для создания множества документов со схожим форматированием + + + FB2 Расширение для электронных книг, позволяющее читать книги на компьютере или мобильных устройствах + + ODT Формат текстовых файлов OpenDocument, открытый стандарт для электронных документов + + + OTT OpenDocument Document Template Формат текстовых файлов OpenDocument для шаблонов текстовых документов. Шаблон OTT содержит настройки форматирования, стили и т.д. и может использоваться для создания множества документов со схожим форматированием + + + RTF Rich Text Format Формат документов, разработанный компанией Microsoft, для кроссплатформенного обмена документами + + + TXT Расширение имени файла для текстовых файлов, как правило, с минимальным форматированием + + + PDF Portable Document Format Формат файлов, используемый для представления документов независимо от программного обеспечения, аппаратных средств и операционных систем + + PDF/A Portable Document Format / A Подмножество формата PDF, содержащее ограниченный набор возможностей представления данных. Данный формат является стандартом ISO и предназначен для долгосрочного архивного хранения электронных документов. + + HTML HyperText Markup Language Основной язык разметки веб-страниц + + в онлайн-версии EPUB Electronic Publication Бесплатный открытый стандарт для электронных книг, созданный Международным форумом по цифровым публикациям (International Digital Publishing Forum) + + XPS Open XML Paper Specification Открытый бесплатный формат фиксированной разметки, разработанный компанией Microsoft + DjVu Формат файлов, предназначенный главным образом для хранения отсканированных документов, особенно тех, которые содержат комбинацию текста, рисунков и фотографий + XML Расширяемый язык разметки (XML). Простой и гибкий язык разметки, созданный на основе SGML (ISO 8879) и предназначенный для хранения и передачи данных +" + "body": "Электронные документы - это одни из наиболее широко используемых компьютерных файлов. Благодаря высокому уровню развития современных компьютерных сетей распространять электронные документы становится удобнее, чем печатные. Многообразие устройств, используемых для представления документов, обуславливает большое количество проприетарных и открытых файловых форматов. Редактор документов работает с самыми популярными из них. Форматы Описание Просмотр Редактирование Скачивание DOC Расширение имени файла для текстовых документов, созданных программой Microsoft Word + + DOCX Office Open XML разработанный компанией Microsoft формат файлов на основе XML, сжатых по технологии ZIP. Предназначен для представления электронных таблиц, диаграмм, презентаций и текстовых документов + + + DOTX Word Open XML Document Template разработанный компанией Microsoft формат файлов на основе XML, сжатых по технологии ZIP. Предназначен для шаблонов текстовых документов. Шаблон DOTX содержит настройки форматирования, стили и т.д. и может использоваться для создания множества документов со схожим форматированием + + + FB2 Расширение для электронных книг, позволяющее читать книги на компьютере или мобильных устройствах + + + ODT Формат текстовых файлов OpenDocument, открытый стандарт для электронных документов + + + OTT OpenDocument Document Template Формат текстовых файлов OpenDocument для шаблонов текстовых документов. Шаблон OTT содержит настройки форматирования, стили и т.д. и может использоваться для создания множества документов со схожим форматированием + + + RTF Rich Text Format Формат документов, разработанный компанией Microsoft, для кроссплатформенного обмена документами + + + TXT Расширение имени файла для текстовых файлов, как правило, с минимальным форматированием + + + PDF Portable Document Format Формат файлов, используемый для представления документов независимо от программного обеспечения, аппаратных средств и операционных систем + + PDF/A Portable Document Format / A Подмножество формата PDF, содержащее ограниченный набор возможностей представления данных. Данный формат является стандартом ISO и предназначен для долгосрочного архивного хранения электронных документов. + + HTML HyperText Markup Language Основной язык разметки веб-страниц + + + EPUB Electronic Publication Бесплатный открытый стандарт для электронных книг, созданный Международным форумом по цифровым публикациям (International Digital Publishing Forum) + + + XPS Open XML Paper Specification Открытый бесплатный формат фиксированной разметки, разработанный компанией Microsoft + DjVu Формат файлов, предназначенный главным образом для хранения отсканированных документов, особенно тех, которые содержат комбинацию текста, рисунков и фотографий + XML Расширяемый язык разметки (XML). Простой и гибкий язык разметки, созданный на основе SGML (ISO 8879) и предназначенный для хранения и передачи данных + + Все форматы работают без Chromium и доступны на всех платформах." }, { "id": "HelpfulHints/advancedsettings.htm", @@ -148,7 +148,7 @@ var indexes = { "id": "UsageInstructions/ChangeWrappingStyle.htm", "title": "Изменение стиля обтекания текстом", - "body": "Опция Стиль обтекания определяет способ размещения объекта относительно текста. Можно изменить стиль обтекания текстом для вставленных объектов, таких как фигуры, изображения, диаграммы, текстовые поля или таблицы. Изменение стиля обтекания текстом для фигур, изображений, диаграмм, текстовых полей Для изменения выбранного в данный момент стиля обтекания: выделите отдельный объект на странице, щелкнув по нему левой кнопкой мыши. Чтобы выделить текстовое поле, щелкайте по его границе, а не по тексту внутри него. откройте настройки обтекания текстом: перейдите на вкладку Макет верхней панели инструментов и нажмите на стрелку рядом со значком Обтекание или щелкните по объекту правой кнопкой мыши и выберите в контекстном меню пункт Стиль обтекания или щелкните по объекту правой кнопкой мыши, выберите опцию Дополнительные параметры и перейдите на вкладку Обтекание текстом в окне Дополнительные параметры объекта. выберите нужный стиль обтекания: В тексте - объект считается частью текста, как отдельный символ, поэтому при перемещении текста объект тоже перемещается. В этом случае параметры расположения недоступны. Если выбран один из следующих стилей, объект можно перемещать независимо от текста и и точно задавать положение объекта на странице: Вокруг рамки - текст обтекает прямоугольную рамку, которая окружает объект. По контуру - текст обтекает реальные контуры объекта. Сквозное - текст обтекает вокруг контуров объекта и заполняет незамкнутое свободное место внутри объекта. Чтобы этот эффект проявился, используйте опцию Изменить границу обтекания из контекстного меню. Сверху и снизу - текст находится только выше и ниже объекта. Перед текстом - объект перекрывает текст. За текстом - текст перекрывает объект. При выборе стиля обтекания Вокруг рамки, По контуру, Сквозное или Сверху и снизу можно задать дополнительные параметры - Расстояние до текста со всех сторон (сверху, снизу, слева, справа). Чтобы открыть эти настройки, щелкните по объекту правой кнопкой мыши, выберите опцию Дополнительные параметры и перейдите на вкладку Обтекание текстом в окне Дополнительные параметры объекта. Укажите нужные значения и нажмите кнопку OK. Если выбран стиль обтекания, отличный от стиля В тексте, в окне Дополнительные параметры объекта также становится доступна вкладка Положение. Для получения дополнительной информации об этих параметрах обратитесь к соответствующим страницам с инструкциями по работе с фигурами, изображениями или диаграммами. Если выбран стиль обтекания, отличный от стиля В тексте, можно также редактировать контур обтекания для изображений или фигур. Щелкните по объекту правой кнопкой мыши, выберите в контекстном меню пункт Стиль обтекания и щелкните по опции Изменить границу обтекания. Чтобы произвольно изменить границу, перетаскивайте точки границы обтекания. Чтобы создать новую точку границы обтекания, щелкните в любом месте на красной линии и перетащите ее в нужную позицию. Изменение стиля обтекания текстом для таблиц Для таблиц доступны два следующих стиля обтекания: Встроенная таблица и Плавающая таблица. Для изменения выбранного в данный момент стиля обтекания: щелкните по таблице правой кнопкой мыши и выберите пункт контекстного меню Дополнительные параметры таблицы, перейдите на вкладку Обтекание текстом окна Таблица - дополнительные параметры выберите одну из следующих опций: Встроенная таблица - используется для выбора стиля обтекания, при котором таблица разрывает текст, а также для настройки выравнивания: по левому краю, по центру, по правому краю. Плавающая таблица - используется для выбора стиля обтекания, при котором текст размещается вокруг таблицы. На вкладке Обтекание текстом окна Таблица - дополнительные параметры можно также задать следующие дополнительные параметры: Для встроенных таблиц можно задать тип Выравнивания таблицы (по левому краю, по центру или по правому краю) и Отступ слева. Для плавающих таблиц можно задать Расстояние до текста и положение на вкладке Положение таблицы." + "body": "Опция Стиль обтекания определяет способ размещения объекта относительно текста. Можно изменить стиль обтекания текстом для вставленных объектов, таких как фигуры, изображения, диаграммы, текстовые поля или таблицы. Изменение стиля обтекания текстом для фигур, изображений, диаграмм, текстовых полей Для изменения выбранного в данный момент стиля обтекания: выделите отдельный объект на странице, щелкнув по нему левой кнопкой мыши. Чтобы выделить текстовое поле, щелкайте по его границе, а не по тексту внутри него. откройте настройки обтекания текстом: перейдите на вкладку Макет верхней панели инструментов и нажмите на стрелку рядом со значком Обтекание или щелкните по объекту правой кнопкой мыши и выберите в контекстном меню пункт Стиль обтекания или щелкните по объекту правой кнопкой мыши, выберите опцию Дополнительные параметры и перейдите на вкладку Обтекание текстом в окне Дополнительные параметры объекта. выберите нужный стиль обтекания: В тексте - объект считается частью текста, как отдельный символ, поэтому при перемещении текста объект тоже перемещается. В этом случае параметры расположения недоступны. Если выбран один из следующих стилей, объект можно перемещать независимо от текста и и точно задавать положение объекта на странице: Вокруг рамки - текст обтекает прямоугольную рамку, которая окружает объект. По контуру - текст обтекает реальные контуры объекта. Сквозное - текст обтекает вокруг контуров объекта и заполняет незамкнутое свободное место внутри объекта. Чтобы этот эффект проявился, используйте опцию Изменить границу обтекания из контекстного меню. Сверху и снизу - текст находится только выше и ниже объекта. Перед текстом - объект перекрывает текст. За текстом - текст перекрывает объект. При выборе стиля обтекания Вокруг рамки, По контуру, Сквозное или Сверху и снизу можно задать дополнительные параметры - Расстояние до текста со всех сторон (сверху, снизу, слева, справа). Чтобы открыть эти настройки, щелкните по объекту правой кнопкой мыши, выберите опцию Дополнительные параметры и перейдите на вкладку Обтекание текстом в окне Дополнительные параметры объекта. Укажите нужные значения и нажмите кнопку OK. Если выбран стиль обтекания, отличный от стиля В тексте, в окне Дополнительные параметры объекта также становится доступна вкладка Положение. Для получения дополнительной информации об этих параметрах обратитесь к соответствующим страницам с инструкциями по работе с фигурами, изображениями или диаграммами. Если выбран стиль обтекания, отличный от стиля В тексте, можно также редактировать контур обтекания для изображений или фигур. Щелкните по объекту правой кнопкой мыши, выберите в контекстном меню пункт Стиль обтекания и щелкните по опции Изменить границу обтекания. Вы также можете использовтаь опцию Обтекание -> Изменить границу обтекания на вкладке Макет верхней панели инструментов. Чтобы произвольно изменить границу, перетаскивайте точки границы обтекания. Чтобы создать новую точку границы обтекания, щелкните в любом месте на красной линии и перетащите ее в нужную позицию. Изменение стиля обтекания текстом для таблиц Для таблиц доступны два следующих стиля обтекания: Встроенная таблица и Плавающая таблица. Для изменения выбранного в данный момент стиля обтекания: щелкните по таблице правой кнопкой мыши и выберите пункт контекстного меню Дополнительные параметры таблицы, перейдите на вкладку Обтекание текстом окна Таблица - дополнительные параметры выберите одну из следующих опций: Встроенная таблица - используется для выбора стиля обтекания, при котором таблица разрывает текст, а также для настройки выравнивания: по левому краю, по центру, по правому краю. Плавающая таблица - используется для выбора стиля обтекания, при котором текст размещается вокруг таблицы. На вкладке Обтекание текстом окна Таблица - дополнительные параметры можно также задать следующие дополнительные параметры: Для встроенных таблиц можно задать тип Выравнивания таблицы (по левому краю, по центру или по правому краю) и Отступ слева. Для плавающих таблиц можно задать Расстояние до текста и положение на вкладке Положение таблицы." }, { "id": "UsageInstructions/ConvertFootnotesEndnotes.htm", @@ -168,7 +168,7 @@ var indexes = { "id": "UsageInstructions/CreateLists.htm", "title": "Создание списков", - "body": "Для создания в документе списка: установите курсор в том месте, где начнется список (это может быть новая строка или уже введенный текст), перейдите на вкладку Главная верхней панели инструментов, выберите тип списка, который требуется создать: Неупорядоченный список с маркерами создается с помощью значка Маркированный список , расположенного на верхней панели инструментов Упорядоченный список с цифрами или буквами создается с помощью значка Нумерованный список , расположенного на верхней панели инструментов Примечание: нажмите направленную вниз стрелку рядом со значком Маркированный список или Нумерованный список, чтобы выбрать, как должен выглядеть список. теперь при каждом нажатии в конце строки клавиши Enter будет появляться новый элемент упорядоченного или неупорядоченного списка. Чтобы закончить список, нажмите клавишу Backspace и продолжайте текст обычного абзаца. Нумерованные списки также создаются автоматически при вводе цифры 1 с точкой или скобкой и пробелом после нее: 1., 1). Маркированные списки создаются автоматически при вводе символов -, * и пробела после них. Можно также изменить отступы текста в списках и их вложенность с помощью значков Многоуровневый список , Уменьшить отступ и Увеличить отступ на вкладке Главная верхней панели инструментов. Чтобы изменить уровень списка, щелкните значок Нумерованный список или Маркированный список и в пункте меню Изменить уровень списка выберите подходящий стиль списка. Чтобы перейти на следующий уровень списка, поместите курсор на начало строки и нажмите на клавиатуре клавишу Tab. Примечание: дополнительные параметры отступов и интервалов можно изменить на правой боковой панели и в окне дополнительных параметров. Чтобы получить дополнительную информацию об этом, прочитайте разделы Изменение отступов абзацев и Настройка междустрочного интервала в абзацах. Объединение и разделение списков Для того чтобы объединить список с предыдущим списком: щелкните правой кнопкой мыши по первому пункту второго списка, используйте опцию контекстного меню Объединить с предыдущим списком. Списки будут объединены, и нумерация будет продолжена в соответствии с нумерацией первого списка. Для того чтобы разделить список: щелкните правой кнопкой мыши по тому пункту списка, с которого требуется начать новый список, используйте опцию контекстного меню Начать новый список. Список будет разделен, и во втором списке нумерация начнется заново. Изменение нумерации Для того чтобы продолжить во втором списке последовательную нумерацию в соответствии с предыдущим списком: щелкните правой кнопкой мыши по первому пункту второго списка, используйте опцию контекстного меню Продолжить нумерацию. Нумерация будет продолжена в соответствии с нумерацией первого списка. Для того чтобы задать произвольное начальное значение нумерации: щелкните правой кнопкой мыши по тому пункту списка, к которому требуется применить новое значение нумерации, используйте опцию контекстного меню Задать начальное значение, в новом открывшемся окне укажите нужное числовое значение и нажмите кнопку OK. Изменение параметров списков Для того чтобы изменить параметры списка, такие как тип, выравнивание, размер и цвет маркеров или нумерации: щелкните по какому-либо пункту существующего списка или выделите текст, который требуется отформатировать как список, нажмите на кнопку Маркированный список или Нумерованный список на вкладке Главная верхней панели инструментов, выберите опцию Параметры списка, откроется окно Параметры списка. Окно настроек маркированного списка выглядит следующим образом: Окно настроек нумерованного списка выглядит следующим образом: Для маркированного списка можно выбрать символ, используемый в качестве маркера, тогда как для нумерованного списка можно выбрать тип нумерации. Параметры Выравнивание, Размер и Цвет идентичны как для маркированных, так и для нумерованных списков. Маркер - позволяет выбрать нужный символ, используемый для маркированного списка. При нажатии на поле Шрифт и символ открывается окно Символ, в котором можно выбрать один из доступных символов. Для получения дополнительной информации о работе с символами вы можете обратиться к этой статье. Тип - позволяет выбрать нужный тип нумерации, используемый для нумерованного списка. Доступны следующие варианты: Нет, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Выравнивание - позволяет выбрать нужный тип выравнивания маркеров или нумерации, который используется для горизонтального выравнивания маркеров или нумерации внутри отведенного для них пространства. Доступны следующие типы выравнивания: По левому краю, По центру, По правому краю. Размер - позволяет выбрать нужный размер маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, размер маркеров или нумерации соответствует размеру текста. Вы можете выбрать один из предварительно заданных размеров от 8 до 96. Цвет - позволяет выбрать нужный цвет маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, цвет маркеров или нумерации соответствует цвету текста. Вы можете выбрать опцию Автоматически, чтобы применить автоматический цвет, или выбрать на палитре один из цветов темы или стандартных цветов или задать пользовательский цвет. Все изменения отображаются в поле Просмотр. нажмите кнопку OK, чтобы применить изменения и закрыть окно настроек. Для того чтобы изменить параметры многоуровневого списка, щелкните по какому-либо пункту списка, нажмите на кнопку Многоуровневый список на вкладке Главная верхней панели инструментов, выберите опцию Параметры списка, откроется окно Параметры списка. Окно настроек многоуровневого списка выглядит следующим образом: Выберите нужный уровень списка в поле Уровень слева, затем используйте кнопки в верхней части окна настроек, чтобы настроить внешний вид маркера или нумерации для выбранного уровня: Тип - позволяет выбрать нужный тип нумерации, используемый для нумерованного списка, или нужный символ, используемый для маркированного списка. Для нумерованного списка доступны следующие варианты: Нет, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Для маркированного списка можно выбрать один из стандартных символов или использовать опцию Новый маркер. При выборе этой опции открывается окно Символ, в котором можно выбрать один из доступных символов. Для получения дополнительной информации о работе с символами вы можете обратиться к этой статье. Выравнивание - позволяет выбрать нужный тип выравнивания маркеров или нумерации, который используется для горизонтального выравнивания маркеров или нумерации внутри отведенного для них пространства в начале абзаца. Доступны следующие типы выравнивания: По левому краю, По центру, По правому краю. Размер - позволяет выбрать нужный размер маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, размер маркеров или нумерации соответствует размеру текста. Вы можете выбрать один из предварительно заданных размеров от 8 до 96. Цвет - позволяет выбрать нужный цвет маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, цвет маркеров или нумерации соответствует цвету текста. Вы можете выбрать опцию Автоматически, чтобы применить автоматический цвет, или выбрать на палитре один из цветов темы или стандартных цветов или задать пользовательский цвет. Все изменения отображаются в поле Просмотр. нажмите кнопку OK, чтобы применить изменения и закрыть окно настроек." + "body": "Для создания в документе списка: установите курсор в том месте, где начнется список (это может быть новая строка или уже введенный текст), перейдите на вкладку Главная верхней панели инструментов, выберите тип списка, который требуется создать: Неупорядоченный список с маркерами создается с помощью значка Маркированный список , расположенного на верхней панели инструментов Упорядоченный список с цифрами или буквами создается с помощью значка Нумерованный список , расположенного на верхней панели инструментов Примечание: нажмите направленную вниз стрелку рядом со значком Маркированный список или Нумерованный список, чтобы выбрать, как должен выглядеть список. теперь при каждом нажатии в конце строки клавиши Enter будет появляться новый элемент упорядоченного или неупорядоченного списка. Чтобы закончить список, нажмите клавишу Backspace и продолжайте текст обычного абзаца. Нумерованные списки также создаются автоматически при вводе цифры 1 с точкой или скобкой и пробелом после нее: 1., 1). Маркированные списки создаются автоматически при вводе символов -, * и пробела после них. Можно также изменить отступы текста в списках и их вложенность с помощью значков Многоуровневый список , Уменьшить отступ и Увеличить отступ на вкладке Главная верхней панели инструментов. Чтобы изменить уровень списка, щелкните значок Нумерованный список , Маркированный список или Многоуровневый список и в пункте меню Изменить уровень списка выберите подходящий стиль списка. Чтобы перейти на следующий уровень списка, поместите курсор на начало строки и нажмите на клавиатуре клавишу Tab. Примечание: дополнительные параметры отступов и интервалов можно изменить на правой боковой панели и в окне дополнительных параметров. Чтобы получить дополнительную информацию об этом, прочитайте разделы Изменение отступов абзацев и Настройка междустрочного интервала в абзацах. Объединение и разделение списков Для того чтобы объединить список с предыдущим списком: щелкните правой кнопкой мыши по первому пункту второго списка, используйте опцию контекстного меню Объединить с предыдущим списком. Списки будут объединены, и нумерация будет продолжена в соответствии с нумерацией первого списка. Для того чтобы разделить список: щелкните правой кнопкой мыши по тому пункту списка, с которого требуется начать новый список, используйте опцию контекстного меню Начать новый список. Список будет разделен, и во втором списке нумерация начнется заново. Изменение нумерации Для того чтобы продолжить во втором списке последовательную нумерацию в соответствии с предыдущим списком: щелкните правой кнопкой мыши по первому пункту второго списка, используйте опцию контекстного меню Продолжить нумерацию. Нумерация будет продолжена в соответствии с нумерацией первого списка. Для того чтобы задать произвольное начальное значение нумерации: щелкните правой кнопкой мыши по тому пункту списка, к которому требуется применить новое значение нумерации, используйте опцию контекстного меню Задать начальное значение, в новом открывшемся окне укажите нужное числовое значение и нажмите кнопку OK. Изменение параметров списков Для того чтобы изменить параметры списка, такие как тип, выравнивание, размер и цвет маркеров или нумерации: щелкните по какому-либо пункту существующего списка или выделите текст, который требуется отформатировать как список, нажмите на кнопку Маркированный список или Нумерованный список на вкладке Главная верхней панели инструментов, выберите опцию Параметры списка, откроется окно Параметры списка. Окно настроек маркированного списка выглядит следующим образом: Окно настроек нумерованного списка выглядит следующим образом: Для маркированного списка можно выбрать символ, используемый в качестве маркера, тогда как для нумерованного списка можно выбрать тип нумерации. Параметры Выравнивание, Размер и Цвет идентичны как для маркированных, так и для нумерованных списков. Маркер - позволяет выбрать нужный символ, используемый для маркированного списка. При нажатии на поле Шрифт и символ открывается окно Символ, в котором можно выбрать один из доступных символов. Для получения дополнительной информации о работе с символами вы можете обратиться к этой статье. Тип - позволяет выбрать нужный тип нумерации, используемый для нумерованного списка. Доступны следующие варианты: Нет, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Выравнивание - позволяет выбрать нужный тип выравнивания маркеров или нумерации, который используется для горизонтального выравнивания маркеров или нумерации внутри отведенного для них пространства. Доступны следующие типы выравнивания: По левому краю, По центру, По правому краю. Размер - позволяет выбрать нужный размер маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, размер маркеров или нумерации соответствует размеру текста. Вы можете выбрать один из предварительно заданных размеров от 8 до 96. Цвет - позволяет выбрать нужный цвет маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, цвет маркеров или нумерации соответствует цвету текста. Вы можете выбрать опцию Автоматически, чтобы применить автоматический цвет, или выбрать на палитре один из цветов темы или стандартных цветов или задать пользовательский цвет. Все изменения отображаются в поле Просмотр. нажмите кнопку OK, чтобы применить изменения и закрыть окно настроек. Для того чтобы изменить параметры многоуровневого списка, щелкните по какому-либо пункту списка, нажмите на кнопку Многоуровневый список на вкладке Главная верхней панели инструментов, выберите опцию Параметры списка, откроется окно Параметры списка. Окно настроек многоуровневого списка выглядит следующим образом: Выберите нужный уровень списка в поле Уровень слева, затем используйте кнопки в верхней части окна настроек, чтобы настроить внешний вид маркера или нумерации для выбранного уровня: Тип - позволяет выбрать нужный тип нумерации, используемый для нумерованного списка, или нужный символ, используемый для маркированного списка. Для нумерованного списка доступны следующие варианты: Нет, 1, 2, 3,..., a, b, c,..., A, B, C,..., i, ii, iii,..., I, II, III,.... Для маркированного списка можно выбрать один из стандартных символов или использовать опцию Новый маркер. При выборе этой опции открывается окно Символ, в котором можно выбрать один из доступных символов. Для получения дополнительной информации о работе с символами вы можете обратиться к этой статье. Выравнивание - позволяет выбрать нужный тип выравнивания маркеров или нумерации, который используется для горизонтального выравнивания маркеров или нумерации внутри отведенного для них пространства в начале абзаца. Доступны следующие типы выравнивания: По левому краю, По центру, По правому краю. Размер - позволяет выбрать нужный размер маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, размер маркеров или нумерации соответствует размеру текста. Вы можете выбрать один из предварительно заданных размеров от 8 до 96. Цвет - позволяет выбрать нужный цвет маркеров или нумерации. По умолчанию выбрана опция Как текст. Когда выбрана эта опция, цвет маркеров или нумерации соответствует цвету текста. Вы можете выбрать опцию Автоматически, чтобы применить автоматический цвет, или выбрать на палитре один из цветов темы или стандартных цветов или задать пользовательский цвет. Все изменения отображаются в поле Просмотр. нажмите кнопку OK, чтобы применить изменения и закрыть окно настроек." }, { "id": "UsageInstructions/CreateTableOfContents.htm", @@ -183,7 +183,7 @@ var indexes = { "id": "UsageInstructions/FontTypeSizeColor.htm", "title": "Настройка типа, размера и цвета шрифта", - "body": "Вы можете выбрать тип шрифта, его размер и цвет, используя соответствующие значки на вкладке Главная верхней панели инструментов. Примечание: если требуется отформатировать текст, который уже есть в документе, выделите его мышью или с помощью клавиатуры, а затем примените форматирование. Шрифт Используется для выбора шрифта из списка доступных. Если требуемый шрифт отсутствует в списке, его можно скачать и установить в вашей операционной системе, после чего он будет доступен для использования в десктопной версии. Размер шрифта Используется для выбора предустановленного значения размера шрифта из выпадающего списка (доступны следующие стандартные значения: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 и 96). Также можно вручную ввести произвольное значение до 300 пунктов в поле ввода и нажать клавишу Enter. Увеличить размер шрифта Используется для изменения размера шрифта, делая его на один пункт крупнее при каждом нажатии на кнопку. Уменьшить размер шрифта Используется для изменения размера шрифта, делая его на один пункт мельче при каждом нажатии на кнопку. Изменить регистр Используется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста. Цвет выделения Используется для выделения отдельных предложений, фраз, слов или даже символов путем добавления цветовой полосы, имитирующей отчеркивание текста маркером. Можно выделить нужную часть текста, а потом нажать направленную вниз стрелку рядом с этим значком, чтобы выбрать цвет на палитре (этот набор цветов не зависит от выбранной Цветовой схемы и включает в себя 16 цветов), и этот цвет будет применен к выбранному тексту. Или же можно сначала выбрать цвет выделения, а потом начать выделять текст мышью - указатель мыши будет выглядеть так: - и появится возможность выделить несколько разных частей текста одну за другой. Чтобы остановить выделение текста, просто еще раз щелкните по значку. Для очистки цвета выделения воспользуйтесь опцией Без заливки. Цвет выделения отличается от Цвета фона , поскольку последний применяется ко всему абзацу и полностью заполняет пространство абзаца от левого поля страницы до правого поля страницы. Цвет шрифта Используется для изменения цвета букв/символов в тексте. По умолчанию в новом пустом документе установлен автоматический цвет шрифта. Он отображается как черный шрифт на белом фоне. Если изменить цвет фона на черный, цвет шрифта автоматически изменится на белый, так чтобы текст по-прежнему был четко виден. Для выбора другого цвета нажмите направленную вниз стрелку рядом со значком и выберите цвет на доступных палитрах (цвета на палитре Цвета темы зависят от выбранной цветовой схемы). После изменения цвета шрифта по умолчанию можно использовать опцию Автоматический в окне цветовых палитр для быстрого восстановления автоматического цвета выбранного фрагмента текста. Примечание: более подробно о работе с цветовыми палитрами рассказывается на этой странице." + "body": "Вы можете выбрать тип шрифта, его размер и цвет, используя соответствующие значки на вкладке Главная верхней панели инструментов. Примечание: если требуется отформатировать текст, который уже есть в документе, выделите его мышью или с помощью клавиатуры, а затем примените форматирование. Также можно поместить курсор мыши в нужное слово, чтобы применить форматирование только к этому слову. Шрифт Используется для выбора шрифта из списка доступных. Если требуемый шрифт отсутствует в списке, его можно скачать и установить в вашей операционной системе, после чего он будет доступен для использования в десктопной версии. Размер шрифта Используется для выбора предустановленного значения размера шрифта из выпадающего списка (доступны следующие стандартные значения: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 и 96). Также можно вручную ввести произвольное значение до 300 пунктов в поле ввода и нажать клавишу Enter. Увеличить размер шрифта Используется для изменения размера шрифта, делая его на один пункт крупнее при каждом нажатии на кнопку. Уменьшить размер шрифта Используется для изменения размера шрифта, делая его на один пункт мельче при каждом нажатии на кнопку. Изменить регистр Используется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста или слова, в котором находится курсор мыши. Цвет выделения Используется для выделения отдельных предложений, фраз, слов или даже символов путем добавления цветовой полосы, имитирующей отчеркивание текста маркером. Можно выделить нужную часть текста, а потом нажать направленную вниз стрелку рядом с этим значком, чтобы выбрать цвет на палитре (этот набор цветов не зависит от выбранной Цветовой схемы и включает в себя 16 цветов), и этот цвет будет применен к выбранному тексту. Или же можно сначала выбрать цвет выделения, а потом начать выделять текст мышью - указатель мыши будет выглядеть так: - и появится возможность выделить несколько разных частей текста одну за другой. Чтобы остановить выделение текста, просто еще раз щелкните по значку. Для очистки цвета выделения воспользуйтесь опцией Без заливки. Цвет выделения отличается от Цвета фона , поскольку последний применяется ко всему абзацу и полностью заполняет пространство абзаца от левого поля страницы до правого поля страницы. Цвет шрифта Используется для изменения цвета букв/символов в тексте. По умолчанию в новом пустом документе установлен автоматический цвет шрифта. Он отображается как черный шрифт на белом фоне. Если изменить цвет фона на черный, цвет шрифта автоматически изменится на белый, так чтобы текст по-прежнему был четко виден. Для выбора другого цвета нажмите направленную вниз стрелку рядом со значком и выберите цвет на доступных палитрах (цвета на палитре Цвета темы зависят от выбранной цветовой схемы). После изменения цвета шрифта по умолчанию можно использовать опцию Автоматический в окне цветовых палитр для быстрого восстановления автоматического цвета выбранного фрагмента текста. Примечание: более подробно о работе с цветовыми палитрами рассказывается на этой странице." }, { "id": "UsageInstructions/FormattingPresets.htm", @@ -248,7 +248,7 @@ var indexes = { "id": "UsageInstructions/InsertImages.htm", "title": "Вставка изображений", - "body": "В редакторе документов можно вставлять в документ изображения самых популярных форматов. Поддерживаются следующие форматы изображений: BMP, GIF, JPEG, JPG, PNG. Вставка изображения Для вставки изображения в текст документа: установите курсор там, где требуется поместить изображение, перейдите на вкладку Вставка верхней панели инструментов, нажмите значок Изображение на верхней панели инструментов, для загрузки изображения выберите одну из следующих опций: при выборе опции Изображение из файла откроется стандартное диалоговое окно для выбора файлов. Выберите нужный файл на жестком диске компьютера и нажмите кнопку Открыть В онлайн-редакторе вы можете выбрать сразу несколько изображений. при выборе опции Изображение по URL откроется окно, в котором Вы можете ввести веб-адрес нужного изображения, а затем нажмите кнопку OK при выборе опции Изображение из хранилища откроется окно Выбрать источник данных. Выберите изображение, сохраненное на вашем портале, и нажмите кнопку OK после того, как изображение будет добавлено, можно изменить его размер, свойства и положение. К изображению также можно добавить подпись. Для получения дополнительной информации о работе с подписями к изображениям вы можете обратиться к этой статье. Перемещение и изменение размера изображений Для изменения размера изображения перетаскивайте маленькие квадраты , расположенные по его краям. Чтобы сохранить исходные пропорции выбранного изображения при изменении размера, удерживайте клавишу Shift и перетаскивайте один из угловых значков. Для изменения местоположения изображения используйте значок , который появляется после наведения курсора мыши на изображение. Перетащите изображение на нужное место, не отпуская кнопку мыши. При перемещении изображения на экране появляются направляющие, которые помогают точно расположить объект на странице (если выбран стиль обтекания, отличный от стиля \"В тексте\"). Чтобы повернуть изображение, наведите курсор мыши на маркер поворота и перетащите его по часовой стрелке или против часовой стрелки. Чтобы ограничить угол поворота шагом в 15 градусов, при поворачивании удерживайте клавишу Shift. Примечание: список сочетаний клавиш, которые можно использовать при работе с объектами, доступен здесь. Изменение параметров изображения Некоторые параметры изображения можно изменить с помощью вкладки Параметры изображения на правой боковой панели. Чтобы ее активировать, щелкните по изображению и выберите значок Параметры изображения справа. Здесь можно изменить следующие свойства: Размер - используется, чтобы просмотреть текущую Ширину и Высоту изображения. При необходимости можно восстановить размер изображения по умолчанию, нажав кнопку По умолчанию. Кнопка Вписать позволяет изменить размер изображения таким образом, чтобы оно занимало все пространство между левым и правым полями страницы. Кнопка Обрезать используется, чтобы обрезать изображение. Нажмите кнопку Обрезать, чтобы активировать маркеры обрезки, которые появятся в углах изображения и в центре каждой его стороны. Вручную перетаскивайте маркеры, чтобы задать область обрезки. Вы можете навести курсор мыши на границу области обрезки, чтобы курсор превратился в значок , и перетащить область обрезки. Чтобы обрезать одну сторону, перетащите маркер, расположенный в центре этой стороны. Чтобы одновременно обрезать две смежных стороны, перетащите один из угловых маркеров. Чтобы равномерно обрезать две противоположные стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании маркера в центре одной из этих сторон. Чтобы равномерно обрезать все стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании любого углового маркера. Когда область обрезки будет задана, еще раз нажмите на кнопку Обрезать, или нажмите на клавишу Esc, или щелкните мышью за пределами области обрезки, чтобы применить изменения. После того, как область обрезки будет задана, также можно использовать опции Заливка и Вписать, доступные в выпадающем меню Обрезать. Нажмите кнопку Обрезать еще раз и выберите нужную опцию: При выборе опции Заливка центральная часть исходного изображения будет сохранена и использована в качестве заливки выбранной области обрезки, в то время как остальные части изображения будут удалены. При выборе опции Вписать размер изображения будет изменен, чтобы оно соответствовало высоте или ширине области обрезки. Никакие части исходного изображения не будут удалены, но внутри выбранной области обрезки могут появится пустые пространства. Поворот - используется, чтобы повернуть изображение на 90 градусов по часовой стрелке или против часовой стрелки, а также чтобы отразить изображение слева направо или сверху вниз. Нажмите на одну из кнопок: чтобы повернуть изображение на 90 градусов против часовой стрелки чтобы повернуть изображение на 90 градусов по часовой стрелке чтобы отразить изображение по горизонтали (слева направо) чтобы отразить изображение по вертикали (сверху вниз) Стиль обтекания - используется, чтобы выбрать один из доступных стилей обтекания текстом - в тексте, вокруг рамки, по контуру, сквозное, сверху и снизу, перед текстом, за текстом (для получения дополнительной информации смотрите описание дополнительных параметров ниже). Заменить изображение - используется, чтобы заменить текущее изображение, загрузив другое Из файла, Из хранилища или По URL. Некоторые из этих опций можно также найти в контекстном меню. Меню содержит следующие пункты: Вырезать, копировать, вставить - стандартные опции, которые используются для вырезания или копирования выделенного текста/объекта и вставки ранее вырезанного/скопированного фрагмента текста или объекта в то место, где находится курсор. Порядок - используется, чтобы вынести выбранное изображение на передний план, переместить на задний план, перенести вперед или назад, а также сгруппировать или разгруппировать изображения для выполнения операций над несколькими из них сразу. Подробнее о расположении объектов в определенном порядке рассказывается на этой странице. Выравнивание - используется, чтобы выровнять изображение по левому краю, по центру, по правому краю, по верхнему краю, по середине, по нижнему краю. Подробнее о выравнивании объектов рассказывается на этой странице. Стиль обтекания - используется, чтобы выбрать один из доступных стилей обтекания текстом - в тексте, вокруг рамки, по контуру, сквозное, сверху и снизу, перед текстом, за текстом - или для изменения границы обтекания. Опция Изменить границу обтекания доступна только в том случае, если выбран стиль обтекания, отличный от стиля \"В тексте\". Чтобы произвольно изменить границу, перетаскивайте точки границы обтекания. Чтобы создать новую точку границы обтекания, щелкните в любом месте на красной линии и перетащите ее в нужную позицию. Поворот - используется, чтобы повернуть изображение на 90 градусов по часовой стрелке или против часовой стрелки, а также чтобы отразить изображение слева направо или сверху вниз. Обрезать - используется, чтобы применить один из вариантов обрезки: Обрезать, Заливка или Вписать. Выберите из подменю пункт Обрезать, затем перетащите маркеры обрезки, чтобы задать область обрезки, и нажмите на одну из этих трех опций в подменю еще раз, чтобы применить изменения. Реальный размер - используется для смены текущего размера изображения на реальный размер. Заменить изображение - используется, чтобы заменить текущее изображение, загрузив другое Из файла или По URL. Дополнительные параметры изображения - используется для вызова окна 'Изображение - дополнительные параметры'. Когда изображение выделено, справа также доступен значок Параметры фигуры . Можно щелкнуть по нему, чтобы открыть вкладку Параметры фигуры на правой боковой панели и настроить тип, толщину и цвет Конкуры фигуры, а также изменить тип фигуры, выбрав другую фигуру в меню Изменить автофигуру. Форма изображения изменится соответствующим образом. На вкладке Параметры фигуры также можно использовать опцию Отображать тень, чтобы добавить тень к изображеню. Изменение дополнительных параметров изображения Чтобы изменить дополнительные параметры изображения, щелкните по нему правой кнопкой мыши и выберите из контекстного меню пункт Дополнительные параметры изображения. Или нажмите ссылку Дополнительные параметры на правой боковой панели. Откроется окно свойств изображения: Вкладка Размер содержит следующие параметры: Ширина и Высота - используйте эти опции, чтобы изменить ширину и/или высоту изображения. Если нажата кнопка Сохранять пропорции (в этом случае она выглядит так: ), ширина и высота будут изменены пропорционально, сохраняя исходное соотношение сторон изображения. Чтобы восстановить реальный размер добавленного изображения, нажмите кнопку Реальный размер. Вкладка Поворот содержит следующие параметры: Угол - используйте эту опцию, чтобы повернуть изображение на точно заданный угол. Введите в поле нужное значение в градусах или скорректируйте его, используя стрелки справа. Отражено - отметьте галочкой опцию По горизонтали, чтобы отразить изображение по горизонтали (слева направо), или отметьте галочкой опцию По вертикали, чтобы отразить изображение по вертикали (сверху вниз). Вкладка Обтекание текстом содержит следующие параметры: Стиль обтекания - используйте эту опцию, чтобы изменить способ размещения изображения относительно текста: или оно будет являться частью текста (если выбран стиль обтекания \"В тексте\") или текст будет обтекать его со всех сторон (если выбран один из остальных стилей). В тексте - изображение считается частью текста, как отдельный символ, поэтому при перемещении текста изображение тоже перемещается. В этом случае параметры расположения недоступны. Если выбран один из следующих стилей, изображение можно перемещать независимо от текста и точно задавать положение изображения на странице: Вокруг рамки - текст обтекает прямоугольную рамку, которая окружает изображение. По контуру - текст обтекает реальные контуры изображения. Сквозное - текст обтекает вокруг контуров изображения и заполняет незамкнутое свободное место внутри него. Чтобы этот эффект проявился, используйте опцию Изменить границу обтекания из контекстного меню. Сверху и снизу - текст находится только выше и ниже изображения. Перед текстом - изображение перекрывает текст. За текстом - текст перекрывает изображение. При выборе стиля обтекания вокруг рамки, по контуру, сквозное или сверху и снизу можно задать дополнительные параметры - расстояние до текста со всех сторон (сверху, снизу, слева, справа). Вкладка Положение доступна только в том случае, если выбран стиль обтекания, отличный от стиля \"В тексте\". Вкладка содержит следующие параметры, которые различаются в зависимости от выбранного стиля обтекания: В разделе По горизонтали можно выбрать один из следующих трех способов позиционирования изображения: Выравнивание (по левому краю, по центру, по правому краю) относительно символа, столбца, левого поля, поля, страницы или правого поля, Абсолютное Положение, определяемое в абсолютных единицах, то есть Сантиметрах/Пунктах/Дюймах (в зависимости от того, какой параметр указан на вкладке Файл -> Дополнительные параметры...), справа от символа, столбца, левого поля, поля, страницы или правого поля, Относительное положение, определяемое в процентах, относительно левого поля, поля, страницы или правого поля. В разделе По вертикали можно выбрать один из следующих трех способов позиционирования изображения: Выравнивание (по верхнему краю, по центру, по нижнему краю) относительно строки, поля, нижнего поля, абзаца, страницы или верхнего поля, Абсолютное Положение, определяемое в абсолютных единицах, то есть Сантиметрах/Пунктах/Дюймах (в зависимости от того, какой параметр указан на вкладке Файл -> Дополнительные параметры...), ниже строки, поля, нижнего поля, абзаца, страницы или верхнего поля, Относительное положение, определяемое в процентах, относительно поля, нижнего поля, страницы или верхнего поля. Опция Перемещать с текстом определяет, будет ли изображение перемещаться вместе с текстом, к которому оно привязано. Опция Разрешить перекрытие определяет, будут ли перекрываться два изображения, если перетащить их близко друг к другу на странице. Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит изображение." + "body": "В редакторе документов можно вставлять в документ изображения самых популярных форматов. Поддерживаются следующие форматы изображений: BMP, GIF, JPEG, JPG, PNG. Вставка изображения Для вставки изображения в текст документа: установите курсор там, где требуется поместить изображение, перейдите на вкладку Вставка верхней панели инструментов, нажмите значок Изображение на верхней панели инструментов, для загрузки изображения выберите одну из следующих опций: при выборе опции Изображение из файла откроется стандартное диалоговое окно для выбора файлов. Выберите нужный файл на жестком диске компьютера и нажмите кнопку Открыть В онлайн-редакторе вы можете выбрать сразу несколько изображений. при выборе опции Изображение по URL откроется окно, в котором Вы можете ввести веб-адрес нужного изображения, а затем нажмите кнопку OK при выборе опции Изображение из хранилища откроется окно Выбрать источник данных. Выберите изображение, сохраненное на вашем портале, и нажмите кнопку OK после того, как изображение будет добавлено, можно изменить его размер, свойства и положение. К изображению также можно добавить подпись. Для получения дополнительной информации о работе с подписями к изображениям вы можете обратиться к этой статье. Перемещение и изменение размера изображений Для изменения размера изображения перетаскивайте маленькие квадраты , расположенные по его краям. Чтобы сохранить исходные пропорции выбранного изображения при изменении размера, удерживайте клавишу Shift и перетаскивайте один из угловых значков. Для изменения местоположения изображения используйте значок , который появляется после наведения курсора мыши на изображение. Перетащите изображение на нужное место, не отпуская кнопку мыши. При перемещении изображения на экране появляются направляющие, которые помогают точно расположить объект на странице (если выбран стиль обтекания, отличный от стиля \"В тексте\"). Чтобы повернуть изображение, наведите курсор мыши на маркер поворота и перетащите его по часовой стрелке или против часовой стрелки. Чтобы ограничить угол поворота шагом в 15 градусов, при поворачивании удерживайте клавишу Shift. Примечание: список сочетаний клавиш, которые можно использовать при работе с объектами, доступен здесь. Изменение параметров изображения Некоторые параметры изображения можно изменить с помощью вкладки Параметры изображения на правой боковой панели. Чтобы ее активировать, щелкните по изображению и выберите значок Параметры изображения справа. Здесь можно изменить следующие свойства: Размер - используется, чтобы просмотреть текущую Ширину и Высоту изображения. При необходимости можно восстановить размер изображения по умолчанию, нажав кнопку По умолчанию. Кнопка Вписать позволяет изменить размер изображения таким образом, чтобы оно занимало все пространство между левым и правым полями страницы. Кнопка Обрезать используется, чтобы обрезать изображение. Нажмите кнопку Обрезать, чтобы активировать маркеры обрезки, которые появятся в углах изображения и в центре каждой его стороны. Вручную перетаскивайте маркеры, чтобы задать область обрезки. Вы можете навести курсор мыши на границу области обрезки, чтобы курсор превратился в значок , и перетащить область обрезки. Чтобы обрезать одну сторону, перетащите маркер, расположенный в центре этой стороны. Чтобы одновременно обрезать две смежных стороны, перетащите один из угловых маркеров. Чтобы равномерно обрезать две противоположные стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании маркера в центре одной из этих сторон. Чтобы равномерно обрезать все стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании любого углового маркера. Когда область обрезки будет задана, еще раз нажмите на кнопку Обрезать, или нажмите на клавишу Esc, или щелкните мышью за пределами области обрезки, чтобы применить изменения. После того, как область обрезки будет задана, также можно использовать опции Заливка и Вписать, доступные в выпадающем меню Обрезать. Нажмите кнопку Обрезать еще раз и выберите нужную опцию: При выборе опции Заливка центральная часть исходного изображения будет сохранена и использована в качестве заливки выбранной области обрезки, в то время как остальные части изображения будут удалены. При выборе опции Вписать размер изображения будет изменен, чтобы оно соответствовало высоте или ширине области обрезки. Никакие части исходного изображения не будут удалены, но внутри выбранной области обрезки могут появится пустые пространства. Поворот - используется, чтобы повернуть изображение на 90 градусов по часовой стрелке или против часовой стрелки, а также чтобы отразить изображение слева направо или сверху вниз. Нажмите на одну из кнопок: чтобы повернуть изображение на 90 градусов против часовой стрелки чтобы повернуть изображение на 90 градусов по часовой стрелке чтобы отразить изображение по горизонтали (слева направо) чтобы отразить изображение по вертикали (сверху вниз) Стиль обтекания - используется, чтобы выбрать один из доступных стилей обтекания текстом - в тексте, вокруг рамки, по контуру, сквозное, сверху и снизу, перед текстом, за текстом (для получения дополнительной информации смотрите описание дополнительных параметров ниже). Заменить изображение - используется, чтобы заменить текущее изображение, загрузив другое Из файла, Из хранилища или По URL. Некоторые из этих опций можно также найти в контекстном меню. Меню содержит следующие пункты: Вырезать, копировать, вставить - стандартные опции, которые используются для вырезания или копирования выделенного текста/объекта и вставки ранее вырезанного/скопированного фрагмента текста или объекта в то место, где находится курсор. Порядок - используется, чтобы вынести выбранное изображение на передний план, переместить на задний план, перенести вперед или назад, а также сгруппировать или разгруппировать изображения для выполнения операций над несколькими из них сразу. Подробнее о расположении объектов в определенном порядке рассказывается на этой странице. Выравнивание - используется, чтобы выровнять изображение по левому краю, по центру, по правому краю, по верхнему краю, по середине, по нижнему краю. Подробнее о выравнивании объектов рассказывается на этой странице. Стиль обтекания - используется, чтобы выбрать один из доступных стилей обтекания текстом - в тексте, вокруг рамки, по контуру, сквозное, сверху и снизу, перед текстом, за текстом - или для изменения границы обтекания. Опция Изменить границу обтекания доступна только в том случае, если выбран стиль обтекания, отличный от стиля \"В тексте\". Чтобы произвольно изменить границу, перетаскивайте точки границы обтекания. Чтобы создать новую точку границы обтекания, щелкните в любом месте на красной линии и перетащите ее в нужную позицию. Поворот - используется, чтобы повернуть изображение на 90 градусов по часовой стрелке или против часовой стрелки, а также чтобы отразить изображение слева направо или сверху вниз. Обрезать - используется, чтобы применить один из вариантов обрезки: Обрезать, Заливка или Вписать. Выберите из подменю пункт Обрезать, затем перетащите маркеры обрезки, чтобы задать область обрезки, и нажмите на одну из этих трех опций в подменю еще раз, чтобы применить изменения. Реальный размер - используется для смены текущего размера изображения на реальный размер. Заменить изображение - используется, чтобы заменить текущее изображение, загрузив другое Из файла или По URL. Дополнительные параметры изображения - используется для вызова окна 'Изображение - дополнительные параметры'. Когда изображение выделено, справа также доступен значок Параметры фигуры . Можно щелкнуть по нему, чтобы открыть вкладку Параметры фигуры на правой боковой панели и настроить тип, толщину и цвет Контуров фигуры, а также изменить тип фигуры, выбрав другую фигуру в меню Изменить автофигуру. Форма изображения изменится соответствующим образом. На вкладке Параметры фигуры также можно использовать опцию Отображать тень, чтобы добавить тень к изображеню. Изменение дополнительных параметров изображения Чтобы изменить дополнительные параметры изображения, щелкните по нему правой кнопкой мыши и выберите из контекстного меню пункт Дополнительные параметры изображения. Или нажмите ссылку Дополнительные параметры на правой боковой панели. Откроется окно свойств изображения: Вкладка Размер содержит следующие параметры: Ширина и Высота - используйте эти опции, чтобы изменить ширину и/или высоту изображения. Если нажата кнопка Сохранять пропорции (в этом случае она выглядит так: ), ширина и высота будут изменены пропорционально, сохраняя исходное соотношение сторон изображения. Чтобы восстановить реальный размер добавленного изображения, нажмите кнопку Реальный размер. Вкладка Поворот содержит следующие параметры: Угол - используйте эту опцию, чтобы повернуть изображение на точно заданный угол. Введите в поле нужное значение в градусах или скорректируйте его, используя стрелки справа. Отражено - отметьте галочкой опцию По горизонтали, чтобы отразить изображение по горизонтали (слева направо), или отметьте галочкой опцию По вертикали, чтобы отразить изображение по вертикали (сверху вниз). Вкладка Обтекание текстом содержит следующие параметры: Стиль обтекания - используйте эту опцию, чтобы изменить способ размещения изображения относительно текста: или оно будет являться частью текста (если выбран стиль обтекания \"В тексте\") или текст будет обтекать его со всех сторон (если выбран один из остальных стилей). В тексте - изображение считается частью текста, как отдельный символ, поэтому при перемещении текста изображение тоже перемещается. В этом случае параметры расположения недоступны. Если выбран один из следующих стилей, изображение можно перемещать независимо от текста и точно задавать положение изображения на странице: Вокруг рамки - текст обтекает прямоугольную рамку, которая окружает изображение. По контуру - текст обтекает реальные контуры изображения. Сквозное - текст обтекает вокруг контуров изображения и заполняет незамкнутое свободное место внутри него. Чтобы этот эффект проявился, используйте опцию Изменить границу обтекания из контекстного меню. Сверху и снизу - текст находится только выше и ниже изображения. Перед текстом - изображение перекрывает текст. За текстом - текст перекрывает изображение. При выборе стиля обтекания вокруг рамки, по контуру, сквозное или сверху и снизу можно задать дополнительные параметры - расстояние до текста со всех сторон (сверху, снизу, слева, справа). Вкладка Положение доступна только в том случае, если выбран стиль обтекания, отличный от стиля \"В тексте\". Вкладка содержит следующие параметры, которые различаются в зависимости от выбранного стиля обтекания: В разделе По горизонтали можно выбрать один из следующих трех способов позиционирования изображения: Выравнивание (по левому краю, по центру, по правому краю) относительно символа, столбца, левого поля, поля, страницы или правого поля, Абсолютное Положение, определяемое в абсолютных единицах, то есть Сантиметрах/Пунктах/Дюймах (в зависимости от того, какой параметр указан на вкладке Файл -> Дополнительные параметры...), справа от символа, столбца, левого поля, поля, страницы или правого поля, Относительное положение, определяемое в процентах, относительно левого поля, поля, страницы или правого поля. В разделе По вертикали можно выбрать один из следующих трех способов позиционирования изображения: Выравнивание (по верхнему краю, по центру, по нижнему краю) относительно строки, поля, нижнего поля, абзаца, страницы или верхнего поля, Абсолютное Положение, определяемое в абсолютных единицах, то есть Сантиметрах/Пунктах/Дюймах (в зависимости от того, какой параметр указан на вкладке Файл -> Дополнительные параметры...), ниже строки, поля, нижнего поля, абзаца, страницы или верхнего поля, Относительное положение, определяемое в процентах, относительно поля, нижнего поля, страницы или верхнего поля. Опция Перемещать с текстом определяет, будет ли изображение перемещаться вместе с текстом, к которому оно привязано. Опция Разрешить перекрытие определяет, будут ли перекрываться два изображения, если перетащить их близко друг к другу на странице. Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит изображение." }, { "id": "UsageInstructions/InsertLineNumbers.htm", @@ -308,7 +308,7 @@ var indexes = { "id": "UsageInstructions/SavePrintDownload.htm", "title": "Сохранение / скачивание / печать документа", - "body": "Сохранение По умолчанию онлайн-редактор документов автоматически сохраняет файл каждые 2 секунды, когда вы работаете над ним, чтобы не допустить потери данных в случае непредвиденного закрытия программы. Если вы совместно редактируете файл в Быстром режиме, таймер запрашивает наличие изменений 25 раз в секунду и сохраняет их, если они были внесены. При совместном редактировании файла в Строгом режиме изменения автоматически сохраняются каждые 10 минут. При необходимости можно легко выбрать предпочтительный режим совместного редактирования или отключить функцию автоматического сохранения на странице Дополнительные параметры. Чтобы сохранить текущий документ вручную в текущем формате и местоположении, нажмите значок Сохранить в левой части шапки редактора, или используйте сочетание клавиш Ctrl+S, или нажмите на вкладку Файл на верхней панели инструментов и выберите опцию Сохранить. Чтобы не допустить потери данных в десктопной версии в случае непредвиденного закрытия программы, вы можете включить опцию Автовосстановление на странице Дополнительные параметры. Чтобы в десктопной версии сохранить документ под другим именем, в другом местоположении или в другом формате, нажмите на вкладку Файл на верхней панели инструментов, выберите опцию Сохранить как, выберите один из доступных форматов: DOCX, ODT, RTF, TXT, PDF, PDFA. Также можно выбрать вариант Шаблон документа DOTX или OTT. Скачивание Чтобы в онлайн-версии скачать готовый документ и сохранить его на жестком диске компьютера, нажмите на вкладку Файл на верхней панели инструментов, выберите опцию Скачать как..., выберите один из доступных форматов: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Сохранение копии Чтобы в онлайн-версии сохранить копию документа на портале, нажмите на вкладку Файл на верхней панели инструментов, выберите опцию Сохранить копию как..., выберите один из доступных форматов: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. выберите местоположение файла на портале и нажмите Сохранить. Печать Чтобы распечатать текущий документ, нажмите значок Напечатать файл в левой части шапки редактора, или используйте сочетание клавиш Ctrl+P, или нажмите на вкладку Файл на верхней панели инструментов и выберите опцию Печать. В браузере Firefox возможна печатать документа без предварительной загрузки в виде файла .pdf. Также можно распечатать выделенный фрагмент текста с помощью пункта контекстного меню Напечатать выделенное как в режиме Редактирования, так и в режиме Просмотра (кликните правой кнопкой мыши и выберите опцию Напечатать выделенное). В десктопной версии документ будет напрямую отправлен на печать. В онлайн-версии на основе данного документа будет сгенерирован файл PDF. Вы можете открыть и распечатать его, или сохранить его на жестком диске компьютера или съемном носителе чтобы распечатать позже. В некоторых браузерах, например Хром и Опера, есть встроенная возможность для прямой печати." + "body": "Сохранение По умолчанию онлайн-редактор документов автоматически сохраняет файл каждые 2 секунды, когда вы работаете над ним, чтобы не допустить потери данных в случае непредвиденного закрытия программы. Если вы совместно редактируете файл в Быстром режиме, таймер запрашивает наличие изменений 25 раз в секунду и сохраняет их, если они были внесены. При совместном редактировании файла в Строгом режиме изменения автоматически сохраняются каждые 10 минут. При необходимости можно легко выбрать предпочтительный режим совместного редактирования или отключить функцию автоматического сохранения на странице Дополнительные параметры. Чтобы сохранить текущий документ вручную в текущем формате и местоположении, нажмите значок Сохранить в левой части шапки редактора, или используйте сочетание клавиш Ctrl+S, или нажмите на вкладку Файл на верхней панели инструментов и выберите опцию Сохранить. Чтобы не допустить потери данных в десктопной версии в случае непредвиденного закрытия программы, вы можете включить опцию Автовосстановление на странице Дополнительные параметры. Чтобы в десктопной версии сохранить документ под другим именем, в другом местоположении или в другом формате, нажмите на вкладку Файл на верхней панели инструментов, выберите опцию Сохранить как, выберите один из доступных форматов: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. Также можно выбрать вариант Шаблон документа DOTX или OTT. Скачивание Чтобы в онлайн-версии скачать готовый документ и сохранить его на жестком диске компьютера, нажмите на вкладку Файл на верхней панели инструментов, выберите опцию Скачать как..., выберите один из доступных форматов: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. Сохранение копии Чтобы в онлайн-версии сохранить копию документа на портале, нажмите на вкладку Файл на верхней панели инструментов, выберите опцию Сохранить копию как..., выберите один из доступных форматов: DOCX, PDF, ODT, TXT, DOTX, PDF/A, OTT, RTF, HTML, FB2, EPUB. выберите местоположение файла на портале и нажмите Сохранить. Печать Чтобы распечатать текущий документ, нажмите значок Напечатать файл в левой части шапки редактора, или используйте сочетание клавиш Ctrl+P, или нажмите на вкладку Файл на верхней панели инструментов и выберите опцию Печать. В браузере Firefox возможна печатать документа без предварительной загрузки в виде файла .pdf. Также можно распечатать выделенный фрагмент текста с помощью пункта контекстного меню Напечатать выделенное как в режиме Редактирования, так и в режиме Просмотра (кликните правой кнопкой мыши и выберите опцию Напечатать выделенное). В десктопной версии документ будет напрямую отправлен на печать. В онлайн-версии на основе данного документа будет сгенерирован файл PDF. Вы можете открыть и распечатать его, или сохранить его на жестком диске компьютера или съемном носителе чтобы распечатать позже. В некоторых браузерах, например Хром и Опера, есть встроенная возможность для прямой печати." }, { "id": "UsageInstructions/SectionBreaks.htm", diff --git a/apps/presentationeditor/main/resources/help/en/HelpfulHints/About.htm b/apps/presentationeditor/main/resources/help/en/HelpfulHints/About.htm index 2f708d0cc..b92d42ef1 100644 --- a/apps/presentationeditor/main/resources/help/en/HelpfulHints/About.htm +++ b/apps/presentationeditor/main/resources/help/en/HelpfulHints/About.htm @@ -19,7 +19,7 @@

    Using the Presentation Editor, you can perform various editing operations like in any desktop editor, print the edited presentations keeping all the formatting details or download them onto the hard disk drive of your computer as PPTX, PDF, ODP, POTX, PDF/A, OTP files.

    -

    To view the current software version and licensor details in the online version, click the About icon icon on the left sidebar. To view the current software version and licensor details in the desktop version, select the About menu item on the left sidebar of the main program window.

    +

    To view the current software version and licensor details in the online version, click the About icon icon on the left sidebar. To view the current software version and licensor details in the desktop version for Windows, select the About menu item on the left sidebar of the main program window. In the desktop version for Mac OS, open the ONLYOFFICE menu at the top of the screen and select the About ONLYOFFICE menu item.

    \ No newline at end of file diff --git a/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertText.htm b/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertText.htm index c1aae9b55..8843dd6e3 100644 --- a/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertText.htm +++ b/apps/presentationeditor/main/resources/help/en/UsageInstructions/InsertText.htm @@ -79,7 +79,7 @@

    Adjust font type, size, color and apply decoration styles

    You can select the font type, its size and color as well as apply various font decoration styles using the corresponding icons situated on the Home tab of the top toolbar.

    -

    Note: in case you want to apply the formatting to the text already present in the presentation, select it with the mouse or using the keyboard and apply the formatting.

    +

    Note: in case you want to apply the formatting to the text already present in the presentation, select it with the mouse or using the keyboard and apply the formatting. You can also place the mouse cursor within the necessary word to apply the formatting to this word only.

    Шрифт
    Изменить регистр Change caseИспользуется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста.Используется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста или слова, в котором находится курсор мыши.
    Цвет выделения
    @@ -104,7 +104,7 @@ - + diff --git a/apps/presentationeditor/main/resources/help/en/search/indexes.js b/apps/presentationeditor/main/resources/help/en/search/indexes.js index d830d6fc2..3d9367ca9 100644 --- a/apps/presentationeditor/main/resources/help/en/search/indexes.js +++ b/apps/presentationeditor/main/resources/help/en/search/indexes.js @@ -3,7 +3,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "About the Presentation Editor", - "body": "The Presentation Editor is an online application that lets you look through and edit presentations directly in your browser . Using the Presentation Editor, you can perform various editing operations like in any desktop editor, print the edited presentations keeping all the formatting details or download them onto the hard disk drive of your computer as PPTX, PDF, ODP, POTX, PDF/A, OTP files. To view the current software version and licensor details in the online version, click the icon on the left sidebar. To view the current software version and licensor details in the desktop version, select the About menu item on the left sidebar of the main program window." + "body": "The Presentation Editor is an online application that lets you look through and edit presentations directly in your browser . Using the Presentation Editor, you can perform various editing operations like in any desktop editor, print the edited presentations keeping all the formatting details or download them onto the hard disk drive of your computer as PPTX, PDF, ODP, POTX, PDF/A, OTP files. To view the current software version and licensor details in the online version, click the icon on the left sidebar. To view the current software version and licensor details in the desktop version for Windows, select the About menu item on the left sidebar of the main program window. In the desktop version for Mac OS, open the ONLYOFFICE menu at the top of the screen and select the About ONLYOFFICE menu item." }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -158,7 +158,7 @@ var indexes = { "id": "UsageInstructions/InsertText.htm", "title": "Insert and format your text", - "body": "Insert your text In the Presentation Editor, you can add a new text in three different ways: Add a text passage within the corresponding text placeholder on the slide layout. To do that, just put the cursor within the placeholder and type in your text or paste it using the Ctrl+V key combination instead of the default text. Add a text passage anywhere on a slide. You can insert a text box (a rectangular frame that allows you to enter some text within it) or a Text Art object (a text box with a predefined font style and color that allows you to apply some text effects). Depending on the necessary text object type, you can do the following: to add a text box, click the Text Box icon on the Home or Insert tab of the top toolbar, then click where you want to insert the text box, hold the mouse button and drag the text box border to specify its size. When you release the mouse button, the insertion point will appear in the added text box, allowing you to enter your text. It's also possible to insert a text box by clicking the Shape icon on the top toolbar and selecting the shape from the Basic Shapes group. to add a Text Art object, click the Text Art icon on the Insert tab of the top toolbar, then click on the desired style template – the Text Art object will be added in the center of the slide. Select the default text within the text box with the mouse and replace it with your own text. Add a text passage within an autoshape. Select a shape and start typing your text. Click outside of the text object to apply the changes and return to the slide. The text within the text object is a part of the latter (when you move or rotate the text object, the text moves or rotates with it). As an inserted text object represents a rectangular frame (it has invisible text box borders by default) with text in it and this frame is a common autoshape, you can change both the shape and text properties. To delete the added text object, click on the text box border and press the Delete key. The text within the text box will also be deleted. Format a text box Select the text box by clicking on its border to change its properties. When the text box is selected, its borders are displayed as solid (not dashed) lines. to resize, move, rotate the text box, use the special handles on the edges of the shape. to edit the text box fill, line, replace the rectangular box with a different shape, or access the shape advanced settings, click the Shape settings icon on the right sidebar and use the corresponding options. to align a text box on the slide, rotate or flip it, arrange text boxes as related to other objects, right-click on the text box border and use the contextual menu options. to create columns of text within the text box, click the corresponding icon on the text formatting toolbar and choose the preferable option, or right-click on the text box border, click the Shape Advanced Settings option and switch to the Columns tab in the Shape - Advanced Settings window. Format the text within the text box Click the text within the text box to change its properties. When the text is selected, the text box borders are displayed as dashed lines. Note: it's also possible to change text formatting when the text box (not the text itself) is selected. In such a case, any changes will be applied to the whole text within the text box. Some font formatting options (font type, size, color and decoration styles) can be applied to the previously selected part of the text separately. Align your text within the text box The text is aligned horizontally in four ways: left, right, center or justified. To do that: place the cursor to the position where you want the alignment to be applied (this can be a new line or already entered text), drop-down the Horizontal align list on the Home tab of the top toolbar, select the alignment type you would like to apply: the Align text left option allows you to line up your text on the left side of the text box (the right side remains unaligned). the Align text center option allows you to line up your text in the center of the text box (the right and the left sides remains unaligned). the Align text right option allows you to line up your text on the right side of the text box (the left side remains unaligned). the Justify option allows you to line up your text both on the left and on the right sides of the text box (additional spacing is added where necessary to keep the alignment). Note: these parameters can also be found in the Paragraph - Advanced Settings window. The text is aligned vertically in three ways: top, middle or bottom. To do that: place the cursor to the position where you want the alignment to be applied (this can be a new line or already entered text), drop-down the Vertical align list on the Home tab of the top toolbar, select the alignment type you would like to apply: the Align text to the top option allows you to line up your text to the top of the text box. the Align text to the middle option allows you to line up your text in the center of the text box. the Align text to the bottom option allows you to line up your text to the bottom of the text box. Change the text direction To Rotate the text within the text box, right-click the text, select the Text Direction option and then choose one of the available options: Horizontal (selected by default), Rotate Text Down (used to set a vertical direction, from top to bottom) or Rotate Text Up (used to set a vertical direction, from bottom to top). Adjust font type, size, color and apply decoration styles You can select the font type, its size and color as well as apply various font decoration styles using the corresponding icons situated on the Home tab of the top toolbar. Note: in case you want to apply the formatting to the text already present in the presentation, select it with the mouse or using the keyboard and apply the formatting. Font Used to select one of the fonts from the list of the available ones. If the required font is not available in the list, you can download and install it on your operating system, and the font will be available for use in the desktop version. Font size Used to choose from the preset font size values in the dropdown list (the default values are: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 and 96). It's also possible to manually enter a custom value up to 300 pt in the font size field. Press Enter to confirm. Increment font size Used to change the font size making it one point bigger each time the button is pressed. Decrement font size Used to change the font size making it one point smaller each time the button is pressed. Change case Used to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text. Highlight color Used to mark separate sentences, phrases, words, or even characters by adding a color band that imitates the highlighter pen effect throughout the text. You can select the required part of the text and click the downward arrow next to the icon to select a color in the palette (this color set does not depend on the selected Color scheme and includes 16 colors) - the color will be applied to the selected text. Alternatively, you can first choose a highlight color and then start selecting the text with the mouse - the mouse pointer will look like this and you'll be able to highlight several different parts of your text sequentially. To stop highlighting, just click the icon once again. To delete the highlight color, choose the No Fill option. Font color Used to change the color of the letters/characters in the text. Click the downward arrow next to the icon to select the color. Bold Used to make the font bold giving it a heavier appearance. Italic Used to make the font slightly slanted to the right. Underline Used to make the text underlined with a line going under the letters. Strikeout Used to make the text struck out with a line going through the letters. Superscript Used to make the text smaller placing it in the upper part of the text line, e.g. as in fractions. Subscript Used to make the text smaller placing it in the lower part of the text line, e.g. as in chemical formulas. Set line spacing and change paragraph indents You can set the line height for the text lines within the paragraph as well as the margins between the current and the previous or the following paragraph. To do that, put the cursor within the required paragraph or select several paragraphs with the mouse, use the corresponding fields of the Text settings tab on the right sidebar to achieve the desired results: Line Spacing - set the line height for the text lines within the paragraph. You can select among three options: at least (sets the minimum line spacing that is needed to fit the largest font or graphic on the line), multiple (sets line spacing that can be expressed in numbers greater than 1), exactly (sets fixed line spacing). You can specify the necessary value in the field on the right. Paragraph Spacing - set the amount of space between paragraphs. Before - set the amount of space before the paragraph. After - set the amount of space after the paragraph. Note: these parameters can also be found in the Paragraph - Advanced Settings window. To quickly change the current paragraph line spacing, you can also use the Line spacing icon on the Home tab of the top toolbar selecting the required value from the list: 1.0, 1.15, 1.5, 2.0, 2.5, or 3.0 lines. To change the paragraph offset from the left side of the text box, put the cursor within the required paragraph, or select several paragraphs with the mouse and use the respective icons on the Home tab of the top toolbar: Decrease indent and Increase indent . Adjust paragraph advanced settings To open the Paragraph - Advanced Settings window, right-click the text and choose the Text Advanced Settings option from the menu. It's also possible to put the cursor within the required paragraph - the Text settings tab will be activated on the right sidebar. Press the Show advanced settings link. The paragraph properties window will be opened: The Indents & Spacing tab allows you to: change the alignment type for the paragraph text, change the paragraph indents as related to internal margins of the text box, Left - set the paragraph offset from the left internal margin of the text box specifying the necessary numeric value, Right - set the paragraph offset from the right internal margin of the text box specifying the necessary numeric value, Special - set an indent for the first line of the paragraph: select the corresponding menu item ((none), First line, Hanging) and change the default numeric value specified for First Line or Hanging, change the paragraph line spacing. You can also use the horizontal ruler to set indents. Select the necessary paragraph(s) and drag the indent markers along the ruler. First Line Indent marker is used to set the offset from the left internal margin of the text box for the first line of the paragraph. Hanging Indent marker is used to set the offset from the left internal margin of the text box for the second and all the subsequent lines of the paragraph. Left Indent marker is used to set the entire paragraph offset from the left internal margin of the text box. Right Indent marker is used to set the paragraph offset from the right internal margin of the text box. Note: if you don't see the rulers, switch to the Home tab of the top toolbar, click the View settings icon at the upper right corner and uncheck the Hide Rulers option to display them. The Font tab contains the following parameters: Strikethrough is used to make the text struck out with a line going through the letters. Double strikethrough is used to make the text struck out with a double line going through the letters. Superscript is used to make the text smaller placing it in the upper part of the text line, e.g. as in fractions. Subscript is used to make the text smaller placing it in the lower part of the text line, e.g. as in chemical formulas. Small caps is used to make all letters lower case. All caps is used to make all letters upper case. Character Spacing is used to set the space between the characters. Increase the default value to apply the Expanded spacing, or decrease the default value to apply the Condensed spacing. Use the arrow buttons or enter the necessary value in the box. All the changes will be displayed in the preview field below. The Tab tab allows you to change tab stops i.e. the position the cursor advances to when you press the Tab key. Default Tab is set at 2.54 cm. You can decrease or increase this value using the arrow buttons or enter the necessary one in the box. Tab Position - is used to set custom tab stops. Enter the necessary value in this box, adjust it more precisely using the arrow buttons and press the Specify button. Your custom tab position will be added to the list in the field below. Alignment - is used to set the necessary alignment type for each of the tab positions in the list above. Select the necessary tab position in the list, choose the Left, Center or Right option from the Alignment drop-down list and press the Specify button. Left - lines up your text on the left side at the tab stop position; the text moves to the right from the tab stop as you type. Such a tab stop will be indicated on the horizontal ruler by the marker. Center - centres the text at the tab stop position. Such a tab stop will be indicated on the horizontal ruler by the marker. Right - lines up your text on the right side at the tab stop position; the text moves to the left from the tab stop as you type. Such a tab stop will be indicated on the horizontal ruler by the marker. To delete tab stops from the list, select a tab stop and press the Remove or Remove All button. To set tab stops, you can also use the horizontal ruler: Click the tab selector button in the upper left corner of the working area to choose the necessary tab stop type: Left , Center , Right . Click on the bottom edge of the ruler where you want to place the tab stop. Drag it along the ruler to change its position. To remove the added tab stop, drag it out of the ruler. Note: if you don't see the rulers, switch to the Home tab of the top toolbar, click the View settings icon at the upper right corner and uncheck the Hide Rulers option to display them. Edit a Text Art style Select a text object and click the Text Art settings icon on the right sidebar. Change the applied text style selecting a new Template from the gallery. You can also change the basic style additionally by selecting a different font type, size etc. Change the font fill and line. The available options are the same as the ones for autoshapes. Apply a text effect by selecting the necessary text transformation type from the Transform gallery. You can adjust the degree of the text distortion by dragging the pink diamond-shaped handle." + "body": "Insert your text In the Presentation Editor, you can add a new text in three different ways: Add a text passage within the corresponding text placeholder on the slide layout. To do that, just put the cursor within the placeholder and type in your text or paste it using the Ctrl+V key combination instead of the default text. Add a text passage anywhere on a slide. You can insert a text box (a rectangular frame that allows you to enter some text within it) or a Text Art object (a text box with a predefined font style and color that allows you to apply some text effects). Depending on the necessary text object type, you can do the following: to add a text box, click the Text Box icon on the Home or Insert tab of the top toolbar, then click where you want to insert the text box, hold the mouse button and drag the text box border to specify its size. When you release the mouse button, the insertion point will appear in the added text box, allowing you to enter your text. It's also possible to insert a text box by clicking the Shape icon on the top toolbar and selecting the shape from the Basic Shapes group. to add a Text Art object, click the Text Art icon on the Insert tab of the top toolbar, then click on the desired style template – the Text Art object will be added in the center of the slide. Select the default text within the text box with the mouse and replace it with your own text. Add a text passage within an autoshape. Select a shape and start typing your text. Click outside of the text object to apply the changes and return to the slide. The text within the text object is a part of the latter (when you move or rotate the text object, the text moves or rotates with it). As an inserted text object represents a rectangular frame (it has invisible text box borders by default) with text in it and this frame is a common autoshape, you can change both the shape and text properties. To delete the added text object, click on the text box border and press the Delete key. The text within the text box will also be deleted. Format a text box Select the text box by clicking on its border to change its properties. When the text box is selected, its borders are displayed as solid (not dashed) lines. to resize, move, rotate the text box, use the special handles on the edges of the shape. to edit the text box fill, line, replace the rectangular box with a different shape, or access the shape advanced settings, click the Shape settings icon on the right sidebar and use the corresponding options. to align a text box on the slide, rotate or flip it, arrange text boxes as related to other objects, right-click on the text box border and use the contextual menu options. to create columns of text within the text box, click the corresponding icon on the text formatting toolbar and choose the preferable option, or right-click on the text box border, click the Shape Advanced Settings option and switch to the Columns tab in the Shape - Advanced Settings window. Format the text within the text box Click the text within the text box to change its properties. When the text is selected, the text box borders are displayed as dashed lines. Note: it's also possible to change text formatting when the text box (not the text itself) is selected. In such a case, any changes will be applied to the whole text within the text box. Some font formatting options (font type, size, color and decoration styles) can be applied to the previously selected part of the text separately. Align your text within the text box The text is aligned horizontally in four ways: left, right, center or justified. To do that: place the cursor to the position where you want the alignment to be applied (this can be a new line or already entered text), drop-down the Horizontal align list on the Home tab of the top toolbar, select the alignment type you would like to apply: the Align text left option allows you to line up your text on the left side of the text box (the right side remains unaligned). the Align text center option allows you to line up your text in the center of the text box (the right and the left sides remains unaligned). the Align text right option allows you to line up your text on the right side of the text box (the left side remains unaligned). the Justify option allows you to line up your text both on the left and on the right sides of the text box (additional spacing is added where necessary to keep the alignment). Note: these parameters can also be found in the Paragraph - Advanced Settings window. The text is aligned vertically in three ways: top, middle or bottom. To do that: place the cursor to the position where you want the alignment to be applied (this can be a new line or already entered text), drop-down the Vertical align list on the Home tab of the top toolbar, select the alignment type you would like to apply: the Align text to the top option allows you to line up your text to the top of the text box. the Align text to the middle option allows you to line up your text in the center of the text box. the Align text to the bottom option allows you to line up your text to the bottom of the text box. Change the text direction To Rotate the text within the text box, right-click the text, select the Text Direction option and then choose one of the available options: Horizontal (selected by default), Rotate Text Down (used to set a vertical direction, from top to bottom) or Rotate Text Up (used to set a vertical direction, from bottom to top). Adjust font type, size, color and apply decoration styles You can select the font type, its size and color as well as apply various font decoration styles using the corresponding icons situated on the Home tab of the top toolbar. Note: in case you want to apply the formatting to the text already present in the presentation, select it with the mouse or using the keyboard and apply the formatting. You can also place the mouse cursor within the necessary word to apply the formatting to this word only. Font Used to select one of the fonts from the list of the available ones. If the required font is not available in the list, you can download and install it on your operating system, and the font will be available for use in the desktop version. Font size Used to choose from the preset font size values in the dropdown list (the default values are: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 and 96). It's also possible to manually enter a custom value up to 300 pt in the font size field. Press Enter to confirm. Increment font size Used to change the font size making it one point bigger each time the button is pressed. Decrement font size Used to change the font size making it one point smaller each time the button is pressed. Change case Used to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text or the word where the mouse cursor is positioned. Highlight color Used to mark separate sentences, phrases, words, or even characters by adding a color band that imitates the highlighter pen effect throughout the text. You can select the required part of the text and click the downward arrow next to the icon to select a color in the palette (this color set does not depend on the selected Color scheme and includes 16 colors) - the color will be applied to the selected text. Alternatively, you can first choose a highlight color and then start selecting the text with the mouse - the mouse pointer will look like this and you'll be able to highlight several different parts of your text sequentially. To stop highlighting, just click the icon once again. To delete the highlight color, choose the No Fill option. Font color Used to change the color of the letters/characters in the text. Click the downward arrow next to the icon to select the color. Bold Used to make the font bold giving it a heavier appearance. Italic Used to make the font slightly slanted to the right. Underline Used to make the text underlined with a line going under the letters. Strikeout Used to make the text struck out with a line going through the letters. Superscript Used to make the text smaller placing it in the upper part of the text line, e.g. as in fractions. Subscript Used to make the text smaller placing it in the lower part of the text line, e.g. as in chemical formulas. Set line spacing and change paragraph indents You can set the line height for the text lines within the paragraph as well as the margins between the current and the previous or the following paragraph. To do that, put the cursor within the required paragraph or select several paragraphs with the mouse, use the corresponding fields of the Text settings tab on the right sidebar to achieve the desired results: Line Spacing - set the line height for the text lines within the paragraph. You can select among three options: at least (sets the minimum line spacing that is needed to fit the largest font or graphic on the line), multiple (sets line spacing that can be expressed in numbers greater than 1), exactly (sets fixed line spacing). You can specify the necessary value in the field on the right. Paragraph Spacing - set the amount of space between paragraphs. Before - set the amount of space before the paragraph. After - set the amount of space after the paragraph. Note: these parameters can also be found in the Paragraph - Advanced Settings window. To quickly change the current paragraph line spacing, you can also use the Line spacing icon on the Home tab of the top toolbar selecting the required value from the list: 1.0, 1.15, 1.5, 2.0, 2.5, or 3.0 lines. To change the paragraph offset from the left side of the text box, put the cursor within the required paragraph, or select several paragraphs with the mouse and use the respective icons on the Home tab of the top toolbar: Decrease indent and Increase indent . Adjust paragraph advanced settings To open the Paragraph - Advanced Settings window, right-click the text and choose the Text Advanced Settings option from the menu. It's also possible to put the cursor within the required paragraph - the Text settings tab will be activated on the right sidebar. Press the Show advanced settings link. The paragraph properties window will be opened: The Indents & Spacing tab allows you to: change the alignment type for the paragraph text, change the paragraph indents as related to internal margins of the text box, Left - set the paragraph offset from the left internal margin of the text box specifying the necessary numeric value, Right - set the paragraph offset from the right internal margin of the text box specifying the necessary numeric value, Special - set an indent for the first line of the paragraph: select the corresponding menu item ((none), First line, Hanging) and change the default numeric value specified for First Line or Hanging, change the paragraph line spacing. You can also use the horizontal ruler to set indents. Select the necessary paragraph(s) and drag the indent markers along the ruler. First Line Indent marker is used to set the offset from the left internal margin of the text box for the first line of the paragraph. Hanging Indent marker is used to set the offset from the left internal margin of the text box for the second and all the subsequent lines of the paragraph. Left Indent marker is used to set the entire paragraph offset from the left internal margin of the text box. Right Indent marker is used to set the paragraph offset from the right internal margin of the text box. Note: if you don't see the rulers, switch to the Home tab of the top toolbar, click the View settings icon at the upper right corner and uncheck the Hide Rulers option to display them. The Font tab contains the following parameters: Strikethrough is used to make the text struck out with a line going through the letters. Double strikethrough is used to make the text struck out with a double line going through the letters. Superscript is used to make the text smaller placing it in the upper part of the text line, e.g. as in fractions. Subscript is used to make the text smaller placing it in the lower part of the text line, e.g. as in chemical formulas. Small caps is used to make all letters lower case. All caps is used to make all letters upper case. Character Spacing is used to set the space between the characters. Increase the default value to apply the Expanded spacing, or decrease the default value to apply the Condensed spacing. Use the arrow buttons or enter the necessary value in the box. All the changes will be displayed in the preview field below. The Tab tab allows you to change tab stops i.e. the position the cursor advances to when you press the Tab key. Default Tab is set at 2.54 cm. You can decrease or increase this value using the arrow buttons or enter the necessary one in the box. Tab Position - is used to set custom tab stops. Enter the necessary value in this box, adjust it more precisely using the arrow buttons and press the Specify button. Your custom tab position will be added to the list in the field below. Alignment - is used to set the necessary alignment type for each of the tab positions in the list above. Select the necessary tab position in the list, choose the Left, Center or Right option from the Alignment drop-down list and press the Specify button. Left - lines up your text on the left side at the tab stop position; the text moves to the right from the tab stop as you type. Such a tab stop will be indicated on the horizontal ruler by the marker. Center - centres the text at the tab stop position. Such a tab stop will be indicated on the horizontal ruler by the marker. Right - lines up your text on the right side at the tab stop position; the text moves to the left from the tab stop as you type. Such a tab stop will be indicated on the horizontal ruler by the marker. To delete tab stops from the list, select a tab stop and press the Remove or Remove All button. To set tab stops, you can also use the horizontal ruler: Click the tab selector button in the upper left corner of the working area to choose the necessary tab stop type: Left , Center , Right . Click on the bottom edge of the ruler where you want to place the tab stop. Drag it along the ruler to change its position. To remove the added tab stop, drag it out of the ruler. Note: if you don't see the rulers, switch to the Home tab of the top toolbar, click the View settings icon at the upper right corner and uncheck the Hide Rulers option to display them. Edit a Text Art style Select a text object and click the Text Art settings icon on the right sidebar. Change the applied text style selecting a new Template from the gallery. You can also change the basic style additionally by selecting a different font type, size etc. Change the font fill and line. The available options are the same as the ones for autoshapes. Apply a text effect by selecting the necessary text transformation type from the Transform gallery. You can adjust the degree of the text distortion by dragging the pink diamond-shaped handle." }, { "id": "UsageInstructions/ManageSlides.htm", diff --git a/apps/presentationeditor/main/resources/help/fr/HelpfulHints/About.htm b/apps/presentationeditor/main/resources/help/fr/HelpfulHints/About.htm index 2ba8d0e06..7227901d3 100644 --- a/apps/presentationeditor/main/resources/help/fr/HelpfulHints/About.htm +++ b/apps/presentationeditor/main/resources/help/fr/HelpfulHints/About.htm @@ -16,7 +16,7 @@

    À propos de Presentation Editor

    Presentation Editor est une application en ligne qui vous permet de parcourir et de modifier des présentations dans votre navigateur.

    En utilisant Presentation Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les présentations modifiées en gardant la mise en forme ou les télécharger sur votre disque dur au format PPTX, PDF, ODP, POTX, PDF/A, OTP.

    -

    Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône L'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la versionde bureau, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme.

    +

    Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône L'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau pour Windows, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme. Dans la version de bureau pour Mac OS, accédez au menu ONLYOFFICE en haut de l'écran et sélectionnez l'élément de menu À propos d'ONLYOFFICE.

    \ No newline at end of file diff --git a/apps/presentationeditor/main/resources/help/fr/UsageInstructions/InsertText.htm b/apps/presentationeditor/main/resources/help/fr/UsageInstructions/InsertText.htm index dcd669ccf..e39931f27 100644 --- a/apps/presentationeditor/main/resources/help/fr/UsageInstructions/InsertText.htm +++ b/apps/presentationeditor/main/resources/help/fr/UsageInstructions/InsertText.htm @@ -79,7 +79,7 @@

    Ajuster le type de police, la taille, la couleur et appliquer les styles de décoration

    Vous pouvez sélectionner le type, la taille et la couleur de police et appliquer l'un des styles de décoration en utilisant les icônes correspondantes situées dans l'onglet Accueil de la barre d'outils supérieure.

    -

    Remarque: si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavieret appliquez la mise en forme.

    +

    Remarque: si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavieret appliquez la mise en forme. Vous pouvez aussi positionner le curseur de la souris sur le mot à mettre en forme.

    Font
    Change case Change caseUsed to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text.Used to change the font case. Sentence case. - the case matches that of a common sentence. lowercase - all letters are small. UPPERCASE - all letters are capital. Capitalize Each Word - each word starts with a capital letter. tOGGLE cASE - reverse the case of the selected text or the word where the mouse cursor is positioned.
    Highlight color
    @@ -104,7 +104,7 @@ - + diff --git a/apps/presentationeditor/main/resources/help/fr/search/indexes.js b/apps/presentationeditor/main/resources/help/fr/search/indexes.js index 062541023..158e014c0 100644 --- a/apps/presentationeditor/main/resources/help/fr/search/indexes.js +++ b/apps/presentationeditor/main/resources/help/fr/search/indexes.js @@ -3,7 +3,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "À propos de Presentation Editor", - "body": "Presentation Editor est une application en ligne qui vous permet de parcourir et de modifier des présentations dans votre navigateur . En utilisant Presentation Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les présentations modifiées en gardant la mise en forme ou les télécharger sur votre disque dur au format PPTX, PDF, ODP, POTX, PDF/A, OTP. Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la versionde bureau, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme." + "body": "Presentation Editor est une application en ligne qui vous permet de parcourir et de modifier des présentations dans votre navigateur . En utilisant Presentation Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les présentations modifiées en gardant la mise en forme ou les télécharger sur votre disque dur au format PPTX, PDF, ODP, POTX, PDF/A, OTP. Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau pour Windows, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme. Dans la version de bureau pour Mac OS, accédez au menu ONLYOFFICE en haut de l'écran et sélectionnez l'élément de menu À propos d'ONLYOFFICE." }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -158,7 +158,7 @@ var indexes = { "id": "UsageInstructions/InsertText.htm", "title": "Insérer et mettre en forme votre texte", - "body": "Insérer votre texte Dans Presentation Editor, vous pouvez ajouter un nouveau texte de trois manières différentes: Ajoutez un passage de texte dans l'espace réservé de texte correspondant inclus dans la présentation de diapositive. Pour ce faire, placez simplement le curseur dans l'espace réservé et tapez votre texte ou collez-le en utilisant la combinaison de touches Ctrl+V à la place du texte par défaut correspondant. Ajoutez un passage de texte n'importe où sur une diapositive. Vous pouvez insérer une zone de texte (un cadre rectangulaire qui permet de saisir du texte) ou un objet Text Art (une zone de texte avec un style de police et une couleur prédéfinis permettant d'appliquer certains effets de texte). Selon le type d'objet textuel voulu, vous pouvez effectuer les opérations suivantes: Pour ajouter une zone de texte, cliquez sur l'icône Zone de texte dans l'onglet Accueil ou Insertion de la barre d'outils supérieure, puis cliquez sur l'emplacement où vous souhaitez insérer la zone de texte, maintenez le bouton de la souris enfoncé et faites glisser la bordure pour définir sa taille. Lorsque vous relâchez le bouton de la souris, le point d'insertion apparaîtra dans la zone de texte ajoutée, vous permettant d'entrer votre texte. Il est également possible d'insérer une zone de texte en cliquant sur l'icône Forme dans la barre d'outils supérieure et en sélectionnant la forme dans le groupe Formes de base. Pour ajouter un objet Text Art, cliquez sur l'icône Text Art sous l'onglet Insertion dans la barre d'outils supérieure, puis cliquez sur le modèle de style souhaité - l'objet Text Art sera ajouté à la position actuelle du curseur. Sélectionnez le texte par défaut dans la zone de texte avec la souris et remplacez-le par votre propre texte. Ajouter un passage de texte dans une forme automatique. Sélectionnez une forme et commencez à taper votre texte. Cliquez en dehors de l'objet texte pour appliquer les modifications et revenir à la diapositive. Le texte dans l'objet textuel fait partie de celui ci (ainsi si vous déplacez ou faites pivoter l'objet textuel, le texte change de position lui aussi). Comme un objet texte inséré représente un cadre rectangulaire (avec des bordures de zone de texte invisibles par défaut) avec du texte à l'intérieur et que ce cadre est une forme automatique commune, vous pouvez modifier aussi bien les propriétés de forme que de texte. Pour supprimer l'objet textuel ajouté, cliquez sur la bordure de la zone de texte et appuyez sur la touche Suppr du clavier. Le texte dans la zone de texte sera également supprimé. Mettre en forme une zone de texte Sélectionnez la zone de texte en cliquant sur sa bordure pour pouvoir modifier ses propriétés. Lorsque la zone de texte est sélectionnée, ses bordures sont affichées en tant que lignes pleines (non pointillées). Pour redimensionner, déplacer, faire pivoter la zone de texte, utilisez les poignées spéciales sur les bords de la forme. Pour modifier le remplissage, le contourou remplacer la boîte rectangulaire par une forme différente, cliquez sur l'icône Paramèteres avancés de forme, cliquez sur l'icône Paramètres de forme dans la barre latérale de droite et utilisez les options correspondantes. pour aligner une zone de texte sur la diapositive, la faire pivoter ou la retourner, organiser des zones de texte par rapport à d'autres objets, cliquez avec le bouton droit sur la bordure de la zone de texte et utilisez les options de menu contextuel. pour créer des colonnes de texte dans la zone de texte, cliquez sur l'icône appropriée de la barre de mise en forme du texte et choisissez l'option appropriée, ou cliquez avec le bouton droit sur la bordure de la zone de texte, cliquez sur Paramètres avancés de forme et passez à l'onglet Colonnes de la fenêtre Forme - Paramètres avancés. Mettre en forme le texte dans la zone de texte Cliquez sur le texte dans la zone de texte pour pouvoir modifier ses propriétés. Lorsque le texte est sélectionné, les bordures de la zone de texte sont affichées en lignes pointillées. Remarque: il est également possible de modifier le formatage du texte lorsque la zone de texte (et non le texte lui-même) est sélectionnée. Dans ce cas, toutes les modifications seront appliquées à tout le texte dans la zone de texte. Certaines options de mise en forme de police (type de police, taille, couleur et styles de décoration) peuvent être appliquées séparément à une partie du texte précédemment sélectionnée. Aligner le texte dans la zone de texte Le texte peut être aligné horizontalement de quatre façons : aligné à gauche, centré, aligné à droite et justifié. Pour le faire: placez le curseur à la position où vous voulez appliquer l'alignement (une nouvelle ligne ou le texte déjà saisi), faites dérouler la liste Alignement horizontal dans l'onglet Accueil de la barre d'outils supérieure, sélectionnez le type d'alignement que vous allez appliquer: l'option Aligner le texte à gauche vous permet d'aligner votre texte sur le côté gauche de la zone de texte (le côté droit reste non aligné). l'option Aligner le texte au centre vous permet d'aligner votre texte au centre de la zone de texte (les côtés droit et gauche ne sont pas alignés). l'option Aligner le texte à droite vous permet d'aligner votre texte sur le côté droit de la zone de texte (le côté gauche reste non aligné). l'option Justifier vous permet d'aligner votre texte par les côtés gauche et droit de la zone de texte (l'espacement supplémentaire est ajouté si nécessaire pour garder l'alignement). Remarque: on peut configurer les mêmes paramètres dans la fenêtre Paragraphe - Paramètres avancés . Le texte peut être aligné verticalement de trois façons: haut, milieu ou bas. Pour le faire: placez le curseur à la position où vous voulez appliquer l'alignement (une nouvelle ligne ou le texte déjà saisi), faites dérouler la liste Alignement vertical dans l'onglet Accueil de la barre d'outils supérieure, sélectionnez le type d'alignement que vous allez appliquer: l'option Aligner le texte en haut vous permet d'aligner votre texte sur le haut de la zone de texte. l'option Aligner le texte au milieu vous permet d'aligner votre texte au centre de la zone de texte. l'option Aligner le texte en bas vous permet d'aligner votre texte au bas de la zone de texte. Changer la direction du texte Pour Faire pivoter le texte dans la zone de texte, cliquez avec le bouton droit sur le texte, sélectionnez l'option Direction du texte, puis choisissez l'une des options disponibles: Horizontal (sélectionné par défaut), Rotation du texte vers le bas (définit une direction verticale, de haut en bas) ou Rotation du texte vers le haut (définit une direction verticale, de bas en haut). Ajuster le type de police, la taille, la couleur et appliquer les styles de décoration Vous pouvez sélectionner le type, la taille et la couleur de police et appliquer l'un des styles de décoration en utilisant les icônes correspondantes situées dans l'onglet Accueil de la barre d'outils supérieure. Remarque: si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavieret appliquez la mise en forme. Police Sert à sélectionner l'une des polices disponibles dans la liste. Si une police requise n'est pas disponible dans la liste, vous pouvez la télécharger et l'installer sur votre système d'exploitation, après quoi la police sera disponible pour utilisation dans la version de bureau. Taille de la police Sert à sélectionner la taille de la police parmi les valeurs disponibles dans la liste déroulante, les valeurs par défaut sont: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 et 96). Il est également possible d'entrer manuellement une valeur personnalisée dans le champ de taille de police jusqu'à 300 pt. Appuyer sur la touche Entrée pour confirmer Augmenter la taille de la police Sert à modifier la taille de la police en la rendant plus grande à un point chaque fois que vous appuyez sur le bouton. Diminuer la taille de la police Sert à modifier la taille de la police en la rendant plus petite à un point chaque fois que vous appuyez sur le bouton. Modifier la casse Sert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres MAJUSCULES - mettre en majuscule toutes les lettres Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot Inverser la casse - basculer entre d'affichages de la casse du texte. Couleur de surlignage Est utilisé pour marquer des phrases, des fragments, des mots ou même des caractères séparés en ajoutant une bande de couleur qui imite l'effet du surligneur sur le texte. Vous pouvez sélectionner la partie voulue du texte, puis cliquer sur la flèche vers le bas à côté de l'icône pour sélectionner une couleur dans la palette (cet ensemble de couleurs ne dépend pas du Jeux de couleurs sélectionné et comprend 16 couleurs). La couleur sera appliquée à la sélection. Alternativement, vous pouvez d'abord choisir une couleur de surbrillance et ensuite commencer à sélectionner le texte avec la souris - le pointeur de la souris ressemblera à ceci et vous serez en mesure de surligner plusieurs parties différentes de votre texte de manière séquentielle. Pour enlever la mise en surbrillance, cliquez à nouveau sur l'icône. Pour effacer la couleur de surbrillance, choisissez l'option Pas de remplissage. Couleur de police Sert à changer la couleur des lettres /caractères dans le texte. Cliquez sur la flèche vers le bas à côté de l'icône pour sélectionner la couleur. Gras Sert à mettre la police en gras pour lui donner plus de poids. Italique Sert à mettre la police en italique pour lui donner une certaine inclinaison à droite. Souligné Sert à souligner le texte avec la ligne qui passe sous les lettres. Barré Sert à barrer le texte par la ligne passant par les lettres. Exposant Sert à rendre le texte plus petit et le déplacer vers la partie supérieure de la ligne du texte, par exemple comme dans les fractions. Indice Sert à rendre le texte plus petit et le déplacer vers la partie inférieure de la ligne du texte, par exemple comme dans les formules chimiques. Définir l'interligne et modifier les retraits de paragraphe Vous pouvez définir l'interligne pour les lignes de texte dans le paragraphe ainsi que les marges entre le paragraphe courant et le précédent ou le suivant. Pour ce faire, placez le curseur dans le paragraphe de votre choix ou sélectionnez plusieurs paragraphes avec la souris, utilisez les champs correspondants de l'onglet Paramètres de texte dans la barre latérale droite pour obtenir les résultats nécessaires: Interligne - réglez la hauteur de la ligne pour les lignes de texte dans le paragraphe. Vous pouvez choisir parmi trois options: Au moins (sert à régler l'interligne minimale qui est nécessaire pour adapter la plus grande police ou le graphique à la ligne), Multiple (sert à régler l'interligne exprimée en nombre supérieur à 1), Exactement (sert à définir l'interligne fixe). Spécifiez la valeur nécessaire dans le champ situé à droite. Espacement de paragraphe - définissez l'espace entre les paragraphes. Avant - réglez la taille de l'espace avant le paragraphe. Après - réglez la taille de l'espace après le paragraphe. Remarque: on peut configurer les mêmes paramètres dans la fenêtre Paragraphe - Paramètres avancés . Pour modifier rapidement l'interligne du paragraphe actuel, vous pouvez aussi cliquer sur l'icône Interligne sous l'onglet Accueil de la barre d'outils supérieure et sélectionnez la valeur nécessaire dans la liste: 1.0, 1.15, 1.5, 2.0, 2.5, ou 3.0 lignes. Pour modifier le décalage de paragraphe du côté gauche de la zone de texte, placez le curseur dans le paragraphe de votre choix ou sélectionnez plusieurs paragraphes à l'aide de la souris et utilisez les icônes correspondantes dans l'onglet Accueil de la barre d'outils supérieure: Réduire le retrait et Augmenter le retrait . Configurer les paramètres avancés du paragraphe Pour ouvrir la fenêtre Paragraphe - Paramètres avancés, cliquer avec le bouton droit sur le texte et sélectionnez l'option Paramètres avancés du texte dans le menu. Il est également possible de placer le curseur dans le paragraphe de votre choix - l'onglet Paramètres du texte devient actif sur la barre latérale droite. Appuyez sur le lien Afficher les paramètres avancés. La fenêtre paramètres du paragraphe s'ouvre: L'onglet Retrait et emplacement permet de: modifier le type d'alignement du paragraphe, modifier les retraits du paragraphe par rapport aux marges internes de la zone de texte, A gauche - spécifiez le décalage du paragraphe de la marge interne gauche de la zone de texte et saisissez la valeur numérique appropriée, A droite - spécifiez le décalage du paragraphe de la marge interne droite de la zone de texte et saisissez la valeur numérique appropriée, Spécial - spécifier le retrait de première ligne du paragraphe: sélectionnez l'élément approprié du menu ((aucun), Première ligne, Suspendu) et modifiez la valeur numérique par défaut pour les options Première ligne ou Suspendu, modifiez l'interligne du paragraphe. Vous pouvez également utilisez la règle horizontale pour changer les retraits. Sélectionnez le(s) paragraphe(s) et faites glisser les marqueurs tout au long de la règle Le marqueur Retrait de première ligne sert à définir le décalage de la marge interne gauche de la zone de texte pour la première ligne du paragraphe. Le marqueur Retrait suspendu sert à définir le décalage de la marge interne gauche de la zone de texte pour la deuxième ligne et toutes les lignes suivantes du paragraphe. Le marqueur Retrait de gauche sert à définir le décalage du paragraphe de la marge interne gauche de la zone de texte. Le marqueur Retrait de droite sert à définir le décalage du paragraphe de la marge interne droite de la zone de texte. Remarque: si vous ne voyez pas les règles, passez à l'onglet Accueil de la barre d'outils supérieure, cliquez sur l'icône Paramètres d'affichage dans le coin supérieur droit et décochez l'option Masquer les règles pour les afficher. L'onglet Police comporte les paramètres suivants: Barré sert à barrer le texte par la ligne passant par les lettres. Barré double sert à barrer le texte par la ligne double passant par les lettres. Exposant sert à rendre le texte plus petit et le déplacer vers la partie supérieure de la ligne du texte, par exemple comme dans les fractions. Indice sert à rendre le texte plus petit et le déplacer vers la partie inférieure de la ligne du texte, par exemple comme dans les formules chimiques. Petites majuscules sert à mettre toutes les lettres en petite majuscule. Majuscules sert à mettre toutes les lettres en majuscule. Espacement des caractères sert à définir l'espace entre les caractères. Augmentez la valeur par défaut pour appliquer l'espacement Étendu, ou diminuez la valeur par défaut pour appliquer l'espacement Condensé. Utilisez les touches fléchées ou entrez la valeur voulue dans la case. Tous les changements seront affichés dans le champ de prévisualisation ci-dessous. L'onglet Tabulation vous permet de changer des taquets de tabulation c'est-à-dire l'emplacement où le curseur s'arrête quand vous appuyez sur la touche Tab du clavier. La Tabulation par défaut est 2.54 cm. Vous pouvez augmenter ou diminuer cette valeur en utilisant les boutons à flèche ou en saisissant la valeur nécessaire dans la zone. Position sert à personnaliser les taquets de tabulation. Saisissez la valeur nécessaire dans ce champ, réglez-la en utilisant les boutons à flèche et cliquez sur le bouton Spécifier. La position du taquet de tabulation personnalisée sera ajoutée à la liste dans le champ au-dessous. Alignement sert à définir le type d'alignement pour chaque taquet de tabulation de la liste. Sélectionnez le taquet nécessaire dans la liste, choisissez l'option De gauche, De centre ou De droite dans la liste déroulante Alignement et cliquez sur le bouton Spécifier. De gauche sert à aligner le texte sur le côté gauche du taquet de tabulation; le texte se déplace à droite du taquet de tabulation quand vous saisissez le texte. Le taquet de tabulation sera indiqué sur la règle horizontale par le marqueur de tabulation . Du centre - sert à centrer le texte à l'emplacement du taquet de tabulation. Le taquet de tabulation sera indiqué sur la règle horizontale par le marqueur . De droite - sert à aligner le texte sur le côté droit du taquet de tabulation; le texte se déplace à gauche du taquet de tabulation quand vous saisissez le texte. Le taquet de tabulation sera indiqué sur la règle horizontale par le marqueur . Pour supprimer un taquet de tabulation de la liste sélectionnez-le et cliquez sur le bouton Supprimer ou utilisez le bouton Supprimer tout pour vider la liste. Pour définir les taquets de tabulation vous pouvez utiliser la règle horizontale: Cliquez sur le bouton de sélection de tabulation dans le coin supérieur gauche de la zone de travail pour choisir le type d'arrêt de tabulation requis: À gauche , Au centre , À droite . Cliquez sur le bord inférieur de la règle là où vous voulez positionner le taquet de tabulation. Faites-le glisser tout au long de la règle pour changer son emplacement. Pour supprimer le taquet de tabulation ajouté faites-le glisser en dehors de la règle. Remarque: si vous ne voyez pas les règles, passez à l'onglet Accueil de la barre d'outils supérieure, cliquez sur l'icône Paramètres d'affichage dans le coin supérieur droit et décochez l'option Masquer les règles pour les afficher. Modifier un style Text Art Sélectionnez un objet texte et cliquez sur l'icône des Paramètres de Text Art dans la barre latérale de droite. Modifiez le style de texte appliqué en sélectionnant un nouveau Modèle dans la galerie. Vous pouvez également modifier le style de base en sélectionnant un type de police différent, une autre taille, etc. Changez le remplissage et le contour de police. Les options disponibles sont les mêmes que pour les formes automatiques. Appliquez un effet de texte en sélectionnant le type de transformation de texte voulu dans la galerie Transformation. Vous pouvez ajuster le degré de distorsion du texte en faisant glisser la poignée en forme de diamant rose." + "body": "Insérer votre texte Dans Presentation Editor, vous pouvez ajouter un nouveau texte de trois manières différentes: Ajoutez un passage de texte dans l'espace réservé de texte correspondant inclus dans la présentation de diapositive. Pour ce faire, placez simplement le curseur dans l'espace réservé et tapez votre texte ou collez-le en utilisant la combinaison de touches Ctrl+V à la place du texte par défaut correspondant. Ajoutez un passage de texte n'importe où sur une diapositive. Vous pouvez insérer une zone de texte (un cadre rectangulaire qui permet de saisir du texte) ou un objet Text Art (une zone de texte avec un style de police et une couleur prédéfinis permettant d'appliquer certains effets de texte). Selon le type d'objet textuel voulu, vous pouvez effectuer les opérations suivantes: Pour ajouter une zone de texte, cliquez sur l'icône Zone de texte dans l'onglet Accueil ou Insertion de la barre d'outils supérieure, puis cliquez sur l'emplacement où vous souhaitez insérer la zone de texte, maintenez le bouton de la souris enfoncé et faites glisser la bordure pour définir sa taille. Lorsque vous relâchez le bouton de la souris, le point d'insertion apparaîtra dans la zone de texte ajoutée, vous permettant d'entrer votre texte. Il est également possible d'insérer une zone de texte en cliquant sur l'icône Forme dans la barre d'outils supérieure et en sélectionnant la forme dans le groupe Formes de base. Pour ajouter un objet Text Art, cliquez sur l'icône Text Art sous l'onglet Insertion dans la barre d'outils supérieure, puis cliquez sur le modèle de style souhaité - l'objet Text Art sera ajouté à la position actuelle du curseur. Sélectionnez le texte par défaut dans la zone de texte avec la souris et remplacez-le par votre propre texte. Ajouter un passage de texte dans une forme automatique. Sélectionnez une forme et commencez à taper votre texte. Cliquez en dehors de l'objet texte pour appliquer les modifications et revenir à la diapositive. Le texte dans l'objet textuel fait partie de celui ci (ainsi si vous déplacez ou faites pivoter l'objet textuel, le texte change de position lui aussi). Comme un objet texte inséré représente un cadre rectangulaire (avec des bordures de zone de texte invisibles par défaut) avec du texte à l'intérieur et que ce cadre est une forme automatique commune, vous pouvez modifier aussi bien les propriétés de forme que de texte. Pour supprimer l'objet textuel ajouté, cliquez sur la bordure de la zone de texte et appuyez sur la touche Suppr du clavier. Le texte dans la zone de texte sera également supprimé. Mettre en forme une zone de texte Sélectionnez la zone de texte en cliquant sur sa bordure pour pouvoir modifier ses propriétés. Lorsque la zone de texte est sélectionnée, ses bordures sont affichées en tant que lignes pleines (non pointillées). Pour redimensionner, déplacer, faire pivoter la zone de texte, utilisez les poignées spéciales sur les bords de la forme. Pour modifier le remplissage, le contourou remplacer la boîte rectangulaire par une forme différente, cliquez sur l'icône Paramèteres avancés de forme, cliquez sur l'icône Paramètres de forme dans la barre latérale de droite et utilisez les options correspondantes. pour aligner une zone de texte sur la diapositive, la faire pivoter ou la retourner, organiser des zones de texte par rapport à d'autres objets, cliquez avec le bouton droit sur la bordure de la zone de texte et utilisez les options de menu contextuel. pour créer des colonnes de texte dans la zone de texte, cliquez sur l'icône appropriée de la barre de mise en forme du texte et choisissez l'option appropriée, ou cliquez avec le bouton droit sur la bordure de la zone de texte, cliquez sur Paramètres avancés de forme et passez à l'onglet Colonnes de la fenêtre Forme - Paramètres avancés. Mettre en forme le texte dans la zone de texte Cliquez sur le texte dans la zone de texte pour pouvoir modifier ses propriétés. Lorsque le texte est sélectionné, les bordures de la zone de texte sont affichées en lignes pointillées. Remarque: il est également possible de modifier le formatage du texte lorsque la zone de texte (et non le texte lui-même) est sélectionnée. Dans ce cas, toutes les modifications seront appliquées à tout le texte dans la zone de texte. Certaines options de mise en forme de police (type de police, taille, couleur et styles de décoration) peuvent être appliquées séparément à une partie du texte précédemment sélectionnée. Aligner le texte dans la zone de texte Le texte peut être aligné horizontalement de quatre façons : aligné à gauche, centré, aligné à droite et justifié. Pour le faire: placez le curseur à la position où vous voulez appliquer l'alignement (une nouvelle ligne ou le texte déjà saisi), faites dérouler la liste Alignement horizontal dans l'onglet Accueil de la barre d'outils supérieure, sélectionnez le type d'alignement que vous allez appliquer: l'option Aligner le texte à gauche vous permet d'aligner votre texte sur le côté gauche de la zone de texte (le côté droit reste non aligné). l'option Aligner le texte au centre vous permet d'aligner votre texte au centre de la zone de texte (les côtés droit et gauche ne sont pas alignés). l'option Aligner le texte à droite vous permet d'aligner votre texte sur le côté droit de la zone de texte (le côté gauche reste non aligné). l'option Justifier vous permet d'aligner votre texte par les côtés gauche et droit de la zone de texte (l'espacement supplémentaire est ajouté si nécessaire pour garder l'alignement). Remarque: on peut configurer les mêmes paramètres dans la fenêtre Paragraphe - Paramètres avancés . Le texte peut être aligné verticalement de trois façons: haut, milieu ou bas. Pour le faire: placez le curseur à la position où vous voulez appliquer l'alignement (une nouvelle ligne ou le texte déjà saisi), faites dérouler la liste Alignement vertical dans l'onglet Accueil de la barre d'outils supérieure, sélectionnez le type d'alignement que vous allez appliquer: l'option Aligner le texte en haut vous permet d'aligner votre texte sur le haut de la zone de texte. l'option Aligner le texte au milieu vous permet d'aligner votre texte au centre de la zone de texte. l'option Aligner le texte en bas vous permet d'aligner votre texte au bas de la zone de texte. Changer la direction du texte Pour Faire pivoter le texte dans la zone de texte, cliquez avec le bouton droit sur le texte, sélectionnez l'option Direction du texte, puis choisissez l'une des options disponibles: Horizontal (sélectionné par défaut), Rotation du texte vers le bas (définit une direction verticale, de haut en bas) ou Rotation du texte vers le haut (définit une direction verticale, de bas en haut). Ajuster le type de police, la taille, la couleur et appliquer les styles de décoration Vous pouvez sélectionner le type, la taille et la couleur de police et appliquer l'un des styles de décoration en utilisant les icônes correspondantes situées dans l'onglet Accueil de la barre d'outils supérieure. Remarque: si vous voulez appliquer la mise en forme au texte déjà saisi, sélectionnez-le avec la souris ou en utilisant le clavieret appliquez la mise en forme. Vous pouvez aussi positionner le curseur de la souris sur le mot à mettre en forme. Police Sert à sélectionner l'une des polices disponibles dans la liste. Si une police requise n'est pas disponible dans la liste, vous pouvez la télécharger et l'installer sur votre système d'exploitation, après quoi la police sera disponible pour utilisation dans la version de bureau. Taille de la police Sert à sélectionner la taille de la police parmi les valeurs disponibles dans la liste déroulante, les valeurs par défaut sont: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 et 96). Il est également possible d'entrer manuellement une valeur personnalisée dans le champ de taille de police jusqu'à 300 pt. Appuyer sur la touche Entrée pour confirmer Augmenter la taille de la police Sert à modifier la taille de la police en la rendant plus grande à un point chaque fois que vous appuyez sur le bouton. Diminuer la taille de la police Sert à modifier la taille de la police en la rendant plus petite à un point chaque fois que vous appuyez sur le bouton. Modifier la casse Sert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres. MAJUSCULES - mettre en majuscule toutes les lettres. Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot. Inverser la casse - basculer entre d'affichages de la casse du texte ou le mot sur lequel le curseur de la souris est positionné. Couleur de surlignage Est utilisé pour marquer des phrases, des fragments, des mots ou même des caractères séparés en ajoutant une bande de couleur qui imite l'effet du surligneur sur le texte. Vous pouvez sélectionner la partie voulue du texte, puis cliquer sur la flèche vers le bas à côté de l'icône pour sélectionner une couleur dans la palette (cet ensemble de couleurs ne dépend pas du Jeux de couleurs sélectionné et comprend 16 couleurs). La couleur sera appliquée à la sélection. Alternativement, vous pouvez d'abord choisir une couleur de surbrillance et ensuite commencer à sélectionner le texte avec la souris - le pointeur de la souris ressemblera à ceci et vous serez en mesure de surligner plusieurs parties différentes de votre texte de manière séquentielle. Pour enlever la mise en surbrillance, cliquez à nouveau sur l'icône. Pour effacer la couleur de surbrillance, choisissez l'option Pas de remplissage. Couleur de police Sert à changer la couleur des lettres /caractères dans le texte. Cliquez sur la flèche vers le bas à côté de l'icône pour sélectionner la couleur. Gras Sert à mettre la police en gras pour lui donner plus de poids. Italique Sert à mettre la police en italique pour lui donner une certaine inclinaison à droite. Souligné Sert à souligner le texte avec la ligne qui passe sous les lettres. Barré Sert à barrer le texte par la ligne passant par les lettres. Exposant Sert à rendre le texte plus petit et le déplacer vers la partie supérieure de la ligne du texte, par exemple comme dans les fractions. Indice Sert à rendre le texte plus petit et le déplacer vers la partie inférieure de la ligne du texte, par exemple comme dans les formules chimiques. Définir l'interligne et modifier les retraits de paragraphe Vous pouvez définir l'interligne pour les lignes de texte dans le paragraphe ainsi que les marges entre le paragraphe courant et le précédent ou le suivant. Pour ce faire, placez le curseur dans le paragraphe de votre choix ou sélectionnez plusieurs paragraphes avec la souris, utilisez les champs correspondants de l'onglet Paramètres de texte dans la barre latérale droite pour obtenir les résultats nécessaires: Interligne - réglez la hauteur de la ligne pour les lignes de texte dans le paragraphe. Vous pouvez choisir parmi trois options: Au moins (sert à régler l'interligne minimale qui est nécessaire pour adapter la plus grande police ou le graphique à la ligne), Multiple (sert à régler l'interligne exprimée en nombre supérieur à 1), Exactement (sert à définir l'interligne fixe). Spécifiez la valeur nécessaire dans le champ situé à droite. Espacement de paragraphe - définissez l'espace entre les paragraphes. Avant - réglez la taille de l'espace avant le paragraphe. Après - réglez la taille de l'espace après le paragraphe. Remarque: on peut configurer les mêmes paramètres dans la fenêtre Paragraphe - Paramètres avancés . Pour modifier rapidement l'interligne du paragraphe actuel, vous pouvez aussi cliquer sur l'icône Interligne sous l'onglet Accueil de la barre d'outils supérieure et sélectionnez la valeur nécessaire dans la liste: 1.0, 1.15, 1.5, 2.0, 2.5, ou 3.0 lignes. Pour modifier le décalage de paragraphe du côté gauche de la zone de texte, placez le curseur dans le paragraphe de votre choix ou sélectionnez plusieurs paragraphes à l'aide de la souris et utilisez les icônes correspondantes dans l'onglet Accueil de la barre d'outils supérieure: Réduire le retrait et Augmenter le retrait . Configurer les paramètres avancés du paragraphe Pour ouvrir la fenêtre Paragraphe - Paramètres avancés, cliquer avec le bouton droit sur le texte et sélectionnez l'option Paramètres avancés du texte dans le menu. Il est également possible de placer le curseur dans le paragraphe de votre choix - l'onglet Paramètres du texte devient actif sur la barre latérale droite. Appuyez sur le lien Afficher les paramètres avancés. La fenêtre paramètres du paragraphe s'ouvre: L'onglet Retrait et emplacement permet de: modifier le type d'alignement du paragraphe, modifier les retraits du paragraphe par rapport aux marges internes de la zone de texte, A gauche - spécifiez le décalage du paragraphe de la marge interne gauche de la zone de texte et saisissez la valeur numérique appropriée, A droite - spécifiez le décalage du paragraphe de la marge interne droite de la zone de texte et saisissez la valeur numérique appropriée, Spécial - spécifier le retrait de première ligne du paragraphe: sélectionnez l'élément approprié du menu ((aucun), Première ligne, Suspendu) et modifiez la valeur numérique par défaut pour les options Première ligne ou Suspendu, modifiez l'interligne du paragraphe. Vous pouvez également utilisez la règle horizontale pour changer les retraits. Sélectionnez le(s) paragraphe(s) et faites glisser les marqueurs tout au long de la règle Le marqueur Retrait de première ligne sert à définir le décalage de la marge interne gauche de la zone de texte pour la première ligne du paragraphe. Le marqueur Retrait suspendu sert à définir le décalage de la marge interne gauche de la zone de texte pour la deuxième ligne et toutes les lignes suivantes du paragraphe. Le marqueur Retrait de gauche sert à définir le décalage du paragraphe de la marge interne gauche de la zone de texte. Le marqueur Retrait de droite sert à définir le décalage du paragraphe de la marge interne droite de la zone de texte. Remarque: si vous ne voyez pas les règles, passez à l'onglet Accueil de la barre d'outils supérieure, cliquez sur l'icône Paramètres d'affichage dans le coin supérieur droit et décochez l'option Masquer les règles pour les afficher. L'onglet Police comporte les paramètres suivants: Barré sert à barrer le texte par la ligne passant par les lettres. Barré double sert à barrer le texte par la ligne double passant par les lettres. Exposant sert à rendre le texte plus petit et le déplacer vers la partie supérieure de la ligne du texte, par exemple comme dans les fractions. Indice sert à rendre le texte plus petit et le déplacer vers la partie inférieure de la ligne du texte, par exemple comme dans les formules chimiques. Petites majuscules sert à mettre toutes les lettres en petite majuscule. Majuscules sert à mettre toutes les lettres en majuscule. Espacement des caractères sert à définir l'espace entre les caractères. Augmentez la valeur par défaut pour appliquer l'espacement Étendu, ou diminuez la valeur par défaut pour appliquer l'espacement Condensé. Utilisez les touches fléchées ou entrez la valeur voulue dans la case. Tous les changements seront affichés dans le champ de prévisualisation ci-dessous. L'onglet Tabulation vous permet de changer des taquets de tabulation c'est-à-dire l'emplacement où le curseur s'arrête quand vous appuyez sur la touche Tab du clavier. La Tabulation par défaut est 2.54 cm. Vous pouvez augmenter ou diminuer cette valeur en utilisant les boutons à flèche ou en saisissant la valeur nécessaire dans la zone. Position sert à personnaliser les taquets de tabulation. Saisissez la valeur nécessaire dans ce champ, réglez-la en utilisant les boutons à flèche et cliquez sur le bouton Spécifier. La position du taquet de tabulation personnalisée sera ajoutée à la liste dans le champ au-dessous. Alignement sert à définir le type d'alignement pour chaque taquet de tabulation de la liste. Sélectionnez le taquet nécessaire dans la liste, choisissez l'option De gauche, De centre ou De droite dans la liste déroulante Alignement et cliquez sur le bouton Spécifier. De gauche sert à aligner le texte sur le côté gauche du taquet de tabulation; le texte se déplace à droite du taquet de tabulation quand vous saisissez le texte. Le taquet de tabulation sera indiqué sur la règle horizontale par le marqueur de tabulation . Du centre - sert à centrer le texte à l'emplacement du taquet de tabulation. Le taquet de tabulation sera indiqué sur la règle horizontale par le marqueur . De droite - sert à aligner le texte sur le côté droit du taquet de tabulation; le texte se déplace à gauche du taquet de tabulation quand vous saisissez le texte. Le taquet de tabulation sera indiqué sur la règle horizontale par le marqueur . Pour supprimer un taquet de tabulation de la liste sélectionnez-le et cliquez sur le bouton Supprimer ou utilisez le bouton Supprimer tout pour vider la liste. Pour définir les taquets de tabulation vous pouvez utiliser la règle horizontale: Cliquez sur le bouton de sélection de tabulation dans le coin supérieur gauche de la zone de travail pour choisir le type d'arrêt de tabulation requis: À gauche , Au centre , À droite . Cliquez sur le bord inférieur de la règle là où vous voulez positionner le taquet de tabulation. Faites-le glisser tout au long de la règle pour changer son emplacement. Pour supprimer le taquet de tabulation ajouté faites-le glisser en dehors de la règle. Remarque: si vous ne voyez pas les règles, passez à l'onglet Accueil de la barre d'outils supérieure, cliquez sur l'icône Paramètres d'affichage dans le coin supérieur droit et décochez l'option Masquer les règles pour les afficher. Modifier un style Text Art Sélectionnez un objet texte et cliquez sur l'icône des Paramètres de Text Art dans la barre latérale de droite. Modifiez le style de texte appliqué en sélectionnant un nouveau Modèle dans la galerie. Vous pouvez également modifier le style de base en sélectionnant un type de police différent, une autre taille, etc. Changez le remplissage et le contour de police. Les options disponibles sont les mêmes que pour les formes automatiques. Appliquez un effet de texte en sélectionnant le type de transformation de texte voulu dans la galerie Transformation. Vous pouvez ajuster le degré de distorsion du texte en faisant glisser la poignée en forme de diamant rose." }, { "id": "UsageInstructions/ManageSlides.htm", diff --git a/apps/presentationeditor/main/resources/help/ru/HelpfulHints/About.htm b/apps/presentationeditor/main/resources/help/ru/HelpfulHints/About.htm index 6dd634f00..4d27895c4 100644 --- a/apps/presentationeditor/main/resources/help/ru/HelpfulHints/About.htm +++ b/apps/presentationeditor/main/resources/help/ru/HelpfulHints/About.htm @@ -17,7 +17,7 @@

    Редактор презентаций - это онлайн-приложение, которое позволяет просматривать и редактировать презентации непосредственно в браузере.

    Используя онлайн-редактор презентаций, можно выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные презентации, сохраняя все детали форматирования, или сохранять их на жесткий диск компьютера как файлы в формате PPTX, PDF, ODP, POTX, PDF/A, OTP.

    -

    Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку Значок О программе на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии выберите пункт меню О программе на левой боковой панели в главном окне приложения.

    +

    Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку Значок О программе на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии для Windows выберите пункт меню О программе на левой боковой панели в главном окне приложения. В десктопной версии для Mac OS откройте меню ONLYOFFICE в верхней части и выберите пункт меню О программе ONLYOFFICE.

    \ No newline at end of file diff --git a/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertText.htm b/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertText.htm index 95b486ec7..ab4882802 100644 --- a/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertText.htm +++ b/apps/presentationeditor/main/resources/help/ru/UsageInstructions/InsertText.htm @@ -79,7 +79,7 @@

    Настройка типа, размера, цвета шрифта и применение стилей оформления

    Можно выбрать тип, размер и цвет шрифта, а также применить различные стили оформления шрифта, используя соответствующие значки, расположенные на вкладке Главная верхней панели инструментов.

    -

    Примечание: если необходимо применить форматирование к тексту, который уже есть в презентации, выделите его мышью или с помощью клавиатуры, а затем примените форматирование.

    +

    Примечание: если необходимо применить форматирование к тексту, который уже есть в презентации, выделите его мышью или с помощью клавиатуры, а затем примените форматирование. Также можно поместить курсор мыши в нужное слово, чтобы применить форматирование только к этому слову.

    Police
    Modifier la casse Modifier la casseSert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres MAJUSCULES - mettre en majuscule toutes les lettres Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot Inverser la casse - basculer entre d'affichages de la casse du texte.Sert à modifier la casse du texte. Majuscule en début de phrase - la casse à correspondre la casse de la proposition ordinaire. minuscule - mettre en minuscule toutes les lettres. MAJUSCULES - mettre en majuscule toutes les lettres. Mettre en majuscule chaque mot - mettre en majuscule la première lettre de chaque mot. Inverser la casse - basculer entre d'affichages de la casse du texte ou le mot sur lequel le curseur de la souris est positionné.
    Couleur de surlignage
    @@ -104,7 +104,7 @@ - + diff --git a/apps/presentationeditor/main/resources/help/ru/search/indexes.js b/apps/presentationeditor/main/resources/help/ru/search/indexes.js index 59e316102..ccd16da61 100644 --- a/apps/presentationeditor/main/resources/help/ru/search/indexes.js +++ b/apps/presentationeditor/main/resources/help/ru/search/indexes.js @@ -3,7 +3,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "О редакторе презентаций", - "body": "Редактор презентаций - это онлайн- приложение, которое позволяет просматривать и редактировать презентации непосредственно в браузере . Используя онлайн- редактор презентаций, можно выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные презентации, сохраняя все детали форматирования, или сохранять их на жесткий диск компьютера как файлы в формате PPTX, PDF, ODP, POTX, PDF/A, OTP. Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии выберите пункт меню О программе на левой боковой панели в главном окне приложения." + "body": "Редактор презентаций - это онлайн- приложение, которое позволяет просматривать и редактировать презентации непосредственно в браузере . Используя онлайн- редактор презентаций, можно выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные презентации, сохраняя все детали форматирования, или сохранять их на жесткий диск компьютера как файлы в формате PPTX, PDF, ODP, POTX, PDF/A, OTP. Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии для Windows выберите пункт меню О программе на левой боковой панели в главном окне приложения. В десктопной версии для Mac OS откройте меню ONLYOFFICE в верхней части и выберите пункт меню О программе ONLYOFFICE." }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -138,7 +138,7 @@ var indexes = { "id": "UsageInstructions/InsertImages.htm", "title": "Вставка и настройка изображений", - "body": "Вставка изображения В онлайн-редакторе презентаций можно вставлять в презентацию изображения самых популярных форматов. Поддерживаются следующие форматы изображений: BMP, GIF, JPEG, JPG, PNG. Для добавления изображения на слайд: в списке слайдов слева выберите тот слайд, на который требуется добавить изображение, щелкните по значку Изображение на вкладке Главная или Вставка верхней панели инструментов, для загрузки изображения выберите одну из следующих опций: при выборе опции Изображение из файла откроется стандартное диалоговое окно для выбора файлов. Выберите нужный файл на жестком диске компьютера и нажмите кнопку Открыть В онлайн-редакторе вы можете выбрать сразу несколько изображений. при выборе опции Изображение по URL откроется окно, в котором можно ввести веб-адрес нужного изображения, а затем нажать кнопку OK при выборе опции Изображение из хранилища откроется окно Выбрать источник данных. Выберите изображение, сохраненное на вашем портале, и нажмите кнопку OK после того как изображение будет добавлено, можно изменить его размер и положение. Вы также можете добавить изображение внутри текстовой рамки, нажав на кнопку Изображение из файла в ней и выбрав нужное изображение, сохраненное на компьютере, или используйте кнопку Изображение по URL и укажите URL-адрес изображения: Также можно добавить изображение в макет слайда. Для получения дополнительной информации вы можете обратиться к этой статье. Изменение параметров изображения Правая боковая панель активируется при щелчке по изображению левой кнопкой мыши и выборе значка Параметры изображения справа. Вкладка содержит следующие разделы: Размер - используется, чтобы просмотреть текущую Ширину и Высоту изображения или при необходимости восстановить Реальный размер изображения. Кнопка Обрезать используется, чтобы обрезать изображение. Нажмите кнопку Обрезать, чтобы активировать маркеры обрезки, которые появятся в углах изображения и в центре каждой его стороны. Вручную перетаскивайте маркеры, чтобы задать область обрезки. Вы можете навести курсор мыши на границу области обрезки, чтобы курсор превратился в значок , и перетащить область обрезки. Чтобы обрезать одну сторону, перетащите маркер, расположенный в центре этой стороны. Чтобы одновременно обрезать две смежных стороны, перетащите один из угловых маркеров. Чтобы равномерно обрезать две противоположные стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании маркера в центре одной из этих сторон. Чтобы равномерно обрезать все стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании любого углового маркера. Когда область обрезки будет задана, еще раз нажмите на кнопку Обрезать, или нажмите на клавишу Esc, или щелкните мышью за пределами области обрезки, чтобы применить изменения. После того, как область обрезки будет задана, также можно использовать опции Заливка и Вписать, доступные в выпадающем меню Обрезать. Нажмите кнопку Обрезать еще раз и выберите нужную опцию: При выборе опции Заливка центральная часть исходного изображения будет сохранена и использована в качестве заливки выбранной области обрезки, в то время как остальные части изображения будут удалены. При выборе опции Вписать размер изображения будет изменен, чтобы оно соответствовало высоте или ширине области обрезки. Никакие части исходного изображения не будут удалены, но внутри выбранной области обрезки могут появится пустые пространства. Заменить изображение - используется, чтобы загрузить другое изображение вместо текущего, выбрав нужный источник. Можно выбрать одну из опций: Из файла, Из хранилища или По URL. Опция Заменить изображение также доступна в контекстном меню, вызываемом правой кнопкой мыши. Поворот - используется, чтобы повернуть изображение на 90 градусов по часовой стрелке или против часовой стрелки, а также чтобы отразить изображение слева направо или сверху вниз. Нажмите на одну из кнопок: чтобы повернуть изображение на 90 градусов против часовой стрелки чтобы повернуть изображение на 90 градусов по часовой стрелке чтобы отразить изображение по горизонтали (слева направо) чтобы отразить изображение по вертикали (сверху вниз) Когда изображение выделено, справа также доступен значок Параметры фигуры . Можно щелкнуть по нему, чтобы открыть вкладку Параметры фигуры на правой боковой панели и настроить тип, толщину и цвет Конкуты фигуры, а также изменить тип фигуры, выбрав другую фигуру в меню Изменить автофигуру. Форма изображения изменится соответствующим образом. На вкладке Параметры фигуры также можно использовать опцию Отображать тень, чтобы добавить тень к изображеню. Чтобы изменить дополнительные параметры изображения, щелкните по нему правой кнопкой мыши и выберите из контекстного меню опцию Дополнительные параметры изображения или щелкните по изображению левой кнопкой мыши и нажмите на ссылку Дополнительные параметры на правой боковой панели. Откроется окно свойств изображения: Вкладка Положение позволяет задать следующие свойства изображения: Размер - используйте эту опцию, чтобы изменить ширину и/или высоту изображения. Если нажата кнопка Сохранять пропорции (в этом случае она выглядит так: ), ширина и высота будут изменены пропорционально, сохраняя исходное соотношение сторон изображения. Чтобы восстановить реальный размер добавленного изображения, нажмите кнопку Реальный размер. Положение - используйте эту опцию, чтобы изменить положение изображения на слайде (вычисляется относительно верхней и левой стороны слайда). Вкладка Поворот содержит следующие параметры: Угол - используйте эту опцию, чтобы повернуть изображение на точно заданный угол. Введите в поле нужное значение в градусах или скорректируйте его, используя стрелки справа. Отражено - отметьте галочкой опцию По горизонтали, чтобы отразить изображение по горизонтали (слева направо), или отметьте галочкой опцию По вертикали, чтобы отразить изображение по вертикали (сверху вниз). Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит изображение. Чтобы удалить вставленное изображение, щелкните по нему левой кнопкой мыши и нажмите клавишу Delete на клавиатуре. Чтобы узнать, как выровнять изображение на слайде или расположить в определенном порядке несколько изображений, обратитесь к разделу Выравнивание и упорядочивание объектов на слайде." + "body": "Вставка изображения В онлайн-редакторе презентаций можно вставлять в презентацию изображения самых популярных форматов. Поддерживаются следующие форматы изображений: BMP, GIF, JPEG, JPG, PNG. Для добавления изображения на слайд: в списке слайдов слева выберите тот слайд, на который требуется добавить изображение, щелкните по значку Изображение на вкладке Главная или Вставка верхней панели инструментов, для загрузки изображения выберите одну из следующих опций: при выборе опции Изображение из файла откроется стандартное диалоговое окно для выбора файлов. Выберите нужный файл на жестком диске компьютера и нажмите кнопку Открыть В онлайн-редакторе вы можете выбрать сразу несколько изображений. при выборе опции Изображение по URL откроется окно, в котором можно ввести веб-адрес нужного изображения, а затем нажать кнопку OK при выборе опции Изображение из хранилища откроется окно Выбрать источник данных. Выберите изображение, сохраненное на вашем портале, и нажмите кнопку OK после того как изображение будет добавлено, можно изменить его размер и положение. Вы также можете добавить изображение внутри текстовой рамки, нажав на кнопку Изображение из файла в ней и выбрав нужное изображение, сохраненное на компьютере, или используйте кнопку Изображение по URL и укажите URL-адрес изображения: Также можно добавить изображение в макет слайда. Для получения дополнительной информации вы можете обратиться к этой статье. Изменение параметров изображения Правая боковая панель активируется при щелчке по изображению левой кнопкой мыши и выборе значка Параметры изображения справа. Вкладка содержит следующие разделы: Размер - используется, чтобы просмотреть текущую Ширину и Высоту изображения или при необходимости восстановить Реальный размер изображения. Кнопка Обрезать используется, чтобы обрезать изображение. Нажмите кнопку Обрезать, чтобы активировать маркеры обрезки, которые появятся в углах изображения и в центре каждой его стороны. Вручную перетаскивайте маркеры, чтобы задать область обрезки. Вы можете навести курсор мыши на границу области обрезки, чтобы курсор превратился в значок , и перетащить область обрезки. Чтобы обрезать одну сторону, перетащите маркер, расположенный в центре этой стороны. Чтобы одновременно обрезать две смежных стороны, перетащите один из угловых маркеров. Чтобы равномерно обрезать две противоположные стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании маркера в центре одной из этих сторон. Чтобы равномерно обрезать все стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании любого углового маркера. Когда область обрезки будет задана, еще раз нажмите на кнопку Обрезать, или нажмите на клавишу Esc, или щелкните мышью за пределами области обрезки, чтобы применить изменения. После того, как область обрезки будет задана, также можно использовать опции Заливка и Вписать, доступные в выпадающем меню Обрезать. Нажмите кнопку Обрезать еще раз и выберите нужную опцию: При выборе опции Заливка центральная часть исходного изображения будет сохранена и использована в качестве заливки выбранной области обрезки, в то время как остальные части изображения будут удалены. При выборе опции Вписать размер изображения будет изменен, чтобы оно соответствовало высоте или ширине области обрезки. Никакие части исходного изображения не будут удалены, но внутри выбранной области обрезки могут появится пустые пространства. Заменить изображение - используется, чтобы загрузить другое изображение вместо текущего, выбрав нужный источник. Можно выбрать одну из опций: Из файла, Из хранилища или По URL. Опция Заменить изображение также доступна в контекстном меню, вызываемом правой кнопкой мыши. Поворот - используется, чтобы повернуть изображение на 90 градусов по часовой стрелке или против часовой стрелки, а также чтобы отразить изображение слева направо или сверху вниз. Нажмите на одну из кнопок: чтобы повернуть изображение на 90 градусов против часовой стрелки чтобы повернуть изображение на 90 градусов по часовой стрелке чтобы отразить изображение по горизонтали (слева направо) чтобы отразить изображение по вертикали (сверху вниз) Когда изображение выделено, справа также доступен значок Параметры фигуры . Можно щелкнуть по нему, чтобы открыть вкладку Параметры фигуры на правой боковой панели и настроить тип, толщину и цвет Контуров фигуры, а также изменить тип фигуры, выбрав другую фигуру в меню Изменить автофигуру. Форма изображения изменится соответствующим образом. На вкладке Параметры фигуры также можно использовать опцию Отображать тень, чтобы добавить тень к изображеню. Чтобы изменить дополнительные параметры изображения, щелкните по нему правой кнопкой мыши и выберите из контекстного меню опцию Дополнительные параметры изображения или щелкните по изображению левой кнопкой мыши и нажмите на ссылку Дополнительные параметры на правой боковой панели. Откроется окно свойств изображения: Вкладка Положение позволяет задать следующие свойства изображения: Размер - используйте эту опцию, чтобы изменить ширину и/или высоту изображения. Если нажата кнопка Сохранять пропорции (в этом случае она выглядит так: ), ширина и высота будут изменены пропорционально, сохраняя исходное соотношение сторон изображения. Чтобы восстановить реальный размер добавленного изображения, нажмите кнопку Реальный размер. Положение - используйте эту опцию, чтобы изменить положение изображения на слайде (вычисляется относительно верхней и левой стороны слайда). Вкладка Поворот содержит следующие параметры: Угол - используйте эту опцию, чтобы повернуть изображение на точно заданный угол. Введите в поле нужное значение в градусах или скорректируйте его, используя стрелки справа. Отражено - отметьте галочкой опцию По горизонтали, чтобы отразить изображение по горизонтали (слева направо), или отметьте галочкой опцию По вертикали, чтобы отразить изображение по вертикали (сверху вниз). Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит изображение. Чтобы удалить вставленное изображение, щелкните по нему левой кнопкой мыши и нажмите клавишу Delete на клавиатуре. Чтобы узнать, как выровнять изображение на слайде или расположить в определенном порядке несколько изображений, обратитесь к разделу Выравнивание и упорядочивание объектов на слайде." }, { "id": "UsageInstructions/InsertSymbols.htm", @@ -153,7 +153,7 @@ var indexes = { "id": "UsageInstructions/InsertText.htm", "title": "Вставка и форматирование текста", - "body": "Вставка текста Новый текст можно добавить тремя разными способами: Добавить фрагмент текста внутри соответствующей текстовой рамки, предусмотренной на макете слайда. Для этого установите курсор внутри текстовой рамки и напишите свой текст или вставьте его, используя сочетание клавиш Ctrl+V, вместо соответствующего текста по умолчанию. Добавить фрагмент текста в любом месте на слайде. Можно вставить надпись (прямоугольную рамку, внутри которой вводится текст) или объект Text Art (текстовое поле с предварительно заданным стилем и цветом шрифта, позволяющее применять текстовые эффекты). В зависимости от требуемого типа текстового объекта можно сделать следующее: чтобы добавить текстовое поле, щелкните по значку Надпись на вкладке Главная или Вставка верхней панели инструментов, затем щелкните там, где требуется поместить надпись, удерживайте кнопку мыши и перетаскивайте границу текстового поля, чтобы задать его размер. Когда вы отпустите кнопку мыши, в добавленном текстовом поле появится курсор, и вы сможете ввести свой текст. Примечание: надпись можно также вставить, если щелкнуть по значку Фигура на верхней панели инструментов и выбрать фигуру из группы Основные фигуры. чтобы добавить объект Text Art, щелкните по значку Text Art на вкладке Вставка верхней панели инструментов, затем щелкните по нужному шаблону стиля – объект Text Art будет добавлен в центре слайда. Выделите мышью стандартный текст внутри текстового поля и напишите вместо него свой текст. Добавить фрагмент текста внутри автофигуры. Выделите фигуру и начинайте печатать текст. Щелкните за пределами текстового объекта, чтобы применить изменения и вернуться к слайду. Текст внутри текстового объекта является его частью (при перемещении или повороте текстового объекта текст будет перемещаться или поворачиваться вместе с ним). Поскольку вставленный текстовый объект представляет собой прямоугольную рамку (у нее по умолчанию невидимые границы) с текстом внутри, а эта рамка является обычной автофигурой, можно изменять свойства и фигуры, и текста. Чтобы удалить добавленный текстовый объект, щелкните по краю текстового поля и нажмите клавишу Delete на клавиатуре. Текст внутри текстового поля тоже будет удален. Форматирование текстового поля Выделите текстовое поле, щелкнув по его границе, чтобы можно было изменить его свойства. Когда текстовое поле выделено, его границы отображаются как сплошные, а не пунктирные линии. чтобы изменить размер текстового поля, переместить, повернуть его, используйте специальные маркеры по краям фигуры. чтобы изменить заливку, контур текстового поля, заменить прямоугольное поле на какую-то другую фигуру или открыть дополнительные параметры фигуры, щелкните по значку Параметры фигуры на правой боковой панели и используйте соответствующие опции. чтобы выровнять текстовое поле на слайде, повернуть или отразить поле, расположить текстовые поля в определенном порядке относительно других объектов, щелкните правой кнопкой мыши по границе текстового поля и используйте опции контекстного меню. чтобы создать колонки текста внутри текстового поля, щелкните правой кнопкой мыши по границе текстового поля, нажмите на пункт меню Дополнительные параметры фигуры и перейдите на вкладку Колонки в окне Фигура - дополнительные параметры. Форматирование текста внутри текстового поля Щелкните по тексту внутри текстового поля, чтобы можно было изменить его свойства. Когда текст выделен, границы текстового поля отображаются как пунктирные линии. Примечание: форматирование текста можно изменить и в том случае, если выделено текстовое поле, а не сам текст. В этом случае любые изменения будут применены ко всему тексту в текстовом поле. Некоторые параметры форматирования шрифта (тип, размер, цвет и стили оформления шрифта) можно отдельно применить к предварительно выделенному фрагменту текста. Выравнивание текста внутри текстового поля Горизонтально текст выравнивается четырьмя способами: по левому краю, по правому краю, по центру или по ширине. Для этого: установите курсор в том месте, где требуется применить выравнивание (это может быть новая строка или уже введенный текст), разверните список Горизонтальное выравнивание на вкладке Главная верхней панели инструментов, выберите тип выравнивания, который вы хотите применить: опция Выравнивание текста по левому краю позволяет выровнять текст по левому краю текстового поля (правый край остается невыровненным). опция Выравнивание текста по центру позволяет выровнять текст по центру текстового поля (правый и левый края остаются невыровненными). опция Выравнивание текста по правому краю позволяет выровнять текст по правому краю текстового поля (левый край остается невыровненным). опция Выравнивание текста по ширине позволяет выровнять текст как по левому, так и по правому краю текстового поля (выравнивание осуществляется за счет добавления дополнительных интервалов там, где это необходимо). Примечание: эти параметры также можно найти в окне Абзац - Дополнительные параметры. Вертикально текст выравнивается тремя способами: по верхнему краю, по середине или по нижнему краю. Для этого: установите курсор в том месте, где требуется применить выравнивание (это может быть новая строка или уже введенный текст), разверните список Вертикальное выравнивание на вкладке Главная верхней панели инструментов, выберите тип выравнивания, который вы хотите применить: опция Выравнивание текста по верхнему краю позволяет выровнять текст по верхнему краю текстового поля. опция Выравнивание текста по середине позволяет выровнять текст по центру текстового поля. опция Выравнивание текста по нижнему краю позволяет выровнять текст по нижнему краю текстового поля. Изменение направления текста Чтобы повернуть текст внутри текстового поля, щелкните по тексту правой кнопкой мыши, выберите опцию Направление текста, а затем выберите один из доступных вариантов: Горизонтальное (выбран по умолчанию), Повернуть текст вниз (задает вертикальное направление, сверху вниз) или Повернуть текст вверх (задает вертикальное направление, снизу вверх). Настройка типа, размера, цвета шрифта и применение стилей оформления Можно выбрать тип, размер и цвет шрифта, а также применить различные стили оформления шрифта, используя соответствующие значки, расположенные на вкладке Главная верхней панели инструментов. Примечание: если необходимо применить форматирование к тексту, который уже есть в презентации, выделите его мышью или с помощью клавиатуры, а затем примените форматирование. Шрифт Используется для выбора шрифта из списка доступных. Если требуемый шрифт отсутствует в списке, его можно скачать и установить в вашей операционной системе, после чего он будет доступен для использования в десктопной версии. Размер шрифта Используется для выбора предустановленного значения размера шрифта из выпадающего списка (доступны следующие стандартные значения: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 и 96). Также можно вручную ввести произвольное значение до 300 пунктов в поле ввода и нажать клавишу Enter. Увеличить размер шрифта Используется для изменения размера шрифта, делая его на один пункт крупнее при каждом нажатии на кнопку. Уменьшить размер шрифта Используется для изменения размера шрифта, делая его на один пункт мельче при каждом нажатии на кнопку. Изменить регистр Используется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста. Цвет выделения Используется для выделения отдельных предложений, фраз, слов или даже символов путем добавления цветовой полосы, имитирующей отчеркивание текста маркером. Можно выделить нужную часть текста, а потом нажать направленную вниз стрелку рядом с этим значком, чтобы выбрать цвет на палитре (этот набор цветов не зависит от выбранной Цветовой схемы и включает в себя 16 цветов), и этот цвет будет применен к выбранному тексту. Или же можно сначала выбрать цвет выделения, а потом начать выделять текст мышью - указатель мыши будет выглядеть так: - и появится возможность выделить несколько разных частей текста одну за другой. Чтобы остановить выделение текста, просто еще раз щелкните по значку. Для очистки цвета выделения воспользуйтесь опцией Без заливки. Цвет шрифта Используется для изменения цвета букв/символов в тексте. Для выбора цвета нажмите направленную вниз стрелку рядом со значком. Полужирный Используется для придания шрифту большей насыщенности. Курсив Используется для придания шрифту наклона вправо. Подчеркнутый Используется для подчеркивания текста чертой, проведенной под буквами. Зачеркнутый Используется для зачеркивания текста чертой, проведенной по буквам. Надстрочные знаки Используется, чтобы сделать текст мельче и поместить его в верхней части строки, например, как в дробях. Подстрочные знаки Используется, чтобы сделать текст мельче и поместить его в нижней части строки, например, как в химических формулах. Задание междустрочного интервала и изменение отступов абзацев Можно задать высоту строки для строк текста в абзаце, а также поля между текущим и предыдущим или последующим абзацем. Для этого: установите курсор в пределах нужного абзаца, или выделите мышью несколько абзацев, используйте соответствующие поля вкладки Параметры текста на правой боковой панели, чтобы добиться нужного результата: Междустрочный интервал - задайте высоту строки для строк текста в абзаце. Вы можете выбрать одну из трех опций: минимум (устанавливает минимальный междустрочный интервал, который требуется, чтобы соответствовать самому крупному шрифту или графическому элементу на строке), множитель (устанавливает междустрочный интервал, который может быть выражен в числах больше 1), точно (устанавливает фиксированный междустрочный интервал). Необходимое значение можно указать в поле справа. Интервал между абзацами - задайте величину свободного пространства между абзацами. Перед - задайте величину свободного пространства перед абзацем. После - задайте величину свободного пространства после абзаца. Примечание: эти параметры также можно найти в окне Абзац - Дополнительные параметры. Чтобы быстро изменить междустрочный интервал в текущем абзаце, можно также использовать значок Междустрочный интервал на вкладке Главная верхней панели инструментов, выбрав нужное значение из списка: 1.0, 1.15, 1.5, 2.0, 2.5, или 3.0 строки. Чтобы изменить смещение абзаца от левого края текстового поля, установите курсор в пределах нужного абзаца или выделите мышью несколько абзацев и используйте соответствующие значки на вкладке Главная верхней панели инструментов: Уменьшить отступ и Увеличить отступ . Изменение дополнительных параметров абзаца Чтобы открыть окно Абзац - Дополнительные параметры, щелкните по тексту правой кнопкой мыши и выберите в контекстном меню пункт Дополнительные параметры текста. Также можно установить курсор в пределах нужного абзаца - на правой боковой панели будет активирована вкладка Параметры текста. Нажмите на ссылку Дополнительные параметры. Откроется окно свойств абзаца: На вкладке Отступы и интервалы можно выполнить следующие действия: изменить тип выравнивания текста внутри абзаца, изменить отступы абзаца от внутренних полей текстового объекта, Слева - задайте смещение всего абзаца от левого внутреннего поля текстового блока, указав нужное числовое значение, Справа - задайте смещение всего абзаца от правого внутреннего поля текстового блока, указав нужное числовое значение, Первая строка - задайте отступ для первой строки абзаца, выбрав соответствующий пункт меню ((нет), Отступ, Выступ) и изменив числовое значение для Отступа или Выступа, заданное по умолчанию, изменить междустрочный интервал внутри абзаца. Чтобы задать отступы, можно также использовать горизонтальную линейку. Выделите нужный абзац или абзацы и перетащите маркеры отступов по линейке. Маркер отступа первой строки используется, чтобы задать смещение от левого внутреннего поля текстового объекта для первой строки абзаца. Маркер выступа используется, чтобы задать смещение от левого внутреннего поля текстового объекта для второй и всех последующих строк абзаца. Маркер отступа слева используется, чтобы задать смещение от левого внутреннего поля текстового объекта для всего абзаца. Маркер отступа справа используется, чтобы задать смещение абзаца от правого внутреннего поля текстового объекта. Примечание: если вы не видите линеек, перейдите на вкладку Главная верхней панели инструментов, щелкните по значку Параметры представления в правом верхнем углу и снимите отметку с опции Скрыть линейки, чтобы отобразить их. Вкладка Шрифт содержит следующие параметры: Зачёркивание - используется для зачеркивания текста чертой, проведенной по буквам. Двойное зачёркивание - используется для зачеркивания текста двойной чертой, проведенной по буквам. Надстрочные - используется, чтобы сделать текст мельче и поместить его в верхней части строки, например, как в дробях. Подстрочные - используется, чтобы сделать текст мельче и поместить его в нижней части строки, например, как в химических формулах. Малые прописные - используется, чтобы сделать все буквы строчными. Все прописные - используется, чтобы сделать все буквы прописными. Межзнаковый интервал - используется, чтобы задать расстояние между символами. Увеличьте значение, заданное по умолчанию, чтобы применить Разреженный интервал, или уменьшите значение, заданное по умолчанию, чтобы применить Уплотненный интервал. Используйте кнопки со стрелками или введите нужное значение в поле ввода. Все изменения будут отображены в расположенном ниже поле предварительного просмотра. На вкладке Табуляция можно изменить позиции табуляции, то есть те позиции, куда переходит курсор при нажатии клавиши Tab на клавиатуре. Позиция табуляции По умолчанию имеет значение 2.54 см. Это значение можно уменьшить или увеличить, используя кнопки со стрелками или введя в поле нужное значение. Позиция - используется, чтобы задать пользовательские позиции табуляции. Введите в этом поле нужное значение, настройте его более точно, используя кнопки со стрелками, и нажмите на кнопку Задать. Пользовательская позиция табуляции будет добавлена в список в расположенном ниже поле. Выравнивание - используется, чтобы задать нужный тип выравнивания для каждой из позиций табуляции в расположенном выше списке. Выделите нужную позицию табуляции в списке, выберите в выпадающем списке Выравнивание опцию По левому краю, По центру или По правому краю и нажмите на кнопку Задать. По левому краю - выравнивает текст по левому краю относительно позиции табуляции; при наборе текст движется вправо от позиции табуляции. Такая позиция табуляции будет обозначена на горизонтальной линейке маркером . По центру - центрирует текст относительно позиции табуляции. Такая позиция табуляции будет обозначена на горизонтальной линейке маркером . По правому краю - выравнивает текст по правому краю относительно позиции табуляции; при наборе текст движется влево от позиции табуляции. Такая позиция табуляции будет обозначена на горизонтальной линейке маркером . Для удаления позиций табуляции из списка выделите позицию табуляции и нажмите кнопку Удалить или Удалить все. Для установки позиций табуляции можно также использовать горизонтальную линейку: Выберите нужный тип позиции табуляции, нажав на кнопку в левом верхнем углу рабочей области: По левому краю , По центру , По правому краю . Щелкните по нижнему краю линейки в том месте, где требуется установить позицию табуляции. Для изменения местоположения позиции табуляции перетащите ее по линейке. Для удаления добавленной позиции табуляции перетащите ее за пределы линейки. Примечание: если вы не видите линеек, перейдите на вкладку Главная верхней панели инструментов, щелкните по значку Параметры представления в правом верхнем углу и снимите отметку с опции Скрыть линейки, чтобы отобразить их. Изменение стиля объекта Text Art Выделите текстовый объект и щелкните по значку Параметры объектов Text Art на правой боковой панели. Измените примененный стиль текста, выбрав из галереи новый Шаблон. Можно также дополнительно изменить этот базовый стиль, выбрав другой тип, размер шрифта и т.д. Измените заливку и контур шрифта. Доступны точно такие же опции, как и для автофигур. Примените текстовый эффект, выбрав нужный тип трансформации текста из галереи Трансформация. Можно скорректировать степень искривления текста, перетаскивая розовый маркер в форме ромба." + "body": "Вставка текста Новый текст можно добавить тремя разными способами: Добавить фрагмент текста внутри соответствующей текстовой рамки, предусмотренной на макете слайда. Для этого установите курсор внутри текстовой рамки и напишите свой текст или вставьте его, используя сочетание клавиш Ctrl+V, вместо соответствующего текста по умолчанию. Добавить фрагмент текста в любом месте на слайде. Можно вставить надпись (прямоугольную рамку, внутри которой вводится текст) или объект Text Art (текстовое поле с предварительно заданным стилем и цветом шрифта, позволяющее применять текстовые эффекты). В зависимости от требуемого типа текстового объекта можно сделать следующее: чтобы добавить текстовое поле, щелкните по значку Надпись на вкладке Главная или Вставка верхней панели инструментов, затем щелкните там, где требуется поместить надпись, удерживайте кнопку мыши и перетаскивайте границу текстового поля, чтобы задать его размер. Когда вы отпустите кнопку мыши, в добавленном текстовом поле появится курсор, и вы сможете ввести свой текст. Примечание: надпись можно также вставить, если щелкнуть по значку Фигура на верхней панели инструментов и выбрать фигуру из группы Основные фигуры. чтобы добавить объект Text Art, щелкните по значку Text Art на вкладке Вставка верхней панели инструментов, затем щелкните по нужному шаблону стиля – объект Text Art будет добавлен в центре слайда. Выделите мышью стандартный текст внутри текстового поля и напишите вместо него свой текст. Добавить фрагмент текста внутри автофигуры. Выделите фигуру и начинайте печатать текст. Щелкните за пределами текстового объекта, чтобы применить изменения и вернуться к слайду. Текст внутри текстового объекта является его частью (при перемещении или повороте текстового объекта текст будет перемещаться или поворачиваться вместе с ним). Поскольку вставленный текстовый объект представляет собой прямоугольную рамку (у нее по умолчанию невидимые границы) с текстом внутри, а эта рамка является обычной автофигурой, можно изменять свойства и фигуры, и текста. Чтобы удалить добавленный текстовый объект, щелкните по краю текстового поля и нажмите клавишу Delete на клавиатуре. Текст внутри текстового поля тоже будет удален. Форматирование текстового поля Выделите текстовое поле, щелкнув по его границе, чтобы можно было изменить его свойства. Когда текстовое поле выделено, его границы отображаются как сплошные, а не пунктирные линии. чтобы изменить размер текстового поля, переместить, повернуть его, используйте специальные маркеры по краям фигуры. чтобы изменить заливку, контур текстового поля, заменить прямоугольное поле на какую-то другую фигуру или открыть дополнительные параметры фигуры, щелкните по значку Параметры фигуры на правой боковой панели и используйте соответствующие опции. чтобы выровнять текстовое поле на слайде, повернуть или отразить поле, расположить текстовые поля в определенном порядке относительно других объектов, щелкните правой кнопкой мыши по границе текстового поля и используйте опции контекстного меню. чтобы создать колонки текста внутри текстового поля, щелкните правой кнопкой мыши по границе текстового поля, нажмите на пункт меню Дополнительные параметры фигуры и перейдите на вкладку Колонки в окне Фигура - дополнительные параметры. Форматирование текста внутри текстового поля Щелкните по тексту внутри текстового поля, чтобы можно было изменить его свойства. Когда текст выделен, границы текстового поля отображаются как пунктирные линии. Примечание: форматирование текста можно изменить и в том случае, если выделено текстовое поле, а не сам текст. В этом случае любые изменения будут применены ко всему тексту в текстовом поле. Некоторые параметры форматирования шрифта (тип, размер, цвет и стили оформления шрифта) можно отдельно применить к предварительно выделенному фрагменту текста. Выравнивание текста внутри текстового поля Горизонтально текст выравнивается четырьмя способами: по левому краю, по правому краю, по центру или по ширине. Для этого: установите курсор в том месте, где требуется применить выравнивание (это может быть новая строка или уже введенный текст), разверните список Горизонтальное выравнивание на вкладке Главная верхней панели инструментов, выберите тип выравнивания, который вы хотите применить: опция Выравнивание текста по левому краю позволяет выровнять текст по левому краю текстового поля (правый край остается невыровненным). опция Выравнивание текста по центру позволяет выровнять текст по центру текстового поля (правый и левый края остаются невыровненными). опция Выравнивание текста по правому краю позволяет выровнять текст по правому краю текстового поля (левый край остается невыровненным). опция Выравнивание текста по ширине позволяет выровнять текст как по левому, так и по правому краю текстового поля (выравнивание осуществляется за счет добавления дополнительных интервалов там, где это необходимо). Примечание: эти параметры также можно найти в окне Абзац - Дополнительные параметры. Вертикально текст выравнивается тремя способами: по верхнему краю, по середине или по нижнему краю. Для этого: установите курсор в том месте, где требуется применить выравнивание (это может быть новая строка или уже введенный текст), разверните список Вертикальное выравнивание на вкладке Главная верхней панели инструментов, выберите тип выравнивания, который вы хотите применить: опция Выравнивание текста по верхнему краю позволяет выровнять текст по верхнему краю текстового поля. опция Выравнивание текста по середине позволяет выровнять текст по центру текстового поля. опция Выравнивание текста по нижнему краю позволяет выровнять текст по нижнему краю текстового поля. Изменение направления текста Чтобы повернуть текст внутри текстового поля, щелкните по тексту правой кнопкой мыши, выберите опцию Направление текста, а затем выберите один из доступных вариантов: Горизонтальное (выбран по умолчанию), Повернуть текст вниз (задает вертикальное направление, сверху вниз) или Повернуть текст вверх (задает вертикальное направление, снизу вверх). Настройка типа, размера, цвета шрифта и применение стилей оформления Можно выбрать тип, размер и цвет шрифта, а также применить различные стили оформления шрифта, используя соответствующие значки, расположенные на вкладке Главная верхней панели инструментов. Примечание: если необходимо применить форматирование к тексту, который уже есть в презентации, выделите его мышью или с помощью клавиатуры, а затем примените форматирование. Также можно поместить курсор мыши в нужное слово, чтобы применить форматирование только к этому слову. Шрифт Используется для выбора шрифта из списка доступных. Если требуемый шрифт отсутствует в списке, его можно скачать и установить в вашей операционной системе, после чего он будет доступен для использования в десктопной версии. Размер шрифта Используется для выбора предустановленного значения размера шрифта из выпадающего списка (доступны следующие стандартные значения: 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 и 96). Также можно вручную ввести произвольное значение до 300 пунктов в поле ввода и нажать клавишу Enter. Увеличить размер шрифта Используется для изменения размера шрифта, делая его на один пункт крупнее при каждом нажатии на кнопку. Уменьшить размер шрифта Используется для изменения размера шрифта, делая его на один пункт мельче при каждом нажатии на кнопку. Изменить регистр Используется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста или слова, в котором находится курсор мыши. Цвет выделения Используется для выделения отдельных предложений, фраз, слов или даже символов путем добавления цветовой полосы, имитирующей отчеркивание текста маркером. Можно выделить нужную часть текста, а потом нажать направленную вниз стрелку рядом с этим значком, чтобы выбрать цвет на палитре (этот набор цветов не зависит от выбранной Цветовой схемы и включает в себя 16 цветов), и этот цвет будет применен к выбранному тексту. Или же можно сначала выбрать цвет выделения, а потом начать выделять текст мышью - указатель мыши будет выглядеть так: - и появится возможность выделить несколько разных частей текста одну за другой. Чтобы остановить выделение текста, просто еще раз щелкните по значку. Для очистки цвета выделения воспользуйтесь опцией Без заливки. Цвет шрифта Используется для изменения цвета букв/символов в тексте. Для выбора цвета нажмите направленную вниз стрелку рядом со значком. Полужирный Используется для придания шрифту большей насыщенности. Курсив Используется для придания шрифту наклона вправо. Подчеркнутый Используется для подчеркивания текста чертой, проведенной под буквами. Зачеркнутый Используется для зачеркивания текста чертой, проведенной по буквам. Надстрочные знаки Используется, чтобы сделать текст мельче и поместить его в верхней части строки, например, как в дробях. Подстрочные знаки Используется, чтобы сделать текст мельче и поместить его в нижней части строки, например, как в химических формулах. Задание междустрочного интервала и изменение отступов абзацев Можно задать высоту строки для строк текста в абзаце, а также поля между текущим и предыдущим или последующим абзацем. Для этого: установите курсор в пределах нужного абзаца, или выделите мышью несколько абзацев, используйте соответствующие поля вкладки Параметры текста на правой боковой панели, чтобы добиться нужного результата: Междустрочный интервал - задайте высоту строки для строк текста в абзаце. Вы можете выбрать одну из трех опций: минимум (устанавливает минимальный междустрочный интервал, который требуется, чтобы соответствовать самому крупному шрифту или графическому элементу на строке), множитель (устанавливает междустрочный интервал, который может быть выражен в числах больше 1), точно (устанавливает фиксированный междустрочный интервал). Необходимое значение можно указать в поле справа. Интервал между абзацами - задайте величину свободного пространства между абзацами. Перед - задайте величину свободного пространства перед абзацем. После - задайте величину свободного пространства после абзаца. Примечание: эти параметры также можно найти в окне Абзац - Дополнительные параметры. Чтобы быстро изменить междустрочный интервал в текущем абзаце, можно также использовать значок Междустрочный интервал на вкладке Главная верхней панели инструментов, выбрав нужное значение из списка: 1.0, 1.15, 1.5, 2.0, 2.5, или 3.0 строки. Чтобы изменить смещение абзаца от левого края текстового поля, установите курсор в пределах нужного абзаца или выделите мышью несколько абзацев и используйте соответствующие значки на вкладке Главная верхней панели инструментов: Уменьшить отступ и Увеличить отступ . Изменение дополнительных параметров абзаца Чтобы открыть окно Абзац - Дополнительные параметры, щелкните по тексту правой кнопкой мыши и выберите в контекстном меню пункт Дополнительные параметры текста. Также можно установить курсор в пределах нужного абзаца - на правой боковой панели будет активирована вкладка Параметры текста. Нажмите на ссылку Дополнительные параметры. Откроется окно свойств абзаца: На вкладке Отступы и интервалы можно выполнить следующие действия: изменить тип выравнивания текста внутри абзаца, изменить отступы абзаца от внутренних полей текстового объекта, Слева - задайте смещение всего абзаца от левого внутреннего поля текстового блока, указав нужное числовое значение, Справа - задайте смещение всего абзаца от правого внутреннего поля текстового блока, указав нужное числовое значение, Первая строка - задайте отступ для первой строки абзаца, выбрав соответствующий пункт меню ((нет), Отступ, Выступ) и изменив числовое значение для Отступа или Выступа, заданное по умолчанию, изменить междустрочный интервал внутри абзаца. Чтобы задать отступы, можно также использовать горизонтальную линейку. Выделите нужный абзац или абзацы и перетащите маркеры отступов по линейке. Маркер отступа первой строки используется, чтобы задать смещение от левого внутреннего поля текстового объекта для первой строки абзаца. Маркер выступа используется, чтобы задать смещение от левого внутреннего поля текстового объекта для второй и всех последующих строк абзаца. Маркер отступа слева используется, чтобы задать смещение от левого внутреннего поля текстового объекта для всего абзаца. Маркер отступа справа используется, чтобы задать смещение абзаца от правого внутреннего поля текстового объекта. Примечание: если вы не видите линеек, перейдите на вкладку Главная верхней панели инструментов, щелкните по значку Параметры представления в правом верхнем углу и снимите отметку с опции Скрыть линейки, чтобы отобразить их. Вкладка Шрифт содержит следующие параметры: Зачёркивание - используется для зачеркивания текста чертой, проведенной по буквам. Двойное зачёркивание - используется для зачеркивания текста двойной чертой, проведенной по буквам. Надстрочные - используется, чтобы сделать текст мельче и поместить его в верхней части строки, например, как в дробях. Подстрочные - используется, чтобы сделать текст мельче и поместить его в нижней части строки, например, как в химических формулах. Малые прописные - используется, чтобы сделать все буквы строчными. Все прописные - используется, чтобы сделать все буквы прописными. Межзнаковый интервал - используется, чтобы задать расстояние между символами. Увеличьте значение, заданное по умолчанию, чтобы применить Разреженный интервал, или уменьшите значение, заданное по умолчанию, чтобы применить Уплотненный интервал. Используйте кнопки со стрелками или введите нужное значение в поле ввода. Все изменения будут отображены в расположенном ниже поле предварительного просмотра. На вкладке Табуляция можно изменить позиции табуляции, то есть те позиции, куда переходит курсор при нажатии клавиши Tab на клавиатуре. Позиция табуляции По умолчанию имеет значение 2.54 см. Это значение можно уменьшить или увеличить, используя кнопки со стрелками или введя в поле нужное значение. Позиция - используется, чтобы задать пользовательские позиции табуляции. Введите в этом поле нужное значение, настройте его более точно, используя кнопки со стрелками, и нажмите на кнопку Задать. Пользовательская позиция табуляции будет добавлена в список в расположенном ниже поле. Выравнивание - используется, чтобы задать нужный тип выравнивания для каждой из позиций табуляции в расположенном выше списке. Выделите нужную позицию табуляции в списке, выберите в выпадающем списке Выравнивание опцию По левому краю, По центру или По правому краю и нажмите на кнопку Задать. По левому краю - выравнивает текст по левому краю относительно позиции табуляции; при наборе текст движется вправо от позиции табуляции. Такая позиция табуляции будет обозначена на горизонтальной линейке маркером . По центру - центрирует текст относительно позиции табуляции. Такая позиция табуляции будет обозначена на горизонтальной линейке маркером . По правому краю - выравнивает текст по правому краю относительно позиции табуляции; при наборе текст движется влево от позиции табуляции. Такая позиция табуляции будет обозначена на горизонтальной линейке маркером . Для удаления позиций табуляции из списка выделите позицию табуляции и нажмите кнопку Удалить или Удалить все. Для установки позиций табуляции можно также использовать горизонтальную линейку: Выберите нужный тип позиции табуляции, нажав на кнопку в левом верхнем углу рабочей области: По левому краю , По центру , По правому краю . Щелкните по нижнему краю линейки в том месте, где требуется установить позицию табуляции. Для изменения местоположения позиции табуляции перетащите ее по линейке. Для удаления добавленной позиции табуляции перетащите ее за пределы линейки. Примечание: если вы не видите линеек, перейдите на вкладку Главная верхней панели инструментов, щелкните по значку Параметры представления в правом верхнем углу и снимите отметку с опции Скрыть линейки, чтобы отобразить их. Изменение стиля объекта Text Art Выделите текстовый объект и щелкните по значку Параметры объектов Text Art на правой боковой панели. Измените примененный стиль текста, выбрав из галереи новый Шаблон. Можно также дополнительно изменить этот базовый стиль, выбрав другой тип, размер шрифта и т.д. Измените заливку и контур шрифта. Доступны точно такие же опции, как и для автофигур. Примените текстовый эффект, выбрав нужный тип трансформации текста из галереи Трансформация. Можно скорректировать степень искривления текста, перетаскивая розовый маркер в форме ромба." }, { "id": "UsageInstructions/ManageSlides.htm", diff --git a/apps/spreadsheeteditor/main/resources/help/en/Functions/xlookup.htm b/apps/spreadsheeteditor/main/resources/help/en/Functions/xlookup.htm index 5def33286..f54a04a73 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/Functions/xlookup.htm +++ b/apps/spreadsheeteditor/main/resources/help/en/Functions/xlookup.htm @@ -18,11 +18,11 @@

    The XLOOKUP function syntax is:

    XLOOKUP (lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])

    where

    -

    lookup-value is a value to search for.

    +

    lookup_value is a value to search for.

    lookup_array is an array or range to search in.

    return_array is an array or range to return the results to.

    if_not_found is an optional argument. If there is no search result, the argument returns the text stated in [if_not_found]. In case the text is not specified, the “N/A” is returned.

    -

    match_mode is an optional argument. +

    match_mode is an optional argument. The following values are available:

    • 0 (set by default) returns the exact match; if there is no match, the “N/A” is returned instead.
    • -1 returns the exact match; if there is none, the next smaller item is returned.
    • @@ -30,7 +30,7 @@
    • 2 is a wildcard match.

    -

    search_mode is an optional argument. +

    search_mode is an optional argument. The following values are available:

    • 1 starts a search at the first item (set by default).
    • -1 starts a reverse search, i.e. at the last item.
    • @@ -51,7 +51,7 @@
    • select the Lookup and Reference function group from the list,
    • click the XLOOKUP function,
    • -
    • enter the required arguments separating them by comma,
    • +
    • enter the required arguments in the Function Arguments window,
    • press the Enter button.
    • The result will be displayed in the selected cell.

      diff --git a/apps/spreadsheeteditor/main/resources/help/en/HelpfulHints/About.htm b/apps/spreadsheeteditor/main/resources/help/en/HelpfulHints/About.htm index 2d6244d98..a3b80ed43 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/HelpfulHints/About.htm +++ b/apps/spreadsheeteditor/main/resources/help/en/HelpfulHints/About.htm @@ -16,7 +16,7 @@

      About Spreadsheet Editor

      The Spreadsheet Editor is an online application that allows you to edit spreadsheets directly in your browser.

      Using the Spreadsheet Editor, you can perform various editing operations like in any desktop editor, print the edited spreadsheets keeping all the formatting details or download them onto your computer hard disk drive as XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS file.

      -

      To view the current version of the software and licensor details in the online version, click the About About icon icon on the left sidebar. To view the current version of the software and licensor details in the desktop version, select the About menu item on the left sidebar of the main program window.

      +

      To view the current version of the software and licensor details in the online version, click the About About icon icon on the left sidebar. To view the current version of the software and licensor details in the desktop version for Windows, select the About menu item on the left sidebar of the main program window. In the desktop version for Mac OS, open the ONLYOFFICE menu at the top of the screen and select the About ONLYOFFICE menu item.

      \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/AlignText.htm b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/AlignText.htm index fb6601d52..c2de0a497 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/AlignText.htm +++ b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/AlignText.htm @@ -15,41 +15,53 @@

      Align data in cells

      In the Spreadsheet Editor, you can align data horizontally and vertically or even rotate data within a cell. To do that, select a cell or a cell range with the mouse or the whole worksheet by pressing the Ctrl+A key combination. You can also select multiple non-adjacent cells or cell ranges holding down the Ctrl key while selecting cells/ranges with the mouse. Then perform one of the following operations using the icons situated on the Home tab of the top toolbar.

      -
        -
      • Apply one of the horizontal alignment styles to the data within a cell, -
          -
        • click the Align left Align left icon icon to align the data to the left side of the cell (the right side remains unaligned);
        • -
        • click the Align center Align center icon icon to align the data in the center of the cell (the right and the left sides remains unaligned);
        • -
        • click the Align right Align right icon icon to align the data to the right side of the cell (the left side remains unaligned);
        • -
        • click the Justified Justified icon icon to align the data both to the left and the right sides of the cell (additional spacing is added where necessary to keep the alignment).
        • -
        -
      • -
      • Change the vertical alignment of the data within a cell, -
          -
        • click the Align top Align top icon icon to align your data to the top of the cell;
        • -
        • click the Align middle Align middle icon icon to align your data to the middle of the cell;
        • -
        • click the Align bottom Align bottom icon icon to align your data to the bottom of the cell.
        • -
        -
      • -
      • Change the angle of the data within a cell by clicking the Orientation Orientation icon icon and choosing one of the following options: -
          -
        • use the Horizontal Text Horizontal Text icon option to place the text horizontally (default option),
        • -
        • use the Angle Counterclockwise Angle Counterclockwise option to place the text from the bottom left corner to the top right corner of a cell,
        • -
        • use the Angle Clockwise Angle Clockwise option to place the text from the top left corner to the bottom right corner of a cell,
        • -
        • use the Vertical text Rotate Text Up option to place the text vertically,
        • -
        • use the Rotate Text Up Rotate Text Up option to place the text from bottom to top of a cell,
        • -
        • use the Rotate Text Down Rotate Text Down option to place the text from top to bottom of a cell. +
            +
          • + Apply one of the horizontal alignment styles to the data within a cell, +
              +
            • click the Align left Align left icon icon to align the data to the left side of the cell (the right side remains unaligned);
            • +
            • click the Align center Align center icon icon to align the data in the center of the cell (the right and the left sides remains unaligned);
            • +
            • click the Align right Align right icon icon to align the data to the right side of the cell (the left side remains unaligned);
            • +
            • click the Justified Justified icon icon to align the data both to the left and the right sides of the cell (additional spacing is added where necessary to keep the alignment).
            • +
            +
          • +
          • + Change the vertical alignment of the data within a cell, +
              +
            • click the Align top Align top icon icon to align your data to the top of the cell;
            • +
            • click the Align middle Align middle icon icon to align your data to the middle of the cell;
            • +
            • click the Align bottom Align bottom icon icon to align your data to the bottom of the cell.
            • +
            +
          • +
          • + Change the angle of the data within a cell by clicking the Orientation Orientation icon icon and choosing one of the following options: +
              +
            • use the Horizontal Text Horizontal Text icon option to place the text horizontally (default option),
            • +
            • use the Angle Counterclockwise Angle Counterclockwise option to place the text from the bottom left corner to the top right corner of a cell,
            • +
            • use the Angle Clockwise Angle Clockwise option to place the text from the top left corner to the bottom right corner of a cell,
            • +
            • use the Vertical text Rotate Text Up option to place the text vertically,
            • +
            • use the Rotate Text Up Rotate Text Up option to place the text from bottom to top of a cell,
            • +
            • + use the Rotate Text Down Rotate Text Down option to place the text from top to bottom of a cell.
            • -
            -
          • -

            Cell Settings

            -
          • Indent text within a cell using the Indent section on the Cell Settings right sidebar. Specify the value (i.e. the number of characters) by which the contents will be moved to the right.
          • -
          • Rotate the text by an exactly specified angle, click the Cell settings Cell settings icon icon on the right sidebar and use the Orientation. Enter the necessary value measured in degrees into the Angle field or adjust it using the arrows on the right.
          • -
          • Fit your data to the column width by clicking the Wrap text Wrap text icon icon on the Home tab of the top toolbar or by checking the Wrap text checkbox on the right sidebar. -

            Note: if you change the column width, data wrapping adjusts automatically. -

          • -
          • Fit your data to the cell width by checking the Shrink to fit checkbox on the right sidebar. The contents of the cell will be reduced in size to such an extent that it can fit in it.
          • -
          +
        +
      • +
      +

      Cell Settings

      +
        +
      • + Indent text within a cell using the Indent section on the Cell Settings right sidebar. Specify the value (i.e. the number of characters) by which the contents will be moved to the right. +

        If you change the orientation of the text, indents will be reset. If you change indents for the rotated text, the orientation of the text will be reset. Indents can only be set if the horizontal or vertical text orientation is selected.

        +
      • +
      • + Rotate the text by an exactly specified angle, click the Cell settings Cell settings icon icon on the right sidebar and use the Orientation. Enter the necessary value measured in degrees into the Angle field or adjust it using the arrows on the right. +
      • +
      • + Fit your data to the column width by clicking the Wrap text Wrap text icon icon on the Home tab of the top toolbar or by checking the Wrap text checkbox on the right sidebar. +

        If you change the column width, data wrapping adjusts automatically.

        +
      • +
      • Fit your data to the cell width by checking the Shrink to fit checkbox on the right sidebar. The contents of the cell will be reduced in size to such an extent that it can fit in it.
      • +
      diff --git a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/PivotTables.htm b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/PivotTables.htm index 8ff449fb5..95fe05a28 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/PivotTables.htm +++ b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/PivotTables.htm @@ -150,6 +150,12 @@
    • By - set the required interval for grouping numbers. E.g., “2” will group the set of numbers from 1 through 10 as “1-2”, “3-4”, etc.
    • Click OK when finished.
    +

    Ungrouping data

    +

    To ungroup previously grouped data,

    +
      +
    1. right-click any cell that is in the group,
    2. +
    3. select the Ungroup option in the context menu.
    4. +

    Change the appearance of pivot tables

    You can use options available on the top toolbar to adjust the way your pivot table is displayed. These options are applied to the entire pivot table.

    diff --git a/apps/spreadsheeteditor/main/resources/help/en/search/indexes.js b/apps/spreadsheeteditor/main/resources/help/en/search/indexes.js index eaa2c0ae0..50f68c2e2 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/search/indexes.js +++ b/apps/spreadsheeteditor/main/resources/help/en/search/indexes.js @@ -2258,7 +2258,7 @@ var indexes = { "id": "Functions/xlookup.htm", "title": "XLOOKUP Function", - "body": "The XLOOKUP function is one of the lookup and reference functions. It is used to perform the search for a specific item by row both horizontally and vertically. The result is returned in another column and can accommodate two-dimensional datasets. The XLOOKUP function syntax is: XLOOKUP (lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]) where lookup-value is a value to search for. lookup_array is an array or range to search in. return_array is an array or range to return the results to. if_not_found is an optional argument. If there is no search result, the argument returns the text stated in [if_not_found]. In case the text is not specified, the “N/A” is returned. match_mode is an optional argument. 0 (set by default) returns the exact match; if there is no match, the “N/A” is returned instead. -1 returns the exact match; if there is none, the next smaller item is returned. 1 returns the exact match; if there is none, the next larger item is returned. 2 is a wildcard match. search_mode is an optional argument. 1 starts a search at the first item (set by default). -1 starts a reverse search, i.e. at the last item. 2 starts a binary search with the lookup_array sorted in ascending order. If not sorted, invalid results will be returned. -2 starts a binary search with the lookup_array sorted in descending order. If not sorted, invalid results will be returned. Wildcard characters include the question mark (?) that matches a single character and the asterisk (*) that matches multiple characters. If you want to find a question mark or asterisk, type a tilde (~) before the character. To apply the XLOOKUP function, select the cell where you wish to display the result, click the Insert function icon situated at the top toolbar, or right-click within a selected cell and select the Insert Function option from the menu, or click the icon situated at the formula bar, select the Lookup and Reference function group from the list, click the XLOOKUP function, enter the required arguments separating them by comma, press the Enter button. The result will be displayed in the selected cell." + "body": "The XLOOKUP function is one of the lookup and reference functions. It is used to perform the search for a specific item by row both horizontally and vertically. The result is returned in another column and can accommodate two-dimensional datasets. The XLOOKUP function syntax is: XLOOKUP (lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]) where lookup_value is a value to search for. lookup_array is an array or range to search in. return_array is an array or range to return the results to. if_not_found is an optional argument. If there is no search result, the argument returns the text stated in [if_not_found]. In case the text is not specified, the “N/A” is returned. match_mode is an optional argument. The following values are available: 0 (set by default) returns the exact match; if there is no match, the “N/A” is returned instead. -1 returns the exact match; if there is none, the next smaller item is returned. 1 returns the exact match; if there is none, the next larger item is returned. 2 is a wildcard match. search_mode is an optional argument. The following values are available: 1 starts a search at the first item (set by default). -1 starts a reverse search, i.e. at the last item. 2 starts a binary search with the lookup_array sorted in ascending order. If not sorted, invalid results will be returned. -2 starts a binary search with the lookup_array sorted in descending order. If not sorted, invalid results will be returned. Wildcard characters include the question mark (?) that matches a single character and the asterisk (*) that matches multiple characters. If you want to find a question mark or asterisk, type a tilde (~) before the character. To apply the XLOOKUP function, select the cell where you wish to display the result, click the Insert function icon situated at the top toolbar, or right-click within a selected cell and select the Insert Function option from the menu, or click the icon situated at the formula bar, select the Lookup and Reference function group from the list, click the XLOOKUP function, enter the required arguments in the Function Arguments window, press the Enter button. The result will be displayed in the selected cell." }, { "id": "Functions/xnpv.htm", @@ -2308,7 +2308,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "About Spreadsheet Editor", - "body": "The Spreadsheet Editor is an online application that allows you to edit spreadsheets directly in your browser . Using the Spreadsheet Editor, you can perform various editing operations like in any desktop editor, print the edited spreadsheets keeping all the formatting details or download them onto your computer hard disk drive as XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS file. To view the current version of the software and licensor details in the online version, click the About icon on the left sidebar. To view the current version of the software and licensor details in the desktop version, select the About menu item on the left sidebar of the main program window." + "body": "The Spreadsheet Editor is an online application that allows you to edit spreadsheets directly in your browser . Using the Spreadsheet Editor, you can perform various editing operations like in any desktop editor, print the edited spreadsheets keeping all the formatting details or download them onto your computer hard disk drive as XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS file. To view the current version of the software and licensor details in the online version, click the About icon on the left sidebar. To view the current version of the software and licensor details in the desktop version for Windows, select the About menu item on the left sidebar of the main program window. In the desktop version for Mac OS, open the ONLYOFFICE menu at the top of the screen and select the About ONLYOFFICE menu item." }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -2423,7 +2423,7 @@ var indexes = { "id": "UsageInstructions/AlignText.htm", "title": "Align data in cells", - "body": "In the Spreadsheet Editor, you can align data horizontally and vertically or even rotate data within a cell. To do that, select a cell or a cell range with the mouse or the whole worksheet by pressing the Ctrl+A key combination. You can also select multiple non-adjacent cells or cell ranges holding down the Ctrl key while selecting cells/ranges with the mouse. Then perform one of the following operations using the icons situated on the Home tab of the top toolbar. Apply one of the horizontal alignment styles to the data within a cell, click the Align left icon to align the data to the left side of the cell (the right side remains unaligned); click the Align center icon to align the data in the center of the cell (the right and the left sides remains unaligned); click the Align right icon to align the data to the right side of the cell (the left side remains unaligned); click the Justified icon to align the data both to the left and the right sides of the cell (additional spacing is added where necessary to keep the alignment). Change the vertical alignment of the data within a cell, click the Align top icon to align your data to the top of the cell; click the Align middle icon to align your data to the middle of the cell; click the Align bottom icon to align your data to the bottom of the cell. Change the angle of the data within a cell by clicking the Orientation icon and choosing one of the following options: use the Horizontal Text option to place the text horizontally (default option), use the Angle Counterclockwise option to place the text from the bottom left corner to the top right corner of a cell, use the Angle Clockwise option to place the text from the top left corner to the bottom right corner of a cell, use the Vertical text option to place the text vertically, use the Rotate Text Up option to place the text from bottom to top of a cell, use the Rotate Text Down option to place the text from top to bottom of a cell. Indent text within a cell using the Indent section on the Cell Settings right sidebar. Specify the value (i.e. the number of characters) by which the contents will be moved to the right. Rotate the text by an exactly specified angle, click the Cell settings icon on the right sidebar and use the Orientation. Enter the necessary value measured in degrees into the Angle field or adjust it using the arrows on the right. Fit your data to the column width by clicking the Wrap text icon on the Home tab of the top toolbar or by checking the Wrap text checkbox on the right sidebar. Note: if you change the column width, data wrapping adjusts automatically. Fit your data to the cell width by checking the Shrink to fit checkbox on the right sidebar. The contents of the cell will be reduced in size to such an extent that it can fit in it." + "body": "In the Spreadsheet Editor, you can align data horizontally and vertically or even rotate data within a cell. To do that, select a cell or a cell range with the mouse or the whole worksheet by pressing the Ctrl+A key combination. You can also select multiple non-adjacent cells or cell ranges holding down the Ctrl key while selecting cells/ranges with the mouse. Then perform one of the following operations using the icons situated on the Home tab of the top toolbar. Apply one of the horizontal alignment styles to the data within a cell, click the Align left icon to align the data to the left side of the cell (the right side remains unaligned); click the Align center icon to align the data in the center of the cell (the right and the left sides remains unaligned); click the Align right icon to align the data to the right side of the cell (the left side remains unaligned); click the Justified icon to align the data both to the left and the right sides of the cell (additional spacing is added where necessary to keep the alignment). Change the vertical alignment of the data within a cell, click the Align top icon to align your data to the top of the cell; click the Align middle icon to align your data to the middle of the cell; click the Align bottom icon to align your data to the bottom of the cell. Change the angle of the data within a cell by clicking the Orientation icon and choosing one of the following options: use the Horizontal Text option to place the text horizontally (default option), use the Angle Counterclockwise option to place the text from the bottom left corner to the top right corner of a cell, use the Angle Clockwise option to place the text from the top left corner to the bottom right corner of a cell, use the Vertical text option to place the text vertically, use the Rotate Text Up option to place the text from bottom to top of a cell, use the Rotate Text Down option to place the text from top to bottom of a cell. Indent text within a cell using the Indent section on the Cell Settings right sidebar. Specify the value (i.e. the number of characters) by which the contents will be moved to the right. If you change the orientation of the text, indents will be reset. If you change indents for the rotated text, the orientation of the text will be reset. Indents can only be set if the horizontal or vertical text orientation is selected. Rotate the text by an exactly specified angle, click the Cell settings icon on the right sidebar and use the Orientation. Enter the necessary value measured in degrees into the Angle field or adjust it using the arrows on the right. Fit your data to the column width by clicking the Wrap text icon on the Home tab of the top toolbar or by checking the Wrap text checkbox on the right sidebar. If you change the column width, data wrapping adjusts automatically. Fit your data to the cell width by checking the Shrink to fit checkbox on the right sidebar. The contents of the cell will be reduced in size to such an extent that it can fit in it." }, { "id": "UsageInstructions/ChangeNumberFormat.htm", @@ -2548,7 +2548,7 @@ var indexes = { "id": "UsageInstructions/PivotTables.htm", "title": "Create and edit pivot tables", - "body": "Pivot tables allow you to group and arrange data of large data sets to get summarized information. In the Spreadsheet Editor you can reorganize data in many different ways to display only the necessary information and focus on important aspects. Create a new pivot table To create a pivot table, Prepare the source data set you want to use for creating a pivot table. It should include column headers. The data set should not contain empty rows or columns. Select any cell within the source data range. Switch to the Pivot Table tab of the top toolbar and click the Insert Table icon. If you want to create a pivot table on the base of a formatted table, you can also use the Insert pivot table option on the Table settings tab of the right sidebar. The Create Pivot Table window will appear. The Source data range is already specified. In this case, all data from the source data range will be used. If you want to change the data range (e.g. to include only a part of source data), click the icon. In the Select Data Range window, enter the necessary data range in the following format: Sheet1!$A$1:$E$10. You can also select the necessary cell range on the sheet using the mouse. When ready, click OK. Specify where you want to place the pivot table. The New worksheet option is selected by default. It allows you to place the pivot table in a new worksheet. You can also select the Existing worksheet option and choose a certain cell. In this case, the selected cell will be the upper right cell of the created pivot table. To select a cell, click the icon. In the Select Data Range window, enter the cell address in the following format: Sheet1!$G$2. You can also click the necessary cell in the sheet. When ready, click OK. When you select the pivot table location, click OK in the Create Table window. An empty pivot table will be inserted in the selected location. The Pivot table settings tab on the right sidebar will be opened. You can hide or display this tab by clicking the icon. Select fields to display The Select Fields section contains the fields named according to the column headers in your source data set. Each field contains values from the corresponding column of the source table. The following four sections are available below: Filters, Columns, Rows, and Values. Check the fields you want to display in the pivot table. When you check a field, it will be added to one of the available sections on the right sidebar depending on the data type and will be displayed in the pivot table. Fields containing text values will be added to the Rows section; fields containing numeric values will be added to the Values section. You can simply drag fields to the necessary section as well as drag the fields between sections to quickly reorganize your pivot table. To remove a field from the current section, drag it out of this section. In order to add a field to the necessary section, it's also possible to click the black arrow to the right of a field in the Select Fields section and choose the necessary option from the menu: Add to Filters, Add to Rows, Add to Columns, Add to Values. Below you can see some examples of using the Filters, Columns, Rows, and Values sections. If you add a field to the Filters section, a separate filter will be added above the pivot table. It will be applied to the entire pivot table. If you click the drop-down arrow in the added filter, you'll see the values from the selected field. When you uncheck some values in the filter option window and click OK, the unchecked values will not be displayed in the pivot table. If you add a field to the Columns section, the pivot table will contain a number of columns equal to the number of values from the selected field. The Grand Total column will also be added. If you add a field to the Rows section, the pivot table will contain a number of rows equal to the number of values from the selected field. The Grand Total row will also be added. If you add a field to the Values section, the pivot table will display the summation value for all numeric values from the selected field. If the field contains text values, the count of values will be displayed. The function used to calculate the summation value can be changed in the field settings. Rearrange fields and adjust their properties Once the fields are added to the necessary sections, you can manage them to change the layout and format of the pivot table. Click the black arrow to the right of a field within the Filters, Columns, Rows, or Values sections to access the field context menu. It allows you to: Move the selected field Up, Down, to the Beginning, or to the End of the current section if you have added more than one field to the current section. Move the selected field to a different section - to Filters, Columns, Rows, or Values. The option that corresponds to the current section will be disabled. Remove the selected field from the current section. Adjust the selected field settings. The Filters, Columns, and Rows field settings look similarly: The Layout tab contains the following options: The Source name option allows you to view the field name corresponding to the column header from the source data set. The Custom name option allows you to change the name of the selected field displayed in the pivot table. The Report Form section allows you to change the way the selected field is displayed in the pivot table: Choose the necessary layout for the selected field in the pivot table: The Tabular form displays one column for each field and provides space for field headers. The Outline form displays one column for each field and provides space for field headers. It also allows you to display subtotals at the top of groups. The Compact form displays items from different row section fields in a single column. The Repeat items labels at each row option allows you to visually group rows or columns together if you have multiple fields in the tabular form. The Insert blank rows after each item option allows you to add blank lines after items of the selected field. The Show subtotals option allows you to choose if you want to display subtotals for the selected field. You can select one of the options: Show at top of group or Show at bottom of group. The Show items with no data option allows you to show or hide blank items in the selected field. The Subtotals tab allows you to choose Functions for Subtotals. Check the necessary functions in the list: Sum, Count, Average, Max, Min, Product, Count Numbers, StdDev, StdDevp, Var, Varp. Values field settings The Source name option allows you to view the field name corresponding to the column header from the source data set. The Custom name option allows you to change the name of the selected field displayed in the pivot table. The Summarize value field by list allows you to choose the function used to calculate the summation value for all values from this field. By default, Sum is used for numeric values, Count is used for text values. The available functions are Sum, Count, Average, Max, Min, Product, Count Numbers, StdDev, StdDevp, Var, Varp. Group and ungroup data Data in pivot tables can be grouped according to custom requirements. Grouping is available for dates and basic numbers. Grouping dates To group dates, create a pivot table incorporating a set of needed dates. Right click any cell in a pivot table with a date, choose the Group option in the pop-up menu, and set the needed parameters in the opened window. Starting at - the first date in the source data is chosen by default. To change it, enter the needed date in this field. Deactivate this box to ignore the starting point. Ending at - the last date in the source data is chosen by default. To change it, enter the needed date in this field. Deactivate this box to ignore the ending point. By - the Seconds, Minutes, and Hours options group the data according to the time given in the source data. The Months option eliminates days and leaves months only. The Quarters option operates at a condition: four months constitute a quarter, thus providing Qtr1, Qtr2, etc. The Years option groups dates as per years given in the source data. Combine the options to achieve the needed result. Number of days - set the required value to determine a date range. Click OK when finished. Grouping numbers To group numbers, create a pivot table incorporating a set of needed numbers. Right click any cell in a pivot table with a number, choose the Group option in the pop-up menu, and set the needed parameters in the opened window. Starting at - the smallest number in the source data is chosen by default. To change it, enter the needed number in this field. Deactivate this box to ignore the smallest number. Ending at - the largest number in the source data is chosen by default. To change it, enter the needed number in this field. Deactivate this box to ignore the largest number. By - set the required interval for grouping numbers. E.g., “2” will group the set of numbers from 1 through 10 as “1-2”, “3-4”, etc. Click OK when finished. Change the appearance of pivot tables You can use options available on the top toolbar to adjust the way your pivot table is displayed. These options are applied to the entire pivot table. Select at least one cell within the pivot table with the mouse to activate the editing tools on the top toolbar. The Report Layout drop-down list allows you to choose the necessary layout for your pivot table: Show in Compact Form - allows you to display items from different row section fields in a single column. Show in Outline Form - allows you to display the pivot table in the classic pivot table style. It displays one column for each field and provides space for field headers. It also allows you to display subtotals at the top of groups. Show in Tabular Form - allows you to display the pivot table in a traditional table format. It displays one column for each field and provides space for field headers. Repeat All Item Labels - allows you to visually group rows or columns together if you have multiple fields in the tabular form. Don't Repeat All Item Labels - allows you to hide item labels if you have multiple fields in the tabular form. The Blank Rows drop-down list allows you to choose if you want to display blank lines after items: Insert Blank Line after Each Item - allows you to add blank lines after items. Remove Blank Line after Each Item - allows you to remove the added blank lines. The Subtotals drop-down list allows you to choose if you want to display subtotals in the pivot table: Don't Show Subtotals - allows you to hide subtotals for all items. Show all Subtotals at Bottom of Group - allows you to display subtotals below the subtotaled rows. Show all Subtotals at Top of Group - allows you to display subtotals above the subtotaled rows. The Grand Totals drop-down list allows you to choose if you want to display grand totals in the pivot table: Off for Rows and Columns - allows you to hide grand totals for both rows and columns. On for Rows and Columns - allows you to display grand totals for both rows and columns. On for Rows Only - allows you to display grand totals for rows only. On for Columns Only - allows you to display grand totals for columns only. Note: the similar settings are also available in the pivot table advanced settings window in the Grand Totals section of the Name and Layout tab. The Select button allows you to select the entire pivot table. If you change the data in your source data set, select the pivot table and click the Refresh button to update the pivot table. Change the style of pivot tables You can change the appearance of pivot tables in a spreadsheet using the style editing tools available on the top toolbar. Select at least one cell within the pivot table with the mouse to activate the editing tools on the top toolbar. The rows and columns options allow you to emphasize certain rows/columns applying specific formatting to them, or highlight different rows/columns with different background colors to clearly distinguish them. The following options are available: Row Headers - allows you to highlight the row headers with special formatting. Column Headers - allows you to highlight the column headers with special formatting. Banded Rows - enables the background color alternation for odd and even rows. Banded Columns - enables the background color alternation for odd and even columns. The template list allows you to choose one of the predefined pivot table styles. Each template combines certain formatting parameters, such as a background color, border style, row/column banding, etc. Depending on the options checked for rows and columns, the templates set will be displayed differently. For example, if you've checked the Row Headers and Banded Columns options, the displayed templates list will include only templates with the row headers highlighted and banded columns enabled. Filter, sort and add slicers in pivot tables You can filter pivot tables by labels or values and use the additional sort parameters. Filtering Click the drop-down arrow in the Row Labels or Column Labels of the pivot table. The Filter option list will open: Adjust the filter parameters. You can proceed in one of the following ways: select the data to display or filter the data by certain criteria. Select the data to display Uncheck the boxes near the data you need to hide. For your convenience, all the data within the Filter option list are sorted in ascending order. Note: the (blank) checkbox corresponds to the empty cells. It is available if the selected cell range contains at least one empty cell. To facilitate the process, make use of the search field on the top. Enter your query, entirely or partially, in the field - the values that include these characters will be displayed in the list below. The following two options will be also available: Select All Search Results - is checked by default. It allows selecting all the values that correspond to your query in the list. Add current selection to filter - if you check this box, the selected values will not be hidden when you apply the filter. After you select all the necessary data, click the OK button in the Filter option list to apply the filter. Filter data by certain criteria You can choose either the Label filter or the Value filter option on the right side of the Filter options list, and then select one of the options from the submenu: For the Label filter the following options are available: For texts: Equals..., Does not equal..., Begins with..., Does not begin with..., Ends with..., Does not end with..., Contains..., Does not contain... For numbers: Greater than..., Greater than or equal to..., Less than..., Less than or equal to..., Between, Not between. For the Value filter the following options are available: Equals..., Does not equal..., Greater than..., Greater than or equal to..., Less than..., Less than or equal to..., Between, Not between, Top 10. After you select one of the above options (apart from Top 10), the Label/Value Filter window will open. The corresponding field and criterion will be selected in the first and second drop-down lists. Enter the necessary value in the field on the right. Click OK to apply the filter. If you choose the Top 10 option from the Value filter option list, a new window will open: The first drop-down list allows choosing if you wish to display the highest (Top) or the lowest (Bottom) values. The second field allows specifying how many entries from the list or which percent of the overall entries number you want to display (you can enter a number from 1 to 500). The third drop-down list allows setting the units of measure: Item, Percent, or Sum. The fourth drop-down list displays the selected field name. Once the necessary parameters are set, click OK to apply the filter. The Filter button will appear in the Row Labels or Column Labels of the pivot table. It means that the filter is applied. Sorting You can sort your pivot table data using the sort options. Click the drop-down arrow in the Row Labels or Column Labels of the pivot table and then select Sort Lowest to Highest or Sort Highest to Lowest option from the submenu. The More Sort Options option allows you to open the Sort window where you can select the necessary sorting order - Ascending or Descending - and then select a certain field you want to sort. Adding slicers You can add slicers to filter data easier by displaying only what is needed. To learn more about slicers, please read the guide on creating slicers. Adjust pivot table advanced settings To change the advanced settings of the pivot table, use the Show advanced settings link on the right sidebar. The 'Pivot Table - Advanced Settings' window will open: The Name and Layout tab allows you to change the pivot table common properties. The Name option allows you to change the pivot table name. The Grand Totals section allows you to choose if you want to display grand totals in the pivot table. The Show for rows and Show for columns options are checked by default. You can uncheck either one of them or both these options to hide the corresponding grand totals from your pivot table. Note: the similar settings are available on the top toolbar in the Grand Totals menu. The Display fields in report filter area section allows you to adjust the report filters which appear when you add fields to the Filters section: The Down, then over option is used for column arrangement. It allows you to show the report filters across the column. The Over, then down option is used for row arrangement. It allows you to show the report filters across the row. The Report filter fields per column option allows you to select the number of filters to go in each column. The default value is set to 0. You can set the necessary numeric value. The Field Headers section allows you to choose if you want to display field headers in your pivot table. The Show field headers for rows and columns option is selected by default. Uncheck it to hide field headers from your pivot table. The Data Source tab allows you to change the data you wish to use to create the pivot table. Check the selected Data Range and modify it, if necessary. To do that, click the icon. In the Select Data Range window, enter the necessary data range in the following format: Sheet1!$A$1:$E$10. You can also select the necessary cell range in the sheet using the mouse. When ready, click OK. The Alternative Text tab allows specifying the Title and the Description which will be read to people with vision or cognitive impairments to help them better understand what information the pivot table contains. Delete a pivot table To delete a pivot table, Select the entire pivot table using the Select button on the top toolbar. Press the Delete key." + "body": "Pivot tables allow you to group and arrange data of large data sets to get summarized information. In the Spreadsheet Editor you can reorganize data in many different ways to display only the necessary information and focus on important aspects. Create a new pivot table To create a pivot table, Prepare the source data set you want to use for creating a pivot table. It should include column headers. The data set should not contain empty rows or columns. Select any cell within the source data range. Switch to the Pivot Table tab of the top toolbar and click the Insert Table icon. If you want to create a pivot table on the base of a formatted table, you can also use the Insert pivot table option on the Table settings tab of the right sidebar. The Create Pivot Table window will appear. The Source data range is already specified. In this case, all data from the source data range will be used. If you want to change the data range (e.g. to include only a part of source data), click the icon. In the Select Data Range window, enter the necessary data range in the following format: Sheet1!$A$1:$E$10. You can also select the necessary cell range on the sheet using the mouse. When ready, click OK. Specify where you want to place the pivot table. The New worksheet option is selected by default. It allows you to place the pivot table in a new worksheet. You can also select the Existing worksheet option and choose a certain cell. In this case, the selected cell will be the upper right cell of the created pivot table. To select a cell, click the icon. In the Select Data Range window, enter the cell address in the following format: Sheet1!$G$2. You can also click the necessary cell in the sheet. When ready, click OK. When you select the pivot table location, click OK in the Create Table window. An empty pivot table will be inserted in the selected location. The Pivot table settings tab on the right sidebar will be opened. You can hide or display this tab by clicking the icon. Select fields to display The Select Fields section contains the fields named according to the column headers in your source data set. Each field contains values from the corresponding column of the source table. The following four sections are available below: Filters, Columns, Rows, and Values. Check the fields you want to display in the pivot table. When you check a field, it will be added to one of the available sections on the right sidebar depending on the data type and will be displayed in the pivot table. Fields containing text values will be added to the Rows section; fields containing numeric values will be added to the Values section. You can simply drag fields to the necessary section as well as drag the fields between sections to quickly reorganize your pivot table. To remove a field from the current section, drag it out of this section. In order to add a field to the necessary section, it's also possible to click the black arrow to the right of a field in the Select Fields section and choose the necessary option from the menu: Add to Filters, Add to Rows, Add to Columns, Add to Values. Below you can see some examples of using the Filters, Columns, Rows, and Values sections. If you add a field to the Filters section, a separate filter will be added above the pivot table. It will be applied to the entire pivot table. If you click the drop-down arrow in the added filter, you'll see the values from the selected field. When you uncheck some values in the filter option window and click OK, the unchecked values will not be displayed in the pivot table. If you add a field to the Columns section, the pivot table will contain a number of columns equal to the number of values from the selected field. The Grand Total column will also be added. If you add a field to the Rows section, the pivot table will contain a number of rows equal to the number of values from the selected field. The Grand Total row will also be added. If you add a field to the Values section, the pivot table will display the summation value for all numeric values from the selected field. If the field contains text values, the count of values will be displayed. The function used to calculate the summation value can be changed in the field settings. Rearrange fields and adjust their properties Once the fields are added to the necessary sections, you can manage them to change the layout and format of the pivot table. Click the black arrow to the right of a field within the Filters, Columns, Rows, or Values sections to access the field context menu. It allows you to: Move the selected field Up, Down, to the Beginning, or to the End of the current section if you have added more than one field to the current section. Move the selected field to a different section - to Filters, Columns, Rows, or Values. The option that corresponds to the current section will be disabled. Remove the selected field from the current section. Adjust the selected field settings. The Filters, Columns, and Rows field settings look similarly: The Layout tab contains the following options: The Source name option allows you to view the field name corresponding to the column header from the source data set. The Custom name option allows you to change the name of the selected field displayed in the pivot table. The Report Form section allows you to change the way the selected field is displayed in the pivot table: Choose the necessary layout for the selected field in the pivot table: The Tabular form displays one column for each field and provides space for field headers. The Outline form displays one column for each field and provides space for field headers. It also allows you to display subtotals at the top of groups. The Compact form displays items from different row section fields in a single column. The Repeat items labels at each row option allows you to visually group rows or columns together if you have multiple fields in the tabular form. The Insert blank rows after each item option allows you to add blank lines after items of the selected field. The Show subtotals option allows you to choose if you want to display subtotals for the selected field. You can select one of the options: Show at top of group or Show at bottom of group. The Show items with no data option allows you to show or hide blank items in the selected field. The Subtotals tab allows you to choose Functions for Subtotals. Check the necessary functions in the list: Sum, Count, Average, Max, Min, Product, Count Numbers, StdDev, StdDevp, Var, Varp. Values field settings The Source name option allows you to view the field name corresponding to the column header from the source data set. The Custom name option allows you to change the name of the selected field displayed in the pivot table. The Summarize value field by list allows you to choose the function used to calculate the summation value for all values from this field. By default, Sum is used for numeric values, Count is used for text values. The available functions are Sum, Count, Average, Max, Min, Product, Count Numbers, StdDev, StdDevp, Var, Varp. Group and ungroup data Data in pivot tables can be grouped according to custom requirements. Grouping is available for dates and basic numbers. Grouping dates To group dates, create a pivot table incorporating a set of needed dates. Right click any cell in a pivot table with a date, choose the Group option in the pop-up menu, and set the needed parameters in the opened window. Starting at - the first date in the source data is chosen by default. To change it, enter the needed date in this field. Deactivate this box to ignore the starting point. Ending at - the last date in the source data is chosen by default. To change it, enter the needed date in this field. Deactivate this box to ignore the ending point. By - the Seconds, Minutes, and Hours options group the data according to the time given in the source data. The Months option eliminates days and leaves months only. The Quarters option operates at a condition: four months constitute a quarter, thus providing Qtr1, Qtr2, etc. The Years option groups dates as per years given in the source data. Combine the options to achieve the needed result. Number of days - set the required value to determine a date range. Click OK when finished. Grouping numbers To group numbers, create a pivot table incorporating a set of needed numbers. Right click any cell in a pivot table with a number, choose the Group option in the pop-up menu, and set the needed parameters in the opened window. Starting at - the smallest number in the source data is chosen by default. To change it, enter the needed number in this field. Deactivate this box to ignore the smallest number. Ending at - the largest number in the source data is chosen by default. To change it, enter the needed number in this field. Deactivate this box to ignore the largest number. By - set the required interval for grouping numbers. E.g., “2” will group the set of numbers from 1 through 10 as “1-2”, “3-4”, etc. Click OK when finished. Ungrouping data To ungroup previously grouped data, right-click any cell that is in the group, select the Ungroup option in the context menu. Change the appearance of pivot tables You can use options available on the top toolbar to adjust the way your pivot table is displayed. These options are applied to the entire pivot table. Select at least one cell within the pivot table with the mouse to activate the editing tools on the top toolbar. The Report Layout drop-down list allows you to choose the necessary layout for your pivot table: Show in Compact Form - allows you to display items from different row section fields in a single column. Show in Outline Form - allows you to display the pivot table in the classic pivot table style. It displays one column for each field and provides space for field headers. It also allows you to display subtotals at the top of groups. Show in Tabular Form - allows you to display the pivot table in a traditional table format. It displays one column for each field and provides space for field headers. Repeat All Item Labels - allows you to visually group rows or columns together if you have multiple fields in the tabular form. Don't Repeat All Item Labels - allows you to hide item labels if you have multiple fields in the tabular form. The Blank Rows drop-down list allows you to choose if you want to display blank lines after items: Insert Blank Line after Each Item - allows you to add blank lines after items. Remove Blank Line after Each Item - allows you to remove the added blank lines. The Subtotals drop-down list allows you to choose if you want to display subtotals in the pivot table: Don't Show Subtotals - allows you to hide subtotals for all items. Show all Subtotals at Bottom of Group - allows you to display subtotals below the subtotaled rows. Show all Subtotals at Top of Group - allows you to display subtotals above the subtotaled rows. The Grand Totals drop-down list allows you to choose if you want to display grand totals in the pivot table: Off for Rows and Columns - allows you to hide grand totals for both rows and columns. On for Rows and Columns - allows you to display grand totals for both rows and columns. On for Rows Only - allows you to display grand totals for rows only. On for Columns Only - allows you to display grand totals for columns only. Note: the similar settings are also available in the pivot table advanced settings window in the Grand Totals section of the Name and Layout tab. The Select button allows you to select the entire pivot table. If you change the data in your source data set, select the pivot table and click the Refresh button to update the pivot table. Change the style of pivot tables You can change the appearance of pivot tables in a spreadsheet using the style editing tools available on the top toolbar. Select at least one cell within the pivot table with the mouse to activate the editing tools on the top toolbar. The rows and columns options allow you to emphasize certain rows/columns applying specific formatting to them, or highlight different rows/columns with different background colors to clearly distinguish them. The following options are available: Row Headers - allows you to highlight the row headers with special formatting. Column Headers - allows you to highlight the column headers with special formatting. Banded Rows - enables the background color alternation for odd and even rows. Banded Columns - enables the background color alternation for odd and even columns. The template list allows you to choose one of the predefined pivot table styles. Each template combines certain formatting parameters, such as a background color, border style, row/column banding, etc. Depending on the options checked for rows and columns, the templates set will be displayed differently. For example, if you've checked the Row Headers and Banded Columns options, the displayed templates list will include only templates with the row headers highlighted and banded columns enabled. Filter, sort and add slicers in pivot tables You can filter pivot tables by labels or values and use the additional sort parameters. Filtering Click the drop-down arrow in the Row Labels or Column Labels of the pivot table. The Filter option list will open: Adjust the filter parameters. You can proceed in one of the following ways: select the data to display or filter the data by certain criteria. Select the data to display Uncheck the boxes near the data you need to hide. For your convenience, all the data within the Filter option list are sorted in ascending order. Note: the (blank) checkbox corresponds to the empty cells. It is available if the selected cell range contains at least one empty cell. To facilitate the process, make use of the search field on the top. Enter your query, entirely or partially, in the field - the values that include these characters will be displayed in the list below. The following two options will be also available: Select All Search Results - is checked by default. It allows selecting all the values that correspond to your query in the list. Add current selection to filter - if you check this box, the selected values will not be hidden when you apply the filter. After you select all the necessary data, click the OK button in the Filter option list to apply the filter. Filter data by certain criteria You can choose either the Label filter or the Value filter option on the right side of the Filter options list, and then select one of the options from the submenu: For the Label filter the following options are available: For texts: Equals..., Does not equal..., Begins with..., Does not begin with..., Ends with..., Does not end with..., Contains..., Does not contain... For numbers: Greater than..., Greater than or equal to..., Less than..., Less than or equal to..., Between, Not between. For the Value filter the following options are available: Equals..., Does not equal..., Greater than..., Greater than or equal to..., Less than..., Less than or equal to..., Between, Not between, Top 10. After you select one of the above options (apart from Top 10), the Label/Value Filter window will open. The corresponding field and criterion will be selected in the first and second drop-down lists. Enter the necessary value in the field on the right. Click OK to apply the filter. If you choose the Top 10 option from the Value filter option list, a new window will open: The first drop-down list allows choosing if you wish to display the highest (Top) or the lowest (Bottom) values. The second field allows specifying how many entries from the list or which percent of the overall entries number you want to display (you can enter a number from 1 to 500). The third drop-down list allows setting the units of measure: Item, Percent, or Sum. The fourth drop-down list displays the selected field name. Once the necessary parameters are set, click OK to apply the filter. The Filter button will appear in the Row Labels or Column Labels of the pivot table. It means that the filter is applied. Sorting You can sort your pivot table data using the sort options. Click the drop-down arrow in the Row Labels or Column Labels of the pivot table and then select Sort Lowest to Highest or Sort Highest to Lowest option from the submenu. The More Sort Options option allows you to open the Sort window where you can select the necessary sorting order - Ascending or Descending - and then select a certain field you want to sort. Adding slicers You can add slicers to filter data easier by displaying only what is needed. To learn more about slicers, please read the guide on creating slicers. Adjust pivot table advanced settings To change the advanced settings of the pivot table, use the Show advanced settings link on the right sidebar. The 'Pivot Table - Advanced Settings' window will open: The Name and Layout tab allows you to change the pivot table common properties. The Name option allows you to change the pivot table name. The Grand Totals section allows you to choose if you want to display grand totals in the pivot table. The Show for rows and Show for columns options are checked by default. You can uncheck either one of them or both these options to hide the corresponding grand totals from your pivot table. Note: the similar settings are available on the top toolbar in the Grand Totals menu. The Display fields in report filter area section allows you to adjust the report filters which appear when you add fields to the Filters section: The Down, then over option is used for column arrangement. It allows you to show the report filters across the column. The Over, then down option is used for row arrangement. It allows you to show the report filters across the row. The Report filter fields per column option allows you to select the number of filters to go in each column. The default value is set to 0. You can set the necessary numeric value. The Field Headers section allows you to choose if you want to display field headers in your pivot table. The Show field headers for rows and columns option is selected by default. Uncheck it to hide field headers from your pivot table. The Data Source tab allows you to change the data you wish to use to create the pivot table. Check the selected Data Range and modify it, if necessary. To do that, click the icon. In the Select Data Range window, enter the necessary data range in the following format: Sheet1!$A$1:$E$10. You can also select the necessary cell range in the sheet using the mouse. When ready, click OK. The Alternative Text tab allows specifying the Title and the Description which will be read to people with vision or cognitive impairments to help them better understand what information the pivot table contains. Delete a pivot table To delete a pivot table, Select the entire pivot table using the Select button on the top toolbar. Press the Delete key." }, { "id": "UsageInstructions/RemoveDuplicates.htm", diff --git a/apps/spreadsheeteditor/main/resources/help/fr/Functions/xlookup.htm b/apps/spreadsheeteditor/main/resources/help/fr/Functions/xlookup.htm index ed1df0098..1339bc034 100644 --- a/apps/spreadsheeteditor/main/resources/help/fr/Functions/xlookup.htm +++ b/apps/spreadsheeteditor/main/resources/help/fr/Functions/xlookup.htm @@ -22,7 +22,7 @@

    lookup_array est matrice ou plage à rechercher.

    return_array est matrice ou plage à renvoyer.

    if_not_found est un argument facultatif. Lorsqu'aucune résultat n'est trouvée, cet argument renvoie le texte [if_not_found] que vous définissez. Si le texte est manquant, la #N/A est renvoyée.

    -

    match_mode est un argument facultatif +

    match_mode est un argument facultatif. Les valeurs disponibles:

    • 0 (par défaut) renvoie une correspondance exacte, si aucune n'a été trouvée la #N/A est renvoyée.
    • -1 renvoie une correspondance exacte, si aucune information n'a été trouvée, l'élément le plus petit suivant est renvoyé.
    • @@ -30,7 +30,7 @@
    • 2 est une correspondance avec caractère générique.

    -

    search_mode est un argument facultatif. +

    search_mode est un argument facultatif. Les valeurs disponibles:

    • 1 la recherche est effectuée à partir du premier élément (valeurnpar défaut).
    • -1 une recherche inverse est effectuée, c-à-d à partir du dernier élément.
    • @@ -49,7 +49,7 @@
    • sélectionnez le groupe de fonctions Recherche et référence depuis la liste,
    • cliquez sur la fonction XLOOKUP,
    • -
    • insérez les arguments nécessaires en les séparant par des virgules,
    • +
    • saisissez les arguments requis dans la fenêtre Argument de formule,
    • appuyez sur la touche Entrée.
    • Le résultat s'affiche dans la cellule choisie.

      diff --git a/apps/spreadsheeteditor/main/resources/help/fr/HelpfulHints/About.htm b/apps/spreadsheeteditor/main/resources/help/fr/HelpfulHints/About.htm index 7b7939185..48271bc13 100644 --- a/apps/spreadsheeteditor/main/resources/help/fr/HelpfulHints/About.htm +++ b/apps/spreadsheeteditor/main/resources/help/fr/HelpfulHints/About.htm @@ -16,7 +16,7 @@

      À propos de Spreadsheet Editor

      Spreadsheet Editor est une application en ligne qui vous permet de parcourir et de modifier des feuilles de calcul dans votre navigateur.

      En utilisant Spreadsheet Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les feuilles de calcul modifiées en gardant la mise en forme ou les télécharger sur votre disque dur au format XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS.

      -

      Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône À propos L'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme.

      +

      Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône À propos L'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau pour Windows, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme. Dans la version de bureau pour Mac OS, accédez au menu ONLYOFFICE en haut de l'écran et sélectionnez l'élément de menu À propos d'ONLYOFFICE.

      \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/AlignText.htm b/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/AlignText.htm index 1dc280bfd..e184ae36b 100644 --- a/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/AlignText.htm +++ b/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/AlignText.htm @@ -15,41 +15,50 @@

      Aligner les données dans une cellule

      Dans Spreadsheet Editor, vous pouvez aligner vos données horizontalement ou verticalement ou même les faire pivoter dans une cellule.. sélectionnez une cellule ou une plage de cellules avec la souris ou la feuille de calcul entière en appuyant Ctrl+A sur le clavier, Remarque: vous pouvez également sélectionner plusieurs cellules ou plages non adjacentes en maintenant la touche Ctrl enfoncée tout en sélectionnant les cellules/plages à l'aide de la souris. Remarque: vous pouvez mettre en forme du texte à l'aide des icônes sous l'onglet Accueil de la barre d'outils supérieure.

      -
        -
      • Appliquez l'une des options d'alignement horizontal dans la cellule, -
          -
        • cliquez sur l'icône Aligner à gauche L'icône Aligner à gauche pour aligner les données sur le bord gauche de la cellule (le bord droit reste non aligné);
        • -
        • cliquez sur l'icône Aligner au centre L'icône Aligner au centre pour aligner les données par le centre de la cellule (les bords droit et gauche restent non alignés);
        • -
        • cliquez sur l'icône Aligner à droite L'icône Aligner à droite pour aligner les données sur le bord droit de la cellule (le bord gauche reste non aligné);
        • -
        • cliquez sur l'icône Justifié L'icône Justifié pour aligner vos données sur le bord gauche et droit de la cellule (un espacement supplémentaire est ajouté si nécessaire pour garder l'alignement).
        • -
        -
      • -
      • Changez l'alignement vertical des données dans la cellule, -
          -
        • cliquez sur l'icône Aligner en haut L'icône Aligner en haut pour aligner vos données sur le bord supérieur de la cellule;
        • -
        • cliquez sur l'icône Aligner au milieu L'icône Aligner au milieu pour aligner vos données au milieu de la cellule;
        • -
        • cliquez sur l'icône Aligner en bas L'icône Aligner en bas pour aligner vos données sur le bord inférieur de la cellule.
        • -
        -
      • -
      • Changez l'angle des données en cliquant sur l'icône Orientation L'icône Orientation et en choisissant l'une des options: -
          -
        • utilisez l'option Texte horizontal L'icône Texte horizontal pour positionner le texte à l'horizontale (par défaut),
        • -
        • utilisez l'option Rotation dans le sens inverse des aiguilles d'une montre Rotation dans le sens inverse des aiguilles d'une montre pour positionner le texte du coin inférieur gauche au coin supérieur droit d'une cellule,
        • -
        • utilisez l'option Rotation dans le sens des aiguilles d'une montre Rotation dans le sens des aiguilles d'une montre pour positionner le texte du coin supérieur gauche au coin inférieur droit d'une cellule,
        • -
        • utilisez l'option Texte vertical Rotation du texte vers le haut pour positionner le texte verticalement,
        • -
        • utilisez l'option Rotation du texte vers le haut Rotation du texte vers le haut pour positionner le texte de bas en haut d'une cellule,
        • -
        • utilisez l'option Rotation du texte vers le bas Rotation du texte vers le bas pour positionner le texte de haut en bas d'une cellule. +
            +
          • + Appliquez l'une des options d'alignement horizontal dans la cellule, +
              +
            • cliquez sur l'icône Aligner à gauche L'icône Aligner à gauche pour aligner les données sur le bord gauche de la cellule (le bord droit reste non aligné);
            • +
            • cliquez sur l'icône Aligner au centre L'icône Aligner au centre pour aligner les données par le centre de la cellule (les bords droit et gauche restent non alignés);
            • +
            • cliquez sur l'icône Aligner à droite L'icône Aligner à droite pour aligner les données sur le bord droit de la cellule (le bord gauche reste non aligné);
            • +
            • cliquez sur l'icône Justifié L'icône Justifié pour aligner vos données sur le bord gauche et droit de la cellule (un espacement supplémentaire est ajouté si nécessaire pour garder l'alignement).
            • +
            +
          • +
          • + Changez l'alignement vertical des données dans la cellule, +
              +
            • cliquez sur l'icône Aligner en haut L'icône Aligner en haut pour aligner vos données sur le bord supérieur de la cellule;
            • +
            • cliquez sur l'icône Aligner au milieu L'icône Aligner au milieu pour aligner vos données au milieu de la cellule;
            • +
            • cliquez sur l'icône Aligner en bas L'icône Aligner en bas pour aligner vos données sur le bord inférieur de la cellule.
            • +
            +
          • +
          • + Changez l'angle des données en cliquant sur l'icône Orientation L'icône Orientation et en choisissant l'une des options: +
              +
            • utilisez l'option Texte horizontal L'icône Texte horizontal pour positionner le texte à l'horizontale (par défaut),
            • +
            • utilisez l'option Rotation dans le sens inverse des aiguilles d'une montre Rotation dans le sens inverse des aiguilles d'une montre pour positionner le texte du coin inférieur gauche au coin supérieur droit d'une cellule,
            • +
            • utilisez l'option Rotation dans le sens des aiguilles d'une montre Rotation dans le sens des aiguilles d'une montre pour positionner le texte du coin supérieur gauche au coin inférieur droit d'une cellule,
            • +
            • utilisez l'option Texte vertical Rotation du texte vers le haut pour positionner le texte verticalement,
            • +
            • utilisez l'option Rotation du texte vers le haut Rotation du texte vers le haut pour positionner le texte de bas en haut d'une cellule,
            • +
            • + utilisez l'option Rotation du texte vers le bas Rotation du texte vers le bas pour positionner le texte de haut en bas d'une cellule.
            • -
            -
          • +
          +
        • +

        Paramètres de cellule

        -
      • Appliquez un retrait au contenu d'une cellule à l'aide de la section Retrait sur la barre latérale droite Paramètres de cellule. Définissez la valeur (c-à-d le nombre de caractères) de déplacer le contenu de cellule à gauche.
      • -
      • Pour faire pivoter le texte selon un angle exactement spécifié, cliquez sur l'icône Paramètres de cellule L'icône Paramètres de cellule dans la barre latérale de droite et utilisez l'Orientation. Entrez la valeur souhaitée mesurée en degrés dans le champ Angle ou réglez-la à l'aide des flèches situées à droite.
      • -
      • Adaptez vos données à la largeur de la colonne en cliquant sur l'icône Renvoyer à la ligne automatiquement L'icône Renvoyer à la ligne automatiquement sous l'onglet Accueil de la barre d'outil supérieure ou en activant la case à cocher Renvoyer à la ligne automatiquement sur la barre latérale droite. -

        Remarque: si vous modifiez la largeur de la colonne, les données seront automatiquement ajustées en conséquence. -

      • -
      • Adaptez vos données à la largeur de la cellule en activant Réduire pour ajuster sur la barre latérale droite. Le contenu de la cellule est réduit pour s'adapter à la largeur de la cellule.
      • -
      +
        +
      • Appliquez un retrait au contenu d'une cellule à l'aide de la section Retrait sur la barre latérale droite Paramètres de cellule. Définissez la valeur (c-à-d le nombre de caractères) de déplacer le contenu de cellule à gauche. +

        Les retraits sont réinitialisés lorsque vous modifier l'orientation du texte. Lorsque vous modifiez les retraits du texte pivoté, l'orientation du texte est réinitialisée. Il est possible de définir les retraits seulement si le texte est orienté horizontalement ou verticalement.

        +
      • +
      • Pour faire pivoter le texte selon un angle exactement spécifié, cliquez sur l'icône Paramètres de cellule L'icône Paramètres de cellule dans la barre latérale de droite et utilisez l'Orientation. Entrez la valeur souhaitée mesurée en degrés dans le champ Angle ou réglez-la à l'aide des flèches situées à droite.
      • +
      • + Adaptez vos données à la largeur de la colonne en cliquant sur l'icône Renvoyer à la ligne automatiquement L'icône Renvoyer à la ligne automatiquement sous l'onglet Accueil de la barre d'outil supérieure ou en activant la case à cocher Renvoyer à la ligne automatiquement sur la barre latérale droite. +

        Si vous modifiez la largeur de la colonne, les données seront automatiquement ajustées en conséquence.

        +
      • +
      • Adaptez vos données à la largeur de la cellule en activant Réduire pour ajuster sur la barre latérale droite. Le contenu de la cellule est réduit pour s'adapter à la largeur de la cellule.
      • +
      \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/PivotTables.htm b/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/PivotTables.htm index ea6c5384f..fdd236777 100644 --- a/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/PivotTables.htm +++ b/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/PivotTables.htm @@ -135,8 +135,8 @@
    • Commence à - la première date des données sources est définie par défaut. Pour la modifier, saisissez la date appropriée dans ce champ-là. Désactivez cette option pour ignorer le début.
    • Fin à - la dernière date des données sources est définie par défaut. Pour la modifier, saisissez la date appropriée dans ce champ-là. Désactivez cette option pour ignorer le fin.
    • Par - on peut grouper les dates par Secondes, Minutes et Heures selon l'heure spécifiée dans les données sources. L'option Mois enlève les jours et maintient uniquement les mois. L'option Quartiers fonctionne à la condition que quatre mois est un quartier, alors on fournit Qtr1, Qtr2, etc. L'option Années groupe les dates selon les années spécifiées dans les données source. Vous pouvez combiner plusieurs options pour obtenir le résultat souhaité,
    • -
    • Nombre de jours sert à définir la valeur appropriée pour spécifier une certaine période.
    • -
    • Cliquez sur OK pour valider.
    • +
    • Nombre de jours sert à définir la valeur appropriée pour spécifier une certaine période.
    • +
    • Cliquez sur OK pour valider.

    Grouper des nombres

    Pour grouper les nombres, créez un tableau croisé dynamique comprenant l'ensemble de nombres en question. Cliquez avec le bouton droit sur l'une des cellules comprenant un nombre dans le tableau croisé dynamique, choisissez l'option Grouper dans le menu contextuel et configurez les paramètres appropriés dans la fenêtre qui s'affiche.

    @@ -144,9 +144,15 @@
    • Commence à - le plus petit nombre des données sources est définie par défaut. Pour le modifier, saisissez le nombre approprié dans ce champ-là. Désactivez cette option pour ignorer le plus petit nombre.
    • Fin à - le plus grand nombre des données sources est définie par défaut. Pour le modifier, saisissez le nombre approprié dans ce champ-là. Désactivez cette option pour ignorer le plus grand nombre.
    • -
    • Par - définissez l'intervalle pour grouper des numéros: Ex., “2” va grouper l'ensemble de numéros de 1 à 10 comme “1-2”, “3-4”, etc.
    • -
    • Cliquez sur OK pour valider.
    • +
    • Par - définissez l'intervalle pour grouper des numéros: Ex., “2” va grouper l'ensemble de numéros de 1 à 10 comme “1-2”, “3-4”, etc.
    • +
    • Cliquez sur OK pour valider.
    +

    Dissocier des données

    +

    Pour dissocier des données groupées,

    +
      +
    1. cliquez avec le bouton droit sur une cellule du groupe,
    2. +
    3. sélectionnez l'option Dissocier dans le menu contextuel.
    4. +

    Modifier la disposition d'un tableau croisé dynamique

    Vous pouvez utiliser les options disponibles dans la barre d'outils supérieure pour modifier le format du tableau croisé dynamique. Ces paramètres sont appliquées au tableau croisé dynamique entier.

    diff --git a/apps/spreadsheeteditor/main/resources/help/fr/images/xlookup.png b/apps/spreadsheeteditor/main/resources/help/fr/images/xlookup.png new file mode 100644 index 0000000000000000000000000000000000000000..063d5c4c07d8a3e55d3122c5c359fceffa16ab02 GIT binary patch literal 30745 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 PU&J+?8`_nc4pILH_wLLG literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/help/fr/search/indexes.js b/apps/spreadsheeteditor/main/resources/help/fr/search/indexes.js index 01744688f..5587a5693 100644 --- a/apps/spreadsheeteditor/main/resources/help/fr/search/indexes.js +++ b/apps/spreadsheeteditor/main/resources/help/fr/search/indexes.js @@ -2258,7 +2258,7 @@ var indexes = { "id": "Functions/xlookup.htm", "title": "Fonction XLOOKUP", - "body": "La fonction XLOOKUP (RECHERCHEX) est l'une des fonctions de recherche et de référence. Elle est utilisée pour rechercher des éléments par ligne verticalement et horizontalement. Cette fonction permet de renvoyer un résultat dans une autre colonne et de prendre en charge des feuilles de calcul à deux dimensions. Le syntaxe de la fonction XLOOKUP: XLOOKUP (lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]) où: valeur_cherchée est une valeur à chercher. lookup_array est matrice ou plage à rechercher. return_array est matrice ou plage à renvoyer. if_not_found est un argument facultatif. Lorsqu'aucune résultat n'est trouvée, cet argument renvoie le texte [if_not_found] que vous définissez. Si le texte est manquant, la #N/A est renvoyée. match_mode est un argument facultatif 0 (par défaut) renvoie une correspondance exacte, si aucune n'a été trouvée la #N/A est renvoyée. -1 renvoie une correspondance exacte, si aucune information n'a été trouvée, l'élément le plus petit suivant est renvoyé. 1 renvoie une correspondance exacte, si aucune information n'a été trouvée, l'élément plus grand suivant est renvoyé. 2 est une correspondance avec caractère générique. search_mode est un argument facultatif. 1 la recherche est effectuée à partir du premier élément (valeurnpar défaut). -1 une recherche inverse est effectuée, c-à-d à partir du dernier élément. 2 une recherche binaire est effectuée quand lookup_array est triée dans l'ordre croissant. S'il n'est pas trié, des résultats non valides seront renvoyés. -2 une recherche binaire est effectuée quand lookup_array est triée dans l'ordre décroissant. S'il n'est pas trié, des résultats non valides seront renvoyés. Des caractères génériques sont (?) le point d'interrogation pour rechercher un seul caractère et (*) l'astérisque pour rechercher plusieurs caractères. Quand vous recherchez le point d'interrogation ou l'astérisque, saisissez un tilde (~) avant le caractère. Pour appliquer la fonction XLOOKUP, sélectionnez la cellule où vous voulez afficher le résultat, appuyez sur l'icône Insérer une fonction de la barre d'outils supérieure, ou cliquez avec le bouton droit sur la cellule et choisissez l'option Insérer une fonction dans le menu, ou cliquez sur l'icône de la barre de formule, sélectionnez le groupe de fonctions Recherche et référence depuis la liste, cliquez sur la fonction XLOOKUP, insérez les arguments nécessaires en les séparant par des virgules, appuyez sur la touche Entrée. Le résultat s'affiche dans la cellule choisie." + "body": "La fonction XLOOKUP (RECHERCHEX) est l'une des fonctions de recherche et de référence. Elle est utilisée pour rechercher des éléments par ligne verticalement et horizontalement. Cette fonction permet de renvoyer un résultat dans une autre colonne et de prendre en charge des feuilles de calcul à deux dimensions. Le syntaxe de la fonction XLOOKUP: XLOOKUP (lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]) où: valeur_cherchée est une valeur à chercher. lookup_array est matrice ou plage à rechercher. return_array est matrice ou plage à renvoyer. if_not_found est un argument facultatif. Lorsqu'aucune résultat n'est trouvée, cet argument renvoie le texte [if_not_found] que vous définissez. Si le texte est manquant, la #N/A est renvoyée. match_mode est un argument facultatif. Les valeurs disponibles: 0 (par défaut) renvoie une correspondance exacte, si aucune n'a été trouvée la #N/A est renvoyée. -1 renvoie une correspondance exacte, si aucune information n'a été trouvée, l'élément le plus petit suivant est renvoyé. 1 renvoie une correspondance exacte, si aucune information n'a été trouvée, l'élément plus grand suivant est renvoyé. 2 est une correspondance avec caractère générique. search_mode est un argument facultatif. Les valeurs disponibles: 1 la recherche est effectuée à partir du premier élément (valeurnpar défaut). -1 une recherche inverse est effectuée, c-à-d à partir du dernier élément. 2 une recherche binaire est effectuée quand lookup_array est triée dans l'ordre croissant. S'il n'est pas trié, des résultats non valides seront renvoyés. -2 une recherche binaire est effectuée quand lookup_array est triée dans l'ordre décroissant. S'il n'est pas trié, des résultats non valides seront renvoyés. Des caractères génériques sont (?) le point d'interrogation pour rechercher un seul caractère et (*) l'astérisque pour rechercher plusieurs caractères. Quand vous recherchez le point d'interrogation ou l'astérisque, saisissez un tilde (~) avant le caractère. Pour appliquer la fonction XLOOKUP, sélectionnez la cellule où vous voulez afficher le résultat, appuyez sur l'icône Insérer une fonction de la barre d'outils supérieure, ou cliquez avec le bouton droit sur la cellule et choisissez l'option Insérer une fonction dans le menu, ou cliquez sur l'icône de la barre de formule, sélectionnez le groupe de fonctions Recherche et référence depuis la liste, cliquez sur la fonction XLOOKUP, saisissez les arguments requis dans la fenêtre Argument de formule, appuyez sur la touche Entrée. Le résultat s'affiche dans la cellule choisie." }, { "id": "Functions/xnpv.htm", @@ -2308,7 +2308,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "À propos de Spreadsheet Editor", - "body": "Spreadsheet Editor est une application en ligne qui vous permet de parcourir et de modifier des feuilles de calcul dans votre navigateur . En utilisant Spreadsheet Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les feuilles de calcul modifiées en gardant la mise en forme ou les télécharger sur votre disque dur au format XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS. Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme." + "body": "Spreadsheet Editor est une application en ligne qui vous permet de parcourir et de modifier des feuilles de calcul dans votre navigateur . En utilisant Spreadsheet Editor, vous pouvez effectuer différentes opérations d'édition comme avec n'importe quel éditeur de bureau, imprimer les feuilles de calcul modifiées en gardant la mise en forme ou les télécharger sur votre disque dur au format XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS. Pour afficher la version actuelle du logiciel et les informations de licence dans la version en ligne, cliquez sur l'icône À propos dans la barre latérale gauche. Pour afficher la version actuelle du logiciel et les informations de licence dans la version de bureau pour Windows, cliquez sur l'icône À propos dans la barre latérale gauche de la fenêtre principale du programme. Dans la version de bureau pour Mac OS, accédez au menu ONLYOFFICE en haut de l'écran et sélectionnez l'élément de menu À propos d'ONLYOFFICE." }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -2423,7 +2423,7 @@ var indexes = { "id": "UsageInstructions/AlignText.htm", "title": "Aligner les données dans une cellule", - "body": "Dans Spreadsheet Editor, vous pouvez aligner vos données horizontalement ou verticalement ou même les faire pivoter dans une cellule.. sélectionnez une cellule ou une plage de cellules avec la souris ou la feuille de calcul entière en appuyant Ctrl+A sur le clavier, Remarque: vous pouvez également sélectionner plusieurs cellules ou plages non adjacentes en maintenant la touche Ctrl enfoncée tout en sélectionnant les cellules/plages à l'aide de la souris. Remarque: vous pouvez mettre en forme du texte à l'aide des icônes sous l'onglet Accueil de la barre d'outils supérieure. Appliquez l'une des options d'alignement horizontal dans la cellule, cliquez sur l'icône Aligner à gauche pour aligner les données sur le bord gauche de la cellule (le bord droit reste non aligné); cliquez sur l'icône Aligner au centre pour aligner les données par le centre de la cellule (les bords droit et gauche restent non alignés); cliquez sur l'icône Aligner à droite pour aligner les données sur le bord droit de la cellule (le bord gauche reste non aligné); cliquez sur l'icône Justifié pour aligner vos données sur le bord gauche et droit de la cellule (un espacement supplémentaire est ajouté si nécessaire pour garder l'alignement). Changez l'alignement vertical des données dans la cellule, cliquez sur l'icône Aligner en haut pour aligner vos données sur le bord supérieur de la cellule; cliquez sur l'icône Aligner au milieu pour aligner vos données au milieu de la cellule; cliquez sur l'icône Aligner en bas pour aligner vos données sur le bord inférieur de la cellule. Changez l'angle des données en cliquant sur l'icône Orientation et en choisissant l'une des options: utilisez l'option Texte horizontal pour positionner le texte à l'horizontale (par défaut), utilisez l'option Rotation dans le sens inverse des aiguilles d'une montre pour positionner le texte du coin inférieur gauche au coin supérieur droit d'une cellule, utilisez l'option Rotation dans le sens des aiguilles d'une montre pour positionner le texte du coin supérieur gauche au coin inférieur droit d'une cellule, utilisez l'option Texte vertical pour positionner le texte verticalement, utilisez l'option Rotation du texte vers le haut pour positionner le texte de bas en haut d'une cellule, utilisez l'option Rotation du texte vers le bas pour positionner le texte de haut en bas d'une cellule. Appliquez un retrait au contenu d'une cellule à l'aide de la section Retrait sur la barre latérale droite Paramètres de cellule. Définissez la valeur (c-à-d le nombre de caractères) de déplacer le contenu de cellule à gauche. Pour faire pivoter le texte selon un angle exactement spécifié, cliquez sur l'icône Paramètres de cellule dans la barre latérale de droite et utilisez l'Orientation. Entrez la valeur souhaitée mesurée en degrés dans le champ Angle ou réglez-la à l'aide des flèches situées à droite. Adaptez vos données à la largeur de la colonne en cliquant sur l'icône Renvoyer à la ligne automatiquement sous l'onglet Accueil de la barre d'outil supérieure ou en activant la case à cocher Renvoyer à la ligne automatiquement sur la barre latérale droite. Remarque: si vous modifiez la largeur de la colonne, les données seront automatiquement ajustées en conséquence. Adaptez vos données à la largeur de la cellule en activant Réduire pour ajuster sur la barre latérale droite. Le contenu de la cellule est réduit pour s'adapter à la largeur de la cellule." + "body": "Dans Spreadsheet Editor, vous pouvez aligner vos données horizontalement ou verticalement ou même les faire pivoter dans une cellule.. sélectionnez une cellule ou une plage de cellules avec la souris ou la feuille de calcul entière en appuyant Ctrl+A sur le clavier, Remarque: vous pouvez également sélectionner plusieurs cellules ou plages non adjacentes en maintenant la touche Ctrl enfoncée tout en sélectionnant les cellules/plages à l'aide de la souris. Remarque: vous pouvez mettre en forme du texte à l'aide des icônes sous l'onglet Accueil de la barre d'outils supérieure. Appliquez l'une des options d'alignement horizontal dans la cellule, cliquez sur l'icône Aligner à gauche pour aligner les données sur le bord gauche de la cellule (le bord droit reste non aligné); cliquez sur l'icône Aligner au centre pour aligner les données par le centre de la cellule (les bords droit et gauche restent non alignés); cliquez sur l'icône Aligner à droite pour aligner les données sur le bord droit de la cellule (le bord gauche reste non aligné); cliquez sur l'icône Justifié pour aligner vos données sur le bord gauche et droit de la cellule (un espacement supplémentaire est ajouté si nécessaire pour garder l'alignement). Changez l'alignement vertical des données dans la cellule, cliquez sur l'icône Aligner en haut pour aligner vos données sur le bord supérieur de la cellule; cliquez sur l'icône Aligner au milieu pour aligner vos données au milieu de la cellule; cliquez sur l'icône Aligner en bas pour aligner vos données sur le bord inférieur de la cellule. Changez l'angle des données en cliquant sur l'icône Orientation et en choisissant l'une des options: utilisez l'option Texte horizontal pour positionner le texte à l'horizontale (par défaut), utilisez l'option Rotation dans le sens inverse des aiguilles d'une montre pour positionner le texte du coin inférieur gauche au coin supérieur droit d'une cellule, utilisez l'option Rotation dans le sens des aiguilles d'une montre pour positionner le texte du coin supérieur gauche au coin inférieur droit d'une cellule, utilisez l'option Texte vertical pour positionner le texte verticalement, utilisez l'option Rotation du texte vers le haut pour positionner le texte de bas en haut d'une cellule, utilisez l'option Rotation du texte vers le bas pour positionner le texte de haut en bas d'une cellule. Appliquez un retrait au contenu d'une cellule à l'aide de la section Retrait sur la barre latérale droite Paramètres de cellule. Définissez la valeur (c-à-d le nombre de caractères) de déplacer le contenu de cellule à gauche. Les retraits sont réinitialisés lorsque vous modifier l'orientation du texte. Lorsque vous modifiez les retraits du texte pivoté, l'orientation du texte est réinitialisée. Il est possible de définir les retraits seulement si le texte est orienté horizontalement ou verticalement. Pour faire pivoter le texte selon un angle exactement spécifié, cliquez sur l'icône Paramètres de cellule dans la barre latérale de droite et utilisez l'Orientation. Entrez la valeur souhaitée mesurée en degrés dans le champ Angle ou réglez-la à l'aide des flèches situées à droite. Adaptez vos données à la largeur de la colonne en cliquant sur l'icône Renvoyer à la ligne automatiquement sous l'onglet Accueil de la barre d'outil supérieure ou en activant la case à cocher Renvoyer à la ligne automatiquement sur la barre latérale droite. Si vous modifiez la largeur de la colonne, les données seront automatiquement ajustées en conséquence. Adaptez vos données à la largeur de la cellule en activant Réduire pour ajuster sur la barre latérale droite. Le contenu de la cellule est réduit pour s'adapter à la largeur de la cellule." }, { "id": "UsageInstructions/ChangeNumberFormat.htm", @@ -2548,7 +2548,7 @@ var indexes = { "id": "UsageInstructions/PivotTables.htm", "title": "Créer et éditer les tableaux croisés dynamiques", - "body": "Les tableaux croisés dynamiques vous permet de grouper et organiser de vastes ensembles de données pour présenter des données de synthèse. Dans Spreadsheet Editor vous pouvez réorganiser les données de plusieurs façons pour n'afficher que les informations importantes et pour se concentrer uniquement sur les aspects importants. Créer un nouveau tableau croisé dynamique Pour créer un tableau croisé dynamique, Préparez l'ensemble de données sources à partir duquel vous voulez créer un tableau croisé dynamique. Ceux-ci doivent comprendre les en-têtes. L'ensemble de données ne peut pas comprendre les lignes ou les colonnes vides. Sélectionnez une cellule appartenant à la plage de données sources. Passez à l'onglet Tableau croisé dynamique dans la barre d'outils supérieure et cliquez sur l'icône Insérer un tableau . Si vous voulez créer un tableau croisé dynamique basé sur une tableau mis en forme, vous pouvez aussi utiliser l'option Insérer un tableau croisé dynamique sous l'onglet Paramètres du tableau dans la barre latérale droite. Une fenêtre Créer un tableau croisé dynamique apparaîtra. La Ligne de données de la source est déjà spécifié. Dans ce cas, toutes le données sources sont utilisées. Si vous voulez modifier la plage de données (par exemple, à inclure seulement une part de données), cliquez sur l'icône . Dans la fenêtre Sélectionner une plage de données, saisissez la plage de données appropriée sous le format suivant: Sheet1!$A$1:$E$10. Vous pouvez aussi sélectionner la plage de cellules qui vous convient avec la souris. Cliquez OK pour confirmer. Choisissez l'emplacement du tableau croisé dynamique. La valeur par défaut est Nouvelle feuille de calcul. Votre tableau croisé dynamique sera créé dans une feuille de calcul nouvelle. Vous pouvez également sélectionner l'élément Feuille de calcul existante et choisir la cellule. Dans ce cas, c'est la cellule supérieure droite du tableau croisé dynamique créé. Pour sélectionner la cellule, cliquez sur l'icône . Dans la fenêtre Sélectionner une plage de données, saisissez l'adresse de la cellule sous le format suivant: Sheet1!$G$2. Vous pouvez également sélectionner la cellule nécessaire dans votre feuille. Cliquez OK pour confirmer. Une fois l'emplacement du tableau croisé dynamique est choisi, cliquez sur OK dans la fenêtre Créer un tableau croisé dynamique. Le tableau croisé dynamique vide est inséré selon l'emplacement choisi. L'onglet Paramètres du tableau croisé dynamique s'ouvre sur la barre latérale droite. Cliquez sur l'icône pour masquer ou afficher cet onglet. Sélectionner les champs à afficher La section Sélectionner les champs à afficher comprend les champs dénommés comme les en-têtes de colonnes dans l'ensemble de votre données sources. Chaque champ contient les valeurs de la colonne correspondante du tableau source. Les sections disponibles: Filtres, Colonnes, Lignes et Valeurs. Pour afficher un champ à votre tableau croisé dynamique, activez la case à cocher du nom de champ. Lorsque vous activez une case à cocher, le champ correspondant à cette case est ajouté à une des sections disponibles sur la barre latérale droite en fonction du type de données et est affiché dans le tableau croisé dynamique. Les champs de type texte sont ajoutés à Lignes; les champs numériques sont ajoutés à Valeurs. Faites glisser les champs directement dans les sections voulues ou faites glisser les champs d'une section dans l'autre pour les réorganiser dans votre tableau croisé dynamique rapidement. Pour supprimer un champ dans une section, faites-le glisser en dehors de cette section. Pour ajouter un champ à une section, on peut aussi cliquer sur la flèche noire à droite du champ et choisir l'option appropriée dans le menu de la section Sélectionner les champs: Déplacer vers les filtres, Déplacer vers les lignes, Déplacer vers les colonnes, Déplacer vers les valeurs. Ci-dessous, vous pouvez découvrir quelques exemples d'utilisation des sections Filtres, Colonnes, Lignes et Valeurs. Lorsque un champ est ajouté à Filtres, un filtre de rapport apparaisse au-dessus du tableau croisé dynamique. Celui-ci est appliqué au tableau croisé dynamique entier. Si vous cliquer sur la flèche de filtre ajouté, vous pouvez voir toutes les valeurs du champ choisi. Lorsque vous désactivez quelques valeurs parmi les options de filtre et appuyez sur OK, celles-ci ne sont pas affichées dans le tableau croisé dynamique. Quand vous ajoutez un champ à Colonnes, le nombre de colonnes dans le tableau croisé dynamique correspond au nombre de valeurs du champ choisi. La colonne Total général est aussi ajoutée. Quand vous ajoutez un champ à Lignes, le nombre de lignes dans le tableau croisé dynamique correspond au nombre de valeurs du champ choisi. La ligne Total général est aussi ajoutée. Quand vous ajoutez un champ à Valeurs, le tableau croisé dynamique affiche la somme de toutes les valeurs numériques du champ choisi. Si votre champ contient des valeurs texte, la somme ne s'affiche pas. Vous pouvez choisir une autre fonction de synthèse dans les paramètres du champ. Réorganiser les champs et configurer les paramètres Une foi les champs ajoutés aux sections appropriées, vous pouvez les gérer pour modifier la mise en page et la mise en forme du tableau croisé dynamique. Cliquez sur la flèche noire à droit du champ dans les sections Filtres, Colonnes, Lignes et Valeurs pour afficher le menu contextuel du champ. Ce menu vous permet: Déplacer le champ sélectionné: Monter, Descendre, Aller au début, ou Déplacer vers le fin de la section actuelle si vous avez ajouté plusieurs champs. Déplacer le champ vers une autre section - Filtres, Colonnes, Lignes ou Valeurs. L'option déjà appliquée à la section actuelle sera désactivée. Supprimer le champ sélectionné de la section actuelle. Configurer les paramètres du champ choisi. Les options Filtres, Colonnes, Lignes et Valeurs semblent similaires: L'onglet Disposition comprend les options suivantes: L'option Nom de source vous permet de visualiser le nom du champ tel qu'il apparait à l'en-tête de colonne dans l'ensemble de données sources. L'option Nom vous permet de changer le nom du champ choisi à afficher dans le tableau croisé dynamique. L'option Formulaire de rapport vous permet de modifier la présentation du champ choisi dans le tableau croisé dynamique: Utiliser l'un des formulaires disponibles à présenter le champ choisi dans le tableau croisé dynamique. Formulaire Tabulaire affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Formulaire Contour affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Ce formulaire permet aussi d'afficher les sous-totaux en haut de chaque groupe. Formulaire Compact affiche les éléments de champs de section de ligne différents dans une colonne. Répéter les étiquettes des éléments sur chaque ligne permet de grouper visuellement des lignes ou des colonnes pour plusieurs champs affichés sous forme tabulaire. Insérer une ligne vide après chaque élément permet d'insérer une ligne vide après les éléments du champ choisi. Afficher les sous-totaux permet d'afficher ou de ne pas afficher les sous-totaux pour le champ choisi. Vous pouvez choisir parmi les options suivantes: Afficher en haut du groupe ou Afficher en bas du groupe. Afficher les éléments sans données permet d'afficher ou de masquer les éléments de ligne qui ne contiennent pas de valeurs dans le champ choisi. Sous l'onglet Sous-totaux vous pouvez choisir les Fonctions pour sous-totaux. Cochez une des fonctions disponibles dans la liste: Somme, Total, Moyenne, Max, Min, Produit, Chiffres, Écartype , StdDevp, Var, Varp. Paramètres du champ Valeurs L'option Nom de source vous permet de visualiser le nom du champ tel qu'il apparait à l'en-tête de colonne dans l'ensemble de données sources. L'option Nom vous permet de changer le nom du champ choisi à afficher dans le tableau croisé dynamique. Résumer les valeurs du champ par permet de choisir la fonction à utiliser pour calculer la somme des valeurs pour toutes les valeurs de ce champ. Par défaut, la fonction Somme est utilisée pour les champs de valeurs numériques, et la fonction Total est utilisée pour les valeurs de texte. Les fonctions disponibles: Somme, Total, Moyenne, Max, Min, Produit, Chiffres, Écartype , StdDevp, Var, Varp. Grouper et dissocier des données Il est possible de grouper les données d'un tableau croisé dynamique selon des critères personnalisés. La fonctionnalité de groupage est disponible pour les dates et les nombres simples. Grouper les dates Pour grouper les dates, créez un tableau croisé dynamique comprenant l'ensemble de dates en question. Cliquez avec le bouton droit sur l'une des cellules comprenant une date dans le tableau croisé dynamique, choisissez l'option Grouper dans le menu contextuel et configurez les paramètres appropriés dans la fenêtre qui s'affiche. Commence à - la première date des données sources est définie par défaut. Pour la modifier, saisissez la date appropriée dans ce champ-là. Désactivez cette option pour ignorer le début. Fin à - la dernière date des données sources est définie par défaut. Pour la modifier, saisissez la date appropriée dans ce champ-là. Désactivez cette option pour ignorer le fin. Par - on peut grouper les dates par Secondes, Minutes et Heures selon l'heure spécifiée dans les données sources. L'option Mois enlève les jours et maintient uniquement les mois. L'option Quartiers fonctionne à la condition que quatre mois est un quartier, alors on fournit Qtr1, Qtr2, etc. L'option Années groupe les dates selon les années spécifiées dans les données source. Vous pouvez combiner plusieurs options pour obtenir le résultat souhaité, Nombre de jours sert à définir la valeur appropriée pour spécifier une certaine période. Cliquez sur OK pour valider. Grouper des nombres Pour grouper les nombres, créez un tableau croisé dynamique comprenant l'ensemble de nombres en question. Cliquez avec le bouton droit sur l'une des cellules comprenant un nombre dans le tableau croisé dynamique, choisissez l'option Grouper dans le menu contextuel et configurez les paramètres appropriés dans la fenêtre qui s'affiche. Commence à - le plus petit nombre des données sources est définie par défaut. Pour le modifier, saisissez le nombre approprié dans ce champ-là. Désactivez cette option pour ignorer le plus petit nombre. Fin à - le plus grand nombre des données sources est définie par défaut. Pour le modifier, saisissez le nombre approprié dans ce champ-là. Désactivez cette option pour ignorer le plus grand nombre. Par - définissez l'intervalle pour grouper des numéros: Ex., “2” va grouper l'ensemble de numéros de 1 à 10 comme “1-2”, “3-4”, etc. Cliquez sur OK pour valider. Modifier la disposition d'un tableau croisé dynamique Vous pouvez utiliser les options disponibles dans la barre d'outils supérieure pour modifier le format du tableau croisé dynamique. Ces paramètres sont appliquées au tableau croisé dynamique entier. Sélectionnez au moins une cellule dans le tableau croisé dynamique avec la souris pour activer les outils d'édition dans la barre d'outils supérieure. Dans la liste déroulante Mise en page du rapport choisissez la forme à afficher pour votre tableau croisé dynamique. Afficher sous forme compacte - pour afficher les éléments de champs de section de ligne différents dans une colonne. Afficher sous forme de plan - pour présenter les données dans le style de tableau croisé dynamique classique. Cette forme affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Elle permet aussi d'afficher les sous-totaux en haut de chaque groupe. Afficher sous forme de tableau - pour présenter les données dans un format de tableau traditionnel. Cette forme affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Répéter les étiquettes de tous les éléments - permet de grouper visuellement des lignes ou des colonnes pour plusieurs champs affichés sous forme tabulaire. Ne pas répéter toutes les étiquettes d'éléments - permet de masquer les étiquettes d'élément pour plusieurs champs affichés sous forme tabulaire. La liste déroulante Lignes vides permet d'afficher les lignes vides après chaque élément: Insérer une ligne vide après chaque élément - permet d'insérer une ligne vide après les éléments. Supprimer la ligne vide après chaque élément - permet de supprimer les lignes vides ajoutées. La liste déroulante Sous-totaux permet d'afficher ou de ne pas afficher les sous-totaux dans le tableau croisé dynamique. Ne pas afficher les sous-totaux - permet de masquer les sou-totaux pour tous éléments. Afficher les sous-totaux au bas du groupe - permet d'afficher les sous-totaux au-dessous des lignes résumées. Afficher les sous-totaux en haut du groupe - permet d'afficher les sous-totaux au-dessus des lignes résumées. La liste déroulante Grands Totaux permet d'afficher ou de ne pas afficher les totaux généraux dans le tableau croisé dynamique. Désactivé pour les lignes et les colonnes - permet de masquer les totaux généraux pour les lignes et les colonnes. Activé pour les lignes et les colonnes - permet d'afficher les totaux généraux pour les lignes et les colonnes. Activé pour les lignes uniquement - permet d'afficher les totaux généraux seulement pour les lignes. Activé pour les colonnes uniquement - permet d'afficher les totaux généraux seulement pour les colonnes. Remarque: les options similaires sont aussi disponibles parmi les paramètres avancés du tableau croisé dynamique dans la section Grand totaux sous l'onglet Nom et disposition. Le bouton Sélectionner tableau croisé dynamique complet permet de sélectionner le tableau croisé dynamique entier. Quand vous avez modifié l'ensemble de données sources, sélectionnez le tableau croisé dynamique et cliquez sur le bouton Actualiser pour mettre à jour le tableau croisé dynamique. Modifier le style d'un tableau croisé dynamique Vous pouvez modifier la présentation du tableau croisé dynamique dans une feuille de calcul en utilisant les outils d'édition dans la barre d'outils supérieure. Sélectionnez au moins une cellule dans le tableau croisé dynamique avec la souris pour activer les outils d'édition dans la barre d'outils supérieure. Les sections lignes et colonnes en haut vous permettent de mettre en évidence certaines lignes/colonnes en leur appliquant une mise en forme spécifique ou de mettre en évidence différentes lignes/colonnes avec les différentes couleurs d'arrière-plan pour les distinguer clairement. Les options suivantes sont disponibles: En-têtes de ligne - permet de mettre en évidence les en-têtes de ligne avec un formatage spécial. En-têtes de colonne - permet de mettre en évidence les en-têtes de colonne avec un formatage spécial. Lignes en bandes - permet l'alternance des couleurs d'arrière-plan pour les lignes paires et impaires. Colonnes en bandes - permet l'alternance des couleurs d'arrière-plan pour les colonnes paires et impaires.. La liste des modèles vous permet de choisir l'un des styles de tableaux croisés prédéfinis. Chaque modèle combine certains paramètres de formatage, tels qu'une couleur d'arrière-plan, un style de bordure, des lignes/colonnes en bandes, etc. Selon les options cochées dans les sections lignes et/ou colonnes, l'ensemble de modèles sera affiché différemment. Par exemple, si vous avez coché les options En-têtes de ligne et Colonnes en bandes, la liste des modèles affichés inclurait uniquement les modèles avec la ligne d'en-tête et les colonnes en bandes activées. Filtrer, trier et insérer des segments dans des tableaux croisées dynamiques Vous pouvez filtrez les tableaux croisé dynamique par étiquettes ou valeurs aussi que utiliser les options de tri supplémentaires. Filtrage Cliquez sur la flèche déroulante dans Étiquettes de lignes ou Étiquettes de colonnes du tableau croisé dynamique. La liste des options de Filtrage s'affiche: Configurez les paramètres du filtre. Procédez d'une des manières suivantes: sélectionnez les données à afficher ou filtrez les données selon certains critères. Sélectionner les données à afficher Décochez les cases des données que vous souhaitez masquer. A votre convenance, toutes les données dans la liste des options de Filtrage sont triées par ordre croissant. Remarque: la case à cocher (vide) correspond aux cellules vides. Celle-ci est disponible quand il y a au moins une cellule vide dans la plage de cellules. Pour faciliter la procédure, utilisez le champ de recherche en haut. Taper votre requête partiellement ou entièrement dans le champ, les valeurs qui comprennent ces caractères-ci, s'affichent dans la liste ci-dessous. Ces deux options suivantes sont aussi disponibles: Sélectionner tous les résultats de la recherche - cochée par défaut. Permet de sélectionner toutes les valeurs correspondant à la requête. Ajouter le sélection actuelle au filtre - si vous cochez cette case, les valeurs sélectionnées ne seront pas masquées lorsque vous appliquerez le filtre. Après avoir sélectionné toutes les données nécessaires, cliquez sur le bouton OK dans la liste des options de Filtrage pour appliquer le filtre. Filtrer les données selon certains critères En fonction des données contenues dans la colonne sélectionnée, vous pouvez choisir le Filtre étiquette ou le Filtre de valeur dans la partie droite de la liste d'options de Filtrage, puis sélectionner l'une des options dans le sous-menu: Pour le Filtre étiquette les options suivantes sont disponibles: Pour texte: Équivaut à..., N'est pas égal à..., Commence par..., Ne pas commencer par..., Se termine par..., Ne se termine pas avec..., Contient..., Ne contient pas... Pour nombres: Plus grand que..., Plus grand ou égal à..., Moins que..., Moins que ou égal à..., Entre, Pas entre. Pour le Filtre de valeur, les options suivantes sont disponibles: Équivaut à..., N'est pas égal à..., Plus grand que..., Plus grand ou égal à..., Moins que..., Moins que ou égal à..., Entre, Pas entre, Les 10 premiers. Après avoir sélectionné l'une des options ci-dessus (à l'exception des options Les 10 premiers), la fenêtre Filtre étiquette/de valeur s'ouvre. Le critère correspondant sera sélectionné dans la première ou secondaire liste déroulante. Spécifiez la valeur nécessaire dans le champ situé à droite. Cliquez sur OK pour appliquer le filtre. Si vous choisissez l'option Les 10 premiers dans la liste des options de Filtre de valeur, une nouvelle fenêtre s'ouvrira: La première liste déroulante permet de choisir si vous souhaitez afficher les valeurs les plus élevées (Haut) ou les plus basses (Bas). La deuxième permet de spécifier le nombre d'entrées dans la liste ou le pourcentage du nombre total des entrées que vous souhaitez afficher (vous pouvez entrer un nombre compris entre 1 et 500). La troisième liste déroulante permet de définir des unités de mesure: Élément, Pour cent ou Somme. La quatrième liste déroulante affiche le nom du champ choisi. Une fois les paramètres nécessaires définis, cliquez sur OK pour appliquer le filtre. Le bouton de Filtrage s'affiche dans Étiquettes de lignes ou Étiquettes de colonnes du tableau croisé dynamique. Cela signifie que le filtre est appliqué. Tri Vous pouvez effectuer le tri des données du tableau croisé dynamique en utilisant les options de tri. Cliquez sur la flèche de la liste déroulante dans Étiquettes de lignes ou Étiquettes de colonnes du tableau croisé dynamique et sélectionnez Trier du plus bas au plus élevé ou Trier du plus élevé au plus bas dans le sous-menu. Les Options de tri supplémentaires vous permettent d'ouvrir la fenêtre et choisir une option de tri: Ordre croissant ou Ordre décroissant, et puis spécifier le champ à trier. Insérer des segments Vous pouvez insérer des segments pour filtrer facilement les données et sélectionner les éléments que vous voulez afficher. Pour en savoir plus sur les segments, veuillez consulter le guide de création des segments. Configurer les paramètres avancés du tableau croisé dynamique Pour configurer les paramètres avancés du tableau croisé dynamique, cliquez sur le lien Afficher les paramètres avancés sur la barre latérale droite. La fenêtre Tableau croisé dynamique - Paramètres avancés, s'ouvre: Sous l'onglet Nom et disposition vous pouvez configurer les paramètres communs du tableau croisé dynamique. L'option Nom permet de modifier le nom du tableau croisé dynamique. La section Grands Totaux permet d'afficher ou de ne pas afficher les totaux généraux dans le tableau croisé dynamique. Les options Afficher pour les lignes et Afficher pour les colonnes sont activées par défaut. Vous pouvez les désactiver toutes les deux ou décocher la case appropriée pour masquer les certains grand totaux du tableau croisé dynamique. Remarque: les options similaires sont aussi disponibles sur le menu Grands Totaux dans la barre d'outils en haut. La section Afficher les champs dans la zone de filtre du rapport permet de configurer les filtres dans la section Filtres quand vous les y ajoutez: L'option Vers le bas, puis à droite s'utilise pour organiser les colonnes. Celle-ci vous permet d'afficher des filtres du rapport pour la colonne. L'option À droite, puis vers le bas s'utilise pour organiser les lignes. Celle-ci vous permet d'afficher des filtres du rapport pour la ligne. L'option Afficher les champs de filtre de rapport par colonne sélectionnez le nombre de filtres à afficher pour chaque colonne. La valeur par défaut est 0. Vous pouvez régler la valeur numérique. La section En-têtes des champs permet d'afficher ou de ne pas afficher les en-têtes de champ dans le tableau croisé dynamique. L'option Afficher les en-têtes des champs pour les lignes et les colonnes est activée par défaut. Décochez-la pour masquer les en-têtes de champ du tableau croisé dynamique. Sous l'onglet La source de données vous pouvez modifier les données à utiliser pour créer le tableau croisé dynamique. Vérifiez la Plage de données et modifiez-la si nécessaire. Pour ce faire, cliquez sur l'icône . Dans la fenêtre Sélectionner une plage de données, saisissez la plage de données appropriée sous le format suivant: Sheet1!$A$1:$E$10. Vous pouvez aussi sélectionner la plage de cellules qui vous convient avec la souris. Cliquez OK pour confirmer. L'onglet Texte de remplacement permet de spécifier un Titre et une Description qui sera lue aux personnes avec des déficiences cognitives ou visuelles pour les aider à mieux comprendre l'information du tableau croisé dynamique. Supprimer le tableau croisé dynamique Pour supprimer un tableau croisé dynamique, sélectionnez le tableau croisé dynamique entier en utilisant le bouton Sélectionner dans la barre d'outils supérieure. Appuyez sur la touche de Suppression." + "body": "Les tableaux croisés dynamiques vous permet de grouper et organiser de vastes ensembles de données pour présenter des données de synthèse. Dans Spreadsheet Editor vous pouvez réorganiser les données de plusieurs façons pour n'afficher que les informations importantes et pour se concentrer uniquement sur les aspects importants. Créer un nouveau tableau croisé dynamique Pour créer un tableau croisé dynamique, Préparez l'ensemble de données sources à partir duquel vous voulez créer un tableau croisé dynamique. Ceux-ci doivent comprendre les en-têtes. L'ensemble de données ne peut pas comprendre les lignes ou les colonnes vides. Sélectionnez une cellule appartenant à la plage de données sources. Passez à l'onglet Tableau croisé dynamique dans la barre d'outils supérieure et cliquez sur l'icône Insérer un tableau . Si vous voulez créer un tableau croisé dynamique basé sur une tableau mis en forme, vous pouvez aussi utiliser l'option Insérer un tableau croisé dynamique sous l'onglet Paramètres du tableau dans la barre latérale droite. Une fenêtre Créer un tableau croisé dynamique apparaîtra. La Ligne de données de la source est déjà spécifié. Dans ce cas, toutes le données sources sont utilisées. Si vous voulez modifier la plage de données (par exemple, à inclure seulement une part de données), cliquez sur l'icône . Dans la fenêtre Sélectionner une plage de données, saisissez la plage de données appropriée sous le format suivant: Sheet1!$A$1:$E$10. Vous pouvez aussi sélectionner la plage de cellules qui vous convient avec la souris. Cliquez OK pour confirmer. Choisissez l'emplacement du tableau croisé dynamique. La valeur par défaut est Nouvelle feuille de calcul. Votre tableau croisé dynamique sera créé dans une feuille de calcul nouvelle. Vous pouvez également sélectionner l'élément Feuille de calcul existante et choisir la cellule. Dans ce cas, c'est la cellule supérieure droite du tableau croisé dynamique créé. Pour sélectionner la cellule, cliquez sur l'icône . Dans la fenêtre Sélectionner une plage de données, saisissez l'adresse de la cellule sous le format suivant: Sheet1!$G$2. Vous pouvez également sélectionner la cellule nécessaire dans votre feuille. Cliquez OK pour confirmer. Une fois l'emplacement du tableau croisé dynamique est choisi, cliquez sur OK dans la fenêtre Créer un tableau croisé dynamique. Le tableau croisé dynamique vide est inséré selon l'emplacement choisi. L'onglet Paramètres du tableau croisé dynamique s'ouvre sur la barre latérale droite. Cliquez sur l'icône pour masquer ou afficher cet onglet. Sélectionner les champs à afficher La section Sélectionner les champs à afficher comprend les champs dénommés comme les en-têtes de colonnes dans l'ensemble de votre données sources. Chaque champ contient les valeurs de la colonne correspondante du tableau source. Les sections disponibles: Filtres, Colonnes, Lignes et Valeurs. Pour afficher un champ à votre tableau croisé dynamique, activez la case à cocher du nom de champ. Lorsque vous activez une case à cocher, le champ correspondant à cette case est ajouté à une des sections disponibles sur la barre latérale droite en fonction du type de données et est affiché dans le tableau croisé dynamique. Les champs de type texte sont ajoutés à Lignes; les champs numériques sont ajoutés à Valeurs. Faites glisser les champs directement dans les sections voulues ou faites glisser les champs d'une section dans l'autre pour les réorganiser dans votre tableau croisé dynamique rapidement. Pour supprimer un champ dans une section, faites-le glisser en dehors de cette section. Pour ajouter un champ à une section, on peut aussi cliquer sur la flèche noire à droite du champ et choisir l'option appropriée dans le menu de la section Sélectionner les champs: Déplacer vers les filtres, Déplacer vers les lignes, Déplacer vers les colonnes, Déplacer vers les valeurs. Ci-dessous, vous pouvez découvrir quelques exemples d'utilisation des sections Filtres, Colonnes, Lignes et Valeurs. Lorsque un champ est ajouté à Filtres, un filtre de rapport apparaisse au-dessus du tableau croisé dynamique. Celui-ci est appliqué au tableau croisé dynamique entier. Si vous cliquer sur la flèche de filtre ajouté, vous pouvez voir toutes les valeurs du champ choisi. Lorsque vous désactivez quelques valeurs parmi les options de filtre et appuyez sur OK, celles-ci ne sont pas affichées dans le tableau croisé dynamique. Quand vous ajoutez un champ à Colonnes, le nombre de colonnes dans le tableau croisé dynamique correspond au nombre de valeurs du champ choisi. La colonne Total général est aussi ajoutée. Quand vous ajoutez un champ à Lignes, le nombre de lignes dans le tableau croisé dynamique correspond au nombre de valeurs du champ choisi. La ligne Total général est aussi ajoutée. Quand vous ajoutez un champ à Valeurs, le tableau croisé dynamique affiche la somme de toutes les valeurs numériques du champ choisi. Si votre champ contient des valeurs texte, la somme ne s'affiche pas. Vous pouvez choisir une autre fonction de synthèse dans les paramètres du champ. Réorganiser les champs et configurer les paramètres Une foi les champs ajoutés aux sections appropriées, vous pouvez les gérer pour modifier la mise en page et la mise en forme du tableau croisé dynamique. Cliquez sur la flèche noire à droit du champ dans les sections Filtres, Colonnes, Lignes et Valeurs pour afficher le menu contextuel du champ. Ce menu vous permet: Déplacer le champ sélectionné: Monter, Descendre, Aller au début, ou Déplacer vers le fin de la section actuelle si vous avez ajouté plusieurs champs. Déplacer le champ vers une autre section - Filtres, Colonnes, Lignes ou Valeurs. L'option déjà appliquée à la section actuelle sera désactivée. Supprimer le champ sélectionné de la section actuelle. Configurer les paramètres du champ choisi. Les options Filtres, Colonnes, Lignes et Valeurs semblent similaires: L'onglet Disposition comprend les options suivantes: L'option Nom de source vous permet de visualiser le nom du champ tel qu'il apparait à l'en-tête de colonne dans l'ensemble de données sources. L'option Nom vous permet de changer le nom du champ choisi à afficher dans le tableau croisé dynamique. L'option Formulaire de rapport vous permet de modifier la présentation du champ choisi dans le tableau croisé dynamique: Utiliser l'un des formulaires disponibles à présenter le champ choisi dans le tableau croisé dynamique. Formulaire Tabulaire affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Formulaire Contour affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Ce formulaire permet aussi d'afficher les sous-totaux en haut de chaque groupe. Formulaire Compact affiche les éléments de champs de section de ligne différents dans une colonne. Répéter les étiquettes des éléments sur chaque ligne permet de grouper visuellement des lignes ou des colonnes pour plusieurs champs affichés sous forme tabulaire. Insérer une ligne vide après chaque élément permet d'insérer une ligne vide après les éléments du champ choisi. Afficher les sous-totaux permet d'afficher ou de ne pas afficher les sous-totaux pour le champ choisi. Vous pouvez choisir parmi les options suivantes: Afficher en haut du groupe ou Afficher en bas du groupe. Afficher les éléments sans données permet d'afficher ou de masquer les éléments de ligne qui ne contiennent pas de valeurs dans le champ choisi. Sous l'onglet Sous-totaux vous pouvez choisir les Fonctions pour sous-totaux. Cochez une des fonctions disponibles dans la liste: Somme, Total, Moyenne, Max, Min, Produit, Chiffres, Écartype , StdDevp, Var, Varp. Paramètres du champ Valeurs L'option Nom de source vous permet de visualiser le nom du champ tel qu'il apparait à l'en-tête de colonne dans l'ensemble de données sources. L'option Nom vous permet de changer le nom du champ choisi à afficher dans le tableau croisé dynamique. Résumer les valeurs du champ par permet de choisir la fonction à utiliser pour calculer la somme des valeurs pour toutes les valeurs de ce champ. Par défaut, la fonction Somme est utilisée pour les champs de valeurs numériques, et la fonction Total est utilisée pour les valeurs de texte. Les fonctions disponibles: Somme, Total, Moyenne, Max, Min, Produit, Chiffres, Écartype , StdDevp, Var, Varp. Grouper et dissocier des données Il est possible de grouper les données d'un tableau croisé dynamique selon des critères personnalisés. La fonctionnalité de groupage est disponible pour les dates et les nombres simples. Grouper les dates Pour grouper les dates, créez un tableau croisé dynamique comprenant l'ensemble de dates en question. Cliquez avec le bouton droit sur l'une des cellules comprenant une date dans le tableau croisé dynamique, choisissez l'option Grouper dans le menu contextuel et configurez les paramètres appropriés dans la fenêtre qui s'affiche. Commence à - la première date des données sources est définie par défaut. Pour la modifier, saisissez la date appropriée dans ce champ-là. Désactivez cette option pour ignorer le début. Fin à - la dernière date des données sources est définie par défaut. Pour la modifier, saisissez la date appropriée dans ce champ-là. Désactivez cette option pour ignorer le fin. Par - on peut grouper les dates par Secondes, Minutes et Heures selon l'heure spécifiée dans les données sources. L'option Mois enlève les jours et maintient uniquement les mois. L'option Quartiers fonctionne à la condition que quatre mois est un quartier, alors on fournit Qtr1, Qtr2, etc. L'option Années groupe les dates selon les années spécifiées dans les données source. Vous pouvez combiner plusieurs options pour obtenir le résultat souhaité, Nombre de jours sert à définir la valeur appropriée pour spécifier une certaine période. Cliquez sur OK pour valider. Grouper des nombres Pour grouper les nombres, créez un tableau croisé dynamique comprenant l'ensemble de nombres en question. Cliquez avec le bouton droit sur l'une des cellules comprenant un nombre dans le tableau croisé dynamique, choisissez l'option Grouper dans le menu contextuel et configurez les paramètres appropriés dans la fenêtre qui s'affiche. Commence à - le plus petit nombre des données sources est définie par défaut. Pour le modifier, saisissez le nombre approprié dans ce champ-là. Désactivez cette option pour ignorer le plus petit nombre. Fin à - le plus grand nombre des données sources est définie par défaut. Pour le modifier, saisissez le nombre approprié dans ce champ-là. Désactivez cette option pour ignorer le plus grand nombre. Par - définissez l'intervalle pour grouper des numéros: Ex., “2” va grouper l'ensemble de numéros de 1 à 10 comme “1-2”, “3-4”, etc. Cliquez sur OK pour valider. Dissocier des données Pour dissocier des données groupées, cliquez avec le bouton droit sur une cellule du groupe, sélectionnez l'option Dissocier dans le menu contextuel. Modifier la disposition d'un tableau croisé dynamique Vous pouvez utiliser les options disponibles dans la barre d'outils supérieure pour modifier le format du tableau croisé dynamique. Ces paramètres sont appliquées au tableau croisé dynamique entier. Sélectionnez au moins une cellule dans le tableau croisé dynamique avec la souris pour activer les outils d'édition dans la barre d'outils supérieure. Dans la liste déroulante Mise en page du rapport choisissez la forme à afficher pour votre tableau croisé dynamique. Afficher sous forme compacte - pour afficher les éléments de champs de section de ligne différents dans une colonne. Afficher sous forme de plan - pour présenter les données dans le style de tableau croisé dynamique classique. Cette forme affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Elle permet aussi d'afficher les sous-totaux en haut de chaque groupe. Afficher sous forme de tableau - pour présenter les données dans un format de tableau traditionnel. Cette forme affiche une colonne par champ et fournit de l'espace pour les en-têtes de champ. Répéter les étiquettes de tous les éléments - permet de grouper visuellement des lignes ou des colonnes pour plusieurs champs affichés sous forme tabulaire. Ne pas répéter toutes les étiquettes d'éléments - permet de masquer les étiquettes d'élément pour plusieurs champs affichés sous forme tabulaire. La liste déroulante Lignes vides permet d'afficher les lignes vides après chaque élément: Insérer une ligne vide après chaque élément - permet d'insérer une ligne vide après les éléments. Supprimer la ligne vide après chaque élément - permet de supprimer les lignes vides ajoutées. La liste déroulante Sous-totaux permet d'afficher ou de ne pas afficher les sous-totaux dans le tableau croisé dynamique. Ne pas afficher les sous-totaux - permet de masquer les sou-totaux pour tous éléments. Afficher les sous-totaux au bas du groupe - permet d'afficher les sous-totaux au-dessous des lignes résumées. Afficher les sous-totaux en haut du groupe - permet d'afficher les sous-totaux au-dessus des lignes résumées. La liste déroulante Grands Totaux permet d'afficher ou de ne pas afficher les totaux généraux dans le tableau croisé dynamique. Désactivé pour les lignes et les colonnes - permet de masquer les totaux généraux pour les lignes et les colonnes. Activé pour les lignes et les colonnes - permet d'afficher les totaux généraux pour les lignes et les colonnes. Activé pour les lignes uniquement - permet d'afficher les totaux généraux seulement pour les lignes. Activé pour les colonnes uniquement - permet d'afficher les totaux généraux seulement pour les colonnes. Remarque: les options similaires sont aussi disponibles parmi les paramètres avancés du tableau croisé dynamique dans la section Grand totaux sous l'onglet Nom et disposition. Le bouton Sélectionner tableau croisé dynamique complet permet de sélectionner le tableau croisé dynamique entier. Quand vous avez modifié l'ensemble de données sources, sélectionnez le tableau croisé dynamique et cliquez sur le bouton Actualiser pour mettre à jour le tableau croisé dynamique. Modifier le style d'un tableau croisé dynamique Vous pouvez modifier la présentation du tableau croisé dynamique dans une feuille de calcul en utilisant les outils d'édition dans la barre d'outils supérieure. Sélectionnez au moins une cellule dans le tableau croisé dynamique avec la souris pour activer les outils d'édition dans la barre d'outils supérieure. Les sections lignes et colonnes en haut vous permettent de mettre en évidence certaines lignes/colonnes en leur appliquant une mise en forme spécifique ou de mettre en évidence différentes lignes/colonnes avec les différentes couleurs d'arrière-plan pour les distinguer clairement. Les options suivantes sont disponibles: En-têtes de ligne - permet de mettre en évidence les en-têtes de ligne avec un formatage spécial. En-têtes de colonne - permet de mettre en évidence les en-têtes de colonne avec un formatage spécial. Lignes en bandes - permet l'alternance des couleurs d'arrière-plan pour les lignes paires et impaires. Colonnes en bandes - permet l'alternance des couleurs d'arrière-plan pour les colonnes paires et impaires.. La liste des modèles vous permet de choisir l'un des styles de tableaux croisés prédéfinis. Chaque modèle combine certains paramètres de formatage, tels qu'une couleur d'arrière-plan, un style de bordure, des lignes/colonnes en bandes, etc. Selon les options cochées dans les sections lignes et/ou colonnes, l'ensemble de modèles sera affiché différemment. Par exemple, si vous avez coché les options En-têtes de ligne et Colonnes en bandes, la liste des modèles affichés inclurait uniquement les modèles avec la ligne d'en-tête et les colonnes en bandes activées. Filtrer, trier et insérer des segments dans des tableaux croisées dynamiques Vous pouvez filtrez les tableaux croisé dynamique par étiquettes ou valeurs aussi que utiliser les options de tri supplémentaires. Filtrage Cliquez sur la flèche déroulante dans Étiquettes de lignes ou Étiquettes de colonnes du tableau croisé dynamique. La liste des options de Filtrage s'affiche: Configurez les paramètres du filtre. Procédez d'une des manières suivantes: sélectionnez les données à afficher ou filtrez les données selon certains critères. Sélectionner les données à afficher Décochez les cases des données que vous souhaitez masquer. A votre convenance, toutes les données dans la liste des options de Filtrage sont triées par ordre croissant. Remarque: la case à cocher (vide) correspond aux cellules vides. Celle-ci est disponible quand il y a au moins une cellule vide dans la plage de cellules. Pour faciliter la procédure, utilisez le champ de recherche en haut. Taper votre requête partiellement ou entièrement dans le champ, les valeurs qui comprennent ces caractères-ci, s'affichent dans la liste ci-dessous. Ces deux options suivantes sont aussi disponibles: Sélectionner tous les résultats de la recherche - cochée par défaut. Permet de sélectionner toutes les valeurs correspondant à la requête. Ajouter le sélection actuelle au filtre - si vous cochez cette case, les valeurs sélectionnées ne seront pas masquées lorsque vous appliquerez le filtre. Après avoir sélectionné toutes les données nécessaires, cliquez sur le bouton OK dans la liste des options de Filtrage pour appliquer le filtre. Filtrer les données selon certains critères En fonction des données contenues dans la colonne sélectionnée, vous pouvez choisir le Filtre étiquette ou le Filtre de valeur dans la partie droite de la liste d'options de Filtrage, puis sélectionner l'une des options dans le sous-menu: Pour le Filtre étiquette les options suivantes sont disponibles: Pour texte: Équivaut à..., N'est pas égal à..., Commence par..., Ne pas commencer par..., Se termine par..., Ne se termine pas avec..., Contient..., Ne contient pas... Pour nombres: Plus grand que..., Plus grand ou égal à..., Moins que..., Moins que ou égal à..., Entre, Pas entre. Pour le Filtre de valeur, les options suivantes sont disponibles: Équivaut à..., N'est pas égal à..., Plus grand que..., Plus grand ou égal à..., Moins que..., Moins que ou égal à..., Entre, Pas entre, Les 10 premiers. Après avoir sélectionné l'une des options ci-dessus (à l'exception des options Les 10 premiers), la fenêtre Filtre étiquette/de valeur s'ouvre. Le critère correspondant sera sélectionné dans la première ou secondaire liste déroulante. Spécifiez la valeur nécessaire dans le champ situé à droite. Cliquez sur OK pour appliquer le filtre. Si vous choisissez l'option Les 10 premiers dans la liste des options de Filtre de valeur, une nouvelle fenêtre s'ouvrira: La première liste déroulante permet de choisir si vous souhaitez afficher les valeurs les plus élevées (Haut) ou les plus basses (Bas). La deuxième permet de spécifier le nombre d'entrées dans la liste ou le pourcentage du nombre total des entrées que vous souhaitez afficher (vous pouvez entrer un nombre compris entre 1 et 500). La troisième liste déroulante permet de définir des unités de mesure: Élément, Pour cent ou Somme. La quatrième liste déroulante affiche le nom du champ choisi. Une fois les paramètres nécessaires définis, cliquez sur OK pour appliquer le filtre. Le bouton de Filtrage s'affiche dans Étiquettes de lignes ou Étiquettes de colonnes du tableau croisé dynamique. Cela signifie que le filtre est appliqué. Tri Vous pouvez effectuer le tri des données du tableau croisé dynamique en utilisant les options de tri. Cliquez sur la flèche de la liste déroulante dans Étiquettes de lignes ou Étiquettes de colonnes du tableau croisé dynamique et sélectionnez Trier du plus bas au plus élevé ou Trier du plus élevé au plus bas dans le sous-menu. Les Options de tri supplémentaires vous permettent d'ouvrir la fenêtre et choisir une option de tri: Ordre croissant ou Ordre décroissant, et puis spécifier le champ à trier. Insérer des segments Vous pouvez insérer des segments pour filtrer facilement les données et sélectionner les éléments que vous voulez afficher. Pour en savoir plus sur les segments, veuillez consulter le guide de création des segments. Configurer les paramètres avancés du tableau croisé dynamique Pour configurer les paramètres avancés du tableau croisé dynamique, cliquez sur le lien Afficher les paramètres avancés sur la barre latérale droite. La fenêtre Tableau croisé dynamique - Paramètres avancés, s'ouvre: Sous l'onglet Nom et disposition vous pouvez configurer les paramètres communs du tableau croisé dynamique. L'option Nom permet de modifier le nom du tableau croisé dynamique. La section Grands Totaux permet d'afficher ou de ne pas afficher les totaux généraux dans le tableau croisé dynamique. Les options Afficher pour les lignes et Afficher pour les colonnes sont activées par défaut. Vous pouvez les désactiver toutes les deux ou décocher la case appropriée pour masquer les certains grand totaux du tableau croisé dynamique. Remarque: les options similaires sont aussi disponibles sur le menu Grands Totaux dans la barre d'outils en haut. La section Afficher les champs dans la zone de filtre du rapport permet de configurer les filtres dans la section Filtres quand vous les y ajoutez: L'option Vers le bas, puis à droite s'utilise pour organiser les colonnes. Celle-ci vous permet d'afficher des filtres du rapport pour la colonne. L'option À droite, puis vers le bas s'utilise pour organiser les lignes. Celle-ci vous permet d'afficher des filtres du rapport pour la ligne. L'option Afficher les champs de filtre de rapport par colonne sélectionnez le nombre de filtres à afficher pour chaque colonne. La valeur par défaut est 0. Vous pouvez régler la valeur numérique. La section En-têtes des champs permet d'afficher ou de ne pas afficher les en-têtes de champ dans le tableau croisé dynamique. L'option Afficher les en-têtes des champs pour les lignes et les colonnes est activée par défaut. Décochez-la pour masquer les en-têtes de champ du tableau croisé dynamique. Sous l'onglet La source de données vous pouvez modifier les données à utiliser pour créer le tableau croisé dynamique. Vérifiez la Plage de données et modifiez-la si nécessaire. Pour ce faire, cliquez sur l'icône . Dans la fenêtre Sélectionner une plage de données, saisissez la plage de données appropriée sous le format suivant: Sheet1!$A$1:$E$10. Vous pouvez aussi sélectionner la plage de cellules qui vous convient avec la souris. Cliquez OK pour confirmer. L'onglet Texte de remplacement permet de spécifier un Titre et une Description qui sera lue aux personnes avec des déficiences cognitives ou visuelles pour les aider à mieux comprendre l'information du tableau croisé dynamique. Supprimer le tableau croisé dynamique Pour supprimer un tableau croisé dynamique, sélectionnez le tableau croisé dynamique entier en utilisant le bouton Sélectionner dans la barre d'outils supérieure. Appuyez sur la touche de Suppression." }, { "id": "UsageInstructions/RemoveDuplicates.htm", diff --git a/apps/spreadsheeteditor/main/resources/help/ru/Functions/xlookup.htm b/apps/spreadsheeteditor/main/resources/help/ru/Functions/xlookup.htm index 8eb9da89d..ccbfa6e44 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/Functions/xlookup.htm +++ b/apps/spreadsheeteditor/main/resources/help/ru/Functions/xlookup.htm @@ -11,7 +11,7 @@
    - +

    Функция ПРОСМОТРX

    Функция ПРОСМОТРX - это одна из поисковых функций. Она используется для поиска определенного элемента по строке как по горизонтали, так и по вертикали. Возвращает элемент, соответствующий первому совпадению.

    @@ -23,7 +23,7 @@

    возращаемый_массив - это массив или диапазон, в который возвращаются результаты.

    если_ничего_не_найдено  - это необязательный аргумент. Если результата поиска нет, аргумент возвращает текст, указанный в [если_ничего_не_найдено]. Если текст не указан, возвращается «Н/Д».

    - режим_сопоставления - это необязательный аргумент. + режим_сопоставления - это необязательный аргумент. Доступны следующие значения:

    • 0 (установлен по умолчанию) возвращает точное совпадение; если совпадений нет, вместо них возвращается «Н/Д».
    • -1 возвращает точное совпадение; если его нет, возвращается следующий меньший элемент.
    • @@ -32,7 +32,7 @@

    - режим_поиска - необязательный аргумент. + режим_поиска - необязательный аргумент. Доступны следующие значения:

    • 1 запускает поиск по первому элементу (установлен по умолчанию).
    • -1 запускает обратный поиск, т.е. по последнему элементу.
    • @@ -53,7 +53,7 @@
    • выберите из списка группу функций Поиск и ссылки,
    • щелкните по функции ПРОСМОТРX,
    • -
    • введите требуемые аргументы через точку с запятой или выделите мышью диапазон ячеек,
    • +
    • введите требуемые аргументы в окно Аргументы функции,
    • нажмите клавишу Enter.
    • Результат будет отображен в выбранной ячейке.

      diff --git a/apps/spreadsheeteditor/main/resources/help/ru/HelpfulHints/About.htm b/apps/spreadsheeteditor/main/resources/help/ru/HelpfulHints/About.htm index 8079103ff..cecbe3c43 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/HelpfulHints/About.htm +++ b/apps/spreadsheeteditor/main/resources/help/ru/HelpfulHints/About.htm @@ -16,7 +16,7 @@

      О редакторе электронных таблиц

      Редактор электронных таблиц - это онлайн-приложение, которое позволяет редактировать электронные таблицы непосредственно в браузере.

      С помощью онлайн-редактора электронных таблиц можно выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные электронные таблицы, сохраняя все детали форматирования, или сохранять таблицы на жесткий диск компьютера как файлы в формате XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS.

      -

      Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку Значок О программе на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии выберите пункт меню О программе на левой боковой панели в главном окне приложения.

      +

      Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку Значок О программе на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии для Windows выберите пункт меню О программе на левой боковой панели в главном окне приложения. В десктопной версии для Mac OS откройте меню ONLYOFFICE в верхней части и выберите пункт меню О программе ONLYOFFICE

    \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/AlignText.htm b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/AlignText.htm index 5577fc1d4..45578d50d 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/AlignText.htm +++ b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/AlignText.htm @@ -10,9 +10,9 @@
    -
    - -
    +
    + +

    Выравнивание данных в ячейках

    Данные внутри ячейки можно выравнивать горизонтально или вертикально или даже поворачивать. Для этого выделите ячейку, диапазон ячеек мышью или весь рабочий лист, нажав сочетание клавиш Ctrl+A. Можно также выделить несколько ячеек или диапазонов ячеек, которые не являются смежными, удерживая клавишу Ctrl при выделении ячеек и диапазонов с помощью мыши. Затем выполните одну из следующих операций, используя значки, расположенные на вкладке Главная верхней панели инструментов.

      @@ -39,18 +39,26 @@
    • используйте опцию Горизонтальный текст Значок Горизонтальный текст, чтобы расположить текст по горизонтали (эта опция используется по умолчанию),
    • используйте опцию Текст против часовой стрелки Значок Текст против часовой стрелки, чтобы расположить текст в ячейке от левого нижнего угла к правому верхнему,
    • используйте опцию Текст по часовой стрелке Значок Текст по часовой стрелке, чтобы расположить текст в ячейке от левого верхнего угла к правому нижнему углу,
    • +
    • используйте опцию Вертикальный текст Значок Вертикальный текст, чтобы расположить текст вертикально,
    • используйте опцию Повернуть текст вверх Значок Повернуть текст вверх, чтобы расположить текст в ячейке снизу вверх,
    • используйте опцию Повернуть текст вниз Значок Повернуть текст вниз, чтобы расположить текст в ячейке сверху вниз. -

      Параметры ячейки

    -
  • Чтобы добавить отступ для текста в ячейке, в разделе Параметры ячейки правой боковой панели введите значение Отступа, на которое содержимое ячейки будет перемещено вправо.
  • -
  • Чтобы повернуть текст на точно заданный угол, нажмите на значок Параметры ячейки Значок Параметры ячейки на правой боковой панели и используйте раздел Ориентация. Введите в поле Угол нужное значение в градусах или скорректируйте его, используя стрелки справа.
  • + +

    Параметры ячейки

    +
      +
    • + Чтобы добавить отступ для текста в ячейке, в разделе Параметры ячейки правой боковой панели введите значение Отступа, на которое содержимое ячейки будет перемещено вправо. +

      Если вы измените ориентацию текста, отступы будут сброшены. Если вы измените отступы для повернутого текста, ориентация текста будет сброшена. Отступы можно установить только если выбрана горизонтальная или вертикальная ориентация текста.

      +
    • +
    • + Чтобы повернуть текст на точно заданный угол, нажмите на значок Параметры ячейки Значок Параметры ячейки на правой боковой панели и используйте раздел Ориентация. Введите в поле Угол нужное значение в градусах или скорректируйте его, используя стрелки справа. +
    • Расположите данные в ячейке в соответствии с шириной столбца, щелкнув по значку Перенос текста Значок Перенос текста. -

      Примечание: при изменении ширины столбца перенос текста настраивается автоматически.

      +

      При изменении ширины столбца перенос текста настраивается автоматически.

    • Чтобы расположить данные в ячейке в соответствии с шириной ячейки, установте флажок Автоподбор ширины на правой боковой панели. Содержимое ячейки будет уменьшено в размерах так, чтобы оно могло полностью уместиться внутри.
    diff --git a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/PivotTables.htm b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/PivotTables.htm index a4b8b73f1..8b7947e01 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/PivotTables.htm +++ b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/PivotTables.htm @@ -150,6 +150,12 @@
  • По - установить необходимый интервал для группировки номеров. Например, «2» сгруппирует набор чисел от 1 до 10 как и «1-2», «3-4» и т.д.
  • По завершении нажмите ОК.
  • +

    Газгруппировка данных

    +

    Чтобы разгруппировать ранее сгруппированные данные,

    +
      +
    1. щелкните правой кнопкой мыши любую ячейку в группе,
    2. +
    3. выберите опцию Разгруппировать в контекстном меню.
    4. +

    Изменение оформления сводных таблиц

    Опции, доступные на верхней панели инструментов, позволяют изменить способ отображения сводной таблицы. Эти параметры применяются ко всей сводной таблице.

    diff --git a/apps/spreadsheeteditor/main/resources/help/ru/search/indexes.js b/apps/spreadsheeteditor/main/resources/help/ru/search/indexes.js index 7f6d374f3..e9ef64ce7 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/search/indexes.js +++ b/apps/spreadsheeteditor/main/resources/help/ru/search/indexes.js @@ -2253,7 +2253,7 @@ var indexes = { "id": "Functions/xlookup.htm", "title": "Функция ПРОСМОТРX", - "body": "Функция ПРОСМОТРX - это одна из поисковых функций. Она используется для поиска определенного элемента по строке как по горизонтали, так и по вертикали. Возвращает элемент, соответствующий первому совпадению. Синтаксис функции ПРОСМОТРX: ПРОСМОТРX (искомое_значение, просматриваемый_массив, возращаемый_массив, [если_ничего_не_найдено], [режим_сопоставления], [режим_поиска]) где искомое_значение- - это искомое значение. просматриваемый_массив - это массив или диапазон для поиска. возращаемый_массив - это массив или диапазон, в который возвращаются результаты. если_ничего_не_найдено  - это необязательный аргумент. Если результата поиска нет, аргумент возвращает текст, указанный в [если_ничего_не_найдено]. Если текст не указан, возвращается «Н/Д». режим_сопоставления - это необязательный аргумент. 0 (установлен по умолчанию) возвращает точное совпадение; если совпадений нет, вместо них возвращается «Н/Д». -1 возвращает точное совпадение; если его нет, возвращается следующий меньший элемент. 1 возвращает точное совпадение; если его нет, возвращается следующий больший элемент. 2 где постановочные знаки имеют специальное значение. режим_поиска - необязательный аргумент. 1 запускает поиск по первому элементу (установлен по умолчанию). -1 запускает обратный поиск, т.е. по последнему элементу. 2 запускает двоичный поиск с просматриваемый_массив , отсортированным в порядке возрастания. Если не отсортировано, будут возвращены недопустимые результаты. -2 запускает двоичный поиск с просматриваемый_массив , отсортированным в порядке убывания. Если не отсортировано, будут возвращены недопустимые результаты. Подстановочные знаки включают вопросительный знак (?), Который соответствует одному символу, и звездочку (*), которая соответствует нескольким символам. Если вы хотите найти вопросительный знак или звездочку, введите тильду (~) перед символом. Чтобы применить функцию ПРОСМОТРX, выделите ячейку, в которой требуется отобразить результат, щелкните по значку Вставить функцию , расположенному на верхней панели инструментов, или щелкните правой кнопкой мыши по выделенной ячейке и выберите в меню команду Вставить функцию, или щелкните по значку перед строкой формул, выберите из списка группу функций Поиск и ссылки, щелкните по функции ПРОСМОТРX, введите требуемые аргументы через точку с запятой или выделите мышью диапазон ячеек, нажмите клавишу Enter. Результат будет отображен в выбранной ячейке." + "body": "Функция ПРОСМОТРX - это одна из поисковых функций. Она используется для поиска определенного элемента по строке как по горизонтали, так и по вертикали. Возвращает элемент, соответствующий первому совпадению. Синтаксис функции ПРОСМОТРX: ПРОСМОТРX (искомое_значение, просматриваемый_массив, возращаемый_массив, [если_ничего_не_найдено], [режим_сопоставления], [режим_поиска]) где искомое_значение- - это искомое значение. просматриваемый_массив - это массив или диапазон для поиска. возращаемый_массив - это массив или диапазон, в который возвращаются результаты. если_ничего_не_найдено  - это необязательный аргумент. Если результата поиска нет, аргумент возвращает текст, указанный в [если_ничего_не_найдено]. Если текст не указан, возвращается «Н/Д». режим_сопоставления - это необязательный аргумент. Доступны следующие значения: 0 (установлен по умолчанию) возвращает точное совпадение; если совпадений нет, вместо них возвращается «Н/Д». -1 возвращает точное совпадение; если его нет, возвращается следующий меньший элемент. 1 возвращает точное совпадение; если его нет, возвращается следующий больший элемент. 2 где постановочные знаки имеют специальное значение. режим_поиска - необязательный аргумент. Доступны следующие значения: 1 запускает поиск по первому элементу (установлен по умолчанию). -1 запускает обратный поиск, т.е. по последнему элементу. 2 запускает двоичный поиск с просматриваемый_массив , отсортированным в порядке возрастания. Если не отсортировано, будут возвращены недопустимые результаты. -2 запускает двоичный поиск с просматриваемый_массив , отсортированным в порядке убывания. Если не отсортировано, будут возвращены недопустимые результаты. Подстановочные знаки включают вопросительный знак (?), Который соответствует одному символу, и звездочку (*), которая соответствует нескольким символам. Если вы хотите найти вопросительный знак или звездочку, введите тильду (~) перед символом. Чтобы применить функцию ПРОСМОТРX, выделите ячейку, в которой требуется отобразить результат, щелкните по значку Вставить функцию , расположенному на верхней панели инструментов, или щелкните правой кнопкой мыши по выделенной ячейке и выберите в меню команду Вставить функцию, или щелкните по значку перед строкой формул, выберите из списка группу функций Поиск и ссылки, щелкните по функции ПРОСМОТРX, введите требуемые аргументы в окно Аргументы функции, нажмите клавишу Enter. Результат будет отображен в выбранной ячейке." }, { "id": "Functions/xnpv.htm", @@ -2303,7 +2303,7 @@ var indexes = { "id": "HelpfulHints/About.htm", "title": "О редакторе электронных таблиц", - "body": "Редактор электронных таблиц - это онлайн- приложение, которое позволяет редактировать электронные таблицы непосредственно в браузере . С помощью онлайн- редактора электронных таблиц можно выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные электронные таблицы, сохраняя все детали форматирования, или сохранять таблицы на жесткий диск компьютера как файлы в формате XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS. Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии выберите пункт меню О программе на левой боковой панели в главном окне приложения." + "body": "Редактор электронных таблиц - это онлайн- приложение, которое позволяет редактировать электронные таблицы непосредственно в браузере . С помощью онлайн- редактора электронных таблиц можно выполнять различные операции редактирования, как в любом десктопном редакторе, распечатывать отредактированные электронные таблицы, сохраняя все детали форматирования, или сохранять таблицы на жесткий диск компьютера как файлы в формате XLSX, PDF, ODS, CSV, XLTX, PDF/A, OTS. Для просмотра текущей версии программы и информации о владельце лицензии в онлайн-версии щелкните по значку на левой боковой панели инструментов. Для просмотра текущей версии программы и информации о владельце лицензии в десктопной версии для Windows выберите пункт меню О программе на левой боковой панели в главном окне приложения. В десктопной версии для Mac OS откройте меню ONLYOFFICE в верхней части и выберите пункт меню О программе ONLYOFFICE" }, { "id": "HelpfulHints/AdvancedSettings.htm", @@ -2413,7 +2413,7 @@ var indexes = { "id": "UsageInstructions/AlignText.htm", "title": "Выравнивание данных в ячейках", - "body": "Данные внутри ячейки можно выравнивать горизонтально или вертикально или даже поворачивать. Для этого выделите ячейку, диапазон ячеек мышью или весь рабочий лист, нажав сочетание клавиш Ctrl+A. Можно также выделить несколько ячеек или диапазонов ячеек, которые не являются смежными, удерживая клавишу Ctrl при выделении ячеек и диапазонов с помощью мыши. Затем выполните одну из следующих операций, используя значки, расположенные на вкладке Главная верхней панели инструментов. Примените один из типов горизонтального выравнивания данных внутри ячейки: нажмите на значок По левому краю для выравнивания данных по левому краю ячейки (правый край остается невыровненным); нажмите на значок По центру для выравнивания данных по центру ячейки (правый и левый края остаются невыровненными); нажмите на значок По правому краю для выравнивания данных по правому краю ячейки (левый край остается невыровненным); нажмите на значок По ширине для выравнивания данных как по левому, так и по правому краю ячейки (выравнивание осуществляется за счет добавления дополнительных интервалов там, где это необходимо). Измените вертикальное выравнивание данных внутри ячейки: нажмите на значок По верхнему краю для выравнивания данных по верхнему краю ячейки; нажмите на значок По середине для выравнивания данных по центру ячейки; нажмите на значок По нижнему краю для выравнивания данных по нижнему краю ячейки. Измените угол наклона данных внутри ячейки, щелкнув по значку Ориентация и выбрав одну из опций: используйте опцию Горизонтальный текст , чтобы расположить текст по горизонтали (эта опция используется по умолчанию), используйте опцию Текст против часовой стрелки , чтобы расположить текст в ячейке от левого нижнего угла к правому верхнему, используйте опцию Текст по часовой стрелке , чтобы расположить текст в ячейке от левого верхнего угла к правому нижнему углу, используйте опцию Повернуть текст вверх , чтобы расположить текст в ячейке снизу вверх, используйте опцию Повернуть текст вниз , чтобы расположить текст в ячейке сверху вниз. Чтобы добавить отступ для текста в ячейке, в разделе Параметры ячейки правой боковой панели введите значение Отступа, на которое содержимое ячейки будет перемещено вправо. Чтобы повернуть текст на точно заданный угол, нажмите на значок Параметры ячейки на правой боковой панели и используйте раздел Ориентация. Введите в поле Угол нужное значение в градусах или скорректируйте его, используя стрелки справа. Расположите данные в ячейке в соответствии с шириной столбца, щелкнув по значку Перенос текста . Примечание: при изменении ширины столбца перенос текста настраивается автоматически. Чтобы расположить данные в ячейке в соответствии с шириной ячейки, установте флажок Автоподбор ширины на правой боковой панели. Содержимое ячейки будет уменьшено в размерах так, чтобы оно могло полностью уместиться внутри." + "body": "Данные внутри ячейки можно выравнивать горизонтально или вертикально или даже поворачивать. Для этого выделите ячейку, диапазон ячеек мышью или весь рабочий лист, нажав сочетание клавиш Ctrl+A. Можно также выделить несколько ячеек или диапазонов ячеек, которые не являются смежными, удерживая клавишу Ctrl при выделении ячеек и диапазонов с помощью мыши. Затем выполните одну из следующих операций, используя значки, расположенные на вкладке Главная верхней панели инструментов. Примените один из типов горизонтального выравнивания данных внутри ячейки: нажмите на значок По левому краю для выравнивания данных по левому краю ячейки (правый край остается невыровненным); нажмите на значок По центру для выравнивания данных по центру ячейки (правый и левый края остаются невыровненными); нажмите на значок По правому краю для выравнивания данных по правому краю ячейки (левый край остается невыровненным); нажмите на значок По ширине для выравнивания данных как по левому, так и по правому краю ячейки (выравнивание осуществляется за счет добавления дополнительных интервалов там, где это необходимо). Измените вертикальное выравнивание данных внутри ячейки: нажмите на значок По верхнему краю для выравнивания данных по верхнему краю ячейки; нажмите на значок По середине для выравнивания данных по центру ячейки; нажмите на значок По нижнему краю для выравнивания данных по нижнему краю ячейки. Измените угол наклона данных внутри ячейки, щелкнув по значку Ориентация и выбрав одну из опций: используйте опцию Горизонтальный текст , чтобы расположить текст по горизонтали (эта опция используется по умолчанию), используйте опцию Текст против часовой стрелки , чтобы расположить текст в ячейке от левого нижнего угла к правому верхнему, используйте опцию Текст по часовой стрелке , чтобы расположить текст в ячейке от левого верхнего угла к правому нижнему углу, используйте опцию Вертикальный текст , чтобы расположить текст вертикально, используйте опцию Повернуть текст вверх , чтобы расположить текст в ячейке снизу вверх, используйте опцию Повернуть текст вниз , чтобы расположить текст в ячейке сверху вниз. Чтобы добавить отступ для текста в ячейке, в разделе Параметры ячейки правой боковой панели введите значение Отступа, на которое содержимое ячейки будет перемещено вправо. Если вы измените ориентацию текста, отступы будут сброшены. Если вы измените отступы для повернутого текста, ориентация текста будет сброшена. Отступы можно установить только если выбрана горизонтальная или вертикальная ориентация текста. Чтобы повернуть текст на точно заданный угол, нажмите на значок Параметры ячейки на правой боковой панели и используйте раздел Ориентация. Введите в поле Угол нужное значение в градусах или скорректируйте его, используя стрелки справа. Расположите данные в ячейке в соответствии с шириной столбца, щелкнув по значку Перенос текста . При изменении ширины столбца перенос текста настраивается автоматически. Чтобы расположить данные в ячейке в соответствии с шириной ячейки, установте флажок Автоподбор ширины на правой боковой панели. Содержимое ячейки будет уменьшено в размерах так, чтобы оно могло полностью уместиться внутри." }, { "id": "UsageInstructions/ChangeNumberFormat.htm", @@ -2488,7 +2488,7 @@ var indexes = { "id": "UsageInstructions/InsertImages.htm", "title": "Вставка изображений", - "body": "В онлайн-редакторе электронных таблиц можно вставлять в электронную таблицу изображения самых популярных форматов. Поддерживаются следующие форматы изображений: BMP, GIF, JPEG, JPG, PNG. Вставка изображения Для вставки изображения в электронную таблицу: установите курсор там, где требуется поместить изображение, перейдите на вкладку Вставка верхней панели инструментов, нажмите значок Изображение на верхней панели инструментов, для загрузки изображения выберите одну из следующих опций: при выборе опции Изображение из файла откроется стандартное диалоговое окно для выбора файлов. Выберите нужный файл на жестком диске компьютера и нажмите кнопку Открыть В онлайн-редакторе вы можете выбрать сразу несколько изображений. при выборе опции Изображение по URL откроется окно, в котором можно ввести веб-адрес нужного изображения, а затем нажать кнопку OK при выборе опции Изображение из хранилища откроется окно Выбрать источник данных. Выберите изображение, сохраненное на вашем портале, и нажмите кнопку OK После этого изображение будет добавлено на рабочий лист. Изменение параметров изображения После того как изображение будет добавлено, можно изменить его размер и положение. Для того, чтобы задать точные размеры изображения: выделите мышью изображение, размер которого требуется изменить, щелкните по значку Параметры изображения на правой боковой панели, в разделе Размер задайте нужные значения Ширины и Высоты. Если нажата кнопка Сохранять пропорции (в этом случае она выглядит так: ), ширина и высота будут изменены пропорционально, сохраняя исходное соотношение сторон изображения. Чтобы восстановить реальный размер добавленного изображения, нажмите кнопку Реальный размер. Для того, чтобы обрезать изображение: Кнопка Обрезать используется, чтобы обрезать изображение. Нажмите кнопку Обрезать, чтобы активировать маркеры обрезки, которые появятся в углах изображения и в центре каждой его стороны. Вручную перетаскивайте маркеры, чтобы задать область обрезки. Вы можете навести курсор мыши на границу области обрезки, чтобы курсор превратился в значок , и перетащить область обрезки. Чтобы обрезать одну сторону, перетащите маркер, расположенный в центре этой стороны. Чтобы одновременно обрезать две смежных стороны, перетащите один из угловых маркеров. Чтобы равномерно обрезать две противоположные стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании маркера в центре одной из этих сторон. Чтобы равномерно обрезать все стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании любого углового маркера. Когда область обрезки будет задана, еще раз нажмите на кнопку Обрезать, или нажмите на клавишу Esc, или щелкните мышью за пределами области обрезки, чтобы применить изменения. После того, как область обрезки будет задана, также можно использовать опции Заливка и Вписать, доступные в выпадающем меню Обрезать. Нажмите кнопку Обрезать еще раз и выберите нужную опцию: При выборе опции Заливка центральная часть исходного изображения будет сохранена и использована в качестве заливки выбранной области обрезки, в то время как остальные части изображения будут удалены. При выборе опции Вписать размер изображения будет изменен, чтобы оно соответствовало высоте или ширине области обрезки. Никакие части исходного изображения не будут удалены, но внутри выбранной области обрезки могут появится пустые пространства. Для того, чтобы повернуть изображение: выделите мышью изображение, которое требуется повернуть, щелкните по значку Параметры изображения на правой боковой панели, в разделе Поворот нажмите на одну из кнопок: чтобы повернуть изображение на 90 градусов против часовой стрелки чтобы повернуть изображение на 90 градусов по часовой стрелке чтобы отразить изображение по горизонтали (слева направо) чтобы отразить изображение по вертикали (сверху вниз) Примечание: вы также можете щелкнуть по изображению правой кнопкой мыши и использовать пункт контекстного меню Поворот. Для замены вставленного изображения: выделите мышью изображение, которое требуется заменить, щелкните по значку Параметры изображения на правой боковой панели, нажмите кнопку Заменить изображение, выберите нужную опцию: Из файла, Из хранилища или По URL и выберите требуемое изображение. Примечание: вы также можете щелкнуть по изображению правой кнопкой мыши и использовать пункт контекстного меню Заменить изображение. Выбранное изображение будет заменено. Когда изображение выделено, справа также доступен значок Параметры фигуры . Можно щелкнуть по нему, чтобы открыть вкладку Параметры фигуры на правой боковой панели и настроить тип, толщину и цвет Контур фигуры, а также изменить тип фигуры, выбрав другую фигуру в меню Изменить автофигуру. Форма изображения изменится соответствующим образом. На вкладке Параметры фигуры также можно использовать опцию Отображать тень, чтобы добавить тень к изображеню. Изменение дополнительныx параметров изображения Чтобы изменить дополнительные параметры изображения, щелкните по нему правой кнопкой мыши и выберите из контекстного меню пункт Дополнительные параметры изображения. Или нажмите ссылку Дополнительные параметры на правой боковой панели. Откроется окно свойств изображения: Вкладка Поворот содержит следующие параметры: Угол - используйте эту опцию, чтобы повернуть изображение на точно заданный угол. Введите в поле нужное значение в градусах или скорректируйте его, используя стрелки справа. Отражено - отметьте галочкой опцию По горизонтали, чтобы отразить изображение по горизонтали (слева направо), или отметьте галочкой опцию По вертикали, чтобы отразить изображение по вертикали (сверху вниз). Вкладка Привязка к ячейке содержит следующие параметры: Перемещать и изменять размеры вместе с ячейками - эта опция позволяет привязать изображение к ячейке позади него. Если ячейка перемещается (например, при вставке или удалении нескольких строк/столбцов), изображение будет перемещаться вместе с ячейкой. При увеличении или уменьшении ширины или высоты ячейки размер изображения также будет изменяться. Перемещать, но не изменять размеры вместе с ячейками - эта опция позволяет привязать изображение к ячейке позади него, не допуская изменения размера изображения. Если ячейка перемещается, изображение будет перемещаться вместе с ячейкой, но при изменении размера ячейки размеры изображения останутся неизменными. Не перемещать и не изменять размеры вместе с ячейками - эта опция позволяет запретить перемещение или изменение размера изображения при изменении положения или размера ячейки. Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит изображение. Чтобы удалить вставленное изображение, щелкните по нему и нажмите клавишу Delete." + "body": "В онлайн-редакторе электронных таблиц можно вставлять в электронную таблицу изображения самых популярных форматов. Поддерживаются следующие форматы изображений: BMP, GIF, JPEG, JPG, PNG. Вставка изображения Для вставки изображения в электронную таблицу: установите курсор там, где требуется поместить изображение, перейдите на вкладку Вставка верхней панели инструментов, нажмите значок Изображение на верхней панели инструментов, для загрузки изображения выберите одну из следующих опций: при выборе опции Изображение из файла откроется стандартное диалоговое окно для выбора файлов. Выберите нужный файл на жестком диске компьютера и нажмите кнопку Открыть В онлайн-редакторе вы можете выбрать сразу несколько изображений. при выборе опции Изображение по URL откроется окно, в котором можно ввести веб-адрес нужного изображения, а затем нажать кнопку OK при выборе опции Изображение из хранилища откроется окно Выбрать источник данных. Выберите изображение, сохраненное на вашем портале, и нажмите кнопку OK После этого изображение будет добавлено на рабочий лист. Изменение параметров изображения После того как изображение будет добавлено, можно изменить его размер и положение. Для того, чтобы задать точные размеры изображения: выделите мышью изображение, размер которого требуется изменить, щелкните по значку Параметры изображения на правой боковой панели, в разделе Размер задайте нужные значения Ширины и Высоты. Если нажата кнопка Сохранять пропорции (в этом случае она выглядит так: ), ширина и высота будут изменены пропорционально, сохраняя исходное соотношение сторон изображения. Чтобы восстановить реальный размер добавленного изображения, нажмите кнопку Реальный размер. Для того, чтобы обрезать изображение: Кнопка Обрезать используется, чтобы обрезать изображение. Нажмите кнопку Обрезать, чтобы активировать маркеры обрезки, которые появятся в углах изображения и в центре каждой его стороны. Вручную перетаскивайте маркеры, чтобы задать область обрезки. Вы можете навести курсор мыши на границу области обрезки, чтобы курсор превратился в значок , и перетащить область обрезки. Чтобы обрезать одну сторону, перетащите маркер, расположенный в центре этой стороны. Чтобы одновременно обрезать две смежных стороны, перетащите один из угловых маркеров. Чтобы равномерно обрезать две противоположные стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании маркера в центре одной из этих сторон. Чтобы равномерно обрезать все стороны изображения, удерживайте нажатой клавишу Ctrl при перетаскивании любого углового маркера. Когда область обрезки будет задана, еще раз нажмите на кнопку Обрезать, или нажмите на клавишу Esc, или щелкните мышью за пределами области обрезки, чтобы применить изменения. После того, как область обрезки будет задана, также можно использовать опции Заливка и Вписать, доступные в выпадающем меню Обрезать. Нажмите кнопку Обрезать еще раз и выберите нужную опцию: При выборе опции Заливка центральная часть исходного изображения будет сохранена и использована в качестве заливки выбранной области обрезки, в то время как остальные части изображения будут удалены. При выборе опции Вписать размер изображения будет изменен, чтобы оно соответствовало высоте или ширине области обрезки. Никакие части исходного изображения не будут удалены, но внутри выбранной области обрезки могут появится пустые пространства. Для того, чтобы повернуть изображение: выделите мышью изображение, которое требуется повернуть, щелкните по значку Параметры изображения на правой боковой панели, в разделе Поворот нажмите на одну из кнопок: чтобы повернуть изображение на 90 градусов против часовой стрелки чтобы повернуть изображение на 90 градусов по часовой стрелке чтобы отразить изображение по горизонтали (слева направо) чтобы отразить изображение по вертикали (сверху вниз) Примечание: вы также можете щелкнуть по изображению правой кнопкой мыши и использовать пункт контекстного меню Поворот. Для замены вставленного изображения: выделите мышью изображение, которое требуется заменить, щелкните по значку Параметры изображения на правой боковой панели, нажмите кнопку Заменить изображение, выберите нужную опцию: Из файла, Из хранилища или По URL и выберите требуемое изображение. Примечание: вы также можете щелкнуть по изображению правой кнопкой мыши и использовать пункт контекстного меню Заменить изображение. Выбранное изображение будет заменено. Когда изображение выделено, справа также доступен значок Параметры фигуры . Можно щелкнуть по нему, чтобы открыть вкладку Параметры фигуры на правой боковой панели и настроить тип, толщину и цвет Контуров фигуры, а также изменить тип фигуры, выбрав другую фигуру в меню Изменить автофигуру. Форма изображения изменится соответствующим образом. На вкладке Параметры фигуры также можно использовать опцию Отображать тень, чтобы добавить тень к изображеню. Изменение дополнительныx параметров изображения Чтобы изменить дополнительные параметры изображения, щелкните по нему правой кнопкой мыши и выберите из контекстного меню пункт Дополнительные параметры изображения. Или нажмите ссылку Дополнительные параметры на правой боковой панели. Откроется окно свойств изображения: Вкладка Поворот содержит следующие параметры: Угол - используйте эту опцию, чтобы повернуть изображение на точно заданный угол. Введите в поле нужное значение в градусах или скорректируйте его, используя стрелки справа. Отражено - отметьте галочкой опцию По горизонтали, чтобы отразить изображение по горизонтали (слева направо), или отметьте галочкой опцию По вертикали, чтобы отразить изображение по вертикали (сверху вниз). Вкладка Привязка к ячейке содержит следующие параметры: Перемещать и изменять размеры вместе с ячейками - эта опция позволяет привязать изображение к ячейке позади него. Если ячейка перемещается (например, при вставке или удалении нескольких строк/столбцов), изображение будет перемещаться вместе с ячейкой. При увеличении или уменьшении ширины или высоты ячейки размер изображения также будет изменяться. Перемещать, но не изменять размеры вместе с ячейками - эта опция позволяет привязать изображение к ячейке позади него, не допуская изменения размера изображения. Если ячейка перемещается, изображение будет перемещаться вместе с ячейкой, но при изменении размера ячейки размеры изображения останутся неизменными. Не перемещать и не изменять размеры вместе с ячейками - эта опция позволяет запретить перемещение или изменение размера изображения при изменении положения или размера ячейки. Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит изображение. Чтобы удалить вставленное изображение, щелкните по нему и нажмите клавишу Delete." }, { "id": "UsageInstructions/InsertSymbols.htm", @@ -2528,7 +2528,7 @@ var indexes = { "id": "UsageInstructions/PivotTables.htm", "title": "Создание и редактирование сводных таблиц", - "body": "Сводные таблицы позволяют группировать и систематизировать данные из больших наборов данных для получения сводной информации. Вы можете упорядочивать данные множеством разных способов, чтобы отображать только нужную информацию и сфокусироваться на важных аспектах. Создание новой сводной таблицы Для создания сводной таблицы: Подготовьте исходный набор данных, который требуется использовать для создания сводной таблицы. Он должен включать заголовки столбцов. Набор данных не должен содержать пустых строк или столбцов. Выделите любую ячейку в исходном диапазоне данных. Перейдите на вкладку Сводная таблица верхней панели инструментов и нажмите на кнопку Вставить таблицу . Если вы хотите создать сводную таблицу на базе форматированной таблицы, также можно использовать опцию Вставить сводную таблицу на вкладке Параметры таблицы правой боковой панели. Откроется окно Создать сводную таблицу. Диапазон исходных данных уже указан. В этом случае будут использоваться все данные из исходного диапазона. Если вы хотите изменить диапазон данных (например, включить только часть исходных данных), нажмите на кнопку . В окне Выбор диапазона данных введите нужный диапазон данных в формате Лист1!$A$1:$E$10. Вы также можете выделить нужный диапазон данных на листе с помощью мыши. Когда все будет готово, нажмите кнопку OK. Укажите, где требуется разместить сводную таблицу. Опция Новый лист выбрана по умолчанию. Она позволяет разместить сводную таблицу на новом рабочем листе. Также можно выбрать опцию Существующий лист и затем выбрать определенную ячейку. В этом случае выбранная ячейка будет правой верхней ячейкой созданной сводной таблицы. Чтобы выбрать ячейку, нажмите на кнопку . В окне Выбор диапазона данных введите адрес ячейки в формате Лист1!$G$2. Также можно щелкнуть по нужной ячейке на листе. Когда все будет готово, нажмите кнопку OK. Когда местоположение таблицы будет выбрано, нажмите кнопку OK в окне Создать таблицу. Пустая сводная таблица будет вставлена в выбранном местоположении. Откроется вкладка Параметры сводной таблицы на правой боковой панели. Эту вкладку можно скрыть или показать, нажав на значок . Выбор полей для отображения Раздел Выбрать поля содержит названия полей, соответствующие заголовкам столбцов в исходном наборе данных. Каждое поле содержит значения из соответствующего столбца исходной таблицы. Ниже доступны следующие четыре поля: Фильтры, Столбцы, Строки и Значения. Отметьте галочками поля, которые требуется отобразить в сводной таблице. Когда вы отметите поле, оно будет добавлено в один из доступных разделов на правой боковой панели в зависимости от типа данных и будет отображено в сводной таблице. Поля, содержащие текстовые значения, будут добавлены в раздел Строки; поля, содержащие числовые значения, будут добавлены в раздел Значения. Вы можете просто перетаскивать поля в нужный раздел, а также перетаскивать поля между разделами, чтобы быстро перестроить сводную таблицу. Чтобы удалить поле из текущего раздела, перетащите его за пределы этого раздела. Чтобы добавить поле в нужный раздел, также можно нажать на черную стрелку справа от поля в разделе Выбрать поля и выбрать нужную опцию из меню: Добавить в фильтры, Добавить в строки, Добавить в столбцы, Добавить в значения. Ниже приводятся примеры использования разделов Фильтры, Столбцы, Строки и Значения. При добавлении поля в раздел Фильтры над сводной таблицей будет добавлен отдельный фильтр. Он будет применен ко всей сводной таблице. Если нажать на кнопку со стрелкой в добавленном фильтре, вы увидите значения из выбранного поля. Если снять галочки с некоторых значений в окне фильтра и нажать кнопку OK, значения, с которых снято выделение, не будут отображаться в сводной таблице. При добавлении поля в раздел Столбцы, сводная таблица будет содержать столько же столбцов, сколько значений содержится в выбранном поле. Также будет добавлен столбец Общий итог. При добавлении поля в раздел Строки, сводная таблица будет содержать столько же строк, сколько значений содержится в выбранном поле. Также будет добавлена строка Общий итог. При добавлении поля в раздел Значения в сводной таблице будет отображаться суммирующее значение для всех числовых значений из выбранных полей. Если поле содержит текстовые значения, будет отображаться количество значений. Функцию, которая используется для вычисления суммирующего значения, можно изменить в настройках поля. Упорядочивание полей и изменение их свойств Когда поля будут добавлены в нужные разделы, ими можно управлять, чтобы изменить макет и формат сводной таблицы. Нажмите на черную стрелку справа от поля в разделе Фильтры, Столбцы, Строки или Значения, чтобы открыть контекстное меню поля. С его помощью можно: Переместить выбранное поле Вверх, Вниз, В начало или В конец текущего раздела, если в текущий раздел добавлено несколько полей. Переместить выбранное поле в другой раздел - в Фильтры, Столбцы, Строки или Значения. Опция, соответствующая текущему разделу, будет неактивна. Удалить выбранное поле из текущего раздела. Изменить параметры выбранного поля. Параметры полей из раздела Фильтры, Столбцы и Строки выглядят одинаково: На вкладке Макет содержатся следующие опции: Опция Имя источника позволяет посмотреть имя поля, соответствующее заголовку столбца из исходного набора данных. Опция Пользовательское имя позволяет изменить имя выбранного поля, отображаемое в сводной таблице. В разделе Форма отчета можно изменить способ отображения выбранного поля в сводной таблице: Выберите нужный макет для выбранного поля в сводной таблице: В форме В виде таблицы отображается один столбец для каждого поля и выделяется место для заголовков полей. В форме Структуры отображается один столбец для каждого поля и выделяется место для заголовков полей. В ней также можно отображать промежуточные итоги над каждой группой. В Компактной форме элементы из разных полей раздела строк отображаются в одном столбце. Опция Повторять метки элементов в каждой строке позволяет визуально группировать строки или столбцы при наличии нескольких полей в табличной форме. Опция Добавлять пустую строку после каждой записи позволяет добавлять пустые строки после элементов выбранного поля. Опция Показывать промежуточные итоги позволяет выбрать, надо ли отображать промежуточные итоги для выбранного поля. Можно выбрать одну из опций: Показывать в заголовке группы или Показывать в нижней части группы. Опция Показывать элементы без данных позволяет показать или скрыть пустые элементы в выбранном поле. На вкладке Промежуточные итоги можно выбрать Функции для промежуточных итогов. Отметьте галочкой нужную функцию в списке: Сумма, Количество, Среднее, Макс, Мин, Произведение, Количество чисел, Стандотклон, Стандотклонп, Дисп, Диспр. Параметры поля значений Опция Имя источника позволяет посмотреть имя поля, соответствующее заголовку столбца из исходного набора данных. Опция Пользовательское имя позволяет изменить имя выбранного поля, отображаемое в сводной таблице. В списке Операция можно выбрать функцию, используемую для вычисления суммирующего значения всех значений из этого поля. По умолчанию для числовых значений используется функция Сумма, а для текстовых значений - функция Количество. Доступны следующие функции: Сумма, Количество, Среднее, Макс, Мин, Произведение. Группировка и разгруппировка данных Данные в сводных таблицах можно сгруппировать в соответствии с индивидуальными требованиями. Группировка может быть выполнена по датам и основным числам. Группировка дат Чтобы сгруппировать даты, создайте сводную таблицу, содержащую необходимые даты. Щелкните правой кнопкой мыши по любой ячейке в сводной таблице с датой, в контекстном меню выберите параметр Сгруппировать и установите необходимые параметры в открывшемся окне. Начиная с - по умолчанию выбирается первая дата в исходных данных. Чтобы ее изменить, введите в это поле нужную дату. Отключите это поле, чтобы игнорировать начальную точку. Заканчивая в - по умолчанию выбирается последняя дата в исходных данных. Чтобы ее изменить, введите в это поле нужную дату. Отключите это поле, чтобы игнорировать конечную точку. По - параметры Секунды, Минуты и Часы группируют данные в соответствии со временем, указанным в исходных данных. Параметр Месяцы исключает дни и оставляет только месяцы. Опция Кварталы работает при следующем условии: четыре месяца составляют квартал Кв1, Кв2 и т.д. опция Годы группирует даты по годам, указанным в исходных данных. Комбинируйте варианты, чтобы добиться желаемого результата. Количество дней - устанавливает необходимое значение для определения диапазона дат. По завершении нажмите ОК. Группировка чисел Чтобы сгруппировать числа, создайте сводную таблицу, включающую набор необходимых чисел. Щелкните правой кнопкой мыши любую ячейку в сводной таблице с номером, в контекстном меню выберите опцию Сгруппировать и установите необходимые параметры в открывшемся окне. Начиная с - по умолчанию выбирается наименьшее число в исходных данных. Чтобы изменить его, введите в это поле нужное число. Отключите это поле, чтобы игнорировать наименьшее число. Заканчивая в - по умолчанию выбирается наибольшее число в исходных данных. Чтобы изменить его, введите в это поле нужный номер. Отключите это поле, чтобы игнорировать наибольшее число. По - установить необходимый интервал для группировки номеров. Например, «2» сгруппирует набор чисел от 1 до 10 как и «1-2», «3-4» и т.д. По завершении нажмите ОК. Изменение оформления сводных таблиц Опции, доступные на верхней панели инструментов, позволяют изменить способ отображения сводной таблицы. Эти параметры применяются ко всей сводной таблице. Чтобы активировать инструменты редактирования на верхней панели инструментов, выделите мышью хотя бы одну ячейку в сводной таблице. В выпадающем списке Макет отчета можно выбрать нужный макет для сводной таблицы: Показать в сжатой форме - позволяет отображать элементы из разных полей раздела строк в одном столбце. Показать в форме структуры - позволяет отображать сводную таблицу в классическом стиле. В этой форме отображается один столбец для каждого поля и выделяется место для заголовков полей. В ней также можно отображать промежуточные итоги над каждой группой.. Показать в табличной форме - позволяет отображать сводную таблицу в традиционном табличном формате. В этой форме отображается один столбец для каждого поля и выделяется место для заголовков полей. Повторять все метки элементов - позволяет визуально группировать строки или столбцы при наличии нескольких полей в табличной форме. Не повторять все метки элементов - позволяет скрыть метки элементов при наличии нескольких полей в табличной форме. В выпадающем списке Пустые строки можно выбрать, надо ли отображать пустые строки после элементов: Вставлять пустую строку после каждого элемента - позволяет добавить пустые строки после элементов. Удалить пустую строку после каждого элемента - позволяет убрать добавленные пустые строки. В выпадающем списке Промежуточные итоги можно выбрать, надо ли отображать промежуточные итоги в сводной таблице: Не показывать промежуточные итоги - позволяет скрыть промежуточные итоги для всех элементов. Показывать все промежуточные итоги в нижней части группы - позволяет отобразить промежуточные итоги под строками, для которых производится промежуточное суммирование. Показывать все промежуточные итоги в верхней части группы - позволяет отобразить промежуточные итоги над строками, для которых производится промежуточное суммирование. В выпадающем списке Общие итоги можно выбрать, надо ли отображать общие итоги в сводной таблице: Отключить для строк и столбцов - позволяет скрыть общие итоги как для строк, так и для столбцов. Включить для строк и столбцов - позволяет отобразить общие итоги как для строк, так и для столбцов. Включить только для строк - позволяет отобразить общие итоги только для строк. Включить только для столбцов - позволяет отобразить общие итоги только для столбцов. Примечание: аналогичные настройки также доступны в окне дополнительных параметров сводной таблицы в разделе Общие итоги вкладки Название и макет. Кнопка Выделить позволяет выделить всю сводную таблицу. Если вы изменили данные в исходном наборе данных, выделите сводную таблицу и нажмите кнопку Обновить, чтобы обновить сводную таблицу. Изменение стиля сводных таблиц Вы можете изменить оформление сводных таблиц в электронной таблице с помощью инструментов редактирования стиля, доступных на верхней панели инструментов. Чтобы активировать инструменты редактирования на верхней панели инструментов, выделите мышью хотя бы одну ячейку в сводной таблице. Параметры строк и столбцов позволяют выделить некоторые строки или столбцы при помощи особого форматирования, или выделить разные строки и столбцы с помощью разных цветов фона для их четкого разграничения. Доступны следующие опции: Заголовки строк - позволяет выделить заголовки строк при помощи особого форматирования. Заголовки столбцов - позволяет выделить заголовки столбцов при помощи особого форматирования. Чередовать строки - включает чередование цвета фона для четных и нечетных строк. Чередовать столбцы - включает чередование цвета фона для четных и нечетных столбцов. Список шаблонов позволяет выбрать один из готовых стилей сводных таблиц. Каждый шаблон сочетает в себе определенные параметры форматирования, такие как цвет фона, стиль границ, чередование строк или столбцов и т.д. Набор шаблонов отображается по-разному в зависимости от параметров, выбранных для строк и столбцов. Например, если вы отметили опции Заголовки строк и Чередовать столбцы, отображаемый список шаблонов будет содержать только шаблоны с выделенными заголовками строк и включенным чередованием столбцов. Фильтрация, сортировка и создание срезов в сводных таблицах Вы можете фильтровать сводные таблицы по подписям или значениям и использовать дополнительные параметры сортировки. Фильтрация Нажмите на кнопку со стрелкой в Названиях строк или Названиях столбцов сводной таблицы. Откроется список команд фильтра: Настройте параметры фильтра. Можно действовать одним из следующих способов: выбрать данные, которые надо отображать, или отфильтровать данные по определенным критериям. Выбор данных, которые надо отображать Снимите флажки рядом с данными, которые требуется скрыть. Для удобства все данные в списке команд фильтра отсортированы в порядке возрастания. Примечание: флажок (пусто) соответствует пустым ячейкам. Он доступен, если в выделенном диапазоне есть хотя бы одна пустая ячейка. Чтобы облегчить этот процесс, используйте поле поиска. Введите в этом поле свой запрос полностью или частично - в списке ниже будут отображены значения, содержащие эти символы. Также будут доступны следующие две опции: Выделить все результаты поиска - выбрана по умолчанию. Позволяет выделить все значения в списке, соответствующие вашему запросу. Добавить выделенный фрагмент в фильтр - если установить этот флажок, выбранные значения не будут скрыты после применения фильтра. После того как вы выберете все нужные данные, нажмите кнопку OK в списке команд фильтра, чтобы применить фильтр. Фильтрация данных по определенным критериям В правой части окна фильтра можно выбрать команду Фильтр подписей или Фильтр значений, а затем выбрать одну из опций в подменю: Для Фильтра подписей доступны следующие опции: Для текстовых значений: Равно..., Не равно..., Начинается с..., Не начинается с..., Оканчивается на..., Не оканчивается на..., Содержит..., Не содержит.... Для числовых значений: Больше..., Больше или равно..., Меньше..., Меньше или равно..., Между, Не между. Для Фильтра значений доступны следующие опции: Равно..., Не равно..., Больше..., Больше или равно..., Меньше..., Меньше или равно..., Между, Не между, Первые 10. После выбора одной из вышеуказанных опций (кроме опций Первые 10), откроется окно Фильтра подписей/Значений. В первом и втором выпадающих списках будут выбраны соответствующее поле и критерий. Введите нужное значение в поле справа. Нажмите кнопку OK, чтобы применить фильтр. При выборе опции Первые 10 из списка опций Фильтра значений откроется новое окно: В первом выпадающем списке можно выбрать, надо ли отобразить Наибольшие или Наименьшие значения. Во втором поле можно указать, сколько записей из списка или какой процент от общего количества записей требуется отобразить (можно ввести число от 1 до 500). В третьем выпадающем списке можно задать единицы измерения: Элемент или Процент. В четвертом выпадающем списке отображается имя выбранного поля. Когда нужные параметры будут заданы, нажмите кнопку OK, чтобы применить фильтр. Кнопка Фильтр появится в Названиях строк или Названиях столбцов сводной таблицы. Это означает, что фильтр применен. Сортировка Данные сводной таблицы можно сортировать, используя параметры сортировки. Нажмите на кнопку со стрелкой в Названиях строк или Названиях столбцов сводной таблицы и выберите опцию Сортировка по возрастанию или Сортировка по убыванию в подменю. Опция Дополнительные параметры сортировки... позволяет открыть окно Сортировать, в котором можно выбрать нужный порядок сортировки - По возрастанию (от А до Я) или По убыванию (от Я до А) - а затем выбрать определенное поле, которое требуется отсортировать. Создание срезов Чтобы упростить фильтрацию данных и отображать только то, что необходимо, вы можете добавить срезы. Чтобы узнать больше о срезах, пожалуйста, обратитесь к руководству по созданию срезов. Изменение дополнительных параметров сводной таблицы Чтобы изменить дополнительные параметры сводной таблицы, нажмите ссылку Дополнительные параметры на правой боковой панели. Откроется окно 'Сводная таблица - Дополнительные параметры': На вкладке Название и макет можно изменить общие свойства сводной таблицы. С помощью опции Название можно изменить название сводной таблицы. В разделе Общие итоги можно выбрать, надо ли отображать общие итоги в сводной таблице. Опции Показывать для строк и Показывать для столбцов отмечены по умолчанию. Вы можете снять галочку или с одной из них, или с них обеих, чтобы скрыть соответствующие общие итоги из сводной таблицы. Примечание: аналогичные настройки также доступны на верхней панели инструментов в меню Общие итоги. В разделе Отображать поля в области фильтра отчета можно настроить фильтры отчета, которые появляются при добавлении полей в раздел Фильтры: Опция Вниз, затем вправо используется для организации столбцов. Она позволяет отображать фильтры отчета по столбцам. Опция Вправо, затем вниз используется для организации строк. Она позволяет отображать фильтры отчета по строкам. Опция Число полей фильтра отчета в столбце позволяет выбрать количество фильтров для отображения в каждом столбце. По умолчанию задано значение 0. Вы можете выбрать нужное числовое значение. В разделе Заголовки полей можно выбрать, надо ли отображать заголовки полей в сводной таблице. Опция Показывать заголовки полей для строк и столбцов выбрана по умолчанию. Снимите с нее галочку, если хотите скрыть заголовки полей из сводной таблицы. На вкладке Источник данных можно изменить данные, которые требуется использовать для создания сводной таблицы. Проверьте выбранный Диапазон данных и измените его в случае необходимости. Для этого нажмите на кнопку . В окне Выбор диапазона данных введите нужный диапазон данных в формате Лист1!$A$1:$E$10. Также можно выбрать нужный диапазон ячеек на рабочем листе с помощью мыши. Когда все будет готово, нажмите кнопку OK. Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит сводная таблица. Удаление сводной таблицы Для удаления сводной таблицы: Выделите всю сводную таблицу с помощью кнопки Выделить на верхней панели инструментов. Нажмите клавишу Delete." + "body": "Сводные таблицы позволяют группировать и систематизировать данные из больших наборов данных для получения сводной информации. Вы можете упорядочивать данные множеством разных способов, чтобы отображать только нужную информацию и сфокусироваться на важных аспектах. Создание новой сводной таблицы Для создания сводной таблицы: Подготовьте исходный набор данных, который требуется использовать для создания сводной таблицы. Он должен включать заголовки столбцов. Набор данных не должен содержать пустых строк или столбцов. Выделите любую ячейку в исходном диапазоне данных. Перейдите на вкладку Сводная таблица верхней панели инструментов и нажмите на кнопку Вставить таблицу . Если вы хотите создать сводную таблицу на базе форматированной таблицы, также можно использовать опцию Вставить сводную таблицу на вкладке Параметры таблицы правой боковой панели. Откроется окно Создать сводную таблицу. Диапазон исходных данных уже указан. В этом случае будут использоваться все данные из исходного диапазона. Если вы хотите изменить диапазон данных (например, включить только часть исходных данных), нажмите на кнопку . В окне Выбор диапазона данных введите нужный диапазон данных в формате Лист1!$A$1:$E$10. Вы также можете выделить нужный диапазон данных на листе с помощью мыши. Когда все будет готово, нажмите кнопку OK. Укажите, где требуется разместить сводную таблицу. Опция Новый лист выбрана по умолчанию. Она позволяет разместить сводную таблицу на новом рабочем листе. Также можно выбрать опцию Существующий лист и затем выбрать определенную ячейку. В этом случае выбранная ячейка будет правой верхней ячейкой созданной сводной таблицы. Чтобы выбрать ячейку, нажмите на кнопку . В окне Выбор диапазона данных введите адрес ячейки в формате Лист1!$G$2. Также можно щелкнуть по нужной ячейке на листе. Когда все будет готово, нажмите кнопку OK. Когда местоположение таблицы будет выбрано, нажмите кнопку OK в окне Создать таблицу. Пустая сводная таблица будет вставлена в выбранном местоположении. Откроется вкладка Параметры сводной таблицы на правой боковой панели. Эту вкладку можно скрыть или показать, нажав на значок . Выбор полей для отображения Раздел Выбрать поля содержит названия полей, соответствующие заголовкам столбцов в исходном наборе данных. Каждое поле содержит значения из соответствующего столбца исходной таблицы. Ниже доступны следующие четыре поля: Фильтры, Столбцы, Строки и Значения. Отметьте галочками поля, которые требуется отобразить в сводной таблице. Когда вы отметите поле, оно будет добавлено в один из доступных разделов на правой боковой панели в зависимости от типа данных и будет отображено в сводной таблице. Поля, содержащие текстовые значения, будут добавлены в раздел Строки; поля, содержащие числовые значения, будут добавлены в раздел Значения. Вы можете просто перетаскивать поля в нужный раздел, а также перетаскивать поля между разделами, чтобы быстро перестроить сводную таблицу. Чтобы удалить поле из текущего раздела, перетащите его за пределы этого раздела. Чтобы добавить поле в нужный раздел, также можно нажать на черную стрелку справа от поля в разделе Выбрать поля и выбрать нужную опцию из меню: Добавить в фильтры, Добавить в строки, Добавить в столбцы, Добавить в значения. Ниже приводятся примеры использования разделов Фильтры, Столбцы, Строки и Значения. При добавлении поля в раздел Фильтры над сводной таблицей будет добавлен отдельный фильтр. Он будет применен ко всей сводной таблице. Если нажать на кнопку со стрелкой в добавленном фильтре, вы увидите значения из выбранного поля. Если снять галочки с некоторых значений в окне фильтра и нажать кнопку OK, значения, с которых снято выделение, не будут отображаться в сводной таблице. При добавлении поля в раздел Столбцы, сводная таблица будет содержать столько же столбцов, сколько значений содержится в выбранном поле. Также будет добавлен столбец Общий итог. При добавлении поля в раздел Строки, сводная таблица будет содержать столько же строк, сколько значений содержится в выбранном поле. Также будет добавлена строка Общий итог. При добавлении поля в раздел Значения в сводной таблице будет отображаться суммирующее значение для всех числовых значений из выбранных полей. Если поле содержит текстовые значения, будет отображаться количество значений. Функцию, которая используется для вычисления суммирующего значения, можно изменить в настройках поля. Упорядочивание полей и изменение их свойств Когда поля будут добавлены в нужные разделы, ими можно управлять, чтобы изменить макет и формат сводной таблицы. Нажмите на черную стрелку справа от поля в разделе Фильтры, Столбцы, Строки или Значения, чтобы открыть контекстное меню поля. С его помощью можно: Переместить выбранное поле Вверх, Вниз, В начало или В конец текущего раздела, если в текущий раздел добавлено несколько полей. Переместить выбранное поле в другой раздел - в Фильтры, Столбцы, Строки или Значения. Опция, соответствующая текущему разделу, будет неактивна. Удалить выбранное поле из текущего раздела. Изменить параметры выбранного поля. Параметры полей из раздела Фильтры, Столбцы и Строки выглядят одинаково: На вкладке Макет содержатся следующие опции: Опция Имя источника позволяет посмотреть имя поля, соответствующее заголовку столбца из исходного набора данных. Опция Пользовательское имя позволяет изменить имя выбранного поля, отображаемое в сводной таблице. В разделе Форма отчета можно изменить способ отображения выбранного поля в сводной таблице: Выберите нужный макет для выбранного поля в сводной таблице: В форме В виде таблицы отображается один столбец для каждого поля и выделяется место для заголовков полей. В форме Структуры отображается один столбец для каждого поля и выделяется место для заголовков полей. В ней также можно отображать промежуточные итоги над каждой группой. В Компактной форме элементы из разных полей раздела строк отображаются в одном столбце. Опция Повторять метки элементов в каждой строке позволяет визуально группировать строки или столбцы при наличии нескольких полей в табличной форме. Опция Добавлять пустую строку после каждой записи позволяет добавлять пустые строки после элементов выбранного поля. Опция Показывать промежуточные итоги позволяет выбрать, надо ли отображать промежуточные итоги для выбранного поля. Можно выбрать одну из опций: Показывать в заголовке группы или Показывать в нижней части группы. Опция Показывать элементы без данных позволяет показать или скрыть пустые элементы в выбранном поле. На вкладке Промежуточные итоги можно выбрать Функции для промежуточных итогов. Отметьте галочкой нужную функцию в списке: Сумма, Количество, Среднее, Макс, Мин, Произведение, Количество чисел, Стандотклон, Стандотклонп, Дисп, Диспр. Параметры поля значений Опция Имя источника позволяет посмотреть имя поля, соответствующее заголовку столбца из исходного набора данных. Опция Пользовательское имя позволяет изменить имя выбранного поля, отображаемое в сводной таблице. В списке Операция можно выбрать функцию, используемую для вычисления суммирующего значения всех значений из этого поля. По умолчанию для числовых значений используется функция Сумма, а для текстовых значений - функция Количество. Доступны следующие функции: Сумма, Количество, Среднее, Макс, Мин, Произведение. Группировка и разгруппировка данных Данные в сводных таблицах можно сгруппировать в соответствии с индивидуальными требованиями. Группировка может быть выполнена по датам и основным числам. Группировка дат Чтобы сгруппировать даты, создайте сводную таблицу, содержащую необходимые даты. Щелкните правой кнопкой мыши по любой ячейке в сводной таблице с датой, в контекстном меню выберите параметр Сгруппировать и установите необходимые параметры в открывшемся окне. Начиная с - по умолчанию выбирается первая дата в исходных данных. Чтобы ее изменить, введите в это поле нужную дату. Отключите это поле, чтобы игнорировать начальную точку. Заканчивая в - по умолчанию выбирается последняя дата в исходных данных. Чтобы ее изменить, введите в это поле нужную дату. Отключите это поле, чтобы игнорировать конечную точку. По - параметры Секунды, Минуты и Часы группируют данные в соответствии со временем, указанным в исходных данных. Параметр Месяцы исключает дни и оставляет только месяцы. Опция Кварталы работает при следующем условии: четыре месяца составляют квартал Кв1, Кв2 и т.д. опция Годы группирует даты по годам, указанным в исходных данных. Комбинируйте варианты, чтобы добиться желаемого результата. Количество дней - устанавливает необходимое значение для определения диапазона дат. По завершении нажмите ОК. Группировка чисел Чтобы сгруппировать числа, создайте сводную таблицу, включающую набор необходимых чисел. Щелкните правой кнопкой мыши любую ячейку в сводной таблице с номером, в контекстном меню выберите опцию Сгруппировать и установите необходимые параметры в открывшемся окне. Начиная с - по умолчанию выбирается наименьшее число в исходных данных. Чтобы изменить его, введите в это поле нужное число. Отключите это поле, чтобы игнорировать наименьшее число. Заканчивая в - по умолчанию выбирается наибольшее число в исходных данных. Чтобы изменить его, введите в это поле нужный номер. Отключите это поле, чтобы игнорировать наибольшее число. По - установить необходимый интервал для группировки номеров. Например, «2» сгруппирует набор чисел от 1 до 10 как и «1-2», «3-4» и т.д. По завершении нажмите ОК. Газгруппировка данных Чтобы разгруппировать ранее сгруппированные данные, щелкните правой кнопкой мыши любую ячейку в группе, выберите опцию Разгруппировать в контекстном меню. Изменение оформления сводных таблиц Опции, доступные на верхней панели инструментов, позволяют изменить способ отображения сводной таблицы. Эти параметры применяются ко всей сводной таблице. Чтобы активировать инструменты редактирования на верхней панели инструментов, выделите мышью хотя бы одну ячейку в сводной таблице. В выпадающем списке Макет отчета можно выбрать нужный макет для сводной таблицы: Показать в сжатой форме - позволяет отображать элементы из разных полей раздела строк в одном столбце. Показать в форме структуры - позволяет отображать сводную таблицу в классическом стиле. В этой форме отображается один столбец для каждого поля и выделяется место для заголовков полей. В ней также можно отображать промежуточные итоги над каждой группой.. Показать в табличной форме - позволяет отображать сводную таблицу в традиционном табличном формате. В этой форме отображается один столбец для каждого поля и выделяется место для заголовков полей. Повторять все метки элементов - позволяет визуально группировать строки или столбцы при наличии нескольких полей в табличной форме. Не повторять все метки элементов - позволяет скрыть метки элементов при наличии нескольких полей в табличной форме. В выпадающем списке Пустые строки можно выбрать, надо ли отображать пустые строки после элементов: Вставлять пустую строку после каждого элемента - позволяет добавить пустые строки после элементов. Удалить пустую строку после каждого элемента - позволяет убрать добавленные пустые строки. В выпадающем списке Промежуточные итоги можно выбрать, надо ли отображать промежуточные итоги в сводной таблице: Не показывать промежуточные итоги - позволяет скрыть промежуточные итоги для всех элементов. Показывать все промежуточные итоги в нижней части группы - позволяет отобразить промежуточные итоги под строками, для которых производится промежуточное суммирование. Показывать все промежуточные итоги в верхней части группы - позволяет отобразить промежуточные итоги над строками, для которых производится промежуточное суммирование. В выпадающем списке Общие итоги можно выбрать, надо ли отображать общие итоги в сводной таблице: Отключить для строк и столбцов - позволяет скрыть общие итоги как для строк, так и для столбцов. Включить для строк и столбцов - позволяет отобразить общие итоги как для строк, так и для столбцов. Включить только для строк - позволяет отобразить общие итоги только для строк. Включить только для столбцов - позволяет отобразить общие итоги только для столбцов. Примечание: аналогичные настройки также доступны в окне дополнительных параметров сводной таблицы в разделе Общие итоги вкладки Название и макет. Кнопка Выделить позволяет выделить всю сводную таблицу. Если вы изменили данные в исходном наборе данных, выделите сводную таблицу и нажмите кнопку Обновить, чтобы обновить сводную таблицу. Изменение стиля сводных таблиц Вы можете изменить оформление сводных таблиц в электронной таблице с помощью инструментов редактирования стиля, доступных на верхней панели инструментов. Чтобы активировать инструменты редактирования на верхней панели инструментов, выделите мышью хотя бы одну ячейку в сводной таблице. Параметры строк и столбцов позволяют выделить некоторые строки или столбцы при помощи особого форматирования, или выделить разные строки и столбцы с помощью разных цветов фона для их четкого разграничения. Доступны следующие опции: Заголовки строк - позволяет выделить заголовки строк при помощи особого форматирования. Заголовки столбцов - позволяет выделить заголовки столбцов при помощи особого форматирования. Чередовать строки - включает чередование цвета фона для четных и нечетных строк. Чередовать столбцы - включает чередование цвета фона для четных и нечетных столбцов. Список шаблонов позволяет выбрать один из готовых стилей сводных таблиц. Каждый шаблон сочетает в себе определенные параметры форматирования, такие как цвет фона, стиль границ, чередование строк или столбцов и т.д. Набор шаблонов отображается по-разному в зависимости от параметров, выбранных для строк и столбцов. Например, если вы отметили опции Заголовки строк и Чередовать столбцы, отображаемый список шаблонов будет содержать только шаблоны с выделенными заголовками строк и включенным чередованием столбцов. Фильтрация, сортировка и создание срезов в сводных таблицах Вы можете фильтровать сводные таблицы по подписям или значениям и использовать дополнительные параметры сортировки. Фильтрация Нажмите на кнопку со стрелкой в Названиях строк или Названиях столбцов сводной таблицы. Откроется список команд фильтра: Настройте параметры фильтра. Можно действовать одним из следующих способов: выбрать данные, которые надо отображать, или отфильтровать данные по определенным критериям. Выбор данных, которые надо отображать Снимите флажки рядом с данными, которые требуется скрыть. Для удобства все данные в списке команд фильтра отсортированы в порядке возрастания. Примечание: флажок (пусто) соответствует пустым ячейкам. Он доступен, если в выделенном диапазоне есть хотя бы одна пустая ячейка. Чтобы облегчить этот процесс, используйте поле поиска. Введите в этом поле свой запрос полностью или частично - в списке ниже будут отображены значения, содержащие эти символы. Также будут доступны следующие две опции: Выделить все результаты поиска - выбрана по умолчанию. Позволяет выделить все значения в списке, соответствующие вашему запросу. Добавить выделенный фрагмент в фильтр - если установить этот флажок, выбранные значения не будут скрыты после применения фильтра. После того как вы выберете все нужные данные, нажмите кнопку OK в списке команд фильтра, чтобы применить фильтр. Фильтрация данных по определенным критериям В правой части окна фильтра можно выбрать команду Фильтр подписей или Фильтр значений, а затем выбрать одну из опций в подменю: Для Фильтра подписей доступны следующие опции: Для текстовых значений: Равно..., Не равно..., Начинается с..., Не начинается с..., Оканчивается на..., Не оканчивается на..., Содержит..., Не содержит.... Для числовых значений: Больше..., Больше или равно..., Меньше..., Меньше или равно..., Между, Не между. Для Фильтра значений доступны следующие опции: Равно..., Не равно..., Больше..., Больше или равно..., Меньше..., Меньше или равно..., Между, Не между, Первые 10. После выбора одной из вышеуказанных опций (кроме опций Первые 10), откроется окно Фильтра подписей/Значений. В первом и втором выпадающих списках будут выбраны соответствующее поле и критерий. Введите нужное значение в поле справа. Нажмите кнопку OK, чтобы применить фильтр. При выборе опции Первые 10 из списка опций Фильтра значений откроется новое окно: В первом выпадающем списке можно выбрать, надо ли отобразить Наибольшие или Наименьшие значения. Во втором поле можно указать, сколько записей из списка или какой процент от общего количества записей требуется отобразить (можно ввести число от 1 до 500). В третьем выпадающем списке можно задать единицы измерения: Элемент или Процент. В четвертом выпадающем списке отображается имя выбранного поля. Когда нужные параметры будут заданы, нажмите кнопку OK, чтобы применить фильтр. Кнопка Фильтр появится в Названиях строк или Названиях столбцов сводной таблицы. Это означает, что фильтр применен. Сортировка Данные сводной таблицы можно сортировать, используя параметры сортировки. Нажмите на кнопку со стрелкой в Названиях строк или Названиях столбцов сводной таблицы и выберите опцию Сортировка по возрастанию или Сортировка по убыванию в подменю. Опция Дополнительные параметры сортировки... позволяет открыть окно Сортировать, в котором можно выбрать нужный порядок сортировки - По возрастанию (от А до Я) или По убыванию (от Я до А) - а затем выбрать определенное поле, которое требуется отсортировать. Создание срезов Чтобы упростить фильтрацию данных и отображать только то, что необходимо, вы можете добавить срезы. Чтобы узнать больше о срезах, пожалуйста, обратитесь к руководству по созданию срезов. Изменение дополнительных параметров сводной таблицы Чтобы изменить дополнительные параметры сводной таблицы, нажмите ссылку Дополнительные параметры на правой боковой панели. Откроется окно 'Сводная таблица - Дополнительные параметры': На вкладке Название и макет можно изменить общие свойства сводной таблицы. С помощью опции Название можно изменить название сводной таблицы. В разделе Общие итоги можно выбрать, надо ли отображать общие итоги в сводной таблице. Опции Показывать для строк и Показывать для столбцов отмечены по умолчанию. Вы можете снять галочку или с одной из них, или с них обеих, чтобы скрыть соответствующие общие итоги из сводной таблицы. Примечание: аналогичные настройки также доступны на верхней панели инструментов в меню Общие итоги. В разделе Отображать поля в области фильтра отчета можно настроить фильтры отчета, которые появляются при добавлении полей в раздел Фильтры: Опция Вниз, затем вправо используется для организации столбцов. Она позволяет отображать фильтры отчета по столбцам. Опция Вправо, затем вниз используется для организации строк. Она позволяет отображать фильтры отчета по строкам. Опция Число полей фильтра отчета в столбце позволяет выбрать количество фильтров для отображения в каждом столбце. По умолчанию задано значение 0. Вы можете выбрать нужное числовое значение. В разделе Заголовки полей можно выбрать, надо ли отображать заголовки полей в сводной таблице. Опция Показывать заголовки полей для строк и столбцов выбрана по умолчанию. Снимите с нее галочку, если хотите скрыть заголовки полей из сводной таблицы. На вкладке Источник данных можно изменить данные, которые требуется использовать для создания сводной таблицы. Проверьте выбранный Диапазон данных и измените его в случае необходимости. Для этого нажмите на кнопку . В окне Выбор диапазона данных введите нужный диапазон данных в формате Лист1!$A$1:$E$10. Также можно выбрать нужный диапазон ячеек на рабочем листе с помощью мыши. Когда все будет готово, нажмите кнопку OK. Вкладка Альтернативный текст позволяет задать Заголовок и Описание, которые будут зачитываться для людей с нарушениями зрения или когнитивными нарушениями, чтобы помочь им лучше понять, какую информацию содержит сводная таблица. Удаление сводной таблицы Для удаления сводной таблицы: Выделите всю сводную таблицу с помощью кнопки Выделить на верхней панели инструментов. Нажмите клавишу Delete." }, { "id": "UsageInstructions/RemoveDuplicates.htm", From be03943431543cbf50556c41ccc036a558899bc1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 18 May 2021 22:47:09 +0300 Subject: [PATCH 011/376] Update translation. Bug 50473 --- .../de/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/de/editor.css | 4 ++-- .../en/UsageInstructions/SavePrintDownload.htm | 2 +- .../help/en/UsageInstructions/WordCounter.htm | 4 ++-- .../main/resources/help/en/editor.css | 4 ++-- .../help/es/UsageInstructions/OpenCreateNew.htm | 6 +++--- .../es/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/es/editor.css | 4 ++-- .../help/es/images/document_language.png | Bin 219 -> 273 bytes .../main/resources/help/es/images/fitpage.png | Bin 97 -> 209 bytes .../main/resources/help/es/images/fitwidth.png | Bin 124 -> 178 bytes .../help/es/images/trackchangesstatusbar.png | Bin 141 -> 208 bytes .../main/resources/help/es/images/zoomin.png | Bin 180 -> 106 bytes .../main/resources/help/es/images/zoomout.png | Bin 178 -> 100 bytes .../fr/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/fr/editor.css | 4 ++-- .../help/it/UsageInstructions/OpenCreateNew.htm | 6 +++--- .../it/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/it/editor.css | 4 ++-- .../help/it/images/document_language.png | Bin 219 -> 273 bytes .../main/resources/help/it/images/fitpage.png | Bin 97 -> 209 bytes .../main/resources/help/it/images/fitwidth.png | Bin 124 -> 178 bytes .../help/it/images/trackchangesstatusbar.png | Bin 141 -> 208 bytes .../main/resources/help/it/images/zoomin.png | Bin 180 -> 106 bytes .../main/resources/help/it/images/zoomout.png | Bin 178 -> 100 bytes .../ru/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/ru/editor.css | 4 ++-- .../de/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/de/editor.css | 4 ++-- .../en/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/en/editor.css | 4 ++-- .../help/es/UsageInstructions/OpenCreateNew.htm | 6 +++--- .../es/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/es/editor.css | 4 ++-- .../help/es/images/document_language.png | Bin 206 -> 273 bytes .../main/resources/help/es/images/fitslide.png | Bin 96 -> 207 bytes .../main/resources/help/es/images/fitwidth.png | Bin 93 -> 178 bytes .../main/resources/help/es/images/zoomin.png | Bin 180 -> 106 bytes .../main/resources/help/es/images/zoomout.png | Bin 178 -> 100 bytes .../fr/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/fr/editor.css | 4 ++-- .../help/it/UsageInstructions/OpenCreateNew.htm | 6 +++--- .../it/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/it/editor.css | 4 ++-- .../help/it/images/document_language.png | Bin 206 -> 273 bytes .../main/resources/help/it/images/fitslide.png | Bin 96 -> 207 bytes .../main/resources/help/it/images/fitwidth.png | Bin 93 -> 178 bytes .../main/resources/help/it/images/zoomin.png | Bin 180 -> 106 bytes .../main/resources/help/it/images/zoomout.png | Bin 178 -> 100 bytes .../ru/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/ru/editor.css | 4 ++-- .../de/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/de/editor.css | 4 ++-- .../en/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/en/editor.css | 4 ++-- .../help/es/UsageInstructions/OpenCreateNew.htm | 6 +++--- .../es/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/es/editor.css | 4 ++-- .../resources/help/es/images/firstsheet.png | Bin 90 -> 189 bytes .../main/resources/help/es/images/lastsheet.png | Bin 89 -> 172 bytes .../main/resources/help/es/images/nextsheet.png | Bin 87 -> 170 bytes .../resources/help/es/images/previoussheet.png | Bin 87 -> 175 bytes .../main/resources/help/es/images/zoomin.png | Bin 180 -> 106 bytes .../main/resources/help/es/images/zoomout.png | Bin 178 -> 100 bytes .../fr/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/fr/editor.css | 4 ++-- .../help/it/UsageInstructions/OpenCreateNew.htm | 6 +++--- .../it/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/it/editor.css | 4 ++-- .../resources/help/it/images/firstsheet.png | Bin 90 -> 189 bytes .../main/resources/help/it/images/lastsheet.png | Bin 89 -> 172 bytes .../main/resources/help/it/images/nextsheet.png | Bin 87 -> 170 bytes .../resources/help/it/images/previoussheet.png | Bin 87 -> 175 bytes .../main/resources/help/it/images/zoomin.png | Bin 180 -> 106 bytes .../main/resources/help/it/images/zoomout.png | Bin 178 -> 100 bytes .../ru/UsageInstructions/SavePrintDownload.htm | 2 +- .../main/resources/help/ru/editor.css | 4 ++-- 77 files changed, 74 insertions(+), 74 deletions(-) diff --git a/apps/documenteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm index a4d850dbe..90fb854b6 100644 --- a/apps/documenteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
    1. Klicken Sie in der oberen Menüleiste auf die Registerkarte Datei.
    2. Wählen Sie die Option Speichern als....
    3. -
    4. Wählen Sie das gewünschte Format aus: DOCX, ODT, RTF, TXT, PDF, PDFA. Sie können die Option Dokumentenvorlage (DOTX oder OTT) auswählen.
    5. +
    6. Wählen Sie das gewünschte Format aus: DOCX, ODT, RTF, TXT, PDF, PDF/A. Sie können die Option Dokumentenvorlage (DOTX oder OTT) auswählen.
    diff --git a/apps/documenteditor/main/resources/help/de/editor.css b/apps/documenteditor/main/resources/help/de/editor.css index 4e3f9d697..e191efd9b 100644 --- a/apps/documenteditor/main/resources/help/de/editor.css +++ b/apps/documenteditor/main/resources/help/de/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -180,7 +180,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm index 1d955c208..60d07e877 100644 --- a/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
    1. click the File tab of the top toolbar,
    2. select the Save as... option,
    3. -
    4. choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. You can also choose the Document template (DOTX or OTT) option.
    5. +
    6. choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDF/A, HTML, FB2, EPUB. You can also choose the Document template (DOTX or OTT) option.
    diff --git a/apps/documenteditor/main/resources/help/en/UsageInstructions/WordCounter.htm b/apps/documenteditor/main/resources/help/en/UsageInstructions/WordCounter.htm index 81f6133e8..4f6df71f5 100644 --- a/apps/documenteditor/main/resources/help/en/UsageInstructions/WordCounter.htm +++ b/apps/documenteditor/main/resources/help/en/UsageInstructions/WordCounter.htm @@ -15,9 +15,9 @@

    Count words

    To know the exact number of words and symbols both with and without spaces in your document, as well as the number of paragraphs altogether, use the Word counter plugin.

    -
      +
        +
      1. Open the Plugins tab and click Count words and characters.
      2. Select the text.
      3. -
      4. Open the Plugins tab and click Word counter.
      Please note that the following elements are not included in the word count:
        diff --git a/apps/documenteditor/main/resources/help/en/editor.css b/apps/documenteditor/main/resources/help/en/editor.css index 7d27e6f75..7a12ba4ca 100644 --- a/apps/documenteditor/main/resources/help/en/editor.css +++ b/apps/documenteditor/main/resources/help/en/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -180,7 +180,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/documenteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm b/apps/documenteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm index 39fac5618..0618dc3c3 100644 --- a/apps/documenteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm +++ b/apps/documenteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm @@ -14,7 +14,7 @@

      Cree un documento nuevo o abra el documento existente

      -
      Para crear un nuevo documento
      +

      Para crear un nuevo documento

      En el editor en línea

        @@ -32,7 +32,7 @@
      -
      Para abrir un documento existente
      +

      Para abrir un documento existente

      En el editor de escritorio

      1. en la ventana principal del programa, seleccione la opción Abrir archivo local en la barra lateral izquierda,
      2. @@ -42,7 +42,7 @@

        Todos los directorios a los que ha accedido utilizando el editor de escritorio se mostrarán en la lista de Carpetas recientes para que posteriormente pueda acceder rápidamente a ellos. Haga clic en la carpeta correspondiente para seleccionar uno de los archivos almacenados en ella.

      -
      Para abrir un documento recientemente editado
      +

      Para abrir un documento recientemente editado

      En el editor en línea

        diff --git a/apps/documenteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm index 7a52e250f..9c7e62a74 100644 --- a/apps/documenteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
        1. haga clic en la pestaña Archivo en la barra de herramientas superior,
        2. seleccione la opción Guardar como...,
        3. -
        4. elija uno de los formatos disponibles: DOCX, ODT, RTF, TXT, PDF, PDFA. También puede seleccionar la opción Plantilla de documento (DOTX o OTT).
        5. +
        6. elija uno de los formatos disponibles: DOCX, ODT, RTF, TXT, PDF, PDF/A. También puede seleccionar la opción Plantilla de documento (DOTX o OTT).
      diff --git a/apps/documenteditor/main/resources/help/es/editor.css b/apps/documenteditor/main/resources/help/es/editor.css index 4e3f9d697..e191efd9b 100644 --- a/apps/documenteditor/main/resources/help/es/editor.css +++ b/apps/documenteditor/main/resources/help/es/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -180,7 +180,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/documenteditor/main/resources/help/es/images/document_language.png b/apps/documenteditor/main/resources/help/es/images/document_language.png index e9c3ed7a7b1240a5f30c6dec5b3b374c2d1f835d..380b889d83e8e3692676d20abeb930c827a7c4e3 100644 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^{2oCO|{#S9F5M?jcysy3fAQ1Gy) zi(^Q|t*Mg?`C1eN7%FAhI=bk}^}@{yt~J8asPiu5=;m@yufqJ)&!TTXr;EZaHMn7Ps#2x_42p4_iO{w(j>c zz2b9XDY-NLXFc3h{ho(IGojnj|3L2*-kln=Eny0^{b+=tI>E3b0N2MMqI Uw=Ps^7tlKlp00i_>zopr0G2&(u>b%7 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp@Aj|Ei@deX$nt@ihv?$8h}vkDn#gFashc(*y*rafW$s+Hh5Iva TOUm>Gf?VzC>gTe~DWM4fQD|S0 diff --git a/apps/documenteditor/main/resources/help/es/images/fitpage.png b/apps/documenteditor/main/resources/help/es/images/fitpage.png index 2ff1b9ae124f00448f655d14565158934132a33d..ebb5de12378f64316153dfdde909f4a299bbd048 100644 GIT binary patch delta 193 zcmV;y06za=(E*Sbe-8)(00026LDC=q000SaNLh0L01m_e01m_fl`9S#0001kNkl+o-U3d6}OU4lsY!Vuubphc);}J;8F#f89YkKxCr_^yiW8B0NWJzf1=);T3K0RTQBX-}p*#HFi-#HXrv-QnJ_k8MMYZGim8Zwq%Avoq|x VobGXWDHl7)SWj0!mvv4FO#n@4E5rZ* diff --git a/apps/documenteditor/main/resources/help/es/images/trackchangesstatusbar.png b/apps/documenteditor/main/resources/help/es/images/trackchangesstatusbar.png index c39959e6cd80d56018f8dab8108f9cfc3f4d4339..d582767ebe758a02bb53e54037e2169326a16466 100644 GIT binary patch delta 193 zcmV;y06zbX0nh=E7k>~40ssI2Ml`Zh00009a7bBm000ie000ie0hKEb8vp49Qx-o{uOLw7Mz4vU8ySvs9LfJFzZdASU}YWwM+jDNsmt200000NkvXXu0mjfX8ci( delta 125 zcmcb>*vmLUyo{HF0SJOiv*!Y-5KkA!kP61+0!Oz0|BZLlxGBzB@Ab^}A? zzueB(S}lK$e=pVJp75pqMafLA>-;Lqca+pP7}Ym=zpZZhDIdODY`^Qa`oM$PCEpu< czIeyZ@F=oXZu_#zQy_ahUHx3vIVCg!0O`auasU7T diff --git a/apps/documenteditor/main/resources/help/es/images/zoomin.png b/apps/documenteditor/main/resources/help/es/images/zoomin.png index e2eeea6a3d3df6bac3ef31c3ee45a18dd60704ba..55fb7d3916c36a9b9c0f14fb46da569f18c76834 100644 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4u8B>#36YXd3H0*}aI1_r((Aj~*bn@<`jDC6nk y7*cU7`G<#0!U2(@!a~VeuVOeF6Q9K=F)+;Azv+Z@V~-_J9fPN~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;I6Qz@0)#DCZSoR@NIzV4WxVywPjb+i2CD95gVU+ORC{kgRB{LcCx d`Nq+k|3^ul+vp-4mt_NTj;E`i%Q~loCIE?WO1}UA diff --git a/apps/documenteditor/main/resources/help/es/images/zoomout.png b/apps/documenteditor/main/resources/help/es/images/zoomout.png index 60ac9a97d9dde08b68486481c3e4c3b4b84fb5f8..1c4a45face2c06114dd8adab472b638634db927a 100644 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^AT~D#6OcT~)9nwWI14-?iy0XBj({-ZRBb+KprDwi ti(^Q|t>hma;s!iRws6NCFsO*-V<@pxDk)w5WHwL*gQu&X%Q~loCIH9z7w`Z8 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^{2~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;H^{?Rl3oBrS27P#Ksw!~_-v~ZrCsOu&i}i8 c=GvR}x^cFfe=O+8DFQjh)78&qol`;+0CG!BivR!s diff --git a/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm index 9d9c33c40..ffdd71c58 100644 --- a/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. cliquez sur l'onglet Fichier de la barre d'outils supérieure,
      2. sélectionnez l'option Enregistrer sous...,
      3. -
      4. sélectionnez l'un des formats disponibles selon vos besoins: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. Vous pouvez également choisir l'option Modèle de document (DOTX or OTT).
      5. +
      6. sélectionnez l'un des formats disponibles selon vos besoins: DOCX, ODT, RTF, TXT, PDF, PDF/A, HTML, FB2, EPUB. Vous pouvez également choisir l'option Modèle de document (DOTX or OTT).
      diff --git a/apps/documenteditor/main/resources/help/fr/editor.css b/apps/documenteditor/main/resources/help/fr/editor.css index 4e3f9d697..e191efd9b 100644 --- a/apps/documenteditor/main/resources/help/fr/editor.css +++ b/apps/documenteditor/main/resources/help/fr/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -180,7 +180,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/documenteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm b/apps/documenteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm index 02f1a44e4..7d4404b72 100644 --- a/apps/documenteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm +++ b/apps/documenteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm @@ -14,7 +14,7 @@

      Create a new document or open an existing one

      -

      Per creare un nuovo documento

      +

      Per creare un nuovo documento

      Nell’Editor di Documenti Online

        @@ -32,7 +32,7 @@
      -

      Per aprire un documento esistente

      +

      Per aprire un documento esistente

      Nell’Editor di Documenti Desktop

      1. Nella finestra principale del programma, seleziona nella barra a sinistra la voce di menù Apri file locale,
      2. @@ -42,7 +42,7 @@

        Tutte le directory a cui hai accesso usando l’editor per desktop verranno visualizzate nell’elenco delle Cartelle recenti in modo da poter avere un rapido accesso in seguito. Cliccando sulla cartella, verranno visualizzati i file in essa contenuti.

      -

      Per aprire un documento modificato recentemente

      +

      Per aprire un documento modificato recentemente

      Nell’Editor di Documenti Online

        diff --git a/apps/documenteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm index 88818981e..3d2f5f2a7 100644 --- a/apps/documenteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
        1. click the File tab of the top toolbar,
        2. select the Save as... option,
        3. -
        4. choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDFA. You can also choose the Document template (DOTX or OTT) option.
        5. +
        6. choose one of the available formats depending on your needs: DOCX, ODT, RTF, TXT, PDF, PDF/A. You can also choose the Document template (DOTX or OTT) option.
      diff --git a/apps/documenteditor/main/resources/help/it/editor.css b/apps/documenteditor/main/resources/help/it/editor.css index 66db82aed..d06164616 100644 --- a/apps/documenteditor/main/resources/help/it/editor.css +++ b/apps/documenteditor/main/resources/help/it/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -158,7 +158,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/documenteditor/main/resources/help/it/images/document_language.png b/apps/documenteditor/main/resources/help/it/images/document_language.png index e9c3ed7a7b1240a5f30c6dec5b3b374c2d1f835d..380b889d83e8e3692676d20abeb930c827a7c4e3 100644 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^{2oCO|{#S9F5M?jcysy3fAQ1Gy) zi(^Q|t*Mg?`C1eN7%FAhI=bk}^}@{yt~J8asPiu5=;m@yufqJ)&!TTXr;EZaHMn7Ps#2x_42p4_iO{w(j>c zz2b9XDY-NLXFc3h{ho(IGojnj|3L2*-kln=Eny0^{b+=tI>E3b0N2MMqI Uw=Ps^7tlKlp00i_>zopr0G2&(u>b%7 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp@Aj|Ei@deX$nt@ihv?$8h}vkDn#gFashc(*y*rafW$s+Hh5Iva TOUm>Gf?VzC>gTe~DWM4fQD|S0 diff --git a/apps/documenteditor/main/resources/help/it/images/fitpage.png b/apps/documenteditor/main/resources/help/it/images/fitpage.png index 2ff1b9ae124f00448f655d14565158934132a33d..ebb5de12378f64316153dfdde909f4a299bbd048 100644 GIT binary patch delta 193 zcmV;y06za=(E*Sbe-8)(00026LDC=q000SaNLh0L01m_e01m_fl`9S#0001kNkl+o-U3d6}OU4lsY!Vuubphc);}J;8F#f89YkKxCr_^yiW8B0NWJzf1=);T3K0RTQBX-}p*#HFi-#HXrv-QnJ_k8MMYZGim8Zwq%Avoq|x VobGXWDHl7)SWj0!mvv4FO#n@4E5rZ* diff --git a/apps/documenteditor/main/resources/help/it/images/trackchangesstatusbar.png b/apps/documenteditor/main/resources/help/it/images/trackchangesstatusbar.png index c39959e6cd80d56018f8dab8108f9cfc3f4d4339..d582767ebe758a02bb53e54037e2169326a16466 100644 GIT binary patch delta 193 zcmV;y06zbX0nh=E7k>~40ssI2Ml`Zh00009a7bBm000ie000ie0hKEb8vp49Qx-o{uOLw7Mz4vU8ySvs9LfJFzZdASU}YWwM+jDNsmt200000NkvXXu0mjfX8ci( delta 125 zcmcb>*vmLUyo{HF0SJOiv*!Y-5KkA!kP61+0!Oz0|BZLlxGBzB@Ab^}A? zzueB(S}lK$e=pVJp75pqMafLA>-;Lqca+pP7}Ym=zpZZhDIdODY`^Qa`oM$PCEpu< czIeyZ@F=oXZu_#zQy_ahUHx3vIVCg!0O`auasU7T diff --git a/apps/documenteditor/main/resources/help/it/images/zoomin.png b/apps/documenteditor/main/resources/help/it/images/zoomin.png index e2eeea6a3d3df6bac3ef31c3ee45a18dd60704ba..55fb7d3916c36a9b9c0f14fb46da569f18c76834 100644 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4u8B>#36YXd3H0*}aI1_r((Aj~*bn@<`jDC6nk y7*cU7`G<#0!U2(@!a~VeuVOeF6Q9K=F)+;Azv+Z@V~-_J9fPN~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;I6Qz@0)#DCZSoR@NIzV4WxVywPjb+i2CD95gVU+ORC{kgRB{LcCx d`Nq+k|3^ul+vp-4mt_NTj;E`i%Q~loCIE?WO1}UA diff --git a/apps/documenteditor/main/resources/help/it/images/zoomout.png b/apps/documenteditor/main/resources/help/it/images/zoomout.png index 60ac9a97d9dde08b68486481c3e4c3b4b84fb5f8..1c4a45face2c06114dd8adab472b638634db927a 100644 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^AT~D#6OcT~)9nwWI14-?iy0XBj({-ZRBb+KprDwi ti(^Q|t>hma;s!iRws6NCFsO*-V<@pxDk)w5WHwL*gQu&X%Q~loCIH9z7w`Z8 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^{2~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;H^{?Rl3oBrS27P#Ksw!~_-v~ZrCsOu&i}i8 c=GvR}x^cFfe=O+8DFQjh)78&qol`;+0CG!BivR!s diff --git a/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm b/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm index ead323a23..af1e9a792 100644 --- a/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm +++ b/apps/documenteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. нажмите на вкладку Файл на верхней панели инструментов,
      2. выберите опцию Сохранить как,
      3. -
      4. выберите один из доступных форматов: DOCX, ODT, RTF, TXT, PDF, PDFA, HTML, FB2, EPUB. Также можно выбрать вариант Шаблон документа DOTX или OTT.
      5. +
      6. выберите один из доступных форматов: DOCX, ODT, RTF, TXT, PDF, PDF/A, HTML, FB2, EPUB. Также можно выбрать вариант Шаблон документа DOTX или OTT.
      diff --git a/apps/documenteditor/main/resources/help/ru/editor.css b/apps/documenteditor/main/resources/help/ru/editor.css index ecaa6b72d..b398b1932 100644 --- a/apps/documenteditor/main/resources/help/ru/editor.css +++ b/apps/documenteditor/main/resources/help/ru/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -180,7 +180,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/presentationeditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm b/apps/presentationeditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm index 604b363f1..a0ae7592f 100644 --- a/apps/presentationeditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm +++ b/apps/presentationeditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. Klicken Sie in der oberen Menüleiste auf die Registerkarte Datei.
      2. Wählen Sie die Option Speichern als....
      3. -
      4. Wählen Sie das gewünschte Format aus: PPTX, ODP, PDF, PDFA. Sie können auch die Option Präsentationsvorlage (POTX oder OTP) auswählen.
      5. +
      6. Wählen Sie das gewünschte Format aus: PPTX, ODP, PDF, PDF/A. Sie können auch die Option Präsentationsvorlage (POTX oder OTP) auswählen.
      diff --git a/apps/presentationeditor/main/resources/help/de/editor.css b/apps/presentationeditor/main/resources/help/de/editor.css index fb0013f79..cf91b6c92 100644 --- a/apps/presentationeditor/main/resources/help/de/editor.css +++ b/apps/presentationeditor/main/resources/help/de/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/presentationeditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm b/apps/presentationeditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm index 226b686f6..4d100eea8 100644 --- a/apps/presentationeditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm +++ b/apps/presentationeditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. click the File tab of the top toolbar,
      2. select the Save as... option,
      3. -
      4. choose one of the available formats depending on your needs: PPTX, ODP, PDF, PDFA. You can also choose the Рresentation template (POTX or OTP) option.
      5. +
      6. choose one of the available formats depending on your needs: PPTX, ODP, PDF, PDF/A. You can also choose the Рresentation template (POTX or OTP) option.
      diff --git a/apps/presentationeditor/main/resources/help/en/editor.css b/apps/presentationeditor/main/resources/help/en/editor.css index 108b9b531..ffb4d3b01 100644 --- a/apps/presentationeditor/main/resources/help/en/editor.css +++ b/apps/presentationeditor/main/resources/help/en/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/presentationeditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm b/apps/presentationeditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm index e1a108e0d..3abbc6222 100644 --- a/apps/presentationeditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm +++ b/apps/presentationeditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm @@ -14,7 +14,7 @@

      Cree una presentación nueva o abra la existente

      -

      Para crear una nueva presentación

      +

      Para crear una nueva presentación

      En el editor en línea

        @@ -32,7 +32,7 @@
      -

      Para abrir una presentación existente

      +

      Para abrir una presentación existente

      En el editor de escritorio

      1. en la ventana principal del programa, seleccione la opción Abrir archivo local en la barra lateral izquierda,
      2. @@ -42,7 +42,7 @@

        Todos los directorios a los que ha accedido utilizando el editor de escritorio se mostrarán en la lista de Carpetas recientes para que posteriormente pueda acceder rápidamente a ellos. Haga clic en la carpeta correspondiente para seleccionar uno de los archivos almacenados en ella.

      -

      Para abrir una presentación recientemente editada

      +

      Para abrir una presentación recientemente editada

      En el editor en línea

        diff --git a/apps/presentationeditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm b/apps/presentationeditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm index d05d75491..e8570ded7 100644 --- a/apps/presentationeditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm +++ b/apps/presentationeditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
        1. haga clic en la pestaña Archivo en la barra de herramientas superior,
        2. seleccione la opción Guardar como...,
        3. -
        4. elija uno de los formatos disponibles: PPTX, ODP, PDF, PDFA. También puede seleccionar la opción Plantilla de presentación (POTX o OTP).
        5. +
        6. elija uno de los formatos disponibles: PPTX, ODP, PDF, PDF/A. También puede seleccionar la opción Plantilla de presentación (POTX o OTP).
      diff --git a/apps/presentationeditor/main/resources/help/es/editor.css b/apps/presentationeditor/main/resources/help/es/editor.css index fb0013f79..cf91b6c92 100644 --- a/apps/presentationeditor/main/resources/help/es/editor.css +++ b/apps/presentationeditor/main/resources/help/es/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/presentationeditor/main/resources/help/es/images/document_language.png b/apps/presentationeditor/main/resources/help/es/images/document_language.png index 4fb48ec51bf8045e0ece62b230e0108742291884..380b889d83e8e3692676d20abeb930c827a7c4e3 100644 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^{2oCO|{#S9F5M?jcysy3fAQ1Gy) zi(^Q|t*Mg?`C1eN7%FAhI=bk}^}@{yt~J8asPiu5=;m@yufqJ)&!TTXr;EZaHMn7Ps#2x_42p4_iO{w(j>c zz2b9XDY-NLXFc3h{ho(IGojnj|3L2*-kln=Eny0^{b+=tI>E3b0N2MMqI Uw=Ps^7tlKlp00i_>zopr0G2&(u>b%7 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp@Aj|*_ygzDVxpH$To7D81^5|GMo(ZfM=}MScb*YxZ5L zOf5a}Dtm5t*i~be`;lA!K0f}WU%q_JF5zPjCdp5Zi+B+nF+*gnp|vd$@? F2>@+KT$BI+ diff --git a/apps/presentationeditor/main/resources/help/es/images/fitslide.png b/apps/presentationeditor/main/resources/help/es/images/fitslide.png index 61d79799b80c4e5b845ab34e192dd4f80284befe..c015aa78386a174afd74db714ed12ab1d71c2522 100644 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^{2(?56OjB_vsesBaTa()7BevL9RXp+soH$fK*2^& z7srr_TT=r!@*Ys&dAwsEo3ZsDhC9s0*78?^w4_=UqPz`Q)VDS7{CD6%59`t?TUTse zyH(?n-RA1|_o_vlIksNY-M#gge8v70XYs>rY#tL=x6dtpc5vq*mcn~CXDmF|XK3|& z$@`c7KjuYFovWbDw17kNUi}U8mGf^pcxC>ce!r0U&HK)M@v|m#03E~N>FVdQ&MBb@ E08s)^w*UYD literal 96 zcmeAS@N?(olHy`uVBq!ia0vp@Aj|} diff --git a/apps/presentationeditor/main/resources/help/es/images/fitwidth.png b/apps/presentationeditor/main/resources/help/es/images/fitwidth.png index eae730c65ff3dd1692844a9461b037fda462a424..745cfe89fd0e28b4d691d46c8abe698082e72c62 100644 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQk(@Ik;M!Qd`Cc-ajG_-G*B?b z)5S5Q;?~lM2YC+|a4;Locptd7=i%A?(juIlO50Z{9X%!4!_q0bc~O#36YXd3H0*}aI1_r((Aj~*bn@<`jDC6nk y7*cU7`G<#0!U2(@!a~VeuVOeF6Q9K=F)+;Azv+Z@V~-_J9fPN~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;I6Qz@0)#DCZSoR@NIzV4WxVywPjb+i2CD95gVU+ORC{kgRB{LcCx d`Nq+k|3^ul+vp-4mt_NTj;E`i%Q~loCIE?WO1}UA diff --git a/apps/presentationeditor/main/resources/help/es/images/zoomout.png b/apps/presentationeditor/main/resources/help/es/images/zoomout.png index 60ac9a97d9dde08b68486481c3e4c3b4b84fb5f8..1c4a45face2c06114dd8adab472b638634db927a 100644 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^AT~D#6OcT~)9nwWI14-?iy0XBj({-ZRBb+KprDwi ti(^Q|t>hma;s!iRws6NCFsO*-V<@pxDk)w5WHwL*gQu&X%Q~loCIH9z7w`Z8 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^{2~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;H^{?Rl3oBrS27P#Ksw!~_-v~ZrCsOu&i}i8 c=GvR}x^cFfe=O+8DFQjh)78&qol`;+0CG!BivR!s diff --git a/apps/presentationeditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm b/apps/presentationeditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm index 50c06687d..4bf222cc9 100644 --- a/apps/presentationeditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm +++ b/apps/presentationeditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. cliquez sur l'onglet Fichier de la barre d'outils supérieure,
      2. sélectionnez l'option Enregistrer sous...,
      3. -
      4. sélectionnez l'un des formats disponibles selon vos besoins: PPTX, ODP, PDF, PDFA. Vous pouvez également choisir l'option Modèle de présentation (POTX or OTP).
      5. +
      6. sélectionnez l'un des formats disponibles selon vos besoins: PPTX, ODP, PDF, PDF/A. Vous pouvez également choisir l'option Modèle de présentation (POTX or OTP).
      diff --git a/apps/presentationeditor/main/resources/help/fr/editor.css b/apps/presentationeditor/main/resources/help/fr/editor.css index 443ea7b42..0927a3895 100644 --- a/apps/presentationeditor/main/resources/help/fr/editor.css +++ b/apps/presentationeditor/main/resources/help/fr/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/presentationeditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm b/apps/presentationeditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm index 24e151c5c..36331edfd 100644 --- a/apps/presentationeditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm +++ b/apps/presentationeditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm @@ -14,7 +14,7 @@

      Create a new presentation or open an existing one

      -

      To create a new presentation

      +

      To create a new presentation

      In the online editor

        @@ -32,7 +32,7 @@
      -

      To open an existing presentation

      +

      To open an existing presentation

      In the desktop editor

      1. in the main program window, select the Open local file menu item at the left sidebar,
      2. @@ -42,7 +42,7 @@

        All the directories that you have accessed using the desktop editor will be displayed in the Recent folders list so that you can quickly access them afterwards. Click the necessary folder to select one of the files stored in it.

      -

      To open a recently edited presentation

      +

      To open a recently edited presentation

      In the online editor

        diff --git a/apps/presentationeditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm b/apps/presentationeditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm index 6d5339cef..fb8f2e4f5 100644 --- a/apps/presentationeditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm +++ b/apps/presentationeditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
        1. click the File tab of the top toolbar,
        2. select the Save as... option,
        3. -
        4. choose one of the available formats depending on your needs: PPTX, ODP, PDF, PDFA. You can also choose the Рresentation template (POTX or OTP) option.
        5. +
        6. choose one of the available formats depending on your needs: PPTX, ODP, PDF, PDF/A. You can also choose the Рresentation template (POTX or OTP) option.
      diff --git a/apps/presentationeditor/main/resources/help/it/editor.css b/apps/presentationeditor/main/resources/help/it/editor.css index 9a4fc74bf..80985ff8a 100644 --- a/apps/presentationeditor/main/resources/help/it/editor.css +++ b/apps/presentationeditor/main/resources/help/it/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -148,7 +148,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/presentationeditor/main/resources/help/it/images/document_language.png b/apps/presentationeditor/main/resources/help/it/images/document_language.png index 4fb48ec51bf8045e0ece62b230e0108742291884..380b889d83e8e3692676d20abeb930c827a7c4e3 100644 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^{2oCO|{#S9F5M?jcysy3fAQ1Gy) zi(^Q|t*Mg?`C1eN7%FAhI=bk}^}@{yt~J8asPiu5=;m@yufqJ)&!TTXr;EZaHMn7Ps#2x_42p4_iO{w(j>c zz2b9XDY-NLXFc3h{ho(IGojnj|3L2*-kln=Eny0^{b+=tI>E3b0N2MMqI Uw=Ps^7tlKlp00i_>zopr0G2&(u>b%7 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp@Aj|*_ygzDVxpH$To7D81^5|GMo(ZfM=}MScb*YxZ5L zOf5a}Dtm5t*i~be`;lA!K0f}WU%q_JF5zPjCdp5Zi+B+nF+*gnp|vd$@? F2>@+KT$BI+ diff --git a/apps/presentationeditor/main/resources/help/it/images/fitslide.png b/apps/presentationeditor/main/resources/help/it/images/fitslide.png index 61d79799b80c4e5b845ab34e192dd4f80284befe..c015aa78386a174afd74db714ed12ab1d71c2522 100644 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^{2(?56OjB_vsesBaTa()7BevL9RXp+soH$fK*2^& z7srr_TT=r!@*Ys&dAwsEo3ZsDhC9s0*78?^w4_=UqPz`Q)VDS7{CD6%59`t?TUTse zyH(?n-RA1|_o_vlIksNY-M#gge8v70XYs>rY#tL=x6dtpc5vq*mcn~CXDmF|XK3|& z$@`c7KjuYFovWbDw17kNUi}U8mGf^pcxC>ce!r0U&HK)M@v|m#03E~N>FVdQ&MBb@ E08s)^w*UYD literal 96 zcmeAS@N?(olHy`uVBq!ia0vp@Aj|} diff --git a/apps/presentationeditor/main/resources/help/it/images/fitwidth.png b/apps/presentationeditor/main/resources/help/it/images/fitwidth.png index eae730c65ff3dd1692844a9461b037fda462a424..745cfe89fd0e28b4d691d46c8abe698082e72c62 100644 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQk(@Ik;M!Qd`Cc-ajG_-G*B?b z)5S5Q;?~lM2YC+|a4;Locptd7=i%A?(juIlO50Z{9X%!4!_q0bc~O#36YXd3H0*}aI1_r((Aj~*bn@<`jDC6nk y7*cU7`G<#0!U2(@!a~VeuVOeF6Q9K=F)+;Azv+Z@V~-_J9fPN~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;I6Qz@0)#DCZSoR@NIzV4WxVywPjb+i2CD95gVU+ORC{kgRB{LcCx d`Nq+k|3^ul+vp-4mt_NTj;E`i%Q~loCIE?WO1}UA diff --git a/apps/presentationeditor/main/resources/help/it/images/zoomout.png b/apps/presentationeditor/main/resources/help/it/images/zoomout.png index 60ac9a97d9dde08b68486481c3e4c3b4b84fb5f8..1c4a45face2c06114dd8adab472b638634db927a 100644 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^AT~D#6OcT~)9nwWI14-?iy0XBj({-ZRBb+KprDwi ti(^Q|t>hma;s!iRws6NCFsO*-V<@pxDk)w5WHwL*gQu&X%Q~loCIH9z7w`Z8 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^{2~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;H^{?Rl3oBrS27P#Ksw!~_-v~ZrCsOu&i}i8 c=GvR}x^cFfe=O+8DFQjh)78&qol`;+0CG!BivR!s diff --git a/apps/presentationeditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm b/apps/presentationeditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm index e1cce6439..da2f23d56 100644 --- a/apps/presentationeditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm +++ b/apps/presentationeditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. нажмите на вкладку Файл на верхней панели инструментов,
      2. выберите опцию Сохранить как,
      3. -
      4. выберите один из доступных форматов: PPTX, ODP, PDF, PDFA. Также можно выбрать вариант Шаблон презентации POTX или OTP.
      5. +
      6. выберите один из доступных форматов: PPTX, ODP, PDF, PDF/A. Также можно выбрать вариант Шаблон презентации POTX или OTP.
      diff --git a/apps/presentationeditor/main/resources/help/ru/editor.css b/apps/presentationeditor/main/resources/help/ru/editor.css index 108b9b531..ffb4d3b01 100644 --- a/apps/presentationeditor/main/resources/help/ru/editor.css +++ b/apps/presentationeditor/main/resources/help/ru/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/spreadsheeteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm b/apps/spreadsheeteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm index 6d72fb6e2..095969a02 100644 --- a/apps/spreadsheeteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm +++ b/apps/spreadsheeteditor/main/resources/help/de/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. Klicken Sie in der oberen Menüleiste auf die Registerkarte Datei.
      2. Wählen Sie die Option Speichern als....
      3. -
      4. Wählen Sie das gewünschte Format aus: XLSX, ODS, CSV, PDF, PDFA. Sie können auch die Option Tabellenvorlage (XLTX oder OTS) auswählen.
      5. +
      6. Wählen Sie das gewünschte Format aus: XLSX, ODS, CSV, PDF, PDF/A. Sie können auch die Option Tabellenvorlage (XLTX oder OTS) auswählen.
      diff --git a/apps/spreadsheeteditor/main/resources/help/de/editor.css b/apps/spreadsheeteditor/main/resources/help/de/editor.css index 443ea7b42..0927a3895 100644 --- a/apps/spreadsheeteditor/main/resources/help/de/editor.css +++ b/apps/spreadsheeteditor/main/resources/help/de/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm index a2e239fbe..7c13ee3c0 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm +++ b/apps/spreadsheeteditor/main/resources/help/en/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. click the File tab of the top toolbar,
      2. select the Save as... option,
      3. -
      4. choose one of the available formats depending on your needs: XLSX, ODS, CSV, PDF, PDFA. You can also choose the Spreadsheet template (XLTX or OTS) option.
      5. +
      6. choose one of the available formats depending on your needs: XLSX, ODS, CSV, PDF, PDF/A. You can also choose the Spreadsheet template (XLTX or OTS) option.
      diff --git a/apps/spreadsheeteditor/main/resources/help/en/editor.css b/apps/spreadsheeteditor/main/resources/help/en/editor.css index 108b9b531..ffb4d3b01 100644 --- a/apps/spreadsheeteditor/main/resources/help/en/editor.css +++ b/apps/spreadsheeteditor/main/resources/help/en/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm b/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm index 5d50ae46b..374432d3b 100644 --- a/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm +++ b/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/OpenCreateNew.htm @@ -14,7 +14,7 @@

      Cree una hoja de cálculo nueva o abra una que ya existe

      -
      Para crear una nueva hoja de cálculo
      +

      Para crear una nueva hoja de cálculo

      En el editor en línea

        @@ -32,7 +32,7 @@
      -
      Para abrir un documento existente
      +

      Para abrir un documento existente

      En el editor de escritorio

      1. en la ventana principal del programa, seleccione la opción Abrir archivo local en la barra lateral izquierda,
      2. @@ -42,7 +42,7 @@

        Todos los directorios a los que ha accedido utilizando el editor de escritorio se mostrarán en la lista de Carpetas recientes para que posteriormente pueda acceder rápidamente a ellos. Haga clic en la carpeta correspondiente para seleccionar uno de los archivos almacenados en ella.

      -
      Para abrir una hoja de cálculo recientemente editada
      +

      Para abrir una hoja de cálculo recientemente editada

      En el editor en línea

        diff --git a/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm b/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm index 8d4f0712a..0161eec9a 100644 --- a/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm +++ b/apps/spreadsheeteditor/main/resources/help/es/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
        1. haga clic en la pestaña Archivo en la barra de herramientas superior,
        2. seleccione la opción Guardar como...,
        3. -
        4. elija uno de los formatos disponibles: XLSX, ODS, CSV, PDF, PDFA. También puede seleccionar la opción Plantilla de hoja de cálculo (XLTX o OTS).
        5. +
        6. elija uno de los formatos disponibles: XLSX, ODS, CSV, PDF, PDF/A. También puede seleccionar la opción Plantilla de hoja de cálculo (XLTX o OTS).
      diff --git a/apps/spreadsheeteditor/main/resources/help/es/editor.css b/apps/spreadsheeteditor/main/resources/help/es/editor.css index 443ea7b42..0927a3895 100644 --- a/apps/spreadsheeteditor/main/resources/help/es/editor.css +++ b/apps/spreadsheeteditor/main/resources/help/es/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/spreadsheeteditor/main/resources/help/es/images/firstsheet.png b/apps/spreadsheeteditor/main/resources/help/es/images/firstsheet.png index f9f608214fcefc94b295d5c49ae946b77e265816..11c93e804fa0364b1062385010160ca789272942 100644 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1SD^YpWXnZI14-?iy0XBj({-ZRBb+KpkThI zi(^Q|t>hmbEC~!r;^N|Kipt;JIeGs4@#PsWFD?D|@1KCCPFJ6-HJix+R<;YGw$~0Fkxv`|XU3CN(H^lnSf)C@kP$%Dca>H%DckLd2#N&V33F iW}CKd6f}i|M$3Hdl2t0kn ml+vJK!0e*fdEn}SQbq=``3e`N{^isHY4UXSb6Mw<&;$T@L>KV@ diff --git a/apps/spreadsheeteditor/main/resources/help/es/images/lastsheet.png b/apps/spreadsheeteditor/main/resources/help/es/images/lastsheet.png index 45cef7eee5fb3ad4b30c956cdaa7f2dda312f0de..bcbed26eabc5f4e67093ba94e59668606b3545fc 100644 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V6Od#IhldC?A^uB&$;IuIC`{|vE%RGzti<%yMm>d7A;zIp~rDzTSKR?x?S}*p5-P- zX7oy%Kbq3l(_>TiMxyK`r?6UrxsAQO{36co6ZYTaSz;t&Vh;ES kFrR5Lh=~bsU67Tqi{Y=O!UbJZvD+X$p00i_>zopr06xqX$^ZZW diff --git a/apps/spreadsheeteditor/main/resources/help/es/images/nextsheet.png b/apps/spreadsheeteditor/main/resources/help/es/images/nextsheet.png index 02fb28b7c1c22a9d38fea58a05b3ca2999f5a209..22aef2c03149b5f3db419265833d6b9e4ea72909 100644 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!2~4PmUdhRQk(@Ik;M!Qd`Cc-ajG_-G*B?c z)5S5Q;#P7-cJ}V#=jYsc4m^1D=+XQ4`%7L1=?Do3h>EtZ5mjVl6jt}E`SwOqjI-lf zue5p6#EzaGo3b|&yNFVdQ&MBb@0Fw|qPyhe` literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ;0VEjsekU6ODLGFU$B>F!$tUc;$#Y1=#5C{- juqH8R3N(CLP!uqg!Jb|G_YNkLwICgyu6{1-oD!M<|5p_Q diff --git a/apps/spreadsheeteditor/main/resources/help/es/images/previoussheet.png b/apps/spreadsheeteditor/main/resources/help/es/images/previoussheet.png index 27a20e75bf37164e1e5b7be16c9171ad15d6f3b1..ff6b7738a2770c38aec353cbe2ac99faa9261f8a 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!2~4PmUdhRQk(@Ik;M!Qd`Cc-ajG_-G*B?n z)5S5Q;#TsH4#szPc21r@|9pemu9BBQ_4W1Q;^HkwHYOi$;EGLPQ2F@g=H`F@>cm41 zFoZ~miau>(l(@D&US3kN)0HXdN(-m(1`me=Z*Om(xOI_r`N>JDFV4AMyLIap7sEr5 W31_zpy@~)@#^CAd=d#Wzp$Py{Y(Js^ literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ;0VEjsekU6ODLGFU$B>F!$v^m6j(?JLXzAu= k?qCSgOJI2H_*6lQF``iXxAy84e?dAtUHx3vIVCg!04ekq!vFvP diff --git a/apps/spreadsheeteditor/main/resources/help/es/images/zoomin.png b/apps/spreadsheeteditor/main/resources/help/es/images/zoomin.png index e2eeea6a3d3df6bac3ef31c3ee45a18dd60704ba..55fb7d3916c36a9b9c0f14fb46da569f18c76834 100644 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4u8B>#36YXd3H0*}aI1_r((Aj~*bn@<`jDC6nk y7*cU7`G<#0!U2(@!a~VeuVOeF6Q9K=F)+;Azv+Z@V~-_J9fPN~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;I6Qz@0)#DCZSoR@NIzV4WxVywPjb+i2CD95gVU+ORC{kgRB{LcCx d`Nq+k|3^ul+vp-4mt_NTj;E`i%Q~loCIE?WO1}UA diff --git a/apps/spreadsheeteditor/main/resources/help/es/images/zoomout.png b/apps/spreadsheeteditor/main/resources/help/es/images/zoomout.png index 60ac9a97d9dde08b68486481c3e4c3b4b84fb5f8..1c4a45face2c06114dd8adab472b638634db927a 100644 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^AT~D#6OcT~)9nwWI14-?iy0XBj({-ZRBb+KprDwi ti(^Q|t>hma;s!iRws6NCFsO*-V<@pxDk)w5WHwL*gQu&X%Q~loCIH9z7w`Z8 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^{2~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;H^{?Rl3oBrS27P#Ksw!~_-v~ZrCsOu&i}i8 c=GvR}x^cFfe=O+8DFQjh)78&qol`;+0CG!BivR!s diff --git a/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm b/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm index 91fa93e89..2f8800b54 100644 --- a/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm +++ b/apps/spreadsheeteditor/main/resources/help/fr/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. cliquez sur l'onglet Fichier de la barre d'outils supérieure,
      2. sélectionnez l'option Enregistrer sous...,
      3. -
      4. sélectionnez l'un des formats disponibles selon vos besoins: XLSX, ODS, CSV, PDF, PDFA. Vous pouvez également choisir l'option Modèle de feuille de calcul (XLTX ou OTS) .
      5. +
      6. sélectionnez l'un des formats disponibles selon vos besoins: XLSX, ODS, CSV, PDF, PDF/A. Vous pouvez également choisir l'option Modèle de feuille de calcul (XLTX ou OTS) .
      diff --git a/apps/spreadsheeteditor/main/resources/help/fr/editor.css b/apps/spreadsheeteditor/main/resources/help/fr/editor.css index fb0013f79..cf91b6c92 100644 --- a/apps/spreadsheeteditor/main/resources/help/fr/editor.css +++ b/apps/spreadsheeteditor/main/resources/help/fr/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm b/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm index 453bde2c3..9ba51d0da 100644 --- a/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm +++ b/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/OpenCreateNew.htm @@ -14,7 +14,7 @@

      Create a new spreadsheet or open an existing one

      -

      To create a new spreadsheet

      +

      To create a new spreadsheet

      In the online editor

        @@ -32,7 +32,7 @@
      -

      To open an existing document

      +

      To open an existing document

      In the desktop editor

      1. in the main program window, select the Open local file menu item at the left sidebar,
      2. @@ -42,7 +42,7 @@

        All the directories that you have accessed using the desktop editor will be displayed in the Recent folders list so that you can quickly access them afterwards. Click the necessary folder to select one of the files stored in it.

      -

      To open a recently edited spreadsheet

      +

      To open a recently edited spreadsheet

      In the online editor

        diff --git a/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm b/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm index 4cb62f794..82a2f025b 100644 --- a/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm +++ b/apps/spreadsheeteditor/main/resources/help/it/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
        1. click the File tab of the top toolbar,
        2. select the Save as... option,
        3. -
        4. choose one of the available formats depending on your needs: XLSX, ODS, CSV, PDF, PDFA. You can also choose the Spreadsheet template (XLTX or OTS) option.
        5. +
        6. choose one of the available formats depending on your needs: XLSX, ODS, CSV, PDF, PDF/A. You can also choose the Spreadsheet template (XLTX or OTS) option.
      diff --git a/apps/spreadsheeteditor/main/resources/help/it/editor.css b/apps/spreadsheeteditor/main/resources/help/it/editor.css index 9a4fc74bf..80985ff8a 100644 --- a/apps/spreadsheeteditor/main/resources/help/it/editor.css +++ b/apps/spreadsheeteditor/main/resources/help/it/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -148,7 +148,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; diff --git a/apps/spreadsheeteditor/main/resources/help/it/images/firstsheet.png b/apps/spreadsheeteditor/main/resources/help/it/images/firstsheet.png index f9f608214fcefc94b295d5c49ae946b77e265816..11c93e804fa0364b1062385010160ca789272942 100644 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1SD^YpWXnZI14-?iy0XBj({-ZRBb+KpkThI zi(^Q|t>hmbEC~!r;^N|Kipt;JIeGs4@#PsWFD?D|@1KCCPFJ6-HJix+R<;YGw$~0Fkxv`|XU3CN(H^lnSf)C@kP$%Dca>H%DckLd2#N&V33F iW}CKd6f}i|M$3Hdl2t0kn ml+vJK!0e*fdEn}SQbq=``3e`N{^isHY4UXSb6Mw<&;$T@L>KV@ diff --git a/apps/spreadsheeteditor/main/resources/help/it/images/lastsheet.png b/apps/spreadsheeteditor/main/resources/help/it/images/lastsheet.png index 45cef7eee5fb3ad4b30c956cdaa7f2dda312f0de..bcbed26eabc5f4e67093ba94e59668606b3545fc 100644 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V6Od#IhldC?A^uB&$;IuIC`{|vE%RGzti<%yMm>d7A;zIp~rDzTSKR?x?S}*p5-P- zX7oy%Kbq3l(_>TiMxyK`r?6UrxsAQO{36co6ZYTaSz;t&Vh;ES kFrR5Lh=~bsU67Tqi{Y=O!UbJZvD+X$p00i_>zopr06xqX$^ZZW diff --git a/apps/spreadsheeteditor/main/resources/help/it/images/nextsheet.png b/apps/spreadsheeteditor/main/resources/help/it/images/nextsheet.png index 02fb28b7c1c22a9d38fea58a05b3ca2999f5a209..22aef2c03149b5f3db419265833d6b9e4ea72909 100644 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!2~4PmUdhRQk(@Ik;M!Qd`Cc-ajG_-G*B?c z)5S5Q;#P7-cJ}V#=jYsc4m^1D=+XQ4`%7L1=?Do3h>EtZ5mjVl6jt}E`SwOqjI-lf zue5p6#EzaGo3b|&yNFVdQ&MBb@0Fw|qPyhe` literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ;0VEjsekU6ODLGFU$B>F!$tUc;$#Y1=#5C{- juqH8R3N(CLP!uqg!Jb|G_YNkLwICgyu6{1-oD!M<|5p_Q diff --git a/apps/spreadsheeteditor/main/resources/help/it/images/previoussheet.png b/apps/spreadsheeteditor/main/resources/help/it/images/previoussheet.png index 27a20e75bf37164e1e5b7be16c9171ad15d6f3b1..ff6b7738a2770c38aec353cbe2ac99faa9261f8a 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!2~4PmUdhRQk(@Ik;M!Qd`Cc-ajG_-G*B?n z)5S5Q;#TsH4#szPc21r@|9pemu9BBQ_4W1Q;^HkwHYOi$;EGLPQ2F@g=H`F@>cm41 zFoZ~miau>(l(@D&US3kN)0HXdN(-m(1`me=Z*Om(xOI_r`N>JDFV4AMyLIap7sEr5 W31_zpy@~)@#^CAd=d#Wzp$Py{Y(Js^ literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ;0VEjsekU6ODLGFU$B>F!$v^m6j(?JLXzAu= k?qCSgOJI2H_*6lQF``iXxAy84e?dAtUHx3vIVCg!04ekq!vFvP diff --git a/apps/spreadsheeteditor/main/resources/help/it/images/zoomin.png b/apps/spreadsheeteditor/main/resources/help/it/images/zoomin.png index e2eeea6a3d3df6bac3ef31c3ee45a18dd60704ba..55fb7d3916c36a9b9c0f14fb46da569f18c76834 100644 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4u8B>#36YXd3H0*}aI1_r((Aj~*bn@<`jDC6nk y7*cU7`G<#0!U2(@!a~VeuVOeF6Q9K=F)+;Azv+Z@V~-_J9fPN~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;I6Qz@0)#DCZSoR@NIzV4WxVywPjb+i2CD95gVU+ORC{kgRB{LcCx d`Nq+k|3^ul+vp-4mt_NTj;E`i%Q~loCIE?WO1}UA diff --git a/apps/spreadsheeteditor/main/resources/help/it/images/zoomout.png b/apps/spreadsheeteditor/main/resources/help/it/images/zoomout.png index 60ac9a97d9dde08b68486481c3e4c3b4b84fb5f8..1c4a45face2c06114dd8adab472b638634db927a 100644 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^AT~D#6OcT~)9nwWI14-?iy0XBj({-ZRBb+KprDwi ti(^Q|t>hma;s!iRws6NCFsO*-V<@pxDk)w5WHwL*gQu&X%Q~loCIH9z7w`Z8 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^{2~i@^5Bz4*by8eXF2F zzvQAvV5Pawl7Gcb>(%G-X3Sc4-3=hlA@`jsN@wYU2Hee>tD4ptWDFZhzb zwPAKVliJoMmc;H^{?Rl3oBrS27P#Ksw!~_-v~ZrCsOu&i}i8 c=GvR}x^cFfe=O+8DFQjh)78&qol`;+0CG!BivR!s diff --git a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm index 28381c447..93e08c9b1 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm +++ b/apps/spreadsheeteditor/main/resources/help/ru/UsageInstructions/SavePrintDownload.htm @@ -28,7 +28,7 @@
      1. нажмите на вкладку Файл на верхней панели инструментов,
      2. выберите опцию Сохранить как,
      3. -
      4. выберите один из доступных форматов: XLSX, ODS, CSV, PDF, PDFA. Также можно выбрать вариант Шаблон таблицы XLTX или OTS.
      5. +
      6. выберите один из доступных форматов: XLSX, ODS, CSV, PDF, PDF/A. Также можно выбрать вариант Шаблон таблицы XLTX или OTS.
      diff --git a/apps/spreadsheeteditor/main/resources/help/ru/editor.css b/apps/spreadsheeteditor/main/resources/help/ru/editor.css index 108b9b531..ffb4d3b01 100644 --- a/apps/spreadsheeteditor/main/resources/help/ru/editor.css +++ b/apps/spreadsheeteditor/main/resources/help/ru/editor.css @@ -1,6 +1,6 @@ body { -font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 12px; color: #444; background: #fff; @@ -170,7 +170,7 @@ text-decoration: none; font-style: italic; } #search-results a { - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: Arial, Helvetica, "Helvetica Neue", sans-serif; font-size: 1em; font-weight: bold; color: #444; From 538945fef286eaa9f70e6d2a92ac14bdc4b226cd Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 19 May 2021 12:27:23 +0300 Subject: [PATCH 012/376] [common] skiped window's close button animation --- apps/common/main/resources/less/window.less | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/common/main/resources/less/window.less b/apps/common/main/resources/less/window.less index 89ad03f21..65294ef4d 100644 --- a/apps/common/main/resources/less/window.less +++ b/apps/common/main/resources/less/window.less @@ -85,10 +85,8 @@ &.close { position: relative; opacity: 0.7; - transition: transform .3s; &:hover { - transform: scale(1.1); opacity: 1; } From a166cf858c35c177f9fa7d70194e5dc710c9f1bf Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 19 May 2021 12:33:03 +0300 Subject: [PATCH 013/376] [themes] debug themes toggle --- apps/common/main/lib/controller/Themes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index 1c11545a3..9d72414a0 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -259,7 +259,7 @@ define([ setTheme: function (id, force) { if ( (this.currentThemeId() != id || force) && !!themes_map[id] ) { - var classname = document.body.className.replace(/theme-\w+\s?/, ''); + var classname = document.body.className.replace(/theme-[\w-]+\s?/, ''); document.body.className = classname; $('body').addClass(id); From 00b8e67c6856f2c390b0f5fb81c72b48772f4761 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 19 May 2021 15:08:04 +0300 Subject: [PATCH 014/376] [PE] fix bug 50284 --- apps/presentationeditor/main/resources/less/app.less | 2 +- apps/spreadsheeteditor/main/resources/less/app.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/presentationeditor/main/resources/less/app.less b/apps/presentationeditor/main/resources/less/app.less index cb08bdcb4..64839f4db 100644 --- a/apps/presentationeditor/main/resources/less/app.less +++ b/apps/presentationeditor/main/resources/less/app.less @@ -201,7 +201,7 @@ left: 0; right: 0; bottom: 0; - background: rgb(226, 226, 226); + background: @canvas-background; .slide-h { display: flex; diff --git a/apps/spreadsheeteditor/main/resources/less/app.less b/apps/spreadsheeteditor/main/resources/less/app.less index d0cd39be2..3104f02a7 100644 --- a/apps/spreadsheeteditor/main/resources/less/app.less +++ b/apps/spreadsheeteditor/main/resources/less/app.less @@ -157,7 +157,7 @@ // Skeleton of workbook .doc-placeholder { - background: #fbfbfb; + background: @canvas-content-background; display: flex; width: 100%; height: 100%; From 71a6297b38d3db409a42ce567b918aa5c1e648c3 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Wed, 19 May 2021 21:36:04 +0300 Subject: [PATCH 015/376] Add getting of letters into hint manager, change styles --- apps/common/main/lib/component/HintManager.js | 14 +++++++++++++- .../resources/alphabetletters/alphabetletters.json | 4 ++++ .../main/resources/less/colors-table-dark.less | 1 + .../main/resources/less/colors-table-ie-fix.less | 1 + apps/common/main/resources/less/colors-table.less | 2 ++ apps/common/main/resources/less/hint-manager.less | 7 ++++--- 6 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 apps/common/main/resources/alphabetletters/alphabetletters.json diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index c12c7d9ae..e4aabebda 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -47,7 +47,9 @@ if (Common.UI === undefined) { } Common.UI.HintManager = new(function() { - var _isAlt = false, + var _lang = 'en', + _arrLetters = [], + _isAlt = false, _hintVisible = false, _currentLevel = -1, _controls = [], @@ -113,6 +115,10 @@ Common.UI.HintManager = new(function() { }; var _init = function() { + Common.NotificationCenter.on('app:ready', function (mode) { + _lang = mode.lang; + _getAlphabetLetters(); + }.bind(this)); $(document).on('keyup', function(e) { if (e.keyCode == Common.UI.Keys.ALT &&_isAlt) { e.preventDefault(); @@ -145,6 +151,12 @@ Common.UI.HintManager = new(function() { }); }; + var _getAlphabetLetters = function () { + Common.Utils.loadConfig('../../common/main/resources/alphabetletters/alphabetletters.json', function (langsJson) { + _arrLetters = langsJson[_lang]; + }); + }; + return { init: _init } diff --git a/apps/common/main/resources/alphabetletters/alphabetletters.json b/apps/common/main/resources/alphabetletters/alphabetletters.json new file mode 100644 index 000000000..5d9f9b62b --- /dev/null +++ b/apps/common/main/resources/alphabetletters/alphabetletters.json @@ -0,0 +1,4 @@ +{ + "en": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], + "ru": ["а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "э", "ю", "я"] +} \ No newline at end of file diff --git a/apps/common/main/resources/less/colors-table-dark.less b/apps/common/main/resources/less/colors-table-dark.less index 28c206b53..0180c6348 100644 --- a/apps/common/main/resources/less/colors-table-dark.less +++ b/apps/common/main/resources/less/colors-table-dark.less @@ -14,6 +14,7 @@ --background-notification-badge: #ffd114; --background-scrim: fade(black, 60%); --background-loader: fade(#181818, 90%); + --background-alt-key-hint: #FFD938; --highlight-button-hover: #555; --highlight-button-pressed: #606060; diff --git a/apps/common/main/resources/less/colors-table-ie-fix.less b/apps/common/main/resources/less/colors-table-ie-fix.less index 0dd726c2e..6069deb00 100644 --- a/apps/common/main/resources/less/colors-table-ie-fix.less +++ b/apps/common/main/resources/less/colors-table-ie-fix.less @@ -12,6 +12,7 @@ @background-notification-badge-ie: #ffd112; @background-scrim-ie: fade(#000, 20%); @background-loader-ie: fade(#181818, 90%); +@background-alt-key-hint-ie: #FFD938; @highlight-button-hover-ie: #e0e0e0; @highlight-button-pressed-ie: #ccc; diff --git a/apps/common/main/resources/less/colors-table.less b/apps/common/main/resources/less/colors-table.less index 7fc2a1a22..ebcba3bc8 100644 --- a/apps/common/main/resources/less/colors-table.less +++ b/apps/common/main/resources/less/colors-table.less @@ -24,6 +24,7 @@ --background-notification-badge: #ffd112; --background-scrim: fade(#000, 20%); --background-loader: fade(#181818, 90%); + --background-alt-key-hint: #FFD938; --highlight-button-hover: #e0e0e0; --highlight-button-pressed: #ccc; @@ -141,6 +142,7 @@ @background-notification-badge: var(--background-notification-badge); @background-scrim: var(--background-scrim); @background-loader: var(--background-loader); +@background-alt-key-hint: var(--background-alt-key-hint); // Highlight // ------------------------- diff --git a/apps/common/main/resources/less/hint-manager.less b/apps/common/main/resources/less/hint-manager.less index 7f61ca418..f1d793621 100644 --- a/apps/common/main/resources/less/hint-manager.less +++ b/apps/common/main/resources/less/hint-manager.less @@ -3,10 +3,11 @@ z-index: @zindex-navbar + 3; width: 20px; text-align: center; - background-color: @background-notification-popover-ie; - background-color: @background-notification-popover; + background-color: @background-alt-key-hint-ie; + background-color: @background-alt-key-hint; color: @text-normal; - .box-shadow(0 4px 15px -2px rgba(0, 0, 0, 0.5)); font-size: 12px; line-height: 18px; + padding: 0 4px; + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); } \ No newline at end of file From 99d33c2c5cf3e86e33c2abf8619cee471ecf63ac Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 19 May 2021 23:54:27 +0300 Subject: [PATCH 016/376] Bug 50447 --- apps/documenteditor/main/app/view/Toolbar.js | 9 +++++---- apps/presentationeditor/main/app/view/Toolbar.js | 9 +++++---- apps/spreadsheeteditor/main/app/view/Toolbar.js | 9 +++++---- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 76b0d9fe5..3b3ebca59 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -82,7 +82,7 @@ define([ * UI Components */ - this.SchemeNames = [ + this.SchemeNames = [ this.txtScheme22, this.txtScheme1, this.txtScheme2, this.txtScheme3, this.txtScheme4, this.txtScheme5, this.txtScheme6, this.txtScheme7, this.txtScheme8, this.txtScheme9, this.txtScheme10, this.txtScheme11, this.txtScheme12, this.txtScheme13, this.txtScheme14, this.txtScheme15, @@ -2130,7 +2130,7 @@ define([ schemecolors.push(clr); } - if (index == 21) { + if (index == 22) { this.mnuColorSchema.addItem({ caption: '--' }); @@ -2140,7 +2140,7 @@ define([ template: itemTemplate, cls: 'color-schemas-menu', colors: schemecolors, - caption: (index < 21) ? (me.SchemeNames[index] || name) : name, + caption: (index < 22) ? (me.SchemeNames[index] || name) : name, value: index, checkable: true, toggleGroup: 'menuSchema' @@ -2471,7 +2471,8 @@ define([ mniCapitalizeWords: 'Capitalize Each Word', mniToggleCase: 'tOGGLE cASE', textChangeLevel: 'Change List Level', - mniTextToTable: 'Convert Text to Table' + mniTextToTable: 'Convert Text to Table', + txtScheme22: 'New Office' } })(), DE.Views.Toolbar || {})); }); diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index 2cfc5e353..8fc62a9cd 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -104,7 +104,7 @@ define([ me.synchTooltip = undefined; me.needShowSynchTip = false; - me.SchemeNames = [ + me.SchemeNames = [me.txtScheme22, me.txtScheme1, me.txtScheme2, me.txtScheme3, me.txtScheme4, me.txtScheme5, me.txtScheme6, me.txtScheme7, me.txtScheme8, me.txtScheme9, me.txtScheme10, me.txtScheme11, me.txtScheme12, me.txtScheme13, me.txtScheme14, me.txtScheme15, @@ -1444,7 +1444,7 @@ define([ schemecolors.push(clr); } - if (index == 21) { + if (index == 22) { mnuColorSchema.addItem({ caption: '--' }); @@ -1454,7 +1454,7 @@ define([ template: itemTemplate, cls: 'color-schemas-menu', colors: schemecolors, - caption: (index < 21) ? (me.SchemeNames[index] || name) : name, + caption: (index < 22) ? (me.SchemeNames[index] || name) : name, value: index, checkable: true, toggleGroup: 'menuSchema' @@ -1815,7 +1815,8 @@ define([ mniCapitalizeWords: 'Capitalize Each Word', mniToggleCase: 'tOGGLE cASE', strMenuNoFill: 'No Fill', - tipHighlightColor: 'Highlight color' + tipHighlightColor: 'Highlight color', + txtScheme22: 'New Office' } }()), PE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 54e6b0f38..444f1e459 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -116,7 +116,7 @@ define([ var me = this, options = {}; - me.SchemeNames = [ + me.SchemeNames = [me.txtScheme22, me.txtScheme1, me.txtScheme2, me.txtScheme3, me.txtScheme4, me.txtScheme5, me.txtScheme6, me.txtScheme7, me.txtScheme8, me.txtScheme9, me.txtScheme10, me.txtScheme11, me.txtScheme12, me.txtScheme13, me.txtScheme14, me.txtScheme15, @@ -2263,7 +2263,7 @@ define([ schemecolors.push(clr); } - if (index == 21) { + if (index == 22) { this.mnuColorSchema.addItem({ caption : '--' }); @@ -2273,7 +2273,7 @@ define([ template: itemTemplate, cls : 'color-schemas-menu', colors : schemecolors, - caption: (index < 21) ? (me.SchemeNames[index] || name) : name, + caption: (index < 22) ? (me.SchemeNames[index] || name) : name, value: index, checkable: true, toggleGroup: 'menuSchema' @@ -2694,6 +2694,7 @@ define([ textAutoColor: 'Automatic', textItems: 'Items', tipInsertSpark: 'Insert sparkline', - capInsertSpark: 'Sparklines' + capInsertSpark: 'Sparklines', + txtScheme22: 'New Office' }, SSE.Views.Toolbar || {})); }); \ No newline at end of file From a405a14afc4fcc187d47b941e3e76006f8202ae6 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 19 May 2021 23:59:47 +0300 Subject: [PATCH 017/376] Update translation --- apps/documenteditor/main/locale/en.json | 1 + apps/presentationeditor/main/locale/en.json | 1 + apps/spreadsheeteditor/main/locale/en.json | 1 + 3 files changed, 3 insertions(+) diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 6476da0f4..acc8433d0 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -2719,6 +2719,7 @@ "DE.Views.Toolbar.txtScheme2": "Grayscale", "DE.Views.Toolbar.txtScheme20": "Urban", "DE.Views.Toolbar.txtScheme21": "Verve", + "DE.Views.Toolbar.txtScheme22": "New Office", "DE.Views.Toolbar.txtScheme3": "Apex", "DE.Views.Toolbar.txtScheme4": "Aspect", "DE.Views.Toolbar.txtScheme5": "Civic", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 4ebc14728..f96525ac9 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -1988,6 +1988,7 @@ "PE.Views.Toolbar.txtScheme2": "Grayscale", "PE.Views.Toolbar.txtScheme20": "Urban", "PE.Views.Toolbar.txtScheme21": "Verve", + "PE.Views.Toolbar.txtScheme22": "New Office", "PE.Views.Toolbar.txtScheme3": "Apex", "PE.Views.Toolbar.txtScheme4": "Aspect", "PE.Views.Toolbar.txtScheme5": "Civic", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 2f0c2043b..5453b6740 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -3304,6 +3304,7 @@ "SSE.Views.Toolbar.txtScheme2": "Grayscale", "SSE.Views.Toolbar.txtScheme20": "Urban", "SSE.Views.Toolbar.txtScheme21": "Verve", + "SSE.Views.Toolbar.txtScheme22": "New Office", "SSE.Views.Toolbar.txtScheme3": "Apex", "SSE.Views.Toolbar.txtScheme4": "Aspect", "SSE.Views.Toolbar.txtScheme5": "Civic", From d7a3891bcfd76f6a433bf40cc78c80719e0f69db Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Thu, 20 May 2021 00:41:11 +0300 Subject: [PATCH 018/376] [common] fix bug 50416 --- apps/common/main/resources/less/buttons.less | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/common/main/resources/less/buttons.less b/apps/common/main/resources/less/buttons.less index bed7c4f18..70c8fd947 100644 --- a/apps/common/main/resources/less/buttons.less +++ b/apps/common/main/resources/less/buttons.less @@ -974,6 +974,18 @@ &.disabled { opacity: @component-disabled-opacity; } + + &:not(:disabled) { + .icon { + opacity: 1; + } + + &:hover { + .icon { + .icon(); + } + } + } } // Dialog buttons From 74a6e56fa85cef95d241cfe6396d25942e440648 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Thu, 20 May 2021 00:42:00 +0300 Subject: [PATCH 019/376] [common] fix bug 50459 --- apps/common/main/resources/less/colors-table-classic.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/resources/less/colors-table-classic.less b/apps/common/main/resources/less/colors-table-classic.less index 33f7e75bc..efa5c9a63 100644 --- a/apps/common/main/resources/less/colors-table-classic.less +++ b/apps/common/main/resources/less/colors-table-classic.less @@ -47,7 +47,7 @@ --text-contrast-background: #fff; --icon-normal: #444; - --icon-normal-pressed: #fff; + --icon-normal-pressed: #444; --icon-inverse: #444; --icon-toolbar-header: fade(#fff, 80%); --icon-notification-badge: #000; From 4d30ec11e62784d3abdc17aaaf5861aca027a391 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Thu, 20 May 2021 20:02:11 +0300 Subject: [PATCH 020/376] Hint manager: add attr in button component, add getting of unique name, add directions, add applying of the disable --- apps/common/main/lib/component/Button.js | 16 ++++--- apps/common/main/lib/component/HintManager.js | 43 ++++++++++++++----- apps/common/main/lib/view/Header.js | 12 ++++-- .../main/resources/less/hint-manager.less | 6 ++- .../main/app/template/RightMenu.template | 20 ++++----- 5 files changed, 66 insertions(+), 31 deletions(-) diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index db9c97066..8f76ff772 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -245,7 +245,9 @@ define([ disabled : false, pressed : false, split : false, - visible : true + visible : true, + dataHint : '', + dataHintDirection: '' }, template: _.template([ @@ -261,13 +263,13 @@ define([ '}} %>', '<% } %>', '<% if ( !menu ) { %>', - '', '<% } else if (split == false) {%>', '
      ', - '
      ', '<% } else { %>', '
      ', - '', - '', @@ -350,7 +352,9 @@ define([ disabled : me.disabled, pressed : me.pressed, caption : me.caption, - style : me.style + style : me.style, + dataHint : me.options.dataHint, + dataHintDirection: me.options.dataHintDirection })); if (me.menu && _.isObject(me.menu) && _.isFunction(me.menu.render)) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index e4aabebda..f3cf9f169 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -81,12 +81,27 @@ Common.UI.HintManager = new(function() { !$('.toolbar-fullview-panel').is(':visible') && (arr = arr.concat(_controls[_currentLevel+1])); } else arr = _controls[_currentLevel+1]; - arr.forEach(function(item, index) { - var el = $(item); - if (el.is(':visible')) { - el.attr('data-hint-title', String.fromCharCode(65 + index)); - _currentControls.push(el); + var visibleItems = arr.filter(function (item) { + return $(item).is(':visible'); + }); + if (visibleItems.length > _arrLetters.length) { + var arrLength = _arrLetters.length; + var count = visibleItems.length - arrLength; + var arrIndexes = []; + for (var i = 0; arrIndexes.length < count; i++) { + var randInd = Math.floor(Math.random() * arrLength); //get random index + if (arrIndexes.indexOf(randInd) === -1 && randInd < arrLength - 1) { + arrIndexes.push(randInd); + _arrLetters[_arrLetters.length] = _arrLetters[randInd] + _arrLetters[randInd + 1]; + _arrLetters[randInd] = _arrLetters[randInd] + _arrLetters[randInd]; + } } + } + console.log(_arrLetters); + visibleItems.forEach(function (item, index) { + var el = $(item); + el.attr('data-hint-title', _arrLetters[index].toUpperCase()); + _currentControls.push(el); }); return _currentControls; }; @@ -95,13 +110,21 @@ Common.UI.HintManager = new(function() { _removeHints(); _getControls(); _currentControls.forEach(function(item, index) { - var offset = item.offset(); - var hint = $('
      ' + item.attr('data-hint-title') + '
      '); + var disabled = item.hasClass('disabled'); + var classes = 'hint-div' + (disabled ? ' disabled' : ''); + var hint = $('
      ' + item.attr('data-hint-title') + '
      '); var direction = item.attr('data-hint-direction'); - if (direction=='right') - hint.css({left: offset.left + item.outerWidth(), top: offset.top + (item.outerHeight()-20)/2}); + var offset = item.offset(); + if (direction === 'top') + hint.css({left: offset.left + (item.outerWidth() - 20)/2, top: offset.top - 3}); + else if (direction === 'right') + hint.css({left: offset.left + item.outerWidth() - 4, top: offset.top + (item.outerHeight()-20)/2}); + else if (direction === 'left') + hint.css({left: offset.left - 18, top: offset.top + (item.outerHeight()-20)/2}); + else if (direction === 'left-bottom') + hint.css({left: offset.left - 8, top: offset.top + item.outerHeight() - 12}); else - hint.css({left: offset.left + (item.outerWidth() - 20)/2, top: offset.top + item.outerHeight()}); + hint.css({left: offset.left + (item.outerWidth() - 20)/2, top: offset.top + item.outerHeight() - 3}); $(document.body).append(hint); _currentHints.push(hint); diff --git a/apps/common/main/lib/view/Header.js b/apps/common/main/lib/view/Header.js index 03dc7b788..87b97da0b 100644 --- a/apps/common/main/lib/view/Header.js +++ b/apps/common/main/lib/view/Header.js @@ -85,7 +85,7 @@ define([ '
      ' + // '' + '
      \ No newline at end of file From bc30f42a8d654e87cb5ec3618e4105896a1762ef Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 21 May 2021 20:07:39 +0300 Subject: [PATCH 021/376] Hint manager: make navigation for levels --- apps/common/main/lib/component/HintManager.js | 48 ++++++++----- apps/common/main/lib/component/MenuItem.js | 6 +- .../main/app/template/LeftMenu.template | 14 ++-- .../main/app/template/RightMenu.template | 20 +++--- apps/documenteditor/main/app/view/FileMenu.js | 68 ++++++++++++++----- 5 files changed, 103 insertions(+), 53 deletions(-) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index f3cf9f169..92c8112f2 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -51,36 +51,43 @@ Common.UI.HintManager = new(function() { _arrLetters = [], _isAlt = false, _hintVisible = false, - _currentLevel = -1, + _currentLevel = 0, _controls = [], _currentControls = [], - _currentHints = []; + _currentHints = [], + _inputLetters = ''; - var _showHints = function() { - _hintVisible = !_hintVisible; - if (_hintVisible) { + var _showHints = function(type) { + if (type === 'next') { + _removeHints(); _currentLevel++; _getHints(); - } else { + } else if (type === 'prev') { _removeHints(); _currentLevel--; + _getHints(); + if (_currentLevel === -1) + _hintVisible = false; + } else { + _hintVisible = !_hintVisible; + _getHints(); } }; var _getControls = function() { - if (!_controls[_currentLevel + 1]) { - _controls[_currentLevel + 1] = $('[data-hint=' + (_currentLevel + 1) + ']').toArray(); - if (_currentLevel==0 && !_controls[_currentLevel]) + if (!_controls[_currentLevel]) { + _controls[_currentLevel] = $('[data-hint=' + (_currentLevel) + ']').toArray(); + if (_currentLevel === 0 && !_controls[_currentLevel]) _controls[_currentLevel] = $('[data-hint=0]').toArray(); } _currentControls = []; var arr = []; - if (_currentLevel==0) { + if (_currentLevel === 0) { arr = arr.concat(_controls[_currentLevel]); !$('.toolbar-fullview-panel').is(':visible') && (arr = arr.concat(_controls[_currentLevel+1])); } else - arr = _controls[_currentLevel+1]; + arr = _controls[_currentLevel]; var visibleItems = arr.filter(function (item) { return $(item).is(':visible'); }); @@ -97,7 +104,7 @@ Common.UI.HintManager = new(function() { } } } - console.log(_arrLetters); + console.log(visibleItems); visibleItems.forEach(function (item, index) { var el = $(item); el.attr('data-hint-title', _arrLetters[index].toUpperCase()); @@ -122,13 +129,14 @@ Common.UI.HintManager = new(function() { else if (direction === 'left') hint.css({left: offset.left - 18, top: offset.top + (item.outerHeight()-20)/2}); else if (direction === 'left-bottom') - hint.css({left: offset.left - 8, top: offset.top + item.outerHeight() - 12}); + hint.css({left: offset.left - 8, top: offset.top - item.outerHeight()}); else hint.css({left: offset.left + (item.outerWidth() - 20)/2, top: offset.top + item.outerHeight() - 3}); $(document.body).append(hint); _currentHints.push(hint); }); + console.log(_currentHints); }; var _removeHints = function() { @@ -145,32 +153,38 @@ Common.UI.HintManager = new(function() { $(document).on('keyup', function(e) { if (e.keyCode == Common.UI.Keys.ALT &&_isAlt) { e.preventDefault(); - _showHints(); + _showHints('current'); } _isAlt = false; }); $(document).on('keydown', function(e) { if (_hintVisible) { if (e.keyCode == Common.UI.Keys.ESC ) { - _showHints(); + _showHints('prev'); } else if ((e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 64 && e.keyCode < 91) && e.key) { var curr; + _inputLetters = _inputLetters + String.fromCharCode(e.keyCode).toUpperCase(); for (var i = 0; i < _currentControls.length; i++) { var item = _currentControls[i]; - if (item.attr('data-hint-title').charCodeAt(0) == e.keyCode) { // for latin chars + if (item.attr('data-hint-title') === _inputLetters) { curr = item; break; } } if (curr) { - _showHints(); + console.log(curr); curr && curr.trigger(jQuery.Event('click', {which: 1})); + _showHints('next'); } } e.preventDefault(); } _isAlt = (e.keyCode == Common.UI.Keys.ALT); + if (_isAlt) { + _inputLetters = ''; + } + console.log(_currentLevel); }); }; diff --git a/apps/common/main/lib/component/MenuItem.js b/apps/common/main/lib/component/MenuItem.js index ab04de056..9c2617f70 100644 --- a/apps/common/main/lib/component/MenuItem.js +++ b/apps/common/main/lib/component/MenuItem.js @@ -102,13 +102,15 @@ define([ toggleGroup : null, iconCls : '', menu : null, - canFocused : true + canFocused : true, + dataHint : '', + dataHintDirection: '' }, tagName : 'li', template: _.template([ - ' tabindex="-1" type="menuitem" <% }; if(!_.isUndefined(options.stopPropagation)) { %> data-stopPropagation="true" <% }; %> >', + ' tabindex="-1" type="menuitem" <% }; if(!_.isUndefined(options.stopPropagation)) { %> data-stopPropagation="true" <% }; if(!_.isUndefined(options.dataHint)) { %> data-hint="<%= options.dataHint %>" <% }; if(!_.isUndefined(options.dataHintDirection)) { %> data-hint-direction="<%= options.dataHintDirection %>" <% }; %> >', '<% if (!_.isEmpty(iconCls)) { %>', '', '<% } %>', diff --git a/apps/documenteditor/main/app/template/LeftMenu.template b/apps/documenteditor/main/app/template/LeftMenu.template index 18e31b081..322e64dc8 100644 --- a/apps/documenteditor/main/app/template/LeftMenu.template +++ b/apps/documenteditor/main/app/template/LeftMenu.template @@ -1,14 +1,14 @@
      - + - - + + - - - - + + + +
      diff --git a/apps/documenteditor/main/app/template/RightMenu.template b/apps/documenteditor/main/app/template/RightMenu.template index 1089ab517..8add4429c 100644 --- a/apps/documenteditor/main/app/template/RightMenu.template +++ b/apps/documenteditor/main/app/template/RightMenu.template @@ -23,15 +23,15 @@
      - - - - - - - - - - + + + + + + + + + +
      \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index ffdd1b0fa..9b0448988 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -88,7 +88,9 @@ define([ el : $markup.elementById('#fm-btn-save'), action : 'save', caption : this.btnSaveCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); if ( !!this.options.miSave ) { @@ -100,42 +102,54 @@ define([ el : $markup.elementById('#fm-btn-edit'), action : 'edit', caption : this.btnToEditCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miDownload = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-download'), action : 'saveas', caption : this.btnDownloadCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miSaveCopyAs = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-save-copy'), action : 'save-copy', caption : this.btnSaveCopyAsCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miSaveAs = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-save-desktop'), action : 'save-desktop', caption : this.btnSaveAsCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miPrint = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-print'), action : 'print', caption : this.btnPrintCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miRename = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-rename'), action : 'rename', caption : this.btnRenameCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); if ( !!this.options.miRename ) { @@ -147,7 +161,9 @@ define([ el : $markup.elementById('#fm-btn-protect'), action : 'protect', caption : this.btnProtectCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); if ( !!this.options.miProtect ) { @@ -159,35 +175,45 @@ define([ el : $markup.elementById('#fm-btn-recent'), action : 'recent', caption : this.btnRecentFilesCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miNew = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-create'), action : 'new', caption : this.btnCreateNewCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miAccess = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-rights'), action : 'rights', caption : this.btnRightsCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miHistory = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-history'), action : 'history', caption : this.btnHistoryCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.miHelp = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-help'), action : 'help', caption : this.btnHelpCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }); this.items = []; @@ -196,7 +222,9 @@ define([ el : $markup.elementById('#fm-btn-return'), action : 'back', caption : this.btnCloseMenuCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }), this.miSave, this.miEdit, @@ -212,7 +240,9 @@ define([ el : $markup.elementById('#fm-btn-info'), action : 'info', caption : this.btnInfoCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }), this.miAccess, this.miHistory, @@ -220,7 +250,9 @@ define([ el : $markup.elementById('#fm-btn-settings'), action : 'opts', caption : this.btnSettingsCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }), this.miHelp, new Common.UI.MenuItem({ @@ -228,7 +260,9 @@ define([ // el : _get_el('fm-btn-back'), action : 'exit', caption : this.btnBackCaption, - canFocused: false + canFocused: false, + dataHint: 1, + dataHintDirection: 'right' }) ); From 67097751dba289fe284f1b448ec5600b6a615aec Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Sun, 23 May 2021 20:04:26 +0300 Subject: [PATCH 022/376] [themes] fix method to set themes available --- apps/common/main/lib/controller/Themes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index 9d72414a0..9647aa379 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -230,7 +230,7 @@ define([ }, setAvailable: function (value) { - this.locked = value; + this.locked = !value; }, map: function () { From 442d440c198d184581c6bc7d1ed55a67b7bd4190 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Mon, 24 May 2021 15:39:26 +0300 Subject: [PATCH 023/376] [deploy] extended 'clean' options --- build/Gruntfile.js | 4 ++-- build/documenteditor.json | 9 ++++++--- build/presentationeditor.json | 9 ++++++--- build/spreadsheeteditor.json | 9 ++++++--- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/build/Gruntfile.js b/build/Gruntfile.js index 28d2101fa..076235c88 100644 --- a/build/Gruntfile.js +++ b/build/Gruntfile.js @@ -275,10 +275,10 @@ module.exports = function(grunt) { force: true }, prebuild: { - src: packageFile['main']['clean'] + src: packageFile.main.clean.prebuild }, postbuild: { - src: packageFile.main.svgicons.clean + src: [...packageFile.main.svgicons.clean, ...packageFile.main.clean.postbuild] } }, diff --git a/build/documenteditor.json b/build/documenteditor.json index 14aa4b7f2..a0f0628d5 100644 --- a/build/documenteditor.json +++ b/build/documenteditor.json @@ -5,9 +5,12 @@ "homepage": "http://www.onlyoffice.com", "private": true, "main": { - "clean": [ - "../deploy/web-apps/apps/documenteditor/main" - ], + "clean": { + "prebuild": [ + "../deploy/web-apps/apps/documenteditor/main" + ], + "postbuild": [] + }, "js": { "requirejs": { "options": { diff --git a/build/presentationeditor.json b/build/presentationeditor.json index 0e32e998e..58136ede8 100644 --- a/build/presentationeditor.json +++ b/build/presentationeditor.json @@ -5,9 +5,12 @@ "homepage": "http://www.onlyoffice.com", "private": true, "main": { - "clean": [ - "../deploy/web-apps/apps/presentationeditor/main" - ], + "clean": { + "prebuild": [ + "../deploy/web-apps/apps/presentationeditor/main" + ], + "postbuild": [] + }, "js": { "requirejs": { "options": { diff --git a/build/spreadsheeteditor.json b/build/spreadsheeteditor.json index f9b453427..4b8470306 100644 --- a/build/spreadsheeteditor.json +++ b/build/spreadsheeteditor.json @@ -5,9 +5,12 @@ "homepage": "http://www.onlyoffice.com", "private": true, "main": { - "clean": [ - "../deploy/web-apps/apps/spreadsheeteditor/main" - ], + "clean": { + "prebuild": [ + "../deploy/web-apps/apps/spreadsheeteditor/main" + ], + "postbuild": [] + }, "js": { "requirejs": { "options": { From d14cc1e94f0716aa580f228e81f64fa82d5cd5c1 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Mon, 24 May 2021 19:17:24 +0300 Subject: [PATCH 024/376] [themes] fix bug 50556 --- apps/common/main/lib/controller/Themes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index 3bed91e66..d6c33c59d 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -206,7 +206,7 @@ define([ $(window).on('storage', function (e) { if ( e.key == 'ui-theme' ) { - me.setTheme(e.originalEvent.newValue); + me.setTheme(e.originalEvent.newValue, true); } }) From 9f5a6f1f6e65251776ff3aa97a9c0e85cdf91837 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Tue, 25 May 2021 11:07:13 +0300 Subject: [PATCH 025/376] Hint manager: make navigation --- apps/common/main/lib/component/HintManager.js | 134 +++++++++++------- apps/documenteditor/main/app/view/Toolbar.js | 64 ++++++--- 2 files changed, 127 insertions(+), 71 deletions(-) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index 92c8112f2..aade42311 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -57,37 +57,47 @@ Common.UI.HintManager = new(function() { _currentHints = [], _inputLetters = ''; - var _showHints = function(type) { - if (type === 'next') { - _removeHints(); - _currentLevel++; + var _showHints = function () { + _inputLetters = ''; + if (_currentHints.length === 0) _getHints(); - } else if (type === 'prev') { - _removeHints(); - _currentLevel--; - _getHints(); - if (_currentLevel === -1) - _hintVisible = false; - } else { - _hintVisible = !_hintVisible; - _getHints(); - } + if (_currentHints.length > 0) { + _hintVisible = true; + _currentHints.forEach(function(item) { + item.show() + }); + } else + _hintVisible = false; + }; + + var _hideHints = function() { + _hintVisible = false; + _currentHints && _currentHints.forEach(function(item) { + item.hide() + }); + }; + + var _nextLevel = function() { + _removeHints(); + _currentHints.length = 0; + _currentControls.length = 0; + _currentLevel++; + }; + + var _prevLevel = function() { + _removeHints(); + _currentHints.length = 0; + _currentControls.length = 0; + _currentLevel--; }; var _getControls = function() { - if (!_controls[_currentLevel]) { + /*if (!_controls[_currentLevel]) { _controls[_currentLevel] = $('[data-hint=' + (_currentLevel) + ']').toArray(); - if (_currentLevel === 0 && !_controls[_currentLevel]) - _controls[_currentLevel] = $('[data-hint=0]').toArray(); - } - + }*/ + _controls[_currentLevel] = $('[data-hint=' + (_currentLevel) + ']').toArray(); _currentControls = []; - var arr = []; - if (_currentLevel === 0) { - arr = arr.concat(_controls[_currentLevel]); - !$('.toolbar-fullview-panel').is(':visible') && (arr = arr.concat(_controls[_currentLevel+1])); - } else - arr = _controls[_currentLevel]; + var arr = _controls[_currentLevel]; var visibleItems = arr.filter(function (item) { return $(item).is(':visible'); }); @@ -104,7 +114,6 @@ Common.UI.HintManager = new(function() { } } } - console.log(visibleItems); visibleItems.forEach(function (item, index) { var el = $(item); el.attr('data-hint-title', _arrLetters[index].toUpperCase()); @@ -114,29 +123,34 @@ Common.UI.HintManager = new(function() { }; var _getHints = function() { - _removeHints(); - _getControls(); + if (_currentControls.length === 0) + _getControls(); _currentControls.forEach(function(item, index) { - var disabled = item.hasClass('disabled'); - var classes = 'hint-div' + (disabled ? ' disabled' : ''); - var hint = $('
      ' + item.attr('data-hint-title') + '
      '); - var direction = item.attr('data-hint-direction'); - var offset = item.offset(); - if (direction === 'top') - hint.css({left: offset.left + (item.outerWidth() - 20)/2, top: offset.top - 3}); - else if (direction === 'right') - hint.css({left: offset.left + item.outerWidth() - 4, top: offset.top + (item.outerHeight()-20)/2}); - else if (direction === 'left') - hint.css({left: offset.left - 18, top: offset.top + (item.outerHeight()-20)/2}); - else if (direction === 'left-bottom') - hint.css({left: offset.left - 8, top: offset.top - item.outerHeight()}); - else - hint.css({left: offset.left + (item.outerWidth() - 20)/2, top: offset.top + item.outerHeight() - 3}); - $(document.body).append(hint); + if (!item.hasClass('disabled')) { + var hint = $('
      ' + item.attr('data-hint-title') + '
      '); + var direction = item.attr('data-hint-direction'); + var offset = item.offset(); + if (direction === 'top') + hint.css({left: offset.left + (item.outerWidth() - 20) / 2, top: offset.top - 16}); + else if (direction === 'right') + hint.css({ + left: offset.left + item.outerWidth() - 4, + top: offset.top + (item.outerHeight() - 20) / 2 + }); + else if (direction === 'left') + hint.css({left: offset.left - 18, top: offset.top + (item.outerHeight() - 20) / 2}); + else if (direction === 'left-bottom') + hint.css({left: offset.left - 8, top: offset.top - item.outerHeight()}); + else + hint.css({ + left: offset.left + (item.outerWidth() - 20) / 2, + top: offset.top + item.outerHeight() - 3 + }); + $(document.body).append(hint); - _currentHints.push(hint); + _currentHints.push(hint); + } }); - console.log(_currentHints); }; var _removeHints = function() { @@ -151,16 +165,30 @@ Common.UI.HintManager = new(function() { _getAlphabetLetters(); }.bind(this)); $(document).on('keyup', function(e) { - if (e.keyCode == Common.UI.Keys.ALT &&_isAlt) { + if (e.keyCode == Common.UI.Keys.ALT && _isAlt) { e.preventDefault(); - _showHints('current'); + if (!_hintVisible) { + if ($('.toolbar-fullview-panel').is(':visible') && _currentLevel === 0) { + _nextLevel(); + } else { + _currentLevel = 0; + } + _showHints(); + } else { + _hideHints(); + } } _isAlt = false; }); $(document).on('keydown', function(e) { if (_hintVisible) { if (e.keyCode == Common.UI.Keys.ESC ) { - _showHints('prev'); + if (_currentLevel === 0) { + _hideHints(); + } else { + _prevLevel(); + _showHints(); + } } else if ((e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 64 && e.keyCode < 91) && e.key) { var curr; _inputLetters = _inputLetters + String.fromCharCode(e.keyCode).toUpperCase(); @@ -172,19 +200,15 @@ Common.UI.HintManager = new(function() { } } if (curr) { - console.log(curr); curr && curr.trigger(jQuery.Event('click', {which: 1})); - _showHints('next'); + _nextLevel(); + _showHints(); } } e.preventDefault(); } _isAlt = (e.keyCode == Common.UI.Keys.ALT); - if (_isAlt) { - _inputLetters = ''; - } - console.log(_currentLevel); }); }; diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 6790eb9eb..a835bc8e6 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -186,7 +186,9 @@ define([ id: 'id-toolbar-btn-bold', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-bold', - enableToggle: true + enableToggle: true, + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnBold); @@ -194,7 +196,9 @@ define([ id: 'id-toolbar-btn-italic', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-italic', - enableToggle: true + enableToggle: true, + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnItalic); @@ -202,7 +206,9 @@ define([ id: 'id-toolbar-btn-underline', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-underline', - enableToggle: true + enableToggle: true, + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnUnderline); @@ -210,7 +216,9 @@ define([ id: 'id-toolbar-btn-strikeout', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-strikeout', - enableToggle: true + enableToggle: true, + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnStrikeout); @@ -219,7 +227,9 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-superscript', enableToggle: true, - toggleGroup: 'superscriptGroup' + toggleGroup: 'superscriptGroup', + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnSuperscript); @@ -228,7 +238,9 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-subscript', enableToggle: true, - toggleGroup: 'superscriptGroup' + toggleGroup: 'superscriptGroup', + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnSubscript); @@ -312,7 +324,9 @@ define([ iconCls: 'toolbar__icon btn-align-left', enableToggle: true, allowDepress: false, - toggleGroup: 'alignGroup' + toggleGroup: 'alignGroup', + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnAlignLeft); @@ -322,7 +336,9 @@ define([ iconCls: 'toolbar__icon btn-align-center', enableToggle: true, allowDepress: false, - toggleGroup: 'alignGroup' + toggleGroup: 'alignGroup', + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnAlignCenter); @@ -332,7 +348,9 @@ define([ iconCls: 'toolbar__icon btn-align-right', enableToggle: true, allowDepress: false, - toggleGroup: 'alignGroup' + toggleGroup: 'alignGroup', + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnAlignRight); @@ -342,7 +360,9 @@ define([ iconCls: 'toolbar__icon btn-align-just', enableToggle: true, allowDepress: false, - toggleGroup: 'alignGroup' + toggleGroup: 'alignGroup', + dataHint: '1', + dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnAlignJust); @@ -350,14 +370,18 @@ define([ this.btnDecLeftOffset = new Common.UI.Button({ id: 'id-toolbar-btn-decoffset', cls: 'btn-toolbar', - iconCls: 'toolbar__icon btn-decoffset' + iconCls: 'toolbar__icon btn-decoffset', + dataHint: '1', + dataHintDirection: 'top' }); this.paragraphControls.push(this.btnDecLeftOffset); this.btnIncLeftOffset = new Common.UI.Button({ id: 'id-toolbar-btn-incoffset', cls: 'btn-toolbar', - iconCls: 'toolbar__icon btn-incoffset' + iconCls: 'toolbar__icon btn-incoffset', + dataHint: '1', + dataHintDirection: 'top' }); this.paragraphControls.push(this.btnIncLeftOffset); @@ -375,7 +399,9 @@ define([ {caption: '2.5', value: 2.5, checkable: true, toggleGroup: 'linesize'}, {caption: '3.0', value: 3.0, checkable: true, toggleGroup: 'linesize'} ] - }) + }), + dataHint: '1', + dataHintDirection: 'top' }); this.paragraphControls.push(this.btnLineSpace); @@ -402,7 +428,9 @@ define([ enableToggle: true, toggleGroup: 'markersGroup', split: true, - menu: true + menu: true, + dataHint: '1', + dataHintDirection: 'top' }); this.paragraphControls.push(this.btnMarkers); this.textOnlyControls.push(this.btnMarkers); @@ -414,7 +442,9 @@ define([ enableToggle: true, toggleGroup: 'markersGroup', split: true, - menu: true + menu: true, + dataHint: '1', + dataHintDirection: 'top' }); this.paragraphControls.push(this.btnNumbers); this.textOnlyControls.push(this.btnNumbers); @@ -423,7 +453,9 @@ define([ id: 'id-toolbar-btn-multilevels', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-multilevels', - menu: true + menu: true, + dataHint: '1', + dataHintDirection: 'top' }); this.paragraphControls.push(this.btnMultilevels); this.textOnlyControls.push(this.btnMultilevels); From 4749a5ea15fbeda4d95ef0ddb6a74fadfe0aa513 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Tue, 25 May 2021 17:16:00 +0300 Subject: [PATCH 026/376] [themes] refactoring --- apps/common/main/lib/controller/Themes.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index d6c33c59d..8a246b989 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -219,6 +219,10 @@ define([ $('body').addClass(theme_name); } + if ( !document.body.className.match(/theme-type-/) ) { + document.body.classList.add('theme-type-' + themes_map[theme_name].type); + } + var obj = get_current_theme_colors(name_colors); obj.type = themes_map[theme_name].type; obj.name = theme_name; @@ -261,10 +265,8 @@ define([ setTheme: function (id, force) { if ( (this.currentThemeId() != id || force) && !!themes_map[id] ) { - var classname = document.body.className.replace(/theme-[\w-]+\s?/, ''); - document.body.className = classname; - - $('body').addClass(id); + document.body.className = document.body.className.replace(/theme-[\w-]+\s?/gi, '').trim(); + document.body.classList.add(id, 'theme-type-' + themes_map[id].type); var obj = get_current_theme_colors(name_colors); obj.type = themes_map[id].type; From 7b3fc3406aa5d7e4bfbd3487f5cc846a8ec60870 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 26 May 2021 14:32:39 +0300 Subject: [PATCH 027/376] [PE] Fix Bug 50578 --- apps/presentationeditor/main/app/template/Toolbar.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/presentationeditor/main/app/template/Toolbar.template b/apps/presentationeditor/main/app/template/Toolbar.template index f967bcac2..e467ca86c 100644 --- a/apps/presentationeditor/main/app/template/Toolbar.template +++ b/apps/presentationeditor/main/app/template/Toolbar.template @@ -101,7 +101,7 @@
      -
      +
      From 88f32b91f6e65237bfaca3e05883f8531a910116 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Wed, 26 May 2021 18:30:18 +0300 Subject: [PATCH 028/376] Hint Manager: change letter getting, add offsets, add hints for toolbar --- apps/common/main/lib/component/Button.js | 20 ++- apps/common/main/lib/component/ComboBox.js | 10 +- .../main/lib/component/ComboBoxFonts.js | 2 +- .../main/lib/component/ComboDataView.js | 8 +- apps/common/main/lib/component/HintManager.js | 66 +++++--- apps/common/main/lib/util/utils.js | 6 +- apps/common/main/lib/view/Header.js | 3 +- apps/common/main/lib/view/Plugins.js | 8 +- apps/common/main/lib/view/ReviewChanges.js | 44 +++-- .../main/app/controller/Toolbar.js | 2 +- apps/documenteditor/main/app/view/Links.js | 30 +++- apps/documenteditor/main/app/view/Toolbar.js | 160 +++++++++++++----- 12 files changed, 255 insertions(+), 104 deletions(-) diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index 8f76ff772..400d5554f 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -194,7 +194,7 @@ define([ '<% } %>'; var templateHugeCaption = - '' + - '', '<% } else if (split == false) {%>', '
      ', - '
      ', '<% } else { %>', '
      ', - '', - '', @@ -354,7 +355,8 @@ define([ caption : me.caption, style : me.style, dataHint : me.options.dataHint, - dataHintDirection: me.options.dataHintDirection + dataHintDirection: me.options.dataHintDirection, + dataHintOffset: me.options.dataHintOffset })); if (me.menu && _.isObject(me.menu) && _.isFunction(me.menu.render)) diff --git a/apps/common/main/lib/component/ComboBox.js b/apps/common/main/lib/component/ComboBox.js index 121f4570c..cd5a614ff 100644 --- a/apps/common/main/lib/component/ComboBox.js +++ b/apps/common/main/lib/component/ComboBox.js @@ -87,13 +87,15 @@ define([ valueField : 'value', search : false, scrollAlwaysVisible: false, - takeFocusOnClose: false + takeFocusOnClose: false, + dataHint: '', + dataHintDirection: '' }, template: _.template([ '', '', - '', '
    Шрифт
    Изменить регистр Change caseИспользуется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста.Используется для изменения регистра шрифта. Как в предложениях. - регистр совпадает с обычным предложением. нижнеий регистр - все буквы маленькие. ВЕРХНИЙ РЕГИСТР - все буквы прописные. Каждое Слово С Прописной - каждое слово начинается с заглавной буквы. иЗМЕНИТЬ рЕГИСТР - поменять регистр выделенного текста или слова, в котором находится курсор мыши.
    Цвет выделения
    ', '', '' + - '', + '', '', - '', + '', '
    ', '' ].join(''); this.templateCertificate = _.template([ - '', + '', '' ].join('')); From b03132d69e9f98187fd2e77b56aaab449bfdded5 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 26 May 2021 19:29:41 +0300 Subject: [PATCH 030/376] Fix Bug 50498 --- apps/common/main/lib/component/SynchronizeTip.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/common/main/lib/component/SynchronizeTip.js b/apps/common/main/lib/component/SynchronizeTip.js index b048d94e3..139c00ae0 100644 --- a/apps/common/main/lib/component/SynchronizeTip.js +++ b/apps/common/main/lib/component/SynchronizeTip.js @@ -128,6 +128,9 @@ define([ bottom = Common.Utils.innerHeight() - showxy.top - this.target.height()/2; } else if (pos == 'bottom') { top = showxy.top + this.target.height()/2; + var height = this.cmpEl.height(); + if (top+height>Common.Utils.innerHeight()) + top = Common.Utils.innerHeight() - height - 10; } else if (pos == 'left') { right = Common.Utils.innerWidth() - showxy.left - this.target.width()/2; } else if (pos == 'right') { From 9743b0bd6d9e4318ef9141573d9c1c54fcba31d9 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 27 May 2021 11:21:30 +0300 Subject: [PATCH 031/376] [SSE] Fix formula wizard --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 63dfe88be..5d22d2e4e 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -241,8 +241,10 @@ define([ fillArgs: function (types, argval, argres) { var argcount = this.args.length; - for (var j=0; j Date: Thu, 27 May 2021 19:30:48 +0300 Subject: [PATCH 032/376] Hint Manager: add hint for file menu, add hint parameters into checkbox, inputfield --- apps/common/main/lib/component/CheckBox.js | 7 +- apps/common/main/lib/component/HintManager.js | 22 +++-- apps/common/main/lib/component/InputField.js | 6 ++ apps/common/main/lib/view/Protection.js | 16 +++- .../main/app/controller/LeftMenu.js | 3 +- .../main/app/view/FileMenuPanels.js | 90 +++++++++++++------ 6 files changed, 106 insertions(+), 38 deletions(-) diff --git a/apps/common/main/lib/component/CheckBox.js b/apps/common/main/lib/component/CheckBox.js index f25578afc..67382862b 100644 --- a/apps/common/main/lib/component/CheckBox.js +++ b/apps/common/main/lib/component/CheckBox.js @@ -94,7 +94,7 @@ define([ checked : false, value : 'unchecked', - template : _.template('
    -
    +
    diff --git a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js index 028a671b9..36cb6ad8d 100644 --- a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js +++ b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js @@ -273,7 +273,7 @@ define([ parentEl: $('#id-dlg-h-presets'), cls: 'btn-text-menu-default', caption: this.textPresets, - style: 'width: 110px;', + style: 'width: 115px;', menu: true }); @@ -281,7 +281,7 @@ define([ parentEl: $('#id-dlg-f-presets'), cls: 'btn-text-menu-default', caption: this.textPresets, - style: 'width: 110px;', + style: 'width: 115px;', menu: true }); @@ -298,9 +298,9 @@ define([ parentEl: $('#id-dlg-h-insert'), cls: 'btn-text-menu-default', caption: this.textInsert, - style: 'width: 110px;', + style: 'width: 115px;', menu: new Common.UI.Menu({ - style: 'min-width: 110px;', + style: 'min-width: 115px;', maxHeight: 200, additionalAlign: this.menuAddAlign, items: data @@ -313,9 +313,9 @@ define([ parentEl: $('#id-dlg-f-insert'), cls: 'btn-text-menu-default', caption: this.textInsert, - style: 'width: 110px;', + style: 'width: 115px;', menu: new Common.UI.Menu({ - style: 'min-width: 110px;', + style: 'min-width: 115px;', maxHeight: 200, additionalAlign: this.menuAddAlign, items: data @@ -376,9 +376,9 @@ define([ this.cmbFontSize.push(new Common.UI.ComboBox({ el: $('#id-dlg-h-font-size'), cls: 'input-group-nr', - style: 'width: 55px;', + style: 'width: 45px;', menuCls : 'scrollable-menu', - menuStyle: 'min-width: 55px;max-height: 270px;', + menuStyle: 'min-width: 45px;max-height: 270px;', hint: this.tipFontSize, data: data })); @@ -392,9 +392,9 @@ define([ this.cmbFontSize.push(new Common.UI.ComboBox({ el: $('#id-dlg-f-font-size'), cls: 'input-group-nr', - style: 'width: 55px;', + style: 'width: 45px;', menuCls : 'scrollable-menu', - menuStyle: 'min-width: 55px;max-height: 270px;', + menuStyle: 'min-width: 45px;max-height: 270px;', hint: this.tipFontSize, data: data })); @@ -662,14 +662,14 @@ define([ }); this.btnPresetsH.setMenu(new Common.UI.Menu({ - style: 'min-width: 110px;', + style: 'min-width: 115px;', maxHeight: 200, additionalAlign: this.menuAddAlign, items: presets })); this.btnPresetsH.menu.on('item:click', _.bind(this.onPresetSelect, this, false)); this.btnPresetsF.setMenu(new Common.UI.Menu({ - style: 'min-width: 110px;', + style: 'min-width: 115px;', maxHeight: 200, additionalAlign: this.menuAddAlign, items: presets From a09aaaf883c1c54b7ad0cae3dc0213decdadf7a8 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Wed, 23 Jun 2021 14:50:39 +0300 Subject: [PATCH 136/376] [DE PE SSE mobile] Fix Bug 50794 --- apps/documenteditor/mobile/locale/en.json | 1 + .../mobile/src/controller/Main.jsx | 3 ++- .../mobile/src/controller/settings/Download.jsx | 15 +++++++++++++-- apps/presentationeditor/mobile/locale/en.json | 1 + .../mobile/src/controller/Main.jsx | 17 ++++++++++++++++- apps/spreadsheeteditor/mobile/locale/en.json | 3 ++- .../mobile/src/controller/Main.jsx | 3 ++- .../mobile/src/controller/settings/Download.jsx | 12 +++++++++++- 8 files changed, 48 insertions(+), 7 deletions(-) diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index 441904234..ee1e7ff8d 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -330,6 +330,7 @@ "advDRMOptions": "Protected File", "txtProtected": "Once you enter the password and open the file, the current password to the file will be reset", "textOpenFile": "Enter a password to open the file", + "txtIncorrectPwd": "Password is incorrect", "textNoTextFound": "Text not found", "textReplace": "Replace", "textReplaceAll": "Replace All", diff --git a/apps/documenteditor/mobile/src/controller/Main.jsx b/apps/documenteditor/mobile/src/controller/Main.jsx index b30a0f26b..4bf67dcf4 100644 --- a/apps/documenteditor/mobile/src/controller/Main.jsx +++ b/apps/documenteditor/mobile/src/controller/Main.jsx @@ -611,7 +611,8 @@ class MainController extends Component { this.api.asc_registerCallback('asc_onAdvancedOptions', (type, advOptions, mode, formatOptions) => { const {t} = this.props; const _t = t("Settings", { returnObjects: true }); - onAdvancedOptions(type, advOptions, mode, formatOptions, _t, this._isDocReady, this.props.storeAppOptions.canRequestClose); + onAdvancedOptions(type, advOptions, mode, formatOptions, _t, this._isDocReady, this.props.storeAppOptions.canRequestClose, this.isDRM); + if(type == Asc.c_oAscAdvancedOptionsID.DRM) this.isDRM = true; }); } diff --git a/apps/documenteditor/mobile/src/controller/settings/Download.jsx b/apps/documenteditor/mobile/src/controller/settings/Download.jsx index aa5982539..a0d54ab35 100644 --- a/apps/documenteditor/mobile/src/controller/settings/Download.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/Download.jsx @@ -32,7 +32,7 @@ class DownloadController extends Component { () => { if (format == Asc.c_oAscFileType.TXT) { const isDocReady = this.props.storeAppOptions.isDocReady; - onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.TXT, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t, isDocReady); + onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.TXT, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t, isDocReady, isDRM); } else { api.asc_DownloadAs(new Asc.asc_CDownloadOptions(format)); @@ -57,7 +57,7 @@ class DownloadController extends Component { const DownloadWithTranslation = inject("storeAppOptions")(observer(withTranslation()(DownloadController))); -const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady, canRequestClose) => { +const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady, canRequestClose, isDRM) => { if ($$('.dlg-adv-options.modal-in').length > 0) return; const api = Common.EditorApi.get(); @@ -134,6 +134,17 @@ const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady } } }]; + + if(isDRM) { + f7.dialog.create({ + text: _t.txtIncorrectPwd, + buttons : [{ + text: 'OK', + bold: true, + }] + }).open(); + } + if (canRequestClose) buttons.push({ text: _t.closeButtonText, diff --git a/apps/presentationeditor/mobile/locale/en.json b/apps/presentationeditor/mobile/locale/en.json index c7de2720b..5546b0303 100644 --- a/apps/presentationeditor/mobile/locale/en.json +++ b/apps/presentationeditor/mobile/locale/en.json @@ -29,6 +29,7 @@ "advDRMPassword": "Password", "txtProtected": "Once you enter the password and open the file, the current password to the file will be reset", "textOpenFile": "Enter a password to open the file", + "txtIncorrectPwd": "Password is incorrect", "leavePageText": "You have unsaved changes in this document. Click 'Stay on this Page' to await the autosave of the document. Click 'Leave this Page' to discard all the unsaved changes.", "titleLicenseExp": "License expired", "warnLicenseExp": "Your license has expired. Please update your license and refresh the page.", diff --git a/apps/presentationeditor/mobile/src/controller/Main.jsx b/apps/presentationeditor/mobile/src/controller/Main.jsx index 6210b4bf6..720a35539 100644 --- a/apps/presentationeditor/mobile/src/controller/Main.jsx +++ b/apps/presentationeditor/mobile/src/controller/Main.jsx @@ -300,7 +300,6 @@ class MainController extends Component { this.api.asc_registerCallback('asc_onDocumentContentReady', this.onDocumentContentReady.bind(this)); this.api.asc_registerCallback('asc_onDocumentUpdateVersion', this.onUpdateVersion.bind(this)); this.api.asc_registerCallback('asc_onServerVersion', this.onServerVersion.bind(this)); - this.api.asc_registerCallback('asc_onAdvancedOptions', this.onAdvancedOptions.bind(this)); this.api.asc_registerCallback('asc_onDocumentName', this.onDocumentName.bind(this)); this.api.asc_registerCallback('asc_onPrintUrl', this.onPrintUrl.bind(this)); this.api.asc_registerCallback('asc_onPrint', this.onPrint.bind(this)); @@ -310,6 +309,10 @@ class MainController extends Component { const storePresentationSettings = this.props.storePresentationSettings; + this.api.asc_registerCallback('asc_onAdvancedOptions', (type, advOptions) => { + this.onAdvancedOptions(type, advOptions); + }); + this.api.asc_registerCallback('asc_onPresentationSize', (width, height) => { storePresentationSettings.changeSizeIndex(width, height); }); @@ -604,6 +607,17 @@ class MainController extends Component { } } }]; + + if(this.isDRM) { + f7.dialog.create({ + text: _t.txtIncorrectPwd, + buttons : [{ + text: 'OK', + bold: true, + }] + }).open(); + } + if (this.props.storeAppOptions.canRequestClose) buttons.push({ text: _t.closeButtonText, @@ -620,6 +634,7 @@ class MainController extends Component { buttons: buttons, cssClass: 'dlg-adv-options' }).open(); + this.isDRM = true; } } diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index 8c9a6f6b0..7921455e0 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -164,7 +164,7 @@ "errorFrmlMaxTextLength": "Text values in formulas are limited to 255 characters.
    Use the CONCATENATE function or concatenation operator (&)", "errorFrmlMaxLength": "You cannot add this formula as its length exceeded the allowed number of characters.
    Please edit it and try again.", "errorFrmlMaxReference": "You cannot enter this formula because it has too many values,
    cell references, and/or names.", - "errorDataValidate":"The value you entered is not valid.
    A user has restricted values that can be entered into this cell.", + "errorDataValidate": "The value you entered is not valid.
    A user has restricted values that can be entered into this cell.", "errorLockedCellPivot": "You cannot change data inside a pivot table." }, "ContextMenu": { @@ -460,6 +460,7 @@ "closeButtonText": "Close File", "txtProtected": "Once you enter the password and open the file, the current password to the file will be reset", "textOpenFile": "Enter a password to open the file", + "txtIncorrectPwd": "Password is incorrect", "textCancel": "Cancel", "textUnitOfMeasurement": "Unit Of Measurement", "textCentimeter": "Centimeter", diff --git a/apps/spreadsheeteditor/mobile/src/controller/Main.jsx b/apps/spreadsheeteditor/mobile/src/controller/Main.jsx index f23dd952d..a021ed9e2 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/Main.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/Main.jsx @@ -323,7 +323,8 @@ class MainController extends Component { this.api.asc_registerCallback('asc_onAdvancedOptions', (type, advOptions, mode, formatOptions) => { const {t} = this.props; const _t = t("View.Settings", { returnObjects: true }); - onAdvancedOptions(type, advOptions, mode, formatOptions, _t, this._isDocReady, this.props.storeAppOptions.canRequestClose); + onAdvancedOptions(type, advOptions, mode, formatOptions, _t, this._isDocReady, this.props.storeAppOptions.canRequestClose,this.isDRM); + if(type == Asc.c_oAscAdvancedOptionsID.DRM) this.isDRM = true; }); } diff --git a/apps/spreadsheeteditor/mobile/src/controller/settings/Download.jsx b/apps/spreadsheeteditor/mobile/src/controller/settings/Download.jsx index 320a6e650..24dc66428 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/settings/Download.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/settings/Download.jsx @@ -39,7 +39,7 @@ class DownloadController extends Component { const DownloadWithTranslation = withTranslation()(DownloadController); -const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady, canRequestClose) => { +const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady, canRequestClose, isDRM) => { const api = Common.EditorApi.get(); if (type == Asc.c_oAscAdvancedOptionsID.CSV) { @@ -136,6 +136,16 @@ const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady } }]; + if(isDRM) { + f7.dialog.create({ + text: _t.txtIncorrectPwd, + buttons : [{ + text: 'OK', + bold: true, + }] + }).open(); + } + if (canRequestClose) buttons.push({ text: _t.closeButtonText, From 79929eff054f37a92311cda713c2f23b20b2148d Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 23 Jun 2021 14:59:21 +0300 Subject: [PATCH 137/376] [SSE] Fix description for formulas (#939) --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 5d22d2e4e..1e161d8e4 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -407,7 +407,7 @@ define([ me.helpUrl = url; me.showHelp(); } else { - lang = 'en'; + lang = '{{DEFAULT_LANG}}'; url = 'resources/help/' + lang + name; fetch(url).then(function(response){ if ( response.ok ) { From b7d5babce10a08ba737d645ffcd916380b1caf9a Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Wed, 23 Jun 2021 16:08:12 +0300 Subject: [PATCH 138/376] [SSE mobile] Fix Bug 50958 --- .../mobile/src/controller/settings/ApplicationSettings.jsx | 5 ++--- .../mobile/src/store/applicationSettings.js | 7 +++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx b/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx index f2abdf87a..df4028e75 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx @@ -2,6 +2,7 @@ import React, { Component } from "react"; import { ApplicationSettings } from "../../view/settings/ApplicationSettings"; import {observer, inject} from "mobx-react"; import { LocalStorage } from '../../../../../common/mobile/utils/LocalStorage'; +import {FunctionGroups} from '../../controller/add/AddFunction'; class ApplicationSettingsController extends Component { constructor(props) { @@ -16,11 +17,9 @@ class ApplicationSettingsController extends Component { } initRegSettings() { - this.props.storeApplicationSettings.getRegCode(); - const info = new Asc.asc_CFormatCellsInfo(); const api = Common.EditorApi.get(); - const regCode = this.props.storeApplicationSettings.regCode; + const regCode = this.props.storeApplicationSettings.getRegCode(); info.asc_setType(Asc.c_oAscNumFormatType.None); info.asc_setSymbol(regCode); diff --git a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js index faea20f77..d18e04d2e 100644 --- a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js +++ b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js @@ -1,4 +1,5 @@ import {makeObservable, action, observable} from 'mobx'; +import { LocalStorage } from '../../../../common/mobile/utils/LocalStorage'; export class storeApplicationSettings { constructor() { @@ -27,7 +28,7 @@ export class storeApplicationSettings { unitMeasurement = Common.Utils.Metric.getCurrentMetric(); macrosMode = 0; - formulaLang = Common.Locale.currentLang || dataLang[0].value; + formulaLang = LocalStorage.getItem('sse-settings-func-lang') || dataLang[0].value; regCode = undefined; regExample = ''; regData = []; @@ -70,7 +71,7 @@ export class storeApplicationSettings { getRegCode() { const regData = this.regData; - let value = Number(Common.localStorage.getItem('sse-settings-regional')); + let value = Number(LocalStorage.getItem('sse-settings-regional')); regData.forEach(obj => { if(obj.code === value) { @@ -81,6 +82,8 @@ export class storeApplicationSettings { if(!this.regCode) { this.regCode = 0x0409; } + + return this.regCode; } changeRegCode(value) { From db54743eca96e9e21a61bceb414d0bb8a515b976 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Wed, 23 Jun 2021 18:41:38 +0300 Subject: [PATCH 139/376] Hint Manager: add direction exceptions for filter buttons, add ability to add specific hints to buttons --- apps/common/main/lib/component/Button.js | 15 ++++--- apps/common/main/lib/component/HintManager.js | 45 +++++++++++++++++-- apps/documenteditor/main/app/view/Toolbar.js | 6 ++- .../main/app/view/Toolbar.js | 6 ++- .../main/app/template/StatusBar.template | 8 ++-- .../main/app/view/Toolbar.js | 6 ++- 6 files changed, 65 insertions(+), 21 deletions(-) diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index 400d5554f..64d1d2067 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -194,7 +194,7 @@ define([ '<% } %>'; var templateHugeCaption = - '' + - '', '<% } else if (split == false) {%>', '
    ', - '', - '', @@ -356,7 +356,8 @@ define([ style : me.style, dataHint : me.options.dataHint, dataHintDirection: me.options.dataHintDirection, - dataHintOffset: me.options.dataHintOffset + dataHintOffset: me.options.dataHintOffset, + dataHintTitle: me.options.dataHintTitle })); if (me.menu && _.isObject(me.menu) && _.isFunction(me.menu.render)) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index 41dbfebad..029cd6601 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -49,6 +49,7 @@ if (Common.UI === undefined) { Common.UI.HintManager = new(function() { var _lang = 'en', _arrAlphabet = [], + _arrEnAlphabet = [], _isAlt = false, _hintVisible = false, _currentLevel = 0, @@ -132,9 +133,33 @@ Common.UI.HintManager = new(function() { } else { _arrLetters = [..._arrAlphabet]; } - visibleItems.forEach(function (item, index) { + var usedLetters = []; + if ((_currentSection.nodeType === 9 && $(['data-hint-title']).length > 0) || + (_currentSection.nodeType !== 9 && _currentSection.find('[data-hint-title]').length > 0)) { + visibleItems.forEach(function (item) { + var el = $(item); + var title = el.attr('data-hint-title'); + if (title) { + var ind = _arrEnAlphabet.indexOf(title.toLowerCase()); + usedLetters.push(ind); + if (_lang !== 'en') { + console.log(_arrLetters[ind]); + el.attr('data-hint-title', _arrLetters[ind].toUpperCase()); + } + } + }); + } + var index = 0; + visibleItems.forEach(function (item) { var el = $(item); - el.attr('data-hint-title', _arrLetters[index].toUpperCase()); + if (usedLetters.indexOf(index) !== -1) { + index++; + } + var title = el.attr('data-hint-title'); + if (!title) { + el.attr('data-hint-title', _arrLetters[index].toUpperCase()); + index++; + } _currentControls.push(el); }); }; @@ -143,9 +168,20 @@ Common.UI.HintManager = new(function() { if (_currentControls.length === 0) _getControls(); _currentControls.forEach(function(item, index) { - if (!item.hasClass('disabled')) { + if (!item.hasClass('disabled') && !item.parent().hasClass('disabled')) { var hint = $('
    ' + item.attr('data-hint-title') + '
    '); var direction = item.attr('data-hint-direction'); + // exceptions + if (window.SSE && _currentSection.nodeType !== 9 && + _currentSection.prop('id') === 'toolbar' && item.closest('.panel').attr('data-tab') === 'data') { + if (item.parent().hasClass('slot-sortdesc') || item.parent().hasClass('slot-btn-setfilter')) { + direction = 'top'; + item.attr('data-hint-direction', 'top'); + } else if (item.parent().hasClass('slot-btn-clear-filter') || item.parent().hasClass('slot-sortasc')) { + direction = 'bottom'; + item.attr('data-hint-direction', 'bottom'); + } + } var offsets = item.attr('data-hint-offset'); var applyOffset = offsets === 'big' ? 6 : (offsets === 'medium' ? 4 : (offsets === 'small' ? 2 : 0)); if (applyOffset) { @@ -242,7 +278,7 @@ Common.UI.HintManager = new(function() { _setCurrentSection('esc'); _showHints(); } - } else if ((e.keyCode > 47 && e.keyCode < 58 || e.keyCode > 64 && e.keyCode < 91) && e.key) { + } else { var curr; _inputLetters = _inputLetters + String.fromCharCode(e.keyCode).toUpperCase(); for (var i = 0; i < _currentControls.length; i++) { @@ -299,6 +335,7 @@ Common.UI.HintManager = new(function() { var _getAlphabetLetters = function () { Common.Utils.loadConfig('../../common/main/resources/alphabetletters/alphabetletters.json', function (langsJson) { _arrAlphabet = langsJson[_lang]; + _arrEnAlphabet = langsJson['en']; }); }; diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 75878ea11..d82779d9a 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -159,7 +159,8 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-copy', dataHint: '1', - dataHintDirection: 'top' + dataHintDirection: 'top', + dataHintTitle: 'C' }); this.toolbarControls.push(this.btnCopy); @@ -168,7 +169,8 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paste', dataHint: '1', - dataHintDirection: 'bottom' + dataHintDirection: 'bottom', + dataHintTitle: 'P' }); this.paragraphControls.push(this.btnPaste); diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index e43aae094..9bbbe3464 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -221,7 +221,8 @@ define([ iconCls: 'toolbar__icon btn-copy', lock: [_set.slideDeleted, _set.lostConnect, _set.noSlides, _set.disableOnStart], dataHint: '1', - dataHintDirection: 'top' + dataHintDirection: 'top', + dataHintTitle: 'C' }); me.slideOnlyControls.push(me.btnCopy); @@ -231,7 +232,8 @@ define([ iconCls: 'toolbar__icon btn-paste', lock: [_set.slideDeleted, _set.paragraphLock, _set.lostConnect, _set.noSlides], dataHint: '1', - dataHintDirection: 'bottom' + dataHintDirection: 'bottom', + dataHintTitle: 'P' }); me.paragraphControls.push(me.btnPaste); diff --git a/apps/spreadsheeteditor/main/app/template/StatusBar.template b/apps/spreadsheeteditor/main/app/template/StatusBar.template index 001aa7bdb..7f21845bd 100644 --- a/apps/spreadsheeteditor/main/app/template/StatusBar.template +++ b/apps/spreadsheeteditor/main/app/template/StatusBar.template @@ -1,10 +1,10 @@
    - - - - + + + +
    diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 961615ec4..23963af8e 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -181,7 +181,8 @@ define([ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-copy', dataHint: '1', - dataHintDirection: 'top' + dataHintDirection: 'top', + dataHintTitle: 'C' }); me.btnPaste = new Common.UI.Button({ @@ -190,7 +191,8 @@ define([ iconCls : 'toolbar__icon btn-paste', lock : [/*_set.editCell,*/ _set.coAuth, _set.lostConnect], dataHint: '1', - dataHintDirection: 'bottom' + dataHintDirection: 'bottom', + dataHintTitle: 'P' }); me.btnUndo = new Common.UI.Button({ From d5e1aa57e9d7471ad0ade9c01f3815c13a0899a2 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Thu, 24 Jun 2021 00:07:16 +0300 Subject: [PATCH 140/376] [SSE mobile] Correct store in application settings --- .../spreadsheeteditor/mobile/src/store/applicationSettings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js index d18e04d2e..558d87230 100644 --- a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js +++ b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js @@ -28,13 +28,13 @@ export class storeApplicationSettings { unitMeasurement = Common.Utils.Metric.getCurrentMetric(); macrosMode = 0; - formulaLang = LocalStorage.getItem('sse-settings-func-lang') || dataLang[0].value; + formulaLang = LocalStorage.getItem('sse-settings-func-lang') || this.getFormulaLanguages()[0].value; regCode = undefined; regExample = ''; regData = []; isRefStyle = false; isComments = true; - isResolvedComments = true; + isResolvedComments = true; getFormulaLanguages() { const dataLang = [ From 9bdd5c9d2fe92ef6c6a7d314af4126a4f7dfaf3d Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 24 Jun 2021 11:19:36 +0300 Subject: [PATCH 141/376] Fix Bug 50794 --- .../mobile/src/controller/settings/Download.jsx | 2 +- apps/presentationeditor/mobile/src/controller/Main.jsx | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/documenteditor/mobile/src/controller/settings/Download.jsx b/apps/documenteditor/mobile/src/controller/settings/Download.jsx index 81cfa0dfe..d23411208 100644 --- a/apps/documenteditor/mobile/src/controller/settings/Download.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/Download.jsx @@ -33,7 +33,7 @@ class DownloadController extends Component { () => { if (format == Asc.c_oAscFileType.TXT) { const isDocReady = this.props.storeAppOptions.isDocReady; - onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.TXT, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t, isDocReady, isDRM); + onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.TXT, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t, isDocReady); } else { setTimeout(() => { diff --git a/apps/presentationeditor/mobile/src/controller/Main.jsx b/apps/presentationeditor/mobile/src/controller/Main.jsx index 720a35539..386ed5b50 100644 --- a/apps/presentationeditor/mobile/src/controller/Main.jsx +++ b/apps/presentationeditor/mobile/src/controller/Main.jsx @@ -300,6 +300,7 @@ class MainController extends Component { this.api.asc_registerCallback('asc_onDocumentContentReady', this.onDocumentContentReady.bind(this)); this.api.asc_registerCallback('asc_onDocumentUpdateVersion', this.onUpdateVersion.bind(this)); this.api.asc_registerCallback('asc_onServerVersion', this.onServerVersion.bind(this)); + this.api.asc_registerCallback('asc_onAdvancedOptions', this.onAdvancedOptions.bind(this)); this.api.asc_registerCallback('asc_onDocumentName', this.onDocumentName.bind(this)); this.api.asc_registerCallback('asc_onPrintUrl', this.onPrintUrl.bind(this)); this.api.asc_registerCallback('asc_onPrint', this.onPrint.bind(this)); @@ -309,10 +310,6 @@ class MainController extends Component { const storePresentationSettings = this.props.storePresentationSettings; - this.api.asc_registerCallback('asc_onAdvancedOptions', (type, advOptions) => { - this.onAdvancedOptions(type, advOptions); - }); - this.api.asc_registerCallback('asc_onPresentationSize', (width, height) => { storePresentationSettings.changeSizeIndex(width, height); }); From 7218ed9e2a90006a8870210191e7bf7655fe7bcf Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 24 Jun 2021 17:49:03 +0300 Subject: [PATCH 142/376] Fix layout for tt lang (#943) --- apps/common/main/lib/view/SearchDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/view/SearchDialog.js b/apps/common/main/lib/view/SearchDialog.js index cd18d12f0..3a6039a56 100644 --- a/apps/common/main/lib/view/SearchDialog.js +++ b/apps/common/main/lib/view/SearchDialog.js @@ -99,7 +99,7 @@ '
    ', '' From 21b385dcd15e9e28f88f6ce33284695bf15f51c0 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 24 Jun 2021 18:18:38 +0300 Subject: [PATCH 143/376] Changing the sorting buttons --- apps/spreadsheeteditor/mobile/locale/en.json | 2 ++ .../mobile/src/controller/FilterOptions.jsx | 8 +++++-- .../mobile/src/view/FilterOptions.jsx | 22 +++++++++++-------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index 02681d4f8..bc3204506 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -412,6 +412,8 @@ "textInvalidRange": "Invalid cells range", "txtNotUrl": "This field should be a URL in the format \"http://www.example.com\"", "textFilterOptions": "Filter Options", + "txtSortLow2High": "Sort Lowest to Highest", + "txtSortHigh2Low": "Sort Highest to Lowest", "textClearFilter": "Clear Filter", "textDeleteFilter": "Delete Filter", "textSelectAll": "Select All", diff --git a/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx b/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx index 6e8b153e8..79b2e36a1 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx @@ -10,7 +10,8 @@ const FilterOptionsController = () => { const [configFilter, setConfig] = useState(null); const [listVal, setListValue] = useState([]); - const [isValid, setIsValid] = useState(null) + const [isValid, setIsValid] = useState(null); + const [checkSort, setCheckSort] = useState(null); useEffect(() => { function onDocumentReady() { @@ -36,6 +37,9 @@ const FilterOptionsController = () => { setConfig(config); setClearDisable(config); + const sort = config.asc_getSortState(); + sort == Asc.c_oAscSortOptions.Ascending ? setCheckSort(true) : setCheckSort(false); + if (Device.phone) { f7.sheet.open('.picker__sheet'); } else { @@ -128,7 +132,7 @@ const FilterOptionsController = () => { }; return ( - ) }; diff --git a/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx b/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx index e5d307379..ffdf7ba1f 100644 --- a/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx @@ -6,6 +6,7 @@ import { Device } from '../../../../common/mobile/utils/device'; const FilterOptions = (props) => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); + const isAndroid = Device.android; useEffect(() => { const is_all_checked = props.listVal.every(item => item.check); @@ -33,15 +34,18 @@ const FilterOptions = (props) => { } - - - props.onSort('sortdown')}> - - - props.onSort('sortup')}> - - - + props.onSort('sortdown')} + after={isAndroid ? : null}> + {!isAndroid ? + : null + } + + + props.onSort('sortup')} + after={isAndroid ? : null}> + {!isAndroid ? + : null + } From 609cca232b55416217dbcbe59a8399548ea58d1c Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Thu, 24 Jun 2021 18:19:35 +0300 Subject: [PATCH 144/376] [common] Fix generation of tips, fix work for other languages --- apps/common/main/lib/component/HintManager.js | 48 ++++++++++++++----- .../alphabetletters/qwertyletters.json | 6 +++ 2 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 apps/common/main/resources/alphabetletters/qwertyletters.json diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index 029cd6601..f3e9416b1 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -50,11 +50,12 @@ Common.UI.HintManager = new(function() { var _lang = 'en', _arrAlphabet = [], _arrEnAlphabet = [], + _arrQwerty = [], + _arrEnQwerty = [], _isAlt = false, _hintVisible = false, _currentLevel = 0, _currentSection = document, - _controls = [], _currentControls = [], _currentHints = [], _inputLetters = ''; @@ -118,15 +119,21 @@ Common.UI.HintManager = new(function() { }; var _getControls = function() { - /*if (!_controls[_currentLevel]) { - _controls[_currentLevel] = $('[data-hint=' + (_currentLevel) + ']').toArray(); - }*/ - _controls[_currentLevel] = $(_currentSection).find('[data-hint=' + (_currentLevel) + ']').toArray(); _currentControls = []; - var arr = _controls[_currentLevel]; + var arr = $(_currentSection).find('[data-hint=' + (_currentLevel) + ']').toArray(); var visibleItems = arr.filter(function (item) { return $(item).is(':visible'); }); + var visibleItemsWithTitle = $(_currentSection).find('[data-hint-title][data-hint=' + (_currentLevel) + ']').toArray().filter(function (item) { + return $(item).is(':visible'); + }); + if (visibleItems.length === visibleItemsWithTitle.length) { // all buttons have data-hint-title + visibleItems.forEach(function (item) { + var el = $(item); + _currentControls.push(el); + }); + return; + } var _arrLetters = []; if (visibleItems.length > _arrAlphabet.length) { _arrLetters = _getLetters(visibleItems.length); @@ -134,17 +141,19 @@ Common.UI.HintManager = new(function() { _arrLetters = [..._arrAlphabet]; } var usedLetters = []; - if ((_currentSection.nodeType === 9 && $(['data-hint-title']).length > 0) || - (_currentSection.nodeType !== 9 && _currentSection.find('[data-hint-title]').length > 0)) { + if ($(_currentSection).find('[data-hint-title]').length > 0) { visibleItems.forEach(function (item) { var el = $(item); var title = el.attr('data-hint-title'); if (title) { var ind = _arrEnAlphabet.indexOf(title.toLowerCase()); - usedLetters.push(ind); - if (_lang !== 'en') { - console.log(_arrLetters[ind]); - el.attr('data-hint-title', _arrLetters[ind].toUpperCase()); + if (ind === -1) { // we have already changed + usedLetters.push(_arrAlphabet.indexOf(title.toLowerCase())); + } else { + usedLetters.push(ind); + if (_lang !== 'en') { + el.attr('data-hint-title', _arrLetters[ind].toUpperCase()); + } } } }); @@ -280,7 +289,14 @@ Common.UI.HintManager = new(function() { } } else { var curr; - _inputLetters = _inputLetters + String.fromCharCode(e.keyCode).toUpperCase(); + var curLetter = _lang === 'en' ? String.fromCharCode(e.keyCode) : e.key; + if (_lang !== 'en' && _arrAlphabet.indexOf(curLetter.toLowerCase()) === -1) { + var ind = _arrEnQwerty.indexOf(curLetter.toLowerCase()); + if (ind !== -1) { + curLetter = _arrQwerty[ind]; + } + } + _inputLetters = _inputLetters + curLetter.toUpperCase(); for (var i = 0; i < _currentControls.length; i++) { var item = _currentControls[i]; if (item.attr('data-hint-title') === _inputLetters) { @@ -337,6 +353,12 @@ Common.UI.HintManager = new(function() { _arrAlphabet = langsJson[_lang]; _arrEnAlphabet = langsJson['en']; }); + Common.Utils.loadConfig('../../common/main/resources/alphabetletters/qwertyletters.json', function (langsJson) { + _arrQwerty = langsJson[_lang]; + if (_lang !== 'en') { + _arrEnQwerty = langsJson['en']; + } + }); }; var _needCloseMenu = function () { diff --git a/apps/common/main/resources/alphabetletters/qwertyletters.json b/apps/common/main/resources/alphabetletters/qwertyletters.json new file mode 100644 index 000000000..b5b5d89ac --- /dev/null +++ b/apps/common/main/resources/alphabetletters/qwertyletters.json @@ -0,0 +1,6 @@ +{ + "en": ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "z", "x", "c", "v", "b", "n", "m"], + "ru": ["й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю"], + "de": ["q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä", "z", "x", "c", "v", "b", "n", "m"], + "fr": ["a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "w", "x", "c", "v", "b", "n"] +} \ No newline at end of file From 8766f4db6133f33df87746e2937c3a4a682199ca Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 24 Jun 2021 19:08:21 +0300 Subject: [PATCH 145/376] [DE embedded] Show loader mask --- apps/common/embed/lib/util/utils.js | 8 ++ apps/common/embed/lib/view/LoadMask.js | 99 +++++++++++++++++++ apps/common/embed/resources/less/common.less | 2 + .../common/embed/resources/less/loadmask.less | 74 ++++++++++++++ apps/documenteditor/embed/index.html | 6 +- apps/documenteditor/embed/index.html.deploy | 5 - apps/documenteditor/embed/index_loader.html | 6 +- .../embed/index_loader.html.deploy | 5 - .../embed/js/ApplicationController.js | 30 +++--- build/documenteditor.json | 1 + 10 files changed, 201 insertions(+), 35 deletions(-) create mode 100644 apps/common/embed/lib/view/LoadMask.js create mode 100644 apps/common/embed/resources/less/loadmask.less diff --git a/apps/common/embed/lib/util/utils.js b/apps/common/embed/lib/util/utils.js index 8676bb859..7cddcafc7 100644 --- a/apps/common/embed/lib/util/utils.js +++ b/apps/common/embed/lib/util/utils.js @@ -84,6 +84,14 @@ _user.group && (_user.fullname = (_user.group).toString() + AscCommon.UserInfoParser.getSeparator() + _user.fullname); _user.guest = !_user.name; return _user; + }, + + fixedDigits: function(num, digits, fill) { + (fill===undefined) && (fill = '0'); + var strfill = "", + str = num.toString(); + for (var i=str.length; i
    ' + + '
    ' + + '
    '; + var ownerEl = owner || $(document.body), + loaderEl, + maskedEl, + title = '', + timerId = 0, + rendered = false; + return { + + show: function(){ + if (!loaderEl || !maskedEl) { + loaderEl = $(tpl); + maskedEl = $('
    '); + } + + $('.asc-loadmask-title', loaderEl).html(title); + + // show mask after 500 ms if it wont be hided + if (!rendered) { + timerId = setTimeout(function () { + ownerEl.append(maskedEl); + ownerEl.append(loaderEl); + + loaderEl.css('min-width', $('.asc-loadmask-title', loaderEl).width() + 105); + },500); + } + }, + + hide: function() { + if (timerId) { + clearTimeout(timerId); + timerId = 0; + } + maskedEl && maskedEl.remove(); + loaderEl && loaderEl.remove(); + maskedEl = loaderEl = null; + }, + + setTitle: function(text) { + title = text; + + if (ownerEl && loaderEl){ + var el = $('.asc-loadmask-title', loaderEl); + el.html(title); + loaderEl.css('min-width', el.width() + 105); + } + } + } +}; + diff --git a/apps/common/embed/resources/less/common.less b/apps/common/embed/resources/less/common.less index 54012b65b..006c2f810 100644 --- a/apps/common/embed/resources/less/common.less +++ b/apps/common/embed/resources/less/common.less @@ -53,6 +53,8 @@ @import "../../../../../vendor/bootstrap/less/responsive-utilities.less"; +@import "loadmask.less"; + @toolbarBorderColor: #dbdbdb; @toolbarBorderShadowColor: #FAFAFA; @toolbarTopColor: #F7F7F7; diff --git a/apps/common/embed/resources/less/loadmask.less b/apps/common/embed/resources/less/loadmask.less new file mode 100644 index 000000000..26d068654 --- /dev/null +++ b/apps/common/embed/resources/less/loadmask.less @@ -0,0 +1,74 @@ +@loadmask-zindex: 10000; +@loadmask-image-height: 28px; +@loadmask-image-width: 28px; +@loadmask-small-image-height: 20px; +@loadmask-small-image-width: 20px; +@background-loader-ie: fade(#000, 65%); +@background-loader: fade(#181818, 90%); +@text-contrast-background-ie: #fff; +@text-contrast-background: #fff; + +.asc-loadmask { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + zoom: 1; + background-color: transparent; + z-index: @loadmask-zindex; +} + +.asc-loadmask-body { + position: absolute; + z-index: @loadmask-zindex + 1; + padding: 24px; + line-height: @loadmask-image-height; + border: none; + background-image: none; + background-color: @background-loader-ie; + background-color: @background-loader; + color: @text-contrast-background-ie; + color: @text-contrast-background; + border-radius: 6px; + + left: 50%; + top: 50%; + transform: translate(-50%); + + & > div { + display: inline-block; + vertical-align: middle; + } + + .asc-loadmask-image { + background-image: ~"url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyOCAyOCI+PGNpcmNsZSBjeD0iMTQiIGN5PSIxNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuNSIgcj0iMTAuMjUiIHN0cm9rZS1kYXNoYXJyYXk9IjE2MCUsIDQwJSIgLz48L3N2Zz4=)"; + height: 28px; + width: 28px; + float: left; + margin-left: 8px; + } + + .asc-loadmask-title { + font-size: 13px; + margin: 0 8px 0 12px; + white-space: pre-wrap; + } +} + +@keyframes rotation { + from { + transform: rotate(0); + } + + to { + transform: rotate(360deg); + } +} + +#loadmask-spinner { + animation-duration: .8s; + animation-name: rotation; + animation-iteration-count: infinite; + animation-timing-function: linear; +} diff --git a/apps/documenteditor/embed/index.html b/apps/documenteditor/embed/index.html index bd9ab347c..ab20ccc1f 100644 --- a/apps/documenteditor/embed/index.html +++ b/apps/documenteditor/embed/index.html @@ -222,11 +222,6 @@
    - - @@ -257,6 +252,7 @@ + diff --git a/apps/documenteditor/embed/index.html.deploy b/apps/documenteditor/embed/index.html.deploy index b2bfd8c2b..c6c09db65 100644 --- a/apps/documenteditor/embed/index.html.deploy +++ b/apps/documenteditor/embed/index.html.deploy @@ -214,11 +214,6 @@
    - - diff --git a/apps/documenteditor/embed/index_loader.html b/apps/documenteditor/embed/index_loader.html index 75cf5466f..938ddb42f 100644 --- a/apps/documenteditor/embed/index_loader.html +++ b/apps/documenteditor/embed/index_loader.html @@ -323,11 +323,6 @@ - - @@ -351,6 +346,7 @@ + diff --git a/apps/documenteditor/embed/index_loader.html.deploy b/apps/documenteditor/embed/index_loader.html.deploy index 6222ab1b2..29f7ab10c 100644 --- a/apps/documenteditor/embed/index_loader.html.deploy +++ b/apps/documenteditor/embed/index_loader.html.deploy @@ -315,11 +315,6 @@ - - diff --git a/apps/documenteditor/embed/js/ApplicationController.js b/apps/documenteditor/embed/js/ApplicationController.js index bab462149..ddc3b7363 100644 --- a/apps/documenteditor/embed/js/ApplicationController.js +++ b/apps/documenteditor/embed/js/ApplicationController.js @@ -45,6 +45,8 @@ DE.ApplicationController = new(function(){ btnSubmit, _submitFail, $submitedTooltip, $requiredTooltip; + var LoadingDocument = -256; + // Initialize analytics // ------------------------- @@ -168,14 +170,19 @@ DE.ApplicationController = new(function(){ btnSubmit.attr({disabled: true}); btnSubmit.css("pointer-events", "none"); break; + case LoadingDocument: + text = me.textLoadingDocument + ' '; + break; default: text = me.waitText; break; } if (type == Asc.c_oAscAsyncActionType['BlockInteraction']) { - $('#id-loadmask .cmd-loader-title').html(text); - showMask(); + if (!me.loadMask) + me.loadMask = new common.view.LoadMask(); + me.loadMask.setTitle(text); + me.loadMask.show(); } } @@ -192,7 +199,7 @@ DE.ApplicationController = new(function(){ $submitedTooltip.show(); } } - hideMask(); + me.loadMask && me.loadMask.hide(); } function onDocMouseMoveStart() { @@ -272,6 +279,7 @@ DE.ApplicationController = new(function(){ function onDocumentContentReady() { hidePreloader(); + onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); var zf = (config.customization && config.customization.zoom ? parseInt(config.customization.zoom) : -2); (zf == -1) ? api.zoomFitToPage() : ((zf == -2) ? api.zoomFitToWidth() : api.zoom(zf>0 ? zf : 100)); @@ -542,24 +550,15 @@ DE.ApplicationController = new(function(){ else $parent.css('padding-right', _left_width - _right_width); + onLongActionBegin(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); + api.asc_LoadDocument(); api.Resize(); } - function showMask() { - $('#id-loadmask').modal({ - backdrop: 'static', - keyboard: false - }); - } - - function hideMask() { - $('#id-loadmask').modal('hide'); - } - function onOpenDocument(progress) { var proc = (progress.asc_getCurrentFont() + progress.asc_getCurrentImage())/(progress.asc_getFontsCount() + progress.asc_getImagesCount()); - $('#loadmask-text').html(me.textLoadingDocument + ': ' + Math.min(Math.round(proc * 100), 100) + '%'); + me.loadMask && me.loadMask.setTitle(me.textLoadingDocument + ': ' + common.utils.fixedDigits(Math.min(Math.round(proc*100), 100), 3, " ") + '%'); } function onError(id, level, errData) { @@ -574,6 +573,7 @@ DE.ApplicationController = new(function(){ } hidePreloader(); + onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); var message; diff --git a/build/documenteditor.json b/build/documenteditor.json index a220200a8..4af60d759 100644 --- a/build/documenteditor.json +++ b/build/documenteditor.json @@ -412,6 +412,7 @@ "../apps/common/Analytics.js", "../apps/common/embed/lib/util/LocalStorage.js", "../apps/common/embed/lib/util/utils.js", + "../apps/common/embed/lib/view/LoadMask.js", "../apps/common/embed/lib/view/modals.js", "../apps/common/embed/lib/controller/modals.js", "../apps/documenteditor/embed/js/ApplicationView.js", From 2edcfb779be863f0f061fe8ab31fbed3d23b28bf Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 25 Jun 2021 00:48:20 +0300 Subject: [PATCH 146/376] [PE embedded][SSE embedded] Show loader mask --- apps/common/embed/lib/view/LoadMask.js | 2 ++ apps/presentationeditor/embed/index.html | 6 +--- .../embed/index.html.deploy | 5 --- .../embed/index_loader.html | 6 +--- .../embed/index_loader.html.deploy | 5 --- .../embed/js/ApplicationController.js | 31 +++++++++---------- apps/spreadsheeteditor/embed/index.html | 6 +--- .../spreadsheeteditor/embed/index.html.deploy | 5 --- .../spreadsheeteditor/embed/index_loader.html | 6 +--- .../embed/index_loader.html.deploy | 5 --- .../embed/js/ApplicationController.js | 31 +++++++++---------- build/presentationeditor.json | 1 + build/spreadsheeteditor.json | 1 + 13 files changed, 38 insertions(+), 72 deletions(-) diff --git a/apps/common/embed/lib/view/LoadMask.js b/apps/common/embed/lib/view/LoadMask.js index 901114b5a..87f15409b 100644 --- a/apps/common/embed/lib/view/LoadMask.js +++ b/apps/common/embed/lib/view/LoadMask.js @@ -66,6 +66,7 @@ common.view.LoadMask = function(owner) { // show mask after 500 ms if it wont be hided if (!rendered) { + rendered = true; timerId = setTimeout(function () { ownerEl.append(maskedEl); ownerEl.append(loaderEl); @@ -83,6 +84,7 @@ common.view.LoadMask = function(owner) { maskedEl && maskedEl.remove(); loaderEl && loaderEl.remove(); maskedEl = loaderEl = null; + rendered = false; }, setTitle: function(text) { diff --git a/apps/presentationeditor/embed/index.html b/apps/presentationeditor/embed/index.html index b0baf0920..991f9b627 100644 --- a/apps/presentationeditor/embed/index.html +++ b/apps/presentationeditor/embed/index.html @@ -273,11 +273,6 @@ - - @@ -307,6 +302,7 @@ + diff --git a/apps/presentationeditor/embed/index.html.deploy b/apps/presentationeditor/embed/index.html.deploy index 5db22646c..a3a0347ab 100644 --- a/apps/presentationeditor/embed/index.html.deploy +++ b/apps/presentationeditor/embed/index.html.deploy @@ -267,11 +267,6 @@ - - diff --git a/apps/presentationeditor/embed/index_loader.html b/apps/presentationeditor/embed/index_loader.html index 5d725ac73..e90de1d35 100644 --- a/apps/presentationeditor/embed/index_loader.html +++ b/apps/presentationeditor/embed/index_loader.html @@ -322,11 +322,6 @@ - - @@ -349,6 +344,7 @@ + diff --git a/apps/presentationeditor/embed/index_loader.html.deploy b/apps/presentationeditor/embed/index_loader.html.deploy index cb929d1b1..ee5f914c6 100644 --- a/apps/presentationeditor/embed/index_loader.html.deploy +++ b/apps/presentationeditor/embed/index_loader.html.deploy @@ -315,11 +315,6 @@ - - diff --git a/apps/presentationeditor/embed/js/ApplicationController.js b/apps/presentationeditor/embed/js/ApplicationController.js index 6f4ca8d87..78df5f6a2 100644 --- a/apps/presentationeditor/embed/js/ApplicationController.js +++ b/apps/presentationeditor/embed/js/ApplicationController.js @@ -43,6 +43,8 @@ PE.ApplicationController = new(function(){ ttOffset = [0, -10], labelDocName; + var LoadingDocument = -256; + // Initialize analytics // ------------------------- @@ -156,19 +158,24 @@ PE.ApplicationController = new(function(){ case Asc.c_oAscAsyncAction['Print']: text = me.downloadTextText; break; + case LoadingDocument: + text = me.textLoadingDocument + ' '; + break; default: text = me.waitText; break; } if (type == Asc.c_oAscAsyncActionType['BlockInteraction']) { - $('#id-loadmask .cmd-loader-title').html(text); - showMask(); + if (!me.loadMask) + me.loadMask = new common.view.LoadMask(); + me.loadMask.setTitle(text); + me.loadMask.show(); } } function onLongActionEnd(){ - hideMask(); + me.loadMask && me.loadMask.hide(); } function onDocMouseMoveStart() { @@ -244,6 +251,7 @@ PE.ApplicationController = new(function(){ onPlayStart(); } hidePreloader(); + onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); var zf = (config.customization && config.customization.zoom ? parseInt(config.customization.zoom) : -1); (zf == -1) ? api.zoomFitToPage() : ((zf == -2) ? api.zoomFitToWidth() : api.zoom(zf>0 ? zf : 100)); @@ -469,6 +477,7 @@ PE.ApplicationController = new(function(){ else $parent.css('padding-right', _left_width - _right_width); + onLongActionBegin(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); api.asc_setViewMode(true); api.asc_LoadDocument(); api.Resize(); @@ -476,7 +485,7 @@ PE.ApplicationController = new(function(){ function onOpenDocument(progress) { var proc = (progress.asc_getCurrentFont() + progress.asc_getCurrentImage())/(progress.asc_getFontsCount() + progress.asc_getImagesCount()); - $('#loadmask-text').html(me.textLoadingDocument + ': ' + Math.min(Math.round(proc * 100), 100) + '%'); + me.loadMask && me.loadMask.setTitle(me.textLoadingDocument + ': ' + common.utils.fixedDigits(Math.min(Math.round(proc*100), 100), 3, " ") + '%'); } var isplaymode; @@ -505,17 +514,6 @@ PE.ApplicationController = new(function(){ $('#page-number').val(number); } - function showMask() { - $('#id-loadmask').modal({ - backdrop: 'static', - keyboard: false - }); - } - - function hideMask() { - $('#id-loadmask').modal('hide'); - } - function onError(id, level, errData) { if (id == Asc.c_oAscError.ID.LoadingScriptError) { $('#id-critical-error-title').text(me.criticalErrorTitle); @@ -528,7 +526,8 @@ PE.ApplicationController = new(function(){ } hidePreloader(); - + onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); + var message; switch (id) diff --git a/apps/spreadsheeteditor/embed/index.html b/apps/spreadsheeteditor/embed/index.html index a7eb4880a..c21511fc4 100644 --- a/apps/spreadsheeteditor/embed/index.html +++ b/apps/spreadsheeteditor/embed/index.html @@ -246,11 +246,6 @@ - - @@ -283,6 +278,7 @@ + diff --git a/apps/spreadsheeteditor/embed/index.html.deploy b/apps/spreadsheeteditor/embed/index.html.deploy index 13573b703..50678b73f 100644 --- a/apps/spreadsheeteditor/embed/index.html.deploy +++ b/apps/spreadsheeteditor/embed/index.html.deploy @@ -238,11 +238,6 @@ - - diff --git a/apps/spreadsheeteditor/embed/index_loader.html b/apps/spreadsheeteditor/embed/index_loader.html index f703fe302..dffe44305 100644 --- a/apps/spreadsheeteditor/embed/index_loader.html +++ b/apps/spreadsheeteditor/embed/index_loader.html @@ -321,11 +321,6 @@ - - @@ -351,6 +346,7 @@ + diff --git a/apps/spreadsheeteditor/embed/index_loader.html.deploy b/apps/spreadsheeteditor/embed/index_loader.html.deploy index 56166bc85..097125983 100644 --- a/apps/spreadsheeteditor/embed/index_loader.html.deploy +++ b/apps/spreadsheeteditor/embed/index_loader.html.deploy @@ -313,11 +313,6 @@ - - diff --git a/apps/spreadsheeteditor/embed/js/ApplicationController.js b/apps/spreadsheeteditor/embed/js/ApplicationController.js index e2a5a7031..c2dd584da 100644 --- a/apps/spreadsheeteditor/embed/js/ApplicationController.js +++ b/apps/spreadsheeteditor/embed/js/ApplicationController.js @@ -45,6 +45,8 @@ SSE.ApplicationController = new(function(){ ttOffset = [6, -15], labelDocName; + var LoadingDocument = -256; + // Initialize analytics // ------------------------- @@ -196,6 +198,7 @@ SSE.ApplicationController = new(function(){ function onDocumentContentReady() { hidePreloader(); + onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); if ( permissions.print === false) $('#idt-print').hide(); @@ -230,6 +233,7 @@ SSE.ApplicationController = new(function(){ api.asc_registerCallback('asc_onDownloadUrl', onDownloadUrl); api.asc_registerCallback('asc_onPrint', onPrint); api.asc_registerCallback('asc_onPrintUrl', onPrintUrl); + api.asc_registerCallback('asc_onStartAction', onLongActionBegin); Common.Gateway.on('processmouse', onProcessMouse); Common.Gateway.on('downloadas', onDownloadAs); @@ -371,24 +375,14 @@ SSE.ApplicationController = new(function(){ else $parent.css('padding-right', _left_width - _right_width); + onLongActionBegin(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); api.asc_setViewMode(true); api.asc_LoadDocument(); } - function showMask() { - $('#id-loadmask').modal({ - backdrop: 'static', - keyboard: false - }); - } - - function hideMask() { - $('#id-loadmask').modal('hide'); - } - function onOpenDocument(progress) { var proc = (progress.asc_getCurrentFont() + progress.asc_getCurrentImage())/(progress.asc_getFontsCount() + progress.asc_getImagesCount()); - $('#loadmask-text').html(me.textLoadingDocument + ': ' + Math.min(Math.round(proc * 100), 100) + '%'); + me.loadMask && me.loadMask.setTitle(me.textLoadingDocument + ': ' + common.utils.fixedDigits(Math.min(Math.round(proc*100), 100), 3, " ") + '%'); } function onLongActionBegin(type, id){ @@ -398,14 +392,19 @@ SSE.ApplicationController = new(function(){ case Asc.c_oAscAsyncAction['Print']: text = me.downloadTextText; break; + case LoadingDocument: + text = me.textLoadingDocument + ' '; + break; default: text = me.waitText; break; } if (type == Asc.c_oAscAsyncActionType['BlockInteraction']) { - $('#id-loadmask .cmd-loader-title').html(text); - showMask(); + if (!me.loadMask) + me.loadMask = new common.view.LoadMask(); + me.loadMask.setTitle(text); + me.loadMask.show(); } } @@ -424,7 +423,7 @@ SSE.ApplicationController = new(function(){ break; } - hideMask(); + me.loadMask && me.loadMask.hide(); } } @@ -440,6 +439,7 @@ SSE.ApplicationController = new(function(){ } hidePreloader(); + onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); var message; @@ -625,7 +625,6 @@ SSE.ApplicationController = new(function(){ }); if (api){ - api.asc_registerCallback('asc_onStartAction', onLongActionBegin); api.asc_registerCallback('asc_onEndAction', onLongActionEnd); api.asc_registerCallback('asc_onError', onError); api.asc_registerCallback('asc_onOpenDocumentProgress', onOpenDocument); diff --git a/build/presentationeditor.json b/build/presentationeditor.json index ccddf34cd..14f0dd739 100644 --- a/build/presentationeditor.json +++ b/build/presentationeditor.json @@ -416,6 +416,7 @@ "../apps/common/Analytics.js", "../apps/common/embed/lib/util/LocalStorage.js", "../apps/common/embed/lib/util/utils.js", + "../apps/common/embed/lib/view/LoadMask.js", "../apps/common/embed/lib/view/modals.js", "../apps/common/embed/lib/controller/modals.js", "../apps/presentationeditor/embed/js/ApplicationView.js", diff --git a/build/spreadsheeteditor.json b/build/spreadsheeteditor.json index 8d3be3fb9..67a466ff3 100644 --- a/build/spreadsheeteditor.json +++ b/build/spreadsheeteditor.json @@ -429,6 +429,7 @@ "../apps/common/Analytics.js", "../apps/common/embed/lib/util/LocalStorage.js", "../apps/common/embed/lib/util/utils.js", + "../apps/common/embed/lib/view/LoadMask.js", "../apps/common/embed/lib/view/modals.js", "../apps/common/embed/lib/controller/modals.js", "../apps/spreadsheeteditor/embed/js/ApplicationView.js", From 4afe790e0ff76978e7f7ec82f25b705e64659dd1 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Fri, 25 Jun 2021 11:03:05 +0300 Subject: [PATCH 147/376] [themes] refactoring --- .../lib/controller/ExternalDiagramEditor.js | 4 +-- apps/common/main/lib/controller/Themes.js | 33 ++++++++++++++++--- apps/common/main/lib/util/htmlutils.js | 8 ++--- apps/presentationeditor/main/app.reporter.js | 2 +- .../main/app_dev.reporter.js | 2 +- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/apps/common/main/lib/controller/ExternalDiagramEditor.js b/apps/common/main/lib/controller/ExternalDiagramEditor.js index 731df5d8d..5c8641012 100644 --- a/apps/common/main/lib/controller/ExternalDiagramEditor.js +++ b/apps/common/main/lib/controller/ExternalDiagramEditor.js @@ -56,7 +56,7 @@ define([ var createExternalEditor = function() { - !!customization && (customization.uiTheme = Common.localStorage.getItem("ui-theme", "theme-light")); + !!customization && (customization.uiTheme = Common.localStorage.getItem("ui-theme-id", "theme-light")); externalEditor = new DocsAPI.DocEditor('id-diagram-editor-placeholder', { width : '100%', height : '100%', @@ -245,7 +245,7 @@ define([ showExternalEditor: function () { if ( externalEditor ) { - var value = Common.localStorage.getItem("ui-theme", "theme-light"); + var value = Common.localStorage.getItem("ui-theme-id", "theme-light"); externalEditor.serviceCommand('theme:change', value); } diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index 1c11545a3..32373d23b 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -198,18 +198,31 @@ define([ // get_themes_config('../../common/main/resources/themes/themes.json') } + var get_ui_theme_name = function (objtheme) { + if ( typeof(objtheme) == 'string' && + objtheme.startsWith("{") && objtheme.endsWith("}") ) + { + objtheme = JSON.parse(objtheme); + } + + if ( objtheme && typeof(objtheme) == 'object' ) + return objtheme.id; + + return objtheme; + } + return { init: function (api) { var me = this; $(window).on('storage', function (e) { - if ( e.key == 'ui-theme' ) { + if ( e.key == 'ui-theme' || e.key == 'ui-theme-id' ) { me.setTheme(e.originalEvent.newValue); } }) this.api = api; - var theme_name = Common.localStorage.getItem('ui-theme'); + var theme_name = get_ui_theme_name(Common.localStorage.getItem('ui-theme')); if ( !themes_map[theme_name] ) theme_name = id_default_light_theme; @@ -242,7 +255,7 @@ define([ }, currentThemeId: function () { - return Common.localStorage.getItem('ui-theme') || id_default_light_theme; + return get_ui_theme_name(Common.localStorage.getItem('ui-theme')) || id_default_light_theme; }, defaultThemeId: function (type) { @@ -257,7 +270,8 @@ define([ return themes_map[this.currentThemeId()].type == 'dark'; }, - setTheme: function (id, force) { + setTheme: function (obj, force) { + var id = get_ui_theme_name(obj); if ( (this.currentThemeId() != id || force) && !!themes_map[id] ) { var classname = document.body.className.replace(/theme-\w+\s?/, ''); document.body.className = classname; @@ -270,7 +284,16 @@ define([ this.api.asc_setSkin(obj); - Common.localStorage.setItem('ui-theme', id); + if ( !(Common.Utils.isIE10 || Common.Utils.isIE11) ) { + var theme_obj = { + id: id, + type: obj.type, + }; + + Common.localStorage.setItem('ui-theme', JSON.stringify(theme_obj)); + } + + Common.localStorage.setItem('ui-theme-id', id); Common.NotificationCenter.trigger('uitheme:changed', id); } }, diff --git a/apps/common/main/lib/util/htmlutils.js b/apps/common/main/lib/util/htmlutils.js index 7d5b0161b..9277da26f 100644 --- a/apps/common/main/lib/util/htmlutils.js +++ b/apps/common/main/lib/util/htmlutils.js @@ -32,7 +32,7 @@ var params = (function() { return urlParams; })(); -if ( !!params.uitheme && !localStorage.getItem("ui-theme") ) { +if ( !!params.uitheme && !localStorage.getItem("ui-theme-id") ) { // const _t = params.uitheme.match(/([\w-]+)/g); if ( params.uitheme == 'default-dark' ) @@ -41,14 +41,14 @@ if ( !!params.uitheme && !localStorage.getItem("ui-theme") ) { if ( params.uitheme == 'default-light' ) params.uitheme = 'theme-classic-light'; - localStorage.setItem("ui-theme", params.uitheme); + localStorage.setItem("ui-theme-id", params.uitheme); } -var ui_theme_name = localStorage.getItem("ui-theme"); +var ui_theme_name = localStorage.getItem("ui-theme-id"); if ( !ui_theme_name ) { if ( window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ) { ui_theme_name = 'theme-dark'; - localStorage.setItem("ui-theme", ui_theme_name); + localStorage.setItem("ui-theme-id", ui_theme_name); } } if ( !!ui_theme_name ) { diff --git a/apps/presentationeditor/main/app.reporter.js b/apps/presentationeditor/main/app.reporter.js index 0c69433aa..bfbc78e32 100644 --- a/apps/presentationeditor/main/app.reporter.js +++ b/apps/presentationeditor/main/app.reporter.js @@ -93,7 +93,7 @@ require([ var api = new Asc.asc_docs_api({ 'id-view' : 'editor_sdk', using : 'reporter', - skin : localStorage.getItem("ui-theme") + skin : localStorage.getItem("ui-theme-id") }); var setDocumentTitle = function(title) { diff --git a/apps/presentationeditor/main/app_dev.reporter.js b/apps/presentationeditor/main/app_dev.reporter.js index 77687a322..1a2cc0821 100644 --- a/apps/presentationeditor/main/app_dev.reporter.js +++ b/apps/presentationeditor/main/app_dev.reporter.js @@ -94,7 +94,7 @@ require([ var api = new Asc.asc_docs_api({ 'id-view' : 'editor_sdk', using : 'reporter', - skin : localStorage.getItem("ui-theme") + skin : localStorage.getItem("ui-theme-id") }); var setDocumentTitle = function(title) { From 88c62da5f615f34917105013e7c0f0e286638f06 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Fri, 25 Jun 2021 11:29:11 +0300 Subject: [PATCH 148/376] [common] refactoring --- apps/common/main/lib/util/utils.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index e230a013d..ec6f0c975 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -797,10 +797,12 @@ Common.Utils.getConfigJson = function (url) { }; Common.Utils.loadConfig = function(url, callback) { - "use strict"; - - fetch(url) - .then(function(response){ + fetch(url, { + method: 'get', + headers: { + 'Accept': 'application/json', + }, + }).then(function(response){ if ( response.ok ) return response.json(); else return 'error'; From 36f718d161f1715b19172886d8aa73d6a5d56a9c Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 25 Jun 2021 11:46:08 +0300 Subject: [PATCH 149/376] Update translation --- apps/documenteditor/embed/locale/ca.json | 13 ++++++-- apps/documenteditor/embed/locale/tr.json | 9 ++++++ apps/documenteditor/main/locale/tr.json | 8 +++++ apps/presentationeditor/embed/locale/ca.json | 3 +- apps/presentationeditor/embed/locale/tr.json | 2 ++ apps/presentationeditor/main/locale/de.json | 2 +- apps/spreadsheeteditor/embed/locale/ca.json | 13 ++++---- apps/spreadsheeteditor/embed/locale/tr.json | 2 ++ apps/spreadsheeteditor/main/locale/de.json | 6 ++-- apps/spreadsheeteditor/main/locale/ro.json | 2 ++ apps/spreadsheeteditor/main/locale/sv.json | 33 +++++++++++++++++++- 11 files changed, 79 insertions(+), 14 deletions(-) diff --git a/apps/documenteditor/embed/locale/ca.json b/apps/documenteditor/embed/locale/ca.json index fc54c1ace..b91723786 100644 --- a/apps/documenteditor/embed/locale/ca.json +++ b/apps/documenteditor/embed/locale/ca.json @@ -10,21 +10,30 @@ "DE.ApplicationController.downloadErrorText": "Descàrrega fallida.", "DE.ApplicationController.downloadTextText": "Descarregant document...", "DE.ApplicationController.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", - "DE.ApplicationController.errorDefaultMessage": "Error codi:%1 ", + "DE.ApplicationController.errorDefaultMessage": "Codi d'error:%1", + "DE.ApplicationController.errorEditingDownloadas": "S'ha produït un error durant el treball amb el document.
    Utilitzeu l'opció \"Desar com a ...\" per desar la còpia de seguretat del fitxer al disc dur del vostre ordinador.", "DE.ApplicationController.errorFilePassProtect": "El fitxer està protegit amb contrasenya i no es pot obrir.", "DE.ApplicationController.errorFileSizeExceed": "La mida del fitxer excedeix la limitació establerta per al vostre servidor. Podeu contactar amb l'administrador del Document Server per obtenir més detalls.", + "DE.ApplicationController.errorSubmit": "Error en enviar", "DE.ApplicationController.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "DE.ApplicationController.errorUserDrop": "Ara no es pot accedir al fitxer.", "DE.ApplicationController.notcriticalErrorTitle": "Avis", "DE.ApplicationController.scriptLoadError": "La connexió és massa lenta, alguns dels components no s’han pogut carregar. Torneu a carregar la pàgina.", + "DE.ApplicationController.textClear": "Esborrar tots els camps", "DE.ApplicationController.textLoadingDocument": "Carregant document", + "DE.ApplicationController.textNext": "Següent camp", "DE.ApplicationController.textOf": "de", + "DE.ApplicationController.textSubmit": "Enviar", + "DE.ApplicationController.textSubmited": "Formulari enviat amb èxit
    Faci clic per a tancar el consell", "DE.ApplicationController.txtClose": "Tancar", "DE.ApplicationController.unknownErrorText": "Error Desconegut.", "DE.ApplicationController.unsupportedBrowserErrorText": "El vostre navegador no és compatible.", "DE.ApplicationController.waitText": "Si us plau, esperi...", - "DE.ApplicationView.txtDownload": "Descàrrega", + "DE.ApplicationView.txtDownload": "\nDescarregar", + "DE.ApplicationView.txtDownloadDocx": "Desar com a .docx", + "DE.ApplicationView.txtDownloadPdf": "Desar com a pdf", "DE.ApplicationView.txtEmbed": "Incrustar", + "DE.ApplicationView.txtFileLocation": "Obrir ubicació del fitxer", "DE.ApplicationView.txtFullScreen": "Pantalla Completa", "DE.ApplicationView.txtPrint": "Imprimir", "DE.ApplicationView.txtShare": "Compartir" diff --git a/apps/documenteditor/embed/locale/tr.json b/apps/documenteditor/embed/locale/tr.json index 709222c29..2895da645 100644 --- a/apps/documenteditor/embed/locale/tr.json +++ b/apps/documenteditor/embed/locale/tr.json @@ -12,17 +12,26 @@ "DE.ApplicationController.errorAccessDeny": "Hakkınız olmayan bir eylem gerçekleştirmeye çalışıyorsunuz.
    Lütfen Belge Sunucu yöneticinize başvurun.", "DE.ApplicationController.errorDefaultMessage": "Hata kodu: %1", "DE.ApplicationController.errorFilePassProtect": "Döküman şifre korumalı ve açılamadı", + "DE.ApplicationController.errorSubmit": "Kaydetme başarısız oldu.", + "DE.ApplicationController.errorUpdateVersionOnDisconnect": "İnternet bağlantısı tekrar sağlandı, ve dosya versiyon değişti.
    Çalışmanıza devam etmeden önce, veri kaybını önlemeniz için dosyasının bir kopyasını indirmeniz ya da dosya içeriğini kopyalamanız ve sonrasında sayfayı yenilemeniz gerekmektedir.", "DE.ApplicationController.errorUserDrop": "Belgeye şu an erişilemiyor.", "DE.ApplicationController.notcriticalErrorTitle": "Uyarı", "DE.ApplicationController.scriptLoadError": "Bağlantı çok yavaş, bileşenlerin bazıları yüklenemedi. Lütfen sayfayı yenileyin.", + "DE.ApplicationController.textClear": "Tüm alanları temizle", "DE.ApplicationController.textLoadingDocument": "Döküman yükleniyor", + "DE.ApplicationController.textNext": "Sonraki alan", "DE.ApplicationController.textOf": "'in", + "DE.ApplicationController.textSubmit": "Kaydet", "DE.ApplicationController.txtClose": "Kapat", "DE.ApplicationController.unknownErrorText": "Bilinmeyen hata.", "DE.ApplicationController.unsupportedBrowserErrorText": "Tarayıcınız desteklenmiyor.", "DE.ApplicationController.waitText": "Lütfen bekleyin...", "DE.ApplicationView.txtDownload": "İndir", + "DE.ApplicationView.txtDownloadDocx": "docx olarak indir", + "DE.ApplicationView.txtDownloadPdf": "Pdf olarak indir", "DE.ApplicationView.txtEmbed": "Gömülü", + "DE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "DE.ApplicationView.txtFullScreen": "Tam Ekran", + "DE.ApplicationView.txtPrint": "Yazdır", "DE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/documenteditor/main/locale/tr.json b/apps/documenteditor/main/locale/tr.json index 0b6eae6c4..6151929fd 100644 --- a/apps/documenteditor/main/locale/tr.json +++ b/apps/documenteditor/main/locale/tr.json @@ -118,6 +118,7 @@ "Common.Views.About.txtPoweredBy": "Powered by", "Common.Views.About.txtTel": "tel:", "Common.Views.About.txtVersion": "Versiyon", + "Common.Views.AutoCorrectDialog.textAdd": "ekle", "Common.Views.Chat.textSend": "Gönder", "Common.Views.Comments.textAdd": "Ekle", "Common.Views.Comments.textAddComment": "Yorum Ekle", @@ -198,6 +199,9 @@ "Common.Views.Plugins.textLoading": "Yükleniyor", "Common.Views.Plugins.textStart": "Başlat", "Common.Views.Plugins.textStop": "Bitir", + "Common.Views.Protection.hintPwd": "Şifreyi değiştir veya sil", + "Common.Views.Protection.txtChangePwd": "Şifre Değiştir", + "Common.Views.Protection.txtInvisibleSignature": "Dijital imza ekle", "Common.Views.RenameDialog.textName": "Dosya adı", "Common.Views.RenameDialog.txtInvalidName": "Dosya adı aşağıdaki karakterlerden herhangi birini içeremez:", "Common.Views.ReviewChanges.hintNext": "Sonraki değişikliğe", @@ -844,6 +848,7 @@ "DE.Views.ChartSettings.txtTight": "Sıkı", "DE.Views.ChartSettings.txtTitle": "Grafik", "DE.Views.ChartSettings.txtTopAndBottom": "Üst ve alt", + "DE.Views.ControlSettingsDialog.textAdd": "ekle", "DE.Views.ControlSettingsDialog.textColor": "Renk", "DE.Views.ControlSettingsDialog.textDate": "Tarih formatı", "DE.Views.ControlSettingsDialog.textFormat": "Tarihi böyle göster", @@ -966,6 +971,7 @@ "DE.Views.DocumentHolder.textUpdateTOC": "İçindekiler tablosunu yenile", "DE.Views.DocumentHolder.textWrap": "Kaydırma Stili", "DE.Views.DocumentHolder.tipIsLocked": "Bu element şu an başka bir kullanıcı tarafından düzenleniyor.", + "DE.Views.DocumentHolder.toDictionaryText": "Sözlüğe ekle", "DE.Views.DocumentHolder.txtAddBottom": "Add bottom border", "DE.Views.DocumentHolder.txtAddFractionBar": "Add fraction bar", "DE.Views.DocumentHolder.txtAddHor": "Add horizontal line", @@ -1341,6 +1347,7 @@ "DE.Views.Links.tipContentsUpdate": "İçindekiler tablosunu yenile", "DE.Views.Links.tipInsertHyperlink": "Köprü ekle", "DE.Views.Links.tipNotes": "Dipnot ekle veya düzenle", + "DE.Views.ListSettingsDialog.textCenter": "Ortala", "DE.Views.ListSettingsDialog.txtAlign": "Hizalama", "DE.Views.ListSettingsDialog.txtFont": "Font ve Simge", "DE.Views.ListSettingsDialog.txtSymbol": "Simge", @@ -1445,6 +1452,7 @@ "DE.Views.ParagraphSettingsAdvanced.strDoubleStrike": "Üstü çift çizili", "DE.Views.ParagraphSettingsAdvanced.strIndentsLeftText": "Sol", "DE.Views.ParagraphSettingsAdvanced.strIndentsRightText": "Sağ", + "DE.Views.ParagraphSettingsAdvanced.strIndentsSpacingAfter": "sonra", "DE.Views.ParagraphSettingsAdvanced.strKeepLines": "Satırları birlikte tut", "DE.Views.ParagraphSettingsAdvanced.strKeepNext": "Sonrakiyle tut", "DE.Views.ParagraphSettingsAdvanced.strMargins": "Dolgu maddeleri", diff --git a/apps/presentationeditor/embed/locale/ca.json b/apps/presentationeditor/embed/locale/ca.json index afdefb4f2..e08517311 100644 --- a/apps/presentationeditor/embed/locale/ca.json +++ b/apps/presentationeditor/embed/locale/ca.json @@ -15,7 +15,7 @@ "PE.ApplicationController.errorFileSizeExceed": "La mida del fitxer excedeix la limitació establerta per al vostre servidor. Podeu contactar amb l'administrador del Document Server per obtenir més detalls.", "PE.ApplicationController.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "PE.ApplicationController.errorUserDrop": "Ara no es pot accedir al fitxer.", - "PE.ApplicationController.notcriticalErrorTitle": "Avis", + "PE.ApplicationController.notcriticalErrorTitle": "Advertiment", "PE.ApplicationController.scriptLoadError": "La connexió és massa lenta, alguns dels components no s’han pogut carregar. Torneu a carregar la pàgina.", "PE.ApplicationController.textLoadingDocument": "Carregant presentació", "PE.ApplicationController.textOf": "de", @@ -25,6 +25,7 @@ "PE.ApplicationController.waitText": "Si us plau, esperi...", "PE.ApplicationView.txtDownload": "Descàrrega", "PE.ApplicationView.txtEmbed": "Incrustar", + "PE.ApplicationView.txtFileLocation": "Obrir ubicació del fitxer", "PE.ApplicationView.txtFullScreen": "Pantalla Completa", "PE.ApplicationView.txtPrint": "Imprimir", "PE.ApplicationView.txtShare": "Compartir" diff --git a/apps/presentationeditor/embed/locale/tr.json b/apps/presentationeditor/embed/locale/tr.json index 98287a3ff..e2e851937 100644 --- a/apps/presentationeditor/embed/locale/tr.json +++ b/apps/presentationeditor/embed/locale/tr.json @@ -12,6 +12,7 @@ "PE.ApplicationController.errorAccessDeny": "Hakkınız olmayan bir eylem gerçekleştirmeye çalışıyorsunuz.
    Lütfen Belge Sunucu yöneticinize başvurun.", "PE.ApplicationController.errorDefaultMessage": "Hata kodu: %1", "PE.ApplicationController.errorFilePassProtect": "Döküman şifre korumalı ve açılamadı", + "PE.ApplicationController.errorUpdateVersionOnDisconnect": "İnternet bağlantısı tekrar sağlandı, ve dosya versiyon değişti.
    Çalışmanıza devam etmeden önce, veri kaybını önlemeniz için dosyasının bir kopyasını indirmeniz ya da dosya içeriğini kopyalamanız ve sonrasında sayfayı yenilemeniz gerekmektedir.", "PE.ApplicationController.errorUserDrop": "Belgeye şu an erişilemiyor.", "PE.ApplicationController.notcriticalErrorTitle": "Uyarı", "PE.ApplicationController.scriptLoadError": "Bağlantı çok yavaş, bileşenlerin bazıları yüklenemedi. Lütfen sayfayı yenileyin.", @@ -24,5 +25,6 @@ "PE.ApplicationView.txtDownload": "İndir", "PE.ApplicationView.txtEmbed": "Gömülü", "PE.ApplicationView.txtFullScreen": "Tam Ekran", + "PE.ApplicationView.txtPrint": "Yazdır", "PE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/presentationeditor/main/locale/de.json b/apps/presentationeditor/main/locale/de.json index 8728d69f5..2b2e31d2d 100644 --- a/apps/presentationeditor/main/locale/de.json +++ b/apps/presentationeditor/main/locale/de.json @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "PE.Views.RightMenu.txtChartSettings": "Diagramm-Einstellungen", "PE.Views.RightMenu.txtImageSettings": "Bild-Einstellungen", - "PE.Views.RightMenu.txtParagraphSettings": "Texte-Einstellungen", + "PE.Views.RightMenu.txtParagraphSettings": "Text-Einstellungen", "PE.Views.RightMenu.txtShapeSettings": "Form-Einstellungen", "PE.Views.RightMenu.txtSignatureSettings": "Signatureinstellungen", "PE.Views.RightMenu.txtSlideSettings": "Folien-Einstellungen", diff --git a/apps/spreadsheeteditor/embed/locale/ca.json b/apps/spreadsheeteditor/embed/locale/ca.json index 5ebe05d78..c32ab28f8 100644 --- a/apps/spreadsheeteditor/embed/locale/ca.json +++ b/apps/spreadsheeteditor/embed/locale/ca.json @@ -2,29 +2,30 @@ "common.view.modals.txtCopy": "Copiat al porta-retalls", "common.view.modals.txtEmbed": "Incrustar", "common.view.modals.txtHeight": "Alçada", - "common.view.modals.txtShare": "Compartir Enllaç", + "common.view.modals.txtShare": "Compartir enllaç", "common.view.modals.txtWidth": "Amplada", "SSE.ApplicationController.convertationErrorText": "Conversió Fallida", "SSE.ApplicationController.convertationTimeoutText": "Conversió fora de temps", "SSE.ApplicationController.criticalErrorTitle": "Error", "SSE.ApplicationController.downloadErrorText": "Descàrrega Fallida", - "SSE.ApplicationController.downloadTextText": "Descarregar Full de Càlcul", - "SSE.ApplicationController.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", - "SSE.ApplicationController.errorDefaultMessage": "Codi Error:%1", + "SSE.ApplicationController.downloadTextText": "Descarregar full de càlcul", + "SSE.ApplicationController.errorAccessDeny": "No teniu permisos per realitzar aquesta acció.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", + "SSE.ApplicationController.errorDefaultMessage": "Codi d'error:%1", "SSE.ApplicationController.errorFilePassProtect": "El fitxer està protegit amb contrasenya i no es pot obrir.", "SSE.ApplicationController.errorFileSizeExceed": "La mida del fitxer excedeix la limitació establerta per al vostre servidor. Podeu contactar amb l'administrador del Document Server per obtenir més detalls.", "SSE.ApplicationController.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "SSE.ApplicationController.errorUserDrop": "Ara no es pot accedir al fitxer.", - "SSE.ApplicationController.notcriticalErrorTitle": "Avis", + "SSE.ApplicationController.notcriticalErrorTitle": "Advertiment", "SSE.ApplicationController.scriptLoadError": "La connexió és massa lenta, alguns dels components no s’han pogut carregar. Torneu a carregar la pàgina.", "SSE.ApplicationController.textLoadingDocument": "Carregant full de càlcul", "SSE.ApplicationController.textOf": "de", "SSE.ApplicationController.txtClose": "Tancar", - "SSE.ApplicationController.unknownErrorText": "Error Desconegut.", + "SSE.ApplicationController.unknownErrorText": "Error desconegut.", "SSE.ApplicationController.unsupportedBrowserErrorText": "El vostre navegador no és compatible.", "SSE.ApplicationController.waitText": "Si us plau, esperi...", "SSE.ApplicationView.txtDownload": "Descàrrega", "SSE.ApplicationView.txtEmbed": "Incrustar", + "SSE.ApplicationView.txtFileLocation": "Obrir ubicació de l'arxiu", "SSE.ApplicationView.txtFullScreen": "Pantalla Completa", "SSE.ApplicationView.txtPrint": "Imprimir", "SSE.ApplicationView.txtShare": "Compartir" diff --git a/apps/spreadsheeteditor/embed/locale/tr.json b/apps/spreadsheeteditor/embed/locale/tr.json index e48cbdeab..55a6ebedb 100644 --- a/apps/spreadsheeteditor/embed/locale/tr.json +++ b/apps/spreadsheeteditor/embed/locale/tr.json @@ -12,6 +12,7 @@ "SSE.ApplicationController.errorAccessDeny": "Hakkınız olmayan bir eylem gerçekleştirmeye çalışıyorsunuz.
    Lütfen Belge Sunucu yöneticinize başvurun.", "SSE.ApplicationController.errorDefaultMessage": "Hata kodu: %1", "SSE.ApplicationController.errorFilePassProtect": "Döküman şifre korumalı ve açılamadı", + "SSE.ApplicationController.errorUpdateVersionOnDisconnect": "İnternet bağlantısı tekrar sağlandı, ve dosya versiyon değişti.
    Çalışmanıza devam etmeden önce, veri kaybını önlemeniz için dosyasının bir kopyasını indirmeniz ya da dosya içeriğini kopyalamanız ve sonrasında sayfayı yenilemeniz gerekmektedir.", "SSE.ApplicationController.errorUserDrop": "Belgeye şu an erişilemiyor.", "SSE.ApplicationController.notcriticalErrorTitle": "Uyarı", "SSE.ApplicationController.scriptLoadError": "Bağlantı çok yavaş, bileşenlerin bazıları yüklenemedi. Lütfen sayfayı yenileyin.", @@ -23,6 +24,7 @@ "SSE.ApplicationController.waitText": "Lütfen bekleyin...", "SSE.ApplicationView.txtDownload": "İndir", "SSE.ApplicationView.txtEmbed": "Gömülü", + "SSE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "SSE.ApplicationView.txtFullScreen": "Tam Ekran", "SSE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/de.json b/apps/spreadsheeteditor/main/locale/de.json index 7da8df2e5..b682b4c15 100644 --- a/apps/spreadsheeteditor/main/locale/de.json +++ b/apps/spreadsheeteditor/main/locale/de.json @@ -1914,7 +1914,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Ausgewählte Schriftfarbe nach oben", "SSE.Views.DocumentHolder.txtSparklines": "Sparklines", "SSE.Views.DocumentHolder.txtText": "Text", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Erweiterte Text-Einstellungen", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Erweiterte Paragraf-Einstellungen", "SSE.Views.DocumentHolder.txtTime": "Zeit", "SSE.Views.DocumentHolder.txtUngroup": "Gruppierung aufheben", "SSE.Views.DocumentHolder.txtWidth": "Breite", @@ -2019,7 +2019,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Autowiederherstellen", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Automatisch speichern", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Deaktiviert", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Auf dem Server speichern", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Speichern von Zwischenversionen", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Jede Minute", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Referenzstil", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Belarussisch", @@ -2679,7 +2679,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Zelleneinstellungen", "SSE.Views.RightMenu.txtChartSettings": "Diagrammeinstellungen", "SSE.Views.RightMenu.txtImageSettings": "Bild-Einstellungen", - "SSE.Views.RightMenu.txtParagraphSettings": "Texte-Einstellungen", + "SSE.Views.RightMenu.txtParagraphSettings": "Paragraf-Einstellungen", "SSE.Views.RightMenu.txtPivotSettings": "Einstellungen der Pivot-Tabelle", "SSE.Views.RightMenu.txtSettings": "Allgemeine Einstellungen", "SSE.Views.RightMenu.txtShapeSettings": "Form-Einstellungen", diff --git a/apps/spreadsheeteditor/main/locale/ro.json b/apps/spreadsheeteditor/main/locale/ro.json index d046ea724..1cd00ac47 100644 --- a/apps/spreadsheeteditor/main/locale/ro.json +++ b/apps/spreadsheeteditor/main/locale/ro.json @@ -78,6 +78,7 @@ "Common.define.conditionalData.textGreaterEq": "Mai mare sau egal", "Common.define.conditionalData.textIconSets": "Ansamble de icoane", "Common.define.conditionalData.textLast7days": "În ultimele 7 zile", + "Common.define.conditionalData.textLessEq": "Mai mic sau egal", "Common.define.conditionalData.textNotBlanks": "Nu conțime celule goale", "Common.define.conditionalData.textNotContains": "Nu conține", "Common.define.conditionalData.textNotErrors": "Nu conține erori", @@ -2064,6 +2065,7 @@ "SSE.Views.FormatRulesEditDlg.textIconStyle": "Stil icoană", "SSE.Views.FormatRulesEditDlg.textInsideBorders": "Borduri în interiorul ", "SSE.Views.FormatRulesEditDlg.textInvalidRange": "EROARE! Zonă de celule nu este validă", + "SSE.Views.FormatRulesEditDlg.textItem": "Element", "SSE.Views.FormatRulesEditDlg.textMiddleBorders": "Bordurile orizontale în interiorul ", "SSE.Views.FormatRulesEditDlg.textNewColor": "Adăugarea unei culori particularizate noi", "SSE.Views.FormatRulesEditDlg.tipBorders": "Borduri", diff --git a/apps/spreadsheeteditor/main/locale/sv.json b/apps/spreadsheeteditor/main/locale/sv.json index fd4f9860d..9c5a27ee4 100644 --- a/apps/spreadsheeteditor/main/locale/sv.json +++ b/apps/spreadsheeteditor/main/locale/sv.json @@ -12,6 +12,7 @@ "Common.define.chartData.textPie": "Paj", "Common.define.chartData.textSurface": "Yta", "Common.define.chartData.textWinLossSpark": "Vinst / förlust", + "Common.define.conditionalData.textDuplicate": "Duplicera", "Common.Translation.warnFileLocked": "Dokumentet används av ett annat program. Du kan fortsätta redigera och spara den som en kopia.", "Common.UI.ColorButton.textNewColor": "Lägg till ny egen färg", "Common.UI.ComboBorderSize.txtNoBorders": "Inga ramar", @@ -55,6 +56,7 @@ "Common.Views.About.txtPoweredBy": "Powered by", "Common.Views.About.txtTel": "tel.:", "Common.Views.AutoCorrectDialog.textAdd": "Lägg till", + "Common.Views.AutoCorrectDialog.textDelete": "Radera", "Common.Views.Chat.textSend": "Skicka", "Common.Views.Comments.textAdd": "Lägg till", "Common.Views.Comments.textAddComment": "Lägg till kommentar", @@ -791,6 +793,7 @@ "SSE.Controllers.Toolbar.txtBracket_UppLim": "Parenteser", "SSE.Controllers.Toolbar.txtBracket_UppLim_NoneOpen": "Enkel parentes", "SSE.Controllers.Toolbar.txtBracket_UppLim_OpenNone": "Enkel parentes", + "SSE.Controllers.Toolbar.txtDeleteCells": "Radera celler", "SSE.Controllers.Toolbar.txtExpand": "Expandera och sortera", "SSE.Controllers.Toolbar.txtExpandSort": "Data bredvid markeringen kommer inte att sorteras. Vill du utöka markeringen så att den inkluderar intilliggande data eller fortsätta att sortera de markerade cellerna?", "SSE.Controllers.Toolbar.txtFractionDifferential_1": "Differentiell", @@ -1248,6 +1251,7 @@ "SSE.Views.DocumentHolder.textShapeAlignRight": "Högerjustera", "SSE.Views.DocumentHolder.textShapeAlignTop": "Justera till toppen", "SSE.Views.DocumentHolder.textUndo": "Ångra", + "SSE.Views.DocumentHolder.textUnFreezePanes": "Lås upp paneler", "SSE.Views.DocumentHolder.topCellText": "Justera till toppen", "SSE.Views.DocumentHolder.txtAccounting": "Redovisning", "SSE.Views.DocumentHolder.txtAddComment": "Lägg till kommentar", @@ -1415,6 +1419,8 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Generell", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Sidinställningar", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Stavningskontroll", + "SSE.Views.FormatRulesManagerDlg.textDelete": "Radera", + "SSE.Views.FormatRulesManagerDlg.textNew": "Ny", "SSE.Views.FormatSettingsDialog.textCategory": "Kategori", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimal", "SSE.Views.FormatSettingsDialog.textFormat": "Format", @@ -2139,6 +2145,7 @@ "SSE.Views.Toolbar.textTabInsert": "Infoga", "SSE.Views.Toolbar.textTabLayout": "Layout", "SSE.Views.Toolbar.textTabProtect": "Skydd", + "SSE.Views.Toolbar.textTabView": "Visa", "SSE.Views.Toolbar.textTopBorders": "Ram över", "SSE.Views.Toolbar.textUnderline": "Understrykning", "SSE.Views.Toolbar.textWidth": "Bredd", @@ -2283,5 +2290,29 @@ "SSE.Views.ValueFieldSettingsDialog.txtPercentOfTotal": "Procent av rad", "SSE.Views.ValueFieldSettingsDialog.txtShowAs": "Visa värden som", "SSE.Views.ValueFieldSettingsDialog.txtSourceName": "Källnamn:", - "SSE.Views.ValueFieldSettingsDialog.txtSum": "Summa" + "SSE.Views.ValueFieldSettingsDialog.txtSum": "Summa", + "SSE.Views.ViewManagerDlg.closeButtonText": "Stäng", + "SSE.Views.ViewManagerDlg.textDelete": "Radera", + "SSE.Views.ViewManagerDlg.textDuplicate": "Duplicera", + "SSE.Views.ViewManagerDlg.textEmpty": "Inga vyer har skapats än.", + "SSE.Views.ViewManagerDlg.textGoTo": "Gå till vy", + "SSE.Views.ViewManagerDlg.textNew": "Ny", + "SSE.Views.ViewManagerDlg.textRename": "Döp om", + "SSE.Views.ViewManagerDlg.textRenameLabel": "Döp om vy", + "SSE.Views.ViewManagerDlg.textViews": "Arkvyer", + "SSE.Views.ViewManagerDlg.txtTitle": "Vyhanterare", + "SSE.Views.ViewTab.capBtnFreeze": "Lås paneler", + "SSE.Views.ViewTab.capBtnSheetView": "Arkvy", + "SSE.Views.ViewTab.textClose": "Stäng", + "SSE.Views.ViewTab.textCreate": "Ny", + "SSE.Views.ViewTab.textDefault": "Standard", + "SSE.Views.ViewTab.textFormula": "Formelfält", + "SSE.Views.ViewTab.textGridlines": "Stödlinjer", + "SSE.Views.ViewTab.textHeadings": "Rubriker", + "SSE.Views.ViewTab.textManager": "Vyhanterare", + "SSE.Views.ViewTab.textZoom": "Zooma", + "SSE.Views.ViewTab.tipClose": "Stäng arkvy", + "SSE.Views.ViewTab.tipCreate": "Skapa arkvy", + "SSE.Views.ViewTab.tipFreeze": "Lås paneler", + "SSE.Views.ViewTab.tipSheetView": "Arkvy" } \ No newline at end of file From d484103500dba6cda2b4c6477fbdf01d86f932fe Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Fri, 25 Jun 2021 11:53:43 +0300 Subject: [PATCH 150/376] [themes] load external themes --- apps/common/main/lib/controller/Themes.js | 76 ++++++++++++------- apps/common/main/lib/util/themeinit.js | 28 +++++++ .../main/resources/themes/classic-light.json | 20 +++++ apps/common/main/resources/themes/themes.json | 5 ++ apps/documenteditor/main/index.html | 1 + 5 files changed, 104 insertions(+), 26 deletions(-) create mode 100644 apps/common/main/lib/util/themeinit.js create mode 100644 apps/common/main/resources/themes/classic-light.json create mode 100644 apps/common/main/resources/themes/themes.json diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index 32373d23b..c43c88411 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -12,21 +12,34 @@ define([ var themes_map = { 'theme-light': { text: locale.txtThemeLight || 'Light', - type: 'light' + type: 'light', + source: 'static', }, 'theme-classic-light': { text: locale.txtThemeClassicLight || 'Classic Light', - type: 'light' + type: 'light', + source: 'static', }, 'theme-dark': { text: locale.txtThemeDark || 'Dark', - type: 'dark' + type: 'dark', + source: 'static', }, } + + if ( !!window.currentLoaderTheme ) { + themes_map[currentLoaderTheme.id] = {}; + window.currentLoaderTheme = undefined; + } + var id_default_light_theme = 'theme-classic-light', id_default_dark_theme = 'theme-dark'; var name_colors = [ + "toolbar-header-document", + "toolbar-header-spreadsheet", + "toolbar-header-presentation", + "background-normal", "background-toolbar", "background-toolbar-additional", @@ -169,33 +182,40 @@ define([ } var get_themes_config = function (url) { - fetch(url, { - method: 'get', - headers: { - 'Accept': 'application/json', - }, - }).then(function(response) { - if (!response.ok) { - throw new Error('server error'); + Common.Utils.loadConfig(url, + function ( obj ) { + if ( obj != 'error' ) { + parse_themes_object(obj); + } } - return response.json(); - }).then(function(response) { - if ( response.then ) { - // return response.json(); - } else { - parse_themes_object(response); - - /* to break promises chain */ - throw new Error('loaded'); - } - }).catch(function(e) { - if ( e.message == 'loaded' ) { - } else console.log('fetch error: ' + e); - }); + ); + // fetch(url, { + // method: 'get', + // headers: { + // 'Accept': 'application/json', + // }, + // }).then(function(response) { + // if (!response.ok) { + // throw new Error('server error'); + // } + // return response.json(); + // }).then(function(response) { + // if ( response.then ) { + // // return response.json(); + // } else { + // parse_themes_object(response); + // + // /* to break promises chain */ + // throw new Error('loaded'); + // } + // }).catch(function(e) { + // if ( e.message == 'loaded' ) { + // } else console.log('fetch error: ' + e); + // }); } var on_document_ready = function (el) { - // get_themes_config('../../common/main/resources/themes/themes.json') + get_themes_config('../../common/main/resources/themes/themes.json'); } var get_ui_theme_name = function (objtheme) { @@ -290,6 +310,10 @@ define([ type: obj.type, }; + if ( themes_map[id].source != 'static' ) { + theme_obj.colors = obj; + } + Common.localStorage.setItem('ui-theme', JSON.stringify(theme_obj)); } diff --git a/apps/common/main/lib/util/themeinit.js b/apps/common/main/lib/util/themeinit.js new file mode 100644 index 000000000..6b3ea3839 --- /dev/null +++ b/apps/common/main/lib/util/themeinit.js @@ -0,0 +1,28 @@ + ++function init_themes() { + var objtheme = localStorage.getItem("ui-theme"); + if ( typeof(objtheme) == 'string' && + objtheme.startsWith("{") && objtheme.endsWith("}") ) + { + objtheme = JSON.parse(objtheme); + } + + var ui_theme_name = objtheme && typeof(objtheme) == 'object' ? objtheme.id : + typeof(objtheme) == 'string' ? objtheme : localStorage.getItem("ui-theme-id"); + + if ( !!ui_theme_name ) { + if ( !!objtheme && !!objtheme.colors ) { + var colors = []; + for ( var c in objtheme.colors ) { + colors.push('--' + c + ':' + objtheme.colors[c]); + } + + var style = document.createElement('style'); + style.type = 'text/css'; + style.innerHTML = '.' + ui_theme_name + '{'+ colors.join(';') +';}'; + document.getElementsByTagName('head')[0].appendChild(style); + + window.currentLoaderTheme = objtheme; + } + } +}(); \ No newline at end of file diff --git a/apps/common/main/resources/themes/classic-light.json b/apps/common/main/resources/themes/classic-light.json new file mode 100644 index 000000000..deb591dca --- /dev/null +++ b/apps/common/main/resources/themes/classic-light.json @@ -0,0 +1,20 @@ +{ + "name": "Classic Light 2", + "id": "theme-classic-light2", + "type": "light", + "colors": { + "toolbar-header-document": "#446995", + "toolbar-header-spreadsheet": "#40865c", + "toolbar-header-presentation": "#aa5252", + + "background-normal": "#f00", + "background-toolbar": "#f100f1", + "background-toolbar-additional": "#f100f1", + "background-primary-dialog-button": "#7d858c", + "background-tab-underline": "#444", + "background-notification-popover": "#fcfed7", + "background-notification-badge": "#ffd112", + "background-scrim": "rgba(0,0,0, 0.2)", + "background-loader": "rgba(0,0,0, .65)" + } +} \ No newline at end of file diff --git a/apps/common/main/resources/themes/themes.json b/apps/common/main/resources/themes/themes.json new file mode 100644 index 000000000..3e8afe8db --- /dev/null +++ b/apps/common/main/resources/themes/themes.json @@ -0,0 +1,5 @@ +{ + "themes": [ + "../../common/main/resources/themes/classic-light.json" + ] +} \ No newline at end of file diff --git a/apps/documenteditor/main/index.html b/apps/documenteditor/main/index.html index 0f0757a29..d6b135425 100644 --- a/apps/documenteditor/main/index.html +++ b/apps/documenteditor/main/index.html @@ -242,6 +242,7 @@ if(/MSIE \d|Trident.*rv:/.test(navigator.userAgent)) document.write(' + From daa60bdd880ecee47ddb44d7fc6e2c1a40a1f249 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Fri, 25 Jun 2021 18:14:24 +0300 Subject: [PATCH 151/376] [SSE mobile] Fix Bug 47962 --- apps/spreadsheeteditor/mobile/src/store/appOptions.js | 3 ++- apps/spreadsheeteditor/mobile/src/view/CellEditor.jsx | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/store/appOptions.js b/apps/spreadsheeteditor/mobile/src/store/appOptions.js index b426047ca..ce4a99ec8 100644 --- a/apps/spreadsheeteditor/mobile/src/store/appOptions.js +++ b/apps/spreadsheeteditor/mobile/src/store/appOptions.js @@ -71,7 +71,8 @@ export class storeAppOptions { } setPermissionOptions (document, licType, params, permissions, isSupportEditFeature) { - permissions.edit = params.asc_getRights() !== Asc.c_oRights.Edit ? false : true; + if (params.asc_getRights() !== Asc.c_oRights.Edit) + permissions.edit = false; this.canAutosave = true; this.canAnalytics = params.asc_getIsAnalyticsEnable(); this.canLicense = (licType === Asc.c_oLicenseResult.Success || licType === Asc.c_oLicenseResult.SuccessLimit); diff --git a/apps/spreadsheeteditor/mobile/src/view/CellEditor.jsx b/apps/spreadsheeteditor/mobile/src/view/CellEditor.jsx index c1439de24..9367e06a9 100644 --- a/apps/spreadsheeteditor/mobile/src/view/CellEditor.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/CellEditor.jsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; import { Input, View, Button, Link } from 'framework7-react'; +import {observer, inject} from "mobx-react"; const viewStyle = { height: 30 @@ -12,6 +13,8 @@ const contentStyle = { const CellEditorView = props => { const [expanded, setExpanded] = useState(false); + const storeAppOptions = props.storeAppOptions; + const isEdit = storeAppOptions.isEdit; const expandClick = e => { setExpanded(!expanded); @@ -20,7 +23,7 @@ const CellEditorView = props => { return @@ -33,4 +36,4 @@ const CellEditorView = props => { ; }; -export default CellEditorView; +export default inject("storeAppOptions")(observer(CellEditorView)); From 26b2384ba17041493abf53072fce5defe5159bfd Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 25 Jun 2021 18:40:02 +0300 Subject: [PATCH 152/376] Update translation --- apps/documenteditor/embed/locale/ca.json | 13 +- apps/documenteditor/embed/locale/tr.json | 9 ++ apps/documenteditor/main/locale/el.json | 16 +- apps/documenteditor/main/locale/en.json | 4 +- apps/documenteditor/main/locale/es.json | 6 +- apps/documenteditor/main/locale/fr.json | 12 +- apps/documenteditor/main/locale/pt.json | 2 +- apps/documenteditor/main/locale/ro.json | 43 ++++- apps/documenteditor/main/locale/ru.json | 6 +- apps/documenteditor/main/locale/tr.json | 8 + apps/documenteditor/main/locale/zh.json | 2 +- apps/presentationeditor/embed/locale/ca.json | 3 +- apps/presentationeditor/embed/locale/tr.json | 2 + apps/presentationeditor/main/locale/de.json | 4 +- apps/presentationeditor/main/locale/el.json | 8 +- apps/presentationeditor/main/locale/en.json | 4 +- apps/presentationeditor/main/locale/es.json | 10 +- apps/presentationeditor/main/locale/fr.json | 14 +- apps/presentationeditor/main/locale/pt.json | 6 +- apps/presentationeditor/main/locale/ro.json | 27 +++- apps/presentationeditor/main/locale/ru.json | 6 +- apps/presentationeditor/main/locale/zh.json | 2 +- apps/spreadsheeteditor/embed/locale/ca.json | 13 +- apps/spreadsheeteditor/embed/locale/tr.json | 2 + apps/spreadsheeteditor/main/locale/de.json | 6 +- apps/spreadsheeteditor/main/locale/el.json | 34 ++++ apps/spreadsheeteditor/main/locale/en.json | 4 +- apps/spreadsheeteditor/main/locale/es.json | 10 +- apps/spreadsheeteditor/main/locale/fr.json | 14 +- apps/spreadsheeteditor/main/locale/pt.json | 114 ++++++++++++- apps/spreadsheeteditor/main/locale/ro.json | 159 ++++++++++++++++++- apps/spreadsheeteditor/main/locale/ru.json | 6 +- apps/spreadsheeteditor/main/locale/sv.json | 33 +++- apps/spreadsheeteditor/main/locale/zh.json | 2 +- 34 files changed, 512 insertions(+), 92 deletions(-) diff --git a/apps/documenteditor/embed/locale/ca.json b/apps/documenteditor/embed/locale/ca.json index fc54c1ace..b91723786 100644 --- a/apps/documenteditor/embed/locale/ca.json +++ b/apps/documenteditor/embed/locale/ca.json @@ -10,21 +10,30 @@ "DE.ApplicationController.downloadErrorText": "Descàrrega fallida.", "DE.ApplicationController.downloadTextText": "Descarregant document...", "DE.ApplicationController.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", - "DE.ApplicationController.errorDefaultMessage": "Error codi:%1 ", + "DE.ApplicationController.errorDefaultMessage": "Codi d'error:%1", + "DE.ApplicationController.errorEditingDownloadas": "S'ha produït un error durant el treball amb el document.
    Utilitzeu l'opció \"Desar com a ...\" per desar la còpia de seguretat del fitxer al disc dur del vostre ordinador.", "DE.ApplicationController.errorFilePassProtect": "El fitxer està protegit amb contrasenya i no es pot obrir.", "DE.ApplicationController.errorFileSizeExceed": "La mida del fitxer excedeix la limitació establerta per al vostre servidor. Podeu contactar amb l'administrador del Document Server per obtenir més detalls.", + "DE.ApplicationController.errorSubmit": "Error en enviar", "DE.ApplicationController.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "DE.ApplicationController.errorUserDrop": "Ara no es pot accedir al fitxer.", "DE.ApplicationController.notcriticalErrorTitle": "Avis", "DE.ApplicationController.scriptLoadError": "La connexió és massa lenta, alguns dels components no s’han pogut carregar. Torneu a carregar la pàgina.", + "DE.ApplicationController.textClear": "Esborrar tots els camps", "DE.ApplicationController.textLoadingDocument": "Carregant document", + "DE.ApplicationController.textNext": "Següent camp", "DE.ApplicationController.textOf": "de", + "DE.ApplicationController.textSubmit": "Enviar", + "DE.ApplicationController.textSubmited": "Formulari enviat amb èxit
    Faci clic per a tancar el consell", "DE.ApplicationController.txtClose": "Tancar", "DE.ApplicationController.unknownErrorText": "Error Desconegut.", "DE.ApplicationController.unsupportedBrowserErrorText": "El vostre navegador no és compatible.", "DE.ApplicationController.waitText": "Si us plau, esperi...", - "DE.ApplicationView.txtDownload": "Descàrrega", + "DE.ApplicationView.txtDownload": "\nDescarregar", + "DE.ApplicationView.txtDownloadDocx": "Desar com a .docx", + "DE.ApplicationView.txtDownloadPdf": "Desar com a pdf", "DE.ApplicationView.txtEmbed": "Incrustar", + "DE.ApplicationView.txtFileLocation": "Obrir ubicació del fitxer", "DE.ApplicationView.txtFullScreen": "Pantalla Completa", "DE.ApplicationView.txtPrint": "Imprimir", "DE.ApplicationView.txtShare": "Compartir" diff --git a/apps/documenteditor/embed/locale/tr.json b/apps/documenteditor/embed/locale/tr.json index 709222c29..2895da645 100644 --- a/apps/documenteditor/embed/locale/tr.json +++ b/apps/documenteditor/embed/locale/tr.json @@ -12,17 +12,26 @@ "DE.ApplicationController.errorAccessDeny": "Hakkınız olmayan bir eylem gerçekleştirmeye çalışıyorsunuz.
    Lütfen Belge Sunucu yöneticinize başvurun.", "DE.ApplicationController.errorDefaultMessage": "Hata kodu: %1", "DE.ApplicationController.errorFilePassProtect": "Döküman şifre korumalı ve açılamadı", + "DE.ApplicationController.errorSubmit": "Kaydetme başarısız oldu.", + "DE.ApplicationController.errorUpdateVersionOnDisconnect": "İnternet bağlantısı tekrar sağlandı, ve dosya versiyon değişti.
    Çalışmanıza devam etmeden önce, veri kaybını önlemeniz için dosyasının bir kopyasını indirmeniz ya da dosya içeriğini kopyalamanız ve sonrasında sayfayı yenilemeniz gerekmektedir.", "DE.ApplicationController.errorUserDrop": "Belgeye şu an erişilemiyor.", "DE.ApplicationController.notcriticalErrorTitle": "Uyarı", "DE.ApplicationController.scriptLoadError": "Bağlantı çok yavaş, bileşenlerin bazıları yüklenemedi. Lütfen sayfayı yenileyin.", + "DE.ApplicationController.textClear": "Tüm alanları temizle", "DE.ApplicationController.textLoadingDocument": "Döküman yükleniyor", + "DE.ApplicationController.textNext": "Sonraki alan", "DE.ApplicationController.textOf": "'in", + "DE.ApplicationController.textSubmit": "Kaydet", "DE.ApplicationController.txtClose": "Kapat", "DE.ApplicationController.unknownErrorText": "Bilinmeyen hata.", "DE.ApplicationController.unsupportedBrowserErrorText": "Tarayıcınız desteklenmiyor.", "DE.ApplicationController.waitText": "Lütfen bekleyin...", "DE.ApplicationView.txtDownload": "İndir", + "DE.ApplicationView.txtDownloadDocx": "docx olarak indir", + "DE.ApplicationView.txtDownloadPdf": "Pdf olarak indir", "DE.ApplicationView.txtEmbed": "Gömülü", + "DE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "DE.ApplicationView.txtFullScreen": "Tam Ekran", + "DE.ApplicationView.txtPrint": "Yazdır", "DE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/documenteditor/main/locale/el.json b/apps/documenteditor/main/locale/el.json index 2a6409d74..cfe438cef 100644 --- a/apps/documenteditor/main/locale/el.json +++ b/apps/documenteditor/main/locale/el.json @@ -370,6 +370,7 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Αφαίρεση των Σχολίων Μου", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Αφαίρεση Πρόσφατων Σχολίων Μου", "Common.Views.ReviewChanges.txtCommentRemove": "Αφαίρεση", + "Common.Views.ReviewChanges.txtCommentResolve": "Επίλυση", "Common.Views.ReviewChanges.txtCommentResolveAll": "Επίλυση όλων των σχολίων", "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Επίλυση των τρεχόντων σχολίων", "Common.Views.ReviewChanges.txtCommentResolveMy": "Επίλυση των σχολίων μου", @@ -1688,7 +1689,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Θα χρειαστεί να αποδεχτείτε τις αλλαγές προτού τις δείτε", "DE.Views.FileMenuPanels.Settings.strFast": "Γρήγορη", "DE.Views.FileMenuPanels.Settings.strFontRender": "Βελτιστοποίηση Γραμματοσειράς", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Πάντα να αποθηκεύεται σε διακομιστή (διαφορετικά αποθηκεύεται στο διακομιστή κατά το κλείσιμο του εγγράφου)", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Προσθήκη έκδοσης στο χώρο αποθήκευσης μετά την Αποθήκευση ή Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Ενεργοποίηση ιερογλυφικών", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Ενεργοποίηση προβολής σχολίων", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Ρυθμίσεις Mακροεντολών", @@ -1710,7 +1711,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Αυτόματη αποθήκευση", "DE.Views.FileMenuPanels.Settings.textCompatible": "Συμβατότητα", "DE.Views.FileMenuPanels.Settings.textDisabled": "Απενεργοποιημένο", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Αποθήκευση στον Διακομιστή", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Αποθήκευση ενδιάμεσων εκδόσεων", "DE.Views.FileMenuPanels.Settings.textMinute": "Κάθε Λεπτό", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Τα αρχεία να γίνονται συμβατά με παλαιότερες εκδόσεις MS Word όταν αποθηκεύονται ως DOCX", "DE.Views.FileMenuPanels.Settings.txtAll": "Προβολή Όλων", @@ -1745,6 +1746,7 @@ "DE.Views.FormSettings.textDisconnect": "Αποσύνδεση", "DE.Views.FormSettings.textDropDown": "Πτυσσόμενη Λίστα", "DE.Views.FormSettings.textField": "Πεδίο Κειμένου", + "DE.Views.FormSettings.textFixed": "Πεδίο σταθερού μεγέθους", "DE.Views.FormSettings.textFromFile": "Από Αρχείο", "DE.Views.FormSettings.textFromStorage": "Από Αποθηκευτικό Χώρο", "DE.Views.FormSettings.textFromUrl": "Από διεύθυνση URL", @@ -2473,8 +2475,13 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Χωρίς περιγράμματα", "DE.Views.TableSettingsAdvanced.txtPercent": "Επί τοις εκατό", "DE.Views.TableSettingsAdvanced.txtPt": "Σημείο", + "DE.Views.TableToTextDialog.textEmpty": "Πρέπει να εισάγετε έναν χαρακτήρα για το προσαρμοσμένο διαχωριστικό.", "DE.Views.TableToTextDialog.textNested": "Μετατροπή εμφωλευμένων πινάκων", "DE.Views.TableToTextDialog.textOther": "Άλλο", + "DE.Views.TableToTextDialog.textPara": "Σημεία παραγράφων", + "DE.Views.TableToTextDialog.textSemicolon": "Ερωτηματικό", + "DE.Views.TableToTextDialog.textSeparator": "Ξεχωρίστε το κείμενο με", + "DE.Views.TableToTextDialog.textTab": "Στηλοθέτες", "DE.Views.TableToTextDialog.textTitle": "Μετατροπή Πίνακα σε Κείμενο", "DE.Views.TextArtSettings.strColor": "Χρώμα", "DE.Views.TextArtSettings.strFill": "Γέμισμα", @@ -2502,10 +2509,15 @@ "DE.Views.TextToTableDialog.textAutofit": "Συμπεριφορά Αυτόματης Προσαρμογής", "DE.Views.TextToTableDialog.textColumns": "Στήλες", "DE.Views.TextToTableDialog.textContents": "Αυτόματη προσαρμογή στα περιεχόμενα", + "DE.Views.TextToTableDialog.textEmpty": "Πρέπει να εισάγετε έναν χαρακτήρα για το προσαρμοσμένο διαχωριστικό.", "DE.Views.TextToTableDialog.textFixed": "Σταθερό πλάτος στήλης", "DE.Views.TextToTableDialog.textOther": "Άλλο", "DE.Views.TextToTableDialog.textPara": "Παράγραφοι", "DE.Views.TextToTableDialog.textRows": "Γραμμές", + "DE.Views.TextToTableDialog.textSemicolon": "Ερωτηματικό", + "DE.Views.TextToTableDialog.textSeparator": "Ξεχωρίστε το κείμενο σε", + "DE.Views.TextToTableDialog.textTab": "Στηλοθέτες", + "DE.Views.TextToTableDialog.textTableSize": "Μέγεθος πίνακα", "DE.Views.TextToTableDialog.textTitle": "Μετατροπή Κειμένου σε Πίνακα", "DE.Views.TextToTableDialog.textWindow": "Αυτόματη προσαρμογή στο παράθυρο", "DE.Views.TextToTableDialog.txtAutoText": "Αυτόματα", diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index d6a5bcb78..0bf0d0acb 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -1689,7 +1689,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "You will need to accept changes before you can see them", "DE.Views.FileMenuPanels.Settings.strFast": "Fast", "DE.Views.FileMenuPanels.Settings.strFontRender": "Font Hinting", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Always save to server (otherwise save to server on document close)", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Add version to storage after clicking Save or Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Turn on hieroglyphs", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Turn on display of the comments", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Macros Settings", @@ -1711,7 +1711,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Autosave", "DE.Views.FileMenuPanels.Settings.textCompatible": "Compatibility", "DE.Views.FileMenuPanels.Settings.textDisabled": "Disabled", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Save to Server", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Saving intermediate versions", "DE.Views.FileMenuPanels.Settings.textMinute": "Every Minute", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Make the files compatible with older MS Word versions when saved as DOCX", "DE.Views.FileMenuPanels.Settings.txtAll": "View All", diff --git a/apps/documenteditor/main/locale/es.json b/apps/documenteditor/main/locale/es.json index 1f08bc52f..bb2a4e06d 100644 --- a/apps/documenteditor/main/locale/es.json +++ b/apps/documenteditor/main/locale/es.json @@ -182,7 +182,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "El documento ha sido cambiado por otro usuario.
    Por favor haga clic para guardar sus cambios y recargue las actualizaciones.", "Common.UI.ThemeColorPalette.textStandartColors": "Colores estándar", "Common.UI.ThemeColorPalette.textThemeColors": "Colores de tema", - "Common.UI.Themes.txtThemeClassicLight": "Claro clásico", + "Common.UI.Themes.txtThemeClassicLight": "Clásico claro", "Common.UI.Themes.txtThemeDark": "Oscuro", "Common.UI.Themes.txtThemeLight": "Claro", "Common.UI.Window.cancelButtonText": "Cancelar", @@ -1689,7 +1689,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Usted tendrá que aceptar los cambios antes de poder verlos", "DE.Views.FileMenuPanels.Settings.strFast": "rápido", "DE.Views.FileMenuPanels.Settings.strFontRender": "Hinting", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Siempre guardar en el servidor (de lo contrario guardar en el servidor al cerrar documento)", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Añadir la versión al almacenamiento después de hacer clic en Guardar o Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Activar jeroglíficos", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Activar opción de demostración de comentarios", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Ajustes de macros", @@ -1711,7 +1711,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Guardar automáticamente", "DE.Views.FileMenuPanels.Settings.textCompatible": "Compatibilidad", "DE.Views.FileMenuPanels.Settings.textDisabled": "Desactivado", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Guardar al Servidor", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Guardar versiones intermedias", "DE.Views.FileMenuPanels.Settings.textMinute": "Cada minuto", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Hacer que los archivos sean compatibles con versiones anteriores de MS Word cuando se guarden como DOCX", "DE.Views.FileMenuPanels.Settings.txtAll": "Ver todo", diff --git a/apps/documenteditor/main/locale/fr.json b/apps/documenteditor/main/locale/fr.json index e5b1a91eb..4452b337f 100644 --- a/apps/documenteditor/main/locale/fr.json +++ b/apps/documenteditor/main/locale/fr.json @@ -182,7 +182,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Le document a été modifié par un autre utilisateur.
    Cliquez pour enregistrer vos modifications et recharger les mises à jour.", "Common.UI.ThemeColorPalette.textStandartColors": "Couleurs standard", "Common.UI.ThemeColorPalette.textThemeColors": "Couleurs de thème", - "Common.UI.Themes.txtThemeClassicLight": "Clair classique", + "Common.UI.Themes.txtThemeClassicLight": "Classique clair", "Common.UI.Themes.txtThemeDark": "Sombre", "Common.UI.Themes.txtThemeLight": "Clair", "Common.UI.Window.cancelButtonText": "Annuler", @@ -509,8 +509,8 @@ "DE.Controllers.Main.errorDataRange": "Plage de données incorrecte.", "DE.Controllers.Main.errorDefaultMessage": "Code d'erreur: %1", "DE.Controllers.Main.errorDirectUrl": "Vérifiez le lien vers le document.
    Assurez-vous que c'est un lien de téléchargement direct. ", - "DE.Controllers.Main.errorEditingDownloadas": "Une erreur s'est produite lors du travail avec le document.
    Utilisez l'option 'Télécharger comme...' pour enregistrer une copie de sauvegarde du fichier sur le disque dur de votre ordinateur.", - "DE.Controllers.Main.errorEditingSaveas": "Une erreur s'est produite lors du travail avec le document.
    Utilisez l'option 'Enregistrer comme...' pour enregistrer une copie de sauvegarde sur le disque dur de votre ordinateur. ", + "DE.Controllers.Main.errorEditingDownloadas": "Une erreure s'est produite lors du travail avec le document.
    Utilisez l'option 'Télécharger comme...' pour enregistrer une copie de sauvegarde du fichier sur le disque dur de votre ordinateur.", + "DE.Controllers.Main.errorEditingSaveas": "Une erreure s'est produite lors du travail avec le document.
    Utilisez l'option 'Enregistrer comme...' pour enregistrer une copie de sauvegarde sur le disque dur de votre ordinateur. ", "DE.Controllers.Main.errorEmailClient": "Pas de client messagerie trouvé", "DE.Controllers.Main.errorFilePassProtect": "Le fichier est protégé par le mot de passe et ne peut être ouvert.", "DE.Controllers.Main.errorFileSizeExceed": "La taille du fichier dépasse les limites établies sur votre serveur.
    Veuillez contacter votre administrateur de Document Server pour obtenir plus d'information. ", @@ -1689,7 +1689,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Avant de pouvoir afficher les modifications, vous avez besoin de les accépter ", "DE.Views.FileMenuPanels.Settings.strFast": "Rapide", "DE.Views.FileMenuPanels.Settings.strFontRender": "Hinting de la police", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Toujours enregistrer sur le serveur ( sinon enregistrer sur le serveur lors de la fermeture du document )", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Ajouter une version à l'espace de stockage en cliquant Enregistrer ou Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Activer des hiéroglyphes", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Activer l'affichage des commentaires", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Réglages macros", @@ -1711,7 +1711,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Enregistrement automatique", "DE.Views.FileMenuPanels.Settings.textCompatible": "Compatibilité", "DE.Views.FileMenuPanels.Settings.textDisabled": "Désactivé", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Enregistrer sur le serveur", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Enregistrer des versions intermédiaires", "DE.Views.FileMenuPanels.Settings.textMinute": "Chaque minute", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Rendre les fichiers compatibles avec les anciennes versions de MS Word lorsqu'ils sont enregistrés au format DOCX", "DE.Views.FileMenuPanels.Settings.txtAll": "Surligner toutes les modifications", @@ -2753,4 +2753,4 @@ "DE.Views.WatermarkSettingsDialog.textUnderline": "Souligné", "DE.Views.WatermarkSettingsDialog.tipFontName": "Nom de la police", "DE.Views.WatermarkSettingsDialog.tipFontSize": "Taille de police" -} +} \ No newline at end of file diff --git a/apps/documenteditor/main/locale/pt.json b/apps/documenteditor/main/locale/pt.json index 28ff2d255..711516688 100644 --- a/apps/documenteditor/main/locale/pt.json +++ b/apps/documenteditor/main/locale/pt.json @@ -182,7 +182,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "O documento foi alterado por outro usuário.
    Clique para salvar suas alterações e recarregar as atualizações.", "Common.UI.ThemeColorPalette.textStandartColors": "Cores padronizadas", "Common.UI.ThemeColorPalette.textThemeColors": "Cores de tema", - "Common.UI.Themes.txtThemeClassicLight": "Claro clássico", + "Common.UI.Themes.txtThemeClassicLight": "Clássico claro", "Common.UI.Themes.txtThemeDark": "Escuro", "Common.UI.Themes.txtThemeLight": "Claro", "Common.UI.Window.cancelButtonText": "Cancelar", diff --git a/apps/documenteditor/main/locale/ro.json b/apps/documenteditor/main/locale/ro.json index af2967761..895228b08 100644 --- a/apps/documenteditor/main/locale/ro.json +++ b/apps/documenteditor/main/locale/ro.json @@ -182,7 +182,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Documentul a fost modificat de către un alt utilizator.
    Salvați modificările făcute de dumneavoastră și reîmprospătați documentul.", "Common.UI.ThemeColorPalette.textStandartColors": "Culori standard", "Common.UI.ThemeColorPalette.textThemeColors": "Culori temă", - "Common.UI.Themes.txtThemeClassicLight": "Luminos Clasic", + "Common.UI.Themes.txtThemeClassicLight": "Clasic Luminos", "Common.UI.Themes.txtThemeDark": "Întunecat", "Common.UI.Themes.txtThemeLight": "Luminos", "Common.UI.Window.cancelButtonText": "Revocare", @@ -206,10 +206,12 @@ "Common.Views.About.txtVersion": "Versiune", "Common.Views.AutoCorrectDialog.textAdd": "Adaugă", "Common.Views.AutoCorrectDialog.textApplyText": "Se aplică în timp ce tastați", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "AutoCorecție", "Common.Views.AutoCorrectDialog.textAutoFormat": "Formatare automată la tastare", "Common.Views.AutoCorrectDialog.textBulleted": "Creare automată a listei cu marcatori", "Common.Views.AutoCorrectDialog.textBy": "După", "Common.Views.AutoCorrectDialog.textDelete": "Ștergere", + "Common.Views.AutoCorrectDialog.textFLSentence": "Scrie cu majusculă prima literă a propoziției", "Common.Views.AutoCorrectDialog.textHyphens": "Cratime (--) cu linie de dialog (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Autocorecție matematică", "Common.Views.AutoCorrectDialog.textNumbered": "Creare automată a listei numerotate", @@ -346,6 +348,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Activare modul de colaborare", "Common.Views.ReviewChanges.tipCommentRem": "Ștergere comentarii", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Se șterg aceste comentarii", + "Common.Views.ReviewChanges.tipCommentResolve": "Soluționare comentarii", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Soluționarea comentariilor curente", "Common.Views.ReviewChanges.tipCompare": "Comparați acest document cu altul", "Common.Views.ReviewChanges.tipHistory": "Afișare istoricul versiunei", "Common.Views.ReviewChanges.tipRejectCurrent": "Respinge modificare", @@ -366,6 +370,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Se șterg comentariile mele", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Se șterg comentariile mele curente", "Common.Views.ReviewChanges.txtCommentRemove": "Ștergere", + "Common.Views.ReviewChanges.txtCommentResolve": "Rezolvare", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Marchează toate comentarii ca soluționate", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Soluționarea comentariilor curente", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Soluționarea comentariilor mele", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Soluționarea comentariilor mele curente", "Common.Views.ReviewChanges.txtCompare": "Comparare", "Common.Views.ReviewChanges.txtDocLang": "Limbă", "Common.Views.ReviewChanges.txtFinal": "Toate modificările sunt acceptate (Previzualizare)", @@ -526,6 +535,7 @@ "DE.Controllers.Main.errorUsersExceed": "Limita de utilizatori stipulată de planul tarifar a fost depășită", "DE.Controllers.Main.errorViewerDisconnect": "Conexiunea a fost pierdută. Încă mai puteți vizualiza documentul,
    dar nu și să-l descărcați sau imprimați până când conexiunea se restabilește și pagina se reîmprospătează.", "DE.Controllers.Main.leavePageText": "Nu ați salvat modificările din documentul. Faceți clic pe Rămâi în pagină și apoi pe Salvare dacă doriți să le salvați. Faceți clic pe Părăsește aceasta pagina ca să renunțați la toate modificările nesalvate.", + "DE.Controllers.Main.leavePageTextOnClose": "Toate modificările nesalvate din documentul vor fi pierdute.
    Pentru a le salva, faceți clic pe Revocare și apoi pe Salvare. Apăsați OK dacă doriți să renunțați la modificările nesalvate.", "DE.Controllers.Main.loadFontsTextText": "Încărcarea datelor...", "DE.Controllers.Main.loadFontsTitleText": "Încărcare date", "DE.Controllers.Main.loadFontTextText": "Încărcarea datelor...", @@ -581,6 +591,7 @@ "DE.Controllers.Main.textShape": "Forma", "DE.Controllers.Main.textStrict": "Modul strict", "DE.Controllers.Main.textTryUndoRedo": "Funcții Anulare/Refacere sunt dezactivate în modul Rapid de editare colaborativă.
    Faceți clic pe Modul strict ca să comutați la modul Strict de editare colaborativă și să nu intrați în conflict cu alte persoane. Toate modificările vor fi trimise numai după ce le salvați. Ulilizati Setări avansate ale editorului ca să comutați între moduri de editare colaborativă. ", + "DE.Controllers.Main.textTryUndoRedoWarn": "Funcții Anulare/Refacere sunt dezactivate în modul Rapid de editare colaborativă.", "DE.Controllers.Main.titleLicenseExp": "Licența a expirat", "DE.Controllers.Main.titleServerVersion": "Editorul a fost actualizat", "DE.Controllers.Main.titleUpdateVersion": "Versiunea s-a modificat", @@ -614,6 +625,7 @@ "DE.Controllers.Main.txtMissArg": "Argumentul lipsește", "DE.Controllers.Main.txtMissOperator": "Operatorul lipsește", "DE.Controllers.Main.txtNeedSynchronize": "Aveți actualizări disponibile", + "DE.Controllers.Main.txtNone": "Niciunul", "DE.Controllers.Main.txtNoTableOfContents": "Documentul nu are anteturi. Aplicați un stil de titlu pentru textul care va fi inclus în cuprins.", "DE.Controllers.Main.txtNoTableOfFigures": "Nu s-a găsit nici o rubrică din tabel de figuri", "DE.Controllers.Main.txtNoText": "Eroare! Textul formatat cu stilul specificat nu este găsit în document.", @@ -1677,7 +1689,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Pentru a vizualiza modificările, trebuie mai întâi să le acceptați", "DE.Views.FileMenuPanels.Settings.strFast": "Rapid", "DE.Views.FileMenuPanels.Settings.strFontRender": "Sugestie font", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Se salvează întotdeauna pe server (altfel utilizați metoda document close pentru salvare)", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Versiunea se adaugă la stocarea după ce faceți clic pe Salvare sau Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Activare hieroglife", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Activarea afișare comentarii", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Setări macrocomandă", @@ -1699,7 +1711,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Salvare automată", "DE.Views.FileMenuPanels.Settings.textCompatible": "Compatibilitate", "DE.Views.FileMenuPanels.Settings.textDisabled": "Dezactivat", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Salvare pe server", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Salvarea versiunilor intermediare", "DE.Views.FileMenuPanels.Settings.textMinute": "La fiecare minută", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Faceți ca fișierele salvate în formatul DOCX să fie compatibile cu versiunile mai vechi ale MS Word ", "DE.Views.FileMenuPanels.Settings.txtAll": "Vizualizare toate", @@ -1734,6 +1746,7 @@ "DE.Views.FormSettings.textDisconnect": "Deconectare", "DE.Views.FormSettings.textDropDown": "Derulant", "DE.Views.FormSettings.textField": "Câmp text", + "DE.Views.FormSettings.textFixed": "Câmpul cu dimensiunea fixă ", "DE.Views.FormSettings.textFromFile": "Din fișier", "DE.Views.FormSettings.textFromStorage": "Din serviciul stocare", "DE.Views.FormSettings.textFromUrl": "Prin URL-ul", @@ -1745,6 +1758,7 @@ "DE.Views.FormSettings.textNoBorder": "Fără bordură", "DE.Views.FormSettings.textPlaceholder": "Substituent", "DE.Views.FormSettings.textRadiobox": "Buton opțiune", + "DE.Views.FormSettings.textRequired": "Obligatoriu", "DE.Views.FormSettings.textSelectImage": "Selectați imaginea", "DE.Views.FormSettings.textTip": "Tip", "DE.Views.FormSettings.textTipAdd": "Se adaugă o valoare nouă", @@ -2356,6 +2370,7 @@ "DE.Views.TableSettings.textBorders": "Stil borduri", "DE.Views.TableSettings.textCellSize": "Dimensiune rânduri și coloane", "DE.Views.TableSettings.textColumns": "Coloane", + "DE.Views.TableSettings.textConvert": "Conversie tabel în text", "DE.Views.TableSettings.textDistributeCols": "Distribuire coloane", "DE.Views.TableSettings.textDistributeRows": "Distribuire rânduri", "DE.Views.TableSettings.textEdit": "Rânduri și coloane", @@ -2460,7 +2475,14 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Fără borduri", "DE.Views.TableSettingsAdvanced.txtPercent": "Procent", "DE.Views.TableSettingsAdvanced.txtPt": "Punct", + "DE.Views.TableToTextDialog.textEmpty": "Introduceți caracterul separator particularizat.", + "DE.Views.TableToTextDialog.textNested": "Conversia tabelelor imbricate", "DE.Views.TableToTextDialog.textOther": "Altă", + "DE.Views.TableToTextDialog.textPara": "Semne de paragraf", + "DE.Views.TableToTextDialog.textSemicolon": "Semicoloană", + "DE.Views.TableToTextDialog.textSeparator": "Separator", + "DE.Views.TableToTextDialog.textTab": "Tabulatori", + "DE.Views.TableToTextDialog.textTitle": "Conversie tabel în text", "DE.Views.TextArtSettings.strColor": "Culoare", "DE.Views.TextArtSettings.strFill": "Umplere", "DE.Views.TextArtSettings.strSize": "Dimensiune", @@ -2484,7 +2506,21 @@ "DE.Views.TextArtSettings.tipAddGradientPoint": "Adăugare stop gradient", "DE.Views.TextArtSettings.tipRemoveGradientPoint": "Eliminare stop gradient", "DE.Views.TextArtSettings.txtNoBorders": "Fără linie", + "DE.Views.TextToTableDialog.textAutofit": "Comportament potrivire automată", + "DE.Views.TextToTableDialog.textColumns": "Coloane", + "DE.Views.TextToTableDialog.textContents": "Potrivire automată conținut", + "DE.Views.TextToTableDialog.textEmpty": "Introduceți caracterul separator particularizat.", + "DE.Views.TextToTableDialog.textFixed": "Lățime fixă a coloanei", "DE.Views.TextToTableDialog.textOther": "Altă", + "DE.Views.TextToTableDialog.textPara": "Paragrafe", + "DE.Views.TextToTableDialog.textRows": "Rânduri", + "DE.Views.TextToTableDialog.textSemicolon": "Semicoloană", + "DE.Views.TextToTableDialog.textSeparator": "Separarea textului la", + "DE.Views.TextToTableDialog.textTab": "Tabulatori", + "DE.Views.TextToTableDialog.textTableSize": "Dimensiune tabel", + "DE.Views.TextToTableDialog.textTitle": "Conversie text în tabel", + "DE.Views.TextToTableDialog.textWindow": "Potrivire automată fereastră", + "DE.Views.TextToTableDialog.txtAutoText": "Automat", "DE.Views.Toolbar.capBtnAddComment": "Adaugă comentariu", "DE.Views.Toolbar.capBtnBlankPage": "Pagina necompletată", "DE.Views.Toolbar.capBtnColumns": "Coloane", @@ -2528,6 +2564,7 @@ "DE.Views.Toolbar.mniImageFromUrl": "Imaginea prin URL", "DE.Views.Toolbar.mniLowerCase": "minuscule", "DE.Views.Toolbar.mniSentenceCase": "Tip propoziție.", + "DE.Views.Toolbar.mniTextToTable": "Conversie text în tabel", "DE.Views.Toolbar.mniToggleCase": "cOMURARE LITERE MARI/MICI.", "DE.Views.Toolbar.mniUpperCase": "MAJUSCULE", "DE.Views.Toolbar.strMenuNoFill": "Fără umplere", diff --git a/apps/documenteditor/main/locale/ru.json b/apps/documenteditor/main/locale/ru.json index 0f4faf0aa..261e06c30 100644 --- a/apps/documenteditor/main/locale/ru.json +++ b/apps/documenteditor/main/locale/ru.json @@ -182,7 +182,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Документ изменен другим пользователем.
    Нажмите, чтобы сохранить свои изменения и загрузить обновления.", "Common.UI.ThemeColorPalette.textStandartColors": "Стандартные цвета", "Common.UI.ThemeColorPalette.textThemeColors": "Цвета темы", - "Common.UI.Themes.txtThemeClassicLight": "Светлая классическая", + "Common.UI.Themes.txtThemeClassicLight": "Классическая светлая", "Common.UI.Themes.txtThemeDark": "Темная", "Common.UI.Themes.txtThemeLight": "Светлая", "Common.UI.Window.cancelButtonText": "Отмена", @@ -1689,7 +1689,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Прежде чем вы сможете увидеть изменения, их надо будет принять", "DE.Views.FileMenuPanels.Settings.strFast": "Быстрый", "DE.Views.FileMenuPanels.Settings.strFontRender": "Хинтинг шрифтов", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Всегда сохранять на сервере (в противном случае сохранять на сервере при закрытии документа)", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Добавлять версию в хранилище после нажатия кнопки Сохранить или Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Включить иероглифы", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Включить отображение комментариев в тексте", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Настройки макросов", @@ -1711,7 +1711,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Автосохранение", "DE.Views.FileMenuPanels.Settings.textCompatible": "Совместимость", "DE.Views.FileMenuPanels.Settings.textDisabled": "Отключено", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Сохранять на сервере", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Сохранение промежуточных версий", "DE.Views.FileMenuPanels.Settings.textMinute": "Каждую минуту", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Сделать файлы совместимыми с более старыми версиями MS Word при сохранении как DOCX", "DE.Views.FileMenuPanels.Settings.txtAll": "Все", diff --git a/apps/documenteditor/main/locale/tr.json b/apps/documenteditor/main/locale/tr.json index 0b6eae6c4..6151929fd 100644 --- a/apps/documenteditor/main/locale/tr.json +++ b/apps/documenteditor/main/locale/tr.json @@ -118,6 +118,7 @@ "Common.Views.About.txtPoweredBy": "Powered by", "Common.Views.About.txtTel": "tel:", "Common.Views.About.txtVersion": "Versiyon", + "Common.Views.AutoCorrectDialog.textAdd": "ekle", "Common.Views.Chat.textSend": "Gönder", "Common.Views.Comments.textAdd": "Ekle", "Common.Views.Comments.textAddComment": "Yorum Ekle", @@ -198,6 +199,9 @@ "Common.Views.Plugins.textLoading": "Yükleniyor", "Common.Views.Plugins.textStart": "Başlat", "Common.Views.Plugins.textStop": "Bitir", + "Common.Views.Protection.hintPwd": "Şifreyi değiştir veya sil", + "Common.Views.Protection.txtChangePwd": "Şifre Değiştir", + "Common.Views.Protection.txtInvisibleSignature": "Dijital imza ekle", "Common.Views.RenameDialog.textName": "Dosya adı", "Common.Views.RenameDialog.txtInvalidName": "Dosya adı aşağıdaki karakterlerden herhangi birini içeremez:", "Common.Views.ReviewChanges.hintNext": "Sonraki değişikliğe", @@ -844,6 +848,7 @@ "DE.Views.ChartSettings.txtTight": "Sıkı", "DE.Views.ChartSettings.txtTitle": "Grafik", "DE.Views.ChartSettings.txtTopAndBottom": "Üst ve alt", + "DE.Views.ControlSettingsDialog.textAdd": "ekle", "DE.Views.ControlSettingsDialog.textColor": "Renk", "DE.Views.ControlSettingsDialog.textDate": "Tarih formatı", "DE.Views.ControlSettingsDialog.textFormat": "Tarihi böyle göster", @@ -966,6 +971,7 @@ "DE.Views.DocumentHolder.textUpdateTOC": "İçindekiler tablosunu yenile", "DE.Views.DocumentHolder.textWrap": "Kaydırma Stili", "DE.Views.DocumentHolder.tipIsLocked": "Bu element şu an başka bir kullanıcı tarafından düzenleniyor.", + "DE.Views.DocumentHolder.toDictionaryText": "Sözlüğe ekle", "DE.Views.DocumentHolder.txtAddBottom": "Add bottom border", "DE.Views.DocumentHolder.txtAddFractionBar": "Add fraction bar", "DE.Views.DocumentHolder.txtAddHor": "Add horizontal line", @@ -1341,6 +1347,7 @@ "DE.Views.Links.tipContentsUpdate": "İçindekiler tablosunu yenile", "DE.Views.Links.tipInsertHyperlink": "Köprü ekle", "DE.Views.Links.tipNotes": "Dipnot ekle veya düzenle", + "DE.Views.ListSettingsDialog.textCenter": "Ortala", "DE.Views.ListSettingsDialog.txtAlign": "Hizalama", "DE.Views.ListSettingsDialog.txtFont": "Font ve Simge", "DE.Views.ListSettingsDialog.txtSymbol": "Simge", @@ -1445,6 +1452,7 @@ "DE.Views.ParagraphSettingsAdvanced.strDoubleStrike": "Üstü çift çizili", "DE.Views.ParagraphSettingsAdvanced.strIndentsLeftText": "Sol", "DE.Views.ParagraphSettingsAdvanced.strIndentsRightText": "Sağ", + "DE.Views.ParagraphSettingsAdvanced.strIndentsSpacingAfter": "sonra", "DE.Views.ParagraphSettingsAdvanced.strKeepLines": "Satırları birlikte tut", "DE.Views.ParagraphSettingsAdvanced.strKeepNext": "Sonrakiyle tut", "DE.Views.ParagraphSettingsAdvanced.strMargins": "Dolgu maddeleri", diff --git a/apps/documenteditor/main/locale/zh.json b/apps/documenteditor/main/locale/zh.json index a88cbe0cc..e36c42a85 100644 --- a/apps/documenteditor/main/locale/zh.json +++ b/apps/documenteditor/main/locale/zh.json @@ -755,7 +755,7 @@ "DE.Controllers.Main.txtXAxis": "X轴", "DE.Controllers.Main.txtYAxis": "Y轴", "DE.Controllers.Main.txtZeroDivide": "除数为零", - "DE.Controllers.Main.unknownErrorText": "示知错误", + "DE.Controllers.Main.unknownErrorText": "未知错误", "DE.Controllers.Main.unsupportedBrowserErrorText": "您的浏览器不受支持", "DE.Controllers.Main.uploadDocExtMessage": "未知的文档格式", "DE.Controllers.Main.uploadDocFileCountMessage": "没有文档上载了", diff --git a/apps/presentationeditor/embed/locale/ca.json b/apps/presentationeditor/embed/locale/ca.json index afdefb4f2..e08517311 100644 --- a/apps/presentationeditor/embed/locale/ca.json +++ b/apps/presentationeditor/embed/locale/ca.json @@ -15,7 +15,7 @@ "PE.ApplicationController.errorFileSizeExceed": "La mida del fitxer excedeix la limitació establerta per al vostre servidor. Podeu contactar amb l'administrador del Document Server per obtenir més detalls.", "PE.ApplicationController.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "PE.ApplicationController.errorUserDrop": "Ara no es pot accedir al fitxer.", - "PE.ApplicationController.notcriticalErrorTitle": "Avis", + "PE.ApplicationController.notcriticalErrorTitle": "Advertiment", "PE.ApplicationController.scriptLoadError": "La connexió és massa lenta, alguns dels components no s’han pogut carregar. Torneu a carregar la pàgina.", "PE.ApplicationController.textLoadingDocument": "Carregant presentació", "PE.ApplicationController.textOf": "de", @@ -25,6 +25,7 @@ "PE.ApplicationController.waitText": "Si us plau, esperi...", "PE.ApplicationView.txtDownload": "Descàrrega", "PE.ApplicationView.txtEmbed": "Incrustar", + "PE.ApplicationView.txtFileLocation": "Obrir ubicació del fitxer", "PE.ApplicationView.txtFullScreen": "Pantalla Completa", "PE.ApplicationView.txtPrint": "Imprimir", "PE.ApplicationView.txtShare": "Compartir" diff --git a/apps/presentationeditor/embed/locale/tr.json b/apps/presentationeditor/embed/locale/tr.json index 98287a3ff..e2e851937 100644 --- a/apps/presentationeditor/embed/locale/tr.json +++ b/apps/presentationeditor/embed/locale/tr.json @@ -12,6 +12,7 @@ "PE.ApplicationController.errorAccessDeny": "Hakkınız olmayan bir eylem gerçekleştirmeye çalışıyorsunuz.
    Lütfen Belge Sunucu yöneticinize başvurun.", "PE.ApplicationController.errorDefaultMessage": "Hata kodu: %1", "PE.ApplicationController.errorFilePassProtect": "Döküman şifre korumalı ve açılamadı", + "PE.ApplicationController.errorUpdateVersionOnDisconnect": "İnternet bağlantısı tekrar sağlandı, ve dosya versiyon değişti.
    Çalışmanıza devam etmeden önce, veri kaybını önlemeniz için dosyasının bir kopyasını indirmeniz ya da dosya içeriğini kopyalamanız ve sonrasında sayfayı yenilemeniz gerekmektedir.", "PE.ApplicationController.errorUserDrop": "Belgeye şu an erişilemiyor.", "PE.ApplicationController.notcriticalErrorTitle": "Uyarı", "PE.ApplicationController.scriptLoadError": "Bağlantı çok yavaş, bileşenlerin bazıları yüklenemedi. Lütfen sayfayı yenileyin.", @@ -24,5 +25,6 @@ "PE.ApplicationView.txtDownload": "İndir", "PE.ApplicationView.txtEmbed": "Gömülü", "PE.ApplicationView.txtFullScreen": "Tam Ekran", + "PE.ApplicationView.txtPrint": "Yazdır", "PE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/presentationeditor/main/locale/de.json b/apps/presentationeditor/main/locale/de.json index a4d838038..2b2e31d2d 100644 --- a/apps/presentationeditor/main/locale/de.json +++ b/apps/presentationeditor/main/locale/de.json @@ -1182,7 +1182,7 @@ "PE.Views.DocumentHolder.txtBorderProps": "Rahmeneigenschaften", "PE.Views.DocumentHolder.txtBottom": "Unten", "PE.Views.DocumentHolder.txtChangeLayout": "Layout ändern", - "PE.Views.DocumentHolder.txtChangeTheme": "Thema ändern", + "PE.Views.DocumentHolder.txtChangeTheme": "Design ändern", "PE.Views.DocumentHolder.txtColumnAlign": "Spaltenausrichtung", "PE.Views.DocumentHolder.txtDecreaseArg": "Argumentgröße reduzieren", "PE.Views.DocumentHolder.txtDeleteArg": "Argument löschen", @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "PE.Views.RightMenu.txtChartSettings": "Diagramm-Einstellungen", "PE.Views.RightMenu.txtImageSettings": "Bild-Einstellungen", - "PE.Views.RightMenu.txtParagraphSettings": "Texte-Einstellungen", + "PE.Views.RightMenu.txtParagraphSettings": "Text-Einstellungen", "PE.Views.RightMenu.txtShapeSettings": "Form-Einstellungen", "PE.Views.RightMenu.txtSignatureSettings": "Signatureinstellungen", "PE.Views.RightMenu.txtSlideSettings": "Folien-Einstellungen", diff --git a/apps/presentationeditor/main/locale/el.json b/apps/presentationeditor/main/locale/el.json index 6f73c9965..c5fe20844 100644 --- a/apps/presentationeditor/main/locale/el.json +++ b/apps/presentationeditor/main/locale/el.json @@ -1088,7 +1088,7 @@ "PE.Views.DocumentHolder.addCommentText": "Προσθήκη Σχολίου", "PE.Views.DocumentHolder.addToLayoutText": "Προσθήκη στη Διάταξη", "PE.Views.DocumentHolder.advancedImageText": "Προηγμένες Ρυθμίσεις Εικόνας", - "PE.Views.DocumentHolder.advancedParagraphText": "Προηγμένες Ρυθμίσεις Κειμένου", + "PE.Views.DocumentHolder.advancedParagraphText": "Προηγμένες Ρυθμίσεις Παραγράφου", "PE.Views.DocumentHolder.advancedShapeText": "Προηγμένες Ρυθμίσεις Σχήματος", "PE.Views.DocumentHolder.advancedTableText": "Προηγμένες Ρυθμίσεις Πίνακα", "PE.Views.DocumentHolder.alignmentText": "Στοίχιση", @@ -1334,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Θα χρειαστεί να αποδεχτείτε αλλαγές πριν να τις δείτε", "PE.Views.FileMenuPanels.Settings.strFast": "Γρήγορη", "PE.Views.FileMenuPanels.Settings.strFontRender": "Βελτιστοποίηση Γραμματοσειράς", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Πάντα να αποθηκεύεται σε διακομιστή (διαφορετικά αποθηκεύεται στο διακομιστή κατά το κλείσιμο του εγγράφου)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Προσθήκη έκδοσης στο χώρο αποθήκευσης μετά την Αποθήκευση ή Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Ενεργοποίηση ιερογλυφικών", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Ρυθμίσεις Mακροεντολών", "PE.Views.FileMenuPanels.Settings.strPaste": "Αποκοπή, αντιγραφή και επικόλληση", @@ -1353,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Αυτόματη ανάκτηση", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Αυτόματη αποθήκευση", "PE.Views.FileMenuPanels.Settings.textDisabled": "Απενεργοποιημένο", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Αποθήκευση στον Διακομιστή", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Αποθήκευση ενδιάμεσων εκδόσεων", "PE.Views.FileMenuPanels.Settings.textMinute": "Κάθε Λεπτό", "PE.Views.FileMenuPanels.Settings.txtAll": "Προβολή Όλων", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Επιλογής αυτόματης διόρθωσης...", @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Αυτόματα", "PE.Views.RightMenu.txtChartSettings": "Ρυθμίσεις γραφήματος", "PE.Views.RightMenu.txtImageSettings": "Ρυθμίσεις εικόνας", - "PE.Views.RightMenu.txtParagraphSettings": "Ρυθμίσεις κειμένου", + "PE.Views.RightMenu.txtParagraphSettings": "Ρυθμίσεις Παραγράφου", "PE.Views.RightMenu.txtShapeSettings": "Ρυθμίσεις σχήματος", "PE.Views.RightMenu.txtSignatureSettings": "Ρυθμίσεις υπογραφής", "PE.Views.RightMenu.txtSlideSettings": "Ρυθμίσεις διαφάνειας", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index f286defe2..e8cfd87b8 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -1334,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "You will need to accept changes before you can see them", "PE.Views.FileMenuPanels.Settings.strFast": "Fast", "PE.Views.FileMenuPanels.Settings.strFontRender": "Font Hinting", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Always save to server (otherwise save to server on document close)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Add version to storage after clicking Save or Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Turn on hieroglyphs", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Macros Settings", "PE.Views.FileMenuPanels.Settings.strPaste": "Cut, copy and paste", @@ -1353,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Autorecover", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Autosave", "PE.Views.FileMenuPanels.Settings.textDisabled": "Disabled", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Save to Server", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Saving intermediate versions", "PE.Views.FileMenuPanels.Settings.textMinute": "Every Minute", "PE.Views.FileMenuPanels.Settings.txtAll": "View All", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "AutoCorrect options...", diff --git a/apps/presentationeditor/main/locale/es.json b/apps/presentationeditor/main/locale/es.json index 120196578..69f1d3545 100644 --- a/apps/presentationeditor/main/locale/es.json +++ b/apps/presentationeditor/main/locale/es.json @@ -75,7 +75,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "El documento ha sido cambiado por otro usuario.
    Por favor haga clic para guardar sus cambios y recargue las actualizaciones.", "Common.UI.ThemeColorPalette.textStandartColors": "Colores estándar", "Common.UI.ThemeColorPalette.textThemeColors": "Colores de tema", - "Common.UI.Themes.txtThemeClassicLight": "Claro clásico", + "Common.UI.Themes.txtThemeClassicLight": "Clásico claro", "Common.UI.Themes.txtThemeDark": "Oscuro", "Common.UI.Themes.txtThemeLight": "Claro", "Common.UI.Window.cancelButtonText": "Cancelar", @@ -1088,7 +1088,7 @@ "PE.Views.DocumentHolder.addCommentText": "Añadir comentario", "PE.Views.DocumentHolder.addToLayoutText": "Añadir al Diseño", "PE.Views.DocumentHolder.advancedImageText": "Ajustes avanzados de imagen", - "PE.Views.DocumentHolder.advancedParagraphText": "Ajustes avanzados de texto", + "PE.Views.DocumentHolder.advancedParagraphText": "Ajustes avanzados de párrafo", "PE.Views.DocumentHolder.advancedShapeText": "Ajustes avanzados de forma", "PE.Views.DocumentHolder.advancedTableText": "Ajustes avanzados de tabla", "PE.Views.DocumentHolder.alignmentText": "Alineación", @@ -1334,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Usted tendrá que aceptar los cambios antes de poder verlos", "PE.Views.FileMenuPanels.Settings.strFast": "rápido", "PE.Views.FileMenuPanels.Settings.strFontRender": "Hinting", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Siempre guardar en el servidor (de lo contrario guardar en el servidor al cerrar documento)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Añadir la versión al almacenamiento después de hacer clic en Guardar o Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Activar jeroglíficos", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Ajustes de macros", "PE.Views.FileMenuPanels.Settings.strPaste": "Cortar, copiar y pegar", @@ -1353,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Autorrecuperación", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Guardar automáticamente", "PE.Views.FileMenuPanels.Settings.textDisabled": "Desactivado", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Guardar al servidor", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Guardar versiones intermedias", "PE.Views.FileMenuPanels.Settings.textMinute": "Cada minuto", "PE.Views.FileMenuPanels.Settings.txtAll": "Ver todo", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Opciones de autocorrección", @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "PE.Views.RightMenu.txtChartSettings": "Ajustes de gráfico", "PE.Views.RightMenu.txtImageSettings": "Ajustes de imagen", - "PE.Views.RightMenu.txtParagraphSettings": "Ajustes de texto", + "PE.Views.RightMenu.txtParagraphSettings": "Ajustes de párrafo", "PE.Views.RightMenu.txtShapeSettings": "Ajustes de forma", "PE.Views.RightMenu.txtSignatureSettings": "Configuración de firma", "PE.Views.RightMenu.txtSlideSettings": "Ajustes de diapositiva", diff --git a/apps/presentationeditor/main/locale/fr.json b/apps/presentationeditor/main/locale/fr.json index 16c023b62..0e10003f8 100644 --- a/apps/presentationeditor/main/locale/fr.json +++ b/apps/presentationeditor/main/locale/fr.json @@ -75,7 +75,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Le document a été modifié par un autre utilisateur.
    Cliquez pour enregistrer vos modifications et recharger les mises à jour.", "Common.UI.ThemeColorPalette.textStandartColors": "Couleurs standard", "Common.UI.ThemeColorPalette.textThemeColors": "Couleurs de thème", - "Common.UI.Themes.txtThemeClassicLight": "Clair classique", + "Common.UI.Themes.txtThemeClassicLight": "Classique clair", "Common.UI.Themes.txtThemeDark": "Sombre", "Common.UI.Themes.txtThemeLight": "Clair", "Common.UI.Window.cancelButtonText": "Annuler", @@ -380,8 +380,8 @@ "PE.Controllers.Main.errorDataEncrypted": "Les modifications chiffrées ont été reçues, elle ne peuvent pas être déchiffrées.", "PE.Controllers.Main.errorDataRange": "Plage de données incorrecte.", "PE.Controllers.Main.errorDefaultMessage": "Code d'erreur: %1", - "PE.Controllers.Main.errorEditingDownloadas": "Une erreur s'est produite lors du travail avec le document.
    Utilisez l'option 'Télécharger comme...' pour enregistrer une copie de sauvegarde du fichier sur le disque dur de votre ordinateur.", - "PE.Controllers.Main.errorEditingSaveas": "Une erreur s'est produite lors du travail avec le document.
    Utilisez l'option 'Enregistrer comme...' pour enregistrer une copie de sauvegarde sur le disque dur de votre ordinateur. ", + "PE.Controllers.Main.errorEditingDownloadas": "Une erreure s'est produite lors du travail avec le document.
    Utilisez l'option 'Télécharger comme...' pour enregistrer une copie de sauvegarde du fichier sur le disque dur de votre ordinateur.", + "PE.Controllers.Main.errorEditingSaveas": "Une erreure s'est produite lors du travail avec le document.
    Utilisez l'option 'Enregistrer comme...' pour enregistrer une copie de sauvegarde sur le disque dur de votre ordinateur. ", "PE.Controllers.Main.errorEmailClient": "Pas de client messagerie trouvé", "PE.Controllers.Main.errorFilePassProtect": "Le fichier est protégé par le mot de passe et ne peut être ouvert.", "PE.Controllers.Main.errorFileSizeExceed": "La taille du fichier dépasse les limites établies sur votre serveur.
    Veuillez contacter votre administrateur de Document Server pour obtenir plus d'information. ", @@ -1334,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Avant de pouvoir afficher les modifications, vous avez besoin de les accépter ", "PE.Views.FileMenuPanels.Settings.strFast": "Rapide", "PE.Views.FileMenuPanels.Settings.strFontRender": "Hinting de la police", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Toujours enregistrer sur le serveur ( sinon enregistrer sur le serveur lors de la fermeture du document )", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Ajouter une version dans l'espace de stockage en cliquant Enregistrer ou Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Activer les hiéroglyphes", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Réglages macros", "PE.Views.FileMenuPanels.Settings.strPaste": "Couper, copier et coller", @@ -1353,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Récupération automatique", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Enregistrement automatique", "PE.Views.FileMenuPanels.Settings.textDisabled": "Désactivé", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Enregistrer sur le serveur", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Enregistrer des versions intermédiaires", "PE.Views.FileMenuPanels.Settings.textMinute": "Chaque minute", "PE.Views.FileMenuPanels.Settings.txtAll": "Surligner toutes les modifications", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Options de correction automatique", @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "PE.Views.RightMenu.txtChartSettings": "Paramètres du graphique", "PE.Views.RightMenu.txtImageSettings": "Paramètres de l'image", - "PE.Views.RightMenu.txtParagraphSettings": "Paramètres du texte", + "PE.Views.RightMenu.txtParagraphSettings": "Paramètres du paragraphe", "PE.Views.RightMenu.txtShapeSettings": "Paramètres de la forme", "PE.Views.RightMenu.txtSignatureSettings": "Paramètre de signature", "PE.Views.RightMenu.txtSlideSettings": "Paramètres de la diapositive", @@ -1997,4 +1997,4 @@ "PE.Views.Toolbar.txtScheme9": "Fonderie", "PE.Views.Toolbar.txtSlideAlign": "Aligner sur la diapositive", "PE.Views.Toolbar.txtUngroup": "Dissocier" -} +} \ No newline at end of file diff --git a/apps/presentationeditor/main/locale/pt.json b/apps/presentationeditor/main/locale/pt.json index 989ee5dcd..53d18946d 100644 --- a/apps/presentationeditor/main/locale/pt.json +++ b/apps/presentationeditor/main/locale/pt.json @@ -75,7 +75,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "O documento foi alterado por outro usuário.
    Clique para salvar suas alterações e recarregar as atualizações.", "Common.UI.ThemeColorPalette.textStandartColors": "Cores padrão", "Common.UI.ThemeColorPalette.textThemeColors": "Cores do tema", - "Common.UI.Themes.txtThemeClassicLight": "Claro clássico", + "Common.UI.Themes.txtThemeClassicLight": "Clássico claro", "Common.UI.Themes.txtThemeDark": "Escuro", "Common.UI.Themes.txtThemeLight": "Claro", "Common.UI.Window.cancelButtonText": "Cancelar", @@ -1088,7 +1088,7 @@ "PE.Views.DocumentHolder.addCommentText": "Adicionar comentário", "PE.Views.DocumentHolder.addToLayoutText": "Adicionar ao Layout", "PE.Views.DocumentHolder.advancedImageText": "Configurações avançadas de imagem", - "PE.Views.DocumentHolder.advancedParagraphText": "Configurações avançadas de texto", + "PE.Views.DocumentHolder.advancedParagraphText": "Configurações avançadas de parágrafo", "PE.Views.DocumentHolder.advancedShapeText": "Configurações avançadas de forma", "PE.Views.DocumentHolder.advancedTableText": "Configurações avançadas de tabela", "PE.Views.DocumentHolder.alignmentText": "Alinhamento", @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Automático", "PE.Views.RightMenu.txtChartSettings": "Configurações do gráfico", "PE.Views.RightMenu.txtImageSettings": "Configurações de imagem", - "PE.Views.RightMenu.txtParagraphSettings": "Configurações de texto", + "PE.Views.RightMenu.txtParagraphSettings": "Configurações do parágrafo", "PE.Views.RightMenu.txtShapeSettings": "Configurações da forma", "PE.Views.RightMenu.txtSignatureSettings": "Configurações de Assinatura", "PE.Views.RightMenu.txtSlideSettings": "Configurações de slide", diff --git a/apps/presentationeditor/main/locale/ro.json b/apps/presentationeditor/main/locale/ro.json index f93fc2faa..e8febcf90 100644 --- a/apps/presentationeditor/main/locale/ro.json +++ b/apps/presentationeditor/main/locale/ro.json @@ -75,7 +75,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Documentul a fost modificat de către un alt utilizator.
    Salvați modificările făcute de dumneavoastră și reîmprospătați documentul.", "Common.UI.ThemeColorPalette.textStandartColors": "Culori standard", "Common.UI.ThemeColorPalette.textThemeColors": "Culori temă", - "Common.UI.Themes.txtThemeClassicLight": "Luminos Clasic", + "Common.UI.Themes.txtThemeClassicLight": "Clasic Luminos", "Common.UI.Themes.txtThemeDark": "Întunecat", "Common.UI.Themes.txtThemeLight": "Luminos", "Common.UI.Window.cancelButtonText": "Anulare", @@ -99,10 +99,12 @@ "Common.Views.About.txtVersion": "Versiune", "Common.Views.AutoCorrectDialog.textAdd": "Adaugă", "Common.Views.AutoCorrectDialog.textApplyText": "Se aplică în timp ce tastați", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "AutoCorecție", "Common.Views.AutoCorrectDialog.textAutoFormat": "Formatare automată la tastare", "Common.Views.AutoCorrectDialog.textBulleted": "Creare automată a listei cu marcatori", "Common.Views.AutoCorrectDialog.textBy": "După", "Common.Views.AutoCorrectDialog.textDelete": "Ștergere", + "Common.Views.AutoCorrectDialog.textFLSentence": "Scrie cu majusculă prima literă a propoziției", "Common.Views.AutoCorrectDialog.textHyphens": "Cratime (--) cu linie de dialog (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Autocorecție matematică", "Common.Views.AutoCorrectDialog.textNumbered": "Creare automată a listei numerotate", @@ -154,6 +156,7 @@ "Common.Views.Header.textBack": "Deschidere locația fișierului", "Common.Views.Header.textCompactView": "Ascundere bară de instrumente", "Common.Views.Header.textHideLines": "Ascundere rigle", + "Common.Views.Header.textHideNotes": "Ascunde notele", "Common.Views.Header.textHideStatusBar": "Ascundere bară de stare", "Common.Views.Header.textRemoveFavorite": "Eliminare din Preferințe", "Common.Views.Header.textSaveBegin": "Salvare în progres...", @@ -239,6 +242,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Activare modul de colaborare", "Common.Views.ReviewChanges.tipCommentRem": "Ștergere comentarii", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Se șterg aceste comentarii", + "Common.Views.ReviewChanges.tipCommentResolve": "Soluționare comentarii", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Soluționarea comentariilor curente", "Common.Views.ReviewChanges.tipHistory": "Afișare istoricul versiunei", "Common.Views.ReviewChanges.tipRejectCurrent": "Respinge modificare", "Common.Views.ReviewChanges.tipReview": "Urmărirea modificărilor", @@ -258,6 +263,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Se șterg comentariile mele", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Se șterg comentariile mele curente", "Common.Views.ReviewChanges.txtCommentRemove": "Ștergere", + "Common.Views.ReviewChanges.txtCommentResolve": "Rezolvare", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Marchează toate comentarii ca soluționate", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Soluționarea comentariilor curente", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Soluționarea comentariilor mele", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Soluționarea comentariilor mele curente", "Common.Views.ReviewChanges.txtDocLang": "Limbă", "Common.Views.ReviewChanges.txtFinal": "Toate modificările sunt acceptate (Previzualizare)", "Common.Views.ReviewChanges.txtFinalCap": "Final", @@ -344,9 +354,11 @@ "Common.Views.UserNameDialog.textDontShow": "Nu mai întreabă", "Common.Views.UserNameDialog.textLabel": "Etichetă:", "Common.Views.UserNameDialog.textLabelError": "Etichetă trebuie completată", + "PE.Controllers.LeftMenu.leavePageText": "Toate modificările nesalvate din documentul vor fi pierdute.
    Pentru a le salva, faceți clic pe Revocare și apoi pe Salvare. Apăsați OK dacă doriți să renunțați la modificările nesalvate.", "PE.Controllers.LeftMenu.newDocumentTitle": "Prezentare fără titlu", "PE.Controllers.LeftMenu.notcriticalErrorTitle": "Avertisment", "PE.Controllers.LeftMenu.requestEditRightsText": "Solicitarea permisiunii pentru editare...", + "PE.Controllers.LeftMenu.textLoadHistory": "Încărcarea istoricului versiunii...", "PE.Controllers.LeftMenu.textNoTextFound": "Datele căutate nu au fost găsite. Alegeți alte opțiuni de căutare.", "PE.Controllers.LeftMenu.textReplaceSkipped": "A avut loc o înlocuire. {0} apariții ignorate.", "PE.Controllers.LeftMenu.textReplaceSuccess": "Căutarea a fost finalizată. Înlocuiri: {0}", @@ -391,6 +403,7 @@ "PE.Controllers.Main.errorUsersExceed": "Limita de utilizatori stipulată de planul tarifar a fost depășită", "PE.Controllers.Main.errorViewerDisconnect": "Conexiunea a fost pierdută. Încă mai puteți vizualiza documentul,
    dar nu și să-l descărcați sau imprimați până când conexiunea se restabilește și pagina se reîmprospătează.", "PE.Controllers.Main.leavePageText": "Nu ați salvat modificările din prezentarea. Faceți clic pe \"Rămâi în pagină\" și apoi pe Salvare dacă doriți să le salvați. Faceți clic pe 'Părăsește aceasta pagina' ca să renunțați la toate modificările nesalvate.", + "PE.Controllers.Main.leavePageTextOnClose": "Toate modificările vor fi pierdute dacă nu au fost salvate.
    Faceți clic pe Anulare și apoi pe Salvează ca să le salvați. Faceți clic pe OK ca să renunțați la toate modificările nesalvate.", "PE.Controllers.Main.loadFontsTextText": "Încărcarea datelor...", "PE.Controllers.Main.loadFontsTitleText": "Încărcare date", "PE.Controllers.Main.loadFontTextText": "Încărcarea datelor...", @@ -441,6 +454,7 @@ "PE.Controllers.Main.textShape": "Forma", "PE.Controllers.Main.textStrict": "Modul strict", "PE.Controllers.Main.textTryUndoRedo": "Funcții Anulare/Refacere sunt dezactivate în modul Rapid de editare colaborativă.
    Faceți clic pe Modul strict ca să comutați la modul Strict de editare colaborativă și să nu intrați în conflict cu alte persoane. Toate modificările vor fi trimise numai după ce le salvați. Ulilizati Setări avansate ale editorului ca să comutați între moduri de editare colaborativă. ", + "PE.Controllers.Main.textTryUndoRedoWarn": "Funcții Anulare/Refacere sunt dezactivate în modul Rapid de editare colaborativă.", "PE.Controllers.Main.titleLicenseExp": "Licența a expirat", "PE.Controllers.Main.titleServerVersion": "Editorul a fost actualizat", "PE.Controllers.Main.txtAddFirstSlide": "Faceți clic pentru a adăuga primul diapozitiv", @@ -455,6 +469,7 @@ "PE.Controllers.Main.txtDiagram": "SmartArt", "PE.Controllers.Main.txtDiagramTitle": "Titlu diagramă", "PE.Controllers.Main.txtEditingMode": "Setare modul de editare...", + "PE.Controllers.Main.txtErrorLoadHistory": "Încărcarea istoricului a eșuat", "PE.Controllers.Main.txtFiguredArrows": "Săgeți în forme diferite", "PE.Controllers.Main.txtFooter": "Subsol", "PE.Controllers.Main.txtHeader": "Antet", @@ -464,6 +479,7 @@ "PE.Controllers.Main.txtMath": "Matematica", "PE.Controllers.Main.txtMedia": "Media", "PE.Controllers.Main.txtNeedSynchronize": "Aveți actualizări disponibile", + "PE.Controllers.Main.txtNone": "Niciunul", "PE.Controllers.Main.txtPicture": "Imagine", "PE.Controllers.Main.txtRectangles": "Dreptunghiuri", "PE.Controllers.Main.txtSeries": "Serie", @@ -1072,7 +1088,7 @@ "PE.Views.DocumentHolder.addCommentText": "Adaugă comentariu", "PE.Views.DocumentHolder.addToLayoutText": "Adăugare aspect", "PE.Views.DocumentHolder.advancedImageText": "Setări avansate imagine", - "PE.Views.DocumentHolder.advancedParagraphText": "Setări avansate text", + "PE.Views.DocumentHolder.advancedParagraphText": "Setări avansate paragraf ", "PE.Views.DocumentHolder.advancedShapeText": "Setări avansate forma", "PE.Views.DocumentHolder.advancedTableText": "Setări avansate tabel", "PE.Views.DocumentHolder.alignmentText": "Aliniere", @@ -1263,6 +1279,7 @@ "PE.Views.FileMenu.btnCreateNewCaption": "Crearea unui document nou", "PE.Views.FileMenu.btnDownloadCaption": "Descărcare ca...", "PE.Views.FileMenu.btnHelpCaption": "Asistență...", + "PE.Views.FileMenu.btnHistoryCaption": "Istoricul versiune", "PE.Views.FileMenu.btnInfoCaption": "Informații despre prezentare...", "PE.Views.FileMenu.btnPrintCaption": "Imprimare", "PE.Views.FileMenu.btnProtectCaption": "Protejare", @@ -1317,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Pentru a vizualiza modificările, trebuie mai întâi să le acceptați", "PE.Views.FileMenuPanels.Settings.strFast": "Rapid", "PE.Views.FileMenuPanels.Settings.strFontRender": "Sugestie font", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Se salvează întotdeauna pe server (altfel utilizați metoda document close pentru salvare)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Versiunea se adaugă la stocarea după ce faceți clic pe Salvare sau Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Activare hieroglife", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Setări macrocomandă", "PE.Views.FileMenuPanels.Settings.strPaste": "Decupare, copiere și lipire", @@ -1336,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Recuperare automată", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Salvare automată", "PE.Views.FileMenuPanels.Settings.textDisabled": "Dezactivat", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Salvare pe server", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Salvarea versiunilor intermediare", "PE.Views.FileMenuPanels.Settings.textMinute": "La fiecare minută", "PE.Views.FileMenuPanels.Settings.txtAll": "Vizualizare toate", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Opțiuni AutoCorecție...", @@ -1492,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "PE.Views.RightMenu.txtChartSettings": "Setări diagramă", "PE.Views.RightMenu.txtImageSettings": "Setări imagine", - "PE.Views.RightMenu.txtParagraphSettings": "Setări text", + "PE.Views.RightMenu.txtParagraphSettings": "Setări paragraf", "PE.Views.RightMenu.txtShapeSettings": "Setări forma", "PE.Views.RightMenu.txtSignatureSettings": "Setări semnătura", "PE.Views.RightMenu.txtSlideSettings": "Setări diapozitiv", diff --git a/apps/presentationeditor/main/locale/ru.json b/apps/presentationeditor/main/locale/ru.json index e64240417..6937cec7e 100644 --- a/apps/presentationeditor/main/locale/ru.json +++ b/apps/presentationeditor/main/locale/ru.json @@ -75,7 +75,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Документ изменен другим пользователем.
    Нажмите, чтобы сохранить свои изменения и загрузить обновления.", "Common.UI.ThemeColorPalette.textStandartColors": "Стандартные цвета", "Common.UI.ThemeColorPalette.textThemeColors": "Цвета темы", - "Common.UI.Themes.txtThemeClassicLight": "Светлая классическая", + "Common.UI.Themes.txtThemeClassicLight": "Классическая светлая", "Common.UI.Themes.txtThemeDark": "Темная", "Common.UI.Themes.txtThemeLight": "Светлая", "Common.UI.Window.cancelButtonText": "Отмена", @@ -1334,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Прежде чем вы сможете увидеть изменения, их надо будет принять", "PE.Views.FileMenuPanels.Settings.strFast": "Быстрый", "PE.Views.FileMenuPanels.Settings.strFontRender": "Хинтинг шрифтов", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Всегда сохранять на сервере (в противном случае сохранять на сервере при закрытии документа)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Добавлять версию в хранилище после нажатия кнопки Сохранить или Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Включить иероглифы", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Настройки макросов", "PE.Views.FileMenuPanels.Settings.strPaste": "Вырезание, копирование и вставка", @@ -1353,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Автовосстановление", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Автосохранение", "PE.Views.FileMenuPanels.Settings.textDisabled": "Отключено", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Сохранять на сервере", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Сохранение промежуточных версий", "PE.Views.FileMenuPanels.Settings.textMinute": "Каждую минуту", "PE.Views.FileMenuPanels.Settings.txtAll": "Все", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Параметры автозамены...", diff --git a/apps/presentationeditor/main/locale/zh.json b/apps/presentationeditor/main/locale/zh.json index ecbf2eec2..f15c47a41 100644 --- a/apps/presentationeditor/main/locale/zh.json +++ b/apps/presentationeditor/main/locale/zh.json @@ -638,7 +638,7 @@ "PE.Controllers.Main.txtTheme_turtle": "龟", "PE.Controllers.Main.txtXAxis": "X轴", "PE.Controllers.Main.txtYAxis": "Y轴", - "PE.Controllers.Main.unknownErrorText": "示知错误", + "PE.Controllers.Main.unknownErrorText": "未知错误", "PE.Controllers.Main.unsupportedBrowserErrorText": "你的浏览器不支持", "PE.Controllers.Main.uploadImageExtMessage": "未知图像格式", "PE.Controllers.Main.uploadImageFileCountMessage": "没有图片上传", diff --git a/apps/spreadsheeteditor/embed/locale/ca.json b/apps/spreadsheeteditor/embed/locale/ca.json index 5ebe05d78..c32ab28f8 100644 --- a/apps/spreadsheeteditor/embed/locale/ca.json +++ b/apps/spreadsheeteditor/embed/locale/ca.json @@ -2,29 +2,30 @@ "common.view.modals.txtCopy": "Copiat al porta-retalls", "common.view.modals.txtEmbed": "Incrustar", "common.view.modals.txtHeight": "Alçada", - "common.view.modals.txtShare": "Compartir Enllaç", + "common.view.modals.txtShare": "Compartir enllaç", "common.view.modals.txtWidth": "Amplada", "SSE.ApplicationController.convertationErrorText": "Conversió Fallida", "SSE.ApplicationController.convertationTimeoutText": "Conversió fora de temps", "SSE.ApplicationController.criticalErrorTitle": "Error", "SSE.ApplicationController.downloadErrorText": "Descàrrega Fallida", - "SSE.ApplicationController.downloadTextText": "Descarregar Full de Càlcul", - "SSE.ApplicationController.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", - "SSE.ApplicationController.errorDefaultMessage": "Codi Error:%1", + "SSE.ApplicationController.downloadTextText": "Descarregar full de càlcul", + "SSE.ApplicationController.errorAccessDeny": "No teniu permisos per realitzar aquesta acció.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", + "SSE.ApplicationController.errorDefaultMessage": "Codi d'error:%1", "SSE.ApplicationController.errorFilePassProtect": "El fitxer està protegit amb contrasenya i no es pot obrir.", "SSE.ApplicationController.errorFileSizeExceed": "La mida del fitxer excedeix la limitació establerta per al vostre servidor. Podeu contactar amb l'administrador del Document Server per obtenir més detalls.", "SSE.ApplicationController.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "SSE.ApplicationController.errorUserDrop": "Ara no es pot accedir al fitxer.", - "SSE.ApplicationController.notcriticalErrorTitle": "Avis", + "SSE.ApplicationController.notcriticalErrorTitle": "Advertiment", "SSE.ApplicationController.scriptLoadError": "La connexió és massa lenta, alguns dels components no s’han pogut carregar. Torneu a carregar la pàgina.", "SSE.ApplicationController.textLoadingDocument": "Carregant full de càlcul", "SSE.ApplicationController.textOf": "de", "SSE.ApplicationController.txtClose": "Tancar", - "SSE.ApplicationController.unknownErrorText": "Error Desconegut.", + "SSE.ApplicationController.unknownErrorText": "Error desconegut.", "SSE.ApplicationController.unsupportedBrowserErrorText": "El vostre navegador no és compatible.", "SSE.ApplicationController.waitText": "Si us plau, esperi...", "SSE.ApplicationView.txtDownload": "Descàrrega", "SSE.ApplicationView.txtEmbed": "Incrustar", + "SSE.ApplicationView.txtFileLocation": "Obrir ubicació de l'arxiu", "SSE.ApplicationView.txtFullScreen": "Pantalla Completa", "SSE.ApplicationView.txtPrint": "Imprimir", "SSE.ApplicationView.txtShare": "Compartir" diff --git a/apps/spreadsheeteditor/embed/locale/tr.json b/apps/spreadsheeteditor/embed/locale/tr.json index e48cbdeab..55a6ebedb 100644 --- a/apps/spreadsheeteditor/embed/locale/tr.json +++ b/apps/spreadsheeteditor/embed/locale/tr.json @@ -12,6 +12,7 @@ "SSE.ApplicationController.errorAccessDeny": "Hakkınız olmayan bir eylem gerçekleştirmeye çalışıyorsunuz.
    Lütfen Belge Sunucu yöneticinize başvurun.", "SSE.ApplicationController.errorDefaultMessage": "Hata kodu: %1", "SSE.ApplicationController.errorFilePassProtect": "Döküman şifre korumalı ve açılamadı", + "SSE.ApplicationController.errorUpdateVersionOnDisconnect": "İnternet bağlantısı tekrar sağlandı, ve dosya versiyon değişti.
    Çalışmanıza devam etmeden önce, veri kaybını önlemeniz için dosyasının bir kopyasını indirmeniz ya da dosya içeriğini kopyalamanız ve sonrasında sayfayı yenilemeniz gerekmektedir.", "SSE.ApplicationController.errorUserDrop": "Belgeye şu an erişilemiyor.", "SSE.ApplicationController.notcriticalErrorTitle": "Uyarı", "SSE.ApplicationController.scriptLoadError": "Bağlantı çok yavaş, bileşenlerin bazıları yüklenemedi. Lütfen sayfayı yenileyin.", @@ -23,6 +24,7 @@ "SSE.ApplicationController.waitText": "Lütfen bekleyin...", "SSE.ApplicationView.txtDownload": "İndir", "SSE.ApplicationView.txtEmbed": "Gömülü", + "SSE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "SSE.ApplicationView.txtFullScreen": "Tam Ekran", "SSE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/de.json b/apps/spreadsheeteditor/main/locale/de.json index 7da8df2e5..b682b4c15 100644 --- a/apps/spreadsheeteditor/main/locale/de.json +++ b/apps/spreadsheeteditor/main/locale/de.json @@ -1914,7 +1914,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Ausgewählte Schriftfarbe nach oben", "SSE.Views.DocumentHolder.txtSparklines": "Sparklines", "SSE.Views.DocumentHolder.txtText": "Text", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Erweiterte Text-Einstellungen", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Erweiterte Paragraf-Einstellungen", "SSE.Views.DocumentHolder.txtTime": "Zeit", "SSE.Views.DocumentHolder.txtUngroup": "Gruppierung aufheben", "SSE.Views.DocumentHolder.txtWidth": "Breite", @@ -2019,7 +2019,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Autowiederherstellen", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Automatisch speichern", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Deaktiviert", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Auf dem Server speichern", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Speichern von Zwischenversionen", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Jede Minute", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Referenzstil", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Belarussisch", @@ -2679,7 +2679,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Zelleneinstellungen", "SSE.Views.RightMenu.txtChartSettings": "Diagrammeinstellungen", "SSE.Views.RightMenu.txtImageSettings": "Bild-Einstellungen", - "SSE.Views.RightMenu.txtParagraphSettings": "Texte-Einstellungen", + "SSE.Views.RightMenu.txtParagraphSettings": "Paragraf-Einstellungen", "SSE.Views.RightMenu.txtPivotSettings": "Einstellungen der Pivot-Tabelle", "SSE.Views.RightMenu.txtSettings": "Allgemeine Einstellungen", "SSE.Views.RightMenu.txtShapeSettings": "Form-Einstellungen", diff --git a/apps/spreadsheeteditor/main/locale/el.json b/apps/spreadsheeteditor/main/locale/el.json index a15ac6ce6..52f389a82 100644 --- a/apps/spreadsheeteditor/main/locale/el.json +++ b/apps/spreadsheeteditor/main/locale/el.json @@ -48,8 +48,22 @@ "Common.define.chartData.textStock": "Μετοχή", "Common.define.chartData.textSurface": "Επιφάνεια", "Common.define.chartData.textWinLossSpark": "Νίκες/Ήττες", + "Common.define.conditionalData.exampleText": "ΑαΒβΓγΨψΩω", + "Common.define.conditionalData.text1Above": "1 τυπική απόκλιση πάνω", + "Common.define.conditionalData.text1Below": "1 τυπική απόκλιση κάτω", + "Common.define.conditionalData.text2Above": "2 τυπική απόκλιση πάνω", + "Common.define.conditionalData.text2Below": "2 τυπική απόκλιση κάτω", + "Common.define.conditionalData.text3Above": "3 τυπική απόκλιση πάνω", + "Common.define.conditionalData.text3Below": "3 τυπική απόκλιση κάτω", + "Common.define.conditionalData.textAbove": "Πάνω από", "Common.define.conditionalData.textDate": "Ημερομηνία", "Common.define.conditionalData.textFormula": "Τύπος", + "Common.define.conditionalData.textText": "Κείμενο", + "Common.define.conditionalData.textThisWeek": "Αυτή την εβδομάδα", + "Common.define.conditionalData.textToday": "Σήμερα", + "Common.define.conditionalData.textTomorrow": "Αύριο", + "Common.define.conditionalData.textTop": "Επάνω", + "Common.define.conditionalData.textYesterday": "Χθες", "Common.Translation.warnFileLocked": "Το αρχείο τελεί υπό επεξεργασία σε άλλη εφαρμογή. Μπορείτε να συνεχίσετε την επεξεργασία και να το αποθηκεύσετε ως αντίγραφo.", "Common.Translation.warnFileLockedBtnEdit": "Δημιουργία αντιγράφου", "Common.Translation.warnFileLockedBtnView": "Άνοιγμα για προβολή", @@ -257,6 +271,7 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Αφαίρεση των Σχολίων Μου", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Αφαίρεση Πρόσφατων Σχολίων Μου", "Common.Views.ReviewChanges.txtCommentRemove": "Αφαίρεση", + "Common.Views.ReviewChanges.txtCommentResolve": "Επίλυση", "Common.Views.ReviewChanges.txtDocLang": "Γλώσσα", "Common.Views.ReviewChanges.txtFinal": "Όλες οι αλλαγές έγιναν αποδεκτές (Προεπισκόπηση)", "Common.Views.ReviewChanges.txtFinalCap": "Τελικός", @@ -1970,12 +1985,30 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Γενικά", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Ρυθμίσεις Σελίδας", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Έλεγχος ορθογραφίας", + "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Προειδοποίηση", + "SSE.Views.FormatRulesEditDlg.text2Scales": "Δίχρωμη κλίμακα", + "SSE.Views.FormatRulesEditDlg.text3Scales": "Τρίχρωμη κλίμακα", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Όλα τα περιγράμματα", + "SSE.Views.FormatRulesEditDlg.textColor": "Χρώμα κειμένου", "SSE.Views.FormatRulesEditDlg.textFill": "Γέμισμα", "SSE.Views.FormatRulesEditDlg.textFormat": "Μορφή", "SSE.Views.FormatRulesEditDlg.textFormula": "Τύπος", + "SSE.Views.FormatRulesEditDlg.textNewColor": "Προσθήκη Νέου Προσαρμοσμένου Χρώματος", + "SSE.Views.FormatRulesEditDlg.textStrikeout": "Διαγραφή", + "SSE.Views.FormatRulesEditDlg.textSubscript": "Δείκτης", + "SSE.Views.FormatRulesEditDlg.textSuperscript": "Εκθέτης", + "SSE.Views.FormatRulesEditDlg.textUnderline": "Υπογράμμιση", "SSE.Views.FormatRulesEditDlg.txtDate": "Ημερομηνία", "SSE.Views.FormatRulesEditDlg.txtFraction": "Κλάσμα", + "SSE.Views.FormatRulesEditDlg.txtText": "Κείμενο", "SSE.Views.FormatRulesManagerDlg.guestText": "Επισκέπτης", + "SSE.Views.FormatRulesManagerDlg.text1Above": "1 τυπική απόκλιση πάνω από το μέσο όρο", + "SSE.Views.FormatRulesManagerDlg.text1Below": "1 τυπική απόκλιση κάτω από το μέσο όρο", + "SSE.Views.FormatRulesManagerDlg.text2Above": "2 τυπική απόκλιση πάνω από το μέσο όρο", + "SSE.Views.FormatRulesManagerDlg.text2Below": "2 τυπική απόκλιση κάτω από το μέσο όρο", + "SSE.Views.FormatRulesManagerDlg.text3Above": "3 τυπική απόκλιση πάνω από το μέσο όρο", + "SSE.Views.FormatRulesManagerDlg.text3Below": "3 τυπική απόκλιση κάτω από το μέσο όρο", + "SSE.Views.FormatRulesManagerDlg.textAbove": "Πάνω από τον μέσο όρο", "SSE.Views.FormatRulesManagerDlg.textDelete": "Διαγραφή", "SSE.Views.FormatRulesManagerDlg.textEdit": "Επεξεργασία", "SSE.Views.FormatRulesManagerDlg.textFormat": "Μορφή", @@ -2863,6 +2896,7 @@ "SSE.Views.Toolbar.capInsertHyperlink": "Υπερσύνδεσμος", "SSE.Views.Toolbar.capInsertImage": "Εικόνα", "SSE.Views.Toolbar.capInsertShape": "Σχήμα", + "SSE.Views.Toolbar.capInsertSpark": "Μικρογραφήματα", "SSE.Views.Toolbar.capInsertTable": "Πίνακας", "SSE.Views.Toolbar.capInsertText": "Πλαίσιο Κειμένου", "SSE.Views.Toolbar.mniImageFromFile": "Εικόνα από Αρχείο", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 9737392c3..1055b9878 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1995,7 +1995,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.strDecimalSeparator": "Decimal separator", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFast": "Fast", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFontRender": "Font Hinting", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Always save to server (otherwise save to server on document close)", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Add version to storage after clicking Save or Ctrl+S", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocale": "Formula Language", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocaleEx": "Example: SUM; MIN; MAX; COUNT", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strLiveComment": "Turn on display of the comments", @@ -2020,7 +2020,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Autorecover", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Autosave", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Disabled", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Save to Server", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Saving intermediate versions", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Every Minute", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Reference Style", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Belarusian", diff --git a/apps/spreadsheeteditor/main/locale/es.json b/apps/spreadsheeteditor/main/locale/es.json index c02edc188..0b6d29ed9 100644 --- a/apps/spreadsheeteditor/main/locale/es.json +++ b/apps/spreadsheeteditor/main/locale/es.json @@ -127,7 +127,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "El documento ha sido cambiado por otro usuario.
    Por favor haga clic para guardar sus cambios y recargue las actualizaciones.", "Common.UI.ThemeColorPalette.textStandartColors": "Colores estándar", "Common.UI.ThemeColorPalette.textThemeColors": "Colores de tema", - "Common.UI.Themes.txtThemeClassicLight": "Claro clásico", + "Common.UI.Themes.txtThemeClassicLight": "Clásico claro", "Common.UI.Themes.txtThemeDark": "Oscuro", "Common.UI.Themes.txtThemeLight": "Claro", "Common.UI.Window.cancelButtonText": "Cancelar", @@ -1914,7 +1914,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Color de letra seleccionado en la parte superior", "SSE.Views.DocumentHolder.txtSparklines": "Sparklines", "SSE.Views.DocumentHolder.txtText": "Texto", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Ajustes avanzados de texto", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Ajustes avanzados de párrafo", "SSE.Views.DocumentHolder.txtTime": "Hora", "SSE.Views.DocumentHolder.txtUngroup": "Desagrupar", "SSE.Views.DocumentHolder.txtWidth": "Ancho", @@ -1994,7 +1994,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.strDecimalSeparator": "Separador decimal", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFast": "rápido", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFontRender": "Hinting", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Siempre guardar en el servidor (de lo contrario guardar en el servidor al cerrar documento)", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Añadir la versión al almacenamiento después de hacer clic en Guardar o Ctrl+S", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocale": "Idioma de fórmulas", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocaleEx": "Ejemplo: SUMA; MIN; MAX; CONTAR", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strLiveComment": "Activar la visualización de comentarios", @@ -2019,7 +2019,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Autorrecuperación", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Guardar automáticamente", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Desactivado", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Guardar al servidor", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Guardar versiones intermedias", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Cada minuto", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Estilo de referencias", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Bieloruso", @@ -2679,7 +2679,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Ajustes de celda", "SSE.Views.RightMenu.txtChartSettings": "Ajustes de gráfico", "SSE.Views.RightMenu.txtImageSettings": "Ajustes de imagen", - "SSE.Views.RightMenu.txtParagraphSettings": "Ajustes de texto", + "SSE.Views.RightMenu.txtParagraphSettings": "Ajustes de párrafo", "SSE.Views.RightMenu.txtPivotSettings": "Ajustes de tabla de pivote", "SSE.Views.RightMenu.txtSettings": "Ajustes comunes", "SSE.Views.RightMenu.txtShapeSettings": "Ajustes de forma", diff --git a/apps/spreadsheeteditor/main/locale/fr.json b/apps/spreadsheeteditor/main/locale/fr.json index 62e2ca69c..48318d550 100644 --- a/apps/spreadsheeteditor/main/locale/fr.json +++ b/apps/spreadsheeteditor/main/locale/fr.json @@ -127,7 +127,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Le document a été modifié par un autre utilisateur.
    Cliquez pour enregistrer vos modifications et recharger les mises à jour.", "Common.UI.ThemeColorPalette.textStandartColors": "Couleurs standard", "Common.UI.ThemeColorPalette.textThemeColors": "Couleurs de thème", - "Common.UI.Themes.txtThemeClassicLight": "Clair classique", + "Common.UI.Themes.txtThemeClassicLight": "Classique clair", "Common.UI.Themes.txtThemeDark": "Sombre", "Common.UI.Themes.txtThemeLight": "Clair", "Common.UI.Window.cancelButtonText": "Annuler", @@ -1474,7 +1474,7 @@ "SSE.Views.CellSettings.tipRemoveGradientPoint": "Supprimer le point de dégradé", "SSE.Views.CellSettings.tipRight": "Fixer seulement bordure extérieure droite", "SSE.Views.CellSettings.tipTop": "Fixer seulement bordure extérieure supérieure", - "SSE.Views.ChartDataDialog.errorInFormula": "La formule que vous avez saisi contient une erreur.", + "SSE.Views.ChartDataDialog.errorInFormula": "La formule que vous avez saisi contient une erreure.", "SSE.Views.ChartDataDialog.errorInvalidReference": "La référence n'est pas valide. La référence doit être attachée à une feuille de calcul ouverte.", "SSE.Views.ChartDataDialog.errorMaxPoints": "Maximum de 4096 points en série par graphique.", "SSE.Views.ChartDataDialog.errorMaxRows": "Le nombre maximum de séries de données par graphique est de 255.", @@ -1914,7 +1914,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Couleur sélectionné de la police sur le dessus", "SSE.Views.DocumentHolder.txtSparklines": "Graphiques sparkline", "SSE.Views.DocumentHolder.txtText": "Texte", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Paramètres avancés du texte", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Paramètres avancés du paragraphe", "SSE.Views.DocumentHolder.txtTime": "Heure", "SSE.Views.DocumentHolder.txtUngroup": "Dissocier", "SSE.Views.DocumentHolder.txtWidth": "Largeur", @@ -1994,7 +1994,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.strDecimalSeparator": "Séparateur décimal", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFast": "Rapide", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFontRender": "Hinting de la police", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Toujours enregistrer sur le serveur (sinon enregistrer sur le serveur lors de la fermeture du document)", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Ajouter une version dans l'espace de stockage en cliquant Enregistrer ou Ctrl+S", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocale": "La langue de formule", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocaleEx": "Example: SUM; MIN; MAX; COUNT", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strLiveComment": "Activer l'affichage des commentaires", @@ -2019,7 +2019,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Récupération automatique", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Enregistrement automatique", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Désactivé", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Enregistrer sur le serveur", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Enregistrer des versions intermédiaires", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Chaque minute", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Style de références", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Biélorusse", @@ -2679,7 +2679,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Paramètres de cellule", "SSE.Views.RightMenu.txtChartSettings": "Paramètres du graphique", "SSE.Views.RightMenu.txtImageSettings": "Paramètres de l'image", - "SSE.Views.RightMenu.txtParagraphSettings": "Paramètres du texte", + "SSE.Views.RightMenu.txtParagraphSettings": "Paramètres du paragraphe", "SSE.Views.RightMenu.txtPivotSettings": "Paramètres de tableau croisé", "SSE.Views.RightMenu.txtSettings": "Paramètres communs", "SSE.Views.RightMenu.txtShapeSettings": "Paramètres de forme", @@ -3412,4 +3412,4 @@ "SSE.Views.ViewTab.tipCreate": "Créer l'aperçu d'une feuille", "SSE.Views.ViewTab.tipFreeze": "Verrouiller les volets", "SSE.Views.ViewTab.tipSheetView": "Afficher une feuille" -} +} \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/pt.json b/apps/spreadsheeteditor/main/locale/pt.json index bcfda5ce6..a406c8eb7 100644 --- a/apps/spreadsheeteditor/main/locale/pt.json +++ b/apps/spreadsheeteditor/main/locale/pt.json @@ -50,6 +50,12 @@ "Common.define.chartData.textWinLossSpark": "Ganhos/Perdas", "Common.define.conditionalData.exampleText": "AaBbCcYyZz", "Common.define.conditionalData.noFormatText": "Nenhum conjunto de formatos", + "Common.define.conditionalData.text1Above": "1 desvio padrão acima", + "Common.define.conditionalData.text1Below": "1 desvio padrão abaixo", + "Common.define.conditionalData.text2Above": "2 desvios padrão acima", + "Common.define.conditionalData.text2Below": "2 desvios padrão abaixo", + "Common.define.conditionalData.text3Above": "3 desvios padrão acima", + "Common.define.conditionalData.text3Below": "3 desvios padrão abaixo", "Common.define.conditionalData.textAbove": "Acima", "Common.define.conditionalData.textAverage": "Média", "Common.define.conditionalData.textBegins": "Começa com", @@ -81,8 +87,18 @@ "Common.define.conditionalData.textNextWeek": "Próxima semana", "Common.define.conditionalData.textNotBetween": "Não entre...", "Common.define.conditionalData.textNotBlanks": "Não contém espaços em branco", + "Common.define.conditionalData.textNotContains": "Não contém", "Common.define.conditionalData.textNotEqual": "Não igual a", "Common.define.conditionalData.textNotErrors": "Não contém erros", + "Common.define.conditionalData.textText": "Тexto", + "Common.define.conditionalData.textThisMonth": "Este mês", + "Common.define.conditionalData.textThisWeek": "Esta semana", + "Common.define.conditionalData.textToday": "Hoje", + "Common.define.conditionalData.textTomorrow": "Amanhã", + "Common.define.conditionalData.textTop": "Superior", + "Common.define.conditionalData.textUnique": "Único", + "Common.define.conditionalData.textValue": "O valor é", + "Common.define.conditionalData.textYesterday": "Ontem", "Common.Translation.warnFileLocked": "Documento está em uso por outra aplicação. Você pode continuar editando e salvá-lo como uma cópia.", "Common.Translation.warnFileLockedBtnEdit": "Criar uma cópia", "Common.Translation.warnFileLockedBtnView": "Aberto para visualização", @@ -111,7 +127,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "O documento foi alterado por outro usuário.
    Clique para salvar suas alterações e recarregar as atualizações.", "Common.UI.ThemeColorPalette.textStandartColors": "Cores padrão", "Common.UI.ThemeColorPalette.textThemeColors": "Cores do tema", - "Common.UI.Themes.txtThemeClassicLight": "Claro clássico", + "Common.UI.Themes.txtThemeClassicLight": "Clássico claro", "Common.UI.Themes.txtThemeDark": "Escuro", "Common.UI.Themes.txtThemeLight": "Claro", "Common.UI.Window.cancelButtonText": "Cancelar", @@ -224,11 +240,13 @@ "Common.Views.ListSettingsDialog.txtType": "Tipo", "Common.Views.OpenDialog.closeButtonText": "Fechar arquivo", "Common.Views.OpenDialog.textInvalidRange": "Intervalo de células inválido", + "Common.Views.OpenDialog.textSelectData": "Selecionar dados", "Common.Views.OpenDialog.txtAdvanced": "Avançado", "Common.Views.OpenDialog.txtColon": "Cólon", "Common.Views.OpenDialog.txtComma": "Vírgula", "Common.Views.OpenDialog.txtDelimiter": "Delimiter", "Common.Views.OpenDialog.txtDestData": "Escolha onde colocar os dados", + "Common.Views.OpenDialog.txtEmpty": "Este campo é obrigatório", "Common.Views.OpenDialog.txtEncoding": "Encoding ", "Common.Views.OpenDialog.txtIncorrectPwd": "Senha incorreta.", "Common.Views.OpenDialog.txtOpenFile": "Inserir a Senha para Abrir o Arquivo", @@ -275,6 +293,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Definir o modo de co-edição", "Common.Views.ReviewChanges.tipCommentRem": "Remover comentários", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Remover comentários atuais", + "Common.Views.ReviewChanges.tipCommentResolve": "Resolver comentários", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Resolver comentários atuais", "Common.Views.ReviewChanges.tipHistory": "Mostrar histórico de versão", "Common.Views.ReviewChanges.tipRejectCurrent": "Rejeitar alteração atual", "Common.Views.ReviewChanges.tipReview": "Rastrear alterações", @@ -294,6 +314,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Remover meus comentários", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Remover meus comentários atuais", "Common.Views.ReviewChanges.txtCommentRemove": "Retirar", + "Common.Views.ReviewChanges.txtCommentResolve": "Resolver", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Resolver todos os comentários", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Resolver comentários atuais", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Resolver meus comentários", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Resolver meus comentários atuais", "Common.Views.ReviewChanges.txtDocLang": "Idioma", "Common.Views.ReviewChanges.txtFinal": "Todas as alterações aceitas (Visualização)", "Common.Views.ReviewChanges.txtFinalCap": "Final", @@ -381,12 +406,14 @@ "Common.Views.UserNameDialog.textLabel": "Rótulo:", "Common.Views.UserNameDialog.textLabelError": "Etiqueta não deve estar vazia.", "SSE.Controllers.DataTab.textColumns": "Colunas", + "SSE.Controllers.DataTab.textEmptyUrl": "Você precisa especificar o URL.", "SSE.Controllers.DataTab.textRows": "Linhas", "SSE.Controllers.DataTab.textWizard": "Texto para colunas", "SSE.Controllers.DataTab.txtDataValidation": "Validação de dados", "SSE.Controllers.DataTab.txtExpand": "Expandir", "SSE.Controllers.DataTab.txtExpandRemDuplicates": "Os dados próximos à seleção não serão removidos. Deseja expandir a seleção para incluir os dados adjacentes ou continuar apenas com as células atualmente selecionadas?", "SSE.Controllers.DataTab.txtExtendDataValidation": "A seleção contém algumas células sem configurações de validação de dados.
    Você deseja estender a validação de dados a essas células?", + "SSE.Controllers.DataTab.txtImportWizard": "Assistente de importação de texto", "SSE.Controllers.DataTab.txtRemDuplicates": "Remover Duplicatas", "SSE.Controllers.DataTab.txtRemoveDataValidation": "A seleção contém mais de um tipo de validação.
    Configurações de corrente de partida e continua?", "SSE.Controllers.DataTab.txtRemSelected": "Remover em selecionado", @@ -707,6 +734,7 @@ "SSE.Controllers.Main.textShape": "Forma", "SSE.Controllers.Main.textStrict": "Strict mode", "SSE.Controllers.Main.textTryUndoRedo": "The Undo/Redo functions are disabled for the Fast co-editing mode.
    Click the 'Strict mode' button to switch to the Strict co-editing mode to edit the file without other users interference and send your changes only after you save them. You can switch between the co-editing modes using the editor Advanced settings.", + "SSE.Controllers.Main.textTryUndoRedoWarn": "As funções Desfazer/Refazer estão desabilitadas para o modo de coedição rápido", "SSE.Controllers.Main.textYes": "Sim", "SSE.Controllers.Main.titleLicenseExp": "Licença expirada", "SSE.Controllers.Main.titleRecalcFormulas": "Calculando...", @@ -1008,7 +1036,9 @@ "SSE.Controllers.Toolbar.textOperator": "Operadores", "SSE.Controllers.Toolbar.textPivot": "Tabela Dinâmica", "SSE.Controllers.Toolbar.textRadical": "Radicais", + "SSE.Controllers.Toolbar.textRating": "Classificações", "SSE.Controllers.Toolbar.textScript": "Scripts", + "SSE.Controllers.Toolbar.textShapes": "Formas", "SSE.Controllers.Toolbar.textSymbols": "Símbolos", "SSE.Controllers.Toolbar.textWarning": "Aviso", "SSE.Controllers.Toolbar.txtAccent_Accent": "Agudo", @@ -1427,6 +1457,7 @@ "SSE.Views.CellSettings.textRadial": "Radial", "SSE.Views.CellSettings.textSelectBorders": "Selecione as bordas que você deseja alterar aplicando o estilo escolhido acima", "SSE.Views.CellSettings.textSelection": "Da seleção atual", + "SSE.Views.CellSettings.textThisPivot": "De uma tabela dinâmica", "SSE.Views.CellSettings.textThisSheet": "A partir desta folha de trabalho", "SSE.Views.CellSettings.textThisTable": "A partir desta tabela", "SSE.Views.CellSettings.tipAddGradientPoint": "Adicionar ponto de gradiente", @@ -1640,9 +1671,12 @@ "SSE.Views.CreatePivotDialog.textSelectData": "Selecionar dados", "SSE.Views.CreatePivotDialog.textTitle": "Criar tabela dinâmica", "SSE.Views.CreatePivotDialog.txtEmpty": "Este campo é obrigatório", + "SSE.Views.CreateSparklineDialog.textDataRange": "Intervalo de dados de origem", "SSE.Views.CreateSparklineDialog.textDestination": "Escolha, onde colocar os sparklines", "SSE.Views.CreateSparklineDialog.textInvalidRange": "Intervalo de células inválido", + "SSE.Views.CreateSparklineDialog.textSelectData": "Selecionar dados", "SSE.Views.CreateSparklineDialog.textTitle": "Criar Sparklines", + "SSE.Views.CreateSparklineDialog.txtEmpty": "Este campo é obrigatório", "SSE.Views.DataTab.capBtnGroup": "Grupo", "SSE.Views.DataTab.capBtnTextCustomSort": "Classificação personalizada", "SSE.Views.DataTab.capBtnTextDataValidation": "Validação de dados", @@ -1880,7 +1914,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Selecionou cor da fonte no topo", "SSE.Views.DocumentHolder.txtSparklines": "Minigráficos", "SSE.Views.DocumentHolder.txtText": "Texto", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Configurações avançadas de texto", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Configurações avançadas de parágrafo", "SSE.Views.DocumentHolder.txtTime": "Tempo", "SSE.Views.DocumentHolder.txtUngroup": "Desagrupar", "SSE.Views.DocumentHolder.txtWidth": "Largura", @@ -2016,11 +2050,19 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNl": "Holandês", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPl": "Polonês", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Ponto", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPtlang": "Português", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRo": "Romeno", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Russian", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacros": "Habilitar todos", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacrosDesc": "Habilitar todas as macros sem uma notificação", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSk": "Eslovaco", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSl": "Esloveno", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacros": "Desabilitar tudo", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacrosDesc": "Desativar todas as macros sem uma notificação", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSv": "Sueco", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtTr": "Turco", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtUk": "Ucraniano", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtVi": "Vietnamita", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacros": "Mostrar notificação", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacrosDesc": "Desativar todas as macros com uma notificação", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "como Windows", @@ -2046,6 +2088,9 @@ "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Configurações de página", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Verificação ortográfica", "SSE.Views.FormatRulesEditDlg.fillColor": "Cor do plano de fundo", + "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Aviso", + "SSE.Views.FormatRulesEditDlg.text2Scales": "Escala Bicolor", + "SSE.Views.FormatRulesEditDlg.text3Scales": "Escala Tricolor", "SSE.Views.FormatRulesEditDlg.textAllBorders": "Todas as bordas", "SSE.Views.FormatRulesEditDlg.textAppearance": "Aparência de barra", "SSE.Views.FormatRulesEditDlg.textApply": "Aplicar ao intervalo", @@ -2058,19 +2103,28 @@ "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Estilo de borda", "SSE.Views.FormatRulesEditDlg.textBottomBorders": "Bordas inferiores", "SSE.Views.FormatRulesEditDlg.textCannotAddCF": "Não é possível adicionar a formatação condicional.", + "SSE.Views.FormatRulesEditDlg.textCellMidpoint": "Ponto médio da célula", "SSE.Views.FormatRulesEditDlg.textCenterBorders": "Bordas verticais interiores", "SSE.Views.FormatRulesEditDlg.textClear": "Limpar", + "SSE.Views.FormatRulesEditDlg.textColor": "Cor do texto", "SSE.Views.FormatRulesEditDlg.textContext": "Contexto", "SSE.Views.FormatRulesEditDlg.textCustom": "Personalizado", "SSE.Views.FormatRulesEditDlg.textDiagDownBorder": "Borda inferior diagonal", "SSE.Views.FormatRulesEditDlg.textDiagUpBorder": "Borda superior diagonal", "SSE.Views.FormatRulesEditDlg.textEmptyFormula": "Insira uma fórmula válida.", + "SSE.Views.FormatRulesEditDlg.textEmptyFormulaExt": "A fórmula que você inseriu não avalia para um número, data, hora ou string.", "SSE.Views.FormatRulesEditDlg.textEmptyText": "Digite um valor.", + "SSE.Views.FormatRulesEditDlg.textEmptyValue": "O valor inserido não é um número, data, hora ou string válido.", + "SSE.Views.FormatRulesEditDlg.textErrorGreater": "O valor para o {0} deve ser maior do que o valor para o {1}.", "SSE.Views.FormatRulesEditDlg.textErrorTop10Between": "Digite um número entre {0} e {1}.", "SSE.Views.FormatRulesEditDlg.textFill": "Preencher", "SSE.Views.FormatRulesEditDlg.textFormat": "Formato", "SSE.Views.FormatRulesEditDlg.textFormula": "Fórmula", "SSE.Views.FormatRulesEditDlg.textGradient": "Gradiente", + "SSE.Views.FormatRulesEditDlg.textIconLabel": "quando {0} {1} e", + "SSE.Views.FormatRulesEditDlg.textIconLabelFirst": "quando {0} {1}", + "SSE.Views.FormatRulesEditDlg.textIconLabelLast": "quando o valor é", + "SSE.Views.FormatRulesEditDlg.textIconsOverlap": "Um ou mais intervalos de dados de ícones se sobrepõem.
    Ajustar valores de intervalos de dados de ícones para que os intervalos não se sobreponham.", "SSE.Views.FormatRulesEditDlg.textIconStyle": "Estilo Ícone", "SSE.Views.FormatRulesEditDlg.textInsideBorders": "Bordas interiores", "SSE.Views.FormatRulesEditDlg.textInvalid": "Faixa de dados inválida.", @@ -2090,22 +2144,64 @@ "SSE.Views.FormatRulesEditDlg.textNewColor": "Adicionar nova cor personalizada", "SSE.Views.FormatRulesEditDlg.textNoBorders": "Sem bordas", "SSE.Views.FormatRulesEditDlg.textNone": "Nenhum", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentage": "Um ou mais dos valores especificados não é uma porcentagem válida.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentageExt": "O valor especificado {0} não é uma porcentagem válida.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentile": "Um ou mais dos valores especificados não é um percentil válido.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentileExt": "O valor especificado {0} não é um percentil válido.", + "SSE.Views.FormatRulesEditDlg.textOutBorders": "Bordas externas", + "SSE.Views.FormatRulesEditDlg.textPercent": "Por cento", + "SSE.Views.FormatRulesEditDlg.textPercentile": "Percentil", + "SSE.Views.FormatRulesEditDlg.textPosition": "Posição", + "SSE.Views.FormatRulesEditDlg.textPositive": "Positivo", + "SSE.Views.FormatRulesEditDlg.textPresets": "Predefinições", + "SSE.Views.FormatRulesEditDlg.textPreview": "Pré-visualizar", + "SSE.Views.FormatRulesEditDlg.textRelativeRef": "Não é possível utilizar referências relativas em critérios de formatação condicional para escalas de cores, barras de dados e conjuntos de ícones.", + "SSE.Views.FormatRulesEditDlg.textReverse": "Ordem Reversa dos Ícones", + "SSE.Views.FormatRulesEditDlg.textRight2Left": "Da direita para a esquerda", + "SSE.Views.FormatRulesEditDlg.textRightBorders": "Bordas direitas", + "SSE.Views.FormatRulesEditDlg.textRule": "Regra", + "SSE.Views.FormatRulesEditDlg.textSameAs": "O mesmo que positivo", + "SSE.Views.FormatRulesEditDlg.textSelectData": "Selecionar dados", + "SSE.Views.FormatRulesEditDlg.textShortBar": "barra mais curta", + "SSE.Views.FormatRulesEditDlg.textShowBar": "Mostrar apenas barra", + "SSE.Views.FormatRulesEditDlg.textShowIcon": "Mostrar apenas ícone", + "SSE.Views.FormatRulesEditDlg.textSingleRef": "Este tipo de referência não pode ser usado em uma fórmula de formatação condicional.
    Alterar a referência para uma única célula, ou usar a referência com uma função de planilha, tal como =SOMA(A1:B5).", + "SSE.Views.FormatRulesEditDlg.textSolid": "Sólido", + "SSE.Views.FormatRulesEditDlg.textStrikeout": "Tachado", + "SSE.Views.FormatRulesEditDlg.textSubscript": "Subscrito", + "SSE.Views.FormatRulesEditDlg.textSuperscript": "Sobrescrito", + "SSE.Views.FormatRulesEditDlg.textTopBorders": "Bordas superiores", + "SSE.Views.FormatRulesEditDlg.textUnderline": "Sublinhado", "SSE.Views.FormatRulesEditDlg.tipBorders": "Bordas", "SSE.Views.FormatRulesEditDlg.tipNumFormat": "Formato Numérico", "SSE.Views.FormatRulesEditDlg.txtAccounting": "Contabilidade", "SSE.Views.FormatRulesEditDlg.txtCurrency": "Moeda", "SSE.Views.FormatRulesEditDlg.txtDate": "Data", + "SSE.Views.FormatRulesEditDlg.txtEmpty": "Este campo é obrigatório", "SSE.Views.FormatRulesEditDlg.txtFraction": "Fração", "SSE.Views.FormatRulesEditDlg.txtGeneral": "Geral", "SSE.Views.FormatRulesEditDlg.txtNumber": "Número", + "SSE.Views.FormatRulesEditDlg.txtPercentage": "Porcentagem", + "SSE.Views.FormatRulesEditDlg.txtScientific": "Científico", + "SSE.Views.FormatRulesEditDlg.txtText": "Тexto", + "SSE.Views.FormatRulesEditDlg.txtTime": "Hora", "SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Editar regra de formatação", "SSE.Views.FormatRulesEditDlg.txtTitleNew": "Nova regra de formatação", "SSE.Views.FormatRulesManagerDlg.guestText": "Convidado(a)", + "SSE.Views.FormatRulesManagerDlg.text1Above": "1 desvio padrão acima da Média", + "SSE.Views.FormatRulesManagerDlg.text1Below": "1 desvio padrão abaixo da Média", + "SSE.Views.FormatRulesManagerDlg.text2Above": "2 desvios padrão acima da Média", + "SSE.Views.FormatRulesManagerDlg.text2Below": "2 desvios padrão abaixo da Média", + "SSE.Views.FormatRulesManagerDlg.text3Above": "3 desvios padrão acima da Média", + "SSE.Views.FormatRulesManagerDlg.text3Below": "3 desvios padrão abaixo da Média", "SSE.Views.FormatRulesManagerDlg.textAbove": "Acima da média", "SSE.Views.FormatRulesManagerDlg.textApply": "Aplicar à", + "SSE.Views.FormatRulesManagerDlg.textBeginsWith": "O valor da célula começa com", "SSE.Views.FormatRulesManagerDlg.textBelow": "Abaixo da média", "SSE.Views.FormatRulesManagerDlg.textBetween": "está entre {0} e {1}", + "SSE.Views.FormatRulesManagerDlg.textCellValue": "Valor da célula", "SSE.Views.FormatRulesManagerDlg.textColorScale": "Escala de cor graduada", + "SSE.Views.FormatRulesManagerDlg.textContains": "O valor da célula contém", "SSE.Views.FormatRulesManagerDlg.textContainsBlank": "A célula contém um valor em branco", "SSE.Views.FormatRulesManagerDlg.textContainsError": "A célula contém um erro", "SSE.Views.FormatRulesManagerDlg.textDelete": "Excluir", @@ -2119,9 +2215,19 @@ "SSE.Views.FormatRulesManagerDlg.textIconSet": "Conjunto de ícones", "SSE.Views.FormatRulesManagerDlg.textNew": "Novo", "SSE.Views.FormatRulesManagerDlg.textNotBetween": "não se encontra entre {0} e {1}.", + "SSE.Views.FormatRulesManagerDlg.textNotContains": "O valor da célula não contém", "SSE.Views.FormatRulesManagerDlg.textNotContainsBlank": "A célula não contém um valor em branco", + "SSE.Views.FormatRulesManagerDlg.textNotContainsError": "A célula não contém um erro", + "SSE.Views.FormatRulesManagerDlg.textRules": "Regras", + "SSE.Views.FormatRulesManagerDlg.textScope": "Mostrar regras de formatação para", + "SSE.Views.FormatRulesManagerDlg.textSelectData": "Selecionar dados", "SSE.Views.FormatRulesManagerDlg.textSelection": "Seleção atual", + "SSE.Views.FormatRulesManagerDlg.textThisPivot": "Tabela dinâmica", + "SSE.Views.FormatRulesManagerDlg.textThisSheet": "Esta folha de trabalho", + "SSE.Views.FormatRulesManagerDlg.textThisTable": "Esta tabela", + "SSE.Views.FormatRulesManagerDlg.textUnique": "Valores únicos", "SSE.Views.FormatRulesManagerDlg.textUp": "Mover regra para cima", + "SSE.Views.FormatRulesManagerDlg.tipIsLocked": "Este elemento está sendo editado por outro usuário.", "SSE.Views.FormatRulesManagerDlg.txtTitle": "Formatação condicional", "SSE.Views.FormatSettingsDialog.textCategory": "Categoria", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimal", @@ -2573,7 +2679,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Configurações de célula", "SSE.Views.RightMenu.txtChartSettings": "Configurações do gráfico", "SSE.Views.RightMenu.txtImageSettings": "Configurações de imagem", - "SSE.Views.RightMenu.txtParagraphSettings": "Configurações de texto", + "SSE.Views.RightMenu.txtParagraphSettings": "Configurações do parágrafo", "SSE.Views.RightMenu.txtPivotSettings": "Configurações de tabela dinâmica", "SSE.Views.RightMenu.txtSettings": "Configurações comuns", "SSE.Views.RightMenu.txtShapeSettings": "Configurações da forma", @@ -3010,6 +3116,7 @@ "SSE.Views.Toolbar.capInsertHyperlink": "Hiperlink", "SSE.Views.Toolbar.capInsertImage": "Imagem", "SSE.Views.Toolbar.capInsertShape": "Forma", + "SSE.Views.Toolbar.capInsertSpark": "Minigráficos", "SSE.Views.Toolbar.capInsertTable": "Tabela", "SSE.Views.Toolbar.capInsertText": "Caixa de texto", "SSE.Views.Toolbar.mniImageFromFile": "Imagem do arquivo", @@ -3094,6 +3201,7 @@ "SSE.Views.Toolbar.textTabLayout": "Layout", "SSE.Views.Toolbar.textTabProtect": "Proteção", "SSE.Views.Toolbar.textTabView": "Ver", + "SSE.Views.Toolbar.textThisPivot": "De uma tabela dinâmica", "SSE.Views.Toolbar.textThisSheet": "A partir desta folha de trabalho", "SSE.Views.Toolbar.textThisTable": "A partir desta tabela", "SSE.Views.Toolbar.textTop": "Superior: ", diff --git a/apps/spreadsheeteditor/main/locale/ro.json b/apps/spreadsheeteditor/main/locale/ro.json index 010536dc3..1cd00ac47 100644 --- a/apps/spreadsheeteditor/main/locale/ro.json +++ b/apps/spreadsheeteditor/main/locale/ro.json @@ -48,6 +48,40 @@ "Common.define.chartData.textStock": "Bursiere", "Common.define.chartData.textSurface": "Suprafața", "Common.define.chartData.textWinLossSpark": "Câștig/pierdere", + "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.text1Above": "1 abatere standard deasupra", + "Common.define.conditionalData.text1Below": "1 abatere standard dedesubt ", + "Common.define.conditionalData.text2Above": "2 abateri standard deasupra", + "Common.define.conditionalData.text2Below": "2 abateri standard dedesubt", + "Common.define.conditionalData.text3Above": "3 abateri standard deasupra", + "Common.define.conditionalData.text3Below": "3 abateri standard dedesubt", + "Common.define.conditionalData.textAbove": "Deasupra", + "Common.define.conditionalData.textAverage": "Medie", + "Common.define.conditionalData.textBegins": "Începe cu", + "Common.define.conditionalData.textBelow": "Dedesubt", + "Common.define.conditionalData.textBetween": "Între", + "Common.define.conditionalData.textBlank": "Necompletat", + "Common.define.conditionalData.textBlanks": "Conțime celule goale", + "Common.define.conditionalData.textBottom": "Jos", + "Common.define.conditionalData.textContains": "Conține", + "Common.define.conditionalData.textDataBar": "Bară de date", + "Common.define.conditionalData.textDate": "Dată", + "Common.define.conditionalData.textDuplicate": "Dubluri", + "Common.define.conditionalData.textEnds": "Se termină cu", + "Common.define.conditionalData.textEqAbove": "Egal cu sau deasupra", + "Common.define.conditionalData.textEqBelow": "Egal cu sau sub", + "Common.define.conditionalData.textEqual": "Egal cu", + "Common.define.conditionalData.textError": "Eroare", + "Common.define.conditionalData.textErrors": "Conține erori", + "Common.define.conditionalData.textFormula": "Formula", + "Common.define.conditionalData.textGreater": "Mai mare decât", + "Common.define.conditionalData.textGreaterEq": "Mai mare sau egal", + "Common.define.conditionalData.textIconSets": "Ansamble de icoane", + "Common.define.conditionalData.textLast7days": "În ultimele 7 zile", + "Common.define.conditionalData.textLessEq": "Mai mic sau egal", + "Common.define.conditionalData.textNotBlanks": "Nu conțime celule goale", + "Common.define.conditionalData.textNotContains": "Nu conține", + "Common.define.conditionalData.textNotErrors": "Nu conține erori", "Common.Translation.warnFileLocked": "Fișierul este editat într-o altă aplicație. Puteți continua să editați și să-l salvați ca o copie.", "Common.Translation.warnFileLockedBtnEdit": "Crează o copie", "Common.Translation.warnFileLockedBtnView": "Deschide vizualizarea", @@ -76,7 +110,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Documentul a fost modificat de către un alt utilizator.
    Salvați modificările făcute de dumneavoastră și reîmprospătați documentul.", "Common.UI.ThemeColorPalette.textStandartColors": "Culori standard", "Common.UI.ThemeColorPalette.textThemeColors": "Culori temă", - "Common.UI.Themes.txtThemeClassicLight": "Luminos Clasic", + "Common.UI.Themes.txtThemeClassicLight": "Clasic Luminos", "Common.UI.Themes.txtThemeDark": "Întunecat", "Common.UI.Themes.txtThemeLight": "Luminos", "Common.UI.Window.cancelButtonText": "Anulare", @@ -100,6 +134,7 @@ "Common.Views.About.txtVersion": "Versiune", "Common.Views.AutoCorrectDialog.textAdd": "Adaugă", "Common.Views.AutoCorrectDialog.textApplyAsWork": "Se aplică în timp ce lucrați", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "AutoCorecție", "Common.Views.AutoCorrectDialog.textAutoFormat": "Formatare automată la tastare", "Common.Views.AutoCorrectDialog.textBy": "După", "Common.Views.AutoCorrectDialog.textDelete": "Ștergere", @@ -190,6 +225,7 @@ "Common.Views.OpenDialog.txtColon": "Două puncte", "Common.Views.OpenDialog.txtComma": "Virgulă", "Common.Views.OpenDialog.txtDelimiter": "Delimitator", + "Common.Views.OpenDialog.txtDestData": "Alegeți locul unde se va plasa datele", "Common.Views.OpenDialog.txtEncoding": "Codificare", "Common.Views.OpenDialog.txtIncorrectPwd": "Parolă incorectă", "Common.Views.OpenDialog.txtOpenFile": "Introduceți parola pentru deschidere fișier", @@ -619,6 +655,7 @@ "SSE.Controllers.Main.errorWrongOperator": "Eroare în formulă. Operator necorespunzător.
    Corectați eroarea.", "SSE.Controllers.Main.errRemDuplicates": "Valori dublate au fost identificate și eliminate: {0}, valorile unice rămase: {1}.", "SSE.Controllers.Main.leavePageText": "Nu ați salvat modificările din foaia de calcul. Faceți clic pe Rămâi în pagină și apoi pe Salvare dacă doriți să le salvați. Faceți clic pe Părăsește aceasta pagina ca să renunțați la toate modificările nesalvate.", + "SSE.Controllers.Main.leavePageTextOnClose": "Toate modificările nesalvate din foaia de calcul vor fi pierdute.
    Pentru a le salva, faceți clic pe Revocare și apoi pe Salvare. Apăsați OK dacă doriți să renunțați la modificările nesalvate.", "SSE.Controllers.Main.loadFontsTextText": "Încărcarea datelor...", "SSE.Controllers.Main.loadFontsTitleText": "Încărcarea datelor", "SSE.Controllers.Main.loadFontTextText": "Încărcarea datelor...", @@ -954,9 +991,11 @@ "SSE.Controllers.Toolbar.errorStockChart": "Sortarea rândurilor în ordinea incorectă. Pentru crearea unei diagrame de stoc, datele în foaie trebuie sortate în ordinea următoare:
    prețul de deschidere, prețul maxim, prețul minim, prețul de închidere.", "SSE.Controllers.Toolbar.textAccent": "Accente", "SSE.Controllers.Toolbar.textBracket": "Paranteze", + "SSE.Controllers.Toolbar.textDirectional": "Direcțional", "SSE.Controllers.Toolbar.textFontSizeErr": "Valoarea introdusă nu este corectă.
    Selectați valoarea cuprinsă înte 1 și 409.", "SSE.Controllers.Toolbar.textFraction": "Fracții", "SSE.Controllers.Toolbar.textFunction": "Funcții", + "SSE.Controllers.Toolbar.textIndicator": "Indicatorii", "SSE.Controllers.Toolbar.textInsert": "Inserare", "SSE.Controllers.Toolbar.textIntegral": "Integrale", "SSE.Controllers.Toolbar.textLargeOperator": "Operatori mari", @@ -1360,8 +1399,12 @@ "SSE.Views.CellSettings.textBackground": "Culoare de fundal", "SSE.Views.CellSettings.textBorderColor": "Culoare", "SSE.Views.CellSettings.textBorders": "Stil borduri", + "SSE.Views.CellSettings.textClearRule": "Golire reguli", "SSE.Views.CellSettings.textColor": "Culoare de umplere", + "SSE.Views.CellSettings.textColorScales": "Scale de culori", + "SSE.Views.CellSettings.textCondFormat": "Formatarea condiționată", "SSE.Views.CellSettings.textControl": "Control de text", + "SSE.Views.CellSettings.textDataBars": "Bare de date", "SSE.Views.CellSettings.textDirection": "Orientare", "SSE.Views.CellSettings.textFill": "Umplere", "SSE.Views.CellSettings.textForeground": "Culoarea de prim plan", @@ -1377,6 +1420,10 @@ "SSE.Views.CellSettings.textPosition": "Poziție", "SSE.Views.CellSettings.textRadial": "Radială", "SSE.Views.CellSettings.textSelectBorders": "Selectați borduri pe care doriți să le modificați prin aplicarea stilului selectat", + "SSE.Views.CellSettings.textSelection": "Din selecția curentă", + "SSE.Views.CellSettings.textThisPivot": "Din acest tabel pivot", + "SSE.Views.CellSettings.textThisSheet": "Din această foaie de calcul", + "SSE.Views.CellSettings.textThisTable": "Din acest tabel", "SSE.Views.CellSettings.tipAddGradientPoint": "Adăugare stop gradient", "SSE.Views.CellSettings.tipAll": "Adăugare bordură exterioară și toate borduri interioare", "SSE.Views.CellSettings.tipBottom": "Adăugare numai bordură exterioară de jos", @@ -1586,14 +1633,19 @@ "SSE.Views.CreatePivotDialog.textInvalidRange": "Zonă de celule nu este validă", "SSE.Views.CreatePivotDialog.textNew": "Foaie de calcul nouă", "SSE.Views.CreatePivotDialog.textSelectData": "Selectare date", - "SSE.Views.CreatePivotDialog.textTitle": "Creare tabelă Pivot", + "SSE.Views.CreatePivotDialog.textTitle": "Creare tabel Pivot", "SSE.Views.CreatePivotDialog.txtEmpty": "Câmp obligatoriu", + "SSE.Views.CreateSparklineDialog.textDestination": "Alegeți locul unde se va plasa diagrama sparkline", + "SSE.Views.CreateSparklineDialog.textTitle": "Creare diagrame sparkline", "SSE.Views.DataTab.capBtnGroup": "Grupare", "SSE.Views.DataTab.capBtnTextCustomSort": "Sortare particularizată", "SSE.Views.DataTab.capBtnTextDataValidation": "Validarea datelor", "SSE.Views.DataTab.capBtnTextRemDuplicates": "Eliminare dubluri", "SSE.Views.DataTab.capBtnTextToCol": "Text în coloane", "SSE.Views.DataTab.capBtnUngroup": "Anularea grupării", + "SSE.Views.DataTab.capDataFromText": "Din text/CSV", + "SSE.Views.DataTab.mniFromFile": "Colectare date din fișier", + "SSE.Views.DataTab.mniFromUrl": "Colectare date prin URL", "SSE.Views.DataTab.textBelow": "Rânduri rezumative sub detalii", "SSE.Views.DataTab.textClear": "Golire schiță", "SSE.Views.DataTab.textColumns": "Anularea grupării coloanelor", @@ -1602,6 +1654,7 @@ "SSE.Views.DataTab.textRightOf": "Rezumat coloane la dreapta detaliilor", "SSE.Views.DataTab.textRows": "Anularea grupării rândurilor", "SSE.Views.DataTab.tipCustomSort": "Sortare particularizată", + "SSE.Views.DataTab.tipDataFromText": "Colectare date din fișierul text/CSV", "SSE.Views.DataTab.tipDataValidation": "Validarea datelor", "SSE.Views.DataTab.tipGroup": "Grupare zonă de celule", "SSE.Views.DataTab.tipRemDuplicates": "Eliminarea rândurilor dublate dintr-o foaie", @@ -1725,6 +1778,7 @@ "SSE.Views.DocumentHolder.textArrangeForward": "Aducere în plan apropiat", "SSE.Views.DocumentHolder.textArrangeFront": "Aducere în prim plan", "SSE.Views.DocumentHolder.textAverage": "Medie", + "SSE.Views.DocumentHolder.textBullets": "Marcatori", "SSE.Views.DocumentHolder.textCount": "Contorizare", "SSE.Views.DocumentHolder.textCrop": "Trunchiere", "SSE.Views.DocumentHolder.textCropFill": "Umplere", @@ -1737,6 +1791,7 @@ "SSE.Views.DocumentHolder.textFromStorage": "Din serviciul stocare", "SSE.Views.DocumentHolder.textFromUrl": "Prin URL-ul", "SSE.Views.DocumentHolder.textListSettings": "Setări lista", + "SSE.Views.DocumentHolder.textMacro": "Asocierea macrocomenzii", "SSE.Views.DocumentHolder.textMax": "Max", "SSE.Views.DocumentHolder.textMin": "Min", "SSE.Views.DocumentHolder.textMore": "Mai multe funcții", @@ -1818,7 +1873,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Culoarea fontului selectat în partea de sus", "SSE.Views.DocumentHolder.txtSparklines": "Diagrame sparkline", "SSE.Views.DocumentHolder.txtText": "Text", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Setări avansate text", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Setări avansate paragraf ", "SSE.Views.DocumentHolder.txtTime": "Oră", "SSE.Views.DocumentHolder.txtUngroup": "Anularea grupării", "SSE.Views.DocumentHolder.txtWidth": "Lățime", @@ -1926,17 +1981,27 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Salvare pe server", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "La fiecare minută", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Stil referință", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Belarusă", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBg": "Bulgară", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCa": "Catalană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCacheMode": "Mod implicit memoria Cache", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCm": "Centimetru", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCs": "Cehă", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDa": "Daneză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Germană", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEl": "Greacă", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEn": "Engleză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEs": "Spaniolă", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtFi": "Finlandeză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtFr": "Franceză", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtHu": "Maghiară", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtId": "Indoneziană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInch": "Inch", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtIt": "Italiană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLiveComment": "Afișare comentarii", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtMac": "ca OS X", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNative": "Sursă", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNl": "Neerlandeză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPl": "Poloneză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Punct", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Rusă", @@ -1947,6 +2012,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacros": "Afișare notificări", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacrosDesc": "Se dezactivează toate macrocomenzile, cu notificare ", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "ca Windows", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtZh": "Chineză", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.okButtonText": "Aplicare", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strDictionaryLanguage": "Limbă de dicționar", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strIgnoreWordsInUPPERCASE": "Ignoră cuvintele cu MAJUSCULE", @@ -1967,6 +2033,78 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "General", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Setare pagină", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Verificarea ortografică", + "SSE.Views.FormatRulesEditDlg.fillColor": "Culoare de fundal", + "SSE.Views.FormatRulesEditDlg.text2Scales": "Scară cu două culori", + "SSE.Views.FormatRulesEditDlg.text3Scales": "Scară cu trei culori", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Toate borduri", + "SSE.Views.FormatRulesEditDlg.textAppearance": "Aspect bară", + "SSE.Views.FormatRulesEditDlg.textApply": "Se aplică la zonă", + "SSE.Views.FormatRulesEditDlg.textAutomatic": "Automat", + "SSE.Views.FormatRulesEditDlg.textAxis": "Axă", + "SSE.Views.FormatRulesEditDlg.textBarDirection": "Direcția barei", + "SSE.Views.FormatRulesEditDlg.textBold": "Aldin", + "SSE.Views.FormatRulesEditDlg.textBorder": "Bordura", + "SSE.Views.FormatRulesEditDlg.textBordersColor": "Culoare borduri", + "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Stil bordură", + "SSE.Views.FormatRulesEditDlg.textBottomBorders": "Bordurile în partea de jos", + "SSE.Views.FormatRulesEditDlg.textCannotAddCF": "Formatarea condiționată nu poate fi ajutată.", + "SSE.Views.FormatRulesEditDlg.textCellMidpoint": "Punctul central al celulei", + "SSE.Views.FormatRulesEditDlg.textCenterBorders": "Bordurile verticale în interiorul ", + "SSE.Views.FormatRulesEditDlg.textClear": "Golire", + "SSE.Views.FormatRulesEditDlg.textContext": "Context", + "SSE.Views.FormatRulesEditDlg.textCustom": "Particularizat", + "SSE.Views.FormatRulesEditDlg.textDiagDownBorder": "Bordură diagonală descendentă", + "SSE.Views.FormatRulesEditDlg.textDiagUpBorder": "Bordură diagonală ascendentă", + "SSE.Views.FormatRulesEditDlg.textEmptyFormula": "Introduceți o formulă valabilă.", + "SSE.Views.FormatRulesEditDlg.textEmptyText": "Introduceți o valoare.", + "SSE.Views.FormatRulesEditDlg.textErrorTop10Between": "Introduceți cifra între {0} și {1}.", + "SSE.Views.FormatRulesEditDlg.textFill": "Umplere", + "SSE.Views.FormatRulesEditDlg.textFormat": "Formatare", + "SSE.Views.FormatRulesEditDlg.textFormula": "Formula", + "SSE.Views.FormatRulesEditDlg.textGradient": "Gradient", + "SSE.Views.FormatRulesEditDlg.textIconStyle": "Stil icoană", + "SSE.Views.FormatRulesEditDlg.textInsideBorders": "Borduri în interiorul ", + "SSE.Views.FormatRulesEditDlg.textInvalidRange": "EROARE! Zonă de celule nu este validă", + "SSE.Views.FormatRulesEditDlg.textItem": "Element", + "SSE.Views.FormatRulesEditDlg.textMiddleBorders": "Bordurile orizontale în interiorul ", + "SSE.Views.FormatRulesEditDlg.textNewColor": "Adăugarea unei culori particularizate noi", + "SSE.Views.FormatRulesEditDlg.tipBorders": "Borduri", + "SSE.Views.FormatRulesEditDlg.txtAccounting": "Contabilitate", + "SSE.Views.FormatRulesEditDlg.txtCurrency": "Monedă", + "SSE.Views.FormatRulesEditDlg.txtDate": "Dată", + "SSE.Views.FormatRulesEditDlg.txtFraction": "Fracție", + "SSE.Views.FormatRulesEditDlg.txtGeneral": "General", + "SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Editare regulă de formatare", + "SSE.Views.FormatRulesManagerDlg.guestText": "Invitat", + "SSE.Views.FormatRulesManagerDlg.text1Above": "1 abatere standard deasupra medie", + "SSE.Views.FormatRulesManagerDlg.text1Below": "1 abatere standard sub medie", + "SSE.Views.FormatRulesManagerDlg.text2Above": "2 abateri standard deasupra medie", + "SSE.Views.FormatRulesManagerDlg.text2Below": "2 abateri standard sub medie", + "SSE.Views.FormatRulesManagerDlg.text3Above": "3 abateri standard deasupra medie", + "SSE.Views.FormatRulesManagerDlg.text3Below": "3 abateri standard sub medie", + "SSE.Views.FormatRulesManagerDlg.textAbove": "Deasupra medie", + "SSE.Views.FormatRulesManagerDlg.textApply": "Se aplică la", + "SSE.Views.FormatRulesManagerDlg.textBeginsWith": "Valoarea din celulă se începe cu", + "SSE.Views.FormatRulesManagerDlg.textBelow": "Sub medie", + "SSE.Views.FormatRulesManagerDlg.textCellValue": "Valoarea din celulă", + "SSE.Views.FormatRulesManagerDlg.textColorScale": "Scală de culoare cu gradare ", + "SSE.Views.FormatRulesManagerDlg.textContains": "Valoarea din celulă conține", + "SSE.Views.FormatRulesManagerDlg.textContainsBlank": "Celula canține o valorae goală", + "SSE.Views.FormatRulesManagerDlg.textContainsError": "Celula conține o eroare", + "SSE.Views.FormatRulesManagerDlg.textDelete": "Ștergere", + "SSE.Views.FormatRulesManagerDlg.textDuplicate": "Valori duble", + "SSE.Views.FormatRulesManagerDlg.textEdit": "Editare", + "SSE.Views.FormatRulesManagerDlg.textEnds": "Valoarea din celulă se termină cu", + "SSE.Views.FormatRulesManagerDlg.textEqAbove": "Egal cu sau deasupra medie", + "SSE.Views.FormatRulesManagerDlg.textEqBelow": "Egal cu sau sub medie", + "SSE.Views.FormatRulesManagerDlg.textFormat": "Formatare", + "SSE.Views.FormatRulesManagerDlg.textIconSet": "Ansamblul de icoane", + "SSE.Views.FormatRulesManagerDlg.textNotContains": "Valoarea din celulă nu conține", + "SSE.Views.FormatRulesManagerDlg.textNotContainsBlank": "Celula nu conține nicio valoare goală", + "SSE.Views.FormatRulesManagerDlg.textNotContainsError": "Celula nu conține nicio eroare", + "SSE.Views.FormatRulesManagerDlg.textSelection": "Selecția curentă", + "SSE.Views.FormatRulesManagerDlg.textThisTable": "Acest tabel", + "SSE.Views.FormatRulesManagerDlg.txtTitle": "Formatarea condiționată", "SSE.Views.FormatSettingsDialog.textCategory": "Categorie", "SSE.Views.FormatSettingsDialog.textDecimal": "Zecimal", "SSE.Views.FormatSettingsDialog.textFormat": "Formatare", @@ -2131,6 +2269,7 @@ "SSE.Views.LeftMenu.txtLimit": "Limitare acces", "SSE.Views.LeftMenu.txtTrial": "PERIOADĂ DE PROBĂ", "SSE.Views.LeftMenu.txtTrialDev": "Mod dezvoltator de încercare", + "SSE.Views.MacroDialog.textTitle": "Asocierea macrocomenzii", "SSE.Views.MainSettingsPrint.okButtonText": "Salvează", "SSE.Views.MainSettingsPrint.strBottom": "Jos", "SSE.Views.MainSettingsPrint.strLandscape": "Vedere", @@ -2347,7 +2486,7 @@ "SSE.Views.PivotTable.textColHeader": "Anteturi coloană", "SSE.Views.PivotTable.textRowBanded": "Rânduri alternante", "SSE.Views.PivotTable.textRowHeader": "Anteturi rând", - "SSE.Views.PivotTable.tipCreatePivot": "Inserare tabelă Pivot", + "SSE.Views.PivotTable.tipCreatePivot": "Inserare tabel Pivot", "SSE.Views.PivotTable.tipGrandTotals": "Afișare sau ascundere totaluri generale", "SSE.Views.PivotTable.tipRefresh": "Actualizarea sursei de informație", "SSE.Views.PivotTable.tipSelect": "Selectați tabel Pivot întreg", @@ -2415,7 +2554,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Setări celula", "SSE.Views.RightMenu.txtChartSettings": "Setări diagramă", "SSE.Views.RightMenu.txtImageSettings": "Setări imagine", - "SSE.Views.RightMenu.txtParagraphSettings": "Setări text", + "SSE.Views.RightMenu.txtParagraphSettings": "Setări paragraf", "SSE.Views.RightMenu.txtPivotSettings": "Setări tabelă Pivot", "SSE.Views.RightMenu.txtSettings": "Setări comune", "SSE.Views.RightMenu.txtShapeSettings": "Setări forma", @@ -2832,6 +2971,7 @@ "SSE.Views.TextArtSettings.txtPapyrus": "Papirus", "SSE.Views.TextArtSettings.txtWood": "Lemn", "SSE.Views.Toolbar.capBtnAddComment": "Adaugă comentariu", + "SSE.Views.Toolbar.capBtnColorSchemas": "Schemă de culori", "SSE.Views.Toolbar.capBtnComment": "Comentariu", "SSE.Views.Toolbar.capBtnInsHeader": "Antet/Subsol", "SSE.Views.Toolbar.capBtnInsSlicer": "Slicer", @@ -2874,8 +3014,11 @@ "SSE.Views.Toolbar.textBottomBorders": "bordurile în partea de jos", "SSE.Views.Toolbar.textCenterBorders": "Bordurile verticale în interiorul ", "SSE.Views.Toolbar.textClearPrintArea": "Golire zonă de imprimare", + "SSE.Views.Toolbar.textClearRule": "Golire reguli", "SSE.Views.Toolbar.textClockwise": "Unghi de rotație în sens orar", + "SSE.Views.Toolbar.textColorScales": "Scale de culori", "SSE.Views.Toolbar.textCounterCw": "Unghi de rotație în sens antiorar", + "SSE.Views.Toolbar.textDataBars": "Bare de date", "SSE.Views.Toolbar.textDelLeft": "Deplasare celule la stânga", "SSE.Views.Toolbar.textDelUp": "Deplasare celule în sus", "SSE.Views.Toolbar.textDiagDownBorder": "Bordură diagonală descendentă", @@ -2914,6 +3057,7 @@ "SSE.Views.Toolbar.textRotateUp": "Rotirea textului în sus", "SSE.Views.Toolbar.textScale": "Scară", "SSE.Views.Toolbar.textScaleCustom": "Particularizat", + "SSE.Views.Toolbar.textSelection": "Din selecția curentă", "SSE.Views.Toolbar.textSetPrintArea": "Setare zonă de imprimare", "SSE.Views.Toolbar.textStrikeout": "Tăiere cu o linie", "SSE.Views.Toolbar.textSubscript": "Indice", @@ -2928,6 +3072,9 @@ "SSE.Views.Toolbar.textTabLayout": "Aspect", "SSE.Views.Toolbar.textTabProtect": "Protejare", "SSE.Views.Toolbar.textTabView": "Vizualizare", + "SSE.Views.Toolbar.textThisPivot": "Din acest tabel pivot", + "SSE.Views.Toolbar.textThisSheet": "Din această foaie de calcul", + "SSE.Views.Toolbar.textThisTable": "Din acest tabel", "SSE.Views.Toolbar.textTop": "Sus:", "SSE.Views.Toolbar.textTopBorders": "Borduri de sus", "SSE.Views.Toolbar.textUnderline": "Subliniat", @@ -2948,6 +3095,7 @@ "SSE.Views.Toolbar.tipChangeChart": "Modificare tip diagramă", "SSE.Views.Toolbar.tipClearStyle": "Golire", "SSE.Views.Toolbar.tipColorSchemas": "Modificare schemă de culori", + "SSE.Views.Toolbar.tipCondFormat": "Formatarea condiționată", "SSE.Views.Toolbar.tipCopy": "Copiere", "SSE.Views.Toolbar.tipCopyStyle": "Copiere stil", "SSE.Views.Toolbar.tipDecDecimal": "Micșorare zecimală", @@ -2975,6 +3123,7 @@ "SSE.Views.Toolbar.tipInsertOpt": "Inserare celule", "SSE.Views.Toolbar.tipInsertShape": "Inserare formă automată", "SSE.Views.Toolbar.tipInsertSlicer": "Inserare slicer", + "SSE.Views.Toolbar.tipInsertSpark": "Inserare diagramă sparkline", "SSE.Views.Toolbar.tipInsertSymbol": "Inserare simbol", "SSE.Views.Toolbar.tipInsertTable": "Inserare tabel", "SSE.Views.Toolbar.tipInsertText": "Inserare casetă text", diff --git a/apps/spreadsheeteditor/main/locale/ru.json b/apps/spreadsheeteditor/main/locale/ru.json index 324806a0b..50946ceb9 100644 --- a/apps/spreadsheeteditor/main/locale/ru.json +++ b/apps/spreadsheeteditor/main/locale/ru.json @@ -127,7 +127,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "Документ изменен другим пользователем.
    Нажмите, чтобы сохранить свои изменения и загрузить обновления.", "Common.UI.ThemeColorPalette.textStandartColors": "Стандартные цвета", "Common.UI.ThemeColorPalette.textThemeColors": "Цвета темы", - "Common.UI.Themes.txtThemeClassicLight": "Светлая классическая", + "Common.UI.Themes.txtThemeClassicLight": "Классическая светлая", "Common.UI.Themes.txtThemeDark": "Темная", "Common.UI.Themes.txtThemeLight": "Светлая", "Common.UI.Window.cancelButtonText": "Отмена", @@ -1994,7 +1994,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.strDecimalSeparator": "Десятичный разделитель", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFast": "Быстрый", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFontRender": "Хинтинг шрифтов", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Всегда сохранять на сервере (в противном случае сохранять на сервере при закрытии документа)", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Добавлять версию в хранилище после нажатия кнопки Сохранить или Ctrl+S", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocale": "Язык формул", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocaleEx": "Пример: СУММ; МИН; МАКС; СЧЁТ", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strLiveComment": "Включить отображение комментариев в тексте", @@ -2019,7 +2019,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Автовосстановление", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Автосохранение", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Отключено", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Сохранять на сервере", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Сохранение промежуточных версий", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Каждую минуту", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Стиль ссылок", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Белорусский", diff --git a/apps/spreadsheeteditor/main/locale/sv.json b/apps/spreadsheeteditor/main/locale/sv.json index fd4f9860d..9c5a27ee4 100644 --- a/apps/spreadsheeteditor/main/locale/sv.json +++ b/apps/spreadsheeteditor/main/locale/sv.json @@ -12,6 +12,7 @@ "Common.define.chartData.textPie": "Paj", "Common.define.chartData.textSurface": "Yta", "Common.define.chartData.textWinLossSpark": "Vinst / förlust", + "Common.define.conditionalData.textDuplicate": "Duplicera", "Common.Translation.warnFileLocked": "Dokumentet används av ett annat program. Du kan fortsätta redigera och spara den som en kopia.", "Common.UI.ColorButton.textNewColor": "Lägg till ny egen färg", "Common.UI.ComboBorderSize.txtNoBorders": "Inga ramar", @@ -55,6 +56,7 @@ "Common.Views.About.txtPoweredBy": "Powered by", "Common.Views.About.txtTel": "tel.:", "Common.Views.AutoCorrectDialog.textAdd": "Lägg till", + "Common.Views.AutoCorrectDialog.textDelete": "Radera", "Common.Views.Chat.textSend": "Skicka", "Common.Views.Comments.textAdd": "Lägg till", "Common.Views.Comments.textAddComment": "Lägg till kommentar", @@ -791,6 +793,7 @@ "SSE.Controllers.Toolbar.txtBracket_UppLim": "Parenteser", "SSE.Controllers.Toolbar.txtBracket_UppLim_NoneOpen": "Enkel parentes", "SSE.Controllers.Toolbar.txtBracket_UppLim_OpenNone": "Enkel parentes", + "SSE.Controllers.Toolbar.txtDeleteCells": "Radera celler", "SSE.Controllers.Toolbar.txtExpand": "Expandera och sortera", "SSE.Controllers.Toolbar.txtExpandSort": "Data bredvid markeringen kommer inte att sorteras. Vill du utöka markeringen så att den inkluderar intilliggande data eller fortsätta att sortera de markerade cellerna?", "SSE.Controllers.Toolbar.txtFractionDifferential_1": "Differentiell", @@ -1248,6 +1251,7 @@ "SSE.Views.DocumentHolder.textShapeAlignRight": "Högerjustera", "SSE.Views.DocumentHolder.textShapeAlignTop": "Justera till toppen", "SSE.Views.DocumentHolder.textUndo": "Ångra", + "SSE.Views.DocumentHolder.textUnFreezePanes": "Lås upp paneler", "SSE.Views.DocumentHolder.topCellText": "Justera till toppen", "SSE.Views.DocumentHolder.txtAccounting": "Redovisning", "SSE.Views.DocumentHolder.txtAddComment": "Lägg till kommentar", @@ -1415,6 +1419,8 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Generell", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Sidinställningar", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Stavningskontroll", + "SSE.Views.FormatRulesManagerDlg.textDelete": "Radera", + "SSE.Views.FormatRulesManagerDlg.textNew": "Ny", "SSE.Views.FormatSettingsDialog.textCategory": "Kategori", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimal", "SSE.Views.FormatSettingsDialog.textFormat": "Format", @@ -2139,6 +2145,7 @@ "SSE.Views.Toolbar.textTabInsert": "Infoga", "SSE.Views.Toolbar.textTabLayout": "Layout", "SSE.Views.Toolbar.textTabProtect": "Skydd", + "SSE.Views.Toolbar.textTabView": "Visa", "SSE.Views.Toolbar.textTopBorders": "Ram över", "SSE.Views.Toolbar.textUnderline": "Understrykning", "SSE.Views.Toolbar.textWidth": "Bredd", @@ -2283,5 +2290,29 @@ "SSE.Views.ValueFieldSettingsDialog.txtPercentOfTotal": "Procent av rad", "SSE.Views.ValueFieldSettingsDialog.txtShowAs": "Visa värden som", "SSE.Views.ValueFieldSettingsDialog.txtSourceName": "Källnamn:", - "SSE.Views.ValueFieldSettingsDialog.txtSum": "Summa" + "SSE.Views.ValueFieldSettingsDialog.txtSum": "Summa", + "SSE.Views.ViewManagerDlg.closeButtonText": "Stäng", + "SSE.Views.ViewManagerDlg.textDelete": "Radera", + "SSE.Views.ViewManagerDlg.textDuplicate": "Duplicera", + "SSE.Views.ViewManagerDlg.textEmpty": "Inga vyer har skapats än.", + "SSE.Views.ViewManagerDlg.textGoTo": "Gå till vy", + "SSE.Views.ViewManagerDlg.textNew": "Ny", + "SSE.Views.ViewManagerDlg.textRename": "Döp om", + "SSE.Views.ViewManagerDlg.textRenameLabel": "Döp om vy", + "SSE.Views.ViewManagerDlg.textViews": "Arkvyer", + "SSE.Views.ViewManagerDlg.txtTitle": "Vyhanterare", + "SSE.Views.ViewTab.capBtnFreeze": "Lås paneler", + "SSE.Views.ViewTab.capBtnSheetView": "Arkvy", + "SSE.Views.ViewTab.textClose": "Stäng", + "SSE.Views.ViewTab.textCreate": "Ny", + "SSE.Views.ViewTab.textDefault": "Standard", + "SSE.Views.ViewTab.textFormula": "Formelfält", + "SSE.Views.ViewTab.textGridlines": "Stödlinjer", + "SSE.Views.ViewTab.textHeadings": "Rubriker", + "SSE.Views.ViewTab.textManager": "Vyhanterare", + "SSE.Views.ViewTab.textZoom": "Zooma", + "SSE.Views.ViewTab.tipClose": "Stäng arkvy", + "SSE.Views.ViewTab.tipCreate": "Skapa arkvy", + "SSE.Views.ViewTab.tipFreeze": "Lås paneler", + "SSE.Views.ViewTab.tipSheetView": "Arkvy" } \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/zh.json b/apps/spreadsheeteditor/main/locale/zh.json index 7c4d7ebc4..bed415854 100644 --- a/apps/spreadsheeteditor/main/locale/zh.json +++ b/apps/spreadsheeteditor/main/locale/zh.json @@ -831,7 +831,7 @@ "SSE.Controllers.Main.txtValues": "值", "SSE.Controllers.Main.txtXAxis": "X轴", "SSE.Controllers.Main.txtYAxis": "Y轴", - "SSE.Controllers.Main.unknownErrorText": "示知错误", + "SSE.Controllers.Main.unknownErrorText": "未知错误", "SSE.Controllers.Main.unsupportedBrowserErrorText": "你的浏览器不支持", "SSE.Controllers.Main.uploadImageExtMessage": "未知图像格式", "SSE.Controllers.Main.uploadImageFileCountMessage": "没有图片上传", From 08713dbe99fb6a3f4cc0fdc4de3e5e47d63b24ea Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Fri, 25 Jun 2021 20:36:28 +0300 Subject: [PATCH 153/376] [DE PE mobile] Correct app options --- apps/documenteditor/mobile/src/store/appOptions.js | 2 ++ apps/presentationeditor/mobile/src/store/appOptions.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/apps/documenteditor/mobile/src/store/appOptions.js b/apps/documenteditor/mobile/src/store/appOptions.js index b79cefe33..82c7c6afc 100644 --- a/apps/documenteditor/mobile/src/store/appOptions.js +++ b/apps/documenteditor/mobile/src/store/appOptions.js @@ -86,6 +86,8 @@ export class storeAppOptions { this.canPlugins = false; } setPermissionOptions (document, licType, params, permissions, isSupportEditFeature) { + if (params.asc_getRights() !== Asc.c_oRights.Edit) + permissions.edit = permissions.review = false; this.review = (permissions.review === undefined) ? (permissions.edit !== false) : permissions.review; this.canAnalytics = params.asc_getIsAnalyticsEnable(); this.canLicense = (licType === Asc.c_oLicenseResult.Success || licType === Asc.c_oLicenseResult.SuccessLimit); diff --git a/apps/presentationeditor/mobile/src/store/appOptions.js b/apps/presentationeditor/mobile/src/store/appOptions.js index c2c95246f..9fca4e84b 100644 --- a/apps/presentationeditor/mobile/src/store/appOptions.js +++ b/apps/presentationeditor/mobile/src/store/appOptions.js @@ -64,6 +64,8 @@ export class storeAppOptions { } setPermissionOptions (document, licType, params, permissions, isSupportEditFeature) { + if (params.asc_getRights() !== Asc.c_oRights.Edit) + permissions.edit = false; this.review = (permissions.review === undefined) ? (permissions.edit !== false) : permissions.review; this.canAnalytics = params.asc_getIsAnalyticsEnable(); this.canLicense = (licType === Asc.c_oLicenseResult.Success || licType === Asc.c_oLicenseResult.SuccessLimit); From 7719d51d2819b52e98924e062a17c38c6e74e391 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Sat, 26 Jun 2021 16:16:33 +0300 Subject: [PATCH 154/376] [SSE] Fix bug 46767 --- .../main/app/controller/Statusbar.js | 16 +++++ .../main/app/template/StatusBar.template | 5 ++ .../main/app/view/Statusbar.js | 58 ++++++++++++++++++- .../main/resources/less/statusbar.less | 29 ++++++++++ 4 files changed, 106 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Statusbar.js b/apps/spreadsheeteditor/main/app/controller/Statusbar.js index d3b0697c2..deb1b0622 100644 --- a/apps/spreadsheeteditor/main/app/controller/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Statusbar.js @@ -56,6 +56,7 @@ define([ initialize: function() { this.addListeners({ 'Statusbar': { + 'show:tab': _.bind(this.showTab, this), 'show:hidden': _.bind(function (obj, index) { this.hideWorksheet(false, index); }, this), @@ -496,6 +497,13 @@ define([ Common.NotificationCenter.trigger('edit:complete', this.statusbar); }, + showTab: function (sheetIndex) { + if (this.api && this.api.asc_getActiveWorksheetIndex() !== sheetIndex) { + this.api.asc_showWorksheet(sheetIndex); + this.loadTabColor(sheetIndex); + } + }, + selectTab: function (sheetindex) { if (this.api) { var hidden = this.api.asc_isWorksheetHidden(sheetindex); @@ -686,6 +694,8 @@ define([ } if (color.length) { + this.statusbar.sheetListMenu.items[tab.sheetindex].$el.find('.color').css('background-color', color); + if (!tab.isActive()) { color = '0px 4px 0 ' + Common.Utils.RGBColor(color).toRGBA(1) + ' inset'; } else { @@ -695,6 +705,7 @@ define([ tab.$el.find('span').css('box-shadow', color); } else { tab.$el.find('span').css('box-shadow', ''); + this.statusbar.sheetListMenu.items[tab.sheetindex].$el.find('.color').css('background-color', ''); } } }, @@ -712,6 +723,11 @@ define([ onApiActiveSheetChanged: function (index) { this.statusbar.tabMenu.hide(); + this.statusbar.sheetListMenu.hide(); + if (this.statusbar.sheetListMenu.items[index]) { + this.statusbar.sheetListMenu.clearAll(); + this.statusbar.sheetListMenu.items[index].setChecked(true); + } if (this._sheetViewTip && this._sheetViewTip.isVisible() && this.api.asc_getActiveNamedSheetView && !this.api.asc_getActiveNamedSheetView(index)) { // hide tip when sheet in the default mode this._sheetViewTip.hide(); } diff --git a/apps/spreadsheeteditor/main/app/template/StatusBar.template b/apps/spreadsheeteditor/main/app/template/StatusBar.template index 0988bde4b..b7f2d8400 100644 --- a/apps/spreadsheeteditor/main/app/template/StatusBar.template +++ b/apps/spreadsheeteditor/main/app/template/StatusBar.template @@ -8,6 +8,11 @@
    +
    + +
    diff --git a/apps/spreadsheeteditor/main/app/view/Statusbar.js b/apps/spreadsheeteditor/main/app/view/Statusbar.js index 9801ab48f..f36e91995 100644 --- a/apps/spreadsheeteditor/main/app/view/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/view/Statusbar.js @@ -129,6 +129,35 @@ define([ hintAnchor: 'top' }); + this.btnSheetList = new Common.UI.Button({ + el: $('.cnt-tabslist', this.el), + hint: this.tipListOfSheets, + hintAnchor: 'top' + }); + this.sheetListMenu = new Common.UI.Menu({ + style: 'margin-top:-3px;', + menuAlign: 'bl-tl', + maxHeight: 300 + }); + this.sheetListMenu.on('item:click', function(obj,item) { + me.fireEvent('show:tab', [item.value]); + me.sheetListMenu.items[item.value].setChecked(true); + }); + this.btnSheetList.cmpEl.on({ + 'show.bs.dropdown': function () { + _.defer(function(){ + me.btnSheetList.cmpEl.find('ul').focus(); + }, 100); + }, + 'hide.bs.dropdown': function () { + _.defer(function(){ + me.api.asc_enableKeyEvents(true); + }, 100); + } + }); + this.sheetListMenu.render($('.cnt-tabslist',this.el)); + this.sheetListMenu.cmpEl.attr({tabindex: -1}); + this.cntZoom = new Common.UI.Button({ el: $('.cnt-zoom',this.el), hint: this.tipZoomFactor, @@ -493,10 +522,11 @@ define([ this.tabMenu.items[6].menu.removeAll(); this.tabMenu.items[6].hide(); this.btnAddWorksheet.setDisabled(true); + this.sheetListMenu.removeAll(); if (this.api) { var wc = this.api.asc_getWorksheetsCount(), i = -1; - var hidentems = [], items = [], tab, locked, name; + var hidentems = [], items = [], allItems = [], tab, locked, name; var sindex = this.api.asc_getActiveWorksheetIndex(); while (++i < wc) { @@ -516,6 +546,8 @@ define([ }; this.api.asc_isWorksheetHidden(i)? hidentems.push(tab) : items.push(tab); + + allItems.push(tab); } if (hidentems.length) { @@ -531,6 +563,27 @@ define([ this.tabbar.add(items); + allItems.forEach(function(item){ + me.sheetListMenu.addItem(new Common.UI.MenuItem({ + style: 'white-space: pre-wrap', + caption: Common.Utils.String.htmlEncode(item.label), + value: item.sheetindex, + checkable: true, + checked: item.active, + hidden: me.api.asc_isWorksheetHidden(item.sheetindex), + textHidden: me.itemHidden, + template: _.template([ + '', + '
    ', + '<%= caption %>', + '<% if (options.hidden) { %>', + '<%= options.textHidden %>', + '<% } %>', + '
    ' + ].join('')) + })); + }); + if (!_.isUndefined(this.tabBarScroll)) { this.tabbar.$bar.scrollLeft(this.tabBarScroll.scrollLeft); this.tabBarScroll = undefined; @@ -764,7 +817,7 @@ define([ changeViewMode: function (edit) { if (edit) { - this.tabBarBox.css('left', '152px'); + this.tabBarBox.css('left', '175px'); } else { this.tabBarBox.css('left', ''); } @@ -830,6 +883,7 @@ define([ tipPrev : 'Previous Sheet', tipNext : 'Next Sheet', tipAddTab : 'Add Worksheet', + tipListOfSheets : 'List of Sheets', itemInsert : 'Insert', itemDelete : 'Delete', itemRename : 'Rename', diff --git a/apps/spreadsheeteditor/main/resources/less/statusbar.less b/apps/spreadsheeteditor/main/resources/less/statusbar.less index 909cc3619..ad07dfc48 100644 --- a/apps/spreadsheeteditor/main/resources/less/statusbar.less +++ b/apps/spreadsheeteditor/main/resources/less/statusbar.less @@ -366,6 +366,35 @@ } } + .cnt-tabslist { + display: inline-block; + position: relative; + .dropdown-menu { + min-width: 112px; + margin-left: -4px; + + li { + text-align: left; + a { + position: relative; + padding-left: 26px; + .color { + height: 21px; + width: 4px; + position: absolute; + top: 2px; + left: 0; + } + } + .hidden-mark { + margin-left: 12px; + font-style: italic; + color: @text-secondary; + } + } + } + } + .cnt-zoom { display: inline-block; position: relative; From b8cbd5cfb71137123e7cd3069c03fa6b0aed4334 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Mon, 28 Jun 2021 11:11:29 +0300 Subject: [PATCH 155/376] [SSE] Fix Bug 47151 --- .../mobile/src/controller/FilterOptions.jsx | 4 ++-- .../mobile/src/less/icons-ios.less | 4 ++-- .../mobile/src/less/icons-material.less | 4 ++-- .../mobile/src/view/FilterOptions.jsx | 24 +++++++++---------- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx b/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx index 79b2e36a1..d1c950bb6 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/FilterOptions.jsx @@ -37,8 +37,8 @@ const FilterOptionsController = () => { setConfig(config); setClearDisable(config); - const sort = config.asc_getSortState(); - sort == Asc.c_oAscSortOptions.Ascending ? setCheckSort(true) : setCheckSort(false); + setCheckSort((config.asc_getSortState() === Asc.c_oAscSortOptions.Ascending ? 'down' : '') || + (config.asc_getSortState() === Asc.c_oAscSortOptions.Descending ? 'up' : '')); if (Device.phone) { f7.sheet.open('.picker__sheet'); diff --git a/apps/spreadsheeteditor/mobile/src/less/icons-ios.less b/apps/spreadsheeteditor/mobile/src/less/icons-ios.less index 1a908bcff..719610da7 100644 --- a/apps/spreadsheeteditor/mobile/src/less/icons-ios.less +++ b/apps/spreadsheeteditor/mobile/src/less/icons-ios.less @@ -299,12 +299,12 @@ &.sortdown { width: 22px; height: 22px; - .encoded-svg-background(''); + .encoded-svg-mask(''); } &.sortup { width: 22px; height: 22px; - .encoded-svg-background(''); + .encoded-svg-mask(''); } // Formats diff --git a/apps/spreadsheeteditor/mobile/src/less/icons-material.less b/apps/spreadsheeteditor/mobile/src/less/icons-material.less index 8c80a42f0..74821ae31 100644 --- a/apps/spreadsheeteditor/mobile/src/less/icons-material.less +++ b/apps/spreadsheeteditor/mobile/src/less/icons-material.less @@ -278,12 +278,12 @@ &.sortdown { width: 22px; height: 22px; - .encoded-svg-background(''); + .encoded-svg-mask(''); } &.sortup { width: 22px; height: 22px; - .encoded-svg-background(''); + .encoded-svg-mask(''); } // Formats diff --git a/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx b/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx index ffdf7ba1f..621b5afb9 100644 --- a/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/FilterOptions.jsx @@ -6,7 +6,6 @@ import { Device } from '../../../../common/mobile/utils/device'; const FilterOptions = (props) => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); - const isAndroid = Device.android; useEffect(() => { const is_all_checked = props.listVal.every(item => item.check); @@ -33,21 +32,20 @@ const FilterOptions = (props) => { } + - props.onSort('sortdown')} - after={isAndroid ? : null}> - {!isAndroid ? - : null - } - - - props.onSort('sortup')} - after={isAndroid ? : null}> - {!isAndroid ? - : null - } + + + props.onSort('sortdown')}> + + + props.onSort('sortup')}> + + + + {_t.textClearFilter} props.onDeleteFilter()} id="btn-delete-filter">{_t.textDeleteFilter} From f28422fb9c6796995a63c63e5851c383b0478946 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Mon, 28 Jun 2021 13:06:49 +0300 Subject: [PATCH 156/376] [SSE] Bug 46767 (add icon) --- .../main/app/template/StatusBar.template | 2 +- .../img/toolbar/1.25x/btn-sheet-list.png | Bin 0 -> 175 bytes .../resources/img/toolbar/1.5x/btn-sheet-list.png | Bin 0 -> 177 bytes .../img/toolbar/1.75x/btn-sheet-list.png | Bin 0 -> 182 bytes .../resources/img/toolbar/1x/btn-sheet-list.png | Bin 0 -> 171 bytes .../resources/img/toolbar/2x/btn-sheet-list.png | Bin 0 -> 194 bytes 6 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/btn-sheet-list.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/btn-sheet-list.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-sheet-list.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1x/btn-sheet-list.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/2x/btn-sheet-list.png diff --git a/apps/spreadsheeteditor/main/app/template/StatusBar.template b/apps/spreadsheeteditor/main/app/template/StatusBar.template index b7f2d8400..f83c71d4c 100644 --- a/apps/spreadsheeteditor/main/app/template/StatusBar.template +++ b/apps/spreadsheeteditor/main/app/template/StatusBar.template @@ -10,7 +10,7 @@
    diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/btn-sheet-list.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/btn-sheet-list.png new file mode 100644 index 0000000000000000000000000000000000000000..d12f7e50e414c82fa420012f61598c52248bf737 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjd!3HFYLuy@s6lZ})WHAE+w=f7ZGR&GI0Tg5` z4sv&5Sa(k5C6L3C?&#~tz_78O`%fY(kniH@;uuoF`1bNfP6h)Gm%zElZvAcFP&O;2 ziNn21;K%yV9j|6H9`OHDa^g(tqE$st_wRn%+cCkc!P|uCOa{x0iyRC#8yQ(wDX=nS SR5$?5WAJqKb6Mw<&;$V3Yc&%9 literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/btn-sheet-list.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/btn-sheet-list.png new file mode 100644 index 0000000000000000000000000000000000000000..76dd43f48df8b6efaa2adf951be8fc62882ffa2e GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3HD?X4LuvDb50q$YKTtZeb8+WSBKa0w~B> z9OUlAumdKI;Vst02>1{N&o-= literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1x/btn-sheet-list.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1x/btn-sheet-list.png new file mode 100644 index 0000000000000000000000000000000000000000..34ab4cd3dcc76660eb1fdfcd965a73336f89e832 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<gi(^OyLjP{)7t^oi%4Jc)C0}O;0#vs&@Td-M6kSTiV4{o;! N44$rjF6*2UngIL$GUxyR literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/2x/btn-sheet-list.png b/apps/spreadsheeteditor/main/resources/img/toolbar/2x/btn-sheet-list.png new file mode 100644 index 0000000000000000000000000000000000000000..3a67eb434f781a8d04da01af5b8cee4db4f7395c GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0YI$5!3HEV6KWZO6lZ})WHAE+w=f7ZGR&GI0Tg5` z4sv&5Sa(k5C6L3C?&#~tz_78O`%fY(kRR^p;uuoF`1a~X-UA9eu8!)b12+E`xZ*R} zC*fq50_(2TxV!@y9mM%=wvftP!VbRW Date: Mon, 28 Jun 2021 14:16:41 +0300 Subject: [PATCH 157/376] Correct icon android --- apps/common/mobile/resources/less/common-material.less | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/common/mobile/resources/less/common-material.less b/apps/common/mobile/resources/less/common-material.less index b2b44f5a9..604e5bcbf 100644 --- a/apps/common/mobile/resources/less/common-material.less +++ b/apps/common/mobile/resources/less/common-material.less @@ -258,6 +258,9 @@ flex: 1; font-size: 17px; margin-left: 5px; + display: flex; + align-items: center; + justify-content: center; &:first-child { margin-left: 0; } From 175a2a0d441adc3a9c5c31ff9127c27b0e0ff8c3 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Mon, 28 Jun 2021 14:39:33 +0300 Subject: [PATCH 158/376] [SSE mobile] Bug 48387 --- apps/spreadsheeteditor/mobile/locale/en.json | 34 ++++++++++++++++++- .../mobile/src/controller/Main.jsx | 34 ++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index 02681d4f8..a5fe60013 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -28,7 +28,39 @@ "txtXAxis": "X Axis", "txtYAxis": "Y Axis", "txtArt": "Your text here", - "txtAccent": "Accent" + "txtAccent": "Accent", + "txtTable": "Table", + "txtPrintArea": "Print_Area", + "txtConfidential": "Confidential", + "txtPreparedBy": "Prepared by", + "txtPage": "Page", + "txtPageOf": "Page %1 of %2", + "txtPages": "Pages", + "txtDate": "Date", + "txtTime": "Time", + "txtTab": "Tab", + "txtFile": "File", + "txtColumn": "Column", + "txtRow": "Row", + "txtByField": "%1 of %2", + "txtAll": "(All)", + "txtValues": "Values", + "txtGrandTotal": "Grand Total", + "txtRowLbls": "Row Labels", + "txtColLbls": "Column Labels", + "txtMultiSelect": "Multi-Select (Alt+S)", + "txtClearFilter": "Clear Filter (Alt+C)", + "txtBlank": "(blank)", + "txtGroup": "Group", + "txtSeconds": "Seconds", + "txtMinutes": "Minutes", + "txtHours": "Hours", + "txtDays": "Days", + "txtMonths": "Months", + "txtQuarters": "Quarters", + "txtYears": "Years", + "txtOr": "%1 or %2", + "txtQuarter": "Qtr" }, "textGuest": "Guest", "textAnonymous": "Anonymous", diff --git a/apps/spreadsheeteditor/mobile/src/controller/Main.jsx b/apps/spreadsheeteditor/mobile/src/controller/Main.jsx index a021ed9e2..34d72d1af 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/Main.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/Main.jsx @@ -221,7 +221,39 @@ class MainController extends Component { 'Diagram Title': _t.txtDiagramTitle, 'X Axis': _t.txtXAxis, 'Y Axis': _t.txtYAxis, - 'Your text here': _t.txtArt + 'Your text here': _t.txtArt, + 'Table': _t.txtTable, + 'Print_Area': _t.txtPrintArea, + 'Confidential': _t.txtConfidential, + 'Prepared by ': _t.txtPreparedBy + ' ', + 'Page': _t.txtPage, + 'Page %1 of %2': _t.txtPageOf, + 'Pages': _t.txtPages, + 'Date': _t.txtDate, + 'Time': _t.txtTime, + 'Tab': _t.txtTab, + 'File': _t.txtFile, + 'Column': _t.txtColumn, + 'Row': _t.txtRow, + '%1 of %2': _t.txtByField, + '(All)': _t.txtAll, + 'Values': _t.txtValues, + 'Grand Total': _t.txtGrandTotal, + 'Row Labels': _t.txtRowLbls, + 'Column Labels': _t.txtColLbls, + 'Multi-Select (Alt+S)': _t.txtMultiSelect, + 'Clear Filter (Alt+C)': _t.txtClearFilter, + '(blank)': _t.txtBlank, + 'Group': _t.txtGroup, + 'Seconds': _t.txtSeconds, + 'Minutes': _t.txtMinutes, + 'Hours': _t.txtHours, + 'Days': _t.txtDays, + 'Months': _t.txtMonths, + 'Quarters': _t.txtQuarters, + 'Years': _t.txtYears, + '%1 or %2': _t.txtOr, + 'Qtr': _t.txtQuarter }; styleNames.forEach(function(item){ translate[item] = _t['txtStyle_' + item.replace(/ /g, '_')] || item; From 7117a546c00e61dd6c6c0b3449ea999a86113081 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Mon, 28 Jun 2021 14:40:46 +0300 Subject: [PATCH 159/376] [DE SSE mobile] Fix Bug 47858 --- .../common/mobile/lib/controller/collaboration/Comments.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Comments.jsx b/apps/common/mobile/lib/controller/collaboration/Comments.jsx index 86855daed..43cf13dfe 100644 --- a/apps/common/mobile/lib/controller/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Comments.jsx @@ -480,6 +480,10 @@ class ViewCommentsController extends Component { } const api = Common.EditorApi.get(); api.asc_changeComment(comment.uid, ascComment); + + if(!this.props.storeApplicationSettings.isResolvedComments) { + this.closeViewCurComments(); + } } } deleteComment (comment) { @@ -591,7 +595,7 @@ class ViewCommentsController extends Component { const _CommentsController = inject('storeAppOptions', 'storeComments', 'users', "storeApplicationSettings")(observer(CommentsController)); const _AddCommentController = inject('storeAppOptions', 'storeComments', 'users')(observer(AddCommentController)); const _EditCommentController = inject('storeComments', 'users')(observer(EditCommentController)); -const _ViewCommentsController = inject('storeComments', 'users')(observer(withTranslation()(ViewCommentsController))); +const _ViewCommentsController = inject('storeComments', 'users', "storeApplicationSettings")(observer(withTranslation()(ViewCommentsController))); export { _CommentsController as CommentsController, From 1fb891a772c7ce80783588ac5477f19ad78edf24 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Mon, 28 Jun 2021 14:42:17 +0300 Subject: [PATCH 160/376] [DE mobile] Fix bug 50954 --- apps/documenteditor/mobile/src/controller/edit/EditText.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/documenteditor/mobile/src/controller/edit/EditText.jsx b/apps/documenteditor/mobile/src/controller/edit/EditText.jsx index 922458b4b..b71bd38c5 100644 --- a/apps/documenteditor/mobile/src/controller/edit/EditText.jsx +++ b/apps/documenteditor/mobile/src/controller/edit/EditText.jsx @@ -18,7 +18,7 @@ class EditTextController extends Component { if (isDecrement) { typeof size === 'undefined' ? api.FontSizeOut() : size = Math.max(1, --size); } else { - typeof size === 'undefined' ? api.FontSizeIn : size = Math.min(300, ++size); + typeof size === 'undefined' ? api.FontSizeIn() : size = Math.min(300, ++size); } if (typeof size !== 'undefined') { api.put_TextPrFontSize(size); From 246295386b22f258dd7bea7033fd60ceeeb5f0aa Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 14:51:32 +0300 Subject: [PATCH 161/376] [SSE] Show user's cursor on co-editing --- .../main/app/controller/DocumentHolder.js | 80 ++++++++++++++++--- 1 file changed, 67 insertions(+), 13 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 657726150..1efa49d4b 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -114,6 +114,8 @@ define([ me._currentParaObjDisabled = false; me._isDisabled = false; me._state = {}; + me.fastcoauthtips = []; + me._TtHeight = 20; /** coauthoring begin **/ this.wrapEvents = { apiHideComment: _.bind(this.onApiHideComment, this) @@ -332,6 +334,9 @@ define([ this.api.asc_registerCallback('asc_onTableTotalMenu', _.bind(this.onTableTotalMenu, this)); this.api.asc_registerCallback('asc_onShowPivotGroupDialog', _.bind(this.onShowPivotGroupDialog, this)); } + this.api.asc_registerCallback('asc_onShowForeignCursorLabel', _.bind(this.onShowForeignCursorLabel, this)); + this.api.asc_registerCallback('asc_onHideForeignCursorLabel', _.bind(this.onHideForeignCursorLabel, this)); + return this; }, @@ -1129,17 +1134,6 @@ define([ } } // show tooltips - /** coauthoring begin **/ - var getUserName = function(id){ - var usersStore = SSE.getCollection('Common.Collections.Users'); - if (usersStore){ - var rec = usersStore.findUser(id); - if (rec) - return AscCommon.UserInfoParser.getParsedName(rec.get('username')); - } - return me.guestText; - }; - /** coauthoring end **/ if (index_hyperlink) { if (!hyperlinkTip.parentEl) { @@ -1305,7 +1299,7 @@ define([ if (showPoint[1] >= coAuthTip.XY[1] && showPoint[1] + coAuthTip.ttHeight < coAuthTip.XY[1] + coAuthTip.apiHeight) { - src.text(getUserName(data.asc_getUserId())); + src.text(me.getUserName(data.asc_getUserId())); if (coAuthTip.bodyWidth - showPoint[0] < coAuthTip.ref.width() ) { src.css({ visibility : 'visible', @@ -3617,7 +3611,67 @@ define([ win.setActiveCategory(2); } }, - + + onShowForeignCursorLabel: function(UserId, X, Y, color) { + /** coauthoring begin **/ + var src; + var me = this; + for (var i=0; i Date: Mon, 28 Jun 2021 15:25:27 +0300 Subject: [PATCH 162/376] [SSE mobile] Fix Bug 49377 --- apps/spreadsheeteditor/mobile/src/view/add/AddFunction.jsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/spreadsheeteditor/mobile/src/view/add/AddFunction.jsx b/apps/spreadsheeteditor/mobile/src/view/add/AddFunction.jsx index cd5c2db48..82cc52a23 100644 --- a/apps/spreadsheeteditor/mobile/src/view/add/AddFunction.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/add/AddFunction.jsx @@ -26,6 +26,11 @@ const PageGroup = ({name, type, functions, onInsertFunction, f7router}) => { if (functions[k].group == type) items.push(functions[k]); } + + items.sort(function(a, b) { + return (a.caption.toLowerCase() > b.caption.toLowerCase()) ? 1 : -1; + }); + return ( @@ -88,6 +93,7 @@ const AddFunction = props => { name: name }) } + return ( From cc850adfcc77d0eb6f5d5fbaaf1ea35cde76e483 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Mon, 28 Jun 2021 15:52:28 +0300 Subject: [PATCH 163/376] [DE PE mobile] Fix bug 50773 --- .../mobile/src/controller/add/AddTable.jsx | 44 ++++++++++--------- .../mobile/src/controller/add/AddOther.jsx | 44 ++++++++++--------- 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/apps/documenteditor/mobile/src/controller/add/AddTable.jsx b/apps/documenteditor/mobile/src/controller/add/AddTable.jsx index 4a0a4bfd5..7916390a1 100644 --- a/apps/documenteditor/mobile/src/controller/add/AddTable.jsx +++ b/apps/documenteditor/mobile/src/controller/add/AddTable.jsx @@ -56,28 +56,30 @@ class AddTableController extends Component { api.put_Table(parseInt(size[0]), parseInt(size[1]), type.toString()); } } - ] + ], + on: { + open: () => { + picker = f7.picker.create({ + containerEl: document.getElementById('picker-table-size'), + cols: [ + { + textAlign: 'center', + width: '100%', + values: [1,2,3,4,5,6,7,8,9,10] + }, + { + textAlign: 'center', + width: '100%', + values: [1,2,3,4,5,6,7,8,9,10] + } + ], + toolbar: false, + rotateEffect: true, + value: [3, 3] + }); + } + } }).open(); - dialog.on('opened', () => { - picker = f7.picker.create({ - containerEl: document.getElementById('picker-table-size'), - cols: [ - { - textAlign: 'center', - width: '100%', - values: [1,2,3,4,5,6,7,8,9,10] - }, - { - textAlign: 'center', - width: '100%', - values: [1,2,3,4,5,6,7,8,9,10] - } - ], - toolbar: false, - rotateEffect: true, - value: [3, 3] - }); - }); } render () { diff --git a/apps/presentationeditor/mobile/src/controller/add/AddOther.jsx b/apps/presentationeditor/mobile/src/controller/add/AddOther.jsx index 4ac82cca4..f10cbe1f5 100644 --- a/apps/presentationeditor/mobile/src/controller/add/AddOther.jsx +++ b/apps/presentationeditor/mobile/src/controller/add/AddOther.jsx @@ -64,28 +64,30 @@ class AddOtherController extends Component { api.put_Table(parseInt(size[0]), parseInt(size[1]), undefined, type.toString()); } } - ] + ], + on: { + open: () => { + picker = f7.picker.create({ + containerEl: document.getElementById('picker-table-size'), + cols: [ + { + textAlign: 'center', + width: '100%', + values: [1,2,3,4,5,6,7,8,9,10] + }, + { + textAlign: 'center', + width: '100%', + values: [1,2,3,4,5,6,7,8,9,10] + } + ], + toolbar: false, + rotateEffect: true, + value: [3, 3] + }); + } + } }).open(); - dialog.on('opened', () => { - picker = f7.picker.create({ - containerEl: document.getElementById('picker-table-size'), - cols: [ - { - textAlign: 'center', - width: '100%', - values: [1,2,3,4,5,6,7,8,9,10] - }, - { - textAlign: 'center', - width: '100%', - values: [1,2,3,4,5,6,7,8,9,10] - } - ], - toolbar: false, - rotateEffect: true, - value: [3, 3] - }); - }); } hideAddComment () { From cacadc927f0285bc385d7795e609ee5f50e35c26 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 16:06:32 +0300 Subject: [PATCH 164/376] [SSE] Bugfix --- .../main/app/controller/DocumentHolder.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 1efa49d4b..90484adbb 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -3631,17 +3631,6 @@ define([ 'background-color': '#'+Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b())}); src.text(me.getUserName(UserId)); - - src.css({ - height : coAuthTip.ttHeight + 'px', - position : 'absolute', - zIndex : '900', - visibility : 'visible' - }); - $(document.body).append(src); - - - $('#editor_sdk').append(src); me.fastcoauthtips.push(src); src.fadeIn(150); From f63dab08274fc5d9d41447039758fa0b3e7f28eb Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Mon, 28 Jun 2021 17:26:13 +0300 Subject: [PATCH 165/376] [DE] fix skeleton theme colors --- apps/common/main/lib/controller/Themes.js | 3 ++- apps/documenteditor/main/index.html | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/common/main/lib/controller/Themes.js b/apps/common/main/lib/controller/Themes.js index 32373d23b..64330b04a 100644 --- a/apps/common/main/lib/controller/Themes.js +++ b/apps/common/main/lib/controller/Themes.js @@ -255,7 +255,8 @@ define([ }, currentThemeId: function () { - return get_ui_theme_name(Common.localStorage.getItem('ui-theme')) || id_default_light_theme; + var t = Common.localStorage.getItem('ui-theme') || Common.localStorage.getItem('ui-theme-id'); + return get_ui_theme_name(t) || id_default_light_theme; }, defaultThemeId: function (type) { diff --git a/apps/documenteditor/main/index.html b/apps/documenteditor/main/index.html index 0f0757a29..71bc2810b 100644 --- a/apps/documenteditor/main/index.html +++ b/apps/documenteditor/main/index.html @@ -14,7 +14,7 @@ --toolbar-header-document: #2a2a2a; --background-toolbar: #404040; --border-toolbar: #2a2a2a; - --highlight-button-hover: #e0e0e0; + --highlight-button-hover: #555; --highlight-header-button-hover: rgba(255,255,255,.05); --canvas-background: #666666; /*--canvas-content-background: #fff;*/ From b441e301e3c693084a6126044f8bff57547da93b Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Mon, 28 Jun 2021 17:43:46 +0300 Subject: [PATCH 166/376] [all] locked zoom attribute correction --- apps/common/main/lib/util/htmlutils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/common/main/lib/util/htmlutils.js b/apps/common/main/lib/util/htmlutils.js index 9277da26f..36a91080a 100644 --- a/apps/common/main/lib/util/htmlutils.js +++ b/apps/common/main/lib/util/htmlutils.js @@ -11,8 +11,8 @@ function checkScaling() { "screen and (-webkit-device-pixel-ratio: 2)").matches ) { // don't add zoom for mobile devices - if (!(/android|avantgo|playbook|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent || navigator.vendor || window.opera))) - document.getElementsByTagName('html')[0].setAttribute('style', 'zoom: ' + (1 / window.devicePixelRatio) + ';'); + // if (!(/android|avantgo|playbook|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent || navigator.vendor || window.opera))) + // document.getElementsByTagName('html')[0].setAttribute('style', 'zoom: ' + (1 / window.devicePixelRatio) + ';'); } } From dbf70c662a4a62ea60ac7596ae078b03a2d1d60a Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Mon, 28 Jun 2021 17:45:02 +0300 Subject: [PATCH 167/376] [mobile] Bug 47107 --- apps/documenteditor/mobile/locale/en.json | 22 ++++++++++++++++++- .../src/view/settings/DocumentSettings.jsx | 10 ++++++++- apps/presentationeditor/mobile/locale/en.json | 22 ++++++++++++++++++- .../view/settings/PresentationSettings.jsx | 10 ++++++++- apps/spreadsheeteditor/mobile/locale/en.json | 22 ++++++++++++++++++- .../src/view/settings/SpreadsheetSettings.jsx | 10 ++++++++- 6 files changed, 90 insertions(+), 6 deletions(-) diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index 0492ef13d..4d0ad3a70 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -340,7 +340,27 @@ "textMarginsW": "Left and right margins are too high for a given page width", "textMarginsH": "Top and bottom margins are too high for a given page height", "textCollaboration": "Collaboration", - "textFindAndReplaceAll": "Find and Replace All" + "textFindAndReplaceAll": "Find and Replace All", + "txtScheme1": "Office", + "txtScheme2": "Grayscale", + "txtScheme3": "Apex", + "txtScheme4": "Aspect", + "txtScheme5": "Civic", + "txtScheme6": "Concourse", + "txtScheme7": "Equity", + "txtScheme8": "Flow", + "txtScheme9": "Foundry", + "txtScheme10": "Median", + "txtScheme11": "Metro", + "txtScheme12": "Module", + "txtScheme13": "Opulent", + "txtScheme14": "Oriel", + "txtScheme15": "Origin", + "txtScheme16": "Paper", + "txtScheme17": "Solstice", + "txtScheme18": "Technic", + "txtScheme19": "Trek", + "txtScheme22": "New Office" }, "Edit": { "textClose": "Close", diff --git a/apps/documenteditor/mobile/src/view/settings/DocumentSettings.jsx b/apps/documenteditor/mobile/src/view/settings/DocumentSettings.jsx index b20ad6c11..89111190b 100644 --- a/apps/documenteditor/mobile/src/view/settings/DocumentSettings.jsx +++ b/apps/documenteditor/mobile/src/view/settings/DocumentSettings.jsx @@ -162,6 +162,13 @@ const PageDocumentColorSchemes = props => { const _t = t('Settings', {returnObjects: true}); const storeSettings = props.storeDocumentSettings; const allSchemes = storeSettings.allSchemes; + const SchemeNames = [ + _t.txtScheme1, _t.txtScheme2, _t.txtScheme3, _t.txtScheme4, _t.txtScheme5, + _t.txtScheme6, _t.txtScheme7, _t.txtScheme8, _t.txtScheme9, _t.txtScheme10, + _t.txtScheme11, _t.txtScheme12, _t.txtScheme13, _t.txtScheme14, _t.txtScheme15, + _t.txtScheme16, _t.txtScheme17, _t.txtScheme18, _t.txtScheme19, _t.txtScheme20, + _t.txtScheme21, _t.txtScheme22 + ]; return ( @@ -169,8 +176,9 @@ const PageDocumentColorSchemes = props => { { allSchemes ? allSchemes.map((scheme, index) => { + const name = scheme.get_name(); return ( - { if(index !== curScheme) { setScheme(index); diff --git a/apps/presentationeditor/mobile/locale/en.json b/apps/presentationeditor/mobile/locale/en.json index 381d210e9..8b114090e 100644 --- a/apps/presentationeditor/mobile/locale/en.json +++ b/apps/presentationeditor/mobile/locale/en.json @@ -209,7 +209,27 @@ "textHighlight": "Highlight Results", "textReplace": "Replace", "textNoTextFound": "Text not Found", - "textCollaboration": "Collaboration" + "textCollaboration": "Collaboration", + "txtScheme1": "Office", + "txtScheme2": "Grayscale", + "txtScheme3": "Apex", + "txtScheme4": "Aspect", + "txtScheme5": "Civic", + "txtScheme6": "Concourse", + "txtScheme7": "Equity", + "txtScheme8": "Flow", + "txtScheme9": "Foundry", + "txtScheme10": "Median", + "txtScheme11": "Metro", + "txtScheme12": "Module", + "txtScheme13": "Opulent", + "txtScheme14": "Oriel", + "txtScheme15": "Origin", + "txtScheme16": "Paper", + "txtScheme17": "Solstice", + "txtScheme18": "Technic", + "txtScheme19": "Trek", + "txtScheme22": "New Office" }, "Add": { "textSlide": "Slide", diff --git a/apps/presentationeditor/mobile/src/view/settings/PresentationSettings.jsx b/apps/presentationeditor/mobile/src/view/settings/PresentationSettings.jsx index c8b345505..b04053ca8 100644 --- a/apps/presentationeditor/mobile/src/view/settings/PresentationSettings.jsx +++ b/apps/presentationeditor/mobile/src/view/settings/PresentationSettings.jsx @@ -38,6 +38,13 @@ const PagePresentationColorSchemes = props => { const _t = t('View.Settings', {returnObjects: true}); const storePresentationSettings = props.storePresentationSettings; const allSchemes = storePresentationSettings.allSchemes; + const SchemeNames = [ + _t.txtScheme1, _t.txtScheme2, _t.txtScheme3, _t.txtScheme4, _t.txtScheme5, + _t.txtScheme6, _t.txtScheme7, _t.txtScheme8, _t.txtScheme9, _t.txtScheme10, + _t.txtScheme11, _t.txtScheme12, _t.txtScheme13, _t.txtScheme14, _t.txtScheme15, + _t.txtScheme16, _t.txtScheme17, _t.txtScheme18, _t.txtScheme19, _t.txtScheme20, + _t.txtScheme21, _t.txtScheme22 + ]; return ( @@ -45,8 +52,9 @@ const PagePresentationColorSchemes = props => { { allSchemes ? allSchemes.map((scheme, index) => { + const name = scheme.get_name(); return ( - { if(index !== curScheme) { setScheme(index); diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index a5fe60013..ce0f9d7ef 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -545,7 +545,27 @@ "textValues": "Values", "textNoTextFound": "Text not found", "textReplaceAll": "Replace All", - "textCollaboration": "Collaboration" + "textCollaboration": "Collaboration", + "txtScheme1": "Office", + "txtScheme2": "Grayscale", + "txtScheme3": "Apex", + "txtScheme4": "Aspect", + "txtScheme5": "Civic", + "txtScheme6": "Concourse", + "txtScheme7": "Equity", + "txtScheme8": "Flow", + "txtScheme9": "Foundry", + "txtScheme10": "Median", + "txtScheme11": "Metro", + "txtScheme12": "Module", + "txtScheme13": "Opulent", + "txtScheme14": "Oriel", + "txtScheme15": "Origin", + "txtScheme16": "Paper", + "txtScheme17": "Solstice", + "txtScheme18": "Technic", + "txtScheme19": "Trek", + "txtScheme22": "New Office" } }, "Statusbar": { diff --git a/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx b/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx index 47705562d..78feb66f4 100644 --- a/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx @@ -11,6 +11,13 @@ const PageSpreadsheetColorSchemes = props => { const _t = t('View.Settings', {returnObjects: true}); const storeSpreadsheetSettings = props.storeSpreadsheetSettings; const allSchemes = storeSpreadsheetSettings.allSchemes; + const SchemeNames = [ + _t.txtScheme1, _t.txtScheme2, _t.txtScheme3, _t.txtScheme4, _t.txtScheme5, + _t.txtScheme6, _t.txtScheme7, _t.txtScheme8, _t.txtScheme9, _t.txtScheme10, + _t.txtScheme11, _t.txtScheme12, _t.txtScheme13, _t.txtScheme14, _t.txtScheme15, + _t.txtScheme16, _t.txtScheme17, _t.txtScheme18, _t.txtScheme19, _t.txtScheme20, + _t.txtScheme21, _t.txtScheme22 + ]; return ( @@ -18,8 +25,9 @@ const PageSpreadsheetColorSchemes = props => { { allSchemes ? allSchemes.map((scheme, index) => { + const name = scheme.get_name(); return ( - { if(index !== curScheme) { setScheme(index); From b6b812388106b81f88940c3c35d921d963be02f5 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 20:03:50 +0300 Subject: [PATCH 168/376] File menu refactoring --- apps/documenteditor/main/app/view/FileMenu.js | 6 +++--- .../presentationeditor/main/app/view/FileMenu.js | 10 +++++++--- apps/spreadsheeteditor/main/app/view/FileMenu.js | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index ffdd1b0fa..20d5d6692 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -416,9 +416,9 @@ define([ _btn_rename = this.getButton('rename'), _btn_protect = this.getButton('protect'); - _btn_save[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_protect[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_rename[(disable || !this.mode.canRename || this.mode.isDesktopApp) ?'hide':'show'](); + _btn_save.setDisabled(disable || !this.mode.isEdit); + _btn_protect.setDisabled(disable || !this.mode.isEdit); + _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); }, isVisible: function () { diff --git a/apps/presentationeditor/main/app/view/FileMenu.js b/apps/presentationeditor/main/app/view/FileMenu.js index ba9e00248..8793e479e 100644 --- a/apps/presentationeditor/main/app/view/FileMenu.js +++ b/apps/presentationeditor/main/app/view/FileMenu.js @@ -140,6 +140,10 @@ define([ caption : this.btnRenameCaption, canFocused: false }); + if ( !!this.options.miRename ) { + this.miRename.setDisabled(this.options.miRename.isDisabled()); + delete this.options.miRename; + } this.miProtect = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-protect'), @@ -452,9 +456,9 @@ define([ _btn_rename = this.getButton('rename'), _btn_protect = this.getButton('protect'); - _btn_save[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_protect[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_rename[(disable || !this.mode.canRename || this.mode.isDesktopApp) ?'hide':'show'](); + _btn_save.setDisabled(disable || !this.mode.isEdit); + _btn_protect.setDisabled(disable || !this.mode.isEdit); + _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); }, btnSaveCaption : 'Save', diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index 4f41c7ba0..13c4699a1 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -127,6 +127,10 @@ define([ caption : this.btnRenameCaption, canFocused: false }); + if ( !!this.options.miRename ) { + this.miRename.setDisabled(this.options.miRename.isDisabled()); + delete this.options.miRename; + } this.miProtect = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-protect'), @@ -402,6 +406,8 @@ define([ if ( !this.rendered ) { if (type == 'save') { return this.options.miSave ? this.options.miSave : (this.options.miSave = new Common.UI.MenuItem({})); + } else if (type == 'rename') { + return this.options.miRename ? this.options.miRename : (this.options.miRename = new Common.UI.MenuItem({})); } else if (type == 'protect') { return this.options.miProtect ? this.options.miProtect : (this.options.miProtect = new Common.UI.MenuItem({})); @@ -410,6 +416,9 @@ define([ if (type == 'save') { return this.miSave; } else + if (type == 'rename') { + return this.miRename; + }else if (type == 'protect') { return this.miProtect; } @@ -423,6 +432,13 @@ define([ this.panels['opts'].disableEditing(disabled); this.miProtect.setDisabled(disabled); } + var _btn_save = this.getButton('save'), + _btn_rename = this.getButton('rename'), + _btn_protect = this.getButton('protect'); + + _btn_save.setDisabled(disable || !this.mode.isEdit); + _btn_protect.setDisabled(disable || !this.mode.isEdit); + _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); }, btnSaveCaption : 'Save', From 8e3bc0869a2fb6a66226c7660bd02f8c9e0e7382 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 20:12:31 +0300 Subject: [PATCH 169/376] [SSE] Refactoring disabled panels --- .../main/app/controller/CellEditor.js | 2 +- .../main/app/controller/LeftMenu.js | 20 +++++++++++++------ .../main/app/controller/Main.js | 17 ++++++++-------- .../main/app/controller/Viewport.js | 2 +- .../main/app/view/FileMenu.js | 11 +++++----- .../main/app/view/FileMenuPanels.js | 2 +- .../main/app/view/Statusbar.js | 2 +- 7 files changed, 32 insertions(+), 24 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/CellEditor.js b/apps/spreadsheeteditor/main/app/controller/CellEditor.js index 8a9beecf1..4806b55a3 100644 --- a/apps/spreadsheeteditor/main/app/controller/CellEditor.js +++ b/apps/spreadsheeteditor/main/app/controller/CellEditor.js @@ -323,7 +323,7 @@ define([ this.namedrange_locked = (state == Asc.c_oAscDefinedNameReason.LockDefNameManager); }, - disableEditing: function(disabled) { + SetDisabled: function(disabled) { this.editor.$btnfunc[!disabled?'removeClass':'addClass']('disabled'); this.editor.btnNamedRanges.setVisible(!disabled); }, diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index e60895ed3..2127bd08e 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -188,13 +188,21 @@ define([ return this; }, - disableEditing: function(disabled) { - this.leftMenu.btnComments.setDisabled(disabled); - this.leftMenu.btnChat.setDisabled(disabled); - this.leftMenu.btnPlugins.setDisabled(disabled); - this.leftMenu.btnSpellcheck.setDisabled(disabled); + SetDisabled: function(disable, disableFileMenu) { + this.mode.isEdit = !disable; + if (disable) this.leftMenu.close(); - this.leftMenu.getMenu('file').disableEditing(disabled); + /** coauthoring begin **/ + this.leftMenu.btnComments.setDisabled(disable); + var comments = this.getApplication().getController('Common.Controllers.Comments'); + if (comments) + comments.setPreviewMode(disable); + this.setPreviewMode(disable); + this.leftMenu.btnChat.setDisabled(disable); + /** coauthoring end **/ + this.leftMenu.btnPlugins.setDisabled(disable); + this.leftMenu.btnSpellcheck.setDisabled(disable); + if (disableFileMenu) this.leftMenu.getMenu('file').SetDisabled(disable); }, createDelayedElements: function() { diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 1c151ad97..28f486644 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -1036,8 +1036,14 @@ define([ var app = this.getApplication(); if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { app.getController('RightMenu').getView('RightMenu').clearSelection(); - app.getController('Toolbar').DisableToolbar(disable); + app.getController('RightMenu').SetDisabled(disable, false); + app.getController('Toolbar').DisableToolbar(disable,disable); + app.getController('Statusbar').SetDisabled(disable); } + app.getController('LeftMenu').SetDisabled(disable, true); + app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + app.getController('Viewport').SetDisabled(disable); + app.getController('CellEditor').SetDisabled(disable); }, onOpenDocument: function(progress) { @@ -2439,16 +2445,11 @@ define([ disablefunc: function (disable) { me.disableEditing(disable); var app = me.getApplication(); - app.getController('Toolbar').DisableToolbar(disable,disable); - app.getController('RightMenu').SetDisabled(disable, true); - app.getController('Statusbar').SetDisabled(disable); - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); app.getController('DocumentHolder').SetDisabled(disable); var leftMenu = app.getController('LeftMenu'); + leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); leftMenu.setPreviewMode(disable); - leftMenu.disableEditing(disable); - app.getController('CellEditor').disableEditing(disable); - app.getController('Viewport').disableEditing(disable); + var comments = app.getController('Common.Controllers.Comments'); if (comments) comments.setPreviewMode(disable); }}); diff --git a/apps/spreadsheeteditor/main/app/controller/Viewport.js b/apps/spreadsheeteditor/main/app/controller/Viewport.js index a42d3771b..525c719ab 100644 --- a/apps/spreadsheeteditor/main/app/controller/Viewport.js +++ b/apps/spreadsheeteditor/main/app/controller/Viewport.js @@ -505,7 +505,7 @@ define([ } }, - disableEditing: function (disabled) { + SetDisabled: function (disabled) { this.viewmode = disabled; this.header.mnuitemHideHeadings.setDisabled(disabled); this.header.mnuitemHideGridlines.setDisabled(disabled); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index 13c4699a1..3b6256650 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -328,8 +328,7 @@ define([ } if ( this.mode.disableEditing != undefined ) { - this.panels['opts'].disableEditing(this.mode.disableEditing); - this.miProtect.setDisabled(this.mode.disableEditing); + this.panels['opts'].SetDisabled(this.mode.disableEditing); delete this.mode.disableEditing; } }, @@ -425,13 +424,13 @@ define([ } }, - disableEditing: function(disabled) { + SetDisabled: function(disable) { if ( !this.panels ) { - this.mode.disableEditing = disabled; + this.mode.disableEditing = disable; } else { - this.panels['opts'].disableEditing(disabled); - this.miProtect.setDisabled(disabled); + this.panels['opts'].SetDisabled(disable); } + var _btn_save = this.getButton('save'), _btn_rename = this.getButton('rename'), _btn_protect = this.getButton('protect'); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index b9bbfbf16..928b04cf3 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -261,7 +261,7 @@ define([ this.spellcheckSettings && this.spellcheckSettings.setApi(api); }, - disableEditing: function(disabled) { + SetDisabled: function(disabled) { if ( disabled ) { $(this.viewSettingsPicker.dataViewItems[1].el).hide(); $(this.viewSettingsPicker.dataViewItems[2].el).hide(); diff --git a/apps/spreadsheeteditor/main/app/view/Statusbar.js b/apps/spreadsheeteditor/main/app/view/Statusbar.js index 9801ab48f..038f60651 100644 --- a/apps/spreadsheeteditor/main/app/view/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/view/Statusbar.js @@ -478,7 +478,7 @@ define([ this.mode = _.extend({}, this.mode, mode); // this.$el.find('.el-edit')[mode.isEdit?'show':'hide'](); this.btnAddWorksheet.setVisible(this.mode.isEdit); - this.btnAddWorksheet.setDisabled(this.mode.isDisconnected); + this.btnAddWorksheet.setDisabled(this.mode.isDisconnected || this.api && (this.api.asc_isWorkbookLocked() || this.api.isCellEdited) || this.rangeSelectionMode!=Asc.c_oAscSelectionDialogType.None); this.updateTabbarBorders(); }, From 3f429b0bc83da976937ba8d202e9445d9c8cd75f Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 20:18:53 +0300 Subject: [PATCH 170/376] [SSE] Add version history --- apps/spreadsheeteditor/main/app.js | 2 + .../main/app/controller/LeftMenu.js | 56 +++++- .../main/app/controller/Main.js | 166 +++++++++++++++++- .../main/app/controller/Viewport.js | 13 +- .../main/app/template/FileMenu.template | 1 + .../main/app/template/Viewport.template | 1 + .../main/app/view/FileMenu.js | 13 +- .../main/app/view/LeftMenu.js | 11 ++ .../main/app/view/Viewport.js | 9 + apps/spreadsheeteditor/main/app_dev.js | 2 + .../main/resources/less/app.less | 1 + .../main/resources/less/layout.less | 7 + .../main/resources/less/leftmenu.less | 6 + 13 files changed, 280 insertions(+), 8 deletions(-) diff --git a/apps/spreadsheeteditor/main/app.js b/apps/spreadsheeteditor/main/app.js index 2057534be..2adb3fef1 100644 --- a/apps/spreadsheeteditor/main/app.js +++ b/apps/spreadsheeteditor/main/app.js @@ -160,6 +160,7 @@ require([ 'DataTab', 'ViewTab', 'Common.Controllers.Fonts', + 'Common.Controllers.History', 'Common.Controllers.Chat', 'Common.Controllers.Comments', 'Common.Controllers.Plugins' @@ -196,6 +197,7 @@ require([ 'common/main/lib/util/utils', 'common/main/lib/util/LocalStorage', 'common/main/lib/controller/Fonts', + 'common/main/lib/controller/History', 'common/main/lib/controller/Comments', 'common/main/lib/controller/Chat', 'common/main/lib/controller/Plugins' diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index 2127bd08e..88096da1d 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -56,7 +56,11 @@ define([ 'hide': _.bind(this.onHidePlugins, this) }, 'Common.Views.Header': { - 'file:settings': _.bind(this.clickToolbarSettings,this) + 'file:settings': _.bind(this.clickToolbarSettings,this), + 'history:show': function () { + if ( !this.leftMenu.panelHistory.isVisible() ) + this.clickMenuFileItem('header', 'history'); + }.bind(this) }, 'LeftMenu': { 'file:show': _.bind(this.fileShowHide, this, true), @@ -98,6 +102,10 @@ define([ } }); Common.NotificationCenter.on('app:comment:add', _.bind(this.onAppAddComment, this)); + Common.NotificationCenter.on('collaboration:history', _.bind(function () { + if ( !this.leftMenu.panelHistory.isVisible() ) + this.clickMenuFileItem(null, 'history'); + }, this)); }, onLaunch: function() { @@ -169,6 +177,8 @@ define([ if (!this.mode.isEditMailMerge && !this.mode.isEditDiagram) this.api.asc_registerCallback('asc_onEditCell', _.bind(this.onApiEditCell, this)); this.leftMenu.getMenu('file').setApi(api); + if (this.mode.canUseHistory) + this.getApplication().getController('Common.Controllers.History').setApi(this.api).setMode(this.mode); return this; }, @@ -224,6 +234,8 @@ define([ this.leftMenu.btnSpellcheck.show(); this.leftMenu.setOptionsPanel('spellcheck', this.getApplication().getController('Spellcheck').getView('Spellcheck')); } + if (this.mode.canUseHistory) + this.leftMenu.setOptionsPanel('history', this.getApplication().getController('Common.Controllers.History').getView('Common.Views.History')); (this.mode.trialMode || this.mode.isBeta) && this.leftMenu.setDeveloperMode(this.mode.trialMode, this.mode.isBeta, this.mode.buildVersion); /** coauthoring end **/ @@ -272,10 +284,35 @@ define([ } })).show(); break; + case 'history': + if (!this.leftMenu.panelHistory.isVisible()) { + if (this.api.asc_isDocumentModified()) { + var me = this; + this.api.asc_stopSaving(); + Common.UI.warning({ + closable: false, + width: 500, + title: this.notcriticalErrorTitle, + msg: this.leavePageText, + buttons: ['ok', 'cancel'], + primary: 'ok', + callback: function(btn) { + if (btn == 'ok') { + me.api.asc_undoAllChanges(); + me.api.asc_continueSaving(); + me.showHistory(); + } else + me.api.asc_continueSaving(); + } + }); + } else + this.showHistory(); + } + break; default: close_menu = false; } - if (close_menu) { + if (close_menu && menu) { menu.hide(); } }, @@ -954,6 +991,17 @@ define([ } }, + showHistory: function() { + if (!this.mode.wopi) { + var maincontroller = this.getApplication().getController('Main'); + if (!maincontroller.loadMask) + maincontroller.loadMask = new Common.UI.LoadMask({owner: $('#viewport')}); + maincontroller.loadMask.setTitle(this.textLoadHistory); + maincontroller.loadMask.show(); + } + Common.Gateway.requestHistory(); + }, + textNoTextFound : 'Text not found', newDocumentTitle : 'Unnamed document', textItemEntireCell : 'Entire cell contents', @@ -971,6 +1019,8 @@ define([ textWithin: 'Within', textSearch: 'Search', textLookin: 'Look in', - txtUntitled: 'Untitled' + txtUntitled: 'Untitled', + textLoadHistory : 'Loading version history...', + leavePageText: 'All unsaved changes in this document will be lost.
    Click \'Cancel\' then \'Save\' to save them. Click \'OK\' to discard all the unsaved changes.' }, SSE.Controllers.LeftMenu || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 28f486644..555ccc576 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -90,7 +90,8 @@ define([ 'TableTemplates', 'ConditionalFormatIcons', 'ConditionalFormatIconsPresets', - 'Common.Collections.TextArt' + 'Common.Collections.TextArt', + 'Common.Collections.HistoryUsers' ], views: [], @@ -939,6 +940,7 @@ define([ Common.Gateway.on('downloadas', _.bind(me.onDownloadAs, me)); Common.Gateway.on('setfavorite', _.bind(me.onSetFavorite, me)); Common.Gateway.on('requestclose', _.bind(me.onRequestClose, me)); + Common.Gateway.on('refreshhistory',_.bind(me.onRefreshHistory, me)); Common.Gateway.sendInfo({mode:me.appOptions.isEdit?'edit':'view'}); $(document).on('contextmenu', _.bind(me.onContextMenu, me)); @@ -1142,6 +1144,14 @@ define([ this.getApplication().getController('Common.Controllers.Plugins').setMode(this.appOptions); } + this.appOptions.canUseHistory = this.appOptions.canLicense && this.editorConfig.canUseHistory && this.appOptions.canCoAuthoring && !this.appOptions.isOffline; + this.appOptions.canHistoryClose = this.editorConfig.canHistoryClose; + this.appOptions.canHistoryRestore= this.editorConfig.canHistoryRestore; + + if ( this.appOptions.isLightVersion ) { + this.appOptions.canUseHistory = false; + } + this.loadCoAuthSettings(); this.applyModeCommonElements(); this.applyModeEditorElements(); @@ -2549,6 +2559,157 @@ define([ this._renameDialog.show(Common.Utils.innerWidth() - this._renameDialog.options.width - 15, 30); }, + onRefreshHistory: function(opts) { + if (!this.appOptions.canUseHistory) return; + + this.loadMask && this.loadMask.hide(); + if (opts.data.error || !opts.data.history) { + var historyStore = this.getApplication().getCollection('Common.Collections.HistoryVersions'); + if (historyStore && historyStore.size()>0) { + historyStore.each(function(item){ + item.set('canRestore', false); + }); + } + Common.UI.alert({ + title: this.notcriticalErrorTitle, + msg: (opts.data.error) ? opts.data.error : this.txtErrorLoadHistory, + iconCls: 'warn', + buttons: ['ok'], + callback: _.bind(function(btn){ + this.onEditComplete(); + }, this) + }); + } else { + this.api.asc_coAuthoringDisconnect(); + this.headerView.setCanRename(false); + this.headerView.getButton('users') && this.headerView.getButton('users').hide(); + this.getApplication().getController('LeftMenu').getView('LeftMenu').showHistory(); + this.disableEditing(true); + this._renameDialog && this._renameDialog.close(); + var versions = opts.data.history, + historyStore = this.getApplication().getCollection('Common.Collections.HistoryVersions'), + currentVersion = null; + if (historyStore) { + var arrVersions = [], ver, version, group = -1, prev_ver = -1, arrColors = [], docIdPrev = '', + usersStore = this.getApplication().getCollection('Common.Collections.HistoryUsers'), user = null, usersCnt = 0; + + for (ver=versions.length-1; ver>=0; ver--) { + version = versions[ver]; + if (version.versionGroup===undefined || version.versionGroup===null) + version.versionGroup = version.version; + if (version) { + if (!version.user) version.user = {}; + docIdPrev = (ver>0 && versions[ver-1]) ? versions[ver-1].key : version.key + '0'; + user = usersStore.findUser(version.user.id); + if (!user) { + user = new Common.Models.User({ + id : version.user.id, + username : version.user.name, + colorval : Asc.c_oAscArrUserColors[usersCnt], + color : this.generateUserColor(Asc.c_oAscArrUserColors[usersCnt++]) + }); + usersStore.add(user); + } + + arrVersions.push(new Common.Models.HistoryVersion({ + version: version.versionGroup, + revision: version.version, + userid : version.user.id, + username : version.user.name, + usercolor: user.get('color'), + created: version.created, + docId: version.key, + markedAsVersion: (group!==version.versionGroup), + selected: (opts.data.currentVersion == version.version), + canRestore: this.appOptions.canHistoryRestore && (ver < versions.length-1), + isExpanded: true, + serverVersion: version.serverVersion + })); + if (opts.data.currentVersion == version.version) { + currentVersion = arrVersions[arrVersions.length-1]; + } + group = version.versionGroup; + if (prev_ver!==version.version) { + prev_ver = version.version; + arrColors.reverse(); + for (i=0; i0) { + arrVersions[arrVersions.length-1].set('docIdPrev', docIdPrev); + if (!_.isEmpty(version.serverVersion) && version.serverVersion == this.appOptions.buildVersion) { + arrVersions[arrVersions.length-1].set('changeid', changes.length-1); + arrVersions[arrVersions.length-1].set('hasChanges', changes.length>1); + for (i=changes.length-2; i>=0; i--) { + change = changes[i]; + + user = usersStore.findUser(change.user.id); + if (!user) { + user = new Common.Models.User({ + id : change.user.id, + username : change.user.name, + colorval : Asc.c_oAscArrUserColors[usersCnt], + color : this.generateUserColor(Asc.c_oAscArrUserColors[usersCnt++]) + }); + usersStore.add(user); + } + + arrVersions.push(new Common.Models.HistoryVersion({ + version: version.versionGroup, + revision: version.version, + changeid: i, + userid : change.user.id, + username : change.user.name, + usercolor: user.get('color'), + created: change.created, + docId: version.key, + docIdPrev: docIdPrev, + selected: false, + canRestore: this.appOptions.canHistoryRestore && this.appOptions.canDownload, + isRevision: false, + isVisible: true, + serverVersion: version.serverVersion + })); + arrColors.push(user.get('colorval')); + } + } + } else if (ver==0 && versions.length==1) { + arrVersions[arrVersions.length-1].set('docId', version.key + '1'); + } + } + } + if (arrColors.length>0) { + arrColors.reverse(); + for (i=0; i0) { + currentVersion = historyStore.at(0); + currentVersion.set('selected', true); + } + // if (currentVersion) + // this.getApplication().getController('Common.Controllers.History').onSelectRevision(null, null, currentVersion); + } + } + }, + + DisableVersionHistory: function() { + this.editorConfig.canUseHistory = false; + this.appOptions.canUseHistory = false; + }, + + generateUserColor: function(color) { + return"#"+("000000"+color.toString(16)).substr(-6); + }, + onGrabFocus: function() { this.getApplication().getController('DocumentHolder').getView().focus(); }, @@ -2953,7 +3114,8 @@ define([ errorPivotWithoutUnderlying: 'The Pivot Table report was saved without the underlying data.
    Use the \'Refresh\' button to update the report.', txtQuarter: 'Qtr', txtOr: '%1 or %2', - confirmReplaceFormulaInTable: 'Formulas in the header row will be removed and converted to static text.
    Do you want to continue?' + confirmReplaceFormulaInTable: 'Formulas in the header row will be removed and converted to static text.
    Do you want to continue?', + txtErrorLoadHistory: 'Loading history failed' } })(), SSE.Controllers.Main || {})) }); diff --git a/apps/spreadsheeteditor/main/app/controller/Viewport.js b/apps/spreadsheeteditor/main/app/controller/Viewport.js index 525c719ab..fc3e15791 100644 --- a/apps/spreadsheeteditor/main/app/controller/Viewport.js +++ b/apps/spreadsheeteditor/main/app/controller/Viewport.js @@ -356,10 +356,11 @@ define([ this.api.asc_Resize(); }, this); - var leftPanel = $('#left-menu'); + var leftPanel = $('#left-menu'), + histPanel = $('#left-panel-history'); this.viewport.hlayout.on('layout:resizedrag', function() { this.api.asc_Resize(); - Common.localStorage.setItem('sse-mainmenu-width',leftPanel.width()); + Common.localStorage.setItem('sse-mainmenu-width',histPanel.is(':visible') ? (histPanel.width()+SCALE_MIN) : leftPanel.width()); }, this); this.boxSdk = $('#editor_sdk'); @@ -380,6 +381,14 @@ define([ case 'rightmenu': this.viewport.hlayout.doLayout(); break; + case 'history': + var panel = this.viewport.hlayout.items[1]; + if (panel.resize.el) { + this.boxSdk.css('border-left', ''); + panel.resize.el.show(); + } + this.viewport.hlayout.doLayout(); + break; case 'leftmenu': var panel = this.viewport.hlayout.items[0]; if (panel.resize.el) { diff --git a/apps/spreadsheeteditor/main/app/template/FileMenu.template b/apps/spreadsheeteditor/main/app/template/FileMenu.template index a2c9eb462..8bb022a44 100644 --- a/apps/spreadsheeteditor/main/app/template/FileMenu.template +++ b/apps/spreadsheeteditor/main/app/template/FileMenu.template @@ -16,6 +16,7 @@
  • +
  • diff --git a/apps/spreadsheeteditor/main/app/template/Viewport.template b/apps/spreadsheeteditor/main/app/template/Viewport.template index e9dd6ee38..1628f2610 100644 --- a/apps/spreadsheeteditor/main/app/template/Viewport.template +++ b/apps/spreadsheeteditor/main/app/template/Viewport.template @@ -16,6 +16,7 @@
    +
    diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index 3b6256650..0be1c83df 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -178,6 +178,13 @@ define([ canFocused: false }); + this.miHistory = new Common.UI.MenuItem({ + el : $markup.elementById('#fm-btn-history'), + action : 'history', + caption : this.btnHistoryCaption, + canFocused: false + }); + this.items = []; this.items.push( new Common.UI.MenuItem({ @@ -203,6 +210,7 @@ define([ canFocused: false }), this.miAccess, + this.miHistory, this.miSettings, this.miHelp, new Common.UI.MenuItem({ @@ -327,6 +335,8 @@ define([ this.panels['help'].setLangConfig(this.mode.lang); } + this.miHistory[this.mode.canUseHistory&&!this.mode.isDisconnected?'show':'hide'](); + if ( this.mode.disableEditing != undefined ) { this.panels['opts'].SetDisabled(this.mode.disableEditing); delete this.mode.disableEditing; @@ -456,6 +466,7 @@ define([ btnRenameCaption : 'Rename...', btnCloseMenuCaption : 'Close Menu', btnProtectCaption: 'Protect', - btnSaveCopyAsCaption : 'Save Copy as...' + btnSaveCopyAsCaption : 'Save Copy as...', + btnHistoryCaption : 'Versions History' }, SSE.Views.FileMenu || {})); }); diff --git a/apps/spreadsheeteditor/main/app/view/LeftMenu.js b/apps/spreadsheeteditor/main/app/view/LeftMenu.js index 8cca99aab..8b261c325 100644 --- a/apps/spreadsheeteditor/main/app/view/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/view/LeftMenu.js @@ -40,6 +40,7 @@ define([ /** coauthoring begin **/ 'common/main/lib/view/Comments', 'common/main/lib/view/Chat', + 'common/main/lib/view/History', /** coauthoring end **/ 'common/main/lib/view/SearchDialog', 'common/main/lib/view/Plugins', @@ -244,6 +245,8 @@ define([ } else if (name == 'spellcheck' && !this.panelSpellcheck) { this.panelSpellcheck = panel.render('#left-panel-spellcheck'); + } else if (name == 'history') { + this.panelHistory = panel.render('#left-panel-history'); } }, @@ -423,6 +426,14 @@ define([ this.limitHint && this.limitHint.css('top', top); }, + showHistory: function() { + this._state.pluginIsRunning = false; + this._state.historyIsRunning = true; + this.panelHistory.show(); + this.panelHistory.$el.width((parseInt(Common.localStorage.getItem('sse-mainmenu-width')) || MENU_SCALE_PART) - SCALE_MIN); + Common.NotificationCenter.trigger('layout:changed', 'history'); + }, + /** coauthoring begin **/ tipComments : 'Comments', tipChat : 'Chat', diff --git a/apps/spreadsheeteditor/main/app/view/Viewport.js b/apps/spreadsheeteditor/main/app/view/Viewport.js index d866e501a..baa0d58c9 100644 --- a/apps/spreadsheeteditor/main/app/view/Viewport.js +++ b/apps/spreadsheeteditor/main/app/view/Viewport.js @@ -117,6 +117,15 @@ define([ max: 600, offset: 4 } + }, { // history versions + el: items[3], + rely: true, + resize: { + hidden: true, + autohide: false, + min: 300, + max: 600 + } }, { el: items[1], stretch: true diff --git a/apps/spreadsheeteditor/main/app_dev.js b/apps/spreadsheeteditor/main/app_dev.js index 86e790254..a5a63c7e5 100644 --- a/apps/spreadsheeteditor/main/app_dev.js +++ b/apps/spreadsheeteditor/main/app_dev.js @@ -150,6 +150,7 @@ require([ 'DataTab', 'ViewTab', 'Common.Controllers.Fonts', + 'Common.Controllers.History', 'Common.Controllers.Chat', 'Common.Controllers.Comments', 'Common.Controllers.Plugins' @@ -186,6 +187,7 @@ require([ 'common/main/lib/util/utils', 'common/main/lib/util/LocalStorage', 'common/main/lib/controller/Fonts', + 'common/main/lib/controller/History', 'common/main/lib/controller/Comments', 'common/main/lib/controller/Chat', 'common/main/lib/controller/Plugins' diff --git a/apps/spreadsheeteditor/main/resources/less/app.less b/apps/spreadsheeteditor/main/resources/less/app.less index a92f42255..3573f82e4 100644 --- a/apps/spreadsheeteditor/main/resources/less/app.less +++ b/apps/spreadsheeteditor/main/resources/less/app.less @@ -120,6 +120,7 @@ @import "../../../../common/main/resources/less/language-dialog.less"; @import "../../../../common/main/resources/less/winxp_fix.less"; @import "../../../../common/main/resources/less/symboltable.less"; +@import "../../../../common/main/resources/less/history.less"; // App // -------------------------------------------------- diff --git a/apps/spreadsheeteditor/main/resources/less/layout.less b/apps/spreadsheeteditor/main/resources/less/layout.less index 54b5f4216..73e06aa0c 100644 --- a/apps/spreadsheeteditor/main/resources/less/layout.less +++ b/apps/spreadsheeteditor/main/resources/less/layout.less @@ -71,4 +71,11 @@ label { .tooltip-inner { max-width: none; } +} + +#left-panel-history { + left: 40px; + width: 300px; + height: 100%; + display: none; } \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/resources/less/leftmenu.less b/apps/spreadsheeteditor/main/resources/less/leftmenu.less index 778e54c5d..1d6fb4a66 100644 --- a/apps/spreadsheeteditor/main/resources/less/leftmenu.less +++ b/apps/spreadsheeteditor/main/resources/less/leftmenu.less @@ -14,6 +14,12 @@ } } +.left-panel { + #left-panel-history { + height: 100%; + } +} + .left-menu-full-ct { width: 100%; height: 100%; From ee1ca73fb2df48320aaa059a2c5122a72bdaa90d Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Mon, 28 Jun 2021 21:01:08 +0300 Subject: [PATCH 171/376] [scaling] correct scaling root selectors --- apps/common/main/lib/util/htmlutils.js | 18 ++++++++--- apps/common/main/lib/util/utils.js | 43 +++++++++++++++++++++----- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/apps/common/main/lib/util/htmlutils.js b/apps/common/main/lib/util/htmlutils.js index 36a91080a..ab885cfaf 100644 --- a/apps/common/main/lib/util/htmlutils.js +++ b/apps/common/main/lib/util/htmlutils.js @@ -1,9 +1,19 @@ function checkScaling() { - var str_mq_150 = "screen and (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 1.9), " + - "screen and (min-resolution: 1.5dppx) and (max-resolution: 1.9dppx)"; - if ( window.matchMedia(str_mq_150).matches ) { - document.body.classList.add('pixel-ratio__1_5'); + var matches = { + 'pixel-ratio__1_25': "screen and (-webkit-min-device-pixel-ratio: 1.25) and (-webkit-max-device-pixel-ratio: 1.49), " + + "screen and (min-resolution: 1.25dppx) and (max-resolution: 1.49dppx)", + 'pixel-ratio__1_5': "screen and (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 1.74), " + + "screen and (min-resolution: 1.5dppx) and (max-resolution: 1.74dppx)", + 'pixel-ratio__1_75': "screen and (-webkit-min-device-pixel-ratio: 1.75) and (-webkit-max-device-pixel-ratio: 1.99), " + + "screen and (min-resolution: 1.75dppx) and (max-resolution: 1.99dppx)", + }; + + for (var c in matches) { + if ( window.matchMedia(matches[c]).matches ) { + document.body.classList.add(c); + break; + } } if ( !window.matchMedia("screen and (-webkit-device-pixel-ratio: 1.5)," + diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index ec6f0c975..bedc08570 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -136,29 +136,56 @@ var utils = new(function() { scale = window.AscCommon.checkDeviceScale(); AscCommon.correctApplicationScale(scale); } else { - var str_mq_150 = "screen and (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 1.9), " + - "screen and (min-resolution: 1.5dppx) and (max-resolution: 1.9dppx)"; + var str_mq_125 = "screen and (-webkit-min-device-pixel-ratio: 1.25) and (-webkit-max-device-pixel-ratio: 1.49), " + + "screen and (min-resolution: 1.25dppx) and (max-resolution: 1.49dppx)"; + var str_mq_150 = "screen and (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 1.74), " + + "screen and (min-resolution: 1.5dppx) and (max-resolution: 1.74dppx)"; + var str_mq_175 = "screen and (-webkit-min-device-pixel-ratio: 1.75) and (-webkit-max-device-pixel-ratio: 1.99), " + + "screen and (min-resolution: 1.75dppx) and (max-resolution: 1.99dppx)"; var str_mq_200 = "screen and (-webkit-min-device-pixel-ratio: 2), " + "screen and (min-resolution: 2dppx), screen and (min-resolution: 192dpi)"; + if ( window.matchMedia(str_mq_125).matches ) { + scale.devicePixelRatio = 1.5; + } else if ( window.matchMedia(str_mq_150).matches ) { scale.devicePixelRatio = 1.5; } else + if ( window.matchMedia(str_mq_175).matches ) { + scale.devicePixelRatio = 1.75; + } else if ( window.matchMedia(str_mq_200).matches ) scale.devicePixelRatio = 2; else scale.devicePixelRatio = 1; } var $root = $(document.body); - if ( scale.devicePixelRatio < 1.5 ) { - $root.removeClass('pixel-ratio__1_5 pixel-ratio__2'); + var classes = document.body.className; + var clear_list = classes.replace(/pixel-ratio__[\w-]+/gi,'').trim(); + if ( scale.devicePixelRatio < 1.25 ) { + if ( /pixel-ratio__/.test(classes) ) { + document.body.className = clear_list; + } } else - if ( !(scale.devicePixelRatio < 1.5) && scale.devicePixelRatio < 2 ) { - $root.removeClass('pixel-ratio__2'); - $root.addClass('pixel-ratio__1_5'); + if ( scale.devicePixelRatio < 1.5 ) { + if ( !/pixel-ratio__1_25/.test(classes) ) { + document.body.className = clear_list + ' pixel-ratio__1_25'; + } + } else + if ( scale.devicePixelRatio < 1.75 ) { + if ( !/pixel-ratio__1_5/.test(classes) ) { + document.body.className = clear_list + ' pixel-ratio__1_5'; + } + } else + if ( !(scale.devicePixelRatio < 1.75) && scale.devicePixelRatio < 2 ) { + if ( !/pixel-ratio__1_75/.test(classes) ) { + document.body.className = clear_list + ' pixel-ratio__1_75'; + } } else { $root.addClass('pixel-ratio__2'); - $root.removeClass('pixel-ratio__1_5'); + if ( !/pixel-ratio__2/.test(classes) ) { + document.body.className = clear_list + ' pixel-ratio__2'; + } } me.zoom = scale.correct ? scale.zoom : 1; From be57b1fae72db250181ab38152dd29afb3c017f6 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 21:10:28 +0300 Subject: [PATCH 172/376] Disable language button on disconnect --- apps/documenteditor/main/app/view/Statusbar.js | 1 + apps/presentationeditor/main/app/view/Statusbar.js | 1 + 2 files changed, 2 insertions(+) diff --git a/apps/documenteditor/main/app/view/Statusbar.js b/apps/documenteditor/main/app/view/Statusbar.js index 1d9ded350..55b69d8c3 100644 --- a/apps/documenteditor/main/app/view/Statusbar.js +++ b/apps/documenteditor/main/app/view/Statusbar.js @@ -322,6 +322,7 @@ define([ if (this.api) { this.api.asc_registerCallback('asc_onCountPages', _.bind(_onCountPages, this)); this.api.asc_registerCallback('asc_onCurrentPage', _.bind(_onCurrentPage, this)); + this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onApiCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onApiCoAuthoringDisconnect, this)); } diff --git a/apps/presentationeditor/main/app/view/Statusbar.js b/apps/presentationeditor/main/app/view/Statusbar.js index e6b427b7f..676d3f347 100644 --- a/apps/presentationeditor/main/app/view/Statusbar.js +++ b/apps/presentationeditor/main/app/view/Statusbar.js @@ -301,6 +301,7 @@ define([ this.api.asc_registerCallback('asc_onCountPages', _.bind(_onCountPages, this)); this.api.asc_registerCallback('asc_onCurrentPage', _.bind(_onCurrentPage, this)); this.api.asc_registerCallback('asc_onFocusObject', _.bind(this.onApiFocusObject, this)); + this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onApiCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onApiCoAuthoringDisconnect, this)); } From 97c7708d0dabb81adb2e1c969896db722cdabed0 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 22:17:56 +0300 Subject: [PATCH 173/376] Disable save, undo/redo on disconnect --- apps/documenteditor/main/app/view/Toolbar.js | 4 ++++ apps/presentationeditor/main/app/view/Toolbar.js | 3 +++ apps/spreadsheeteditor/main/app/view/Toolbar.js | 5 ++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 76b0d9fe5..aaa31a73c 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -2082,6 +2082,10 @@ define([ setMode: function (mode) { if (mode.isDisconnected) { this.btnSave.setDisabled(true); + this.btnUndo.setDisabled(true); + this.btnRedo.setDisabled(true); + if ( this.synchTooltip ) + this.synchTooltip.hide(); if (!mode.enableDownload) this.btnPrint.setDisabled(true); } diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index 2cfc5e353..155d277be 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -1398,6 +1398,9 @@ define([ setMode: function (mode) { if (mode.isDisconnected) { this.lockToolbar(PE.enumLock.lostConnect, true); + this.lockToolbar( PE.enumLock.lostConnect, true, {array:[this.btnUndo,this.btnRedo,this.btnSave]} ); + if ( this.synchTooltip ) + this.synchTooltip.hide(); if (!mode.enableDownload) this.lockToolbar(PE.enumLock.cantPrint, true, {array: [this.btnPrint]}); } else diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 54e6b0f38..fb482ea8d 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -396,6 +396,7 @@ define([ id : 'id-toolbar-btn-save', cls : 'btn-toolbar', iconCls : 'toolbar__icon no-mask ' + me.btnSaveCls, + lock : [_set.lostConnect], signals : ['disabled'] }); me.btnCollabChanges = me.btnSave; @@ -2213,7 +2214,9 @@ define([ if (mode.isDisconnected) { this.lockToolbar( SSE.enumLock.lostConnect, true ); this.lockToolbar( SSE.enumLock.lostConnect, true, - {array:[this.btnEditChart, this.btnEditChartData, this.btnEditChartType, this.btnUndo,this.btnRedo]} ); + {array:[this.btnEditChart, this.btnEditChartData, this.btnEditChartType, this.btnUndo,this.btnRedo,this.btnSave]} ); + if ( this.synchTooltip ) + this.synchTooltip.hide(); if (!mode.enableDownload) this.lockToolbar(SSE.enumLock.cantPrint, true, {array: [this.btnPrint]}); } else { From e6c18fb05cfed2ba8096c0ed5b0e31ecb17be0ab Mon Sep 17 00:00:00 2001 From: evgenykatyshev Date: Tue, 29 Jun 2021 13:08:27 +0300 Subject: [PATCH 174/376] Update scroll colors and canvas background --- apps/common/main/resources/less/colors-table-dark.less | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/common/main/resources/less/colors-table-dark.less b/apps/common/main/resources/less/colors-table-dark.less index 7ebf68cad..2be210f12 100644 --- a/apps/common/main/resources/less/colors-table-dark.less +++ b/apps/common/main/resources/less/colors-table-dark.less @@ -56,7 +56,7 @@ // Canvas - --canvas-background: #666; + --canvas-background: #555; --canvas-content-background: #fff; --canvas-page-border: #555; @@ -87,8 +87,8 @@ --canvas-scroll-thumb-hover: #999; --canvas-scroll-thumb-pressed: #adadad; --canvas-scroll-thumb-border: #2a2a2a; - --canvas-scroll-thumb-border-hover: #2a2a2a; - --canvas-scroll-thumb-border-pressed: #2a2a2a; + --canvas-scroll-thumb-border-hover: #999; + --canvas-scroll-thumb-border-pressed: #adadad; --canvas-scroll-arrow: #999; --canvas-scroll-arrow-hover: #404040; --canvas-scroll-arrow-pressed: #404040; From 5a0cc476d600067f7368183099cfcb382be551da Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Tue, 29 Jun 2021 16:02:49 +0300 Subject: [PATCH 175/376] [SSE] Add dialog Sorting --- apps/spreadsheeteditor/mobile/locale/en.json | 5 +++ .../mobile/src/controller/add/AddFilter.jsx | 37 ++++++++++++++++++- .../mobile/src/less/app.less | 12 ++++++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index eee0461b7..e4fd86005 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -272,6 +272,11 @@ "textInvalidRange": "ERROR! Invalid cells range", "textSortAndFilter": "Sort and Filter", "textFilter": "Filter", + "txtSorting": "Sorting", + "txtExpandSort": "The data next to the selection will not be sorted. Do you want to expand the selection to include the adjacent data or continue with sorting the currently selected cells only?", + "txtExpand": "Expand and sort", + "txtSortSelected": "Sort selected", + "textCancel": "Cancel", "textComment": "Comment" }, "Edit" : { diff --git a/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx b/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx index ef9a13408..917e46388 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx @@ -1,4 +1,6 @@ import React, {Component} from 'react'; +import { f7 } from 'framework7-react'; +import { withTranslation } from 'react-i18next'; import AddSortAndFilter from '../../view/add/AddFilter'; @@ -7,6 +9,7 @@ class AddFilterController extends Component { super(props); this.onInsertFilter = this.onInsertFilter.bind(this); this.uncheckedFilter = this.uncheckedFilter.bind(this); + this.onInsertSort = this.onInsertSort.bind(this); const api = Common.EditorApi.get(); @@ -38,7 +41,37 @@ class AddFilterController extends Component { onInsertSort (type) { const api = Common.EditorApi.get(); - api.asc_sortColFilter(type == 'down' ? Asc.c_oAscSortOptions.Ascending : Asc.c_oAscSortOptions.Descending, '', undefined, undefined, true); + const { t } = this.props; + const _t = t('View.Add', {returnObjects: true}); + + let typeCheck = type == 'down' ? Asc.c_oAscSortOptions.Ascending : Asc.c_oAscSortOptions.Descending; + if( api.asc_sortCellsRangeExpand()) { + f7.dialog.create({ + title: _t.txtSorting, + text: _t.txtExpandSort, + buttons: [ + { + text: _t.txtExpand, + onClick: () => { + api.asc_sortColFilter(typeCheck, '', undefined, undefined, true); + f7.popup.close('.add-popup'); + } + }, + { + text: _t.txtSortSelected, + onClick: () => { + api.asc_sortColFilter(typeCheck, '', undefined, undefined); + f7.popup.close('.add-popup'); + } + }, + { + text: _t.textCancel + } + ], + cssClass: 'type-sort' + }).open(); + } else + api.asc_sortColFilter(typeCheck, '', undefined, undefined, api.asc_sortCellsRangeExpand() !== null); } onInsertFilter (checked) { @@ -64,4 +97,4 @@ class AddFilterController extends Component { } } -export default AddFilterController; \ No newline at end of file +export default withTranslation()(AddFilterController); \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/src/less/app.less b/apps/spreadsheeteditor/mobile/src/less/app.less index 5338e8a1f..281be641d 100644 --- a/apps/spreadsheeteditor/mobile/src/less/app.less +++ b/apps/spreadsheeteditor/mobile/src/less/app.less @@ -83,4 +83,16 @@ width: 25px; } } +} + +.type-sort{ + + .dialog-inner{ + text-align: center; + } + .dialog-buttons{ + height: 130px; + flex-direction: column; + justify-content: space-between; + } } \ No newline at end of file From a8579827e0582a4e53e5e9d43e3a3677bc060f68 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 20:03:50 +0300 Subject: [PATCH 176/376] File menu refactoring --- apps/documenteditor/main/app/view/FileMenu.js | 6 +++--- .../presentationeditor/main/app/view/FileMenu.js | 10 +++++++--- apps/spreadsheeteditor/main/app/view/FileMenu.js | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index ffdd1b0fa..20d5d6692 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -416,9 +416,9 @@ define([ _btn_rename = this.getButton('rename'), _btn_protect = this.getButton('protect'); - _btn_save[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_protect[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_rename[(disable || !this.mode.canRename || this.mode.isDesktopApp) ?'hide':'show'](); + _btn_save.setDisabled(disable || !this.mode.isEdit); + _btn_protect.setDisabled(disable || !this.mode.isEdit); + _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); }, isVisible: function () { diff --git a/apps/presentationeditor/main/app/view/FileMenu.js b/apps/presentationeditor/main/app/view/FileMenu.js index ba9e00248..8793e479e 100644 --- a/apps/presentationeditor/main/app/view/FileMenu.js +++ b/apps/presentationeditor/main/app/view/FileMenu.js @@ -140,6 +140,10 @@ define([ caption : this.btnRenameCaption, canFocused: false }); + if ( !!this.options.miRename ) { + this.miRename.setDisabled(this.options.miRename.isDisabled()); + delete this.options.miRename; + } this.miProtect = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-protect'), @@ -452,9 +456,9 @@ define([ _btn_rename = this.getButton('rename'), _btn_protect = this.getButton('protect'); - _btn_save[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_protect[(disable || !this.mode.isEdit)?'hide':'show'](); - _btn_rename[(disable || !this.mode.canRename || this.mode.isDesktopApp) ?'hide':'show'](); + _btn_save.setDisabled(disable || !this.mode.isEdit); + _btn_protect.setDisabled(disable || !this.mode.isEdit); + _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); }, btnSaveCaption : 'Save', diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index 4f41c7ba0..13c4699a1 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -127,6 +127,10 @@ define([ caption : this.btnRenameCaption, canFocused: false }); + if ( !!this.options.miRename ) { + this.miRename.setDisabled(this.options.miRename.isDisabled()); + delete this.options.miRename; + } this.miProtect = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-protect'), @@ -402,6 +406,8 @@ define([ if ( !this.rendered ) { if (type == 'save') { return this.options.miSave ? this.options.miSave : (this.options.miSave = new Common.UI.MenuItem({})); + } else if (type == 'rename') { + return this.options.miRename ? this.options.miRename : (this.options.miRename = new Common.UI.MenuItem({})); } else if (type == 'protect') { return this.options.miProtect ? this.options.miProtect : (this.options.miProtect = new Common.UI.MenuItem({})); @@ -410,6 +416,9 @@ define([ if (type == 'save') { return this.miSave; } else + if (type == 'rename') { + return this.miRename; + }else if (type == 'protect') { return this.miProtect; } @@ -423,6 +432,13 @@ define([ this.panels['opts'].disableEditing(disabled); this.miProtect.setDisabled(disabled); } + var _btn_save = this.getButton('save'), + _btn_rename = this.getButton('rename'), + _btn_protect = this.getButton('protect'); + + _btn_save.setDisabled(disable || !this.mode.isEdit); + _btn_protect.setDisabled(disable || !this.mode.isEdit); + _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); }, btnSaveCaption : 'Save', From 85271a0e0a17cc28304279f84badf7f62f6eb601 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 28 Jun 2021 20:12:31 +0300 Subject: [PATCH 177/376] [SSE] Refactoring disabled panels --- .../main/app/controller/CellEditor.js | 2 +- .../main/app/controller/LeftMenu.js | 20 +++++++++++++------ .../main/app/controller/Main.js | 17 ++++++++-------- .../main/app/controller/Viewport.js | 2 +- .../main/app/view/FileMenu.js | 11 +++++----- .../main/app/view/FileMenuPanels.js | 2 +- .../main/app/view/Statusbar.js | 2 +- 7 files changed, 32 insertions(+), 24 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/CellEditor.js b/apps/spreadsheeteditor/main/app/controller/CellEditor.js index 8a9beecf1..4806b55a3 100644 --- a/apps/spreadsheeteditor/main/app/controller/CellEditor.js +++ b/apps/spreadsheeteditor/main/app/controller/CellEditor.js @@ -323,7 +323,7 @@ define([ this.namedrange_locked = (state == Asc.c_oAscDefinedNameReason.LockDefNameManager); }, - disableEditing: function(disabled) { + SetDisabled: function(disabled) { this.editor.$btnfunc[!disabled?'removeClass':'addClass']('disabled'); this.editor.btnNamedRanges.setVisible(!disabled); }, diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index e60895ed3..2127bd08e 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -188,13 +188,21 @@ define([ return this; }, - disableEditing: function(disabled) { - this.leftMenu.btnComments.setDisabled(disabled); - this.leftMenu.btnChat.setDisabled(disabled); - this.leftMenu.btnPlugins.setDisabled(disabled); - this.leftMenu.btnSpellcheck.setDisabled(disabled); + SetDisabled: function(disable, disableFileMenu) { + this.mode.isEdit = !disable; + if (disable) this.leftMenu.close(); - this.leftMenu.getMenu('file').disableEditing(disabled); + /** coauthoring begin **/ + this.leftMenu.btnComments.setDisabled(disable); + var comments = this.getApplication().getController('Common.Controllers.Comments'); + if (comments) + comments.setPreviewMode(disable); + this.setPreviewMode(disable); + this.leftMenu.btnChat.setDisabled(disable); + /** coauthoring end **/ + this.leftMenu.btnPlugins.setDisabled(disable); + this.leftMenu.btnSpellcheck.setDisabled(disable); + if (disableFileMenu) this.leftMenu.getMenu('file').SetDisabled(disable); }, createDelayedElements: function() { diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 6ee4976a2..4d4fcb73c 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -1036,8 +1036,14 @@ define([ var app = this.getApplication(); if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { app.getController('RightMenu').getView('RightMenu').clearSelection(); - app.getController('Toolbar').DisableToolbar(disable); + app.getController('RightMenu').SetDisabled(disable, false); + app.getController('Toolbar').DisableToolbar(disable,disable); + app.getController('Statusbar').SetDisabled(disable); } + app.getController('LeftMenu').SetDisabled(disable, true); + app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + app.getController('Viewport').SetDisabled(disable); + app.getController('CellEditor').SetDisabled(disable); }, onOpenDocument: function(progress) { @@ -2439,16 +2445,11 @@ define([ disablefunc: function (disable) { me.disableEditing(disable); var app = me.getApplication(); - app.getController('Toolbar').DisableToolbar(disable,disable); - app.getController('RightMenu').SetDisabled(disable, true); - app.getController('Statusbar').SetDisabled(disable); - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); app.getController('DocumentHolder').SetDisabled(disable); var leftMenu = app.getController('LeftMenu'); + leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); leftMenu.setPreviewMode(disable); - leftMenu.disableEditing(disable); - app.getController('CellEditor').disableEditing(disable); - app.getController('Viewport').disableEditing(disable); + var comments = app.getController('Common.Controllers.Comments'); if (comments) comments.setPreviewMode(disable); }}); diff --git a/apps/spreadsheeteditor/main/app/controller/Viewport.js b/apps/spreadsheeteditor/main/app/controller/Viewport.js index a42d3771b..525c719ab 100644 --- a/apps/spreadsheeteditor/main/app/controller/Viewport.js +++ b/apps/spreadsheeteditor/main/app/controller/Viewport.js @@ -505,7 +505,7 @@ define([ } }, - disableEditing: function (disabled) { + SetDisabled: function (disabled) { this.viewmode = disabled; this.header.mnuitemHideHeadings.setDisabled(disabled); this.header.mnuitemHideGridlines.setDisabled(disabled); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index 13c4699a1..3b6256650 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -328,8 +328,7 @@ define([ } if ( this.mode.disableEditing != undefined ) { - this.panels['opts'].disableEditing(this.mode.disableEditing); - this.miProtect.setDisabled(this.mode.disableEditing); + this.panels['opts'].SetDisabled(this.mode.disableEditing); delete this.mode.disableEditing; } }, @@ -425,13 +424,13 @@ define([ } }, - disableEditing: function(disabled) { + SetDisabled: function(disable) { if ( !this.panels ) { - this.mode.disableEditing = disabled; + this.mode.disableEditing = disable; } else { - this.panels['opts'].disableEditing(disabled); - this.miProtect.setDisabled(disabled); + this.panels['opts'].SetDisabled(disable); } + var _btn_save = this.getButton('save'), _btn_rename = this.getButton('rename'), _btn_protect = this.getButton('protect'); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index b9bbfbf16..928b04cf3 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -261,7 +261,7 @@ define([ this.spellcheckSettings && this.spellcheckSettings.setApi(api); }, - disableEditing: function(disabled) { + SetDisabled: function(disabled) { if ( disabled ) { $(this.viewSettingsPicker.dataViewItems[1].el).hide(); $(this.viewSettingsPicker.dataViewItems[2].el).hide(); diff --git a/apps/spreadsheeteditor/main/app/view/Statusbar.js b/apps/spreadsheeteditor/main/app/view/Statusbar.js index 9801ab48f..038f60651 100644 --- a/apps/spreadsheeteditor/main/app/view/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/view/Statusbar.js @@ -478,7 +478,7 @@ define([ this.mode = _.extend({}, this.mode, mode); // this.$el.find('.el-edit')[mode.isEdit?'show':'hide'](); this.btnAddWorksheet.setVisible(this.mode.isEdit); - this.btnAddWorksheet.setDisabled(this.mode.isDisconnected); + this.btnAddWorksheet.setDisabled(this.mode.isDisconnected || this.api && (this.api.asc_isWorkbookLocked() || this.api.isCellEdited) || this.rangeSelectionMode!=Asc.c_oAscSelectionDialogType.None); this.updateTabbarBorders(); }, From 8e5979570ba158669c7d52e2a8fe62a6aea4cef1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 29 Jun 2021 16:27:44 +0300 Subject: [PATCH 178/376] [DE] Refactoring disable editing --- .../main/lib/controller/ReviewChanges.js | 54 +++++--- .../main/app/controller/FormsTab.js | 47 +++++-- .../main/app/controller/LeftMenu.js | 28 ++-- .../main/app/controller/Main.js | 130 +++++++++++++++--- apps/documenteditor/main/app/view/FileMenu.js | 8 +- .../main/app/view/MailMergeSettings.js | 41 ++++-- .../main/app/view/SignatureSettings.js | 47 +++++-- 7 files changed, 267 insertions(+), 88 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 28b169af6..4ebedb97a 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -728,25 +728,47 @@ define([ }, disableEditing: function(disable) { - var app = this.getApplication(); - app.getController('Toolbar').DisableToolbar(disable, false, true); - app.getController('DocumentHolder').getView().SetDisabled(disable); + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: false, + reviewMode: true, + fillFormwMode: false, + allowMerge: false, + allowSignature: false, + allowProtect: false, + rightMenu: {clear: true, disable: true}, + statusBar: true, + leftMenu: {disable: false, previewMode: true}, + fileMenu: {protect: true, save: false, rename: false}, + navigation: {disable: false, previewMode: true}, + comments: {disable: false, previewMode: true}, + chat: false, + review: false, + viewport: false, + documentHolder: true, + toolbar: true, + plugins: true + }); - if (this.appConfig.canReview) { - app.getController('RightMenu').getView('RightMenu').clearSelection(); - app.getController('RightMenu').SetDisabled(disable, false); - app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); - app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').disableControls(disable); - } - var comments = app.getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); + // var app = this.getApplication(); + // app.getController('Toolbar').DisableToolbar(disable, false, true); + // app.getController('DocumentHolder').getView().SetDisabled(disable); - var leftMenu = app.getController('LeftMenu'); - leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); - leftMenu.setPreviewMode(disable); + // if (this.appConfig.canReview) { + // app.getController('RightMenu').getView('RightMenu').clearSelection(); + // app.getController('RightMenu').SetDisabled(disable, false); + // app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); + // app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); + // app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').disableControls(disable); + // } + + // var comments = app.getController('Common.Controllers.Comments'); + // if (comments) + // comments.setPreviewMode(disable); + + // var leftMenu = app.getController('LeftMenu'); + // leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); + // leftMenu.setPreviewMode(disable); if (this.view) { this.view.$el.find('.no-group-mask.review').css('opacity', 1); diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index 43500dbdf..d38d7b09d 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -253,19 +253,40 @@ define([ if (this._state.DisabledEditing != disable) { this._state.DisabledEditing = disable; - var app = this.getApplication(); - var rightMenuController = app.getController('RightMenu'); - rightMenuController.getView('RightMenu').clearSelection(); - rightMenuController.SetDisabled(disable); - app.getController('Toolbar').DisableToolbar(disable, false, false, true); - app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - app.getController('DocumentHolder').getView().SetDisabled(disable); - app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); - app.getController('LeftMenu').setPreviewMode(disable); - var comments = app.getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: false, + reviewMode: false, + fillFormwMode: true, + allowMerge: false, + allowSignature: false, + allowProtect: false, + rightMenu: {clear: true, disable: true}, + statusBar: true, + leftMenu: {disable: false, previewMode: true}, + fileMenu: false, + navigation: {disable: false, previewMode: true}, + comments: {disable: false, previewMode: true}, + chat: false, + review: true, + viewport: false, + documentHolder: true, + toolbar: true, + plugins: false + }); + + // var app = this.getApplication(); + // var rightMenuController = app.getController('RightMenu'); + // rightMenuController.getView('RightMenu').clearSelection(); + // rightMenuController.SetDisabled(disable); + // app.getController('Toolbar').DisableToolbar(disable, false, false, true); + // app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); + // app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + // app.getController('DocumentHolder').getView().SetDisabled(disable); + // app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); + // app.getController('LeftMenu').setPreviewMode(disable); + // var comments = app.getController('Common.Controllers.Comments'); + // if (comments) + // comments.setPreviewMode(disable); if (this.view) this.view.$el.find('.no-group-mask.form-view').css('opacity', 1); } diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 9251da230..20085bd8e 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -666,21 +666,25 @@ define([ this.dlgSearch && this.dlgSearch.setMode(this.viewmode ? 'no-replace' : 'search'); }, - SetDisabled: function(disable, disableFileMenu) { - this.mode.isEdit = !disable; + SetDisabled: function(disable, options) { + // if (viewMode) this.mode.isEdit = !disable; if (disable) this.leftMenu.close(); - /** coauthoring begin **/ - this.leftMenu.btnComments.setDisabled(disable); - var comments = this.getApplication().getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); - this.setPreviewMode(disable); - this.leftMenu.btnChat.setDisabled(disable); - /** coauthoring end **/ + // var comments = this.getApplication().getController('Common.Controllers.Comments'); + // if (comments) + // comments.setPreviewMode(disable); + // this.setPreviewMode(disable); + + if (!options || options.comments && options.comments.disable) + this.leftMenu.btnComments.setDisabled(disable); + if (!options || options.chat) + this.leftMenu.btnChat.setDisabled(disable); + if (!options || options.navigation && options.navigation.disable) + this.leftMenu.btnNavigation.setDisabled(disable); + this.leftMenu.btnPlugins.setDisabled(disable); - this.leftMenu.btnNavigation.setDisabled(disable); - if (disableFileMenu) this.leftMenu.getMenu('file').SetDisabled(disable); + + // if (disableFileMenu) this.leftMenu.getMenu('file').SetDisabled(disable); }, /** coauthoring begin **/ diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 1a3e619b7..79ee3465a 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -213,6 +213,7 @@ define([ Common.NotificationCenter.on('download:advanced', _.bind(this.onAdvancedOptions, this)); Common.NotificationCenter.on('showmessage', _.bind(this.onExternalMessage, this)); Common.NotificationCenter.on('showerror', _.bind(this.onError, this)); + Common.NotificationCenter.on('editing:disable', _.bind(this.disableEditing2, this)); this.isShowOpenDialog = false; @@ -704,18 +705,107 @@ define([ return"#"+("000000"+color.toString(16)).substr(-6); }, - - disableEditing: function(disable) { + disableEditing: function(disable, temp) { var app = this.getApplication(); if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { - app.getController('RightMenu').getView('RightMenu').clearSelection(); - app.getController('RightMenu').SetDisabled(disable, false); - app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); + // app.getController('RightMenu').getView('RightMenu').clearSelection(); + // app.getController('RightMenu').SetDisabled(disable, false); + // app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); + } + // app.getController('LeftMenu').SetDisabled(disable, true, viewmode); + // app.getController('Toolbar').DisableToolbar(disable, disable); + // app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + // app.getController('Viewport').SetDisabled(disable); + // app.getController('DocumentHolder').getView().SetDisabled(disable); + + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: disable, + reviewMode: false, + fillFormwMode: false, + allowMerge: false, + allowSignature: false, + allowProtect: false, + rightMenu: {clear: true, disable: true}, + statusBar: true, + leftMenu: {disable: true, previewMode: true}, + fileMenu: {protect: true, save: true, rename: true}, + navigation: {disable: !temp, previewMode: true}, + comments: {disable: !temp, previewMode: true}, + chat: true, + review: true, + viewport: true, + documentHolder: true, + toolbar: true, + plugins: false + }); + + + // this.disableEditing2(disable, { + // viewMode: disable, + // reviewMode: false, + // fillFormwMode: false, + // allowMerge: false, + // allowSignature: false, + // allowProtect: false, + // rightMenu: {clear: true, disable: true}, + // statusBar: true, + // leftMenu: {disable: true, previewMode: true}, + // fileMenu: true, + // comments: {previewMode: true}, + // review: true, + // viewport: true, + // documentHolder: true, + // toolbar: true // check!!! + // }); + }, + + disableEditing2: function(disable, options) { + var app = this.getApplication(); + + if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { + if (options.rightMenu) { + options.rightMenu.clear && app.getController('RightMenu').getView('RightMenu').clearSelection(); + options.rightMenu.disable && app.getController('RightMenu').SetDisabled(disable, options.allowMerge, options.allowSignature); + } + if (options.statusBar) { + app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); + } + } + if (options.review) { + app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + } + if (options.viewport) { + app.getController('Viewport').SetDisabled(disable); + } + if (options.toolbar) { + app.getController('Toolbar').DisableToolbar(disable, options.viewMode, options.reviewMode, options.fillFormwMode); + } + if (options.documentHolder) { + app.getController('DocumentHolder').getView().SetDisabled(disable, options.allowProtect); + } + if (options.leftMenu) { + if (options.leftMenu.disable) { + app.getController('LeftMenu').SetDisabled(disable, options); + if (options.viewMode!==undefined) + this.appOptions.isEdit = !options.viewMode; + } + if (options.leftMenu.previewMode) + app.getController('LeftMenu').setPreviewMode(disable); + } + if (options.fileMenu) { + app.getController('LeftMenu').leftMenu.getMenu('file').SetDisabled(disable, options.fileMenu); + } + if (options.comments) { + var comments = this.getApplication().getController('Common.Controllers.Comments'); + if (comments && options.comments.previewMode) + comments.setPreviewMode(disable); + } + if (options.navigation && options.navigation.previewMode) { + app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); + } + if (options.plugins) { + app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').disableControls(disable); } - app.getController('LeftMenu').SetDisabled(disable, true); - app.getController('Toolbar').DisableToolbar(disable, disable); - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - app.getController('Viewport').SetDisabled(disable); }, onRequestClose: function() { @@ -2425,17 +2515,17 @@ define([ warningDocumentIsLocked: function() { var me = this; var _disable_ui = function (disable) { - me.disableEditing(disable); - var app = me.getApplication(); - app.getController('DocumentHolder').getView().SetDisabled(disable); - app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); - - var leftMenu = app.getController('LeftMenu'); - leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); - leftMenu.setPreviewMode(disable); - - var comments = app.getController('Common.Controllers.Comments'); - if (comments) comments.setPreviewMode(disable); + me.disableEditing(disable, true); + // var app = me.getApplication(); + // app.getController('DocumentHolder').getView().SetDisabled(disable); + // app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); + // + // var leftMenu = app.getController('LeftMenu'); + // leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); + // leftMenu.setPreviewMode(disable); + // + // var comments = app.getController('Common.Controllers.Comments'); + // if (comments) comments.setPreviewMode(disable); }; Common.Utils.warningDocumentIsLocked({disablefunc: _disable_ui}); diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index 20d5d6692..2865dcf64 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -411,14 +411,14 @@ define([ }); }, - SetDisabled: function(disable) { + SetDisabled: function(disable, options) { var _btn_save = this.getButton('save'), _btn_rename = this.getButton('rename'), _btn_protect = this.getButton('protect'); - _btn_save.setDisabled(disable || !this.mode.isEdit); - _btn_protect.setDisabled(disable || !this.mode.isEdit); - _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); + options && options.save && _btn_save.setDisabled(disable || !this.mode.isEdit); + options && options.protect && _btn_protect.setDisabled(disable || !this.mode.isEdit); + options && options.rename && _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); }, isVisible: function () { diff --git a/apps/documenteditor/main/app/view/MailMergeSettings.js b/apps/documenteditor/main/app/view/MailMergeSettings.js index 34ece804c..db738ae2e 100644 --- a/apps/documenteditor/main/app/view/MailMergeSettings.js +++ b/apps/documenteditor/main/app/view/MailMergeSettings.js @@ -799,18 +799,39 @@ define([ }, disableEditing: function(disable) { - DE.getController('Toolbar').DisableToolbar(disable, disable); - DE.getController('RightMenu').SetDisabled(disable, true); - DE.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - DE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - DE.getController('DocumentHolder').getView().SetDisabled(disable); - DE.getController('Navigation') && DE.getController('Navigation').SetDisabled(disable); + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: disable, + reviewMode: false, + fillFormwMode: false, + allowMerge: true, + allowSignature: false, + allowProtect: false, + rightMenu: {clear: false, disable: true}, + statusBar: true, + leftMenu: {disable: false, previewMode: true}, + fileMenu: false, + navigation: {disable: false, previewMode: true}, + comments: {disable: false, previewMode: true}, + chat: false, + review: true, + viewport: false, + documentHolder: true, + toolbar: true, + plugins: false + }); - var comments = DE.getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); + // DE.getController('Toolbar').DisableToolbar(disable, disable); + // DE.getController('RightMenu').SetDisabled(disable, true); + // DE.getController('Statusbar').getView('Statusbar').SetDisabled(disable); + // DE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + // DE.getController('DocumentHolder').getView().SetDisabled(disable); + // DE.getController('Navigation') && DE.getController('Navigation').SetDisabled(disable); - DE.getController('LeftMenu').setPreviewMode(disable); + // var comments = DE.getController('Common.Controllers.Comments'); + // if (comments) + // comments.setPreviewMode(disable); + + // DE.getController('LeftMenu').setPreviewMode(disable); this.lockControls(DE.enumLockMM.preview, disable, {array: [this.btnInsField, this.btnEditData]}); }, diff --git a/apps/documenteditor/main/app/view/SignatureSettings.js b/apps/documenteditor/main/app/view/SignatureSettings.js index 2d4d15d9a..3a2f202b9 100644 --- a/apps/documenteditor/main/app/view/SignatureSettings.js +++ b/apps/documenteditor/main/app/view/SignatureSettings.js @@ -393,22 +393,43 @@ define([ if (this._state.DisabledEditing != disable) { this._state.DisabledEditing = disable; - var rightMenuController = DE.getController('RightMenu'); - if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings') - rightMenuController.rightmenu.clearSelection(); - rightMenuController.SetDisabled(disable, false, true); - DE.getController('Toolbar').DisableToolbar(disable, disable); - DE.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - DE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - DE.getController('DocumentHolder').getView().SetDisabled(disable, true); - DE.getController('Navigation') && DE.getController('Navigation').SetDisabled(disable); + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: disable, + reviewMode: false, + fillFormwMode: false, + allowMerge: false, + allowSignature: true, + allowProtect: true, + rightMenu: {clear: disable && (DE.getController('RightMenu').rightmenu.GetActivePane() !== 'id-signature-settings'), disable: true}, + statusBar: true, + leftMenu: {disable: false, previewMode: true}, + fileMenu: false, + navigation: {disable: false, previewMode: true}, + comments: {disable: false, previewMode: true}, + chat: false, + review: true, + viewport: false, + documentHolder: true, + toolbar: true, + plugins: false + }); + + // var rightMenuController = DE.getController('RightMenu'); + // if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings') + // rightMenuController.rightmenu.clearSelection(); + // rightMenuController.SetDisabled(disable, false, true); + // DE.getController('Toolbar').DisableToolbar(disable, disable); + // DE.getController('Statusbar').getView('Statusbar').SetDisabled(disable); + // DE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + // DE.getController('DocumentHolder').getView().SetDisabled(disable, true); + // DE.getController('Navigation') && DE.getController('Navigation').SetDisabled(disable); // var leftMenu = DE.getController('LeftMenu').leftMenu; // leftMenu.btnComments.setDisabled(disable); - DE.getController('LeftMenu').setPreviewMode(disable); - var comments = DE.getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); + // DE.getController('LeftMenu').setPreviewMode(disable); + // var comments = DE.getController('Common.Controllers.Comments'); + // if (comments) + // comments.setPreviewMode(disable); } }, From 6f4de5a73f0533188dc8153007e4e86f3814037b Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 29 Jun 2021 17:26:04 +0300 Subject: [PATCH 179/376] [DE] Fix disable file menu --- apps/documenteditor/main/app/controller/LeftMenu.js | 2 +- apps/documenteditor/main/app/controller/Main.js | 7 +++---- apps/documenteditor/main/app/view/FileMenu.js | 5 +++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 20085bd8e..72ed69f31 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -667,7 +667,7 @@ define([ }, SetDisabled: function(disable, options) { - // if (viewMode) this.mode.isEdit = !disable; + this.mode.isEdit = !disable; if (disable) this.leftMenu.close(); // var comments = this.getApplication().getController('Common.Controllers.Comments'); diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 79ee3465a..5001551e7 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -784,16 +784,15 @@ define([ app.getController('DocumentHolder').getView().SetDisabled(disable, options.allowProtect); } if (options.leftMenu) { - if (options.leftMenu.disable) { + if (options.leftMenu.disable) app.getController('LeftMenu').SetDisabled(disable, options); - if (options.viewMode!==undefined) - this.appOptions.isEdit = !options.viewMode; - } if (options.leftMenu.previewMode) app.getController('LeftMenu').setPreviewMode(disable); } if (options.fileMenu) { app.getController('LeftMenu').leftMenu.getMenu('file').SetDisabled(disable, options.fileMenu); + if (options.leftMenu.disable) + app.getController('LeftMenu').leftMenu.getMenu('file').applyMode(); } if (options.comments) { var comments = this.getApplication().getController('Common.Controllers.Comments'); diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index 2865dcf64..f15cc6ff5 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -271,6 +271,8 @@ define([ }, applyMode: function() { + if (!this.rendered) return; + if (!this.panels) { this.panels = { 'opts' : (new DE.Views.FileMenuPanels.Settings({menu:this})).render(this.$el.find('#panel-settings')), @@ -363,8 +365,7 @@ define([ } if (!delay) { - if ( this.rendered ) - this.applyMode(); + this.applyMode(); } return this; }, From cf2ff32462c0e9a3f6b8abad99c68a0cf151e016 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Tue, 29 Jun 2021 18:38:04 +0300 Subject: [PATCH 180/376] Correct dialog window --- .../mobile/src/controller/add/AddFilter.jsx | 9 ++++++--- apps/spreadsheeteditor/mobile/src/less/app.less | 12 ------------ 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx b/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx index 917e46388..634b8d32d 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/add/AddFilter.jsx @@ -44,6 +44,9 @@ class AddFilterController extends Component { const { t } = this.props; const _t = t('View.Add', {returnObjects: true}); + f7.popup.close('.add-popup'); + f7.popover.close('#add-popover'); + let typeCheck = type == 'down' ? Asc.c_oAscSortOptions.Ascending : Asc.c_oAscSortOptions.Descending; if( api.asc_sortCellsRangeExpand()) { f7.dialog.create({ @@ -52,23 +55,23 @@ class AddFilterController extends Component { buttons: [ { text: _t.txtExpand, + bold: true, onClick: () => { api.asc_sortColFilter(typeCheck, '', undefined, undefined, true); - f7.popup.close('.add-popup'); } }, { text: _t.txtSortSelected, + bold: true, onClick: () => { api.asc_sortColFilter(typeCheck, '', undefined, undefined); - f7.popup.close('.add-popup'); } }, { text: _t.textCancel } ], - cssClass: 'type-sort' + verticalButtons: true, }).open(); } else api.asc_sortColFilter(typeCheck, '', undefined, undefined, api.asc_sortCellsRangeExpand() !== null); diff --git a/apps/spreadsheeteditor/mobile/src/less/app.less b/apps/spreadsheeteditor/mobile/src/less/app.less index 281be641d..a3bcb96d9 100644 --- a/apps/spreadsheeteditor/mobile/src/less/app.less +++ b/apps/spreadsheeteditor/mobile/src/less/app.less @@ -84,15 +84,3 @@ } } } - -.type-sort{ - - .dialog-inner{ - text-align: center; - } - .dialog-buttons{ - height: 130px; - flex-direction: column; - justify-content: space-between; - } -} \ No newline at end of file From 2887aa1b06e7147bf820b7ce92e2501e67fdae43 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Tue, 29 Jun 2021 22:03:37 +0300 Subject: [PATCH 181/376] [mobile] Fix bug 47933, fix context menu in comment mode --- .../mobile/src/controller/ContextMenu.jsx | 40 +++++++++++++++---- .../mobile/src/controller/ContextMenu.jsx | 15 ++++++- .../mobile/src/controller/ContextMenu.jsx | 22 ++++++---- 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx index 54d0b7c63..d53bec6bb 100644 --- a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx +++ b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx @@ -11,7 +11,9 @@ import EditorUIController from '../lib/patch'; @inject ( stores => ({ isEdit: stores.storeAppOptions.isEdit, + canComments: stores.storeAppOptions.canComments, canViewComments: stores.storeAppOptions.canViewComments, + canCoAuthoring: stores.storeAppOptions.canCoAuthoring, canReview: stores.storeAppOptions.canReview, users: stores.users, isDisconnected: stores.users.isDisconnected @@ -216,12 +218,35 @@ class ContextMenu extends ContextMenuController { } else { const { t } = this.props; const _t = t("ContextMenu", {returnObjects: true}); - const { canViewComments } = this.props; + const { canViewComments, canCoAuthoring, canComments } = this.props; const api = Common.EditorApi.get(); const stack = api.getSelectedElements(); const canCopy = api.can_CopyCut(); + let isText = false, + isObject = false, + isLink = false, + locked = false; + + stack.forEach(item => { + const objectType = item.get_ObjectType(), + objectValue = item.get_ObjectValue(); + if ( objectType == Asc.c_oAscTypeSelectElement.Header ) { + locked = objectValue.get_Locked(); + } else + if ( objectType == Asc.c_oAscTypeSelectElement.Paragraph ) { + locked = objectValue.get_Locked(); + isText = true; + } else + if ( objectType == Asc.c_oAscTypeSelectElement.Image || objectType == Asc.c_oAscTypeSelectElement.Table) { + locked = objectValue.get_Locked(); + isObject = true; + } else if ( objectType == Asc.c_oAscTypeSelectElement.Hyperlink ) { + isLink = true; + } + }); + let itemsIcon = [], itemsText = []; @@ -239,13 +264,12 @@ class ContextMenu extends ContextMenuController { }); } - let isLink = false; - stack.forEach(item => { - const objectType = item.get_ObjectType(); - if ( objectType === Asc.c_oAscTypeSelectElement.Hyperlink ) { - isLink = true; - } - }); + if (api.can_AddQuotedComment() !== false && canCoAuthoring && canComments && !locked && !(!isText && isObject)) { + itemsText.push({ + caption: _t.menuAddComment, + event: 'addcomment' + }); + } if ( isLink ) { itemsText.push({ diff --git a/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx b/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx index 99ed87b06..b24854c41 100644 --- a/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx +++ b/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx @@ -11,7 +11,9 @@ import EditorUIController from '../lib/patch'; @inject ( stores => ({ isEdit: stores.storeAppOptions.isEdit, + canComments: stores.storeAppOptions.canComments, canViewComments: stores.storeAppOptions.canViewComments, + canCoAuthoring: stores.storeAppOptions.canCoAuthoring, users: stores.users, isDisconnected: stores.users.isDisconnected })) @@ -198,7 +200,7 @@ class ContextMenu extends ContextMenuController { const { t } = this.props; const _t = t("ContextMenu", { returnObjects: true }); - const { canViewComments, isDisconnected } = this.props; + const { canViewComments, canCoAuthoring, canComments } = this.props; const api = Common.EditorApi.get(); const stack = api.getSelectedElements(); @@ -214,11 +216,13 @@ class ContextMenu extends ContextMenuController { isShape = false, isLink = false, isSlide = false, - isObject = false; + isObject, + locked = false; stack.forEach(item => { const objectType = item.get_ObjectType(), objectValue = item.get_ObjectValue(); + locked = typeof objectValue.get_Locked === 'function' ? objectValue.get_Locked() : false; if (objectType == Asc.c_oAscTypeSelectElement.Paragraph) { isText = true; @@ -252,6 +256,13 @@ class ContextMenu extends ContextMenuController { }); } + if (!isChart && api.can_AddQuotedComment() !== false && canCoAuthoring && canComments && !locked) { + itemsText.push({ + caption: _t.menuAddComment, + event: 'addcomment' + }); + } + if (isLink) { itemsText.push({ caption: _t.menuOpenLink, diff --git a/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx b/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx index 15462d90b..436ccdd7c 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx @@ -11,7 +11,9 @@ import EditorUIController from '../lib/patch'; @inject ( stores => ({ isEdit: stores.storeAppOptions.isEdit, + canComments: stores.storeAppOptions.canComments, canViewComments: stores.storeAppOptions.canViewComments, + canCoAuthoring: stores.storeAppOptions.canCoAuthoring, users: stores.users, isDisconnected: stores.users.isDisconnected, storeSheets: stores.sheets @@ -175,7 +177,7 @@ class ContextMenu extends ContextMenuController { if (isEdit && EditorUIController.ContextMenu) { return EditorUIController.ContextMenu.mapMenuItems(this); } else { - const {canViewComments } = this.props; + const {canViewComments, canCoAuthoring, canComments } = this.props; const api = Common.EditorApi.get(); const cellinfo = api.asc_getCellInfo(); @@ -199,12 +201,11 @@ class ContextMenu extends ContextMenuController { case Asc.c_oAscSelectionType.RangeShapeText: istextshapemenu = true; break; } - if (iscellmenu || istextchartmenu || istextshapemenu) { - itemsIcon.push({ - event: 'copy', - icon: 'icon-copy' - }); - } + itemsIcon.push({ + event: 'copy', + icon: 'icon-copy' + }); + if (iscellmenu && cellinfo.asc_getHyperlink()) { itemsText.push({ caption: _t.menuOpenLink, @@ -218,6 +219,13 @@ class ContextMenu extends ContextMenuController { }); } + if (iscellmenu && !api.isCellEdited && canCoAuthoring && canComments && !isComments) { + itemsText.push({ + caption: _t.menuAddComment, + event: 'addcomment' + }); + } + return itemsIcon.concat(itemsText); } } From 68fc002dc3ab97651411a2448dbae28ee71831eb Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 30 Jun 2021 00:31:55 +0300 Subject: [PATCH 182/376] Refactoring --- .../main/lib/controller/ReviewChanges.js | 23 +------ .../main/app/controller/FormsTab.js | 14 ----- .../main/app/controller/LeftMenu.js | 20 ++++--- .../main/app/controller/Main.js | 60 +++++-------------- apps/documenteditor/main/app/view/FileMenu.js | 22 ++++--- apps/documenteditor/main/app/view/LeftMenu.js | 2 +- .../main/app/view/MailMergeSettings.js | 13 ---- .../main/app/view/SignatureSettings.js | 17 ------ 8 files changed, 44 insertions(+), 127 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 4ebedb97a..9a1b9cc68 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -738,7 +738,7 @@ define([ rightMenu: {clear: true, disable: true}, statusBar: true, leftMenu: {disable: false, previewMode: true}, - fileMenu: {protect: true, save: false, rename: false}, + fileMenu: {protect: true}, navigation: {disable: false, previewMode: true}, comments: {disable: false, previewMode: true}, chat: false, @@ -749,27 +749,6 @@ define([ plugins: true }); - - // var app = this.getApplication(); - // app.getController('Toolbar').DisableToolbar(disable, false, true); - // app.getController('DocumentHolder').getView().SetDisabled(disable); - - // if (this.appConfig.canReview) { - // app.getController('RightMenu').getView('RightMenu').clearSelection(); - // app.getController('RightMenu').SetDisabled(disable, false); - // app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - // app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); - // app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').disableControls(disable); - // } - - // var comments = app.getController('Common.Controllers.Comments'); - // if (comments) - // comments.setPreviewMode(disable); - - // var leftMenu = app.getController('LeftMenu'); - // leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); - // leftMenu.setPreviewMode(disable); - if (this.view) { this.view.$el.find('.no-group-mask.review').css('opacity', 1); diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index d38d7b09d..3dfb8c9f8 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -273,20 +273,6 @@ define([ toolbar: true, plugins: false }); - - // var app = this.getApplication(); - // var rightMenuController = app.getController('RightMenu'); - // rightMenuController.getView('RightMenu').clearSelection(); - // rightMenuController.SetDisabled(disable); - // app.getController('Toolbar').DisableToolbar(disable, false, false, true); - // app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - // app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - // app.getController('DocumentHolder').getView().SetDisabled(disable); - // app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); - // app.getController('LeftMenu').setPreviewMode(disable); - // var comments = app.getController('Common.Controllers.Comments'); - // if (comments) - // comments.setPreviewMode(disable); if (this.view) this.view.$el.find('.no-group-mask.form-view').css('opacity', 1); } diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 72ed69f31..17a145b1a 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -667,13 +667,19 @@ define([ }, SetDisabled: function(disable, options) { - this.mode.isEdit = !disable; - if (disable) this.leftMenu.close(); + if (this.leftMenu._state.disabled !== disable) { + this.leftMenu._state.disabled = disable; + if (disable) { + this.previsEdit = this.mode.isEdit; + this.prevcanEdit = this.mode.canEdit; + this.mode.isEdit = this.mode.canEdit = !disable; + } else { + this.mode.isEdit = this.previsEdit; + this.mode.canEdit = this.prevcanEdit; + } + } - // var comments = this.getApplication().getController('Common.Controllers.Comments'); - // if (comments) - // comments.setPreviewMode(disable); - // this.setPreviewMode(disable); + if (disable) this.leftMenu.close(); if (!options || options.comments && options.comments.disable) this.leftMenu.btnComments.setDisabled(disable); @@ -683,8 +689,6 @@ define([ this.leftMenu.btnNavigation.setDisabled(disable); this.leftMenu.btnPlugins.setDisabled(disable); - - // if (disableFileMenu) this.leftMenu.getMenu('file').SetDisabled(disable); }, /** coauthoring begin **/ diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 5001551e7..e008f0e5e 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -213,8 +213,7 @@ define([ Common.NotificationCenter.on('download:advanced', _.bind(this.onAdvancedOptions, this)); Common.NotificationCenter.on('showmessage', _.bind(this.onExternalMessage, this)); Common.NotificationCenter.on('showerror', _.bind(this.onError, this)); - Common.NotificationCenter.on('editing:disable', _.bind(this.disableEditing2, this)); - + Common.NotificationCenter.on('editing:disable', _.bind(this.onEditingDisable, this)); this.isShowOpenDialog = false; @@ -707,17 +706,6 @@ define([ disableEditing: function(disable, temp) { var app = this.getApplication(); - if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { - // app.getController('RightMenu').getView('RightMenu').clearSelection(); - // app.getController('RightMenu').SetDisabled(disable, false); - // app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - } - // app.getController('LeftMenu').SetDisabled(disable, true, viewmode); - // app.getController('Toolbar').DisableToolbar(disable, disable); - // app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - // app.getController('Viewport').SetDisabled(disable); - // app.getController('DocumentHolder').getView().SetDisabled(disable); - Common.NotificationCenter.trigger('editing:disable', disable, { viewMode: disable, reviewMode: false, @@ -728,7 +716,7 @@ define([ rightMenu: {clear: true, disable: true}, statusBar: true, leftMenu: {disable: true, previewMode: true}, - fileMenu: {protect: true, save: true, rename: true}, + fileMenu: {protect: true, history: temp}, navigation: {disable: !temp, previewMode: true}, comments: {disable: !temp, previewMode: true}, chat: true, @@ -738,28 +726,9 @@ define([ toolbar: true, plugins: false }); - - - // this.disableEditing2(disable, { - // viewMode: disable, - // reviewMode: false, - // fillFormwMode: false, - // allowMerge: false, - // allowSignature: false, - // allowProtect: false, - // rightMenu: {clear: true, disable: true}, - // statusBar: true, - // leftMenu: {disable: true, previewMode: true}, - // fileMenu: true, - // comments: {previewMode: true}, - // review: true, - // viewport: true, - // documentHolder: true, - // toolbar: true // check!!! - // }); }, - disableEditing2: function(disable, options) { + onEditingDisable: function(disable, options) { var app = this.getApplication(); if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { @@ -934,6 +903,10 @@ define([ Common.Utils.InternalSettings.get("de-settings-livecomment") ? this.api.asc_showComments(Common.Utils.InternalSettings.get("de-settings-resolvedcomment")) : this.api.asc_hideComments(); } + if ( id == Asc.c_oAscAsyncAction['Disconnect']) { + this.disableEditing(false, true); + } + if ( type == Asc.c_oAscAsyncActionType.BlockInteraction && (!this.getApplication().getController('LeftMenu').dlgSearch || !this.getApplication().getController('LeftMenu').dlgSearch.isVisible()) && (!this.getApplication().getController('Toolbar').dlgSymbolTable || !this.getApplication().getController('Toolbar').dlgSymbolTable.isVisible()) && @@ -1034,6 +1007,12 @@ define([ title = this.loadingDocumentTitleText + ' '; text = this.loadingDocumentTextText; break; + + case Asc.c_oAscAsyncAction['Disconnect']: + text = this.textDisconnect; + this.disableEditing(true, true); + break; + default: if (typeof action.id == 'string'){ title = action.id; @@ -2515,16 +2494,6 @@ define([ var me = this; var _disable_ui = function (disable) { me.disableEditing(disable, true); - // var app = me.getApplication(); - // app.getController('DocumentHolder').getView().SetDisabled(disable); - // app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); - // - // var leftMenu = app.getController('LeftMenu'); - // leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); - // leftMenu.setPreviewMode(disable); - // - // var comments = app.getController('Common.Controllers.Comments'); - // if (comments) comments.setPreviewMode(disable); }; Common.Utils.warningDocumentIsLocked({disablefunc: _disable_ui}); @@ -3011,7 +2980,8 @@ define([ txtNoTableOfFigures: "No table of figures entries found.", txtTableOfFigures: 'Table of figures', txtStyle_endnote_text: 'Endnote Text', - txtTOCHeading: 'TOC Heading' + txtTOCHeading: 'TOC Heading', + textDisconnect: 'Connection is lost' } })(), DE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index f15cc6ff5..6d970f307 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -182,6 +182,10 @@ define([ caption : this.btnHistoryCaption, canFocused: false }); + if ( !!this.options.miHistory ) { + this.miHistory.setDisabled(this.options.miHistory.isDisabled()); + delete this.options.miHistory; + } this.miHelp = new Common.UI.MenuItem({ el : $markup.elementById('#fm-btn-help'), @@ -272,7 +276,7 @@ define([ applyMode: function() { if (!this.rendered) return; - + if (!this.panels) { this.panels = { 'opts' : (new DE.Views.FileMenuPanels.Settings({menu:this})).render(this.$el.find('#panel-settings')), @@ -413,13 +417,11 @@ define([ }, SetDisabled: function(disable, options) { - var _btn_save = this.getButton('save'), - _btn_rename = this.getButton('rename'), - _btn_protect = this.getButton('protect'); + var _btn_protect = this.getButton('protect'), + _btn_history = this.getButton('history'); - options && options.save && _btn_save.setDisabled(disable || !this.mode.isEdit); - options && options.protect && _btn_protect.setDisabled(disable || !this.mode.isEdit); - options && options.rename && _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); + options && options.protect && _btn_protect.setDisabled(disable); + options && options.history && _btn_history.setDisabled(disable); }, isVisible: function () { @@ -436,6 +438,9 @@ define([ } else if (type == 'protect') { return this.options.miProtect ? this.options.miProtect : (this.options.miProtect = new Common.UI.MenuItem({})); + } else + if (type == 'history') { + return this.options.miHistory ? this.options.miHistory : (this.options.miHistory = new Common.UI.MenuItem({})); } } else { if (type == 'save') { @@ -446,6 +451,9 @@ define([ }else if (type == 'protect') { return this.miProtect; + }else + if (type == 'history') { + return this.miHistory; } } }, diff --git a/apps/documenteditor/main/app/view/LeftMenu.js b/apps/documenteditor/main/app/view/LeftMenu.js index 5fa9eb4dc..a98cb6ba1 100644 --- a/apps/documenteditor/main/app/view/LeftMenu.js +++ b/apps/documenteditor/main/app/view/LeftMenu.js @@ -86,7 +86,7 @@ define([ initialize: function () { this.minimizedMode = true; - this._state = {}; + this._state = {disabled: false}; }, render: function () { diff --git a/apps/documenteditor/main/app/view/MailMergeSettings.js b/apps/documenteditor/main/app/view/MailMergeSettings.js index db738ae2e..f3f194786 100644 --- a/apps/documenteditor/main/app/view/MailMergeSettings.js +++ b/apps/documenteditor/main/app/view/MailMergeSettings.js @@ -820,19 +820,6 @@ define([ plugins: false }); - // DE.getController('Toolbar').DisableToolbar(disable, disable); - // DE.getController('RightMenu').SetDisabled(disable, true); - // DE.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - // DE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - // DE.getController('DocumentHolder').getView().SetDisabled(disable); - // DE.getController('Navigation') && DE.getController('Navigation').SetDisabled(disable); - - // var comments = DE.getController('Common.Controllers.Comments'); - // if (comments) - // comments.setPreviewMode(disable); - - // DE.getController('LeftMenu').setPreviewMode(disable); - this.lockControls(DE.enumLockMM.preview, disable, {array: [this.btnInsField, this.btnEditData]}); }, diff --git a/apps/documenteditor/main/app/view/SignatureSettings.js b/apps/documenteditor/main/app/view/SignatureSettings.js index 3a2f202b9..2ef9ec848 100644 --- a/apps/documenteditor/main/app/view/SignatureSettings.js +++ b/apps/documenteditor/main/app/view/SignatureSettings.js @@ -413,23 +413,6 @@ define([ toolbar: true, plugins: false }); - - // var rightMenuController = DE.getController('RightMenu'); - // if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings') - // rightMenuController.rightmenu.clearSelection(); - // rightMenuController.SetDisabled(disable, false, true); - // DE.getController('Toolbar').DisableToolbar(disable, disable); - // DE.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - // DE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - // DE.getController('DocumentHolder').getView().SetDisabled(disable, true); - // DE.getController('Navigation') && DE.getController('Navigation').SetDisabled(disable); - - // var leftMenu = DE.getController('LeftMenu').leftMenu; - // leftMenu.btnComments.setDisabled(disable); - // DE.getController('LeftMenu').setPreviewMode(disable); - // var comments = DE.getController('Common.Controllers.Comments'); - // if (comments) - // comments.setPreviewMode(disable); } }, From 6506146eab6bbad580f8c5ebb294750e03baed48 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 30 Jun 2021 15:19:45 +0300 Subject: [PATCH 183/376] [DE] Fix disable for several actions --- apps/common/IrregularStack.js | 9 +++-- .../main/lib/controller/ReviewChanges.js | 2 +- .../main/app/controller/FormsTab.js | 2 +- .../main/app/controller/Main.js | 33 +++++++++++++------ .../main/app/view/MailMergeSettings.js | 2 +- .../main/app/view/SignatureSettings.js | 2 +- 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/apps/common/IrregularStack.js b/apps/common/IrregularStack.js index 4092f0358..4f5f2ee2d 100644 --- a/apps/common/IrregularStack.js +++ b/apps/common/IrregularStack.js @@ -69,7 +69,7 @@ Common.IrregularStack = function(config) { } var _get = function(obj) { - var index = _indexOf(obj, _weakCompare); + var index = (typeof obj === 'object')? _indexOf(obj, _weakCompare) : obj; if (index != -1) return _stack[index]; return undefined; @@ -79,10 +79,15 @@ Common.IrregularStack = function(config) { return !(_indexOf(obj, _strongCompare) < 0); } + var _length = function() { + return _stack.length; + } + return { push: _push, pop: _pop, get: _get, - exist: _exist + exist: _exist, + length: _length } }; \ No newline at end of file diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 9a1b9cc68..6b6312256 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -747,7 +747,7 @@ define([ documentHolder: true, toolbar: true, plugins: true - }); + }, 'review'); if (this.view) { this.view.$el.find('.no-group-mask.review').css('opacity', 1); diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index 3dfb8c9f8..da26708e6 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -272,7 +272,7 @@ define([ documentHolder: true, toolbar: true, plugins: false - }); + }, 'forms'); if (this.view) this.view.$el.find('.no-group-mask.form-view').css('opacity', 1); } diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index e008f0e5e..e9e8e4a79 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -161,6 +161,11 @@ define([ weakCompare : function(obj1, obj2){return obj1.type === obj2.type;} }); + this.stackDisableActions = new Common.IrregularStack({ + strongCompare : function(obj1, obj2){return obj1.type === obj2.type;}, + weakCompare : function(obj1, obj2){return obj1.type === obj2.type;} + }); + this._state = {isDisconnected: false, usersCount: 1, fastCoauth: true, lostEditingRights: false, licenseType: false, isDocModified: false}; this.languages = null; @@ -725,20 +730,24 @@ define([ documentHolder: true, toolbar: true, plugins: false - }); + }, temp ? 'reconnect' : 'disconnect'); }, - onEditingDisable: function(disable, options) { + onEditingDisable: function(disable, options, type) { var app = this.getApplication(); - if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { - if (options.rightMenu) { - options.rightMenu.clear && app.getController('RightMenu').getView('RightMenu').clearSelection(); - options.rightMenu.disable && app.getController('RightMenu').SetDisabled(disable, options.allowMerge, options.allowSignature); - } - if (options.statusBar) { - app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - } + var action = {type: type, disable: disable, options: options}; + if (disable && !this.stackDisableActions.get({type: type})) + this.stackDisableActions.push(action); + !disable && this.stackDisableActions.pop({type: type}); + var prev_options = !disable && (this.stackDisableActions.length()>0) ? this.stackDisableActions.get(this.stackDisableActions.length()-1) : null; + + if (options.rightMenu && app.getController('RightMenu')) { + options.rightMenu.clear && app.getController('RightMenu').getView('RightMenu').clearSelection(); + options.rightMenu.disable && app.getController('RightMenu').SetDisabled(disable, options.allowMerge, options.allowSignature); + } + if (options.statusBar) { + app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); } if (options.review) { app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); @@ -774,6 +783,10 @@ define([ if (options.plugins) { app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').disableControls(disable); } + + if (prev_options) { + this.onEditingDisable(prev_options.disable, prev_options.options, prev_options.type); + } }, onRequestClose: function() { diff --git a/apps/documenteditor/main/app/view/MailMergeSettings.js b/apps/documenteditor/main/app/view/MailMergeSettings.js index f3f194786..7ccc75536 100644 --- a/apps/documenteditor/main/app/view/MailMergeSettings.js +++ b/apps/documenteditor/main/app/view/MailMergeSettings.js @@ -818,7 +818,7 @@ define([ documentHolder: true, toolbar: true, plugins: false - }); + }, 'mailmerge'); this.lockControls(DE.enumLockMM.preview, disable, {array: [this.btnInsField, this.btnEditData]}); }, diff --git a/apps/documenteditor/main/app/view/SignatureSettings.js b/apps/documenteditor/main/app/view/SignatureSettings.js index 2ef9ec848..c489c8e13 100644 --- a/apps/documenteditor/main/app/view/SignatureSettings.js +++ b/apps/documenteditor/main/app/view/SignatureSettings.js @@ -412,7 +412,7 @@ define([ documentHolder: true, toolbar: true, plugins: false - }); + }, 'signature'); } }, From dc5268069e6d1a1f276614a130b5aa27b6831f2c Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Wed, 30 Jun 2021 15:36:53 +0300 Subject: [PATCH 184/376] [SSE] Bug 46767 (fix locked, fix close after click on item) --- .../spreadsheeteditor/main/app/controller/Statusbar.js | 9 +++++++++ .../main/app/template/StatusBar.template | 4 +--- apps/spreadsheeteditor/main/app/view/Statusbar.js | 10 +++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Statusbar.js b/apps/spreadsheeteditor/main/app/controller/Statusbar.js index deb1b0622..88b03d382 100644 --- a/apps/spreadsheeteditor/main/app/controller/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Statusbar.js @@ -180,6 +180,10 @@ define([ break; } } + var listItem =this.statusbar.sheetListMenu.items[index]; + if (listItem.$el.children().first().data('hidden')) { + listItem.setDisabled(locked); + } }, /** coauthoring end **/ @@ -246,6 +250,7 @@ define([ var islocked = this.statusbar.tabbar.hasClass('coauth-locked'), currentIdx = this.api.asc_getActiveWorksheetIndex(); this.statusbar.btnAddWorksheet.setDisabled(islocked || this.api.isCellEdited || mode!=Asc.c_oAscSelectionDialogType.None); + this.statusbar.btnSheetList[mode != Asc.c_oAscSelectionDialogType.None ? 'addClass' : 'removeClass']('disabled'); var item, i = this.statusbar.tabbar.getCount(); while (i-- > 0) { @@ -502,6 +507,10 @@ define([ this.api.asc_showWorksheet(sheetIndex); this.loadTabColor(sheetIndex); } + var me = this; + setTimeout(function(){ + me.statusbar.sheetListMenu.hide(); + }, 1); }, selectTab: function (sheetindex) { diff --git a/apps/spreadsheeteditor/main/app/template/StatusBar.template b/apps/spreadsheeteditor/main/app/template/StatusBar.template index f83c71d4c..308527ffd 100644 --- a/apps/spreadsheeteditor/main/app/template/StatusBar.template +++ b/apps/spreadsheeteditor/main/app/template/StatusBar.template @@ -9,9 +9,7 @@
    - +
    diff --git a/apps/spreadsheeteditor/main/app/view/Statusbar.js b/apps/spreadsheeteditor/main/app/view/Statusbar.js index f36e91995..3f5edce6f 100644 --- a/apps/spreadsheeteditor/main/app/view/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/view/Statusbar.js @@ -129,11 +129,12 @@ define([ hintAnchor: 'top' }); - this.btnSheetList = new Common.UI.Button({ + this.cntSheetList = new Common.UI.Button({ el: $('.cnt-tabslist', this.el), hint: this.tipListOfSheets, hintAnchor: 'top' }); + this.btnSheetList = $('#status-btn-tabslist',this.$el); this.sheetListMenu = new Common.UI.Menu({ style: 'margin-top:-3px;', menuAlign: 'bl-tl', @@ -141,12 +142,11 @@ define([ }); this.sheetListMenu.on('item:click', function(obj,item) { me.fireEvent('show:tab', [item.value]); - me.sheetListMenu.items[item.value].setChecked(true); }); - this.btnSheetList.cmpEl.on({ + this.cntSheetList.cmpEl.on({ 'show.bs.dropdown': function () { _.defer(function(){ - me.btnSheetList.cmpEl.find('ul').focus(); + me.cntSheetList.cmpEl.find('ul').focus(); }, 100); }, 'hide.bs.dropdown': function () { @@ -573,7 +573,7 @@ define([ hidden: me.api.asc_isWorksheetHidden(item.sheetindex), textHidden: me.itemHidden, template: _.template([ - '', + ' data-hidden="true" <% } %>>', '
    ', '<%= caption %>', '<% if (options.hidden) { %>', From 52d179153b6726b0148bedfc6b4a7c102ba5731c Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 30 Jun 2021 21:04:25 +0300 Subject: [PATCH 185/376] Always use user info parser --- apps/documenteditor/main/app/controller/Main.js | 2 +- apps/presentationeditor/main/app/controller/Main.js | 2 +- apps/spreadsheeteditor/main/app/controller/Main.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 1a3e619b7..307d0a51f 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -1349,7 +1349,7 @@ define([ this.appOptions.canUseReviewPermissions = this.appOptions.canLicense && (!!this.permissions.reviewGroups || this.editorConfig.customization && this.editorConfig.customization.reviewPermissions && (typeof (this.editorConfig.customization.reviewPermissions) == 'object')); this.appOptions.canUseCommentPermissions = this.appOptions.canLicense && !!this.permissions.commentGroups; - AscCommon.UserInfoParser.setParser(this.appOptions.canUseReviewPermissions || this.appOptions.canUseCommentPermissions); + AscCommon.UserInfoParser.setParser(true); AscCommon.UserInfoParser.setCurrentName(this.appOptions.user.fullname); this.appOptions.canUseReviewPermissions && AscCommon.UserInfoParser.setReviewPermissions(this.permissions.reviewGroups, this.editorConfig.customization.reviewPermissions); this.appOptions.canUseCommentPermissions && AscCommon.UserInfoParser.setCommentPermissions(this.permissions.commentGroups); diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index 2cbff6ff1..8b1de3e59 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -1060,7 +1060,7 @@ define([ this.appOptions.canUseReviewPermissions = this.appOptions.canLicense && (!!this.permissions.reviewGroups || this.appOptions.canLicense && this.editorConfig.customization && this.editorConfig.customization.reviewPermissions && (typeof (this.editorConfig.customization.reviewPermissions) == 'object')); this.appOptions.canUseCommentPermissions = this.appOptions.canLicense && !!this.permissions.commentGroups; - AscCommon.UserInfoParser.setParser(this.appOptions.canUseReviewPermissions || this.appOptions.canUseCommentPermissions); + AscCommon.UserInfoParser.setParser(true); AscCommon.UserInfoParser.setCurrentName(this.appOptions.user.fullname); this.appOptions.canUseReviewPermissions && AscCommon.UserInfoParser.setReviewPermissions(this.permissions.reviewGroups, this.editorConfig.customization.reviewPermissions); this.appOptions.canUseCommentPermissions && AscCommon.UserInfoParser.setCommentPermissions(this.permissions.commentGroups); diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 6ee4976a2..d6cea0b00 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -1098,7 +1098,7 @@ define([ this.appOptions.canUseReviewPermissions = this.appOptions.canLicense && (!!this.permissions.reviewGroups || this.appOptions.canLicense && this.editorConfig.customization && this.editorConfig.customization.reviewPermissions && (typeof (this.editorConfig.customization.reviewPermissions) == 'object')); this.appOptions.canUseCommentPermissions = this.appOptions.canLicense && !!this.permissions.commentGroups; - AscCommon.UserInfoParser.setParser(this.appOptions.canUseReviewPermissions || this.appOptions.canUseCommentPermissions); + AscCommon.UserInfoParser.setParser(true); AscCommon.UserInfoParser.setCurrentName(this.appOptions.user.fullname); this.appOptions.canUseReviewPermissions && AscCommon.UserInfoParser.setReviewPermissions(this.permissions.reviewGroups, this.editorConfig.customization.reviewPermissions); this.appOptions.canUseCommentPermissions && AscCommon.UserInfoParser.setCommentPermissions(this.permissions.commentGroups); From c55886f6e3f98f8f4913c625a1f305be4e2e45be Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 1 Jul 2021 01:10:14 +0300 Subject: [PATCH 186/376] [PE] Refactoring disable editing --- .../main/app/controller/LeftMenu.js | 29 +++-- .../main/app/controller/Main.js | 102 ++++++++++++++---- .../main/app/view/FileMenu.js | 27 +++-- .../main/app/view/LeftMenu.js | 2 +- .../main/app/view/SignatureSettings.js | 29 +++-- .../main/app/view/Statusbar.js | 1 - 6 files changed, 132 insertions(+), 58 deletions(-) diff --git a/apps/presentationeditor/main/app/controller/LeftMenu.js b/apps/presentationeditor/main/app/controller/LeftMenu.js index 26565ba84..7c26f8888 100644 --- a/apps/presentationeditor/main/app/controller/LeftMenu.js +++ b/apps/presentationeditor/main/app/controller/LeftMenu.js @@ -768,21 +768,28 @@ define([ Common.Gateway.requestHistory(); }, - SetDisabled: function(disable, disableFileMenu) { - this.mode.isEdit = !disable; + SetDisabled: function(disable, options) { + if (this.leftMenu._state.disabled !== disable) { + this.leftMenu._state.disabled = disable; + if (disable) { + this.previsEdit = this.mode.isEdit; + this.prevcanEdit = this.mode.canEdit; + this.mode.isEdit = this.mode.canEdit = !disable; + } else { + this.mode.isEdit = this.previsEdit; + this.mode.canEdit = this.prevcanEdit; + } + } + if (disable) this.leftMenu.close(); - /** coauthoring begin **/ - this.leftMenu.btnComments.setDisabled(disable); - var comments = this.getApplication().getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); - this.setPreviewMode(disable); - this.leftMenu.btnChat.setDisabled(disable); - /** coauthoring end **/ + if (!options || options.comments && options.comments.disable) + this.leftMenu.btnComments.setDisabled(disable); + if (!options || options.chat) + this.leftMenu.btnChat.setDisabled(disable); + this.leftMenu.btnPlugins.setDisabled(disable); this.leftMenu.btnThumbs.setDisabled(disable); - if (disableFileMenu) this.leftMenu.getMenu('file').SetDisabled(disable); }, textNoTextFound : 'Text not found', diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index 2cbff6ff1..5b6918ad0 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -145,7 +145,10 @@ define([ strongCompare : function(obj1, obj2){return obj1.id === obj2.id && obj1.type === obj2.type;}, weakCompare : function(obj1, obj2){return obj1.type === obj2.type;} }); - + this.stackDisableActions = new Common.IrregularStack({ + strongCompare : function(obj1, obj2){return obj1.type === obj2.type;}, + weakCompare : function(obj1, obj2){return obj1.type === obj2.type;} + }); // Initialize viewport if (!Common.Utils.isBrowserSupported()){ @@ -190,6 +193,7 @@ define([ Common.NotificationCenter.on('showmessage', _.bind(this.onExternalMessage, this)); Common.NotificationCenter.on('showerror', _.bind(this.onError, this)); Common.NotificationCenter.on('markfavorite', _.bind(this.markFavorite, this)); + Common.NotificationCenter.on('editing:disable', _.bind(this.onEditingDisable, this)); this.isShowOpenDialog = false; @@ -604,7 +608,11 @@ define([ if (this.appOptions.isEdit && (id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton']) && (!this._state.fastCoauth || this._state.usersCount<2)) this.synchronizeChanges(); - if (type == Asc.c_oAscAsyncActionType.BlockInteraction && !((id == Asc.c_oAscAsyncAction['LoadDocumentFonts'] || id == Asc.c_oAscAsyncAction['ApplyChanges']) && (this.dontCloseDummyComment || this.inTextareaControl || Common.Utils.ModalWindow.isVisible() || this.inFormControl))) { + if ( id == Asc.c_oAscAsyncAction['Disconnect']) { + this.disableEditing(false, true); + } + + if (type == Asc.c_oAscAsyncActionType.BlockInteraction && !((id == Asc.c_oAscAsyncAction['LoadDocumentFonts'] || id == Asc.c_oAscAsyncAction['ApplyChanges']) && (this.dontCloseDummyComment || this.inTextareaControl || Common.Utils.ModalWindow.isVisible() || this.inFormControl))) { this.onEditComplete(this.loadMask); this.api.asc_enableKeyEvents(true); } @@ -694,6 +702,12 @@ define([ title = this.loadingDocumentTitleText + ' '; text = this.loadingDocumentTextText; break; + + case Asc.c_oAscAsyncAction['Disconnect']: + text = this.textDisconnect; + this.disableEditing(true, true); + break; + default: if (typeof action.id == 'string'){ title = action.id; @@ -965,17 +979,71 @@ define([ } }, - disableEditing: function(disable) { + disableEditing: function(disable, temp) { + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: disable, + allowSignature: false, + rightMenu: {clear: true, disable: true}, + statusBar: true, + leftMenu: {disable: true, previewMode: true}, + fileMenu: {protect: true, history: temp}, + comments: {disable: !temp, previewMode: true}, + chat: true, + review: true, + viewport: true, + documentHolder: true, + toolbar: true + }, temp ? 'reconnect' : 'disconnect'); + }, + + onEditingDisable: function(disable, options, type) { var app = this.getApplication(); - if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { - app.getController('RightMenu').getView('RightMenu').clearSelection(); - app.getController('RightMenu').SetDisabled(disable, false); + + var action = {type: type, disable: disable, options: options}; + if (disable && !this.stackDisableActions.get({type: type})) + this.stackDisableActions.push(action); + !disable && this.stackDisableActions.pop({type: type}); + var prev_options = !disable && (this.stackDisableActions.length()>0) ? this.stackDisableActions.get(this.stackDisableActions.length()-1) : null; + + if (options.rightMenu && app.getController('RightMenu')) { + options.rightMenu.clear && app.getController('RightMenu').getView('RightMenu').clearSelection(); + options.rightMenu.disable && app.getController('RightMenu').SetDisabled(disable, options.allowSignature); + } + if (options.statusBar) { app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); } - app.getController('LeftMenu').SetDisabled(disable, true); - app.getController('Toolbar').DisableToolbar(disable); - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - app.getController('Viewport').SetDisabled(disable); + if (options.review) { + app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + } + if (options.viewport) { + app.getController('Viewport').SetDisabled(disable); + } + if (options.toolbar) { + app.getController('Toolbar').DisableToolbar(disable, options.viewMode); + } + if (options.documentHolder) { + app.getController('DocumentHolder').getView('DocumentHolder').SetDisabled(disable); + } + if (options.leftMenu) { + if (options.leftMenu.disable) + app.getController('LeftMenu').SetDisabled(disable, options); + if (options.leftMenu.previewMode) + app.getController('LeftMenu').setPreviewMode(disable); + } + if (options.fileMenu) { + app.getController('LeftMenu').leftMenu.getMenu('file').SetDisabled(disable, options.fileMenu); + if (options.leftMenu.disable) + app.getController('LeftMenu').leftMenu.getMenu('file').applyMode(); + } + if (options.comments) { + var comments = this.getApplication().getController('Common.Controllers.Comments'); + if (comments && options.comments.previewMode) + comments.setPreviewMode(disable); + } + + if (prev_options) { + this.onEditingDisable(prev_options.disable, prev_options.options, prev_options.type); + } }, onOpenDocument: function(progress) { @@ -2072,16 +2140,7 @@ define([ var me = this; Common.Utils.warningDocumentIsLocked({ disablefunc: function (disable) { - var app = me.getApplication(); - me.disableEditing(disable); - app.getController('RightMenu').SetDisabled(disable, true); - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - app.getController('DocumentHolder').getView('DocumentHolder').SetDisabled(disable); - var leftMenu = app.getController('LeftMenu'); - leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); - leftMenu.setPreviewMode(disable); - var comments = app.getController('Common.Controllers.Comments'); - if (comments) comments.setPreviewMode(disable); + me.disableEditing(disable, true); }}); }, @@ -2712,7 +2771,8 @@ define([ txtErrorLoadHistory: 'Loading history failed', leavePageTextOnClose: 'All unsaved changes in this document will be lost.
    Click \'Cancel\' then \'Save\' to save them. Click \'OK\' to discard all the unsaved changes.', textTryUndoRedoWarn: 'The Undo/Redo functions are disabled for the Fast co-editing mode.', - txtNone: 'None' + txtNone: 'None', + textDisconnect: 'Connection is lost' } })(), PE.Controllers.Main || {})) }); diff --git a/apps/presentationeditor/main/app/view/FileMenu.js b/apps/presentationeditor/main/app/view/FileMenu.js index 8793e479e..58bfee2f0 100644 --- a/apps/presentationeditor/main/app/view/FileMenu.js +++ b/apps/presentationeditor/main/app/view/FileMenu.js @@ -190,6 +190,10 @@ define([ caption : this.btnHistoryCaption, canFocused: false }); + if ( !!this.options.miHistory ) { + this.miHistory.setDisabled(this.options.miHistory.isDisabled()); + delete this.options.miHistory; + } this.items = []; this.items.push( @@ -271,6 +275,8 @@ define([ }, applyMode: function() { + if (!this.rendered) return; + if (!this.panels) { this.panels = { 'opts' : (new PE.Views.FileMenuPanels.Settings({menu:this})).render(this.$el.find('#panel-settings')), @@ -361,8 +367,7 @@ define([ } if (!delay) { - if ( this.rendered ) - this.applyMode(); + this.applyMode(); } }, @@ -437,6 +442,9 @@ define([ } else if (type == 'protect') { return this.options.miProtect ? this.options.miProtect : (this.options.miProtect = new Common.UI.MenuItem({})); + } else + if (type == 'history') { + return this.options.miHistory ? this.options.miHistory : (this.options.miHistory = new Common.UI.MenuItem({})); } } else { if (type == 'save') { @@ -447,18 +455,19 @@ define([ } else if (type == 'protect') { return this.miProtect; + }else + if (type == 'history') { + return this.miHistory; } } }, - SetDisabled: function(disable) { - var _btn_save = this.getButton('save'), - _btn_rename = this.getButton('rename'), - _btn_protect = this.getButton('protect'); + SetDisabled: function(disable, options) { + var _btn_protect = this.getButton('protect'), + _btn_history = this.getButton('history'); - _btn_save.setDisabled(disable || !this.mode.isEdit); - _btn_protect.setDisabled(disable || !this.mode.isEdit); - _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); + options && options.protect && _btn_protect.setDisabled(disable); + options && options.history && _btn_history.setDisabled(disable); }, btnSaveCaption : 'Save', diff --git a/apps/presentationeditor/main/app/view/LeftMenu.js b/apps/presentationeditor/main/app/view/LeftMenu.js index 644161978..c39fa0106 100644 --- a/apps/presentationeditor/main/app/view/LeftMenu.js +++ b/apps/presentationeditor/main/app/view/LeftMenu.js @@ -83,7 +83,7 @@ define([ initialize: function () { this.minimizedMode = true; - this._state = {}; + this._state = {disabled: false}; }, render: function () { diff --git a/apps/presentationeditor/main/app/view/SignatureSettings.js b/apps/presentationeditor/main/app/view/SignatureSettings.js index c9cf04be8..c92af3468 100644 --- a/apps/presentationeditor/main/app/view/SignatureSettings.js +++ b/apps/presentationeditor/main/app/view/SignatureSettings.js @@ -347,21 +347,20 @@ define([ if (this._state.DisabledEditing != disable) { this._state.DisabledEditing = disable; - var rightMenuController = PE.getController('RightMenu'); - if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings') - rightMenuController.rightmenu.clearSelection(); - rightMenuController.SetDisabled(disable, true); - PE.getController('Toolbar').DisableToolbar(disable, disable); - PE.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - PE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - PE.getController('DocumentHolder').getView('DocumentHolder').SetDisabled(disable); - - // var leftMenu = PE.getController('LeftMenu').leftMenu; - // leftMenu.btnComments.setDisabled(disable); - PE.getController('LeftMenu').setPreviewMode(disable); - var comments = PE.getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: disable, + allowSignature: true, + rightMenu: {clear: disable && (PE.getController('RightMenu').rightmenu.GetActivePane() !== 'id-signature-settings'), disable: true}, + statusBar: true, + leftMenu: {disable: false, previewMode: true}, + fileMenu: false, + comments: {disable: false, previewMode: true}, + chat: false, + review: true, + viewport: false, + documentHolder: true, + toolbar: true + }, 'signature'); } }, diff --git a/apps/presentationeditor/main/app/view/Statusbar.js b/apps/presentationeditor/main/app/view/Statusbar.js index 676d3f347..af8b61e5e 100644 --- a/apps/presentationeditor/main/app/view/Statusbar.js +++ b/apps/presentationeditor/main/app/view/Statusbar.js @@ -365,7 +365,6 @@ define([ SetDisabled: function(disable) { var langs = this.langMenu.items.length>0; this.btnLanguage.setDisabled(disable || !langs || this._state.no_paragraph); - this.mode.isEdit = !disable; }, onApiFocusObject: function(selectedObjects) { From a2172f924d2a24ac34f1d81ae3202bf773a43e64 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 1 Jul 2021 12:52:01 +0300 Subject: [PATCH 187/376] Common.Utils.UserInfoParser -> AscCommon.UserInfoParser --- apps/common/mobile/lib/controller/collaboration/Review.jsx | 6 +++--- apps/documenteditor/mobile/src/controller/ContextMenu.jsx | 2 +- .../mobile/src/controller/settings/DocumentInfo.jsx | 2 +- .../mobile/src/controller/ContextMenu.jsx | 2 +- .../mobile/src/controller/settings/PresentationInfo.jsx | 2 +- .../spreadsheeteditor/mobile/src/controller/ContextMenu.jsx | 2 +- .../mobile/src/controller/settings/SpreadsheetInfo.jsx | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Review.jsx b/apps/common/mobile/lib/controller/collaboration/Review.jsx index 6f212ef94..a8769709c 100644 --- a/apps/common/mobile/lib/controller/collaboration/Review.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Review.jsx @@ -139,7 +139,7 @@ class ReviewChange extends Component { if (this.appConfig && this.appConfig.canUseReviewPermissions) { const permissions = this.appConfig.customization.reviewPermissions; let arr = []; - const groups = Common.Utils.UserInfoParser.getParsedGroups(Common.Utils.UserInfoParser.getCurrentName()); + const groups = AscCommon.UserInfoParser.canEditReview(AscCommon.UserInfoParser.getCurrentName()); groups && groups.forEach(function(group) { const item = permissions[group.trim()]; item && (arr = arr.concat(item)); @@ -159,7 +159,7 @@ class ReviewChange extends Component { return arr; } checkUserGroups (username) { - const groups = Common.Utils.UserInfoParser.getParsedGroups(username); + const groups = AscCommon.UserInfoParser.canEditReview(username); return this.currentUserGroups && groups && (this.intersection(this.currentUserGroups, (groups.length>0) ? groups : [""]).length>0); } dateToLocaleTimeString (date) { @@ -496,7 +496,7 @@ class ReviewChange extends Component { change = { date: arrChangeReview[0].date, user: arrChangeReview[0].user, - userName: Common.Utils.String.htmlEncode(Common.Utils.UserInfoParser.getParsedName(arrChangeReview[0].user)), + userName: Common.Utils.String.htmlEncode(AscCommon.UserInfoParser.getParsedName(arrChangeReview[0].user)), color: arrChangeReview[0].userColor.get_hex(), text: arrChangeReview[0].changeText, initials: this.props.users.getInitials(arrChangeReview[0].user), diff --git a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx index d53bec6bb..c205270ce 100644 --- a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx +++ b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx @@ -36,7 +36,7 @@ class ContextMenu extends ContextMenuController { getUserName(id) { const user = this.props.users.searchUserByCurrentId(id); - return Common.Utils.UserInfoParser.getParsedName(user.asc_getUserName()); + return AscCommon.UserInfoParser.getParsedName(user.asc_getUserName()); } componentWillUnmount() { diff --git a/apps/documenteditor/mobile/src/controller/settings/DocumentInfo.jsx b/apps/documenteditor/mobile/src/controller/settings/DocumentInfo.jsx index 53ceb4ab3..32fd55220 100644 --- a/apps/documenteditor/mobile/src/controller/settings/DocumentInfo.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/DocumentInfo.jsx @@ -54,7 +54,7 @@ class DocumentInfoController extends Component { let valueModifiedBy = this.docProps.asc_getLastModifiedBy(); if (valueModifiedBy) { - return Common.Utils.UserInfoParser.getParsedName(valueModifiedBy); + return AscCommon.UserInfoParser.getParsedName(valueModifiedBy); } } diff --git a/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx b/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx index b24854c41..3fbdd6566 100644 --- a/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx +++ b/apps/presentationeditor/mobile/src/controller/ContextMenu.jsx @@ -33,7 +33,7 @@ class ContextMenu extends ContextMenuController { getUserName(id) { const user = this.props.users.searchUserByCurrentId(id); - return Common.Utils.UserInfoParser.getParsedName(user.asc_getUserName()); + return AscCommon.UserInfoParser.getParsedName(user.asc_getUserName()); } componentWillUnmount() { diff --git a/apps/presentationeditor/mobile/src/controller/settings/PresentationInfo.jsx b/apps/presentationeditor/mobile/src/controller/settings/PresentationInfo.jsx index eea17514a..688c76271 100644 --- a/apps/presentationeditor/mobile/src/controller/settings/PresentationInfo.jsx +++ b/apps/presentationeditor/mobile/src/controller/settings/PresentationInfo.jsx @@ -49,7 +49,7 @@ class PresentationInfoController extends Component { let valueModifiedBy = this.docProps.asc_getLastModifiedBy(); if (valueModifiedBy) { - return Common.Utils.UserInfoParser.getParsedName(valueModifiedBy); + return AscCommon.UserInfoParser.getParsedName(valueModifiedBy); } } diff --git a/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx b/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx index 436ccdd7c..4af867c16 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/ContextMenu.jsx @@ -34,7 +34,7 @@ class ContextMenu extends ContextMenuController { getUserName(id) { const user = this.props.users.searchUserByCurrentId(id); - return Common.Utils.UserInfoParser.getParsedName(user.asc_getUserName()); + return AscCommon.UserInfoParser.getParsedName(user.asc_getUserName()); } componentWillUnmount() { diff --git a/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetInfo.jsx b/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetInfo.jsx index a3325b307..37c38b3b0 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetInfo.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetInfo.jsx @@ -57,7 +57,7 @@ class SpreadsheetInfoController extends Component { getModifiedBy() { let valueModifiedBy = this.docProps.asc_getLastModifiedBy(); if (valueModifiedBy) { - return Common.Utils.UserInfoParser.getParsedName(valueModifiedBy); + return AscCommon.UserInfoParser.getParsedName(valueModifiedBy); } return null; } From d8a24b96c083c27133f96c859d425a0b2035ba49 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Thu, 1 Jul 2021 13:34:48 +0300 Subject: [PATCH 188/376] [SSE] Bug 46767 --- apps/spreadsheeteditor/main/app/controller/Statusbar.js | 2 +- apps/spreadsheeteditor/main/resources/less/statusbar.less | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Statusbar.js b/apps/spreadsheeteditor/main/app/controller/Statusbar.js index 88b03d382..e7f5e70db 100644 --- a/apps/spreadsheeteditor/main/app/controller/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Statusbar.js @@ -250,7 +250,7 @@ define([ var islocked = this.statusbar.tabbar.hasClass('coauth-locked'), currentIdx = this.api.asc_getActiveWorksheetIndex(); this.statusbar.btnAddWorksheet.setDisabled(islocked || this.api.isCellEdited || mode!=Asc.c_oAscSelectionDialogType.None); - this.statusbar.btnSheetList[mode != Asc.c_oAscSelectionDialogType.None ? 'addClass' : 'removeClass']('disabled'); + this.statusbar.btnSheetList[mode==Asc.c_oAscSelectionDialogType.FormatTable || mode==Asc.c_oAscSelectionDialogType.PrintTitles ? 'addClass' : 'removeClass']('disabled'); var item, i = this.statusbar.tabbar.getCount(); while (i-- > 0) { diff --git a/apps/spreadsheeteditor/main/resources/less/statusbar.less b/apps/spreadsheeteditor/main/resources/less/statusbar.less index ad07dfc48..782ff6065 100644 --- a/apps/spreadsheeteditor/main/resources/less/statusbar.less +++ b/apps/spreadsheeteditor/main/resources/less/statusbar.less @@ -430,10 +430,12 @@ } &.masked #status-addtabs-box{ - button.disabled .btn-icon { - background-position-x: 0px !important; + button#status-btn-addtab { + opacity: 0.4; + &.disabled .btn-icon { + background-position-x: 0px !important; + } } - opacity: 0.4; } } From 39b365a370eb5aeed16b87e19be2b8467e387e9c Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Thu, 1 Jul 2021 16:58:57 +0300 Subject: [PATCH 189/376] [all] changed scroller theme colors --- .../resources/less/colors-table-ie-fix.less | 3 +++ .../main/resources/less/colors-table.less | 2 ++ apps/common/main/resources/less/scroller.less | 24 +++++++++---------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/apps/common/main/resources/less/colors-table-ie-fix.less b/apps/common/main/resources/less/colors-table-ie-fix.less index eaf133158..68bde0bad 100644 --- a/apps/common/main/resources/less/colors-table-ie-fix.less +++ b/apps/common/main/resources/less/colors-table-ie-fix.less @@ -49,6 +49,9 @@ @icon-contrast-popover-ie: #fff; @icon-success-ie: #5b9f27; +@canvas-scroll-thumb-hover-ie: #c0c0c0; +@canvas-scroll-thumb-border-hover-ie: #cbcbcb; + @button-header-normal-icon-offset-x-ie: -20px; @button-header-active-icon-offset-x-ie: -20px; @scaled-one-px-value-ie: 1px; diff --git a/apps/common/main/resources/less/colors-table.less b/apps/common/main/resources/less/colors-table.less index 83727731c..475dbeffb 100644 --- a/apps/common/main/resources/less/colors-table.less +++ b/apps/common/main/resources/less/colors-table.less @@ -232,3 +232,5 @@ @canvas-background: var(--canvas-background); @canvas-content-background: var(--canvas-content-background); @canvas-page-border: var(--canvas-page-border); +@canvas-scroll-thumb-hover: var(--canvas-scroll-thumb-hover); +@canvas-scroll-thumb-border-hover: var(--canvas-scroll-thumb-border-hover); diff --git a/apps/common/main/resources/less/scroller.less b/apps/common/main/resources/less/scroller.less index 328b0082f..8a8b76869 100644 --- a/apps/common/main/resources/less/scroller.less +++ b/apps/common/main/resources/less/scroller.less @@ -46,8 +46,8 @@ .hover { .ps-scrollbar-x { &.always-visible-x { - background-color: @border-regular-control-ie; - background-color: @border-regular-control; + background-color: @canvas-scroll-thumb-hover-ie; + background-color: @canvas-scroll-thumb-hover; background-position: center -7px; } } @@ -56,10 +56,10 @@ &.in-scrolling { .ps-scrollbar-x { &.always-visible-x { - background-color: @border-regular-control-ie; - background-color: @border-regular-control; - border-color: @border-regular-control-ie; - border-color: @border-regular-control; + background-color: @canvas-scroll-thumb-hover-ie; + background-color: @canvas-scroll-thumb-hover; + border-color: @canvas-scroll-thumb-border-hover-ie; + border-color: @canvas-scroll-thumb-border-hover; background-position: center -7px; } } @@ -115,8 +115,8 @@ .ps-scrollbar-y { &.always-visible-y { - background-color: @border-regular-control-ie; - background-color: @border-regular-control; + background-color: @canvas-scroll-thumb-hover-ie; + background-color: @canvas-scroll-thumb-hover; background-position: -7px center; } } @@ -128,10 +128,10 @@ .ps-scrollbar-y { &.always-visible-y { - background-color: @border-regular-control-ie; - background-color: @border-regular-control; - border-color: @border-regular-control-ie; - border-color: @border-regular-control; + background-color: @canvas-scroll-thumb-hover-ie; + background-color: @canvas-scroll-thumb-hover; + border-color: @canvas-scroll-thumb-border-hover-ie; + border-color: @canvas-scroll-thumb-border-hover; background-position: -7px center; } } From c1c73e74a1697f83b0e901ef70fcb4f351e3cd79 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 1 Jul 2021 18:51:03 +0300 Subject: [PATCH 190/376] Refactoring code --- .../mobile/lib/controller/collaboration/Review.jsx | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Review.jsx b/apps/common/mobile/lib/controller/collaboration/Review.jsx index a8769709c..98cc0a844 100644 --- a/apps/common/mobile/lib/controller/collaboration/Review.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Review.jsx @@ -147,20 +147,8 @@ class ReviewChange extends Component { this.currentUserGroups = arr; } } - intersection (arr1, arr2) { //Computes the list of values that are the intersection of all the arrays. - const arr = []; - arr1.forEach((item1) => { - arr2.forEach((item2) => { - if (item1 === item2) { - arr.push(item2); - } - }); - }); - return arr; - } checkUserGroups (username) { - const groups = AscCommon.UserInfoParser.canEditReview(username); - return this.currentUserGroups && groups && (this.intersection(this.currentUserGroups, (groups.length>0) ? groups : [""]).length>0); + return this.currentUserGroups && AscCommon.UserInfoParser.canEditReview(username); } dateToLocaleTimeString (date) { const format = (date) => { From af2d105790257ae2a718d60348f5a7dab76e5817 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 1 Jul 2021 19:06:03 +0300 Subject: [PATCH 191/376] Refactoring code v2 --- .../lib/controller/collaboration/Review.jsx | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Review.jsx b/apps/common/mobile/lib/controller/collaboration/Review.jsx index 98cc0a844..d8a42eaf7 100644 --- a/apps/common/mobile/lib/controller/collaboration/Review.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Review.jsx @@ -135,21 +135,8 @@ class ReviewChange extends Component { this.onDeleteChange = this.onDeleteChange.bind(this); this.appConfig = props.storeAppOptions; - - if (this.appConfig && this.appConfig.canUseReviewPermissions) { - const permissions = this.appConfig.customization.reviewPermissions; - let arr = []; - const groups = AscCommon.UserInfoParser.canEditReview(AscCommon.UserInfoParser.getCurrentName()); - groups && groups.forEach(function(group) { - const item = permissions[group.trim()]; - item && (arr = arr.concat(item)); - }); - this.currentUserGroups = arr; - } - } - checkUserGroups (username) { - return this.currentUserGroups && AscCommon.UserInfoParser.canEditReview(username); } + dateToLocaleTimeString (date) { const format = (date) => { let strTime, @@ -433,7 +420,7 @@ class ReviewChange extends Component { const userColor = item.get_UserColor(); const goto = (item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveTo || item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveFrom); date = this.dateToLocaleTimeString(date); - const editable = this.appConfig.isReviewOnly && (item.get_UserId() == this.appConfig.user.id) || !this.appConfig.isReviewOnly && (!this.appConfig.canUseReviewPermissions || this.checkUserGroups(item.get_UserName())); + const editable = this.appConfig.isReviewOnly && (item.get_UserId() == this.appConfig.user.id) || !this.appConfig.isReviewOnly && (!this.appConfig.canUseReviewPermissions || AscCommon.UserInfoParser.canEditReview(item.get_UserName())); arr.push({date: date, user: user, userColor: userColor, changeText: changeText, goto: goto, editable: editable}); }); return arr; From 496f5b89f6f5760334cde190773e2df27880a87e Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 1 Jul 2021 19:21:10 +0300 Subject: [PATCH 192/376] Correct users store --- apps/common/mobile/lib/store/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/mobile/lib/store/users.js b/apps/common/mobile/lib/store/users.js index 6ca3c140d..776c6e408 100644 --- a/apps/common/mobile/lib/store/users.js +++ b/apps/common/mobile/lib/store/users.js @@ -52,7 +52,7 @@ export class storeUsers { } getInitials (name) { - const fio = Common.Utils.UserInfoParser.getParsedName(name).split(' '); + const fio = AscCommon.UserInfoParser.getParsedName(name).split(' '); let initials = fio[0].substring(0, 1).toUpperCase(); for (let i = fio.length-1; i>0; i--) { if (fio[i][0]!=='(' && fio[i][0]!==')') { From 4940291ce6975a5a0ebc2e7d2ca6965d65563ed4 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Thu, 1 Jul 2021 22:11:42 +0300 Subject: [PATCH 193/376] [SSE mobile] Fix Bug 43270 --- apps/spreadsheeteditor/mobile/locale/en.json | 1 + .../mobile/src/controller/edit/EditCell.jsx | 27 ++++++++++-- .../mobile/src/view/edit/EditCell.jsx | 42 ++++++++++--------- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index 02681d4f8..730a81fc1 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -318,6 +318,7 @@ "textThin": "Thin", "textMedium": "Medium", "textThick": "Thick", + "textFraction": "Fraction", "textGeneral": "General", "textNumber": "Number", "textInteger": "Integer", diff --git a/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx b/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx index b0d7bd9b7..a54d9ec07 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx @@ -116,10 +116,29 @@ class EditCellController extends Component { api.asc_setCellAngle(angle); } - onCellFormat(value) { + onCellFormat(format) { const api = Common.EditorApi.get(); - let type = decodeURIComponent(atob(value)); - api.asc_setCellFormat(type); + // let type = decodeURIComponent(atob(value)); + api.asc_setCellFormat(format); + } + + onCurrencyCellFormat(format) { + const api = Common.EditorApi.get(); + api.asc_setCellFormat(format); + } + + onAccountingCellFormat(value) { + const api = Common.EditorApi.get(); + let info = new Asc.asc_CFormatCellsInfo(); + + info.asc_setType(Asc.c_oAscNumFormatType.Accounting); + info.asc_setSeparator(false); + info.asc_setSymbol(value); + + let format = api.asc_getFormatCells(info); + + if (format && format.length > 0) + api.asc_setCellFormat(format[0]); } onBorderStyle(type, borderInfo) { @@ -168,6 +187,8 @@ class EditCellController extends Component { onCellFormat={this.onCellFormat} onTextOrientationChange={this.onTextOrientationChange} onBorderStyle={this.onBorderStyle} + onCurrencyCellFormat={this.onCurrencyCellFormat} + onAccountingCellFormat={this.onAccountingCellFormat} /> ) } diff --git a/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx b/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx index e66e49045..3a48110e8 100644 --- a/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx @@ -88,7 +88,9 @@ const EditCell = props => { {!isAndroid ? : null @@ -757,25 +759,25 @@ const PageFormatCell = props => { } - props.onCellFormat('R2VuZXJhbA==')}> + props.onCellFormat('General')}> - props.onCellFormat('MC4wMA==')}> + props.onCellFormat('0.00')}> - props.onCellFormat('JTIzMA==')}> + props.onCellFormat('# ?/?')}> - props.onCellFormat('MC4wMEUlMkIwMA==')}> + props.onCellFormat('0.00E+00')}> @@ -789,10 +791,10 @@ const PageFormatCell = props => { }}> - props.onCellFormat('MC4wMCUyNQ==')}> + props.onCellFormat('0.00%')}> - props.onCellFormat('JTQw')}> + props.onCellFormat('@')}> @@ -815,19 +817,19 @@ const PageAccountingFormatCell = props => { props.onCellFormat('XyglMjQqJTIwJTIzJTJDJTIzJTIzMC4wMF8pJTNCXyglMjQqJTIwKCUyMyUyQyUyMyUyMzAuMDApJTNCXyglMjQqJTIwJTIyLSUyMiUzRiUzRl8pJTNCXyglNDBfKQ==')}> + onClick={() => props.onAccountingCellFormat(1033)}> props.onCellFormat('XyglRTIlODIlQUMqJTIwJTIzJTJDJTIzJTIzMC4wMF8pJTNCXyglRTIlODIlQUMqJTIwKCUyMyUyQyUyMyUyMzAuMDApJTNCXyglRTIlODIlQUMqJTIwJTIyLSUyMiUzRiUzRl8pJTNCXyglNDBfKQ==')}> + onClick={() => props.onAccountingCellFormat(1031)}> props.onCellFormat('XyglQzIlQTMqJTIwJTIzJTJDJTIzJTIzMC4wMF8pJTNCXyglQzIlQTMqJTIwKCUyMyUyQyUyMyUyMzAuMDApJTNCXyglQzIlQTMqJTIwJTIyLSUyMiUzRiUzRl8pJTNCXyglNDBfKQ==')}> + onClick={() => props.onAccountingCellFormat(2057)}> props.onCellFormat('Xy0qJTIwJTIzJTJDJTIzJTIzMC4wMCU1QiUyNCVEMSU4MC4tNDE5JTVEXy0lM0ItKiUyMCUyMyUyQyUyMyUyMzAuMDAlNUIlMjQlRDElODAuLTQxOSU1RF8tJTNCXy0qJTIwJTIyLSUyMiUzRiUzRiU1QiUyNCVEMSU4MC4tNDE5JTVEXy0lM0JfLSU0MF8t')}> + onClick={() => props.onAccountingCellFormat(1049)}> props.onCellFormat('XyglQzIlQTUqJTIwJTIzJTJDJTIzJTIzMC4wMF8pJTNCXyglQzIlQTUqJTIwKCUyMyUyQyUyMyUyMzAuMDApJTNCXyglQzIlQTUqJTIwJTIyLSUyMiUzRiUzRl8pJTNCXyglNDBfKQ==')}> + onClick={() => props.onAccountingCellFormat(1041)}> @@ -840,7 +842,7 @@ const PageCurrencyFormatCell = props => { return ( - + {Device.phone && @@ -849,19 +851,19 @@ const PageCurrencyFormatCell = props => { props.onCellFormat('JTI0JTIzJTJDJTIzJTIzMC4wMA==')}> + onClick={() => props.onCurrencyCellFormat('[$$-409]#,##0.00')}> props.onCellFormat('JUUyJTgyJUFDJTIzJTJDJTIzJTIzMC4wMA==')}> + onClick={() => props.onCurrencyCellFormat('#,##0.00\ [$€-407]')}> props.onCellFormat('JUMyJUEzJTIzJTJDJTIzJTIzMC4wMA==')}> + onClick={() => props.onCurrencyCellFormat('[$£-809]#,##0.00')}> props.onCellFormat('JTIzJTJDJTIzJTIzMC4wMCUyMiVEMSU4MC4lMjI=')}> + onClick={() => props.onCurrencyCellFormat('#,##0.00\ [$₽-419]')}> props.onCellFormat('JUMyJUE1JTIzJTJDJTIzJTIzMC4wMA==')}> + onClick={() => props.onCurrencyCellFormat('[$¥-411]#,##0.00')}> From f910c046b810df4c1f655a3cc489ea2984208851 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 2 Jul 2021 00:54:55 +0300 Subject: [PATCH 194/376] [SSE] Refactoring disable editing --- .../main/app/controller/CellEditor.js | 8 +- .../main/app/controller/LeftMenu.js | 29 +++-- .../main/app/controller/Main.js | 106 ++++++++++++++---- .../main/app/view/FileMenu.js | 15 +-- .../main/app/view/FileMenuPanels.js | 1 + .../main/app/view/LeftMenu.js | 2 +- .../main/app/view/SignatureSettings.js | 33 +++--- 7 files changed, 132 insertions(+), 62 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/CellEditor.js b/apps/spreadsheeteditor/main/app/controller/CellEditor.js index 4806b55a3..f6f88365f 100644 --- a/apps/spreadsheeteditor/main/app/controller/CellEditor.js +++ b/apps/spreadsheeteditor/main/app/controller/CellEditor.js @@ -324,15 +324,15 @@ define([ }, SetDisabled: function(disabled) { - this.editor.$btnfunc[!disabled?'removeClass':'addClass']('disabled'); - this.editor.btnNamedRanges.setVisible(!disabled); + this.editor.$btnfunc[!disabled && this.mode.isEdit ?'removeClass':'addClass']('disabled'); + this.editor.btnNamedRanges.setVisible(!disabled && this.mode.isEdit && !this.mode.isEditDiagram && !this.mode.isEditMailMerge); }, setPreviewMode: function(mode) { if (this.viewmode === mode) return; this.viewmode = mode; - this.editor.$btnfunc[!mode?'removeClass':'addClass']('disabled'); - this.editor.cellNameDisabled(mode); + this.editor.$btnfunc[!mode && this.mode.isEdit?'removeClass':'addClass']('disabled'); + this.editor.cellNameDisabled(mode && !(this.mode.isEdit && !this.mode.isEditDiagram && !this.mode.isEditMailMerge)); } }); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index 2127bd08e..3a89c1a73 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -188,21 +188,28 @@ define([ return this; }, - SetDisabled: function(disable, disableFileMenu) { - this.mode.isEdit = !disable; + SetDisabled: function(disable, options) { + if (this.leftMenu._state.disabled !== disable) { + this.leftMenu._state.disabled = disable; + if (disable) { + this.previsEdit = this.mode.isEdit; + this.prevcanEdit = this.mode.canEdit; + this.mode.isEdit = this.mode.canEdit = !disable; + } else { + this.mode.isEdit = this.previsEdit; + this.mode.canEdit = this.prevcanEdit; + } + } + if (disable) this.leftMenu.close(); - /** coauthoring begin **/ - this.leftMenu.btnComments.setDisabled(disable); - var comments = this.getApplication().getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); - this.setPreviewMode(disable); - this.leftMenu.btnChat.setDisabled(disable); - /** coauthoring end **/ + if (!options || options.comments && options.comments.disable) + this.leftMenu.btnComments.setDisabled(disable); + if (!options || options.chat) + this.leftMenu.btnChat.setDisabled(disable); + this.leftMenu.btnPlugins.setDisabled(disable); this.leftMenu.btnSpellcheck.setDisabled(disable); - if (disableFileMenu) this.leftMenu.getMenu('file').SetDisabled(disable); }, createDelayedElements: function() { diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 4d4fcb73c..c5952c7b8 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -209,7 +209,8 @@ define([ Common.NotificationCenter.on('download:cancel', _.bind(this.onDownloadCancel, this)); Common.NotificationCenter.on('download:advanced', _.bind(this.onAdvancedOptions, this)); Common.NotificationCenter.on('showmessage', _.bind(this.onExternalMessage, this)); - Common.NotificationCenter.on('markfavorite', _.bind(this.markFavorite, this)); + Common.NotificationCenter.on('markfavorite', _.bind(this.markFavorite, this)); + Common.NotificationCenter.on('editing:disable', _.bind(this.onEditingDisable, this)); this.stackLongActions = new Common.IrregularStack({ strongCompare : this._compareActionStrong, @@ -218,6 +219,11 @@ define([ this.stackLongActions.push({id: InitApplication, type: Asc.c_oAscAsyncActionType.BlockInteraction}); + this.stackDisableActions = new Common.IrregularStack({ + strongCompare : this._compareActionWeak, + weakCompare : this._compareActionWeak + }); + this.isShowOpenDialog = false; // Initialize api gateway @@ -670,6 +676,9 @@ define([ if (type == Asc.c_oAscAsyncActionType.BlockInteraction && !( (id == Asc.c_oAscAsyncAction['LoadDocumentFonts'] || id == Asc.c_oAscAsyncAction['ApplyChanges']) && (this.dontCloseDummyComment || this.inTextareaControl || Common.Utils.ModalWindow.isVisible() || this.inFormControl) )) this.onEditComplete(this.loadMask, {restorefocus:true}); } + if ( id == Asc.c_oAscAsyncAction['Disconnect']) { + this.disableEditing(false, true); + } }, setLongActionView: function(action) { @@ -741,6 +750,12 @@ define([ case LoadingDocument: title = this.loadingDocumentTitleText + ' '; break; + + case Asc.c_oAscAsyncAction['Disconnect']: + title = this.textDisconnect; + this.disableEditing(true, true); + break; + default: if (typeof action.id == 'string'){ title = action.id; @@ -1032,18 +1047,76 @@ define([ } }, - disableEditing: function(disable) { + disableEditing: function(disable, temp) { + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: disable, + allowSignature: false, + allowProtect: false, + rightMenu: {clear: true, disable: true}, + statusBar: true, + leftMenu: {disable: true, previewMode: true}, + fileMenu: {protect: true, history: temp}, + comments: {disable: !temp, previewMode: true}, + chat: true, + review: true, + viewport: true, + documentHolder: true, + toolbar: true, + celleditor: {previewMode: true} + }, temp ? 'reconnect' : 'disconnect'); + }, + + onEditingDisable: function(disable, options, type) { var app = this.getApplication(); - if (this.appOptions.canEdit && this.editorConfig.mode !== 'view') { - app.getController('RightMenu').getView('RightMenu').clearSelection(); - app.getController('RightMenu').SetDisabled(disable, false); - app.getController('Toolbar').DisableToolbar(disable,disable); + + var action = {type: type, disable: disable, options: options}; + if (disable && !this.stackDisableActions.get({type: type})) + this.stackDisableActions.push(action); + !disable && this.stackDisableActions.pop({type: type}); + var prev_options = !disable && (this.stackDisableActions.length()>0) ? this.stackDisableActions.get(this.stackDisableActions.length()-1) : null; + + if (options.rightMenu && app.getController('RightMenu')) { + options.rightMenu.clear && app.getController('RightMenu').getView('RightMenu').clearSelection(); + options.rightMenu.disable && app.getController('RightMenu').SetDisabled(disable, options.allowSignature); + } + if (options.statusBar) { app.getController('Statusbar').SetDisabled(disable); } - app.getController('LeftMenu').SetDisabled(disable, true); - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - app.getController('Viewport').SetDisabled(disable); - app.getController('CellEditor').SetDisabled(disable); + if (options.review) { + app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + } + if (options.viewport) { + app.getController('Viewport').SetDisabled(disable); + } + if (options.toolbar) { + app.getController('Toolbar').DisableToolbar(disable, options.viewMode); + } + if (options.documentHolder) { + app.getController('DocumentHolder').SetDisabled(disable, options.allowProtect); + } + if (options.leftMenu) { + if (options.leftMenu.disable) + app.getController('LeftMenu').SetDisabled(disable, options); + if (options.leftMenu.previewMode) + app.getController('LeftMenu').setPreviewMode(disable); + } + if (options.fileMenu) { + app.getController('LeftMenu').leftMenu.getMenu('file').SetDisabled(disable, options.fileMenu); + if (options.leftMenu.disable) + app.getController('LeftMenu').leftMenu.getMenu('file').applyMode(); + } + if (options.comments) { + var comments = this.getApplication().getController('Common.Controllers.Comments'); + if (comments && options.comments.previewMode) + comments.setPreviewMode(disable); + } + if (options.celleditor && options.celleditor.previewMode) { + app.getController('CellEditor').setPreviewMode(disable); + } + + if (prev_options) { + this.onEditingDisable(prev_options.disable, prev_options.options, prev_options.type); + } }, onOpenDocument: function(progress) { @@ -2443,15 +2516,7 @@ define([ var me = this; Common.Utils.warningDocumentIsLocked({ disablefunc: function (disable) { - me.disableEditing(disable); - var app = me.getApplication(); - app.getController('DocumentHolder').SetDisabled(disable); - var leftMenu = app.getController('LeftMenu'); - leftMenu.leftMenu.getMenu('file').getButton('protect').setDisabled(disable); - leftMenu.setPreviewMode(disable); - - var comments = app.getController('Common.Controllers.Comments'); - if (comments) comments.setPreviewMode(disable); + me.disableEditing(disable, true); }}); }, @@ -2953,7 +3018,8 @@ define([ errorPivotWithoutUnderlying: 'The Pivot Table report was saved without the underlying data.
    Use the \'Refresh\' button to update the report.', txtQuarter: 'Qtr', txtOr: '%1 or %2', - confirmReplaceFormulaInTable: 'Formulas in the header row will be removed and converted to static text.
    Do you want to continue?' + confirmReplaceFormulaInTable: 'Formulas in the header row will be removed and converted to static text.
    Do you want to continue?', + textDisconnect: 'Connection is lost' } })(), SSE.Controllers.Main || {})) }); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index 3b6256650..143e5be61 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -253,6 +253,8 @@ define([ }, applyMode: function() { + if (!this.rendered) return; + if (!this.panels) { this.panels = { 'opts' : (new SSE.Views.FileMenuPanels.Settings({menu:this})).render(this.$el.find('#panel-settings')), @@ -346,8 +348,7 @@ define([ } if (!delay) { - if ( this.rendered ) - this.applyMode(); + this.applyMode(); } }, @@ -424,20 +425,16 @@ define([ } }, - SetDisabled: function(disable) { + SetDisabled: function(disable, options) { if ( !this.panels ) { this.mode.disableEditing = disable; } else { this.panels['opts'].SetDisabled(disable); } - var _btn_save = this.getButton('save'), - _btn_rename = this.getButton('rename'), - _btn_protect = this.getButton('protect'); + var _btn_protect = this.getButton('protect'); - _btn_save.setDisabled(disable || !this.mode.isEdit); - _btn_protect.setDisabled(disable || !this.mode.isEdit); - _btn_rename.setDisabled(disable || !this.mode.canRename || this.mode.isDesktopApp); + options && options.protect && _btn_protect.setDisabled(disable || !this.mode.isEdit); }, btnSaveCaption : 'Save', diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index 928b04cf3..d5a4b1c9c 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -265,6 +265,7 @@ define([ if ( disabled ) { $(this.viewSettingsPicker.dataViewItems[1].el).hide(); $(this.viewSettingsPicker.dataViewItems[2].el).hide(); + this.viewSettingsPicker.selectByIndex(0, true); } else { if ( this.mode.canPrint ) $(this.viewSettingsPicker.dataViewItems[1].el).show(); diff --git a/apps/spreadsheeteditor/main/app/view/LeftMenu.js b/apps/spreadsheeteditor/main/app/view/LeftMenu.js index 8cca99aab..248bdbf94 100644 --- a/apps/spreadsheeteditor/main/app/view/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/view/LeftMenu.js @@ -75,7 +75,7 @@ define([ initialize: function () { this.minimizedMode = true; - this._state = {}; + this._state = {disabled: false}; }, render: function () { diff --git a/apps/spreadsheeteditor/main/app/view/SignatureSettings.js b/apps/spreadsheeteditor/main/app/view/SignatureSettings.js index 94bd653c4..53836c5ac 100644 --- a/apps/spreadsheeteditor/main/app/view/SignatureSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SignatureSettings.js @@ -393,23 +393,22 @@ define([ if (this._state.DisabledEditing != disable) { this._state.DisabledEditing = disable; - var rightMenuController = SSE.getController('RightMenu'); - if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings') - rightMenuController.rightmenu.clearSelection(); - rightMenuController.SetDisabled(disable, true); - SSE.getController('Toolbar').DisableToolbar(disable, disable); - SSE.getController('Statusbar').SetDisabled(disable); - SSE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); - SSE.getController('DocumentHolder').SetDisabled(disable, true); - SSE.getController('CellEditor').setPreviewMode(disable); - SSE.getController('Viewport').disableEditing(disable); - - // var leftMenu = SSE.getController('LeftMenu').leftMenu; - // leftMenu.btnComments.setDisabled(disable); - SSE.getController('LeftMenu').setPreviewMode(disable); - var comments = SSE.getController('Common.Controllers.Comments'); - if (comments) - comments.setPreviewMode(disable); + Common.NotificationCenter.trigger('editing:disable', disable, { + viewMode: disable, + allowSignature: true, + allowProtect: true, + rightMenu: {clear: disable && (SSE.getController('RightMenu').rightmenu.GetActivePane() !== 'id-signature-settings'), disable: true}, + statusBar: true, + leftMenu: {disable: false, previewMode: true}, + fileMenu: false, + comments: {disable: false, previewMode: true}, + chat: false, + review: true, + viewport: true, + documentHolder: true, + toolbar: true, + celleditor: {previewMode: true} + }, 'signature'); } }, From 9396f7612570f1e0a04ef001b291794499d3804f Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 2 Jul 2021 02:06:34 +0300 Subject: [PATCH 195/376] [Mobile] Always use user info parser --- apps/documenteditor/mobile/src/store/appOptions.js | 3 +++ apps/presentationeditor/mobile/src/store/appOptions.js | 3 +++ apps/spreadsheeteditor/mobile/src/store/appOptions.js | 3 +++ 3 files changed, 9 insertions(+) diff --git a/apps/documenteditor/mobile/src/store/appOptions.js b/apps/documenteditor/mobile/src/store/appOptions.js index 82c7c6afc..ccba86f65 100644 --- a/apps/documenteditor/mobile/src/store/appOptions.js +++ b/apps/documenteditor/mobile/src/store/appOptions.js @@ -84,6 +84,9 @@ export class storeAppOptions { && (!!(config.customization.goback.url) || config.customization.goback.requestClose && this.canRequestClose); this.canBack = this.canBackToFolder === true; this.canPlugins = false; + + AscCommon.UserInfoParser.setParser(true); + AscCommon.UserInfoParser.setCurrentName(this.user.fullname); } setPermissionOptions (document, licType, params, permissions, isSupportEditFeature) { if (params.asc_getRights() !== Asc.c_oRights.Edit) diff --git a/apps/presentationeditor/mobile/src/store/appOptions.js b/apps/presentationeditor/mobile/src/store/appOptions.js index 9fca4e84b..5678eb8ec 100644 --- a/apps/presentationeditor/mobile/src/store/appOptions.js +++ b/apps/presentationeditor/mobile/src/store/appOptions.js @@ -61,6 +61,9 @@ export class storeAppOptions { && (!!(config.customization.goback.url) || config.customization.goback.requestClose && this.canRequestClose); this.canBack = this.canBackToFolder === true; this.canPlugins = false; + + AscCommon.UserInfoParser.setParser(true); + AscCommon.UserInfoParser.setCurrentName(this.user.fullname); } setPermissionOptions (document, licType, params, permissions, isSupportEditFeature) { diff --git a/apps/spreadsheeteditor/mobile/src/store/appOptions.js b/apps/spreadsheeteditor/mobile/src/store/appOptions.js index ce4a99ec8..1d6f30310 100644 --- a/apps/spreadsheeteditor/mobile/src/store/appOptions.js +++ b/apps/spreadsheeteditor/mobile/src/store/appOptions.js @@ -68,6 +68,9 @@ export class storeAppOptions { && (!!(config.customization.goback.url) || config.customization.goback.requestClose && this.canRequestClose); this.canBack = this.canBackToFolder === true; this.canPlugins = false; + + AscCommon.UserInfoParser.setParser(true); + AscCommon.UserInfoParser.setCurrentName(this.user.fullname); } setPermissionOptions (document, licType, params, permissions, isSupportEditFeature) { From 64b8e12ff680460da585f714e39bf2a9968e73c1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 2 Jul 2021 14:27:16 +0300 Subject: [PATCH 196/376] [Mobile] Fix user name in comments --- .../lib/view/collaboration/Comments.jsx | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index d403f8cbb..23be9fae5 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -56,7 +56,7 @@ const AddCommentPopup = inject("storeComments")(observer(props => { {Device.android &&
    {userInfo.initials}
    } -
    {userInfo.name}
    +
    {GetUserName(userInfo.name)}
    {setText(event.target.value);}}> @@ -91,7 +91,7 @@ const AddCommentDialog = inject("storeComments")(observer(props => {
    ${Device.android ? templateInitials : ''} -
    ${userInfo.name}
    +
    ${GetUserName(userInfo.name)}
    @@ -223,7 +223,7 @@ const EditCommentPopup = inject("storeComments")(observer(({storeComments, comme
    {comment.userInitials}
    }
    -
    {comment.userName}
    +
    {GetUserName(comment.userName)}
    {comment.date}
    @@ -260,7 +260,7 @@ const EditCommentDialog = inject("storeComments")(observer(({storeComments, comm
    ${Device.android ? templateInitials : ''}
    -
    ${comment.userName}
    +
    ${GetUserName(comment.userName)}
    ${comment.date}
    @@ -352,7 +352,7 @@ const AddReplyPopup = inject("storeComments")(observer(({storeComments, userInfo {Device.android &&
    {userInfo.initials}
    } -
    {userInfo.name}
    +
    {GetUserName(userInfo.name)}
    {setText(event.target.value);}}> @@ -386,7 +386,7 @@ const AddReplyDialog = inject("storeComments")(observer(({storeComments, userInf
    ${Device.android ? templateInitials : ''} -
    ${userInfo.name}
    +
    ${GetUserName(userInfo.name)}
    @@ -479,7 +479,7 @@ const EditReplyPopup = inject("storeComments")(observer(({storeComments, comment
    {reply.userInitials}
    }
    -
    {reply.userName}
    +
    {GetUserName(reply.userName)}
    {reply.date}
    @@ -516,7 +516,7 @@ const EditReplyDialog = inject("storeComments")(observer(({storeComments, commen
    ${Device.android ? templateInitials : ''}
    -
    ${reply.userName}
    +
    ${GetUserName(reply.userName)}
    ${reply.date}
    @@ -663,7 +663,7 @@ const ViewComments = ({storeComments, storeAppOptions, onCommentMenuClick, onRes
    {isAndroid &&
    {comment.userInitials}
    }
    -
    {comment.userName}
    +
    {GetUserName(comment.userName)}
    {comment.date}
    @@ -693,7 +693,7 @@ const ViewComments = ({storeComments, storeAppOptions, onCommentMenuClick, onRes
    {isAndroid &&
    {reply.userInitials}
    }
    -
    {reply.userName}
    +
    {GetUserName(reply.userName)}
    {reply.date}
    @@ -792,7 +792,7 @@ const CommentList = inject("storeComments", "storeAppOptions")(observer(({storeC
    {isAndroid &&
    {comment.userInitials}
    }
    -
    {comment.userName}
    +
    {GetUserName(comment.userName)}
    {comment.date}
    @@ -822,7 +822,7 @@ const CommentList = inject("storeComments", "storeAppOptions")(observer(({storeC
    {isAndroid &&
    {reply.userInitials}
    }
    -
    {reply.userName}
    +
    {GetUserName(reply.userName)}
    {reply.date}
    @@ -929,6 +929,12 @@ const ViewCurrentComments = props => { ) }; +const GetUserName = name => { + return ( + Common.Utils.String.htmlEncode(AscCommon.UserInfoParser.getParsedName(name)) + ) +}; + export { AddComment, EditComment, From 147bffff211cdc11e3905fc24289056d99cea3d0 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 2 Jul 2021 14:58:27 +0300 Subject: [PATCH 197/376] Fix hint manager --- apps/common/main/lib/component/HintManager.js | 2 +- apps/common/main/lib/util/utils.js | 5 +++-- apps/common/main/lib/view/Header.js | 2 +- .../main/app/template/StatusBar.template | 4 ++-- apps/spreadsheeteditor/main/app/view/DataTab.js | 8 ++++---- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index f3e9416b1..969b96423 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -177,7 +177,7 @@ Common.UI.HintManager = new(function() { if (_currentControls.length === 0) _getControls(); _currentControls.forEach(function(item, index) { - if (!item.hasClass('disabled') && !item.parent().hasClass('disabled')) { + if (!item.hasClass('disabled') && !item.parent().hasClass('disabled') && !item.attr('disabled')) { var hint = $('
    ' + item.attr('data-hint-title') + '
    '); var direction = item.attr('data-hint-direction'); // exceptions diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index 6cba59044..45781cc81 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -886,7 +886,7 @@ Common.Utils.lockControls = function(causes, lock, opts, defControls) { }); }; -Common.Utils.injectButtons = function($slots, id, iconCls, caption, lock, split, menu, toggle, dataHint, dataHintDirection, dataHintOffset) { +Common.Utils.injectButtons = function($slots, id, iconCls, caption, lock, split, menu, toggle, dataHint, dataHintDirection, dataHintOffset, dataHintTitle) { var btnsArr = createButtonSet(); btnsArr.setDisabled(true); id = id || ("id-toolbar-" + iconCls); @@ -907,7 +907,8 @@ Common.Utils.injectButtons = function($slots, id, iconCls, caption, lock, split, disabled: true, dataHint: dataHint, dataHintDirection: dataHintDirection, - dataHintOffset: dataHintOffset + dataHintOffset: dataHintOffset, + dataHintTitle: dataHintTitle }); btnsArr.add(button); diff --git a/apps/common/main/lib/view/Header.js b/apps/common/main/lib/view/Header.js index 674d1cac3..d61854e49 100644 --- a/apps/common/main/lib/view/Header.js +++ b/apps/common/main/lib/view/Header.js @@ -85,7 +85,7 @@ define([ '
    ' + // '' + ''+ '
    ' + '
    ' + + '
    ' + '
    ' + '
    ' + '
    ' + @@ -350,6 +351,10 @@ define([ if ( me.btnOptions ) me.btnOptions.updateHint(me.tipViewSettings); + + if ( me.btnContentMode ) { + me.btnContentMode.on('click', function (e) { Common.UI.Themes.toggleContentTheme(); }); + } } function onDocNameKeyDown(e) { @@ -386,6 +391,12 @@ define([ } } + function onContentThemeChangedToDark(isdark) { + if ( this.btnContentMode ) { + this.btnContentMode.changeIcon(!isdark ? {curr: 'btn-mode-dark', next: 'btn-mode-light'} : {curr: 'btn-mode-light', next: 'btn-mode-dark'}); + } + } + return { options: { branding: {}, @@ -444,6 +455,7 @@ define([ 'app:face': function(mode) {Common.Utils.asyncCall(onAppShowed, me, mode);} }); Common.NotificationCenter.on('collaboration:sharingdeny', onLostEditRights); + Common.NotificationCenter.on('contenttheme:dark', onContentThemeChangedToDark.bind(this)); }, render: function (el, role) { @@ -536,6 +548,11 @@ define([ $panelUsers.hide(); + if ( !!DE ) { + var mode_cls = Common.UI.Themes.isContentThemeDark() ? 'btn-mode-dark' : 'btn-mode-light'; + me.btnContentMode = createTitleButton('toolbar__icon icon--inverse ' + mode_cls, $html.findById('#slot-btn-mode')); + } + return $html; } else if ( role == 'title' ) { diff --git a/apps/documenteditor/main/app/controller/Viewport.js b/apps/documenteditor/main/app/controller/Viewport.js index 80e01e5c5..ae4636adb 100644 --- a/apps/documenteditor/main/app/controller/Viewport.js +++ b/apps/documenteditor/main/app/controller/Viewport.js @@ -153,6 +153,8 @@ define([ Common.NotificationCenter.on('app:face', this.onAppShowed.bind(this)); Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); + Common.NotificationCenter.on('uitheme:changed', this.onThemeChanged.bind(this)); + Common.NotificationCenter.on('contenttheme:dark', this.onContentThemeChangedToDark.bind(this)); }, onAppShowed: function (config) { @@ -248,6 +250,14 @@ define([ if (!config.isEdit) mnuitemHideRulers.hide(); + me.header.menuItemsDarkMode = new Common.UI.MenuItem({ + caption: 'Dark mode', + checkable: true, + checked: Common.UI.Themes.isContentThemeDark(), + disabled: !Common.UI.Themes.isDarkTheme(), + value: 'mode:dark' + }); + me.header.mnuitemFitPage = new Common.UI.MenuItem({ caption: me.textFitPage, checkable: true, @@ -286,6 +296,8 @@ define([ mnuitemHideStatusBar, mnuitemHideRulers, {caption:'--'}, + me.header.menuItemsDarkMode, + {caption:'--'}, me.header.mnuitemFitPage, me.header.mnuitemFitWidth, me.header.mnuZoom, @@ -314,6 +326,7 @@ define([ })).on('click', _on_btn_zoom.bind(me, 'up')); me.header.btnOptions.menu.on('item:click', me.onOptionsItemClick.bind(this)); + me.header.btnContentMode.setDisabled(!Common.UI.Themes.isDarkTheme()); } }, @@ -354,6 +367,25 @@ define([ this.api.Resize(); }, + onThemeChanged: function (id) { + var menuItem = this.header.menuItemsDarkMode; + if ( !Common.UI.Themes.isDarkTheme() ) { + Common.Utils.InternalSettings.set("de-mode-dark", menuItem.isChecked()); + + menuItem.setChecked(false); + menuItem.setDisabled(true); + } else { + menuItem.setChecked(Common.Utils.InternalSettings.get("de-mode-dark")); + menuItem.setDisabled(false); + } + + this.header.btnContentMode.setDisabled(!Common.UI.Themes.isDarkTheme()); + }, + + onContentThemeChangedToDark: function (isdark) { + this.header.menuItemsDarkMode.setChecked(isdark, true); + }, + onWindowResize: function(e) { this.onLayoutChanged('window'); Common.NotificationCenter.trigger('window:resize'); @@ -400,6 +432,7 @@ define([ Common.NotificationCenter.trigger('edit:complete', me.header); break; case 'advanced': me.header.fireEvent('file:settings', me.header); break; + case 'mode:dark': Common.UI.Themes.toggleContentTheme(); break; } }, From 4a706880e8bdbceaa6bdbe2503003bce0b3b103e Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 2 Jul 2021 17:29:06 +0300 Subject: [PATCH 202/376] Add translation --- apps/documenteditor/main/locale/en.json | 1 + apps/presentationeditor/main/locale/en.json | 1 + apps/spreadsheeteditor/main/locale/en.json | 1 + 3 files changed, 3 insertions(+) diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 22135ced5..92048ca45 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -860,6 +860,7 @@ "DE.Controllers.Main.warnNoLicense": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", "DE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", "DE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "DE.Controllers.Main.textDisconnect": "Connection is lost", "DE.Controllers.Navigation.txtBeginning": "Beginning of document", "DE.Controllers.Navigation.txtGotoBeginning": "Go to the beginning of the document", "DE.Controllers.Statusbar.textHasChanges": "New changes have been tracked", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 922388c7c..4ef65a7f5 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -729,6 +729,7 @@ "PE.Controllers.Main.warnNoLicense": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", "PE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", "PE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "PE.Controllers.Main.textDisconnect": "Connection is lost", "PE.Controllers.Statusbar.zoomText": "Zoom {0}%", "PE.Controllers.Toolbar.confirmAddFontName": "The font you are going to save is not available on the current device.
    The text style will be displayed using one of the system fonts, the saved font will be used when it is available.
    Do you want to continue?", "PE.Controllers.Toolbar.textAccent": "Accents", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 06340e575..5793314d5 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -998,6 +998,7 @@ "SSE.Controllers.Main.warnNoLicense": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", "SSE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", "SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "SSE.Controllers.Main.textDisconnect": "Connection is lost", "SSE.Controllers.Print.strAllSheets": "All Sheets", "SSE.Controllers.Print.textFirstCol": "First column", "SSE.Controllers.Print.textFirstRow": "First row", From b154777f5a37ef91f9dafba991ba50ee5f1cbd12 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 2 Jul 2021 17:49:53 +0300 Subject: [PATCH 203/376] [mobile] Fix user name in comments (2) --- .../lib/controller/collaboration/Comments.jsx | 18 +++++++++--------- .../lib/controller/collaboration/Review.jsx | 5 +++-- apps/common/mobile/lib/store/comments.js | 1 + apps/common/mobile/lib/store/users.js | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Comments.jsx b/apps/common/mobile/lib/controller/collaboration/Comments.jsx index b9f9d9d5d..db68b4ff1 100644 --- a/apps/common/mobile/lib/controller/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Comments.jsx @@ -44,9 +44,7 @@ const dateToLocaleTimeString = (date) => { return (date.getMonth() + 1) + '/' + (date.getDate()) + '/' + date.getFullYear() + ' ' + format(date); }; const parseUserName = name => { - return ( - Common.Utils.String.htmlEncode(AscCommon.UserInfoParser.getParsedName(name)) - ) + return AscCommon.UserInfoParser.getParsedName(name); }; //end utils @@ -129,11 +127,13 @@ class CommentsController extends Component { let user = this.usersStore.searchUserById(data.asc_getUserId()); const name = data.asc_getUserName(); + const parsedName = parseUserName(name); changeComment.comment = data.asc_getText(); changeComment.userId = data.asc_getUserId(); changeComment.userName = name; - changeComment.parsedName = parseUserName(name); + changeComment.parsedName = Common.Utils.String.htmlEncode(parsedName); + changeComment.userInitials = this.usersStore.getInitials(parsedName); changeComment.userColor = (user) ? user.asc_getColor() : null; changeComment.resolved = data.asc_getSolved(); changeComment.quote = data.asc_getQuoteText(); @@ -158,7 +158,7 @@ class CommentsController extends Component { ind: i, userId: data.asc_getReply(i).asc_getUserId(), userName: userName, - parsedName: parsedName, + parsedName: Common.Utils.String.htmlEncode(parsedName), userColor: (user) ? user.asc_getColor() : null, date: dateToLocaleTimeString(dateReply), reply: data.asc_getReply(i).asc_getText(), @@ -186,7 +186,7 @@ class CommentsController extends Component { uid : id, userId : data.asc_getUserId(), userName : userName, - parsedName : parsedName, + parsedName : Common.Utils.String.htmlEncode(parsedName), userColor : (user) ? user.asc_getColor() : null, date : dateToLocaleTimeString(date), quote : data.asc_getQuoteText(), @@ -224,7 +224,7 @@ class CommentsController extends Component { ind : i, userId : data.asc_getReply(i).asc_getUserId(), userName : userName, - parsedName : parsedName, + parsedName : Common.Utils.String.htmlEncode(parsedName), userColor : (user) ? user.asc_getColor() : null, date : dateToLocaleTimeString(date), reply : data.asc_getReply(i).asc_getText(), @@ -267,7 +267,7 @@ class AddCommentController extends Component { } const name = parseUserName(this.currentUser.asc_getUserName()); return { - name: name, + name: Common.Utils.String.htmlEncode(name), initials: this.props.users.getInitials(name), color: this.currentUser.asc_getColor() }; @@ -311,7 +311,7 @@ class EditCommentController extends Component { this.currentUser = this.props.users.currentUser; const name = parseUserName(this.currentUser.asc_getUserName()); return { - name: name, + name: Common.Utils.String.htmlEncode(name), initials: this.props.users.getInitials(name), color: this.currentUser.asc_getColor() }; diff --git a/apps/common/mobile/lib/controller/collaboration/Review.jsx b/apps/common/mobile/lib/controller/collaboration/Review.jsx index d8a42eaf7..830ab10de 100644 --- a/apps/common/mobile/lib/controller/collaboration/Review.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Review.jsx @@ -468,13 +468,14 @@ class ReviewChange extends Component { let change; let goto = false; if (arrChangeReview.length > 0) { + const name = AscCommon.UserInfoParser.getParsedName(arrChangeReview[0].user); change = { date: arrChangeReview[0].date, user: arrChangeReview[0].user, - userName: Common.Utils.String.htmlEncode(AscCommon.UserInfoParser.getParsedName(arrChangeReview[0].user)), + userName: Common.Utils.String.htmlEncode(name), color: arrChangeReview[0].userColor.get_hex(), text: arrChangeReview[0].changeText, - initials: this.props.users.getInitials(arrChangeReview[0].user), + initials: this.props.users.getInitials(name), editable: arrChangeReview[0].editable }; goto = arrChangeReview[0].goto; diff --git a/apps/common/mobile/lib/store/comments.js b/apps/common/mobile/lib/store/comments.js index 5fea1e057..8163b1917 100644 --- a/apps/common/mobile/lib/store/comments.js +++ b/apps/common/mobile/lib/store/comments.js @@ -71,6 +71,7 @@ export class storeComments { comment.userId = changeComment.userId; comment.userName = changeComment.userName; comment.parsedName = changeComment.parsedName; + comment.userInitials = changeComment.userInitials; comment.userColor = changeComment.userColor; comment.resolved = changeComment.resolved; comment.quote = changeComment.quote; diff --git a/apps/common/mobile/lib/store/users.js b/apps/common/mobile/lib/store/users.js index 776c6e408..b13152b94 100644 --- a/apps/common/mobile/lib/store/users.js +++ b/apps/common/mobile/lib/store/users.js @@ -52,7 +52,7 @@ export class storeUsers { } getInitials (name) { - const fio = AscCommon.UserInfoParser.getParsedName(name).split(' '); + const fio = name.split(' '); let initials = fio[0].substring(0, 1).toUpperCase(); for (let i = fio.length-1; i>0; i--) { if (fio[i][0]!=='(' && fio[i][0]!==')') { From 871f8af3528f048e6f73491782d1ed535d580dd1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 2 Jul 2021 18:46:09 +0300 Subject: [PATCH 204/376] [DE] Add options for picture forms --- .../main/app/template/FormSettings.template | 11 +++ .../main/app/view/FormSettings.js | 69 ++++++++++++++++++- 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/apps/documenteditor/main/app/template/FormSettings.template b/apps/documenteditor/main/app/template/FormSettings.template index d8edb97e0..e43b4b60e 100644 --- a/apps/documenteditor/main/app/template/FormSettings.template +++ b/apps/documenteditor/main/app/template/FormSettings.template @@ -72,6 +72,17 @@
    + + + +
    + + + + +
    + +
    diff --git a/apps/documenteditor/main/app/view/FormSettings.js b/apps/documenteditor/main/app/view/FormSettings.js index 85e7d9343..1e7f0a893 100644 --- a/apps/documenteditor/main/app/view/FormSettings.js +++ b/apps/documenteditor/main/app/view/FormSettings.js @@ -343,6 +343,29 @@ define([ } }, this)); + this.chAspect = new Common.UI.CheckBox({ + el: $markup.findById('#form-chb-aspect'), + labelText: this.textAspect + }); + this.chAspect.on('change', this.onChAspect.bind(this)); + this.lockedControls.push(this.chAspect); + + this.cmbScale = new Common.UI.ComboBox({ + el: $markup.findById('#form-combo-scale'), + cls: 'input-group-nr', + menuStyle: 'min-width: 100%;', + editable: false, + data: [{ displayValue: this.textAlways, value: Asc.c_oAscPictureFormScaleFlag.Always }, + { displayValue: this.textNever, value: Asc.c_oAscPictureFormScaleFlag.Never }, + { displayValue: this.textTooBig, value: Asc.c_oAscPictureFormScaleFlag.Bigger }, + { displayValue: this.textTooSmall, value: Asc.c_oAscPictureFormScaleFlag.Smaller }] + }); + this.cmbScale.setValue(Asc.c_oAscPictureFormScaleFlag.Always); + this.lockedControls.push(this.cmbScale); + this.cmbScale.on('selected', this.onScaleChanged.bind(this)); + this.cmbScale.on('changed:after', this.onScaleChanged.bind(this)); + this.cmbScale.on('hide:after', this.onHideMenus.bind(this)); + this.updateMetricUnit(); this.UpdateThemeColors(); }, @@ -505,6 +528,28 @@ define([ } }, + onChAspect: function(field, newValue, oldValue, eOpts){ + if (this.api && !this._noApply) { + var props = this._originalProps || new AscCommon.CContentControlPr(); + var pictPr = this._originalPictProps || new AscCommon.CSdtPictureFormPr(); + pictPr.put_ConstantProportions(field.getValue()=='checked'); + props.put_PictureFormPr(pictPr); + this.api.asc_SetContentControlProperties(props, this.internalId); + this.fireEvent('editcomplete', this); + } + }, + + onScaleChanged: function(combo, record) { + if (this.api && !this._noApply) { + var props = this._originalProps || new AscCommon.CContentControlPr(); + var pictPr = this._originalPictProps || new AscCommon.CSdtPictureFormPr(); + pictPr.put_ScaleFlag(record.value); + props.put_PictureFormPr(pictPr); + this.api.asc_SetContentControlProperties(props, this.internalId); + this.fireEvent('editcomplete', this); + } + }, + onGroupKeyChanged: function(combo, record) { if (this.api && !this._noApply) { var props = this._originalProps || new AscCommon.CContentControlPr(); @@ -790,6 +835,22 @@ define([ } } + var pictPr = props.get_PictureFormPr(); + if (pictPr) { + this._originalPictProps = pictPr; + val = pictPr.get_ConstantProportions(); + if ( this._state.Aspect!==val ) { + this.chAspect.setValue(!!val, true); + this._state.Aspect=val; + } + + val = pictPr.get_ScaleFlag(); + if (this._state.scaleFlag!==val) { + this.cmbScale.setValue(val); + this._state.scaleFlag=val; + } + } + var formTextPr = props.get_TextFormPr(); if (formTextPr) { this._originalTextFormProps = formTextPr; @@ -1021,7 +1082,13 @@ define([ textFixed: 'Fixed size field', textRequired: 'Required', textAutofit: 'AutoFit', - textMulti: 'Multiline field' + textMulti: 'Multiline field', + textAspect: 'Lock aspect ratio', + textAlways: 'Always', + textNever: 'Never', + textTooBig: 'Image is Too Big', + textTooSmall: 'Image is Too Small', + textScale: 'When to scale' }, DE.Views.FormSettings || {})); }); \ No newline at end of file From 6e475b9e90325872d74982683e4c37296f1718aa Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 2 Jul 2021 19:20:59 +0300 Subject: [PATCH 205/376] [mobile] Fix context menu --- apps/common/mobile/lib/controller/ContextMenu.jsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/common/mobile/lib/controller/ContextMenu.jsx b/apps/common/mobile/lib/controller/ContextMenu.jsx index ef6f5f897..c5b580e22 100644 --- a/apps/common/mobile/lib/controller/ContextMenu.jsx +++ b/apps/common/mobile/lib/controller/ContextMenu.jsx @@ -18,6 +18,7 @@ class ContextMenuController extends Component { extraItems: [] }; + this.fastCoAuthTips = []; this.onMenuItemClick = this.onMenuItemClick.bind(this); this.onMenuClosed = this.onMenuClosed.bind(this); this.onActionClosed = this.onActionClosed.bind(this); @@ -161,9 +162,6 @@ class ContextMenuController extends Component { /** coauthoring begin **/ const tipHeight = 20; - if (!this.fastCoAuthTips) { - this.fastCoAuthTips = []; - } let src; for (let i=0; i Date: Fri, 2 Jul 2021 19:21:25 +0300 Subject: [PATCH 206/376] [DE] Add translation --- apps/documenteditor/main/locale/en.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 2b63f76eb..9aa7528bf 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -1770,6 +1770,12 @@ "DE.Views.FormSettings.textWidth": "Cell width", "DE.Views.FormSettings.textAutofit": "AutoFit", "DE.Views.FormSettings.textMulti": "Multiline field", + "DE.Views.FormSettings.textAspect": "Lock aspect ratio", + "DE.Views.FormSettings.textAlways": "Always", + "DE.Views.FormSettings.textNever": "Never", + "DE.Views.FormSettings.textTooBig": "Image is Too Big", + "DE.Views.FormSettings.textTooSmall": "Image is Too Small", + "DE.Views.FormSettings.textScale": "When to scale", "DE.Views.FormsTab.capBtnCheckBox": "Checkbox", "DE.Views.FormsTab.capBtnComboBox": "Combo Box", "DE.Views.FormsTab.capBtnDropDown": "Dropdown", From 35ed5979003909afdaa1e75166d551982de8dfa9 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Fri, 2 Jul 2021 20:47:58 +0300 Subject: [PATCH 207/376] [SSE mobile] Fix Bug 48032 --- .../mobile/src/controller/edit/EditCell.jsx | 32 ++++++-- .../mobile/src/view/edit/EditCell.jsx | 73 +++++++------------ 2 files changed, 52 insertions(+), 53 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx b/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx index a54d9ec07..8554350ce 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx @@ -1,12 +1,33 @@ import React, {Component} from 'react'; import { f7 } from 'framework7-react'; import {Device} from '../../../../../common/mobile/utils/device'; +import {observer, inject} from "mobx-react"; import { EditCell } from '../../view/edit/EditCell'; class EditCellController extends Component { constructor (props) { super(props); + this.dateFormats = this.initFormats(Asc.c_oAscNumFormatType.Date, 38822); + this.timeFormats = this.initFormats(Asc.c_oAscNumFormatType.Time, 1.534); + } + + initFormats(type, exampleVal) { + const api = Common.EditorApi.get(); + let info = new Asc.asc_CFormatCellsInfo(); + + info.asc_setType(type); + info.asc_setDecimalPlaces(0); + info.asc_setSeparator(false); + + let formatsArr = api.asc_getFormatCells(info), + data = []; + + formatsArr.forEach(function(item) { + data.push({value: item, displayValue: api.asc_getLocaleExample(item, exampleVal)}); + }); + + return data; } toggleBold(value) { @@ -117,12 +138,6 @@ class EditCellController extends Component { } onCellFormat(format) { - const api = Common.EditorApi.get(); - // let type = decodeURIComponent(atob(value)); - api.asc_setCellFormat(format); - } - - onCurrencyCellFormat(format) { const api = Common.EditorApi.get(); api.asc_setCellFormat(format); } @@ -187,11 +202,12 @@ class EditCellController extends Component { onCellFormat={this.onCellFormat} onTextOrientationChange={this.onTextOrientationChange} onBorderStyle={this.onBorderStyle} - onCurrencyCellFormat={this.onCurrencyCellFormat} onAccountingCellFormat={this.onAccountingCellFormat} + dateFormats={this.dateFormats} + timeFormats={this.timeFormats} /> ) } } -export default EditCellController; \ No newline at end of file +export default inject("storeCellSettings")(observer(EditCellController)); \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx b/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx index 3a48110e8..282238517 100644 --- a/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx @@ -1,4 +1,4 @@ -import React, {Fragment, useState} from 'react'; +import React, {Fragment, useState, useEffect} from 'react'; import {observer, inject} from "mobx-react"; import {f7, List, ListItem, Icon, Row, Button, Page, Navbar, Segmented, BlockTitle, NavRight, Link, Toggle} from 'framework7-react'; import { useTranslation } from 'react-i18next'; @@ -90,7 +90,9 @@ const EditCell = props => { {!isAndroid ? : null @@ -777,17 +779,19 @@ const PageFormatCell = props => { @@ -851,19 +855,19 @@ const PageCurrencyFormatCell = props => { props.onCurrencyCellFormat('[$$-409]#,##0.00')}> + onClick={() => props.onCellFormat('[$$-409]#,##0.00')}> props.onCurrencyCellFormat('#,##0.00\ [$€-407]')}> + onClick={() => props.onCellFormat('#,##0.00\ [$€-407]')}> props.onCurrencyCellFormat('[$£-809]#,##0.00')}> + onClick={() => props.onCellFormat('[$£-809]#,##0.00')}> props.onCurrencyCellFormat('#,##0.00\ [$₽-419]')}> + onClick={() => props.onCellFormat('#,##0.00\ [$₽-419]')}> props.onCurrencyCellFormat('[$¥-411]#,##0.00')}> + onClick={() => props.onCellFormat('[$¥-411]#,##0.00')}> @@ -873,6 +877,7 @@ const PageCurrencyFormatCell = props => { const PageDateFormatCell = props => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); + const dateFormats = props.dateFormats; return ( @@ -884,26 +889,12 @@ const PageDateFormatCell = props => { } - props.onCellFormat('TU0tZGQteXk=')}> - props.onCellFormat('TU0tZGQteXl5eQ==')}> - - props.onCellFormat('ZGQtTU0teXk=')}> - - props.onCellFormat('ZGQtTU0teXl5eQ==')}> - - props.onCellFormat('ZGQtTU1NLXl5eXk=')}> - - props.onCellFormat('ZGQtTU1N')}> - - props.onCellFormat('TU1NLXl5')}> - + {dateFormats.map((format, index) => { + return ( + props.onCellFormat(format.value)}> + ) + })} ) @@ -912,6 +903,7 @@ const PageDateFormatCell = props => { const PageTimeFormatCell = props => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); + const timeFormats = props.timeFormats; return ( @@ -923,21 +915,12 @@ const PageTimeFormatCell = props => { } - props.onCellFormat('aCUzQW1tJTNCJTQw')}> - - props.onCellFormat('aCUzQW1tJTNBc3MlM0IlNDA=')}> - - props.onCellFormat('aCUzQW1tJTIwQU0lMkZQTSUzQiU0MA==')}> - - props.onCellFormat('aCUzQW1tJTNBc3MlMjBBTSUyRlBNJTNCJTQw')}> - - props.onCellFormat('JTVCaCU1RCUzQW1tJTNBc3MlM0IlNDA=')}> - + {timeFormats.map((format, index) => { + return ( + props.onCellFormat(format.value)}> + ) + })} ) From 292a517152b59e8eebf638ee32b109f4ece25cc1 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Sat, 3 Jul 2021 16:37:22 +0300 Subject: [PATCH 208/376] [SSE mobile] Correct in edit cell --- .../mobile/src/controller/edit/EditCell.jsx | 6 +----- apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx b/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx index 8554350ce..37fd07f14 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/edit/EditCell.jsx @@ -1,8 +1,4 @@ import React, {Component} from 'react'; -import { f7 } from 'framework7-react'; -import {Device} from '../../../../../common/mobile/utils/device'; -import {observer, inject} from "mobx-react"; - import { EditCell } from '../../view/edit/EditCell'; class EditCellController extends Component { @@ -210,4 +206,4 @@ class EditCellController extends Component { } } -export default inject("storeCellSettings")(observer(EditCellController)); \ No newline at end of file +export default EditCellController; \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx b/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx index 282238517..c2980ee4a 100644 --- a/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/edit/EditCell.jsx @@ -1,4 +1,4 @@ -import React, {Fragment, useState, useEffect} from 'react'; +import React, {Fragment, useState} from 'react'; import {observer, inject} from "mobx-react"; import {f7, List, ListItem, Icon, Row, Button, Page, Navbar, Segmented, BlockTitle, NavRight, Link, Toggle} from 'framework7-react'; import { useTranslation } from 'react-i18next'; From c738f330551dff8f7889363c93ff76ddc0cf3d36 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sun, 4 Jul 2021 15:40:17 +0300 Subject: [PATCH 209/376] [DE] FIx Bug 51065 --- apps/common/main/resources/less/toolbar.less | 6 ++++++ .../main/app/controller/Toolbar.js | 17 ++++++++++++++--- apps/documenteditor/main/app/view/FormsTab.js | 4 ++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/apps/common/main/resources/less/toolbar.less b/apps/common/main/resources/less/toolbar.less index 1efe12759..f7571b713 100644 --- a/apps/common/main/resources/less/toolbar.less +++ b/apps/common/main/resources/less/toolbar.less @@ -224,6 +224,12 @@ margin-left: 10px; } } + + &.no-group-mask { + .elset { + position: relative; + } + } } .elset { diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index a48fe02ad..efa107fc5 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -3051,9 +3051,11 @@ define([ var toolbar = this.toolbar; if(disable) { if (reviewmode) { - mask = $("
    ").appendTo(toolbar.$el.find('.toolbar section.panel .group:not(.no-mask):not(.no-group-mask.review)')); + mask = $("
    ").appendTo(toolbar.$el.find('.toolbar section.panel .group:not(.no-mask):not(.no-group-mask.review):not(.no-group-mask.inner-elset)')); + mask = $("
    ").appendTo(toolbar.$el.find('.toolbar section.panel .group.no-group-mask.inner-elset .elset')); } else if (fillformmode) { - mask = $("
    ").appendTo(toolbar.$el.find('.toolbar section.panel .group:not(.no-mask):not(.no-group-mask.form-view)')); + mask = $("
    ").appendTo(toolbar.$el.find('.toolbar section.panel .group:not(.no-mask):not(.no-group-mask.form-view):not(.no-group-mask.inner-elset)')); + mask = $("
    ").appendTo(toolbar.$el.find('.toolbar section.panel .group.no-group-mask.inner-elset .elset:not(.no-group-mask.form-view)')); } else mask = $("
    ").appendTo(toolbar.$el.find('.toolbar')); } else { @@ -3061,10 +3063,19 @@ define([ } $('.no-group-mask').each(function(index, item){ var $el = $(item); - if ($el.find('.toolbar-group-mask').length>0) + if ($el.find('> .toolbar-group-mask').length>0) $el.css('opacity', 0.4); else { $el.css('opacity', reviewmode || fillformmode || !disable ? 1 : 0.4); + $el.find('.elset').each(function(index, elitem){ + var $elset = $(elitem); + if ($elset.find('> .toolbar-group-mask').length>0) { + $elset.css('opacity', 0.4); + } else { + $elset.css('opacity', reviewmode || fillformmode || !disable ? 1 : 0.4); + } + $el.css('opacity', 1); + }); } }); diff --git a/apps/documenteditor/main/app/view/FormsTab.js b/apps/documenteditor/main/app/view/FormsTab.js index 2437a1451..ffe9c70a3 100644 --- a/apps/documenteditor/main/app/view/FormsTab.js +++ b/apps/documenteditor/main/app/view/FormsTab.js @@ -58,8 +58,8 @@ define([ '' + '
    ' + '' + - '
    - {!viewMode && + {!viewMode && reply.editable &&
    {setComment(comment); setReply(reply); openActionReply(true);}} @@ -799,7 +799,7 @@ const CommentList = inject("storeComments", "storeAppOptions")(observer(({storeC
    {!viewMode &&
    -
    {onResolveComment(comment);}}>
    +
    {onResolveComment(comment);}}>{comment.editable && }
    {openActionComment(true);}} >
    @@ -827,7 +827,7 @@ const CommentList = inject("storeComments", "storeAppOptions")(observer(({storeC
    {reply.date}
    - {!viewMode && + {!viewMode && reply.editable &&
    {setReply(reply); openActionReply(true);}} From 203437718764c91788154ca7286204f04a46211a Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Wed, 7 Jul 2021 15:17:55 +0300 Subject: [PATCH 224/376] [DE mobile] Bug 48388 --- .../mobile/src/controller/Main.jsx | 9 ++- .../mobile/src/controller/add/AddOther.jsx | 29 ++++--- .../mobile/src/store/mainStore.js | 2 + .../mobile/src/view/add/Add.jsx | 81 ++++++++++--------- .../mobile/src/view/add/AddOther.jsx | 37 ++++++--- 5 files changed, 101 insertions(+), 57 deletions(-) diff --git a/apps/documenteditor/mobile/src/controller/Main.jsx b/apps/documenteditor/mobile/src/controller/Main.jsx index 4bf67dcf4..471070499 100644 --- a/apps/documenteditor/mobile/src/controller/Main.jsx +++ b/apps/documenteditor/mobile/src/controller/Main.jsx @@ -26,7 +26,8 @@ import PluginsController from '../../../../common/mobile/lib/controller/Plugins. "storeTableSettings", "storeDocumentInfo", "storeChartSettings", - "storeApplicationSettings" + "storeApplicationSettings", + "storeLinkSettings" ) class MainController extends Component { constructor(props) { @@ -572,6 +573,12 @@ class MainController extends Component { storeTextSettings.resetBackgroundColor(color); }); + // link settings + const storeLinkSettings = this.props.storeLinkSettings; + this.api.asc_registerCallback('asc_onCanAddHyperlink', (value) => { + storeLinkSettings.canAddHyperlink(value); + }); + //paragraph settings EditorUIController.initEditorStyles && EditorUIController.initEditorStyles(this.props.storeParagraphSettings); diff --git a/apps/documenteditor/mobile/src/controller/add/AddOther.jsx b/apps/documenteditor/mobile/src/controller/add/AddOther.jsx index 3d5ff6b15..e4de3e84f 100644 --- a/apps/documenteditor/mobile/src/controller/add/AddOther.jsx +++ b/apps/documenteditor/mobile/src/controller/add/AddOther.jsx @@ -242,16 +242,25 @@ class AddOtherController extends Component { render () { return ( - ) } diff --git a/apps/documenteditor/mobile/src/store/mainStore.js b/apps/documenteditor/mobile/src/store/mainStore.js index 57fa6ee88..d9a85af99 100644 --- a/apps/documenteditor/mobile/src/store/mainStore.js +++ b/apps/documenteditor/mobile/src/store/mainStore.js @@ -9,6 +9,7 @@ import {storeImageSettings} from "./imageSettings"; import {storeTableSettings} from "./tableSettings"; import {storeChartSettings} from "./chartSettings"; import {storeDocumentInfo} from "./documentInfo"; +import {storeLinkSettings} from './linkSettings'; import {storeApplicationSettings} from './applicationSettings'; import {storeAppOptions} from "./appOptions"; import {storePalette} from "./palette"; @@ -21,6 +22,7 @@ export const stores = { storeDocumentSettings: new storeDocumentSettings(), users: new storeUsers(), storeTextSettings: new storeTextSettings(), + storeLinkSettings: new storeLinkSettings(), storeParagraphSettings: new storeParagraphSettings(), storeShapeSettings: new storeShapeSettings(), storeChartSettings: new storeChartSettings(), diff --git a/apps/documenteditor/mobile/src/view/add/Add.jsx b/apps/documenteditor/mobile/src/view/add/Add.jsx index f793ba4b6..6538f5a21 100644 --- a/apps/documenteditor/mobile/src/view/add/Add.jsx +++ b/apps/documenteditor/mobile/src/view/add/Add.jsx @@ -84,45 +84,44 @@ const AddTabs = inject("storeFocusObjects")(observer(({storeFocusObjects, showPa const options = storeFocusObjects.settings; const paragraphObj = storeFocusObjects.paragraphObject; - let need_disable = false, - can_add_table = true, - can_add_image = true, - paragraph_locked = false, - in_footnote = false, - in_control = false, - control_props = false, - lock_type = false, - control_plain = false, - content_locked = false, - rich_del_lock = false, - rich_edit_lock = false, - plain_del_lock = false, - plain_edit_lock = false; + let needDisable = false, + canAddTable = true, + canAddImage = true, + paragraphLocked = false, + inFootnote = false, + inControl = false, + controlProps = false, + lockType = false, + controlPlain = false, + contentLocked = false, + richDelLock = false, + richEditLock = false, + plainDelLock = false, + plainEditLock = false; if(paragraphObj) { - can_add_table = paragraphObj.get_CanAddTable(); - can_add_image = paragraphObj.get_CanAddImage(); - paragraph_locked = paragraphObj.get_Locked(); + canAddTable = paragraphObj.get_CanAddTable(); + canAddImage = paragraphObj.get_CanAddImage(); + paragraphLocked = paragraphObj.get_Locked(); - in_footnote = api.asc_IsCursorInFootnote() || api.asc_IsCursorInEndnote(); - in_control = api.asc_IsContentControl(); + inFootnote = api.asc_IsCursorInFootnote() || api.asc_IsCursorInEndnote(); + inControl = api.asc_IsContentControl(); - control_props = in_control ? api.asc_GetContentControlProperties() : null; - lock_type = (in_control && control_props) ? control_props.get_Lock() : Asc.c_oAscSdtLockType.Unlocked; - control_plain = (in_control && control_props) ? (control_props.get_ContentControlType() == Asc.c_oAscSdtLevelType.Inline) : false; - content_locked = lock_type == Asc.c_oAscSdtLockType.SdtContentLocked || lock_type == Asc.c_oAscSdtLockType.ContentLocked; + controlProps = inControl ? api.asc_GetContentControlProperties() : null; + lockType = (inControl && controlProps) ? controlProps.get_Lock() : Asc.c_oAscSdtLockType.Unlocked; + controlPlain = (inControl && controlProps) ? (controlProps.get_ContentControlType() == Asc.c_oAscSdtLevelType.Inline) : false; + contentLocked = lockType == Asc.c_oAscSdtLockType.SdtContentLocked || lockType == Asc.c_oAscSdtLockType.ContentLocked; - rich_del_lock = paragraphObj ? !paragraphObj.can_DeleteBlockContentControl() : false; - rich_edit_lock = paragraphObj ? !paragraphObj.can_EditBlockContentControl() : false; - plain_del_lock = paragraphObj ? !paragraphObj.can_DeleteInlineContentControl() : false; - plain_edit_lock = paragraphObj ? !paragraphObj.can_EditInlineContentControl() : false; + richDelLock = paragraphObj ? !paragraphObj.can_DeleteBlockContentControl() : false; + richEditLock = paragraphObj ? !paragraphObj.can_EditBlockContentControl() : false; + plainDelLock = paragraphObj ? !paragraphObj.can_DeleteInlineContentControl() : false; + plainEditLock = paragraphObj ? !paragraphObj.can_EditInlineContentControl() : false; } if (!showPanels && options.indexOf('text') > -1) { - need_disable = !can_add_table || control_plain || rich_edit_lock || plain_edit_lock || rich_del_lock || plain_del_lock; - // console.log(need_disable); + needDisable = !canAddTable || controlPlain || richEditLock || plainEditLock || richDelLock || plainDelLock; - if(!need_disable) { + if(!needDisable) { tabs.push({ caption: _t.textTable, id: 'add-table', @@ -132,10 +131,9 @@ const AddTabs = inject("storeFocusObjects")(observer(({storeFocusObjects, showPa } } if(!showPanels) { - need_disable = paragraph_locked || control_plain || content_locked || in_footnote; - // console.log(need_disable); + needDisable = paragraphLocked || controlPlain || contentLocked || inFootnote; - if(!need_disable) { + if(!needDisable) { tabs.push({ caption: _t.textShape, id: 'add-shape', @@ -145,10 +143,9 @@ const AddTabs = inject("storeFocusObjects")(observer(({storeFocusObjects, showPa } } if(!showPanels) { - need_disable = paragraph_locked || paragraphObj && !can_add_image || control_plain || rich_del_lock || plain_del_lock || content_locked; - // console.log(need_disable); + needDisable = paragraphLocked || paragraphObj && !canAddImage || controlPlain || richDelLock || plainDelLock || contentLocked; - if(!need_disable) { + if(!needDisable) { tabs.push({ caption: _t.textImage, id: 'add-image', @@ -162,7 +159,17 @@ const AddTabs = inject("storeFocusObjects")(observer(({storeFocusObjects, showPa caption: _t.textOther, id: 'add-other', icon: 'icon-add-other', - component: + component: + }); } if (showPanels && showPanels === 'link') { diff --git a/apps/documenteditor/mobile/src/view/add/AddOther.jsx b/apps/documenteditor/mobile/src/view/add/AddOther.jsx index 240e27521..90c4aa227 100644 --- a/apps/documenteditor/mobile/src/view/add/AddOther.jsx +++ b/apps/documenteditor/mobile/src/view/add/AddOther.jsx @@ -153,21 +153,39 @@ const PageFootnote = props => { const AddOther = props => { const { t } = useTranslation(); const _t = t('Add', {returnObjects: true}); - const storeFocusObjects = props.storeFocusObjects; + const storeLinkSettings = props.storeLinkSettings; + const canAddLink = storeLinkSettings.canAddLink; + let isShape = storeFocusObjects.settings.indexOf('shape') > -1, isText = storeFocusObjects.settings.indexOf('text') > -1, isChart = storeFocusObjects.settings.indexOf('chart') > -1; + let disabledAddLink = false, + disabledAddBreak = false, + disabledAddFootnote = false, + inFootnote = props.inFootnote, + inControl = props.inControl, + paragraphLocked = props.paragraphLocked, + controlPlain = props.controlPlain, + richDelLock = props.richDelLock, + richEditLock = props.richEditLock, + plainDelLock = props.plainDelLock, + plainEditLock = props.plainEditLock; + + disabledAddBreak = paragraphLocked || inFootnote || inControl || richEditLock || plainEditLock || richDelLock || plainDelLock; + disabledAddFootnote = paragraphLocked || controlPlain || richEditLock || plainEditLock; + disabledAddLink = paragraphLocked || !canAddLink; + return ( - {isText && { + {isText && { props.closeModal(); Common.Notifications.trigger('addcomment'); }}> } - {isText && @@ -178,15 +196,16 @@ const AddOther = props => { }}> - {(isShape || isChart) ? null : - [ - , - + + } + {(isShape || isChart) || (isText && disabledAddFootnote) ? null : { initFootnoteStartAt: props.initFootnoteStartAt }}> - ] + } ) }; -const AddOtherContainer = inject("storeComments","storeFocusObjects")(observer(AddOther)); +const AddOtherContainer = inject("storeComments","storeFocusObjects", "storeLinkSettings")(observer(AddOther)); export {AddOtherContainer as AddOther, PageNumber as PageAddNumber, From a1edc609b4e9edb2a21179bfea407fb9d1cd766d Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 7 Jul 2021 16:18:34 +0300 Subject: [PATCH 225/376] [DE] Fix Bug 50912 --- apps/documenteditor/main/app/controller/Toolbar.js | 3 +++ apps/documenteditor/main/app/view/Toolbar.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index efa107fc5..4975e0dcd 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -895,6 +895,8 @@ define([ if (need_disable != toolbar.btnColumns.isDisabled()) toolbar.btnColumns.setDisabled(need_disable); + toolbar.btnLineNumbers.setDisabled(in_image && in_para || this._state.lock_doc); + if (toolbar.listStylesAdditionalMenuItem && (frame_pr===undefined) !== toolbar.listStylesAdditionalMenuItem.isDisabled()) toolbar.listStylesAdditionalMenuItem.setDisabled(frame_pr===undefined); @@ -1761,6 +1763,7 @@ define([ switch (item.value) { case 0: + this._state.linenum = undefined; this.api.asc_SetLineNumbersProps(Asc.c_oAscSectionApplyType.Current, null); break; case 1: diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 534b5fad1..91a673d29 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -1006,7 +1006,7 @@ define([ ] }) }); - + this.toolbarControls.push(this.btnLineNumbers); this.btnClearStyle = new Common.UI.Button({ id: 'id-toolbar-btn-clearstyle', From ce9c49beaf7ca482099460d9e8d5f07fb4e61cf6 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Wed, 7 Jul 2021 18:31:44 +0300 Subject: [PATCH 226/376] [DE PE SSE] Fix resolved and sort comments --- apps/common/mobile/lib/controller/collaboration/Comments.jsx | 5 +++-- apps/common/mobile/lib/view/collaboration/Comments.jsx | 2 +- apps/documenteditor/mobile/src/store/applicationSettings.js | 2 ++ .../mobile/src/store/applicationSettings.js | 2 ++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Comments.jsx b/apps/common/mobile/lib/controller/collaboration/Comments.jsx index 068fa8d75..fa00c14f5 100644 --- a/apps/common/mobile/lib/controller/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Comments.jsx @@ -77,7 +77,7 @@ class CommentsController extends Component { const api = Common.EditorApi.get(); /** coauthoring begin **/ const isLiveCommenting = LocalStorage.getBool(`${window.editorType}-mobile-settings-livecomment`, true); - const resolved = LocalStorage.getBool(`${window.editorType}-settings-resolvedcomment`, true); + const resolved = LocalStorage.getBool(`${window.editorType}-settings-resolvedcomment`); this.storeApplicationSettings.changeDisplayComments(isLiveCommenting); this.storeApplicationSettings.changeDisplayResolved(resolved); isLiveCommenting ? api.asc_showComments(resolved) : api.asc_hideComments(); @@ -494,9 +494,10 @@ class ViewCommentsController extends Component { }); } const api = Common.EditorApi.get(); + api.asc_showComments(this.props.storeApplicationSettings.isResolvedComments); api.asc_changeComment(comment.uid, ascComment); - if(!this.props.storeApplicationSettings.isResolvedComments) { + if(this.props.storeApplicationSettings.isResolvedComments) { this.closeViewCurComments(); } } diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index 89975b234..cde91a273 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -633,7 +633,7 @@ const ViewComments = ({storeComments, storeAppOptions, onCommentMenuClick, onRes const viewMode = !storeAppOptions.canComments; const comments = storeComments.groupCollectionFilter || storeComments.collectionComments; - const sortComments = comments.length > 0 ? [...comments].sort((a, b) => a.time > b.time ? 1 : -1) : null; + const sortComments = comments.length > 0 ? [...comments].sort((a, b) => a.time > b.time ? -1 : 1) : null; const [clickComment, setComment] = useState(); const [commentActionsOpened, openActionComment] = useState(false); diff --git a/apps/documenteditor/mobile/src/store/applicationSettings.js b/apps/documenteditor/mobile/src/store/applicationSettings.js index 0cc34353f..df4c5f71b 100644 --- a/apps/documenteditor/mobile/src/store/applicationSettings.js +++ b/apps/documenteditor/mobile/src/store/applicationSettings.js @@ -51,6 +51,8 @@ export class storeApplicationSettings { } changeDisplayResolved(value) { + const api = Common.EditorApi.get(); + api.asc_showComments(value); this.isResolvedComments = value; } diff --git a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js index 558d87230..c0967025d 100644 --- a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js +++ b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js @@ -108,6 +108,8 @@ export class storeApplicationSettings { } changeDisplayResolved(value) { + const api = Common.EditorApi.get(); + api.asc_showComments(value); this.isResolvedComments = value; } From 1e0f45842ddbe73379de878ca58a57ed8b8afc39 Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 8 Jul 2021 09:59:37 +0300 Subject: [PATCH 227/376] Save settings resolvedcomment --- apps/common/mobile/lib/controller/collaboration/Comments.jsx | 2 +- apps/documenteditor/mobile/src/store/applicationSettings.js | 1 + apps/spreadsheeteditor/mobile/src/store/applicationSettings.js | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Comments.jsx b/apps/common/mobile/lib/controller/collaboration/Comments.jsx index fa00c14f5..09501790c 100644 --- a/apps/common/mobile/lib/controller/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Comments.jsx @@ -497,7 +497,7 @@ class ViewCommentsController extends Component { api.asc_showComments(this.props.storeApplicationSettings.isResolvedComments); api.asc_changeComment(comment.uid, ascComment); - if(this.props.storeApplicationSettings.isResolvedComments) { + if(!this.props.storeApplicationSettings.isResolvedComments) { this.closeViewCurComments(); } } diff --git a/apps/documenteditor/mobile/src/store/applicationSettings.js b/apps/documenteditor/mobile/src/store/applicationSettings.js index df4c5f71b..4fbd1c86f 100644 --- a/apps/documenteditor/mobile/src/store/applicationSettings.js +++ b/apps/documenteditor/mobile/src/store/applicationSettings.js @@ -54,6 +54,7 @@ export class storeApplicationSettings { const api = Common.EditorApi.get(); api.asc_showComments(value); this.isResolvedComments = value; + LocalStorage.setBool("de-settings-resolvedcomment", value); } changeMacrosSettings(value) { diff --git a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js index c0967025d..7b6c5c930 100644 --- a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js +++ b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js @@ -111,6 +111,7 @@ export class storeApplicationSettings { const api = Common.EditorApi.get(); api.asc_showComments(value); this.isResolvedComments = value; + LocalStorage.setBool("sse-settings-resolvedcomment", value); } changeRefStyle(value) { From 19581891400b4384898cbc6135903bbd07f5869b Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Thu, 8 Jul 2021 12:39:27 +0300 Subject: [PATCH 228/376] refactoring code --- .../mobile/src/controller/settings/ApplicationSettings.jsx | 2 +- apps/documenteditor/mobile/src/store/applicationSettings.js | 3 --- .../mobile/src/controller/settings/ApplicationSettings.jsx | 2 +- apps/spreadsheeteditor/mobile/src/store/applicationSettings.js | 3 --- 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/apps/documenteditor/mobile/src/controller/settings/ApplicationSettings.jsx b/apps/documenteditor/mobile/src/controller/settings/ApplicationSettings.jsx index b9cfc7d39..dbad0f696 100644 --- a/apps/documenteditor/mobile/src/controller/settings/ApplicationSettings.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/ApplicationSettings.jsx @@ -51,7 +51,7 @@ class ApplicationSettingsController extends Component { } switchDisplayResolved(value) { - const displayComments = LocalStorage.getBool("de-mobile-settings-livecomment"); + const displayComments = LocalStorage.getBool("de-mobile-settings-livecomment",true); if (displayComments) { Common.EditorApi.get().asc_showComments(value); LocalStorage.setBool("de-settings-resolvedcomment", value); diff --git a/apps/documenteditor/mobile/src/store/applicationSettings.js b/apps/documenteditor/mobile/src/store/applicationSettings.js index 4fbd1c86f..0cc34353f 100644 --- a/apps/documenteditor/mobile/src/store/applicationSettings.js +++ b/apps/documenteditor/mobile/src/store/applicationSettings.js @@ -51,10 +51,7 @@ export class storeApplicationSettings { } changeDisplayResolved(value) { - const api = Common.EditorApi.get(); - api.asc_showComments(value); this.isResolvedComments = value; - LocalStorage.setBool("de-settings-resolvedcomment", value); } changeMacrosSettings(value) { diff --git a/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx b/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx index df4028e75..92dd49864 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/settings/ApplicationSettings.jsx @@ -49,7 +49,7 @@ class ApplicationSettingsController extends Component { onChangeDisplayResolved(value) { const api = Common.EditorApi.get(); - let displayComments = LocalStorage.getBool("sse-mobile-settings-livecomment"); + let displayComments = LocalStorage.getBool("sse-mobile-settings-livecomment",true); if (displayComments) { api.asc_showComments(value); diff --git a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js index 7b6c5c930..558d87230 100644 --- a/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js +++ b/apps/spreadsheeteditor/mobile/src/store/applicationSettings.js @@ -108,10 +108,7 @@ export class storeApplicationSettings { } changeDisplayResolved(value) { - const api = Common.EditorApi.get(); - api.asc_showComments(value); this.isResolvedComments = value; - LocalStorage.setBool("sse-settings-resolvedcomment", value); } changeRefStyle(value) { From bda56a292bcd33d91713cc4251f82ee3804024d5 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Thu, 8 Jul 2021 14:15:16 +0300 Subject: [PATCH 229/376] [DE mobile] Fix Bug 48388 --- .../mobile/src/view/add/AddOther.jsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/documenteditor/mobile/src/view/add/AddOther.jsx b/apps/documenteditor/mobile/src/view/add/AddOther.jsx index 90c4aa227..7823f05e9 100644 --- a/apps/documenteditor/mobile/src/view/add/AddOther.jsx +++ b/apps/documenteditor/mobile/src/view/add/AddOther.jsx @@ -164,6 +164,7 @@ const AddOther = props => { let disabledAddLink = false, disabledAddBreak = false, disabledAddFootnote = false, + disabledAddPageNumber = false, inFootnote = props.inFootnote, inControl = props.inControl, paragraphLocked = props.paragraphLocked, @@ -176,6 +177,7 @@ const AddOther = props => { disabledAddBreak = paragraphLocked || inFootnote || inControl || richEditLock || plainEditLock || richDelLock || plainDelLock; disabledAddFootnote = paragraphLocked || controlPlain || richEditLock || plainEditLock; disabledAddLink = paragraphLocked || !canAddLink; + disabledAddPageNumber = controlPlain; return ( @@ -191,11 +193,13 @@ const AddOther = props => { }}> } - - - + {!disabledAddPageNumber && + + + + } {(isShape || isChart) || (isText && disabledAddBreak) ? null : Date: Thu, 8 Jul 2021 17:21:29 +0300 Subject: [PATCH 230/376] editing styles icon --- .../lib/controller/collaboration/Comments.jsx | 20 +++++++++---------- .../lib/view/collaboration/Comments.jsx | 4 ++-- .../mobile/resources/less/comments.less | 5 ++++- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Comments.jsx b/apps/common/mobile/lib/controller/collaboration/Comments.jsx index 09501790c..b90261b85 100644 --- a/apps/common/mobile/lib/controller/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Comments.jsx @@ -139,9 +139,9 @@ class CommentsController extends Component { changeComment.quote = data.asc_getQuoteText(); changeComment.time = date.getTime(); changeComment.date = dateToLocaleTimeString(date); - changeComment.editable = (this.appOptions.canEditComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(data.asc_getUserName()); - changeComment.removable = (this.appOptions.canDeleteComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(data.asc_getUserName()); - changeComment.hide = !AscCommon.UserInfoParser.canViewComment(data.asc_getUserName()); + changeComment.editable = (this.appOptions.canEditComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(name); + changeComment.removable = (this.appOptions.canDeleteComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(name); + changeComment.hide = !AscCommon.UserInfoParser.canViewComment(name); let dateReply = null; const replies = []; @@ -165,8 +165,8 @@ class CommentsController extends Component { reply: data.asc_getReply(i).asc_getText(), time: dateReply.getTime(), userInitials: this.usersStore.getInitials(parsedName), - editable: (this.appOptions.canEditComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(data.asc_getReply(i).asc_getUserName()), - removable: (this.appOptions.canDeleteComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(data.asc_getReply(i).asc_getUserName()) + editable: (this.appOptions.canEditComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(userName), + removable: (this.appOptions.canDeleteComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(userName) }); } changeComment.replies = replies; @@ -198,9 +198,9 @@ class CommentsController extends Component { replies : [], groupName : (groupName && groupName.length>1) ? groupName[1] : null, userInitials : this.usersStore.getInitials(parsedName), - editable : (this.appOptions.canEditComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(data.asc_getUserName()), - removable : (this.appOptions.canDeleteComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(data.asc_getUserName()), - hide : !AscCommon.UserInfoParser.canViewComment(data.asc_getUserName()), + editable : (this.appOptions.canEditComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(userName), + removable : (this.appOptions.canDeleteComments || (data.asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(userName), + hide : !AscCommon.UserInfoParser.canViewComment(userName), }; if (comment) { const replies = this.readSDKReplies(data); @@ -232,8 +232,8 @@ class CommentsController extends Component { reply : data.asc_getReply(i).asc_getText(), time : date.getTime(), userInitials : this.usersStore.getInitials(parsedName), - editable : (this.appOptions.canEditComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(data.asc_getReply(i).asc_getUserName()), - removable : (this.appOptions.canDeleteComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(data.asc_getReply(i).asc_getUserName()) + editable : (this.appOptions.canEditComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canEditComment(userName), + removable : (this.appOptions.canDeleteComments || (data.asc_getReply(i).asc_getUserId() === this.curUserId)) && AscCommon.UserInfoParser.canDeleteComment(userName) }); } } diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index cde91a273..eefe2aa6a 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -670,7 +670,7 @@ const ViewComments = ({storeComments, storeAppOptions, onCommentMenuClick, onRes
    {!viewMode &&
    -
    {onResolveComment(comment);}}>{comment.editable && }
    + {comment.editable &&
    {onResolveComment(comment);}}>
    }
    {setComment(comment); openActionComment(true);}} >
    @@ -799,7 +799,7 @@ const CommentList = inject("storeComments", "storeAppOptions")(observer(({storeC
    {!viewMode &&
    -
    {onResolveComment(comment);}}>{comment.editable && }
    + {comment.editable &&
    {onResolveComment(comment);}}>
    }
    {openActionComment(true);}} >
    diff --git a/apps/common/mobile/resources/less/comments.less b/apps/common/mobile/resources/less/comments.less index 4067b7a57..bf9b78181 100644 --- a/apps/common/mobile/resources/less/comments.less +++ b/apps/common/mobile/resources/less/comments.less @@ -56,8 +56,11 @@ padding-right: 16px; .right { display: flex; - justify-content: space-between; + justify-content: flex-end; width: 70px; + .comment-resolve { + margin-right: 10px; + } } } .reply-header { From defc1d8c8b9a24c970a221184da5a0f40f5e984c Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 8 Jul 2021 19:27:03 +0300 Subject: [PATCH 231/376] Change sorting icons --- apps/common/main/lib/view/Comments.js | 2 +- .../resources/img/toolbar/1.25x/btn-sorting.png | Bin 284 -> 183 bytes .../resources/img/toolbar/1.5x/btn-sorting.png | Bin 291 -> 188 bytes .../resources/img/toolbar/1.75x/btn-sorting.png | Bin 311 -> 193 bytes .../resources/img/toolbar/1x/btn-sorting.png | Bin 275 -> 178 bytes .../resources/img/toolbar/2x/btn-sorting.png | Bin 369 -> 193 bytes 6 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/view/Comments.js b/apps/common/main/lib/view/Comments.js index 7b009d63d..ae3f92bf7 100644 --- a/apps/common/main/lib/view/Comments.js +++ b/apps/common/main/lib/view/Comments.js @@ -328,7 +328,7 @@ define([ this.buttonSort = new Common.UI.Button({ parentEl: $('#comments-btn-sort', this.$el), cls: 'btn-toolbar', - iconCls: 'toolbar__icon btn-setmarkers', + iconCls: 'toolbar__icon btn-sorting', hint: this.textSort, menu: new Common.UI.Menu({ menuAlign: 'tr-br', diff --git a/apps/common/main/resources/img/toolbar/1.25x/btn-sorting.png b/apps/common/main/resources/img/toolbar/1.25x/btn-sorting.png index d75a5863edec3446c329c88d8d971f16d56e3010..f7a8ab65053b105de465f814569f617916f22c08 100644 GIT binary patch delta 104 zcmbQkw4HH6SfY=oi(^OytKrsyYzopr064-dU;qFB delta 206 zcmV;<05Si!0h|JmR)4WcL_t(|0qvFH3B(`_g

    wpd(~dH**w6@ghoo9c|SFTAL4o z1jP9GECn3Lc|94%WClunun5Zp`F8B>c?KH>=y_@zb9L{dz7cIBLndUvgbM zIU;A|_w#5M39Sp*M|Hzx{d{Ryw`{DU;VJ#RHLP2>WE-B|&t1d11%S1km9i8CMPJtu P00000NkvXXu0mjf?#VIQ delta 213 zcmV;`04o2y0iyztR)4rjL_t(|0qxV#3Bxc91kg+A02#rfW;2iCQCt}teU-FHB#V%H zV1mBHp$kAnME6$_pb8j!;b9&Z_>FUpRBeHgBNbl+F5o|WSDuwNtFkWr!AZe3;Fg#ZziUQU0^E+pr=H+#zRHuMW` zV|FJ2v%IZ#?K@>}ljIfjz-7$tBw&(PM&R~Mm?)uNHesR>I?oPEL`0E3i-lJ^0R%=#CL_t(|0qxX54uBvGMZt3aLn9Y33MtiunRSz{{)+$r01nnB zZhNeo`SYj`v8W9JRN2{>ZCjpgjIO|EvKv#fn+a07*qoM6N<$g7YCT#Q*>R delta 233 zcmVR)5S%L_t(|0qxY?2?HSz1mL-l0oq zkYk@b26q4=BBHwq*hCOm-~oDz!89gk+ApcBiN5(d+-s$+)sO6k|t z8qq7&{n!LMMj3-?nAtJYdZqNuYK`ud>V9m39ixoFG>q<;C1Sl&YOU7HUa9WKCfG5` zu7Wu)=4IreoS){^oE(d^N;c0bBnT(Rh9rK~{v|SUJW?<|&nhGcBgf}p;@3c#L3$|$ j%5pevhfs)!h}L-lHgahbgk`|R00000NkvXXu0mjffmUnd diff --git a/apps/common/main/resources/img/toolbar/1x/btn-sorting.png b/apps/common/main/resources/img/toolbar/1x/btn-sorting.png index f4803ab06fd00021470ba20ae7186d402e88ce43..81778258bdf93761c4f26cb22ef0a4a68cedd1c3 100644 GIT binary patch delta 99 zcmV-p0G$7m08#G9qRr0844GW%)na zS*4q^N_fbc_&CE!VzNfMNo>k6OH9^Zc8T2?`ov@f0u;sh6a|X+p3MLN002ovPDHLk FV1jo$C#wJe delta 197 zcmV;$06PD&0h0odR)45TL_t(|0qv3t3V$XyMd zYHb#_A}ncbmH|bsZm_ty95xX?+gv|pEcQ~7ekwHXHCP^lC_ZS?UJMIa9^)h7tjY@z zk3$r6X)lI_h{q+ta1s3V7exB00000NkvXXu0mjf!5vGE diff --git a/apps/common/main/resources/img/toolbar/2x/btn-sorting.png b/apps/common/main/resources/img/toolbar/2x/btn-sorting.png index f82c3bc64e8f295fc8d271389e43950e2ffa82c6..6ceb01bcce77830af2779d5941cbc49194102b7c 100644 GIT binary patch delta 156 zcmey!bdYg^gc=hw0|SEy-_%J!iY49A*O7r?V?XzwL{=c5u{g-xiDBJ2nU@n4C9*jK zd_r8^3w-|n{|}UVb}m^7q@*OsFPOpM*^M+H$HddcF+}5ha)Lx#f~Z78#KMGz=m}xl z^b;B)MH<{ExNUQe^r$F3$^Ie_{ZJYD@<);T3K0RUcC BGHd_< delta 334 zcmV-U0kQtU0r3Km7zqdl0001KV0{6RJ{W%ib5ch_0Itp)=>Px#1ZP1_K>z@;j|==^ z1poj621!IgRCodH*-;L{AP@x5t??i|N^b@?N3;-;fSS$%`!O$RjN->;GTnYugoucU zY}(@$(q&EvVGoHcaub3uKoA22F+dOl1l@xdTl!v$q4an#l%& zxC24G1|HJ)?QDv8R~}c+X7O_Fwddz9pKs;Lvn66cKD~(Z^;@~}OeSgF!Z|D_XMmYc zzm@-4p*dd)&BA;yPTtL{FDHw|uv|LmTRvab3en7Poe<5;mz5!!8?Fk`+e|5fRZS4_|+^Zkv?w_y7O^07*qoM6N<$g3K9=%>V!Z From 87413ce121f7130d5b7452adfd461cf8d8f32ec5 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Thu, 8 Jul 2021 20:16:39 +0300 Subject: [PATCH 232/376] [DE] Add hints in forms tab/settings --- .../main/lib/component/TextareaField.js | 12 +++ .../main/app/view/FormSettings.js | 95 +++++++++++++++---- apps/documenteditor/main/app/view/FormsTab.js | 60 +++++++++--- 3 files changed, 136 insertions(+), 31 deletions(-) diff --git a/apps/common/main/lib/component/TextareaField.js b/apps/common/main/lib/component/TextareaField.js index 4b648d8b4..478b9b649 100644 --- a/apps/common/main/lib/component/TextareaField.js +++ b/apps/common/main/lib/component/TextareaField.js @@ -65,6 +65,15 @@ define([ 'spellcheck="<%= spellcheck %>" ', 'class="form-control <%= cls %>" ', 'placeholder="<%= placeHolder %>" ', + '<% if (dataHint) {%>', + 'data-hint="<%= dataHint %>" ', + '<% } %>', + '<% if (dataHintDirection) {%>', + 'data-hint-direction="<%= dataHintDirection %>" ', + '<% } %>', + '<% if (dataHintOffset) {%>', + 'data-hint-offset="<%= dataHintOffset %>" ', + '<% } %>', '>', '

    ' ].join('')), @@ -101,6 +110,9 @@ define([ style : this.style, placeHolder : this.placeHolder, spellcheck : this.spellcheck, + dataHint : this.options.dataHint, + dataHintDirection: this.options.dataHintDirection, + dataHintOffset: this.options.dataHintOffset, scope : me })); diff --git a/apps/documenteditor/main/app/view/FormSettings.js b/apps/documenteditor/main/app/view/FormSettings.js index 177dc9ffb..cb25d8c0a 100644 --- a/apps/documenteditor/main/app/view/FormSettings.js +++ b/apps/documenteditor/main/app/view/FormSettings.js @@ -117,7 +117,10 @@ define([ cls: 'input-group-nr', menuStyle: 'min-width: 100%;', editable: true, - data: [] + data: [], + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'big' }); this.cmbKey.setValue(''); this.lockedControls.push(this.cmbKey); @@ -131,7 +134,10 @@ define([ validateOnChange: false, validateOnBlur: false, style : 'width: 100%;', - value : '' + value : '', + dataHint : '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.lockedControls.push(this.txtPlaceholder); this.txtPlaceholder.on('changed:after', this.onPlaceholderChanged.bind(this)); @@ -140,7 +146,10 @@ define([ this.textareaHelp = new Common.UI.TextareaField({ el : $markup.findById('#form-txt-help'), style : 'width: 100%; height: 60px;', - value : '' + value : '', + dataHint : '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.lockedControls.push(this.textareaHelp); this.textareaHelp.on('changed:after', this.onHelpChanged.bind(this)); @@ -149,7 +158,10 @@ define([ // Text props this.chMaxChars = new Common.UI.CheckBox({ el: $markup.findById('#form-chb-max-chars'), - labelText: this.textMaxChars + labelText: this.textMaxChars, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.chMaxChars.on('change', this.onChMaxCharsChanged.bind(this)); this.lockedControls.push(this.chMaxChars); @@ -161,7 +173,10 @@ define([ defaultUnit : "", value: '10', maxValue: 1000000, - minValue: 1 + minValue: 1, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'big' }); this.lockedControls.push(this.spnMaxChars); this.spnMaxChars.on('change', this.onMaxCharsChange.bind(this)); @@ -169,7 +184,10 @@ define([ this.chComb = new Common.UI.CheckBox({ el: $markup.findById('#form-chb-comb'), - labelText: this.textComb + labelText: this.textComb, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.chComb.on('change', this.onChCombChanged.bind(this)); this.lockedControls.push(this.chComb); @@ -182,7 +200,10 @@ define([ value: 'Auto', allowAuto: true, maxValue: 55.88, - minValue: 0.1 + minValue: 0.1, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'big' }); this.lockedControls.push(this.spnWidth); this.spinners.push(this.spnWidth); @@ -191,14 +212,20 @@ define([ this.chRequired = new Common.UI.CheckBox({ el: $markup.findById('#form-chb-required'), - labelText: this.textRequired + labelText: this.textRequired, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.chRequired.on('change', this.onChRequired.bind(this)); this.lockedControls.push(this.chRequired); this.chFixed = new Common.UI.CheckBox({ el: $markup.findById('#form-chb-fixed'), - labelText: this.textFixed + labelText: this.textFixed, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.chFixed.on('change', this.onChFixed.bind(this)); this.lockedControls.push(this.chFixed); @@ -209,7 +236,10 @@ define([ cls: 'input-group-nr', menuStyle: 'min-width: 100%;', editable: true, - data: [] + data: [], + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'big' }); this.cmbGroupKey.setValue(''); this.lockedControls.push(this.cmbGroupKey); @@ -224,7 +254,10 @@ define([ validateOnChange: false, validateOnBlur: false, style : 'width: 100%;', - value : '' + value : '', + dataHint : '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.lockedControls.push(this.txtNewValue); this.txtNewValue.on('inputleave', function(){ me.fireEvent('editcomplete', me);}); @@ -249,7 +282,10 @@ define([ parentEl: $markup.findById('#form-list-add'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-zoomup', - hint: this.textTipAdd + hint: this.textTipAdd, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'big' }); this.btnListAdd.on('click', _.bind(this.onAddItem, this)); this.lockedControls.push(this.btnListAdd); @@ -258,7 +294,10 @@ define([ parentEl: $markup.findById('#form-list-delete'), cls: 'btn-toolbar', iconCls: 'toolbar__icon cc-remove', - hint: this.textTipDelete + hint: this.textTipDelete, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'big' }); this.btnListDelete.on('click', _.bind(this.onDeleteItem, this)); this.lockedControls.push(this.btnListDelete); @@ -267,7 +306,10 @@ define([ parentEl: $markup.findById('#form-list-up'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-arrow-up', - hint: this.textTipUp + hint: this.textTipUp, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'big' }); this.btnListUp.on('click', _.bind(this.onMoveItem, this, true)); this.lockedControls.push(this.btnListUp); @@ -276,7 +318,10 @@ define([ parentEl: $markup.findById('#form-list-down'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-arrow-down', - hint: this.textTipDown + hint: this.textTipDown, + dataHint: '1', + dataHintDirection: 'left', + dataHintOffset: 'big' }); this.btnListDown.on('click', _.bind(this.onMoveItem, this, false)); this.lockedControls.push(this.btnListDown); @@ -295,7 +340,10 @@ define([ {caption: this.textFromUrl, value: 1}, {caption: this.textFromStorage, value: 2} ] - }) + }), + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'big' }); this.lockedControls.push(this.btnSelectImage); this.btnSelectImage.menu.on('item:click', _.bind(this.onImageSelect, this)); @@ -306,7 +354,10 @@ define([ cls : 'btn-toolbar', iconCls : 'toolbar__icon cc-remove', caption : this.textDelete, - style : 'text-align: left;' + style : 'text-align: left;', + dataHint : '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.btnRemForm.on('click', _.bind(function(btn){ this.api.asc_RemoveContentControl(this._state.id); @@ -318,7 +369,10 @@ define([ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-lock', caption : this.textLock, - style : 'text-align: left;' + style : 'text-align: left;', + dataHint : '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.btnLockForm.on('click', _.bind(function(btn){ if (this.api && !this._noApply) { @@ -860,7 +914,10 @@ define([ '33CCCC', '3366FF', '800080', '999999', 'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF', '993366', 'C0C0C0', 'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', 'C9C8FF', 'CC99FF', 'FFFFFF' ], - paletteHeight: 94 + paletteHeight: 94, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'big' }); this.lockedControls.push(this.btnColor); this.mnuNoBorder.on('click', _.bind(this.onNoBorderClick, this)); diff --git a/apps/documenteditor/main/app/view/FormsTab.js b/apps/documenteditor/main/app/view/FormsTab.js index 2437a1451..fa37f66a1 100644 --- a/apps/documenteditor/main/app/view/FormsTab.js +++ b/apps/documenteditor/main/app/view/FormsTab.js @@ -156,7 +156,10 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-text-field', caption: this.capBtnText, - disabled: true + disabled: true, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnTextField); @@ -164,7 +167,10 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-combo-box', caption: this.capBtnComboBox, - disabled: true + disabled: true, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnComboBox); @@ -172,7 +178,10 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-dropdown', caption: this.capBtnDropDown, - disabled: true + disabled: true, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnDropDown); @@ -180,7 +189,10 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-checkbox', caption: this.capBtnCheckBox, - disabled: true + disabled: true, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnCheckBox); @@ -188,7 +200,10 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-radio-button', caption: this.capBtnRadioBox, - disabled: true + disabled: true, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnRadioBox); @@ -196,7 +211,10 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertimage', caption: this.capBtnImage, - disabled: true + disabled: true, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnImageField); @@ -205,7 +223,10 @@ define([ iconCls: 'toolbar__icon btn-sheet-view', caption: this.capBtnView, enableToggle: true, - disabled: true + disabled: true, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnViewForm); @@ -213,7 +234,10 @@ define([ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-clearstyle', caption : this.textClearFields, - disabled: true + disabled: true, + dataHint : '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnClearFields); @@ -222,7 +246,10 @@ define([ iconCls : 'toolbar__icon btn-highlight', caption : this.textHighlight, menu : true, - disabled: true + disabled: true, + dataHint : '1', + dataHintDirection: 'left', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnHighlight); } @@ -230,14 +257,20 @@ define([ this.btnPrevForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon previous-field', - caption: this.capBtnPrev + caption: this.capBtnPrev, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnPrevForm); this.btnNextForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon next-field', - caption: this.capBtnNext + caption: this.capBtnNext, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnNextForm); @@ -245,7 +278,10 @@ define([ this.btnSubmit = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon submit-form', - caption: this.capBtnSubmit + caption: this.capBtnSubmit, + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' }); this.paragraphControls.push(this.btnSubmit); } From 8bf91f4847504cbdc4849e507c8fd5265db5826f Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Thu, 8 Jul 2021 20:20:34 +0300 Subject: [PATCH 233/376] Fix hint manager, add hint visible checks to close panels in left menu --- apps/common/main/lib/component/HintManager.js | 36 +++++++++++-------- apps/common/main/lib/view/Chat.js | 2 +- .../main/app/controller/LeftMenu.js | 8 +++-- .../main/app/view/DocumentHolder.js | 3 +- .../main/app/controller/LeftMenu.js | 8 +++-- .../main/app/view/DocumentHolder.js | 3 +- .../main/app/controller/LeftMenu.js | 8 +++-- 7 files changed, 41 insertions(+), 27 deletions(-) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index aa787b76b..aa2e5de4e 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -58,7 +58,8 @@ Common.UI.HintManager = new(function() { _currentSection = document, _currentControls = [], _currentHints = [], - _inputLetters = ''; + _inputLetters = '', + _isClear = false; var _setCurrentSection = function (btn) { if (btn === 'esc') { @@ -324,11 +325,11 @@ Common.UI.HintManager = new(function() { var tag = curr.prop("tagName").toLowerCase(); if (window.SSE && curr.parent().prop('id') === 'statusbar_bottom') { curr.contextmenu(); - _hideHints(); + _clearHints(); } else if (tag === 'input' || tag === 'textarea') { curr.trigger(jQuery.Event('click', {which: 1})); curr.focus(); - _hideHints(); + _clearHints(); } else { if (!curr.attr('content-target') || (curr.attr('content-target') && !$(`#${curr.attr('content-target')}`).is(':visible'))) { // need to open panel if (!($('#file-menu-panel').is(':visible') && (curr.parent().prop('id') === 'fm-btn-info' && $('#panel-info').is(':visible') || @@ -341,23 +342,22 @@ Common.UI.HintManager = new(function() { } } if (curr.prop('id') === 'btn-goback' || curr.closest('.btn-slot').prop('id') === 'slot-btn-options' || curr.prop('id') === 'left-btn-thumbs') { - _hideHints(); - _resetToDefault(); - return; + _clearHints(); } if (curr.prop('id') === 'add-comment-doc') { _removeHints(); _currentHints.length = 0; _currentControls.length = 0; - } else { - _nextLevel(); + _showHints(); + return; + } + if (!_isClear) { + _nextLevel(); + _setCurrentSection(curr); + _showHints(); } - _setCurrentSection(curr); - _showHints(); - } - if (!_hintVisible) { // if there isn't new level, reset settings to start - _resetToDefault(); } + _isClear = false; } } e.preventDefault(); @@ -380,7 +380,7 @@ Common.UI.HintManager = new(function() { }); }; - var _needCloseMenu = function () { + var _needCloseFileMenu = function () { return !(_hintVisible && _currentLevel > 1); }; @@ -388,12 +388,18 @@ Common.UI.HintManager = new(function() { if (_hintVisible) { _hideHints(); _resetToDefault(); + _isClear = true; } }; + var _isHintVisible = function () { + return _hintVisible; + }; + return { init: _init, clearHints: _clearHints, - needCloseMenu: _needCloseMenu + needCloseFileMenu: _needCloseFileMenu, + isHintVisible: _isHintVisible } })(); \ No newline at end of file diff --git a/apps/common/main/lib/view/Chat.js b/apps/common/main/lib/view/Chat.js index 50ef40b0f..9017293c4 100644 --- a/apps/common/main/lib/view/Chat.js +++ b/apps/common/main/lib/view/Chat.js @@ -156,7 +156,7 @@ define([ this._onBtnAddMessage(event); } } else - if (event.keyCode == Common.UI.Keys.ESC) { + if (event.keyCode == Common.UI.Keys.ESC && !Common.UI.HintManager.isHintVisible()) { this.hide(); } }, diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 1bc19e377..7874fc5ae 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -808,7 +808,7 @@ define([ case 'escape': // if (!this.leftMenu.isOpened()) return true; if ( this.leftMenu.menuFile.isVisible() ) { - if (Common.UI.HintManager.needCloseMenu()) + if (Common.UI.HintManager.needCloseFileMenu()) this.leftMenu.menuFile.hide(); return false; } @@ -828,8 +828,10 @@ define([ } if (this.leftMenu.btnAbout.pressed || this.leftMenu.btnPlugins.pressed || $(e.target).parents('#left-menu').length ) { - this.leftMenu.close(); - Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); + if (!Common.UI.HintManager.isHintVisible()) { + this.leftMenu.close(); + Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); + } return false; } break; diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index d087ec28f..869f58f4f 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -301,7 +301,8 @@ define([ if (key == Common.UI.Keys.ESC) { Common.UI.Menu.Manager.hideAll(); - Common.NotificationCenter.trigger('leftmenu:change', 'hide'); + if (!Common.UI.HintManager.isHintVisible()) + Common.NotificationCenter.trigger('leftmenu:change', 'hide'); } } }; diff --git a/apps/presentationeditor/main/app/controller/LeftMenu.js b/apps/presentationeditor/main/app/controller/LeftMenu.js index ba82023fe..ed69d3f0a 100644 --- a/apps/presentationeditor/main/app/controller/LeftMenu.js +++ b/apps/presentationeditor/main/app/controller/LeftMenu.js @@ -673,7 +673,7 @@ define([ // if (!this.leftMenu.isOpened()) return true; // TODO: if ( this.leftMenu.menuFile.isVisible() ) { - if (Common.UI.HintManager.needCloseMenu()) + if (Common.UI.HintManager.needCloseFileMenu()) this.leftMenu.menuFile.hide(); return false; } @@ -694,8 +694,10 @@ define([ if ( this.leftMenu.btnAbout.pressed || this.leftMenu.btnPlugins.pressed || $(e.target).parents('#left-menu').length ) { - this.leftMenu.close(); - Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); + if (!Common.UI.HintManager.isHintVisible()) { + this.leftMenu.close(); + Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); + } return false; } break; diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index 9285ce0ee..6b1901ddd 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -303,7 +303,8 @@ define([ } if (key == Common.UI.Keys.ESC) { Common.UI.Menu.Manager.hideAll(); - Common.NotificationCenter.trigger('leftmenu:change', 'hide'); + if (!Common.UI.HintManager.isHintVisible()) + Common.NotificationCenter.trigger('leftmenu:change', 'hide'); } } }; diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index 599cfeec3..8d36b592d 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -847,7 +847,7 @@ define([ return false; case 'escape': if ( this.leftMenu.menuFile.isVisible() ) { - if (Common.UI.HintManager.needCloseMenu()) + if (Common.UI.HintManager.needCloseFileMenu()) this.leftMenu.menuFile.hide(); return false; } @@ -867,8 +867,10 @@ define([ } if ( this.leftMenu.btnAbout.pressed || ($(e.target).parents('#left-menu').length || this.leftMenu.btnPlugins.pressed || this.leftMenu.btnComments.pressed) && this.api.isCellEdited!==true) { - this.leftMenu.close(); - Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); + if (!Common.UI.HintManager.isHintVisible()) { + this.leftMenu.close(); + Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); + } return false; } if (this.mode.isEditDiagram || this.mode.isEditMailMerge) { From 6d818e120a266f7b2cd0dfec7912e15ff09f12a1 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Thu, 8 Jul 2021 21:18:15 +0300 Subject: [PATCH 234/376] [DE PE SSE mobile] Bug 51134 --- .../lib/view/collaboration/Comments.jsx | 79 ++++++++++--------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index de88658f7..51172677a 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -578,51 +578,53 @@ const pickLink = (message) => { if (result) subStr = subStr.substring(0, result.index); offset = arguments[arguments.length-2]; - arrayComment.push({start: offset, end: subStr.length+offset, str: window.open(subStr)} href={subStr} target="_blank" data-can-copy="true">{subStr}}); + arrayComment.push({start: offset, end: subStr.length+offset, str: `${subStr}`}); return ''; }); if (message.length<1000 || message.search(/\S{255,}/)<0) - message.replace(Common.Utils.hostnameStrongRe, function(subStr) { - let result = /[\.,\?\+;:=!\(\)]+$/.exec(subStr); - if (result) - subStr = subStr.substring(0, result.index); - let ref = (! /(((^https?)|(^ftp)):\/\/)/i.test(subStr) ) ? ('http://' + subStr) : subStr; - offset = arguments[arguments.length-2]; - len = subStr.length; - let elem = arrayComment.find(function(item){ - return ( (offset>=item.start) && (offset=item.start) && (offsetitem.start)); + }); + if (!elem) + arrayComment.push({start: offset, end: len+offset, str: `${subStr}`}); + return ''; + }); + + message.replace(Common.Utils.emailStrongRe, function(subStr) { + let ref = (! /((^mailto:)\/\/)/i.test(subStr) ) ? ('mailto:' + subStr) : subStr; + offset = arguments[arguments.length-2]; + len = subStr.length; + let elem = arrayComment.find(function(item){ + return ( (offset>=item.start) && (offsetitem.start)); - }); - if (!elem) - arrayComment.push({start: offset, end: len+offset, str: window.open(ref)} href={ref} target="_blank" data-can-copy="true">{subStr}}); - return ''; - }); + }); + if (!elem) + arrayComment.push({start: offset, end: len+offset, str: `${subStr}`}); + return ''; + }); - message.replace(Common.Utils.emailStrongRe, function(subStr) { - let ref = (! /((^mailto:)\/\/)/i.test(subStr) ) ? ('mailto:' + subStr) : subStr; - offset = arguments[arguments.length-2]; - len = subStr.length; - let elem = arrayComment.find(function(item){ - return ( (offset>=item.start) && (offsetitem.start)); - }); - if (!elem) - arrayComment.push({start: offset, end: len+offset, str: window.open(ref)} href={ref}>{subStr}}); - return ''; - }); + arrayComment = arrayComment.sort(function(item1,item2){ return item1.start - item2.start; }); + + let str_res = (arrayComment.length>0) ? (Common.Utils.String.htmlEncode(message.substring(0, arrayComment[0].start)) + arrayComment[0].str) : Common.Utils.String.htmlEncode(message); - arrayComment = arrayComment.sort(function(item1,item2){ return item1.start - item2.start; }); - - let str_res = (arrayComment.length>0) ? : ; - for (var i=1; i{str_res}{Common.Utils.String.htmlEncode(message.substring(arrayComment[i-1].end, arrayComment[i].start))}{arrayComment[i].str}; - } - if (arrayComment.length>0) { - str_res = ; - } - return str_res; - + for (var i=1; i0) { + str_res += Common.Utils.String.htmlEncode(message.substring(arrayComment[i-1].end, message.length)); + } + + return str_res; } // View comments @@ -656,6 +658,7 @@ const ViewComments = ({storeComments, storeAppOptions, onCommentMenuClick, onRes
    {_t.textNoComments}
    : {sortComments.map((comment, indexComment) => { + console.log(comment); return ( { !e.target.closest('.comment-menu') && !e.target.closest('.reply-menu') ? showComment(comment) : null}}> From 1086ba8fbaad115626bbdf23822b8cdd3912a5a3 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Thu, 8 Jul 2021 21:20:11 +0300 Subject: [PATCH 235/376] Clear console log --- apps/common/mobile/lib/view/collaboration/Comments.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index 51172677a..51ba84b62 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -658,7 +658,6 @@ const ViewComments = ({storeComments, storeAppOptions, onCommentMenuClick, onRes
    {_t.textNoComments}
    : {sortComments.map((comment, indexComment) => { - console.log(comment); return ( { !e.target.closest('.comment-menu') && !e.target.closest('.reply-menu') ? showComment(comment) : null}}> From a520792c55213e24cd83742060534da025c2c4ad Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 9 Jul 2021 11:42:19 +0300 Subject: [PATCH 236/376] Move with arrows in ThemeColorPalette --- apps/common/main/lib/component/ColorButton.js | 38 +++- .../common/main/lib/component/FocusManager.js | 2 + .../main/lib/component/ThemeColorPalette.js | 206 ++++++++++++++++-- apps/common/main/resources/less/buttons.less | 9 + .../resources/less/theme-colorpalette.less | 2 +- 5 files changed, 236 insertions(+), 21 deletions(-) diff --git a/apps/common/main/lib/component/ColorButton.js b/apps/common/main/lib/component/ColorButton.js index a0c85769b..f6c05bda7 100644 --- a/apps/common/main/lib/component/ColorButton.js +++ b/apps/common/main/lib/component/ColorButton.js @@ -86,6 +86,8 @@ define([ if (this.options.auto) this.autocolor = (typeof this.options.auto == 'object') ? this.options.auto.color || '000000' : '000000'; + this.cmpEl.on('keydown.after.bs.dropdown', _.bind(this.onAfterKeydownMenu, this)); + if (this.options.color!==undefined) this.setColor(this.options.color); }, @@ -112,7 +114,8 @@ define([ el: this.cmpEl.find('#' + this.menu.id + '-color-menu'), transparent: this.options.transparent, value: color, - colors: colors + colors: colors, + parentMenu: (typeof this.menu == 'object') ? this.menu : undefined }); this.colorPicker.on('select', _.bind(this.onColorSelect, this)); this.cmpEl.find('#' + this.menu.id + '-color-new').on('click', _.bind(this.addNewColor, this)); @@ -121,6 +124,12 @@ define([ this.colorAuto = this.cmpEl.find('#' + this.menu.id + '-color-auto > a'); (color == 'auto') && this.setAutoColor(true); } + var me = this; + (typeof this.menu == 'object') && this.menu.on('show:after', function(menu) { + _.delay(function() { + me.colorPicker.focus(); + }, 10); + }) } return this.colorPicker; }, @@ -150,6 +159,18 @@ define([ { template: _.template('' + this.textNewColor + '') } ]) }); + this.colorPicker && (this.colorPicker.parentMenu = menu); + var me = this; + menu.on('show:after', function(menu) { + me.colorPicker && _.delay(function() { + me.colorPicker.showLastSelected(); + me.colorPicker.focus(); + }, 10); + }).on('hide:after', function() { + if (me.options.takeFocusOnClose) { + setTimeout(function(){me.focus();}, 1); + } + }); return menu; } return this.menu; @@ -184,6 +205,21 @@ define([ return this.colorAuto && this.colorAuto.hasClass('selected'); }, + focus: function() { + this.cmpEl && this.cmpEl.focus(); + }, + + onAfterKeydownMenu: function(e) { + if ((e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.SPACE) && !this.isMenuOpen()) { + $('button', this.cmpEl).click(); + return false; + } + }, + + isMenuOpen: function() { + return this.cmpEl.hasClass('open'); + }, + textNewColor: 'Add New Custom Color', textAutoColor: 'Automatic' diff --git a/apps/common/main/lib/component/FocusManager.js b/apps/common/main/lib/component/FocusManager.js index df554d5e8..496bea0b8 100644 --- a/apps/common/main/lib/component/FocusManager.js +++ b/apps/common/main/lib/component/FocusManager.js @@ -71,6 +71,8 @@ Common.UI.FocusManager = new(function() { item.selector = '.radiobox'; else if (field instanceof Common.UI.TreeView) item.selector = '.treeview'; + else if (field instanceof Common.UI.ColorButton) + item.selector = '.btn-group'; else if (field instanceof Common.UI.Button) item.selector = 'button'; else diff --git a/apps/common/main/lib/component/ThemeColorPalette.js b/apps/common/main/lib/component/ThemeColorPalette.js index fda543034..db0f40e5f 100644 --- a/apps/common/main/lib/component/ThemeColorPalette.js +++ b/apps/common/main/lib/component/ThemeColorPalette.js @@ -55,26 +55,28 @@ define([ effects: 5, allowReselect: true, transparent: false, - value: '000000' + value: '000000', + enableKeyEvents: true, + keyMoveDirection: 'both' // 'vertical', 'horizontal' }, template : _.template( '
    ' + - '<% var me = this; %>' + + '<% var me = this; var idx = 0; %>' + '<% $(colors).each(function(num, item) { %>' + '<% if (me.isBlankSeparator(item)) { %>
    ' + '<% } else if (me.isSeparator(item)) { %>
    ' + '<% } else if (me.isColor(item)) { %> ' + - '' + + '' + ' ' + '' + '<% } else if (me.isTransparent(item)) { %>' + - '' + + '' + ' ' + '' + '<% } else if (me.isEffect(item)) { %>' + - '' + + '' + ' ' + '' + '<% } else if (me.isCaption(item)) { %>' + @@ -85,7 +87,7 @@ define([ '<% if (me.options.dynamiccolors!==undefined) { %>' + '
    ' + '<% for (var i=0; i' + - '' + + '' + ' ' + '<% } %>' + '<% } %>' + @@ -101,6 +103,18 @@ define([ el = me.$el || $(this.el); this.colors = me.options.colors || this.generateColorData(me.options.themecolors, me.options.effects, me.options.standardcolors, me.options.transparent); + this.enableKeyEvents= me.options.enableKeyEvents; + this.tabindex = me.options.tabindex || 0; + this.parentMenu = me.options.parentMenu; + this.lastSelectedIdx = -1; + + me.colorItems = []; + if (me.options.keyMoveDirection=='vertical') + me.moveKeys = [Common.UI.Keys.UP, Common.UI.Keys.DOWN]; + else if (me.options.keyMoveDirection=='horizontal') + me.moveKeys = [Common.UI.Keys.LEFT, Common.UI.Keys.RIGHT]; + else + me.moveKeys = [Common.UI.Keys.UP, Common.UI.Keys.DOWN, Common.UI.Keys.LEFT, Common.UI.Keys.RIGHT]; el.addClass('theme-colorpalette'); this.render(); @@ -117,6 +131,12 @@ define([ render: function () { this.$el.html(this.template({colors: this.colors})); + + var me = this; + this.moveKeys && this.$el.find('a').each(function(num, item) { + me.colorItems.push({el: item, index: num}); + }); + this.attachKeyEvents(); return this; }, @@ -165,6 +185,7 @@ define([ }); if (colors[i] == color) { colorEl.addClass(this.selectedCls); + this.lastSelectedIdx = parseInt(colorEl.attr('idx')); color = undefined; //select only first found color } } @@ -181,20 +202,29 @@ define([ if (target.hasClass('color-transparent') ) { $(me.el).find('a.' + me.selectedCls).removeClass(me.selectedCls); target.addClass(me.selectedCls); - me.value = 'transparent'; - me.trigger('select', me, 'transparent'); + if (!e.suppressEvent) { + me.lastSelectedIdx = parseInt(target.attr('idx')); + me.value = 'transparent'; + me.trigger('select', me, 'transparent'); + } } else if ( !(target[0].className.search('color-dynamic')<0) ) { if (!/dynamic-empty-color/.test(target[0].className)) { $(me.el).find('a.' + me.selectedCls).removeClass(me.selectedCls); target.addClass(me.selectedCls); - color = target.attr('color'); - if (color) me.trigger('select', me, color); - - me.value = color.toUpperCase(); + if (color && !e.suppressEvent) { + me.lastSelectedIdx = parseInt(target.attr('idx')); + color = target.attr('color'); + me.trigger('select', me, color); + me.value = color.toUpperCase(); + } } else { - setTimeout(function(){ - me.addNewColor(); - }, 10); + if (e.suppressEvent) { + $(me.el).find('a.' + me.selectedCls).removeClass(me.selectedCls); + target.addClass(me.selectedCls); + } else + setTimeout(function(){ + me.addNewColor(); + }, 10); } } else { if (!/^[a-fA-F0-9]{6}$/.test(me.value) || _.indexOf(me.colors, me.value)<0 ) @@ -206,15 +236,19 @@ define([ color = target[0].className.match(me.colorRe)[1]; if ( target.hasClass('palette-color-effect') ) { var effectId = parseInt(target.attr('effectid')); - if (color) { + if (color && !e.suppressEvent) { me.value = color.toUpperCase(); me.trigger('select', me, {color: color, effectId: effectId}); + me.lastSelectedIdx = parseInt(target.attr('idx')); } } else { if (/#?[a-fA-F0-9]{6}/.test(color)) { color = /#?([a-fA-F0-9]{6})/.exec(color)[1].toUpperCase(); - me.value = color; - me.trigger('select', me, color); + if (color && !e.suppressEvent) { + me.value = color; + me.trigger('select', me, color); + me.lastSelectedIdx = parseInt(target.attr('idx')); + } } } } @@ -281,6 +315,7 @@ define([ effectEl = el.find('a[effectid="'+color.effectId+'"]').first(); if (effectEl.length>0) { effectEl.addClass(this.selectedCls); + this.lastSelectedIdx = parseInt(effectEl.attr('idx')); this.value = effectEl[0].className.match(this.colorRe)[1].toUpperCase(); } else this.value = false; @@ -288,6 +323,7 @@ define([ effectEl = el.find('a[effectvalue="'+color.effectValue+'"].color-' + color.color.toUpperCase()).first(); if (effectEl.length>0) { effectEl.addClass(this.selectedCls); + this.lastSelectedIdx = parseInt(effectEl.attr('idx')); this.value = effectEl[0].className.match(this.colorRe)[1].toUpperCase(); } else this.value = false; @@ -302,8 +338,9 @@ define([ if (_.indexOf(this.colors, this.value)<0) this.value = false; if (color != this.value || this.options.allowReselect) { - (color == 'transparent') ? el.find('a.color-transparent').addClass(this.selectedCls) : el.find('a.palette-color.color-' + color).first().addClass(this.selectedCls); + var co = (color == 'transparent') ? el.find('a.color-transparent').addClass(this.selectedCls) : el.find('a.palette-color.color-' + color).first().addClass(this.selectedCls); this.value = color; + this.lastSelectedIdx = parseInt(co.attr('idx')); if (suppressEvent !== true) { this.fireEvent('select', this, color); } @@ -314,6 +351,7 @@ define([ co = el.find('a[color="'+color+'"]').first(); if (co.length>0) { co.addClass(this.selectedCls); + this.lastSelectedIdx = parseInt(co.attr('idx')); this.value = color.toUpperCase(); } } @@ -338,6 +376,7 @@ define([ co = el.find('a[color="'+color+'"]').first(); if (co.length>0) { co.addClass(this.selectedCls); + this.lastSelectedIdx = parseInt(co.attr('idx')); this.value = color; } if (suppressEvent !== true) { @@ -418,6 +457,26 @@ define([ clearSelection: function(suppressEvent) { this.$el.find('a.' + this.selectedCls).removeClass(this.selectedCls); this.value = undefined; + this.lastSelectedIdx = -1; + }, + + showLastSelected: function() { + this.selectByIndex(this.lastSelectedIdx, true); + }, + + getSelectedColor: function() { + var el = this.$el || $(this.el); + var idx = el.find('a.' + this.selectedCls).attr('idx'); + return (idx!==undefined) ? this.colorItems[parseInt(idx)] : null; + }, + + selectByIndex: function(index, suppressEvent) { + var el = this.$el || $(this.el); + el.find('a.' + this.selectedCls).removeClass(this.selectedCls); + + if (index>=0 && index-1 || data.keyCode==Common.UI.Keys.RETURN) { + data.preventDefault(); + data.stopPropagation(); + var rec = this.getSelectedColor(); + if (data.keyCode==Common.UI.Keys.RETURN) { + rec && this.selectByIndex(rec.index); + if (this.parentMenu) + this.parentMenu.hide(); + } else { + var idx = rec ? rec.index : -1; + if (idx<0) { + idx = 0; + } else if (this.options.keyMoveDirection == 'both') { + if (this._layoutParams === undefined) + this.fillIndexesArray(); + var topIdx = this.colorItems[idx].topIdx, + leftIdx = this.colorItems[idx].leftIdx; + + idx = undefined; + if (data.keyCode==Common.UI.Keys.LEFT) { + while (idx===undefined) { + leftIdx--; + if (leftIdx<0) { + leftIdx = this._layoutParams.columns-1; + } + idx = this._layoutParams.itemsIndexes[topIdx][leftIdx]; + } + } else if (data.keyCode==Common.UI.Keys.RIGHT) { + while (idx===undefined) { + leftIdx++; + if (leftIdx>this._layoutParams.columns-1) leftIdx = 0; + idx = this._layoutParams.itemsIndexes[topIdx][leftIdx]; + } + } else if (data.keyCode==Common.UI.Keys.UP) { + while (idx===undefined) { + topIdx--; + if (topIdx<0) topIdx = this._layoutParams.rows-1; + idx = this._layoutParams.itemsIndexes[topIdx][leftIdx]; + } + } else { + while (idx===undefined) { + topIdx++; + if (topIdx>this._layoutParams.rows-1) topIdx = 0; + idx = this._layoutParams.itemsIndexes[topIdx][leftIdx]; + } + } + } else { + idx = (data.keyCode==Common.UI.Keys.UP || data.keyCode==Common.UI.Keys.LEFT) + ? Math.max(0, idx-1) + : Math.min(this.colorItems.length - 1, idx + 1) ; + } + + if (idx !== undefined && idx>=0) { + this._fromKeyDown = true; + this.selectByIndex(idx, true); + this._fromKeyDown = false; + } + } + } + }, + + fillIndexesArray: function() { + if (this.colorItems.length<=0) return; + + this._layoutParams = { + itemsIndexes: [], + columns: 0, + rows: 0 + }; + + var el = $(this.colorItems[0].el), + itemW = el.outerWidth() + parseInt(el.css('margin-left')) + parseInt(el.css('margin-right')), + offsetLeft = this.$el.offset().left, + offsetTop = el.offset().top, + prevtop = -1, topIdx = 0, leftIdx = 0; + + for (var i=0; iprevtop) { + prevtop = top; + this._layoutParams.itemsIndexes.push([]); + topIdx = this._layoutParams.itemsIndexes.length-1; + } + this._layoutParams.itemsIndexes[topIdx][leftIdx] = i; + this.colorItems[i].topIdx = topIdx; + this.colorItems[i].leftIdx = leftIdx; + if (this._layoutParams.columns a.selected, diff --git a/apps/common/main/resources/less/theme-colorpalette.less b/apps/common/main/resources/less/theme-colorpalette.less index 0ca52a67a..72a11809c 100644 --- a/apps/common/main/resources/less/theme-colorpalette.less +++ b/apps/common/main/resources/less/theme-colorpalette.less @@ -29,7 +29,7 @@ border: @scaled-one-px-value solid @border-color-shading; } - &:hover, &.selected { + &:hover, &:focus, &.selected { border-color: @icon-normal-ie; border-color: @icon-normal; em span { From 1ca9c3d6a1e3c53d394b0f5d35819f8563fcbe38 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 9 Jul 2021 11:43:54 +0300 Subject: [PATCH 237/376] [DE] Support focus in paragraph settings (preset and color buttons, border combobox) --- apps/common/main/lib/component/ComboBorderSize.js | 5 +++++ apps/common/main/resources/less/buttons.less | 5 +++++ .../main/app/view/ParagraphSettingsAdvanced.js | 15 +++++++++++---- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/common/main/lib/component/ComboBorderSize.js b/apps/common/main/lib/component/ComboBorderSize.js index 2cf1efa2e..d03c4c1b4 100644 --- a/apps/common/main/lib/component/ComboBorderSize.js +++ b/apps/common/main/lib/component/ComboBorderSize.js @@ -122,6 +122,7 @@ define([ render : function(parentEl) { Common.UI.ComboBox.prototype.render.call(this, parentEl); + this._formControl = this.cmpEl.find('.form-control'); return this; }, @@ -172,6 +173,10 @@ define([ } }, + focus: function() { + this._formControl && this._formControl.focus(); + }, + txtNoBorders: 'No Borders' }, Common.UI.ComboBorderSize || {})); diff --git a/apps/common/main/resources/less/buttons.less b/apps/common/main/resources/less/buttons.less index 166906b5c..e007314cd 100644 --- a/apps/common/main/resources/less/buttons.less +++ b/apps/common/main/resources/less/buttons.less @@ -748,6 +748,11 @@ width: 28px; height: 28px; } + + &:focus:not(.disabled) { + box-shadow: inset 0 0 0 @scaled-one-px-value-ie @border-control-focus-ie; + box-shadow: inset 0 0 0 @scaled-one-px-value @border-control-focus; + } } .btn-text-default { diff --git a/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js b/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js index 0ec4e69c2..f5c1c0a57 100644 --- a/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js +++ b/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js @@ -366,7 +366,8 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem this.cmbBorderSize = new Common.UI.ComboBorderSize({ el: $('#paragraphadv-combo-border-size'), - style: "width: 93px;" + style: "width: 93px;", + takeFocusOnClose: true }); var rec = this.cmbBorderSize.store.at(2); this.BorderSize = {ptValue: rec.get('value'), pxValue: rec.get('pxValue')}; @@ -377,7 +378,8 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem parentEl: $('#paragraphadv-border-color-btn'), additionalAlign: this.menuAddAlign, color: 'auto', - auto: true + auto: true, + takeFocusOnClose: true }); this.colorsBorder = this.btnBorderColor.getPicker(); this.btnBorderColor.on('color:select', _.bind(this.onColorsBorderSelect, this)); @@ -420,7 +422,8 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem this.btnBackColor = new Common.UI.ColorButton({ parentEl: $('#paragraphadv-back-color-btn'), transparent: true, - additionalAlign: this.menuAddAlign + additionalAlign: this.menuAddAlign, + takeFocusOnClose: true }); this.colorsBack = this.btnBackColor.getPicker(); this.btnBackColor.on('color:select', _.bind(this.onColorsBackSelect, this)); @@ -682,10 +685,11 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem this.cmbTextAlignment, this.cmbOutlinelevel, this.numIndentsLeft, this.numIndentsRight, this.cmbSpecial, this.numSpecialBy, this.numSpacingBefore, this.numSpacingAfter, this.cmbLineRule, this.numLineHeight, this.chAddInterval, // 0 tab this.chBreakBefore, this.chKeepLines, this.chOrphan, this.chKeepNext, this.chLineNumbers, // 1 tab + this.cmbBorderSize, this.btnBorderColor, this.btnBackColor, // 2 tab this.chStrike, this.chSubscript, this.chDoubleStrike, this.chSmallCaps, this.chSuperscript, this.chAllCaps, this.numSpacing, this.numPosition, // 3 tab this.numDefaultTab, this.numTab, this.cmbAlign, this.cmbLeader, this.tabList, this.btnAddTab, this.btnRemoveTab, this.btnRemoveAll,// 4 tab this.spnMarginTop, this.spnMarginLeft, this.spnMarginBottom, this.spnMarginRight // 5 tab - ]; + ].concat(this._btnsBorderPosition); }, onCategoryClick: function(btn, index, cmp, e) { @@ -700,6 +704,9 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem case 1: me.chBreakBefore.focus(); break; + case 2: + me.cmbBorderSize.focus(); + break; case 3: me.chStrike.focus(); if (e && (e instanceof jQuery.Event)) From 050c03096243448b040fc676cd350c090a1a8c59 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 9 Jul 2021 12:51:50 +0300 Subject: [PATCH 238/376] [SSE mobile] Fix bug 51160 --- apps/spreadsheeteditor/mobile/src/store/focusObjects.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/store/focusObjects.js b/apps/spreadsheeteditor/mobile/src/store/focusObjects.js index 936293cb0..e675536f0 100644 --- a/apps/spreadsheeteditor/mobile/src/store/focusObjects.js +++ b/apps/spreadsheeteditor/mobile/src/store/focusObjects.js @@ -4,6 +4,7 @@ export class storeFocusObjects { constructor() { makeObservable(this, { focusOn: observable, + changeFocus: action, _focusObjects: observable, _cellInfo: observable, resetFocusObjects: action, @@ -17,10 +18,14 @@ export class storeFocusObjects { } focusOn = undefined; + + changeFocus(isObj) { + this.focusOn = isObj ? 'obj' : 'cell'; + } + _focusObjects = []; resetFocusObjects(objects) { - this.focusOn = 'obj'; this._focusObjects = objects; } @@ -56,7 +61,6 @@ export class storeFocusObjects { _cellInfo; resetCellInfo (cellInfo) { - this.focusOn = 'cell'; this._cellInfo = cellInfo; } From 54e23daafd11dc74d97a64ae975ffb8de3804d6e Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 9 Jul 2021 13:24:24 +0300 Subject: [PATCH 239/376] Refactoring --- apps/common/main/lib/component/ColorButton.js | 2 +- apps/common/main/lib/component/FocusManager.js | 2 -- apps/common/main/resources/less/buttons.less | 6 ++---- .../main/app/view/ParagraphSettingsAdvanced.js | 2 ++ 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/common/main/lib/component/ColorButton.js b/apps/common/main/lib/component/ColorButton.js index f6c05bda7..777e24128 100644 --- a/apps/common/main/lib/component/ColorButton.js +++ b/apps/common/main/lib/component/ColorButton.js @@ -206,7 +206,7 @@ define([ }, focus: function() { - this.cmpEl && this.cmpEl.focus(); + $('button', this.cmpEl).focus(); }, onAfterKeydownMenu: function(e) { diff --git a/apps/common/main/lib/component/FocusManager.js b/apps/common/main/lib/component/FocusManager.js index 496bea0b8..df554d5e8 100644 --- a/apps/common/main/lib/component/FocusManager.js +++ b/apps/common/main/lib/component/FocusManager.js @@ -71,8 +71,6 @@ Common.UI.FocusManager = new(function() { item.selector = '.radiobox'; else if (field instanceof Common.UI.TreeView) item.selector = '.treeview'; - else if (field instanceof Common.UI.ColorButton) - item.selector = '.btn-group'; else if (field instanceof Common.UI.Button) item.selector = 'button'; else diff --git a/apps/common/main/resources/less/buttons.less b/apps/common/main/resources/less/buttons.less index e007314cd..6e545e95a 100644 --- a/apps/common/main/resources/less/buttons.less +++ b/apps/common/main/resources/less/buttons.less @@ -679,11 +679,9 @@ .caret { } } -} -.btn-group { - &:focus, &:active, &.open { - .btn-color:not(.disabled) { + &:not(.disabled) { + &:focus, .btn-group.open &, .btn-group:active & { border-color: @border-control-focus-ie; border-color: @border-control-focus; } diff --git a/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js b/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js index f5c1c0a57..f1685f795 100644 --- a/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js +++ b/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js @@ -379,6 +379,7 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem additionalAlign: this.menuAddAlign, color: 'auto', auto: true, + cls: 'move-focus', takeFocusOnClose: true }); this.colorsBorder = this.btnBorderColor.getPicker(); @@ -423,6 +424,7 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem parentEl: $('#paragraphadv-back-color-btn'), transparent: true, additionalAlign: this.menuAddAlign, + cls: 'move-focus', takeFocusOnClose: true }); this.colorsBack = this.btnBackColor.getPicker(); From 07417a29d0e557fce19f3506e17e93e9916ebebd Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 9 Jul 2021 13:52:48 +0300 Subject: [PATCH 240/376] Color palette refactoring --- apps/common/main/lib/component/ColorButton.js | 2 +- apps/documenteditor/main/app/view/Toolbar.js | 4 ++-- .../documenteditor/main/app/view/WatermarkSettingsDialog.js | 2 +- apps/presentationeditor/main/app/view/Toolbar.js | 2 +- apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js | 4 ++-- apps/spreadsheeteditor/main/app/view/Statusbar.js | 2 +- apps/spreadsheeteditor/main/app/view/Toolbar.js | 6 +++--- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/common/main/lib/component/ColorButton.js b/apps/common/main/lib/component/ColorButton.js index 777e24128..aa06ff549 100644 --- a/apps/common/main/lib/component/ColorButton.js +++ b/apps/common/main/lib/component/ColorButton.js @@ -137,7 +137,7 @@ define([ getMenu: function(options) { if (typeof this.menu !== 'object') { options = options || this.options; - var height = options.paletteHeight || 216, + var height = options.paletteHeight || 240, id = Common.UI.getId(), auto = []; if (options.auto) { diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index c8531f71c..3d983ed50 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -268,7 +268,7 @@ define([ template: _.template('<%= caption %>') }, {caption: '--'}, - {template: _.template('
    ')}, + {template: _.template('
    ')}, {template: _.template('' + this.textNewColor + '')} ] }) @@ -282,7 +282,7 @@ define([ split: true, menu: new Common.UI.Menu({ items: [ - {template: _.template('
    ')}, + {template: _.template('
    ')}, {template: _.template('' + this.textNewColor + '')} ] }) diff --git a/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js b/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js index cda542b93..969c16b59 100644 --- a/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js +++ b/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js @@ -343,7 +343,7 @@ define(['text!documenteditor/main/app/template/WatermarkSettings.template', template: _.template('<%= caption %>') }, {caption: '--'}, - { template: _.template('
    ') }, + { template: _.template('
    ') }, { template: _.template('' + this.textNewColor + '') } ] }) diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index 342689c68..f4d32ac28 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -365,7 +365,7 @@ define([ menu: new Common.UI.Menu({ cls: 'shifted-left', items: [ - {template: _.template('
    ')}, + {template: _.template('
    ')}, {template: _.template('' + me.textNewColor + '')} ] }) diff --git a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js index 077cd3092..54c1480a7 100644 --- a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js +++ b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js @@ -559,7 +559,7 @@ define([ menu : new Common.UI.Menu({ additionalAlign: this.menuAddAlign, items: [ - { template: _.template('
    ') }, + { template: _.template('
    ') }, { template: _.template('' + this.textNewColor + '') } ] }) @@ -578,7 +578,7 @@ define([ menu : new Common.UI.Menu({ additionalAlign: this.menuAddAlign, items: [ - { template: _.template('
    ') }, + { template: _.template('
    ') }, { template: _.template('' + this.textNewColor + '') } ] }) diff --git a/apps/spreadsheeteditor/main/app/view/Statusbar.js b/apps/spreadsheeteditor/main/app/view/Statusbar.js index ecb08aaef..8c042e773 100644 --- a/apps/spreadsheeteditor/main/app/view/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/view/Statusbar.js @@ -345,7 +345,7 @@ define([ menuAlign: 'tl-tr', cls: 'color-tab', items: [ - { template: _.template('
    ') }, + { template: _.template('
    ') }, { template: _.template('' + me.textNewColor + '') } ] }); diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 3264e52fe..40280cd67 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -497,7 +497,7 @@ define([ template: _.template('<%= caption %>') }, {caption: '--'}, - { template: _.template('
    ') }, + { template: _.template('
    ') }, { template: _.template('' + me.textNewColor + '') } ] }) @@ -512,7 +512,7 @@ define([ lock : [_set.selImage, _set.editCell, _set.selSlicer, _set.coAuth, _set.coAuthText, _set.lostConnect], menu : new Common.UI.Menu({ items: [ - { template: _.template('
    ') }, + { template: _.template('
    ') }, { template: _.template('' + me.textNewColor + '') } ] }) @@ -1896,7 +1896,7 @@ define([ stopPropagation: true }, {caption: '--'}, - { template: _.template('
    '), stopPropagation: true }, + { template: _.template('
    '), stopPropagation: true }, { template: _.template('' + this.textNewColor + ''), stopPropagation: true } ] }) From f54d007f31200d261d1fa2614ef480ec8c61f504 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 9 Jul 2021 14:44:11 +0300 Subject: [PATCH 241/376] [mobile] Fix bug 51161 --- apps/common/mobile/resources/less/common-material.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/mobile/resources/less/common-material.less b/apps/common/mobile/resources/less/common-material.less index 604e5bcbf..f299fe9ba 100644 --- a/apps/common/mobile/resources/less/common-material.less +++ b/apps/common/mobile/resources/less/common-material.less @@ -29,7 +29,6 @@ --f7-range-knob-size: 16px; --f7-link-highlight-color: transparent; - --f7-touch-ripple-color: @touchColor; --f7-link-touch-ripple-color: @touchColor; .button { @@ -42,6 +41,7 @@ --f7-dialog-button-text-color: @themeColor; .navbar { + --f7-touch-ripple-color: @touchColor; .sheet-close { width: 56px; height: 56px; From ca5b24d51609c2eb7dc71681c764ad5eb21711c0 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 9 Jul 2021 15:14:24 +0300 Subject: [PATCH 242/376] Focus refactoring --- .../documenteditor/main/app/view/ParagraphSettingsAdvanced.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js b/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js index f1685f795..9ac8c6434 100644 --- a/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js +++ b/apps/documenteditor/main/app/view/ParagraphSettingsAdvanced.js @@ -687,11 +687,11 @@ define([ 'text!documenteditor/main/app/template/ParagraphSettingsAdvanced.tem this.cmbTextAlignment, this.cmbOutlinelevel, this.numIndentsLeft, this.numIndentsRight, this.cmbSpecial, this.numSpecialBy, this.numSpacingBefore, this.numSpacingAfter, this.cmbLineRule, this.numLineHeight, this.chAddInterval, // 0 tab this.chBreakBefore, this.chKeepLines, this.chOrphan, this.chKeepNext, this.chLineNumbers, // 1 tab - this.cmbBorderSize, this.btnBorderColor, this.btnBackColor, // 2 tab + this.cmbBorderSize, this.btnBorderColor].concat(this._btnsBorderPosition).concat([this.btnBackColor, // 2 tab this.chStrike, this.chSubscript, this.chDoubleStrike, this.chSmallCaps, this.chSuperscript, this.chAllCaps, this.numSpacing, this.numPosition, // 3 tab this.numDefaultTab, this.numTab, this.cmbAlign, this.cmbLeader, this.tabList, this.btnAddTab, this.btnRemoveTab, this.btnRemoveAll,// 4 tab this.spnMarginTop, this.spnMarginLeft, this.spnMarginBottom, this.spnMarginRight // 5 tab - ].concat(this._btnsBorderPosition); + ]); }, onCategoryClick: function(btn, index, cmp, e) { From a24120bbb478c9159b00f2d5fc0a3444ff83d725 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 9 Jul 2021 16:17:28 +0300 Subject: [PATCH 243/376] [SSE mobile] Fix bug 51184 --- .../mobile/src/controller/Toolbar.jsx | 42 ++++--------------- .../mobile/src/store/focusObjects.js | 28 ++++++++++++- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx b/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx index 8db15a70a..c778040af 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx @@ -4,12 +4,13 @@ import { f7 } from 'framework7-react'; import { useTranslation } from 'react-i18next'; import ToolbarView from "../view/Toolbar"; -const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetInfo')(observer(props => { +const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetInfo', 'storeFocusObjects')(observer(props => { const {t} = useTranslation(); const _t = t("Toolbar", { returnObjects: true }); const appOptions = props.storeAppOptions; const isDisconnected = props.users.isDisconnected; + const isObjectLocked = props.storeFocusObjects.isLocked; const displayCollaboration = props.users.hasEditUsers || appOptions.canViewComments; const docTitle = props.storeSpreadsheetInfo.dataDoc ? props.storeSpreadsheetInfo.dataDoc.title : ''; @@ -20,9 +21,8 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn const api = Common.EditorApi.get(); api.asc_registerCallback('asc_onCanUndoChanged', onApiCanUndo); api.asc_registerCallback('asc_onCanRedoChanged', onApiCanRedo); - api.asc_registerCallback('asc_onSelectionChanged', onApiSelectionChanged); - api.asc_registerCallback('asc_onWorkbookLocked', onApiSelectionChanged); - api.asc_registerCallback('asc_onWorksheetLocked', onApiSelectionChanged); + api.asc_registerCallback('asc_onWorkbookLocked', onApiLocked); + api.asc_registerCallback('asc_onWorksheetLocked', onApiLocked); api.asc_registerCallback('asc_onActiveSheetChanged', onApiActiveSheetChanged); Common.Notifications.on('toolbar:activatecontrols', activateControls); @@ -53,9 +53,8 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn const api = Common.EditorApi.get(); api.asc_unregisterCallback('asc_onCanUndoChanged', onApiCanUndo); api.asc_unregisterCallback('asc_onCanRedoChanged', onApiCanRedo); - //api.asc_unregisterCallback('asc_onSelectionChanged', onApiSelectionChanged); TO DO - api.asc_unregisterCallback('asc_onWorkbookLocked', onApiSelectionChanged); - api.asc_unregisterCallback('asc_onWorksheetLocked', onApiSelectionChanged); + api.asc_unregisterCallback('asc_onWorkbookLocked', onApiLocked); + api.asc_unregisterCallback('asc_onWorksheetLocked', onApiLocked); api.asc_unregisterCallback('asc_onActiveSheetChanged', onApiActiveSheetChanged); } }); @@ -133,32 +132,9 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn } const [disabledEditControls, setDisabledEditControls] = useState(false); - const onApiSelectionChanged = (cellInfo) => { + const onApiLocked = () => { if (isDisconnected) return; - - const api = Common.EditorApi.get(); - const info = !!cellInfo ? cellInfo : api.asc_getCellInfo(); - let islocked = false; - - switch (info.asc_getSelectionType()) { - case Asc.c_oAscSelectionType.RangeChart: - case Asc.c_oAscSelectionType.RangeImage: - case Asc.c_oAscSelectionType.RangeShape: - case Asc.c_oAscSelectionType.RangeChartText: - case Asc.c_oAscSelectionType.RangeShapeText: - const objects = api.asc_getGraphicObjectProps(); - for ( let i in objects ) { - if ( objects[i].asc_getObjectType() == Asc.c_oAscTypeSelectElement.Image ) { - if ((islocked = objects[i].asc_getObjectValue().asc_getLocked())) - break; - } - } - break; - default: - islocked = info.asc_getLocked(); - } - - setDisabledEditControls(islocked); + props.storeFocusObjects.setIsLocked(Common.EditorApi.get().asc_getCellInfo()); }; const onApiActiveSheetChanged = (index) => { @@ -196,7 +172,7 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn onUndo={onUndo} onRedo={onRedo} disabledControls={disabledControls} - disabledEditControls={disabledEditControls} + disabledEditControls={disabledEditControls || isObjectLocked} disabledSettings={disabledSettings} displayCollaboration={displayCollaboration} showEditDocument={showEditDocument} diff --git a/apps/spreadsheeteditor/mobile/src/store/focusObjects.js b/apps/spreadsheeteditor/mobile/src/store/focusObjects.js index e675536f0..6cb3db2d9 100644 --- a/apps/spreadsheeteditor/mobile/src/store/focusObjects.js +++ b/apps/spreadsheeteditor/mobile/src/store/focusObjects.js @@ -13,7 +13,9 @@ export class storeFocusObjects { selections: computed, shapeObject: computed, imageObject: computed, - chartObject: computed + chartObject: computed, + isLocked: observable, + setIsLocked: action }); } @@ -80,4 +82,28 @@ export class storeFocusObjects { return !!this.intf ? this.intf.getChartObject() : null; } + isLocked = false; + + setIsLocked(info) { + let islocked = false; + switch (info.asc_getSelectionType()) { + case Asc.c_oAscSelectionType.RangeChart: + case Asc.c_oAscSelectionType.RangeImage: + case Asc.c_oAscSelectionType.RangeShape: + case Asc.c_oAscSelectionType.RangeChartText: + case Asc.c_oAscSelectionType.RangeShapeText: + const objects = Common.EditorApi.get().asc_getGraphicObjectProps(); + for ( let i in objects ) { + if ( objects[i].asc_getObjectType() == Asc.c_oAscTypeSelectElement.Image ) { + if ((islocked = objects[i].asc_getObjectValue().asc_getLocked())) + break; + } + } + break; + default: + islocked = info.asc_getLocked(); + } + this.isLocked = islocked; + } + } \ No newline at end of file From 55e8fbea426b3f4d0f6a901bf677ed8af95e5667 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Fri, 9 Jul 2021 16:58:57 +0300 Subject: [PATCH 244/376] Bug 49294 --- apps/documenteditor/mobile/locale/en.json | 38 ++++++++++++++++++- apps/presentationeditor/mobile/locale/en.json | 6 ++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index 4d0ad3a70..4fe976ee1 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -6,6 +6,9 @@ "X Axis": "X Axis XAS", "Y Axis": "Y Axis", "Your text here": "Your text here", + "Error! Bookmark not defined": "Error! Bookmark not defined.", + "above": "above", + "below": "below", "Footer": "Footer", "Header": "Header", "Normal": "Normal", @@ -24,7 +27,40 @@ "Quote": "Quote", "Intense Quote": "Intense Quote", "List Paragraph": "List Paragraph", - "footnote text": "Footnote Text" + "footnote text": "Footnote Text", + "Caption": "Caption", + "endnote text": "Endnote Text", + " -Section ": " -Section ", + "First Page ": "First Page ", + "Even Page ": "Even Page ", + "Odd Page ": "Odd Page ", + "Same as Previous": "Same as Previous", + "Current Document": "Current Document", + "No table of contents entries found.": "There are no headings in the document. Apply a heading style to the text so that it appears in the table of contents.", + "Table of Contents": "Table of Contents", + "Syntax Error": "Syntax Error", + "Missing Operator": "Missing Operator", + "Missing Argument": "Missing Argument", + "Number Too Large To Format": "Number Too Large To Format", + "Zero Divide": "Zero Divide", + "Is Not In Table": "Is Not In Table", + "Index Too Large": "Index Too Large", + "The Formula Not In Table": "The Formula Not In Table", + "Table Index Cannot be Zero": "Table Index Cannot be Zero", + "Undefined Bookmark": "Undefined Bookmark", + "Unexpected End of Formula": "Unexpected End of Formula", + "Hyperlink": "Hyperlink", + "Error! Main Document Only.": "Error! Main Document Only.", + "Error! Not a valid bookmark self-reference.": "Error! Not a valid bookmark self-reference.", + "Error! No text of specified style in document.": "Error! No text of specified style in document.", + "Choose an item": "Choose an item", + "Enter a date": "Enter a date", + "Type equation here": "Type equation here", + "Click to load image": "Click to load image", + "None": "None", + "No table of figures entries found.": "No table of figures entries found.", + "table of figures": "Table of figures", + "TOC Heading": "TOC Heading" }, "textGuest": "Guest", "textAnonymous": "Anonymous", diff --git a/apps/presentationeditor/mobile/locale/en.json b/apps/presentationeditor/mobile/locale/en.json index 8b114090e..5424aece7 100644 --- a/apps/presentationeditor/mobile/locale/en.json +++ b/apps/presentationeditor/mobile/locale/en.json @@ -20,7 +20,11 @@ "Slide number": "Slide number", "Slide subtitle": "Slide subtitle", "Table": "Table", - "Slide title": "Slide title" + "Slide title": "Slide title", + "Loading": "Loading", + "Click to add notes": "Click to add notes", + "Click to add first slide": "Click to add first slide", + "None": "None" }, "textGuest": "Guest", "textAnonymous": "Anonymous", From 97f73233922e958e5cc495edee12933fce129b13 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 9 Jul 2021 17:30:14 +0300 Subject: [PATCH 245/376] Fix move in color button --- apps/common/main/lib/component/ColorButton.js | 58 ++++++++++++--- .../main/lib/component/ThemeColorPalette.js | 70 ++++++++++++------- 2 files changed, 92 insertions(+), 36 deletions(-) diff --git a/apps/common/main/lib/component/ColorButton.js b/apps/common/main/lib/component/ColorButton.js index aa06ff549..d33de43bf 100644 --- a/apps/common/main/lib/component/ColorButton.js +++ b/apps/common/main/lib/component/ColorButton.js @@ -115,7 +115,7 @@ define([ transparent: this.options.transparent, value: color, colors: colors, - parentMenu: (typeof this.menu == 'object') ? this.menu : undefined + parentButton: this }); this.colorPicker.on('select', _.bind(this.onColorSelect, this)); this.cmpEl.find('#' + this.menu.id + '-color-new').on('click', _.bind(this.addNewColor, this)); @@ -124,12 +124,6 @@ define([ this.colorAuto = this.cmpEl.find('#' + this.menu.id + '-color-auto > a'); (color == 'auto') && this.setAutoColor(true); } - var me = this; - (typeof this.menu == 'object') && this.menu.on('show:after', function(menu) { - _.delay(function() { - me.colorPicker.focus(); - }, 10); - }) } return this.colorPicker; }, @@ -156,15 +150,19 @@ define([ additionalAlign: options.additionalAlign, items: (options.additionalItems ? options.additionalItems : []).concat(auto).concat([ { template: _.template('
    ') }, - { template: _.template('' + this.textNewColor + '') } + { + id: id + '-color-new', + template: _.template('' + this.textNewColor + '') + } ]) }); - this.colorPicker && (this.colorPicker.parentMenu = menu); + this.colorPicker && (this.colorPicker.parentButton = menu); var me = this; + menu.on('keydown:before', _.bind(this.onBeforeKeyDown, this)); menu.on('show:after', function(menu) { me.colorPicker && _.delay(function() { me.colorPicker.showLastSelected(); - me.colorPicker.focus(); + !(options.additionalItems || options.auto) && me.colorPicker.focus(); }, 10); }).on('hide:after', function() { if (me.options.takeFocusOnClose) { @@ -216,10 +214,50 @@ define([ } }, + onBeforeKeyDown: function(menu, e) { + console.log(e.keyCode); + if (e.keyCode == Common.UI.Keys.RETURN) { + e.preventDefault(); + e.stopPropagation(); + var li = $(e.target).closest('li'); + (li.length>0) && li.click(); + Common.UI.Menu.Manager.hideAll(); + } else if (e.namespace!=="after.bs.dropdown" && (e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.UP)) { + var $items = $('> [role=menu] > li:not(.divider):not(.disabled):visible', menu.$el).find('> a'); + if (!$items.length) return; + var index = $items.index($items.filter(':focus')), + me = this, + pickerIndex = $items.length-1 ; + if (e.keyCode == Common.UI.Keys.DOWN && (index==pickerIndex-1 || pickerIndex==0) || e.keyCode == Common.UI.Keys.UP && index==pickerIndex) { + e.preventDefault(); + e.stopPropagation(); + _.delay(function() { + me.focusInner(e); + // me.colorPicker.focus(e.keyCode == Common.UI.Keys.DOWN ? 'first' : 'last'); + }, 10); + } + } + }, + isMenuOpen: function() { return this.cmpEl.hasClass('open'); }, + focusInner: function(e) { + if (!this.colorPicker) return; + + this.colorPicker.focus(e.keyCode == Common.UI.Keys.DOWN ? 'first' : 'last'); + }, + + focusOuter: function(e) { + if (!this.menu) return; + + var $items = $('> [role=menu] > li:not(.divider):not(.disabled):visible', this.menu.$el).find('> a'); + if (!$items.length) return; + + $items.eq(e.keyCode == Common.UI.Keys.UP ? $items.length-2 : $items.length-1).focus(); + }, + textNewColor: 'Add New Custom Color', textAutoColor: 'Automatic' diff --git a/apps/common/main/lib/component/ThemeColorPalette.js b/apps/common/main/lib/component/ThemeColorPalette.js index db0f40e5f..4428a80d4 100644 --- a/apps/common/main/lib/component/ThemeColorPalette.js +++ b/apps/common/main/lib/component/ThemeColorPalette.js @@ -105,7 +105,7 @@ define([ this.colors = me.options.colors || this.generateColorData(me.options.themecolors, me.options.effects, me.options.standardcolors, me.options.transparent); this.enableKeyEvents= me.options.enableKeyEvents; this.tabindex = me.options.tabindex || 0; - this.parentMenu = me.options.parentMenu; + this.parentButton = me.options.parentButton; this.lastSelectedIdx = -1; me.colorItems = []; @@ -200,7 +200,7 @@ define([ if (target.length==0) return; if (target.hasClass('color-transparent') ) { - $(me.el).find('a.' + me.selectedCls).removeClass(me.selectedCls); + me.clearSelection(true); target.addClass(me.selectedCls); if (!e.suppressEvent) { me.lastSelectedIdx = parseInt(target.attr('idx')); @@ -209,7 +209,7 @@ define([ } } else if ( !(target[0].className.search('color-dynamic')<0) ) { if (!/dynamic-empty-color/.test(target[0].className)) { - $(me.el).find('a.' + me.selectedCls).removeClass(me.selectedCls); + me.clearSelection(true); target.addClass(me.selectedCls); if (color && !e.suppressEvent) { me.lastSelectedIdx = parseInt(target.attr('idx')); @@ -219,7 +219,7 @@ define([ } } else { if (e.suppressEvent) { - $(me.el).find('a.' + me.selectedCls).removeClass(me.selectedCls); + me.clearSelection(true); target.addClass(me.selectedCls); } else setTimeout(function(){ @@ -230,7 +230,7 @@ define([ if (!/^[a-fA-F0-9]{6}$/.test(me.value) || _.indexOf(me.colors, me.value)<0 ) me.value = false; - $(me.el).find('a.' + me.selectedCls).removeClass(me.selectedCls); + me.clearSelection(true); target.addClass(me.selectedCls); color = target[0].className.match(me.colorRe)[1]; @@ -259,8 +259,7 @@ define([ color = /#?([a-fA-F0-9]{6})/.exec(color); if (color) { this.saveCustomColor(color[1]); - - el.find('a.' + this.selectedCls).removeClass(this.selectedCls); + this.clearSelection(true); var child = el.find('.dynamic-empty-color'); if (child.length==0) { @@ -307,7 +306,7 @@ define([ select: function(color, suppressEvent) { var el = this.$el || $(this.el); - el.find('a.' + this.selectedCls).removeClass(this.selectedCls); + this.clearSelection(true); if (typeof(color) == 'object' ) { var effectEl; @@ -360,7 +359,7 @@ define([ selectByRGB: function(rgb, suppressEvent) { var el = this.$el || $(this.el); - el.find('a.' + this.selectedCls).removeClass(this.selectedCls); + this.clearSelection(true); var color = (typeof(rgb) == 'object') ? rgb.color : rgb; if (/#?[a-fA-F0-9]{6}/.test(color)) { @@ -456,8 +455,10 @@ define([ clearSelection: function(suppressEvent) { this.$el.find('a.' + this.selectedCls).removeClass(this.selectedCls); - this.value = undefined; - this.lastSelectedIdx = -1; + if (!suppressEvent) { + this.value = undefined; + this.lastSelectedIdx = -1; + } }, showLastSelected: function() { @@ -471,8 +472,7 @@ define([ }, selectByIndex: function(index, suppressEvent) { - var el = this.$el || $(this.el); - el.find('a.' + this.selectedCls).removeClass(this.selectedCls); + this.clearSelection(true); if (index>=0 && indexthis._layoutParams.rows-1) topIdx = 0; - idx = this._layoutParams.itemsIndexes[topIdx][leftIdx]; - } + if (topIdx==this._layoutParams.rows-1 && this.parentButton) { + this.clearSelection(true); + this.parentButton.focusOuter(data); + } else + while (idx===undefined) { + topIdx++; + if (topIdx>this._layoutParams.rows-1) topIdx = 0; + idx = this._layoutParams.itemsIndexes[topIdx][leftIdx]; + } } } else { idx = (data.keyCode==Common.UI.Keys.UP || data.keyCode==Common.UI.Keys.LEFT) @@ -612,9 +620,19 @@ define([ } }, - focus: function() { + focus: function(index) { var el = this.$el || $(this.el); el && el.focus(); + if (typeof index == 'string') { + if (index == 'first') { + this.selectByIndex(0, true); + } else if (index == 'last') { + if (this._layoutParams === undefined) + this.fillIndexesArray(); + this.selectByIndex(this._layoutParams.itemsIndexes[this._layoutParams.rows-1][0], true); + } + } else if (index !== undefined) + this.selectByIndex(index, true); }, textThemeColors : 'Theme Colors', From 662ee6d9a5d6275d4bc35bf79d2749d4fcce69b9 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Fri, 9 Jul 2021 19:04:06 +0300 Subject: [PATCH 246/376] [DE PE SSE mobile] Fix Bug 51134 --- .../mobile/lib/view/collaboration/Comments.jsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index 51ba84b62..eb520b3e3 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -578,7 +578,7 @@ const pickLink = (message) => { if (result) subStr = subStr.substring(0, result.index); offset = arguments[arguments.length-2]; - arrayComment.push({start: offset, end: subStr.length+offset, str: `${subStr}`}); + arrayComment.push({start: offset, end: subStr.length+offset, str: window.open(subStr)} href={subStr} target="_blank" data-can-copy="true">{subStr}}); return ''; }); @@ -595,7 +595,7 @@ const pickLink = (message) => { (offset<=item.start) && (offset+len>item.start)); }); if (!elem) - arrayComment.push({start: offset, end: len+offset, str: `${subStr}`}); + arrayComment.push({start: offset, end: len+offset, str: window.open(ref)} href={ref} target="_blank" data-can-copy="true">{subStr}}); return ''; }); @@ -608,20 +608,20 @@ const pickLink = (message) => { (offset<=item.start) && (offset+len>item.start)); }); if (!elem) - arrayComment.push({start: offset, end: len+offset, str: `${subStr}`}); + arrayComment.push({start: offset, end: len+offset, str: window.open(ref)} href={ref}>{subStr}}); return ''; }); arrayComment = arrayComment.sort(function(item1,item2){ return item1.start - item2.start; }); - let str_res = (arrayComment.length>0) ? (Common.Utils.String.htmlEncode(message.substring(0, arrayComment[0].start)) + arrayComment[0].str) : Common.Utils.String.htmlEncode(message); + let str_res = (arrayComment.length>0) ? : ; for (var i=1; i{str_res}{Common.Utils.String.htmlEncode(message.substring(arrayComment[i-1].end, arrayComment[i].start))}{arrayComment[i].str}; } if (arrayComment.length>0) { - str_res += Common.Utils.String.htmlEncode(message.substring(arrayComment[i-1].end, message.length)); + str_res = ; } return str_res; From 1c3224eeeb9cee5c092e3d33359379707570d913 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sat, 10 Jul 2021 22:39:56 +0300 Subject: [PATCH 247/376] Fix custom color --- apps/common/main/lib/component/ThemeColorPalette.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/component/ThemeColorPalette.js b/apps/common/main/lib/component/ThemeColorPalette.js index 4428a80d4..85fd4365d 100644 --- a/apps/common/main/lib/component/ThemeColorPalette.js +++ b/apps/common/main/lib/component/ThemeColorPalette.js @@ -211,7 +211,7 @@ define([ if (!/dynamic-empty-color/.test(target[0].className)) { me.clearSelection(true); target.addClass(me.selectedCls); - if (color && !e.suppressEvent) { + if (!e.suppressEvent) { me.lastSelectedIdx = parseInt(target.attr('idx')); color = target.attr('color'); me.trigger('select', me, color); From f6032f23126727ded7f35a80c8a25c19ecab0f29 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sat, 10 Jul 2021 22:52:39 +0300 Subject: [PATCH 248/376] Refactoring Common.UI.ButtonColored --- apps/common/main/lib/component/ColorButton.js | 173 +++++++++++++++++- .../main/app/controller/FormsTab.js | 5 - .../main/app/controller/Toolbar.js | 25 +-- apps/documenteditor/main/app/view/FormsTab.js | 51 ++---- apps/documenteditor/main/app/view/Toolbar.js | 35 +--- .../main/app/view/WatermarkSettingsDialog.js | 58 ++---- apps/documenteditor/main/locale/en.json | 6 +- 7 files changed, 219 insertions(+), 134 deletions(-) diff --git a/apps/common/main/lib/component/ColorButton.js b/apps/common/main/lib/component/ColorButton.js index d33de43bf..1d9a3f0a5 100644 --- a/apps/common/main/lib/component/ColorButton.js +++ b/apps/common/main/lib/component/ColorButton.js @@ -233,7 +233,6 @@ define([ e.stopPropagation(); _.delay(function() { me.focusInner(e); - // me.colorPicker.focus(e.keyCode == Common.UI.Keys.DOWN ? 'first' : 'last'); }, 10); } } @@ -270,14 +269,184 @@ define([ $('button:first-child', this.cmpEl).append( $('
    ')); this.colorEl = this.cmpEl.find('.btn-color-value-line'); + + if (this.options.auto) + this.autocolor = (typeof this.options.auto == 'object') ? this.options.auto.color || '000000' : '000000'; + + this.cmpEl.on('keydown.after.bs.dropdown', _.bind(this.onAfterKeydownMenu, this)); + + if (this.options.color!==undefined) + this.setColor(this.options.color); + }, + + getPicker: function(color, colors) { + if (!this.colorPicker) { + this.colorPicker = new Common.UI.ThemeColorPalette({ + el: this.cmpEl.find('#' + this.menu.id + '-color-menu'), + transparent: this.options.transparent, + value: color, + colors: colors, + parentButton: this + }); + this.colorPicker.on('select', _.bind(this.onColorSelect, this)); + this.cmpEl.find('#' + this.menu.id + '-color-new').on('click', _.bind(this.addNewColor, this)); + if (this.options.auto) { + this.cmpEl.find('#' + this.menu.id + '-color-auto').on('click', _.bind(this.onAutoColorSelect, this)); + this.colorAuto = this.cmpEl.find('#' + this.menu.id + '-color-auto > a'); + (color == 'auto') && this.setAutoColor(true); + } + } + return this.colorPicker; + }, + + setPicker: function(picker) { + this.colorPicker = picker; + }, + + getMenu: function(options) { + if (typeof this.menu !== 'object') { + options = options || this.options; + var height = options.paletteHeight || 240, + id = Common.UI.getId(), + auto = []; + if (options.auto) { + this.autocolor = (typeof options.auto == 'object') ? options.auto.color || '000000' : '000000'; + auto.push({ + id: id + '-color-auto', + caption: (typeof options.auto == 'object') ? options.auto.caption || this.textAutoColor : this.textAutoColor, + template: _.template('<%= caption %>') + }); + auto.push({caption: '--'}); + } + + var menu = new Common.UI.Menu({ + id: id, + cls: 'shifted-left', + additionalAlign: options.additionalAlign, + items: (options.additionalItems ? options.additionalItems : []).concat(auto).concat([ + { template: _.template('
    ') }, + { + id: id + '-color-new', + template: _.template('' + this.textNewColor + '') + } + ]) + }); + this.colorPicker && (this.colorPicker.parentButton = menu); + var me = this; + menu.on('keydown:before', _.bind(this.onBeforeKeyDown, this)); + menu.on('show:after', function(menu) { + me.colorPicker && _.delay(function() { + me.colorPicker.showLastSelected(); + !(options.additionalItems || options.auto) && me.colorPicker.focus(); + }, 10); + }).on('hide:after', function() { + if (me.options.takeFocusOnClose) { + setTimeout(function(){me.focus();}, 1); + } + }); + return menu; + } + return this.menu; + }, + + setMenu: function (m) { + m = m || this.getMenu(); + Common.UI.Button.prototype.setMenu.call(this, m); + this.getPicker(this.options.color, this.options.colors); + }, + + onColorSelect: function(picker, color) { + this.setColor(color); + this.setAutoColor(false); + this.trigger('color:select', this, color); }, setColor: function(color) { + if (color == 'auto' && this.options.auto) + color = this.autocolor; + this.color = color; + if (this.colorEl) { this.colorEl.css({'background-color': (color=='transparent') ? color : ((typeof(color) == 'object') ? '#'+color.color : '#'+color)}); this.colorEl.toggleClass('bordered', color=='transparent'); } - } + }, + + setAutoColor: function(selected) { + if (!this.colorAuto) return; + if (selected && !this.colorAuto.hasClass('selected')) + this.colorAuto.addClass('selected'); + else if (!selected && this.colorAuto.hasClass('selected')) + this.colorAuto.removeClass('selected'); + }, + + isAutoColor: function() { + return this.colorAuto && this.colorAuto.hasClass('selected'); + }, + + onAutoColorSelect: function() { + this.setColor('auto'); + this.setAutoColor(true); + this.colorPicker && this.colorPicker.clearSelection(); + this.trigger('auto:select', this, this.autocolor); + }, + + addNewColor: function() { + this.colorPicker && this.colorPicker.addNewColor((typeof(this.color) == 'object') ? this.color.color : this.color); + }, + + onAfterKeydownMenu: function(e) { + if ((e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.SPACE) && !this.isMenuOpen()) { + $('button', this.cmpEl).click(); + return false; + } + }, + + onBeforeKeyDown: function(menu, e) { + console.log(e.keyCode); + if (e.keyCode == Common.UI.Keys.RETURN) { + e.preventDefault(); + e.stopPropagation(); + var li = $(e.target).closest('li'); + (li.length>0) && li.click(); + Common.UI.Menu.Manager.hideAll(); + } else if (e.namespace!=="after.bs.dropdown" && (e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.UP)) { + var $items = $('> [role=menu] > li:not(.divider):not(.disabled):visible', menu.$el).find('> a'); + if (!$items.length) return; + var index = $items.index($items.filter(':focus')), + me = this, + pickerIndex = $items.length-1 ; + if (e.keyCode == Common.UI.Keys.DOWN && (index==pickerIndex-1 || pickerIndex==0) || e.keyCode == Common.UI.Keys.UP && index==pickerIndex) { + e.preventDefault(); + e.stopPropagation(); + _.delay(function() { + me.focusInner(e); + }, 10); + } + } + }, + + isMenuOpen: function() { + return this.cmpEl.hasClass('open'); + }, + + focusInner: function(e) { + if (!this.colorPicker) return; + + this.colorPicker.focus(e.keyCode == Common.UI.Keys.DOWN ? 'first' : 'last'); + }, + + focusOuter: function(e) { + if (!this.menu) return; + + var $items = $('> [role=menu] > li:not(.divider):not(.disabled):visible', this.menu.$el).find('> a'); + if (!$items.length) return; + + $items.eq(e.keyCode == Common.UI.Keys.UP ? $items.length-2 : $items.length-1).focus(); + }, + + textNewColor: 'Add New Custom Color', + textAutoColor: 'Automatic' }, Common.UI.ButtonColored || {})); diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index da26708e6..c0fd48ad2 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -90,7 +90,6 @@ define([ this.addListeners({ 'FormsTab': { 'forms:insert': this.onControlsSelect, - 'forms:new-color': this.onNewControlsColor, 'forms:clear': this.onClearClick, 'forms:no-color': this.onNoControlsColor, 'forms:select-color': this.onSelectControlsColor, @@ -206,10 +205,6 @@ define([ Common.NotificationCenter.trigger('edit:complete', this.toolbar); }, - onNewControlsColor: function() { - this.view.mnuFormsColorPicker.addNewColor(); - }, - onNoControlsColor: function(item) { if (!item.isChecked()) this.api.asc_SetSpecialFormsHighlightColor(201, 200, 255); diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index a48fe02ad..b256207f4 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -310,14 +310,12 @@ define([ toolbar.mnuMultiChangeLevel.menu.on('item:click', _.bind(this.onChangeLevelClick, this, 2)); toolbar.btnHighlightColor.on('click', _.bind(this.onBtnHighlightColor, this)); toolbar.btnFontColor.on('click', _.bind(this.onBtnFontColor, this)); + toolbar.btnFontColor.on('color:select', _.bind(this.onSelectFontColor, this)); + toolbar.btnFontColor.on('auto:select', _.bind(this.onAutoFontColor, this)); toolbar.btnParagraphColor.on('click', _.bind(this.onBtnParagraphColor, this)); + toolbar.btnParagraphColor.on('color:select', _.bind(this.onParagraphColorPickerSelect, this)); toolbar.mnuHighlightColorPicker.on('select', _.bind(this.onSelectHighlightColor, this)); - toolbar.mnuFontColorPicker.on('select', _.bind(this.onSelectFontColor, this)); - toolbar.mnuParagraphColorPicker.on('select', _.bind(this.onParagraphColorPickerSelect, this)); toolbar.mnuHighlightTransparent.on('click', _.bind(this.onHighlightTransparentClick, this)); - $('#id-toolbar-menu-auto-fontcolor').on('click', _.bind(this.onAutoFontColor, this)); - $('#id-toolbar-menu-new-fontcolor').on('click', _.bind(this.onNewFontColor, this)); - $('#id-toolbar-menu-new-paracolor').on('click', _.bind(this.onNewParagraphColor, this)); toolbar.mnuLineSpace.on('item:toggle', _.bind(this.onLineSpaceToggle, this)); toolbar.mnuNonPrinting.on('item:toggle', _.bind(this.onMenuNonPrintingToggle, this)); toolbar.btnShowHidenChars.on('toggle', _.bind(this.onNonPrintingToggle, this)); @@ -2437,10 +2435,6 @@ define([ return out_value; }, - onNewFontColor: function(picker, color) { - this.toolbar.mnuFontColorPicker.addNewColor(); - }, - onAutoFontColor: function(e) { this._state.clrtext = this._state.clrtext_asccolor = undefined; @@ -2449,16 +2443,9 @@ define([ this.api.put_TextColor(color); this.toolbar.btnFontColor.currentColor = {color: color, isAuto: true}; - this.toolbar.btnFontColor.setColor('000'); - - this.toolbar.mnuFontColorPicker.clearSelection(); this.toolbar.mnuFontColorPicker.currentColor = {color: color, isAuto: true}; }, - onNewParagraphColor: function(picker, color) { - this.toolbar.mnuParagraphColorPicker.addNewColor(); - }, - onSelectHighlightColor: function(picker, color) { this._setMarkerColor(color, 'menu'); }, @@ -2562,9 +2549,8 @@ define([ onApiTextColor: function(color) { if (color.get_auto()) { if (this._state.clrtext !== 'auto') { + this.toolbar.btnFontColor.setAutoColor(true); this.toolbar.mnuFontColorPicker.clearSelection(); - var clr_item = this.toolbar.btnFontColor.menu.$el.find('#id-toolbar-menu-auto-fontcolor > a'); - !clr_item.hasClass('selected') && clr_item.addClass('selected'); this._state.clrtext = 'auto'; } } else { @@ -2583,8 +2569,7 @@ define([ (clr.effectValue!==this._state.clrtext.effectValue || this._state.clrtext.color.indexOf(clr.color)<0)) || (type1!='object' && this._state.clrtext.indexOf(clr)<0 )) { - var clr_item = this.toolbar.btnFontColor.menu.$el.find('#id-toolbar-menu-auto-fontcolor > a'); - clr_item.hasClass('selected') && clr_item.removeClass('selected'); + this.toolbar.btnFontColor.setAutoColor(false); if ( typeof(clr) == 'object' ) { var isselected = false; for (var i=0; i<10; i++) { diff --git a/apps/documenteditor/main/app/view/FormsTab.js b/apps/documenteditor/main/app/view/FormsTab.js index 2437a1451..577de8963 100644 --- a/apps/documenteditor/main/app/view/FormsTab.js +++ b/apps/documenteditor/main/app/view/FormsTab.js @@ -108,18 +108,12 @@ define([ me.fireEvent('forms:clear'); }); if (this.mnuFormsColorPicker) { - $('#id-toolbar-menu-new-form-color').on('click', function (b, e) { - me.fireEvent('forms:new-color'); + this.btnHighlight.on('color:select', function(picker, color) { + me.fireEvent('forms:select-color', [color]); }); this.mnuNoFormsColor.on('click', function (item) { me.fireEvent('forms:no-color', [item]); }); - this.mnuFormsColorPicker.on('select', function(picker, color) { - me.fireEvent('forms:select-color', [color]); - }); - this.btnHighlight.menu.on('show:after', function(picker, color) { - me.fireEvent('forms:open-color', [color]); - }); } this.btnPrevForm && this.btnPrevForm.on('click', function (b, e) { me.fireEvent('forms:goto', ['prev']); @@ -222,7 +216,20 @@ define([ iconCls : 'toolbar__icon btn-highlight', caption : this.textHighlight, menu : true, - disabled: true + disabled: true, + additionalItems: [ this.mnuNoFormsColor = new Common.UI.MenuItem({ + id: 'id-toolbar-menu-no-highlight-form', + caption: this.textNoHighlight, + checkable: true, + style: 'padding-left: 20px;' + }), + {caption: '--'}], + colors: ['000000', '993300', '333300', '003300', '003366', '000080', '333399', '333333', '800000', 'FF6600', + '808000', '00FF00', '008080', '0000FF', '666699', '808080', 'FF0000', 'FF9900', '99CC00', '339966', + '33CCCC', '3366FF', '800080', '999999', 'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF', + '993366', 'C0C0C0', 'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', 'C9C8FF', 'CC99FF', 'FFFFFF' + ], + paletteHeight: 94 }); this.paragraphControls.push(this.btnHighlight); } @@ -267,28 +274,9 @@ define([ })).then(function(){ if (config.isEdit && config.canFeatureContentControl) { if (config.canEditContentControl) { - me.btnHighlight.setMenu(new Common.UI.Menu({ - items: [ - me.mnuNoFormsColor = new Common.UI.MenuItem({ - id: 'id-toolbar-menu-no-highlight-form', - caption: me.textNoHighlight, - checkable: true, - checked: me.btnHighlight.currentColor === null - }), - {caption: '--'}, - {template: _.template('
    ')}, - {template: _.template('' + me.textNewColor + '')} - ] - })); - me.mnuFormsColorPicker = new Common.UI.ThemeColorPalette({ - el: $('#id-toolbar-menu-form-color'), - colors: ['000000', '993300', '333300', '003300', '003366', '000080', '333399', '333333', '800000', 'FF6600', - '808000', '00FF00', '008080', '0000FF', '666699', '808080', 'FF0000', 'FF9900', '99CC00', '339966', - '33CCCC', '3366FF', '800080', '999999', 'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF', - '993366', 'C0C0C0', 'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', '99CCFF', 'CC99FF', 'FFFFFF' - ], - value: me.btnHighlight.currentColor - }); + me.btnHighlight.setMenu(); + me.mnuFormsColorPicker = me.btnHighlight.getPicker(); + me.mnuNoFormsColor.setChecked(me.btnHighlight.currentColor === null); me.btnHighlight.setColor(me.btnHighlight.currentColor || 'transparent'); } else { me.btnHighlight.cmpEl.parents('.group').hide().prev('.separator').hide(); @@ -380,7 +368,6 @@ define([ tipImageField: 'Insert image', tipViewForm: 'View form', textNoHighlight: 'No highlighting', - textNewColor: 'Add New Custom Color', textClear: 'Clear Fields', capBtnPrev: 'Previous Field', capBtnNext: 'Next Field', diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 3d983ed50..69cba307c 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -259,19 +259,8 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-fontcolor', split: true, - menu: new Common.UI.Menu({ - cls: 'shifted-left', - items: [ - { - id: 'id-toolbar-menu-auto-fontcolor', - caption: this.textAutoColor, - template: _.template('<%= caption %>') - }, - {caption: '--'}, - {template: _.template('
    ')}, - {template: _.template('' + this.textNewColor + '')} - ] - }) + menu: true, + auto: true }); this.paragraphControls.push(this.btnFontColor); @@ -280,12 +269,8 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paracolor', split: true, - menu: new Common.UI.Menu({ - items: [ - {template: _.template('
    ')}, - {template: _.template('' + this.textNewColor + '')} - ] - }) + transparent: true, + menu: true }); this.paragraphControls.push(this.btnParagraphColor); this.textOnlyControls.push(this.btnParagraphColor); @@ -2005,21 +1990,19 @@ define([ ] }); this.mnuHighlightColorPicker.select('FFFF00'); + this.btnHighlightColor.setPicker(this.mnuHighlightColorPicker); } if (this.btnFontColor.cmpEl) { + this.btnFontColor.setMenu(); + this.mnuFontColorPicker = this.btnFontColor.getPicker(); this.btnFontColor.setColor(this.btnFontColor.currentColor || 'transparent'); - this.mnuFontColorPicker = new Common.UI.ThemeColorPalette({ - el: $('#id-toolbar-menu-fontcolor') - }); } if (this.btnParagraphColor.cmpEl) { + this.btnParagraphColor.setMenu(); + this.mnuParagraphColorPicker = this.btnParagraphColor.getPicker(); this.btnParagraphColor.setColor(this.btnParagraphColor.currentColor || 'transparent'); - this.mnuParagraphColorPicker = new Common.UI.ThemeColorPalette({ - el: $('#id-toolbar-menu-paracolor'), - transparent: true - }); } if (this.btnContentControls.cmpEl) { diff --git a/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js b/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js index 969c16b59..7001ff849 100644 --- a/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js +++ b/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js @@ -314,44 +314,24 @@ define(['text!documenteditor/main/app/template/WatermarkSettings.template', }); this.textControls.push(this.btnStrikeout); - var initNewColor = function(btn, picker_el) { - if (btn && btn.cmpEl) { - btn.currentColor = 'c0c0c0'; - btn.setColor( btn.currentColor); - var picker = new Common.UI.ThemeColorPalette({ - el: $(picker_el) - }); - } - btn.menu.cmpEl.on('click', picker_el+'-new', _.bind(function() { - picker.addNewColor((typeof(btn.color) == 'object') ? btn.color.color : btn.color); - }, me)); - picker.on('select', _.bind(me.onColorSelect, me)); - return picker; - }; this.btnTextColor = new Common.UI.ButtonColored({ parentEl: $('#watermark-textcolor'), cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-fontcolor', hint : this.textColor, - menu : new Common.UI.Menu({ - cls: 'shifted-left', - additionalAlign: this.menuAddAlign, - items: [ - { - id: 'watermark-auto-color', - caption: this.textAuto, - template: _.template('<%= caption %>') - }, - {caption: '--'}, - { template: _.template('
    ') }, - { template: _.template('' + this.textNewColor + '') } - ] - }) + additionalAlign: this.menuAddAlign, + auto: true, + color: 'c0c0c0', + menu: true }); - this.mnuTextColorPicker = initNewColor(this.btnTextColor, "#watermark-menu-textcolor"); - $('#watermark-auto-color').on('click', _.bind(this.onAutoColor, this)); + this.btnTextColor.setMenu(); + this.mnuTextColorPicker = this.btnTextColor.getPicker(); + this.btnTextColor.currentColor = 'c0c0c0'; this.textControls.push(this.btnTextColor); + this.btnTextColor.on('color:select', _.bind(this.onColorSelect, this)); + this.btnTextColor.on('auto:select', _.bind(this.onAutoColor, this)); + this.chTransparency = new Common.UI.CheckBox({ el: $('#watermark-chb-transparency'), labelText: this.textTransparency, @@ -403,30 +383,17 @@ define(['text!documenteditor/main/app/template/WatermarkSettings.template', }, onColorSelect: function(picker, color) { - var clr_item = this.btnTextColor.menu.$el.find('#watermark-auto-color > a'); - clr_item.hasClass('selected') && clr_item.removeClass('selected'); this.isAutoColor = false; - this.btnTextColor.currentColor = color; - this.btnTextColor.setColor( this.btnTextColor.currentColor); }, updateThemeColors: function() { this.mnuTextColorPicker.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors()); }, - addNewColor: function(picker, btn) { - picker.addNewColor((typeof(btn.color) == 'object') ? btn.color.color : btn.color); - }, - onAutoColor: function(e) { - var clr_item = this.btnTextColor.menu.$el.find('#watermark-auto-color > a'); - !clr_item.hasClass('selected') && clr_item.addClass('selected'); this.isAutoColor = true; - this.btnTextColor.currentColor = "000"; - this.btnTextColor.setColor( this.btnTextColor.currentColor); - this.mnuTextColorPicker.clearSelection(); }, afterRender: function() { @@ -582,16 +549,14 @@ define(['text!documenteditor/main/app/template/WatermarkSettings.template', this.btnUnderline.toggle(val.get_Underline()); this.btnStrikeout.toggle(val.get_Strikeout()); var color = val.get_Color(), - clr_item = this.btnTextColor.menu.$el.find('#watermark-auto-color > a'), clr = "c0c0c0"; if (color.get_auto()) { clr = "000"; this.isAutoColor = true; this.mnuTextColorPicker.clearSelection(); - !clr_item.hasClass('selected') && clr_item.addClass('selected'); + this.btnTextColor.setAutoColor(true); } else { - clr_item.hasClass('selected') && clr_item.removeClass('selected'); if (color) { color.get_type() == Asc.c_oAscColor.COLOR_TYPE_SCHEME ? clr = {color: Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b()), effectValue: color.get_value()} : @@ -718,7 +683,6 @@ define(['text!documenteditor/main/app/template/WatermarkSettings.template', textDiagonal: 'Diagonal', textHor: 'Horizontal', textColor: 'Text color', - textNewColor: 'Add New Custom Color', textLanguage: 'Language', textFromStorage: 'From Storage', textSelect: 'Select Image' diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index d0ce649a5..2d04c619d 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -124,6 +124,8 @@ "Common.Translation.warnFileLocked": "You can't edit this file because it's being edited in another app.", "Common.Translation.warnFileLockedBtnEdit": "Create a copy", "Common.Translation.warnFileLockedBtnView": "Open for viewing", + "Common.UI.ButtonColored.textAutoColor": "Automatic", + "Common.UI.ButtonColored.textNewColor": "Add New Custom Color", "Common.UI.Calendar.textApril": "April", "Common.UI.Calendar.textAugust": "August", "Common.UI.Calendar.textDecember": "December", @@ -1787,7 +1789,7 @@ "DE.Views.FormsTab.textClear": "Clear Fields", "DE.Views.FormsTab.textClearFields": "Clear All Fields", "DE.Views.FormsTab.textHighlight": "Highlight Settings", - "DE.Views.FormsTab.textNewColor": "Add New Custom Color", + "del_DE.Views.FormsTab.textNewColor": "Add New Custom Color", "DE.Views.FormsTab.textNoHighlight": "No highlighting", "DE.Views.FormsTab.textRequired": "Fill all required fields to send form.", "DE.Views.FormsTab.textSubmited": "Form submitted successfully", @@ -2749,7 +2751,7 @@ "DE.Views.WatermarkSettingsDialog.textItalic": "Italic", "DE.Views.WatermarkSettingsDialog.textLanguage": "Language", "DE.Views.WatermarkSettingsDialog.textLayout": "Layout", - "DE.Views.WatermarkSettingsDialog.textNewColor": "Add New Custom Color", + "del_DE.Views.WatermarkSettingsDialog.textNewColor": "Add New Custom Color", "DE.Views.WatermarkSettingsDialog.textNone": "None", "DE.Views.WatermarkSettingsDialog.textScale": "Scale", "DE.Views.WatermarkSettingsDialog.textSelect": "Select Image", From a7c5c47b0b6c876055d9c7b0af3f138d510e7035 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sat, 10 Jul 2021 22:54:51 +0300 Subject: [PATCH 249/376] [DE][PE] Fix highlight color button --- apps/documenteditor/main/app/controller/Toolbar.js | 6 ++---- apps/presentationeditor/main/app/controller/Toolbar.js | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index b256207f4..1ff8b5b5c 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -2501,9 +2501,6 @@ define([ onHighlightTransparentClick: function(item, e) { this._setMarkerColor('transparent', 'menu'); - item.setChecked(true, true); - this.toolbar.btnHighlightColor.currentColor = 'transparent'; - this.toolbar.btnHighlightColor.setColor(this.toolbar.btnHighlightColor.currentColor); }, onParagraphColor: function(shd) { @@ -2968,7 +2965,8 @@ define([ var me = this; if (h === 'menu') { - me.toolbar.mnuHighlightTransparent.setChecked(false); + me._state.clrhighlight = undefined; + me.onApiHighlightColor(); me.toolbar.btnHighlightColor.currentColor = strcolor; me.toolbar.btnHighlightColor.setColor(me.toolbar.btnHighlightColor.currentColor); diff --git a/apps/presentationeditor/main/app/controller/Toolbar.js b/apps/presentationeditor/main/app/controller/Toolbar.js index bf908f2ae..d4f2a1ee7 100644 --- a/apps/presentationeditor/main/app/controller/Toolbar.js +++ b/apps/presentationeditor/main/app/controller/Toolbar.js @@ -1965,7 +1965,8 @@ define([ var me = this; if (h === 'menu') { - me.toolbar.mnuHighlightTransparent.setChecked(false); + me._state.clrhighlight = undefined; + me.onApiHighlightColor(); me.toolbar.btnHighlightColor.currentColor = strcolor; me.toolbar.btnHighlightColor.setColor(me.toolbar.btnHighlightColor.currentColor); @@ -2003,9 +2004,6 @@ define([ onHighlightTransparentClick: function(item, e) { this._setMarkerColor('transparent', 'menu'); - item.setChecked(true, true); - this.toolbar.btnHighlightColor.currentColor = 'transparent'; - this.toolbar.btnHighlightColor.setColor(this.toolbar.btnHighlightColor.currentColor); }, onResetAutoshapes: function () { From 1a055fcbccb0695c474c1be056adbf0b135d3e94 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sun, 11 Jul 2021 02:25:12 +0300 Subject: [PATCH 250/376] Refactoring Common.UI.ButtonColored --- .../main/lib/component/ThemeColorPalette.js | 2 +- .../main/app/controller/Toolbar.js | 4 +- apps/documenteditor/main/app/view/FormsTab.js | 2 +- .../main/app/view/WatermarkSettingsDialog.js | 2 +- .../main/app/controller/Toolbar.js | 9 +--- .../main/app/view/Toolbar.js | 15 ++---- apps/presentationeditor/main/locale/en.json | 4 +- .../main/app/controller/Toolbar.js | 41 ++++------------ .../main/app/view/HeaderFooterDialog.js | 48 +++++++------------ .../main/app/view/Toolbar.js | 34 ++++--------- apps/spreadsheeteditor/main/locale/en.json | 2 + 11 files changed, 50 insertions(+), 113 deletions(-) diff --git a/apps/common/main/lib/component/ThemeColorPalette.js b/apps/common/main/lib/component/ThemeColorPalette.js index 85fd4365d..9348e351f 100644 --- a/apps/common/main/lib/component/ThemeColorPalette.js +++ b/apps/common/main/lib/component/ThemeColorPalette.js @@ -306,7 +306,7 @@ define([ select: function(color, suppressEvent) { var el = this.$el || $(this.el); - this.clearSelection(true); + this.clearSelection(); if (typeof(color) == 'object' ) { var effectEl; diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 1ff8b5b5c..ec5669090 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -2450,7 +2450,7 @@ define([ this._setMarkerColor(color, 'menu'); }, - onSelectFontColor: function(picker, color) { + onSelectFontColor: function(btn, color) { this._state.clrtext = this._state.clrtext_asccolor = undefined; this.toolbar.btnFontColor.currentColor = color; @@ -2463,7 +2463,7 @@ define([ Common.component.Analytics.trackEvent('ToolBar', 'Text Color'); }, - onParagraphColorPickerSelect: function(picker, color) { + onParagraphColorPickerSelect: function(btn, color) { this._state.clrback = this._state.clrshd_asccolor = undefined; this.toolbar.btnParagraphColor.currentColor = color; diff --git a/apps/documenteditor/main/app/view/FormsTab.js b/apps/documenteditor/main/app/view/FormsTab.js index 577de8963..52467723a 100644 --- a/apps/documenteditor/main/app/view/FormsTab.js +++ b/apps/documenteditor/main/app/view/FormsTab.js @@ -108,7 +108,7 @@ define([ me.fireEvent('forms:clear'); }); if (this.mnuFormsColorPicker) { - this.btnHighlight.on('color:select', function(picker, color) { + this.btnHighlight.on('color:select', function(btn, color) { me.fireEvent('forms:select-color', [color]); }); this.mnuNoFormsColor.on('click', function (item) { diff --git a/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js b/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js index 7001ff849..072deeb48 100644 --- a/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js +++ b/apps/documenteditor/main/app/view/WatermarkSettingsDialog.js @@ -382,7 +382,7 @@ define(['text!documenteditor/main/app/template/WatermarkSettings.template', }, 10); }, - onColorSelect: function(picker, color) { + onColorSelect: function(btn, color) { this.isAutoColor = false; this.btnTextColor.currentColor = color; }, diff --git a/apps/presentationeditor/main/app/controller/Toolbar.js b/apps/presentationeditor/main/app/controller/Toolbar.js index d4f2a1ee7..5545fdece 100644 --- a/apps/presentationeditor/main/app/controller/Toolbar.js +++ b/apps/presentationeditor/main/app/controller/Toolbar.js @@ -301,8 +301,7 @@ define([ toolbar.btnMarkers.menu.on('show:after', _.bind(this.onListShowAfter, this, 0, toolbar.mnuMarkersPicker)); toolbar.btnNumbers.menu.on('show:after', _.bind(this.onListShowAfter, this, 1, toolbar.mnuNumbersPicker)); toolbar.btnFontColor.on('click', _.bind(this.onBtnFontColor, this)); - toolbar.mnuFontColorPicker.on('select', _.bind(this.onSelectFontColor, this)); - $('#id-toolbar-menu-new-fontcolor').on('click', _.bind(this.onNewFontColor, this)); + toolbar.btnFontColor.on('color:select', _.bind(this.onSelectFontColor, this)); toolbar.btnHighlightColor.on('click', _.bind(this.onBtnHighlightColor, this)); toolbar.mnuHighlightColorPicker.on('select', _.bind(this.onSelectHighlightColor, this)); toolbar.mnuHighlightTransparent.on('click', _.bind(this.onHighlightTransparentClick, this)); @@ -1871,11 +1870,7 @@ define([ return out_value; }, - onNewFontColor: function(picker, color) { - this.toolbar.mnuFontColorPicker.addNewColor(); - }, - - onSelectFontColor: function(picker, color) { + onSelectFontColor: function(btn, color) { this._state.clrtext = this._state.clrtext_asccolor = undefined; this.toolbar.btnFontColor.currentColor = color; diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index f4d32ac28..fab865616 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -362,13 +362,7 @@ define([ iconCls: 'toolbar__icon btn-fontcolor', lock: [_set.slideDeleted, _set.paragraphLock, _set.lostConnect, _set.noSlides, _set.noTextSelected, _set.shapeLock], split: true, - menu: new Common.UI.Menu({ - cls: 'shifted-left', - items: [ - {template: _.template('
    ')}, - {template: _.template('' + me.textNewColor + '')} - ] - }) + menu: true }); me.paragraphControls.push(me.btnFontColor); @@ -1361,10 +1355,9 @@ define([ // DataView and pickers // if (this.btnFontColor.cmpEl) { + this.btnFontColor.setMenu(); + this.mnuFontColorPicker = this.btnFontColor.getPicker(); this.btnFontColor.setColor(this.btnFontColor.currentColor || 'transparent'); - this.mnuFontColorPicker = new Common.UI.ThemeColorPalette({ - el: $('#id-toolbar-menu-fontcolor') - }); } if (this.btnHighlightColor.cmpEl) { this.btnHighlightColor.currentColor = 'FFFF00'; @@ -1377,6 +1370,7 @@ define([ ] }); this.mnuHighlightColorPicker.select('FFFF00'); + this.btnHighlightColor.setPicker(this.mnuHighlightColorPicker); } }, @@ -1733,7 +1727,6 @@ define([ txtDistribVert: 'Distribute Vertically', tipChangeSlide: 'Change Slide Layout', tipColorSchemas: 'Change Color Scheme', - textNewColor: 'Add New Custom Color', mniSlideStandard: 'Standard (4:3)', mniSlideWide: 'Widescreen (16:9)', mniSlideAdvanced: 'Advanced Settings', diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 4129c9812..886830828 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -50,6 +50,8 @@ "Common.Translation.warnFileLocked": "The file is being edited in another app. You can continue editing and save it as a copy.", "Common.Translation.warnFileLockedBtnEdit": "Create a copy", "Common.Translation.warnFileLockedBtnView": "Open for viewing", + "Common.UI.ButtonColored.textAutoColor": "Automatic", + "Common.UI.ButtonColored.textNewColor": "Add New Custom Color", "Common.UI.ColorButton.textAutoColor": "Automatic", "Common.UI.ColorButton.textNewColor": "Add New Custom Color", "Common.UI.ComboBorderSize.txtNoBorders": "No borders", @@ -1906,7 +1908,7 @@ "PE.Views.Toolbar.textColumnsTwo": "Two Columns", "PE.Views.Toolbar.textItalic": "Italic", "PE.Views.Toolbar.textListSettings": "List Settings", - "PE.Views.Toolbar.textNewColor": "Add New Custom Color", + "del_PE.Views.Toolbar.textNewColor": "Add New Custom Color", "PE.Views.Toolbar.textShapeAlignBottom": "Align Bottom", "PE.Views.Toolbar.textShapeAlignCenter": "Align Center", "PE.Views.Toolbar.textShapeAlignLeft": "Align Left", diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 92881e950..c0d34aa37 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -315,10 +315,10 @@ define([ toolbar.btnSubscript.on('click', _.bind(this.onSubscript, this)); toolbar.btnSubscript.menu.on('item:click', _.bind(this.onSubscriptMenu, this)); toolbar.btnTextColor.on('click', _.bind(this.onTextColor, this)); + toolbar.btnTextColor.on('color:select', _.bind(this.onTextColorSelect, this)); + toolbar.btnTextColor.on('auto:select', _.bind(this.onAutoFontColor, this)); toolbar.btnBackColor.on('click', _.bind(this.onBackColor, this)); - toolbar.mnuTextColorPicker.on('select', _.bind(this.onTextColorSelect, this)); - toolbar.mnuBackColorPicker.on('select', _.bind(this.onBackColorSelect, this)); - $('#id-toolbar-menu-auto-fontcolor').on('click', _.bind(this.onAutoFontColor, this)); + toolbar.btnBackColor.on('color:select', _.bind(this.onBackColorSelect, this)); toolbar.btnBorders.on('click', _.bind(this.onBorders, this)); if (toolbar.btnBorders.rendered) { toolbar.btnBorders.menu.on('item:click', _.bind(this.onBordersMenu, this)); @@ -378,8 +378,6 @@ define([ if (toolbar.cmbNumberFormat.cmpEl) toolbar.cmbNumberFormat.cmpEl.on('click', '#id-toolbar-mnu-item-more-formats a', _.bind(this.onNumberFormatSelect, this)); toolbar.btnCurrencyStyle.menu.on('item:click', _.bind(this.onNumberFormatMenu, this)); - $('#id-toolbar-menu-new-fontcolor').on('click', _.bind(this.onNewTextColor, this)); - $('#id-toolbar-menu-new-paracolor').on('click', _.bind(this.onNewBackColor, this)); $('#id-toolbar-menu-new-bordercolor').on('click', _.bind(this.onNewBorderColor, this)); toolbar.btnPageOrient.menu.on('item:click', _.bind(this.onPageOrientSelect, this)); toolbar.btnPageMargins.menu.on('item:click', _.bind(this.onPageMarginsSelect, this)); @@ -613,11 +611,10 @@ define([ this.toolbar.mnuBackColorPicker.trigger('select', this.toolbar.mnuBackColorPicker, this.toolbar.mnuBackColorPicker.currentColor, true); }, - onTextColorSelect: function(picker, color, fromBtn) { + onTextColorSelect: function(btn, color, fromBtn) { this._state.clrtext_asccolor = this._state.clrtext = undefined; this.toolbar.btnTextColor.currentColor = color; - this.toolbar.btnTextColor.setColor((typeof(color) == 'object') ? (color.isAuto ? '000' : color.color) : color); this.toolbar.mnuTextColorPicker.currentColor = color; if (this.api) { @@ -630,14 +627,11 @@ define([ Common.component.Analytics.trackEvent('ToolBar', 'Text Color'); }, - onBackColorSelect: function(picker, color, fromBtn) { + onBackColorSelect: function(btn, color, fromBtn) { this._state.clrshd_asccolor = this._state.clrback = undefined; - var clr = (typeof(color) == 'object') ? color.color : color; - this.toolbar.btnBackColor.currentColor = color; - this.toolbar.btnBackColor.setColor(this.toolbar.btnBackColor.currentColor); - + this.toolbar.mnuBackColorPicker.currentColor = color; if (this.api) { this.toolbar.btnBackColor.ischanged = (fromBtn!==true); @@ -648,14 +642,6 @@ define([ Common.component.Analytics.trackEvent('ToolBar', 'Background Color'); }, - onNewTextColor: function(picker, color) { - this.toolbar.mnuTextColorPicker.addNewColor(); - }, - - onNewBackColor: function(picker, color) { - this.toolbar.mnuBackColorPicker.addNewColor(); - }, - onNewBorderColor: function(picker, color) { this.toolbar.btnBorders.menu.hide(); this.toolbar.btnBorders.toggle(false, true); @@ -669,9 +655,6 @@ define([ color.put_auto(true); this.toolbar.btnTextColor.currentColor = {color: color, isAuto: true}; - this.toolbar.btnTextColor.setColor('000'); - - this.toolbar.mnuTextColorPicker.clearSelection(); this.toolbar.mnuTextColorPicker.currentColor = {color: color, isAuto: true}; if (this.api) { this.api.asc_setCellTextColor(color); @@ -2410,8 +2393,7 @@ define([ if (color.get_auto()) { if (this._state.clrtext !== 'auto') { fontColorPicker.clearSelection(); - var clr_item = this.toolbar.btnTextColor.menu.$el.find('#id-toolbar-menu-auto-fontcolor > a'); - !clr_item.hasClass('selected') && clr_item.addClass('selected'); + this.toolbar.btnTextColor.setAutoColor(true); this._state.clrtext = 'auto'; } } else { @@ -2426,8 +2408,7 @@ define([ (clr.effectValue!==this._state.clrtext.effectValue || this._state.clrtext.color.indexOf(clr.color)<0)) || (type1!='object' && this._state.clrtext!==undefined && this._state.clrtext.indexOf(clr)<0 )) { - var clr_item = this.toolbar.btnTextColor.menu.$el.find('#id-toolbar-menu-auto-fontcolor > a'); - clr_item.hasClass('selected') && clr_item.removeClass('selected'); + this.toolbar.btnTextColor.setAutoColor(false); if (_.isObject(clr)) { var isselected = false; for (var i = 0; i < 10; i++) { @@ -2565,8 +2546,7 @@ define([ if (color.get_auto()) { if (this._state.clrtext !== 'auto') { fontColorPicker.clearSelection(); - var clr_item = this.toolbar.btnTextColor.menu.$el.find('#id-toolbar-menu-auto-fontcolor > a'); - !clr_item.hasClass('selected') && clr_item.addClass('selected'); + toolbar.btnTextColor.setAutoColor(true); this._state.clrtext = 'auto'; } } else { @@ -2581,8 +2561,7 @@ define([ (clr.effectValue!==this._state.clrtext.effectValue || this._state.clrtext.color.indexOf(clr.color)<0)) || (type1!='object' && this._state.clrtext!==undefined && this._state.clrtext.indexOf(clr)<0 )) { - var clr_item = this.toolbar.btnTextColor.menu.$el.find('#id-toolbar-menu-auto-fontcolor > a'); - clr_item.hasClass('selected') && clr_item.removeClass('selected'); + toolbar.btnTextColor.setAutoColor(false); if (_.isObject(clr)) { var isselected = false; for (var i = 0; i < 10; i++) { diff --git a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js index 54c1480a7..8fd8290e4 100644 --- a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js +++ b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js @@ -534,19 +534,13 @@ define([ this.btnSubscript[1].on('click', _.bind(this.onSubscriptClick, this)); this.footerControls.push(this.btnSubscript[1]); - var initNewColor = function(btn, picker_el) { - if (btn && btn.cmpEl) { - btn.currentColor = '000000'; - btn.setColor(btn.currentColor); - var picker = new Common.UI.ThemeColorPalette({ - el: $(picker_el) - }); - picker.currentColor = btn.currentColor; - } - btn.menu.cmpEl.on('click', picker_el+'-new', _.bind(function() { - picker.addNewColor((typeof(btn.color) == 'object') ? btn.color.color : btn.color); - }, me)); - picker.on('select', _.bind(me.onColorSelect, me, btn)); + var initNewColor = function(btn) { + btn.setMenu(); + btn.currentColor = '000000'; + btn.setColor(btn.currentColor); + var picker = btn.getPicker(); + picker.currentColor = btn.currentColor; + btn.on('color:select', _.bind(me.onColorSelect, me)); return picker; }; this.btnTextColor = []; @@ -556,17 +550,13 @@ define([ iconCls : 'toolbar__icon btn-fontcolor', hint : this.textColor, split : true, - menu : new Common.UI.Menu({ - additionalAlign: this.menuAddAlign, - items: [ - { template: _.template('
    ') }, - { template: _.template('' + this.textNewColor + '') } - ] - }) + additionalAlign: this.menuAddAlign, + menu : true })); this.btnTextColor[0].on('click', _.bind(this.onTextColor, this)); + this.mnuTextColorPicker = []; - this.mnuTextColorPicker.push(initNewColor(this.btnTextColor[0], "#id-dlg-h-menu-fontcolor")); + this.mnuTextColorPicker.push(initNewColor(this.btnTextColor[0])); this.headerControls.push(this.btnTextColor[0]); this.btnTextColor.push(new Common.UI.ButtonColored({ @@ -575,16 +565,11 @@ define([ iconCls : 'toolbar__icon btn-fontcolor', hint : this.textColor, split : true, - menu : new Common.UI.Menu({ - additionalAlign: this.menuAddAlign, - items: [ - { template: _.template('
    ') }, - { template: _.template('' + this.textNewColor + '') } - ] - }) + additionalAlign: this.menuAddAlign, + menu : true })); this.btnTextColor[1].on('click', _.bind(this.onTextColor, this)); - this.mnuTextColorPicker.push(initNewColor(this.btnTextColor[1], "#id-dlg-f-menu-fontcolor")); + this.mnuTextColorPicker.push(initNewColor(this.btnTextColor[1])); this.footerControls.push(this.btnTextColor[1]); this.btnOk = new Common.UI.Button({ @@ -898,10 +883,9 @@ define([ mnuTextColorPicker.trigger('select', mnuTextColorPicker, mnuTextColorPicker.currentColor, true); }, - onColorSelect: function(btn, picker, color) { + onColorSelect: function(btn, color) { btn.currentColor = color; - btn.setColor(btn.currentColor); - picker.currentColor = color; + btn.colorPicker.currentColor = color; if (this.HFObject) this.HFObject.setTextColor(Common.Utils.ThemeColor.getRgbColor(color)); this.onCanvasClick(this.currentCanvas); diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 40280cd67..7277446db 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -488,19 +488,8 @@ define([ iconCls : 'toolbar__icon btn-fontcolor', split : true, lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.selSlicer, _set.coAuth, _set.coAuthText, _set.lostConnect], - menu : new Common.UI.Menu({ - cls: 'shifted-left', - items: [ - { - id: 'id-toolbar-menu-auto-fontcolor', - caption: this.textAutoColor, - template: _.template('<%= caption %>') - }, - {caption: '--'}, - { template: _.template('
    ') }, - { template: _.template('' + me.textNewColor + '') } - ] - }) + menu: true, + auto: true }); me.mnuBackColorPicker = dummyCmp(); @@ -510,12 +499,8 @@ define([ iconCls : 'toolbar__icon btn-paracolor', split : true, lock : [_set.selImage, _set.editCell, _set.selSlicer, _set.coAuth, _set.coAuthText, _set.lostConnect], - menu : new Common.UI.Menu({ - items: [ - { template: _.template('
    ') }, - { template: _.template('' + me.textNewColor + '') } - ] - }) + transparent: true, + menu: true }); me.btnBorders = new Common.UI.Button({ @@ -2154,17 +2139,14 @@ define([ // DataView and pickers // if (this.btnTextColor && this.btnTextColor.cmpEl) { + this.btnTextColor.setMenu(); + this.mnuTextColorPicker = this.btnTextColor.getPicker(); this.btnTextColor.setColor(this.btnTextColor.currentColor || 'transparent'); - this.mnuTextColorPicker = new Common.UI.ThemeColorPalette({ - el: $('#id-toolbar-menu-fontcolor') - }); } if (this.btnBackColor && this.btnBackColor.cmpEl) { + this.btnBackColor.setMenu(); + this.mnuBackColorPicker = this.btnBackColor.getPicker(); this.btnBackColor.setColor(this.btnBackColor.currentColor || 'transparent'); - this.mnuBackColorPicker = new Common.UI.ThemeColorPalette({ - el: $('#id-toolbar-menu-paracolor'), - transparent: true - }); } }, diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index e0bcb8240..0f72ec533 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -102,6 +102,8 @@ "Common.Translation.warnFileLocked": "The file is being edited in another app. You can continue editing and save it as a copy.", "Common.Translation.warnFileLockedBtnEdit": "Create a copy", "Common.Translation.warnFileLockedBtnView": "Open for viewing", + "Common.UI.ButtonColored.textAutoColor": "Automatic", + "Common.UI.ButtonColored.textNewColor": "Add New Custom Color", "Common.UI.ColorButton.textAutoColor": "Automatic", "Common.UI.ColorButton.textNewColor": "Add New Custom Color", "Common.UI.ComboBorderSize.txtNoBorders": "No borders", From b5e9e4943fe5972123bf9721f2ccffa814d47cc7 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sun, 11 Jul 2021 12:03:01 +0300 Subject: [PATCH 251/376] [SSE] Refactoring format rules --- .../main/app/view/FormatRulesEditDlg.js | 76 ++++++------------- 1 file changed, 24 insertions(+), 52 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js index 21f537a89..305ffa64b 100644 --- a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js +++ b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js @@ -377,19 +377,11 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', }); this.btnStrikeout.on('click',_.bind(this.onStrikeoutClick, this)); - var initNewColor = function(btn, picker_el, transparent) { - if (btn && btn.cmpEl) { - btn.currentColor = '#000000'; - btn.setColor(btn.currentColor); - var picker = new Common.UI.ThemeColorPalette({ - el: $(picker_el), - transparent: transparent - }); - picker.currentColor = btn.currentColor; - } - btn.menu.cmpEl.on('click', picker_el+'-new', _.bind(function() { - picker.addNewColor((typeof(btn.color) == 'object') ? btn.color.color : btn.color); - }, me)); + var initNewColor = function(btn) { + btn.setMenu(); + btn.currentColor = '000000'; + var picker = btn.getPicker(); + picker.currentColor = btn.currentColor; return picker; }; @@ -399,17 +391,13 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', iconCls : 'toolbar__icon btn-fontcolor', hint : this.textColor, split : true, - menu : new Common.UI.Menu({ - additionalAlign: this.menuAddAlign, - items: [ - { template: _.template('
    ') }, - { template: _.template('' + this.textNewColor + '') } - ] - }) + additionalAlign: this.menuAddAlign, + color: '000000', + menu : true }); - this.mnuTextColorPicker = initNewColor(this.btnTextColor, "#format-rules-menu-fontcolor"); - this.mnuTextColorPicker.on('select', _.bind(me.onFormatTextColorSelect, me)); - this.btnTextColor.on('click', _.bind(me.onFormatTextColor, me)); + this.mnuTextColorPicker = initNewColor(this.btnTextColor); + this.btnTextColor.on('color:select', _.bind(this.onFormatTextColorSelect, this)); + this.btnTextColor.on('click', _.bind(this.onFormatTextColor, this)); this.btnFillColor = new Common.UI.ButtonColored({ parentEl: $('#format-rules-fillcolor'), @@ -417,17 +405,14 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', iconCls : 'toolbar__icon btn-paracolor', hint : this.fillColor, split : true, - menu : new Common.UI.Menu({ - additionalAlign: this.menuAddAlign, - items: [ - { template: _.template('
    ') }, - { template: _.template('' + this.textNewColor + '') } - ] - }) + additionalAlign: this.menuAddAlign, + color: '000000', + transparent: true, + menu : true }); - this.mnuFillColorPicker = initNewColor(this.btnFillColor, "#format-rules-menu-fillcolor", true); - this.mnuFillColorPicker.on('select', _.bind(me.onFormatFillColorSelect, me)); - this.btnFillColor.on('click', _.bind(me.onFormatFillColor, me)); + this.mnuFillColorPicker = initNewColor(this.btnFillColor); + this.btnFillColor.on('color:select', _.bind(this.onFormatFillColorSelect, this)); + this.btnFillColor.on('click', _.bind(this.onFormatFillColor, this)); this.btnBorders = new Common.UI.Button({ parentEl : $('#format-rules-borders'), @@ -1293,17 +1278,8 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', this.btnUnderline.toggle(xfs.asc_getFontUnderline() === true, true); this.btnStrikeout.toggle(xfs.asc_getFontStrikeout() === true, true); - var color = this.setColor(xfs.asc_getFontColor(), null, this.mnuTextColorPicker); - this.btnTextColor.currentColor = color; - this.mnuTextColorPicker.currentColor = color; - color = (typeof(color) == 'object') ? color.color : color; - $('.btn-color-value-line', this.btnTextColor.cmpEl).css('background-color', '#' + color); - - color = this.setColor(xfs.asc_getFillColor(), null, this.mnuFillColorPicker); - this.btnFillColor.currentColor = color; - this.mnuFillColorPicker.currentColor = color; - color = (typeof(color) == 'object') ? color.color : color; - $('.btn-color-value-line', this.btnFillColor.cmpEl).css('background-color', color=='transparent' ? 'transparent' : '#' + color); + var color = this.setColor(xfs.asc_getFontColor(), this.btnTextColor, this.mnuTextColorPicker); + color = this.setColor(xfs.asc_getFillColor(), this.btnFillColor, this.mnuFillColorPicker); var val = xfs.asc_getNumFormatInfo(); val && this.cmbNumberFormat.setValue(val.asc_getType(), this.textCustom); @@ -1697,11 +1673,9 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', } }, - onFormatTextColorSelect: function(picker, color, fromBtn) { - var clr = (typeof(color) == 'object') ? color.color : color; + onFormatTextColorSelect: function(btn, color, fromBtn) { this.btnTextColor.currentColor = color; - $('.btn-color-value-line', this.btnTextColor.cmpEl).css('background-color', '#' + clr); - picker.currentColor = color; + this.mnuTextColorPicker.currentColor = color; !this.xfsFormat && (this.xfsFormat = new Asc.asc_CellXfs()); this.xfsFormat.asc_setFontColor(Common.Utils.ThemeColor.getRgbColor(this.mnuTextColorPicker.currentColor)); @@ -1712,11 +1686,9 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', this.mnuTextColorPicker.trigger('select', this.mnuTextColorPicker, this.mnuTextColorPicker.currentColor, true); }, - onFormatFillColorSelect: function(picker, color, fromBtn) { - var clr = (typeof(color) == 'object') ? color.color : color; + onFormatFillColorSelect: function(btn, color, fromBtn) { this.btnFillColor.currentColor = color; - $('.btn-color-value-line', this.btnFillColor.cmpEl).css('background-color', clr=='transparent' ? 'transparent' : '#' + clr); - picker.currentColor = color; + this.mnuFillColorPicker.currentColor = color; !this.xfsFormat && (this.xfsFormat = new Asc.asc_CellXfs()); this.xfsFormat.asc_setFillColor(this.mnuFillColorPicker.currentColor == 'transparent' ? null : Common.Utils.ThemeColor.getRgbColor(this.mnuFillColorPicker.currentColor)); From 58276fdf3b6aecf159dde32eefe24e2ae07abb84 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sun, 11 Jul 2021 12:07:19 +0300 Subject: [PATCH 252/376] [SSE] Change color buttons for rules format --- .../main/app/view/FormatRulesEditDlg.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js index 305ffa64b..27fc78965 100644 --- a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js +++ b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js @@ -390,21 +390,18 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-fontcolor', hint : this.textColor, - split : true, additionalAlign: this.menuAddAlign, color: '000000', menu : true }); this.mnuTextColorPicker = initNewColor(this.btnTextColor); this.btnTextColor.on('color:select', _.bind(this.onFormatTextColorSelect, this)); - this.btnTextColor.on('click', _.bind(this.onFormatTextColor, this)); this.btnFillColor = new Common.UI.ButtonColored({ parentEl: $('#format-rules-fillcolor'), cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-paracolor', hint : this.fillColor, - split : true, additionalAlign: this.menuAddAlign, color: '000000', transparent: true, @@ -412,7 +409,6 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', }); this.mnuFillColorPicker = initNewColor(this.btnFillColor); this.btnFillColor.on('color:select', _.bind(this.onFormatFillColorSelect, this)); - this.btnFillColor.on('click', _.bind(this.onFormatFillColor, this)); this.btnBorders = new Common.UI.Button({ parentEl : $('#format-rules-borders'), @@ -1682,10 +1678,6 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', this.previewFormat(); }, - onFormatTextColor: function(btn, e) { - this.mnuTextColorPicker.trigger('select', this.mnuTextColorPicker, this.mnuTextColorPicker.currentColor, true); - }, - onFormatFillColorSelect: function(btn, color, fromBtn) { this.btnFillColor.currentColor = color; this.mnuFillColorPicker.currentColor = color; @@ -1695,10 +1687,6 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', this.previewFormat(); }, - onFormatFillColor: function(picker, btn, e) { - this.mnuFillColorPicker.trigger('select', this.mnuFillColorPicker, this.mnuFillColorPicker.currentColor, true); - }, - onNumberFormatSelect: function(combo, record) { !this.xfsFormat && (this.xfsFormat = new Asc.asc_CellXfs()); this.xfsFormat.asc_setNumFormatInfo(record.format); From 9eeba125d07fbeefb6593d18cd3c665359693150 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sun, 11 Jul 2021 13:49:39 +0300 Subject: [PATCH 253/376] Refactoring --- apps/common/main/lib/component/ColorButton.js | 294 ++++-------------- apps/documenteditor/main/locale/en.json | 4 +- apps/presentationeditor/main/locale/en.json | 4 +- apps/spreadsheeteditor/main/locale/en.json | 4 +- 4 files changed, 75 insertions(+), 231 deletions(-) diff --git a/apps/common/main/lib/component/ColorButton.js b/apps/common/main/lib/component/ColorButton.js index 1d9a3f0a5..c9f4e0dfb 100644 --- a/apps/common/main/lib/component/ColorButton.js +++ b/apps/common/main/lib/component/ColorButton.js @@ -39,230 +39,6 @@ define([ ], function () { 'use strict'; - Common.UI.ColorButton = Common.UI.Button.extend(_.extend({ - options : { - id : null, - hint : false, - enableToggle : false, - allowDepress : false, - toggleGroup : null, - cls : '', - iconCls : '', - caption : '', - menu : null, - disabled : false, - pressed : false, - split : false, - visible : true - }, - - template: _.template([ - '
    ', - '', - '
    ' - ].join('')), - - initialize : function(options) { - if (!options.menu && options.menu !== false) {// menu==null or undefined - // set default menu - var me = this; - options.menu = me.getMenu(options); - me.on('render:after', function(btn) { - me.getPicker(options.color, options.colors); - }); - } - - Common.UI.Button.prototype.initialize.call(this, options); - }, - - render: function(parentEl) { - Common.UI.Button.prototype.render.call(this, parentEl); - - if (this.options.auto) - this.autocolor = (typeof this.options.auto == 'object') ? this.options.auto.color || '000000' : '000000'; - - this.cmpEl.on('keydown.after.bs.dropdown', _.bind(this.onAfterKeydownMenu, this)); - - if (this.options.color!==undefined) - this.setColor(this.options.color); - }, - - onColorSelect: function(picker, color) { - this.setColor(color); - this.setAutoColor(false); - this.trigger('color:select', this, color); - }, - - setColor: function(color) { - if (color == 'auto' && this.options.auto) - color = this.autocolor; - var span = $(this.cmpEl).find('button span:nth-child(1)'); - this.color = color; - - span.toggleClass('color-transparent', color=='transparent'); - span.css({'background-color': (color=='transparent') ? color : ((typeof(color) == 'object') ? '#'+color.color : '#'+color)}); - }, - - getPicker: function(color, colors) { - if (!this.colorPicker) { - this.colorPicker = new Common.UI.ThemeColorPalette({ - el: this.cmpEl.find('#' + this.menu.id + '-color-menu'), - transparent: this.options.transparent, - value: color, - colors: colors, - parentButton: this - }); - this.colorPicker.on('select', _.bind(this.onColorSelect, this)); - this.cmpEl.find('#' + this.menu.id + '-color-new').on('click', _.bind(this.addNewColor, this)); - if (this.options.auto) { - this.cmpEl.find('#' + this.menu.id + '-color-auto').on('click', _.bind(this.onAutoColorSelect, this)); - this.colorAuto = this.cmpEl.find('#' + this.menu.id + '-color-auto > a'); - (color == 'auto') && this.setAutoColor(true); - } - } - return this.colorPicker; - }, - - getMenu: function(options) { - if (typeof this.menu !== 'object') { - options = options || this.options; - var height = options.paletteHeight || 240, - id = Common.UI.getId(), - auto = []; - if (options.auto) { - this.autocolor = (typeof options.auto == 'object') ? options.auto.color || '000000' : '000000'; - auto.push({ - id: id + '-color-auto', - caption: (typeof options.auto == 'object') ? options.auto.caption || this.textAutoColor : this.textAutoColor, - template: _.template('<%= caption %>') - }); - auto.push({caption: '--'}); - } - - var menu = new Common.UI.Menu({ - id: id, - cls: 'shifted-left', - additionalAlign: options.additionalAlign, - items: (options.additionalItems ? options.additionalItems : []).concat(auto).concat([ - { template: _.template('
    ') }, - { - id: id + '-color-new', - template: _.template('' + this.textNewColor + '') - } - ]) - }); - this.colorPicker && (this.colorPicker.parentButton = menu); - var me = this; - menu.on('keydown:before', _.bind(this.onBeforeKeyDown, this)); - menu.on('show:after', function(menu) { - me.colorPicker && _.delay(function() { - me.colorPicker.showLastSelected(); - !(options.additionalItems || options.auto) && me.colorPicker.focus(); - }, 10); - }).on('hide:after', function() { - if (me.options.takeFocusOnClose) { - setTimeout(function(){me.focus();}, 1); - } - }); - return menu; - } - return this.menu; - }, - - setMenu: function (m) { - m = m || this.getMenu(); - Common.UI.Button.prototype.setMenu.call(this, m); - this.getPicker(this.options.color, this.options.colors); - }, - - addNewColor: function() { - this.colorPicker && this.colorPicker.addNewColor((typeof(this.color) == 'object') ? this.color.color : this.color); - }, - - onAutoColorSelect: function() { - this.setColor('auto'); - this.setAutoColor(true); - this.colorPicker && this.colorPicker.clearSelection(); - this.trigger('auto:select', this, this.autocolor); - }, - - setAutoColor: function(selected) { - if (!this.colorAuto) return; - if (selected && !this.colorAuto.hasClass('selected')) - this.colorAuto.addClass('selected'); - else if (!selected && this.colorAuto.hasClass('selected')) - this.colorAuto.removeClass('selected'); - }, - - isAutoColor: function() { - return this.colorAuto && this.colorAuto.hasClass('selected'); - }, - - focus: function() { - $('button', this.cmpEl).focus(); - }, - - onAfterKeydownMenu: function(e) { - if ((e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.SPACE) && !this.isMenuOpen()) { - $('button', this.cmpEl).click(); - return false; - } - }, - - onBeforeKeyDown: function(menu, e) { - console.log(e.keyCode); - if (e.keyCode == Common.UI.Keys.RETURN) { - e.preventDefault(); - e.stopPropagation(); - var li = $(e.target).closest('li'); - (li.length>0) && li.click(); - Common.UI.Menu.Manager.hideAll(); - } else if (e.namespace!=="after.bs.dropdown" && (e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.UP)) { - var $items = $('> [role=menu] > li:not(.divider):not(.disabled):visible', menu.$el).find('> a'); - if (!$items.length) return; - var index = $items.index($items.filter(':focus')), - me = this, - pickerIndex = $items.length-1 ; - if (e.keyCode == Common.UI.Keys.DOWN && (index==pickerIndex-1 || pickerIndex==0) || e.keyCode == Common.UI.Keys.UP && index==pickerIndex) { - e.preventDefault(); - e.stopPropagation(); - _.delay(function() { - me.focusInner(e); - }, 10); - } - } - }, - - isMenuOpen: function() { - return this.cmpEl.hasClass('open'); - }, - - focusInner: function(e) { - if (!this.colorPicker) return; - - this.colorPicker.focus(e.keyCode == Common.UI.Keys.DOWN ? 'first' : 'last'); - }, - - focusOuter: function(e) { - if (!this.menu) return; - - var $items = $('> [role=menu] > li:not(.divider):not(.disabled):visible', this.menu.$el).find('> a'); - if (!$items.length) return; - - $items.eq(e.keyCode == Common.UI.Keys.UP ? $items.length-2 : $items.length-1).focus(); - }, - - textNewColor: 'Add New Custom Color', - textAutoColor: 'Automatic' - - }, Common.UI.ColorButton || {})); - - Common.UI.ButtonColored = Common.UI.Button.extend(_.extend({ render: function(parentEl) { Common.UI.Button.prototype.render.call(this, parentEl); @@ -403,7 +179,6 @@ define([ }, onBeforeKeyDown: function(menu, e) { - console.log(e.keyCode); if (e.keyCode == Common.UI.Keys.RETURN) { e.preventDefault(); e.stopPropagation(); @@ -450,4 +225,73 @@ define([ }, Common.UI.ButtonColored || {})); + + Common.UI.ColorButton = Common.UI.ButtonColored.extend(_.extend({ + options : { + id : null, + hint : false, + enableToggle : false, + allowDepress : false, + toggleGroup : null, + cls : '', + iconCls : '', + caption : '', + menu : null, + disabled : false, + pressed : false, + split : false, + visible : true + }, + + template: _.template([ + '
    ', + '', + '
    ' + ].join('')), + + initialize : function(options) { + if (!options.menu && options.menu !== false) {// menu==null or undefined + // set default menu + var me = this; + options.menu = me.getMenu(options); + me.on('render:after', function(btn) { + me.getPicker(options.color, options.colors); + }); + } + + Common.UI.Button.prototype.initialize.call(this, options); + }, + + render: function(parentEl) { + Common.UI.Button.prototype.render.call(this, parentEl); + + if (this.options.auto) + this.autocolor = (typeof this.options.auto == 'object') ? this.options.auto.color || '000000' : '000000'; + + this.cmpEl.on('keydown.after.bs.dropdown', _.bind(this.onAfterKeydownMenu, this)); + + if (this.options.color!==undefined) + this.setColor(this.options.color); + }, + + setColor: function(color) { + if (color == 'auto' && this.options.auto) + color = this.autocolor; + var span = $(this.cmpEl).find('button span:nth-child(1)'); + this.color = color; + + span.toggleClass('color-transparent', color=='transparent'); + span.css({'background-color': (color=='transparent') ? color : ((typeof(color) == 'object') ? '#'+color.color : '#'+color)}); + }, + + focus: function() { + $('button', this.cmpEl).focus(); + } + + }, Common.UI.ColorButton || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 2d04c619d..12083157f 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -159,8 +159,8 @@ "Common.UI.Calendar.textShortTuesday": "Tu", "Common.UI.Calendar.textShortWednesday": "We", "Common.UI.Calendar.textYears": "Years", - "Common.UI.ColorButton.textAutoColor": "Automatic", - "Common.UI.ColorButton.textNewColor": "Add New Custom Color", + "del_Common.UI.ColorButton.textAutoColor": "Automatic", + "del_Common.UI.ColorButton.textNewColor": "Add New Custom Color", "Common.UI.ComboBorderSize.txtNoBorders": "No borders", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "No borders", "Common.UI.ComboDataView.emptyComboText": "No styles", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 886830828..7aa6fa7cb 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -52,8 +52,8 @@ "Common.Translation.warnFileLockedBtnView": "Open for viewing", "Common.UI.ButtonColored.textAutoColor": "Automatic", "Common.UI.ButtonColored.textNewColor": "Add New Custom Color", - "Common.UI.ColorButton.textAutoColor": "Automatic", - "Common.UI.ColorButton.textNewColor": "Add New Custom Color", + "del_Common.UI.ColorButton.textAutoColor": "Automatic", + "del_Common.UI.ColorButton.textNewColor": "Add New Custom Color", "Common.UI.ComboBorderSize.txtNoBorders": "No borders", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "No borders", "Common.UI.ComboDataView.emptyComboText": "No styles", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 0f72ec533..26faec297 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -104,8 +104,8 @@ "Common.Translation.warnFileLockedBtnView": "Open for viewing", "Common.UI.ButtonColored.textAutoColor": "Automatic", "Common.UI.ButtonColored.textNewColor": "Add New Custom Color", - "Common.UI.ColorButton.textAutoColor": "Automatic", - "Common.UI.ColorButton.textNewColor": "Add New Custom Color", + "del_Common.UI.ColorButton.textAutoColor": "Automatic", + "del_Common.UI.ColorButton.textNewColor": "Add New Custom Color", "Common.UI.ComboBorderSize.txtNoBorders": "No borders", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "No borders", "Common.UI.ComboDataView.emptyComboText": "No styles", From 2be31ade1e1638aecec9a9e27c7a536854bacdeb Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sun, 11 Jul 2021 16:12:05 +0300 Subject: [PATCH 254/376] Add focus for color buttons in modal dialogs --- apps/common/main/lib/component/ColorButton.js | 17 ++++------ .../main/lib/view/ListSettingsDialog.js | 6 ++-- .../main/app/view/ControlSettingsDialog.js | 6 ++-- .../main/app/view/DropcapSettingsAdvanced.js | 33 ++++++++++++++----- .../main/app/view/ListSettingsDialog.js | 6 ++-- .../main/app/view/TableSettingsAdvanced.js | 21 +++++++++--- .../main/app/view/FormatRulesEditDlg.js | 30 +++++++++++++---- 7 files changed, 82 insertions(+), 37 deletions(-) diff --git a/apps/common/main/lib/component/ColorButton.js b/apps/common/main/lib/component/ColorButton.js index c9f4e0dfb..88064fc16 100644 --- a/apps/common/main/lib/component/ColorButton.js +++ b/apps/common/main/lib/component/ColorButton.js @@ -49,8 +49,6 @@ define([ if (this.options.auto) this.autocolor = (typeof this.options.auto == 'object') ? this.options.auto.color || '000000' : '000000'; - this.cmpEl.on('keydown.after.bs.dropdown', _.bind(this.onAfterKeydownMenu, this)); - if (this.options.color!==undefined) this.setColor(this.options.color); }, @@ -171,19 +169,18 @@ define([ this.colorPicker && this.colorPicker.addNewColor((typeof(this.color) == 'object') ? this.color.color : this.color); }, - onAfterKeydownMenu: function(e) { + onBeforeKeyDown: function(menu, e) { if ((e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.SPACE) && !this.isMenuOpen()) { $('button', this.cmpEl).click(); return false; } - }, - - onBeforeKeyDown: function(menu, e) { if (e.keyCode == Common.UI.Keys.RETURN) { - e.preventDefault(); - e.stopPropagation(); var li = $(e.target).closest('li'); - (li.length>0) && li.click(); + if (li.length>0) { + e.preventDefault(); + e.stopPropagation(); + li.click(); + } Common.UI.Menu.Manager.hideAll(); } else if (e.namespace!=="after.bs.dropdown" && (e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.UP)) { var $items = $('> [role=menu] > li:not(.divider):not(.disabled):visible', menu.$el).find('> a'); @@ -273,8 +270,6 @@ define([ if (this.options.auto) this.autocolor = (typeof this.options.auto == 'object') ? this.options.auto.color || '000000' : '000000'; - this.cmpEl.on('keydown.after.bs.dropdown', _.bind(this.onAfterKeydownMenu, this)); - if (this.options.color!==undefined) this.setColor(this.options.color); }, diff --git a/apps/common/main/lib/view/ListSettingsDialog.js b/apps/common/main/lib/view/ListSettingsDialog.js index 54a13d0b2..96afdac6a 100644 --- a/apps/common/main/lib/view/ListSettingsDialog.js +++ b/apps/common/main/lib/view/ListSettingsDialog.js @@ -292,7 +292,9 @@ define([ parentEl: $window.find('#id-dlg-list-color'), style: "width:45px;", additionalAlign: this.menuAddAlign, - color: this.color + color: this.color, + cls: 'move-focus', + takeFocusOnClose: true }); this.btnColor.on('color:select', _.bind(this.onColorsSelect, this)); this.colors = this.btnColor.getPicker(); @@ -321,7 +323,7 @@ define([ }, getFocusedComponents: function() { - return [this.cmbNumFormat, this.cmbBulletFormat, this.spnSize, this.spnStart]; + return [this.cmbNumFormat, this.cmbBulletFormat, this.spnSize, this.spnStart, this.btnColor]; }, afterRender: function() { diff --git a/apps/documenteditor/main/app/view/ControlSettingsDialog.js b/apps/documenteditor/main/app/view/ControlSettingsDialog.js index 537918e74..a2ce6ee1c 100644 --- a/apps/documenteditor/main/app/view/ControlSettingsDialog.js +++ b/apps/documenteditor/main/app/view/ControlSettingsDialog.js @@ -141,7 +141,9 @@ define([ 'text!documenteditor/main/app/template/ControlSettingsDialog.template', '33CCCC', '3366FF', '800080', '999999', 'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF', '993366', 'C0C0C0', 'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', 'C9C8FF', 'CC99FF', 'FFFFFF' ], - paletteHeight: 94 + paletteHeight: 94, + cls: 'move-focus', + takeFocusOnClose: true }); this.colors = this.btnColor.getPicker(); @@ -357,7 +359,7 @@ define([ 'text!documenteditor/main/app/template/ControlSettingsDialog.template', getFocusedComponents: function() { return [ - this.txtName, this.txtTag, this.txtPlaceholder, this.cmbShow, this.btnApplyAll, // 0 tab + this.txtName, this.txtTag, this.txtPlaceholder, this.cmbShow, this.btnColor, this.btnApplyAll, // 0 tab this.chLockDelete , this.chLockEdit, // 1 tab this.list, // 2 tab this.txtDate, this.listFormats, this.cmbLang // 3 tab diff --git a/apps/documenteditor/main/app/view/DropcapSettingsAdvanced.js b/apps/documenteditor/main/app/view/DropcapSettingsAdvanced.js index 4eaf5f6d5..3eda0e8c5 100644 --- a/apps/documenteditor/main/app/view/DropcapSettingsAdvanced.js +++ b/apps/documenteditor/main/app/view/DropcapSettingsAdvanced.js @@ -112,6 +112,7 @@ define([ spacingMode: false }); + this._btnsBorderPosition = []; _.each([ [c_tableBorder.BORDER_HORIZONTAL_TOP, 't', 'btn-borders-large toolbar__icon toolbar__icon-big paragraph-borders-top', '00'], [c_tableBorder.BORDER_HORIZONTAL_CENTER, 'm', 'btn-borders-large toolbar__icon toolbar__icon-big paragraph-borders-inner', '01'], @@ -134,6 +135,7 @@ define([ _btn.on('click', function(btn) { me._ApplyBorderPreset(btn.options.strId); }); + me._btnsBorderPosition.push( _btn ); }, this); var txtPt = Common.Utils.Metric.getMetricName(Common.Utils.Metric.c_MetricUnits.pt); @@ -164,7 +166,9 @@ define([ parentEl: $('#drop-advanced-button-bordercolor'), additionalAlign: this.menuAddAlign, color: 'auto', - auto: true + auto: true, + cls: 'move-focus', + takeFocusOnClose: true }); this.btnBorderColor.on('color:select', _.bind(function(btn, color) { this.tableStyler.setVirtualBorderColor((typeof(color) == 'object') ? color.color : color); @@ -177,7 +181,9 @@ define([ this.btnBackColor = new Common.UI.ColorButton({ parentEl: $('#drop-advanced-button-color'), additionalAlign: this.menuAddAlign, - transparent: true + transparent: true, + cls: 'move-focus', + takeFocusOnClose: true }); this.btnBackColor.on('color:select', _.bind(function(btn, color) { var clr, border; @@ -720,8 +726,9 @@ define([ return [ this.cmbWidth, this.spnWidth, this.cmbHeight, this.spnHeight, this.cmbHAlign, this.cmbHRelative, this.spnX, this.cmbVAlign, this.cmbVRelative, this.spnY, this.chMove, // 0 tab this.cmbFonts, this.spnRowHeight, this.numDistance, // 1 tab + this.cmbBorderSize, this.btnBorderColor].concat(this._btnsBorderPosition).concat([this.btnBackColor, // 2 tab this.spnMarginTop, this.spnMarginLeft, this.spnMarginBottom, this.spnMarginRight // 3 tab - ]; + ]); }, onCategoryClick: function(btn, index) { @@ -729,12 +736,20 @@ define([ var me = this; setTimeout(function(){ - if (index==0) { - me.cmbWidth.focus(); - } else if (index==1) { - me.cmbFonts.focus(); - } else if (index==3) - me.spnMarginTop.focus(); + switch (index) { + case 0: + me.cmbWidth.focus(); + break; + case 1: + me.cmbFonts.focus(); + break; + case 2: + me.cmbBorderSize.focus(); + break; + case 3: + me.spnMarginTop.focus(); + break; + } }, 100); }, diff --git a/apps/documenteditor/main/app/view/ListSettingsDialog.js b/apps/documenteditor/main/app/view/ListSettingsDialog.js index 7c7a11f94..75238cfd3 100644 --- a/apps/documenteditor/main/app/view/ListSettingsDialog.js +++ b/apps/documenteditor/main/app/view/ListSettingsDialog.js @@ -171,7 +171,9 @@ define([ style: 'padding-left: 20px;' }, {caption: '--'}], - additionalAlign: this.menuAddAlign + additionalAlign: this.menuAddAlign, + cls: 'move-focus', + takeFocusOnClose: true }); this.btnColor.on('color:select', _.bind(this.onColorsSelect, this)); this.btnColor.menu.items[0].on('toggle', _.bind(this.onLikeTextColor, this)); @@ -342,7 +344,7 @@ define([ }, getFocusedComponents: function() { - return [this.btnEdit, this.cmbFormat, this.cmbAlign, this.cmbSize, this.levelsList]; + return [this.btnEdit, this.cmbFormat, this.cmbAlign, this.cmbSize, this.btnColor, this.levelsList]; }, getDefaultFocusableComponent: function () { diff --git a/apps/documenteditor/main/app/view/TableSettingsAdvanced.js b/apps/documenteditor/main/app/view/TableSettingsAdvanced.js index 0df32d36a..1030478cc 100644 --- a/apps/documenteditor/main/app/view/TableSettingsAdvanced.js +++ b/apps/documenteditor/main/app/view/TableSettingsAdvanced.js @@ -879,7 +879,8 @@ define([ 'text!documenteditor/main/app/template/TableSettingsAdvanced.templat this.cmbBorderSize = new Common.UI.ComboBorderSize({ el: $('#tableadv-combo-border-size'), - style: "width: 93px;" + style: "width: 93px;", + takeFocusOnClose: true }); var rec = this.cmbBorderSize.store.at(1); this.BorderSize = {ptValue: rec.get('value'), pxValue: rec.get('pxValue')}; @@ -890,7 +891,9 @@ define([ 'text!documenteditor/main/app/template/TableSettingsAdvanced.templat parentEl: $('#tableadv-border-color-btn'), additionalAlign: this.menuAddAlign, color: 'auto', - auto: true + auto: true, + cls: 'move-focus', + takeFocusOnClose: true }); this.btnBorderColor.on('color:select', _.bind(me.onColorsBorderSelect, me)); this.btnBorderColor.on('auto:select', _.bind(me.onColorsBorderSelect, me)); @@ -899,7 +902,9 @@ define([ 'text!documenteditor/main/app/template/TableSettingsAdvanced.templat this.btnBackColor = new Common.UI.ColorButton({ parentEl: $('#tableadv-button-back-color'), additionalAlign: this.menuAddAlign, - transparent: true + transparent: true, + cls: 'move-focus', + takeFocusOnClose: true }); this.btnBackColor.on('color:select', _.bind(this.onColorsBackSelect, this)); this.colorsBack = this.btnBackColor.getPicker(); @@ -907,7 +912,9 @@ define([ 'text!documenteditor/main/app/template/TableSettingsAdvanced.templat this.btnTableBackColor = new Common.UI.ColorButton({ parentEl: $('#tableadv-button-table-back-color'), additionalAlign: this.menuAddAlign, - transparent: true + transparent: true, + cls: 'move-focus', + takeFocusOnClose: true }); this.btnTableBackColor.on('color:select', _.bind(this.onColorsTableBackSelect, this)); this.colorsTableBack = this.btnTableBackColor.getPicker(); @@ -1012,11 +1019,12 @@ define([ 'text!documenteditor/main/app/template/TableSettingsAdvanced.templat return [ this.chWidth, this.nfWidth, this.cmbUnit, this.chAutofit, this.spnTableMarginTop, this.spnTableMarginLeft, this.spnTableMarginBottom, this.spnTableMarginRight, this.chAllowSpacing, this.nfSpacing, // 0 tab this.chPrefWidth, this.nfPrefWidth, this.cmbPrefWidthUnit, this.chCellMargins, this.spnMarginTop, this.spnMarginLeft, this.spnMarginBottom, this.spnMarginRight, this.chWrapText, // 1 tab + this.cmbBorderSize, this.btnBorderColor].concat(this._btnsBorderPosition).concat(this._btnsTableBorderPosition).concat([this.btnBackColor, this.btnTableBackColor, this.radioHAlign, this.cmbHAlign , this.radioHPosition, this.cmbHRelative, this.spnX, this.cmbHPosition, this.radioVAlign, this.cmbVAlign , this.radioVPosition, this.cmbVRelative, this.spnY, this.cmbVPosition, this.chMove, this.chOverlap, // 3 tab this.spnIndentLeft, this.spnDistanceTop, this.spnDistanceLeft, this.spnDistanceBottom, this.spnDistanceRight, // 4 tab this.inputAltTitle, this.textareaAltDescription // 5 tab - ]; + ]); }, onCategoryClick: function(btn, index) { @@ -1038,6 +1046,9 @@ define([ 'text!documenteditor/main/app/template/TableSettingsAdvanced.templat else me.chPrefWidth.focus(); break; + case 2: + me.cmbBorderSize.focus(); + break; case 3: if (!me.cmbHAlign.isDisabled()) me.cmbHAlign.focus(); diff --git a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js index 27fc78965..5af7f83fa 100644 --- a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js +++ b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js @@ -881,15 +881,21 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', parentEl: $('#format-rules-edit-color-pos-fill'), style: "width:45px;", menu : true, - color : '638EC6' + color : '638EC6', + cls: 'move-focus', + takeFocusOnClose: true }); + Common.UI.FocusManager.add(this, this.btnPosFill); this.btnNegFill = new Common.UI.ColorButton({ parentEl: $('#format-rules-edit-color-neg-fill'), style: "width:45px;", menu : true, - color : 'FF0000' + color : 'FF0000', + cls: 'move-focus', + takeFocusOnClose: true }); + Common.UI.FocusManager.add(this, this.btnNegFill); this.chFill = new Common.UI.CheckBox({ el: $('#format-rules-edit-chk-fill'), @@ -932,15 +938,21 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', parentEl: $('#format-rules-edit-color-pos-border'), style: "width:45px;", menu : true, - color : '000000' + color : '000000', + cls: 'move-focus', + takeFocusOnClose: true }); + Common.UI.FocusManager.add(this, this.btnPosBorder); this.btnNegBorder = new Common.UI.ColorButton({ parentEl: $('#format-rules-edit-color-neg-border'), style: "width:45px;", menu : true, - color : '000000' + color : '000000', + cls: 'move-focus', + takeFocusOnClose: true }); + Common.UI.FocusManager.add(this, this.btnNegBorder); this.chBorder = new Common.UI.CheckBox({ el: $('#format-rules-edit-chk-border'), @@ -1001,8 +1013,11 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', parentEl: $('#format-rules-edit-color-axis-color'), style: "width:45px;", menu : true, - color : '000000' + color : '000000', + cls: 'move-focus', + takeFocusOnClose: true }); + Common.UI.FocusManager.add(this, this.btnAxisColor); this.panels.databar.rendered = true; this.updateThemeColors(); @@ -1056,8 +1071,11 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', parentEl: $('#format-rules-edit-color-scale-' + (i+1)), menu : true, type : i, - color : '000000' + color : '000000', + cls: 'move-focus', + takeFocusOnClose: true }); + Common.UI.FocusManager.add(this, color); this.scaleControls.push({combo: combo, range: range, color: color}); } this.panels.scale.rendered = true; From 779f09b295754184c7ab340311a69c43e3c919dc Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Sun, 11 Jul 2021 23:47:42 +0300 Subject: [PATCH 255/376] Fix color palette --- apps/common/main/lib/component/ThemeColorPalette.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/component/ThemeColorPalette.js b/apps/common/main/lib/component/ThemeColorPalette.js index 9348e351f..81c074cc3 100644 --- a/apps/common/main/lib/component/ThemeColorPalette.js +++ b/apps/common/main/lib/component/ThemeColorPalette.js @@ -166,7 +166,7 @@ define([ updateCustomColors: function() { var el = this.$el || $(this.el); if (el) { - var selected = el.find('a.' + this.selectedCls), + var selected = (this.lastSelectedIdx>=0) ? $(this.colorItems[this.lastSelectedIdx].el) : el.find('a.' + this.selectedCls), color = (selected.length>0 && /color-dynamic/.test(selected[0].className)) ? selected.attr('color') : undefined; if (color) { // custom color was selected color = color.toUpperCase(); From cc271cd7236823a1bf6fe26efa911ebcc5f51e15 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 12 Jul 2021 00:30:52 +0300 Subject: [PATCH 256/376] Bug 42150: add sort direction --- apps/common/main/lib/controller/Comments.js | 17 +++++++---- apps/common/main/lib/view/Comments.js | 32 +++++++++++++++------ apps/documenteditor/main/locale/en.json | 6 ++-- apps/presentationeditor/main/locale/en.json | 6 ++-- apps/spreadsheeteditor/main/locale/en.json | 6 ++-- 5 files changed, 47 insertions(+), 20 deletions(-) diff --git a/apps/common/main/lib/controller/Comments.js b/apps/common/main/lib/controller/Comments.js index 89cba715a..a93ccca3c 100644 --- a/apps/common/main/lib/controller/Comments.js +++ b/apps/common/main/lib/controller/Comments.js @@ -210,19 +210,24 @@ define([ if (this.collection) { var sort = (type !== undefined); if (type === undefined) { - type = Common.localStorage.getItem(this.appPrefix + "comments-sort") || 'date'; + type = Common.localStorage.getItem(this.appPrefix + "comments-sort") || 'date-desc'; } Common.localStorage.setItem(this.appPrefix + "comments-sort", type); Common.Utils.InternalSettings.set(this.appPrefix + "comments-sort", type); if (type=='position') { - } else if (type=='author') { - this.collection.comparator = function (collection) { - return collection.get('parsedName').toLowerCase(); + } else if (type=='author-asc' || type=='author-desc') { + var direction = (type=='author-asc') ? 1 : -1; + this.collection.comparator = function(item1, item2) { + var n1 = item1.get('parsedName').toLowerCase(), + n2 = item2.get('parsedName').toLowerCase(); + if (n1==n2) return 0; + return (n1
    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 4129c9812..29eb081a2 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -141,8 +141,10 @@ "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", "Common.Views.Comments.mniPosition": "Sort by Position", - "Common.Views.Comments.mniAuthor": "Sort by Authors", - "Common.Views.Comments.mniDate": "Sort by Date", + "Common.Views.Comments.mniAuthorAsc": "Sort by Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Sort by Author Z to A", + "Common.Views.Comments.mniDateDesc": "Sort by Newest", + "Common.Views.Comments.mniDateAsc": "Sort by Oldest", "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index e0bcb8240..6a72a95fc 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -189,8 +189,10 @@ "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", "Common.Views.Comments.mniPosition": "Sort by Position", - "Common.Views.Comments.mniAuthor": "Sort by Authors", - "Common.Views.Comments.mniDate": "Sort by Date", + "Common.Views.Comments.mniAuthorAsc": "Sort by Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Sort by Author Z to A", + "Common.Views.Comments.mniDateDesc": "Sort by Newest", + "Common.Views.Comments.mniDateAsc": "Sort by Oldest", "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", From b1534675c45451ad1dc750d74166ffea7cae5b16 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 12 Jul 2021 11:12:02 +0300 Subject: [PATCH 257/376] For Bug 42150 --- apps/common/main/lib/view/Comments.js | 32 +++++++++++++-------- apps/documenteditor/main/locale/en.json | 11 +++---- apps/presentationeditor/main/locale/en.json | 11 +++---- apps/spreadsheeteditor/main/locale/en.json | 11 +++---- 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/apps/common/main/lib/view/Comments.js b/apps/common/main/lib/view/Comments.js index ef7c07137..cb57fadde 100644 --- a/apps/common/main/lib/view/Comments.js +++ b/apps/common/main/lib/view/Comments.js @@ -334,13 +334,6 @@ define([ menuAlign: 'tr-br', style: 'min-width: auto;', items: [ - // { - // caption: this.mniPosition, - // value: 'position', - // checkable: true, - // checked: Common.localStorage.getItem(this.appPrefix + "comments-sort") === 'position', - // toggleGroup: 'sortcomments' - // }, { caption: this.mniDateDesc, value: 'date-desc', @@ -369,6 +362,20 @@ define([ checked: Common.localStorage.getItem(this.appPrefix + "comments-sort") === 'author-desc', toggleGroup: 'sortcomments' } + // { + // caption: this.mniPositionAsc, + // value: 'position-asc', + // checkable: true, + // checked: Common.localStorage.getItem(this.appPrefix + "comments-sort") === 'position-asc', + // toggleGroup: 'sortcomments' + // } + // { + // caption: this.mniPositionDesc, + // value: 'position-desc', + // checkable: true, + // checked: Common.localStorage.getItem(this.appPrefix + "comments-sort") === 'position-desc', + // toggleGroup: 'sortcomments' + // } ] }) }); @@ -818,11 +825,12 @@ define([ textOpenAgain : "Open Again", textHintAddComment : 'Add Comment', textSort: 'Sort comments', - mniPosition: 'Sort by Position', - mniAuthorAsc: 'Sort by Author A to Z', - mniAuthorDesc: 'Sort by Author Z to A', - mniDateDesc: 'Sort by Newest', - mniDateAsc: 'Sort by Oldest', + mniPositionAsc: 'From top', + mniPositionDesc: 'From bottom', + mniAuthorAsc: 'Author A to Z', + mniAuthorDesc: 'Author Z to A', + mniDateDesc: 'Newest', + mniDateAsc: 'Oldest', textClosePanel: 'Close comments' }, Common.Views.Comments || {})) }); \ No newline at end of file diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index d32ddc500..548481b04 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -247,11 +247,12 @@ "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", - "Common.Views.Comments.mniPosition": "Sort by Position", - "Common.Views.Comments.mniAuthorAsc": "Sort by Author A to Z", - "Common.Views.Comments.mniAuthorDesc": "Sort by Author Z to A", - "Common.Views.Comments.mniDateDesc": "Sort by Newest", - "Common.Views.Comments.mniDateAsc": "Sort by Oldest", + "Common.Views.Comments.mniAuthorAsc": "Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Author Z to A", + "Common.Views.Comments.mniDateDesc": "Newest", + "Common.Views.Comments.mniDateAsc": "Oldest", + "Common.Views.Comments.mniPositionAsc": "From top", + "Common.Views.Comments.mniPositionDesc": "From bottom", "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 29eb081a2..83358ad68 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -140,11 +140,12 @@ "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", - "Common.Views.Comments.mniPosition": "Sort by Position", - "Common.Views.Comments.mniAuthorAsc": "Sort by Author A to Z", - "Common.Views.Comments.mniAuthorDesc": "Sort by Author Z to A", - "Common.Views.Comments.mniDateDesc": "Sort by Newest", - "Common.Views.Comments.mniDateAsc": "Sort by Oldest", + "Common.Views.Comments.mniAuthorAsc": "Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Author Z to A", + "Common.Views.Comments.mniDateDesc": "Newest", + "Common.Views.Comments.mniDateAsc": "Oldest", + "Common.Views.Comments.mniPositionAsc": "From top", + "Common.Views.Comments.mniPositionDesc": "From bottom", "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 6a72a95fc..b4013a5d2 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -188,11 +188,12 @@ "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", - "Common.Views.Comments.mniPosition": "Sort by Position", - "Common.Views.Comments.mniAuthorAsc": "Sort by Author A to Z", - "Common.Views.Comments.mniAuthorDesc": "Sort by Author Z to A", - "Common.Views.Comments.mniDateDesc": "Sort by Newest", - "Common.Views.Comments.mniDateAsc": "Sort by Oldest", + "Common.Views.Comments.mniAuthorAsc": "Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Author Z to A", + "Common.Views.Comments.mniDateDesc": "Newest", + "Common.Views.Comments.mniDateAsc": "Oldest", + "Common.Views.Comments.mniPositionAsc": "From top", + "Common.Views.Comments.mniPositionDesc": "From bottom", "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", From d6da7e82a201afb413feb83c3d93f4431fe9c135 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 12 Jul 2021 11:50:18 +0300 Subject: [PATCH 258/376] Update translation. Fix Bug 51170 --- apps/documenteditor/embed/locale/tr.json | 1 + apps/documenteditor/embed/locale/zh.json | 9 + apps/documenteditor/main/locale/ca.json | 281 ++++++++- apps/documenteditor/main/locale/en.json | 20 +- apps/documenteditor/main/locale/es.json | 4 +- apps/documenteditor/main/locale/it.json | 10 + apps/documenteditor/main/locale/nl.json | 51 +- apps/documenteditor/main/locale/pt.json | 2 +- apps/documenteditor/main/locale/ru.json | 2 +- apps/documenteditor/main/locale/tr.json | 57 ++ apps/documenteditor/main/locale/zh.json | 8 + apps/presentationeditor/embed/locale/ro.json | 1 + apps/presentationeditor/embed/locale/tr.json | 1 + apps/presentationeditor/embed/locale/zh.json | 1 + apps/presentationeditor/main/locale/ca.json | 318 +++++++---- apps/presentationeditor/main/locale/en.json | 2 +- apps/presentationeditor/main/locale/es.json | 2 +- apps/presentationeditor/main/locale/it.json | 8 +- apps/presentationeditor/main/locale/nl.json | 25 +- apps/presentationeditor/main/locale/ru.json | 2 +- apps/presentationeditor/main/locale/zh.json | 10 + apps/spreadsheeteditor/embed/locale/ro.json | 1 + apps/spreadsheeteditor/embed/locale/tr.json | 1 + apps/spreadsheeteditor/embed/locale/zh.json | 1 + apps/spreadsheeteditor/main/locale/ca.json | 567 +++++++++++++++++-- apps/spreadsheeteditor/main/locale/en.json | 6 +- apps/spreadsheeteditor/main/locale/es.json | 4 +- apps/spreadsheeteditor/main/locale/it.json | 12 + apps/spreadsheeteditor/main/locale/nl.json | 45 ++ apps/spreadsheeteditor/main/locale/pl.json | 2 +- apps/spreadsheeteditor/main/locale/ro.json | 45 ++ apps/spreadsheeteditor/main/locale/ru.json | 6 +- 32 files changed, 1280 insertions(+), 225 deletions(-) diff --git a/apps/documenteditor/embed/locale/tr.json b/apps/documenteditor/embed/locale/tr.json index 2895da645..6cc48ad89 100644 --- a/apps/documenteditor/embed/locale/tr.json +++ b/apps/documenteditor/embed/locale/tr.json @@ -22,6 +22,7 @@ "DE.ApplicationController.textNext": "Sonraki alan", "DE.ApplicationController.textOf": "'in", "DE.ApplicationController.textSubmit": "Kaydet", + "DE.ApplicationController.textSubmited": "Form başarılı bir şekilde kaydedildi
    İpucunu kapatmak için tıklayın", "DE.ApplicationController.txtClose": "Kapat", "DE.ApplicationController.unknownErrorText": "Bilinmeyen hata.", "DE.ApplicationController.unsupportedBrowserErrorText": "Tarayıcınız desteklenmiyor.", diff --git a/apps/documenteditor/embed/locale/zh.json b/apps/documenteditor/embed/locale/zh.json index 3305185d9..16ef5651e 100644 --- a/apps/documenteditor/embed/locale/zh.json +++ b/apps/documenteditor/embed/locale/zh.json @@ -11,20 +11,29 @@ "DE.ApplicationController.downloadTextText": "正在下载文件...", "DE.ApplicationController.errorAccessDeny": "您正在尝试执行您没有权限的操作。
    请联系您的文档服务器管理员.", "DE.ApplicationController.errorDefaultMessage": "错误代码:%1", + "DE.ApplicationController.errorEditingDownloadas": "在处理文档期间发生错误。
    使用“下载为…”选项将文件备份复制到您的计算机硬盘中。", "DE.ApplicationController.errorFilePassProtect": "该文档受密码保护,无法被打开。", "DE.ApplicationController.errorFileSizeExceed": "文件大小超出了为服务器设置的限制.
    有关详细信息,请与文档服务器管理员联系。", + "DE.ApplicationController.errorSubmit": "提交失败", "DE.ApplicationController.errorUpdateVersionOnDisconnect": "网络连接已恢复,文件版本已变更。
    在继续工作之前,需要下载文件或复制其内容以避免丢失数据,然后刷新此页。", "DE.ApplicationController.errorUserDrop": "该文件现在无法访问。", "DE.ApplicationController.notcriticalErrorTitle": "警告", "DE.ApplicationController.scriptLoadError": "连接速度过慢,部分组件无法被加载。请重新加载页面。", + "DE.ApplicationController.textClear": "清除所有字段", "DE.ApplicationController.textLoadingDocument": "文件加载中…", + "DE.ApplicationController.textNext": "下一域", "DE.ApplicationController.textOf": "的", + "DE.ApplicationController.textSubmit": "提交", + "DE.ApplicationController.textSubmited": "表单成功地被提交了
    点击以关闭贴士", "DE.ApplicationController.txtClose": "关闭", "DE.ApplicationController.unknownErrorText": "未知错误。", "DE.ApplicationController.unsupportedBrowserErrorText": "您的浏览器不受支持", "DE.ApplicationController.waitText": "请稍候...", "DE.ApplicationView.txtDownload": "下载", + "DE.ApplicationView.txtDownloadDocx": "导出成docx格式", + "DE.ApplicationView.txtDownloadPdf": "导出成PDF格式", "DE.ApplicationView.txtEmbed": "嵌入", + "DE.ApplicationView.txtFileLocation": "打开文件所在位置", "DE.ApplicationView.txtFullScreen": "全屏", "DE.ApplicationView.txtPrint": "打印", "DE.ApplicationView.txtShare": "共享" diff --git a/apps/documenteditor/main/locale/ca.json b/apps/documenteditor/main/locale/ca.json index 2e87e25f5..0e40567ac 100644 --- a/apps/documenteditor/main/locale/ca.json +++ b/apps/documenteditor/main/locale/ca.json @@ -18,6 +18,7 @@ "Common.Controllers.ReviewChanges.textBreakBefore": "Salt de pàgina abans", "Common.Controllers.ReviewChanges.textCaps": "Majúscules ", "Common.Controllers.ReviewChanges.textCenter": "Centrar", + "Common.Controllers.ReviewChanges.textChar": "Nivell de caràcter", "Common.Controllers.ReviewChanges.textChart": "Gràfic", "Common.Controllers.ReviewChanges.textColor": "Color de Font", "Common.Controllers.ReviewChanges.textContextual": "No afegiu interval entre paràgrafs del mateix estil", @@ -47,6 +48,10 @@ "Common.Controllers.ReviewChanges.textNot": "No", "Common.Controllers.ReviewChanges.textNoWidow": "Sense control de la finestra", "Common.Controllers.ReviewChanges.textNum": "Canviar numeració", + "Common.Controllers.ReviewChanges.textOff": "{0} Ja no s'utilitza el seguiment de canvis.", + "Common.Controllers.ReviewChanges.textOffGlobal": "{0} S'ha inhabilitat el Seguiment de Canvis per a tothom.", + "Common.Controllers.ReviewChanges.textOn": "{0} Ara s'està utilitzant el seguiment de canvis.", + "Common.Controllers.ReviewChanges.textOnGlobal": "{0} S'ha activat el seguiment de canvis per a tothom.", "Common.Controllers.ReviewChanges.textParaDeleted": "Paràgraf Suprimit", "Common.Controllers.ReviewChanges.textParaFormatted": "Paràgraf Formatat", "Common.Controllers.ReviewChanges.textParaInserted": "Paràgraf Inserit", @@ -57,6 +62,7 @@ "Common.Controllers.ReviewChanges.textRight": "Alinear dreta", "Common.Controllers.ReviewChanges.textShape": "Forma", "Common.Controllers.ReviewChanges.textShd": "Color de Fons", + "Common.Controllers.ReviewChanges.textShow": "Mostra els canvis a", "Common.Controllers.ReviewChanges.textSmallCaps": "Majúscules petites", "Common.Controllers.ReviewChanges.textSpacing": "Espai", "Common.Controllers.ReviewChanges.textSpacingAfter": "Espai després", @@ -68,19 +74,56 @@ "Common.Controllers.ReviewChanges.textTableRowsAdd": "Files de Taula Afegides", "Common.Controllers.ReviewChanges.textTableRowsDel": "Files de Taula Suprimides", "Common.Controllers.ReviewChanges.textTabs": "Canviar tabulació", + "Common.Controllers.ReviewChanges.textTitleComparison": "Paràmetres de comparació", "Common.Controllers.ReviewChanges.textUnderline": "Subratllar", "Common.Controllers.ReviewChanges.textUrl": "Enganxar la URL del document", "Common.Controllers.ReviewChanges.textWidow": "Control Finestra", + "Common.Controllers.ReviewChanges.textWord": "Nivell de paraula", "Common.define.chartData.textArea": "Àrea", + "Common.define.chartData.textAreaStacked": "Àrea apilada", + "Common.define.chartData.textAreaStackedPer": "Àrea apilada al 100%", "Common.define.chartData.textBar": "Barra", + "Common.define.chartData.textBarNormal": "Columna agrupada", + "Common.define.chartData.textBarNormal3d": "Columna 3D agrupada", + "Common.define.chartData.textBarNormal3dPerspective": "Columna 3D", + "Common.define.chartData.textBarStacked": "Columna apilada", + "Common.define.chartData.textBarStacked3d": "Columna 3D apilada", + "Common.define.chartData.textBarStackedPer": "Columna apilada al 100%", + "Common.define.chartData.textBarStackedPer3d": "columna 3D apilada al 100%", "Common.define.chartData.textCharts": "Gràfics", "Common.define.chartData.textColumn": "Columna", + "Common.define.chartData.textCombo": "Combo", + "Common.define.chartData.textComboAreaBar": "Àrea apilada - columna agrupada", + "Common.define.chartData.textComboBarLine": "Columna-línia agrupada", + "Common.define.chartData.textComboBarLineSecondary": " Columna-línia agrupada a l'eix secundari", + "Common.define.chartData.textComboCustom": "Combinació personalitzada", + "Common.define.chartData.textDoughnut": "Donut", + "Common.define.chartData.textHBarNormal": "Barra agrupada", + "Common.define.chartData.textHBarNormal3d": "Barra 3D agrupada", + "Common.define.chartData.textHBarStacked": "Barra apilada", + "Common.define.chartData.textHBarStacked3d": "Barra 3D apilada", + "Common.define.chartData.textHBarStackedPer": "Barra apilada al 100%", + "Common.define.chartData.textHBarStackedPer3d": "Barra 3-D apilada al 100%", "Common.define.chartData.textLine": "Línia", + "Common.define.chartData.textLine3d": "Línia 3D", + "Common.define.chartData.textLineMarker": "Línia amb marcadors", + "Common.define.chartData.textLineStacked": "Línia apilada", + "Common.define.chartData.textLineStackedMarker": "Línia apilada amb marcadors", + "Common.define.chartData.textLineStackedPer": "Línia apilada al 100%", + "Common.define.chartData.textLineStackedPerMarker": "Línia apilada al 100% amb marcadors", "Common.define.chartData.textPie": "Gràfic circular", + "Common.define.chartData.textPie3d": "Pastís 3D", "Common.define.chartData.textPoint": "XY (Dispersió)", + "Common.define.chartData.textScatter": "Dispersió", + "Common.define.chartData.textScatterLine": "Dispersió amb línies rectes", + "Common.define.chartData.textScatterLineMarker": "Dispersió amb línies rectes i marcadors", + "Common.define.chartData.textScatterSmooth": "Dispersió amb línies suaus", + "Common.define.chartData.textScatterSmoothMarker": "Dispersió amb línies suaus i marcadors", "Common.define.chartData.textStock": "Existències", "Common.define.chartData.textSurface": "Superfície", - "Common.Translation.warnFileLocked": "El document està sent editat per una altra aplicació. Podeu continuar editant i guardar-lo com a còpia.", + "Common.Translation.warnFileLocked": "No pot editar aquest fitxer perquè s'està editant en una altra aplicació.", + "Common.Translation.warnFileLockedBtnEdit": "Crea una còpia", + "Common.Translation.warnFileLockedBtnView": "Obrir per veure", "Common.UI.Calendar.textApril": "Abril", "Common.UI.Calendar.textAugust": "Agost", "Common.UI.Calendar.textDecember": "Desembre", @@ -114,6 +157,7 @@ "Common.UI.Calendar.textShortTuesday": "Dim", "Common.UI.Calendar.textShortWednesday": "Dim", "Common.UI.Calendar.textYears": "Anys", + "Common.UI.ColorButton.textAutoColor": "Automàtic", "Common.UI.ColorButton.textNewColor": "Afegir un Nou Color Personalitzat", "Common.UI.ComboBorderSize.txtNoBorders": "Sense vores", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "Sense vores", @@ -138,6 +182,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Un altre usuari ha canviat el document.
    Feu clic per desar els canvis i tornar a carregar les actualitzacions.", "Common.UI.ThemeColorPalette.textStandartColors": "Colors Estàndards", "Common.UI.ThemeColorPalette.textThemeColors": "Colors Tema", + "Common.UI.Themes.txtThemeClassicLight": "Llum clàssica", + "Common.UI.Themes.txtThemeDark": "Fosc", + "Common.UI.Themes.txtThemeLight": "Llum", "Common.UI.Window.cancelButtonText": "Cancel·lar", "Common.UI.Window.closeButtonText": "Tancar", "Common.UI.Window.noButtonText": "No", @@ -159,10 +206,12 @@ "Common.Views.About.txtVersion": "Versió", "Common.Views.AutoCorrectDialog.textAdd": "Afegir", "Common.Views.AutoCorrectDialog.textApplyText": "Aplica a mesura que escrius", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Correcció Automàtica", "Common.Views.AutoCorrectDialog.textAutoFormat": "Format automàtic a mesura que escriviu", "Common.Views.AutoCorrectDialog.textBulleted": "Llistes automàtiques de vinyetes", "Common.Views.AutoCorrectDialog.textBy": "Per", "Common.Views.AutoCorrectDialog.textDelete": "Esborrar", + "Common.Views.AutoCorrectDialog.textFLSentence": "Posa en majúscules la primera lletra de les frases", "Common.Views.AutoCorrectDialog.textHyphens": "Guions (--) amb guió (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Correcció Automàtica Matemàtica", "Common.Views.AutoCorrectDialog.textNumbered": "Llistes numerades automàtiques", @@ -212,11 +261,13 @@ "Common.Views.ExternalMergeEditor.textSave": "Desar i Sortir", "Common.Views.ExternalMergeEditor.textTitle": "Receptors de Fusió de Correu", "Common.Views.Header.labelCoUsersDescr": "Usuaris que editen el fitxer:", + "Common.Views.Header.textAddFavorite": "Marca com a favorit", "Common.Views.Header.textAdvSettings": "Configuració Avançada", "Common.Views.Header.textBack": "Obrir ubicació del arxiu", "Common.Views.Header.textCompactView": "Amagar la Barra d'Eines", "Common.Views.Header.textHideLines": "Amagar Regles", "Common.Views.Header.textHideStatusBar": "Amagar la Barra d'Estat", + "Common.Views.Header.textRemoveFavorite": "Elimina dels Favorits", "Common.Views.Header.textZoom": "Zoom", "Common.Views.Header.tipAccessRights": "Gestiona els drets d’accés al document", "Common.Views.Header.tipDownload": "Descarregar arxiu", @@ -290,10 +341,15 @@ "Common.Views.ReviewChanges.strFastDesc": "Co-edició a temps real. Tots", "Common.Views.ReviewChanges.strStrict": "Estricte", "Common.Views.ReviewChanges.strStrictDesc": "Feu servir el botó \"Desa\" per sincronitzar els canvis que feu i els altres.", + "Common.Views.ReviewChanges.textEnable": "Activar", + "Common.Views.ReviewChanges.textWarnTrackChanges": "El seguiment de canvis s'activarà per a tots els usuaris amb accés total. La pròxima vegada que algú obri el document, el seguiment de canvis seguirà activat.", + "Common.Views.ReviewChanges.textWarnTrackChangesTitle": "Voleu activar el seguiment de canvis per a tothom?", "Common.Views.ReviewChanges.tipAcceptCurrent": "Acceptar el canvi actual", "Common.Views.ReviewChanges.tipCoAuthMode": "Configura el mode de coedició", "Common.Views.ReviewChanges.tipCommentRem": "Esborrar comentaris", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Esborrar comentaris actuals", + "Common.Views.ReviewChanges.tipCommentResolve": "Resoldre els comentaris", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Resol els comentaris actuals", "Common.Views.ReviewChanges.tipCompare": "Comparar el document actual amb un altre", "Common.Views.ReviewChanges.tipHistory": "Mostra l'historial de versions", "Common.Views.ReviewChanges.tipRejectCurrent": "Rebutjar canvi actual", @@ -305,7 +361,7 @@ "Common.Views.ReviewChanges.txtAccept": "Acceptar", "Common.Views.ReviewChanges.txtAcceptAll": "Acceptar Tots els Canvis", "Common.Views.ReviewChanges.txtAcceptChanges": "Acceptar canvis", - "Common.Views.ReviewChanges.txtAcceptCurrent": "Acceptar els Canvis Actuals", + "Common.Views.ReviewChanges.txtAcceptCurrent": "Acceptar el Canvis Actual", "Common.Views.ReviewChanges.txtChat": "Xat", "Common.Views.ReviewChanges.txtClose": "Tancar", "Common.Views.ReviewChanges.txtCoAuthMode": "Mode de Coedició", @@ -314,6 +370,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Esborrar els meus comentaris", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Esborrar els meus actuals comentaris", "Common.Views.ReviewChanges.txtCommentRemove": "Esborrar", + "Common.Views.ReviewChanges.txtCommentResolve": "Resol", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Resoldre tots els comentaris", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Resol els comentaris actuals", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Resoldre els Meus Comentaris", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Resoldre els Meus Comentaris Actuals", "Common.Views.ReviewChanges.txtCompare": "Comparar", "Common.Views.ReviewChanges.txtDocLang": "Idioma", "Common.Views.ReviewChanges.txtFinal": "Tots el canvis acceptats (Previsualitzar)", @@ -322,6 +383,10 @@ "Common.Views.ReviewChanges.txtMarkup": "Tots els canvis (Edició)", "Common.Views.ReviewChanges.txtMarkupCap": "Cambis", "Common.Views.ReviewChanges.txtNext": "Següent", + "Common.Views.ReviewChanges.txtOff": "DESACTIVAT per mi", + "Common.Views.ReviewChanges.txtOffGlobal": "DESACTIVAT per mi i per tothom", + "Common.Views.ReviewChanges.txtOn": "ACTIU per mi", + "Common.Views.ReviewChanges.txtOnGlobal": "ACTIU per mi i per tothom", "Common.Views.ReviewChanges.txtOriginal": "Tots els canvis rebutjats (Previsualitzar)", "Common.Views.ReviewChanges.txtOriginalCap": "Original", "Common.Views.ReviewChanges.txtPrev": "Anterior", @@ -336,7 +401,7 @@ "Common.Views.ReviewChangesDialog.textTitle": "Revisar canvis", "Common.Views.ReviewChangesDialog.txtAccept": "Acceptar", "Common.Views.ReviewChangesDialog.txtAcceptAll": "Acceptar Tots els Canvis", - "Common.Views.ReviewChangesDialog.txtAcceptCurrent": "Acceptar el Canvi Actual", + "Common.Views.ReviewChangesDialog.txtAcceptCurrent": "Acceptar el canvi actual", "Common.Views.ReviewChangesDialog.txtNext": "Al següent canvi", "Common.Views.ReviewChangesDialog.txtPrev": "Al canvi anterior", "Common.Views.ReviewChangesDialog.txtReject": "Rebutjar", @@ -349,7 +414,7 @@ "Common.Views.ReviewPopover.textEdit": "Acceptar", "Common.Views.ReviewPopover.textFollowMove": "Seguir Moure", "Common.Views.ReviewPopover.textMention": "+mention proporcionarà accés al document i enviarà un correu electrònic", - "Common.Views.ReviewPopover.textMentionNotify": "+mention notificarà l'usuari per correu electrònic", + "Common.Views.ReviewPopover.textMentionNotify": "+mention notificarà a l'usuari per correu electrònic", "Common.Views.ReviewPopover.textOpenAgain": "Obriu de nou", "Common.Views.ReviewPopover.textReply": "Contestar", "Common.Views.ReviewPopover.textResolve": "Resol", @@ -362,6 +427,7 @@ "Common.Views.SignDialog.textChange": "Canviar", "Common.Views.SignDialog.textInputName": "Posar nom de qui ho firma", "Common.Views.SignDialog.textItalic": "Itàlica", + "Common.Views.SignDialog.textNameError": "El nom del signant no pot estar buit.", "Common.Views.SignDialog.textPurpose": "Finalitat de signar aquest document", "Common.Views.SignDialog.textSelect": "Selecciona", "Common.Views.SignDialog.textSelectImage": "Seleccionar Imatge", @@ -407,6 +473,9 @@ "Common.Views.SymbolTableDialog.textSymbols": "Símbols", "Common.Views.SymbolTableDialog.textTitle": "Símbol", "Common.Views.SymbolTableDialog.textTradeMark": "Símbol de Marca Comercial", + "Common.Views.UserNameDialog.textDontShow": "No em tornis a preguntar", + "Common.Views.UserNameDialog.textLabel": "Etiqueta:", + "Common.Views.UserNameDialog.textLabelError": "L'etiqueta no pot estar en blanc.", "DE.Controllers.LeftMenu.leavePageText": "Es perdran tots els canvis no guardats en aquest document.
    Feu clic a \"Cancel·lar\" i, a continuació, \"Desa\" per desar-los. Feu clic a \"OK\" per descartar tots els canvis no desats.", "DE.Controllers.LeftMenu.newDocumentTitle": "Document sense nom", "DE.Controllers.LeftMenu.notcriticalErrorTitle": "Avis", @@ -432,6 +501,7 @@ "DE.Controllers.Main.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", "DE.Controllers.Main.errorBadImageUrl": "Enllaç de la Imatge Incorrecte", "DE.Controllers.Main.errorCoAuthoringDisconnect": "S'ha perdut la connexió amb el servidor. El document no es pot editar ara mateix.", + "DE.Controllers.Main.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", "DE.Controllers.Main.errorCompare": "La funció de comparació de documents no està disponible durant la coedició.", "DE.Controllers.Main.errorConnectToServer": "El document no s'ha pogut desar. Comproveu la configuració de la connexió o poseu-vos en contacte amb el vostre administrador.
    Quan feu clic al botó \"D'acord\", se us demanarà que descarregueu el document.", "DE.Controllers.Main.errorDatabaseConnection": "Error extern.
    Error de connexió de base de dades. Contacteu amb l'assistència en cas que l'error continuï.", @@ -454,7 +524,9 @@ "DE.Controllers.Main.errorSessionAbsolute": "La sessió d’edició del document ha caducat. Torneu a carregar la pàgina.", "DE.Controllers.Main.errorSessionIdle": "El document no s’ha editat des de fa temps. Torneu a carregar la pàgina.", "DE.Controllers.Main.errorSessionToken": "S'ha interromput la connexió amb el servidor. Torneu a carregar la pàgina.", + "DE.Controllers.Main.errorSetPassword": "No s'ha pogut establir la contrasenya.", "DE.Controllers.Main.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", + "DE.Controllers.Main.errorSubmit": "L'enviament ha fallat.", "DE.Controllers.Main.errorToken": "El testimoni de seguretat del document no està format correctament.
    Contacteu l'administrador del servidor de documents.", "DE.Controllers.Main.errorTokenExpire": "El testimoni de seguretat del document ha caducat.
    Contacteu amb l'administrador del Document Server.", "DE.Controllers.Main.errorUpdateVersion": "La versió del fitxer s'ha canviat. La pàgina es tornarà a carregar.", @@ -463,6 +535,7 @@ "DE.Controllers.Main.errorUsersExceed": "S'ha superat el nombre d’usuaris permès pel pla de preus", "DE.Controllers.Main.errorViewerDisconnect": "Es perd la connexió. Encara podeu visualitzar el document,
    però no podreu descarregar-lo ni imprimir-lo fins que no es restableixi la connexió i es torni a carregar la pàgina.", "DE.Controllers.Main.leavePageText": "Heu fet canvis no guardats en aquest document. Feu clic a \"Continua en aquesta pàgina\" i, a continuació, \"Desa\" per desar-les. Feu clic a \"Deixa aquesta pàgina\" per descartar tots els canvis no desats.", + "DE.Controllers.Main.leavePageTextOnClose": "Es perdran tots els canvis no guardats en aquest document.
    Feu clic a \"Cancel·lar\" i, a continuació, \"Desa\" per desar-los. Feu clic a \"OK\" per descartar tots els canvis no desats.", "DE.Controllers.Main.loadFontsTextText": "Carregant dades...", "DE.Controllers.Main.loadFontsTitleText": "Carregant Dades", "DE.Controllers.Main.loadFontTextText": "Carregant dades...", @@ -485,6 +558,7 @@ "DE.Controllers.Main.requestEditFailedMessageText": "Algú està editant aquest document ara mateix. Si us plau, intenta-ho més tard.", "DE.Controllers.Main.requestEditFailedTitleText": "Accés denegat", "DE.Controllers.Main.saveErrorText": "S'ha produït un error en desar el fitxer.", + "DE.Controllers.Main.saveErrorTextDesktop": "Aquest fitxer no es pot desar o crear.
    Les raons possibles són:
    1. El fitxer és de només lectura.
    2. El fitxer està sent editat per altres usuaris.
    3. El disc està ple o corromput.", "DE.Controllers.Main.savePreparingText": "Preparant per guardar", "DE.Controllers.Main.savePreparingTitle": "Preparant per guardar. Si us plau, esperi", "DE.Controllers.Main.saveTextText": "Desant Document...", @@ -504,15 +578,20 @@ "DE.Controllers.Main.textContactUs": "Contacte de Vendes", "DE.Controllers.Main.textConvertEquation": "Aquesta equació es va crear amb una versió antiga de l'editor d'equacions que ja no és compatible. Per editar-la, converteix l’equació al format d’Office Math ML.
    Converteix ara?", "DE.Controllers.Main.textCustomLoader": "Tingueu en compte que, segons els termes de la llicència, no teniu dret a canviar el carregador.
    Consulteu el nostre departament de vendes per obtenir un pressupost.", + "DE.Controllers.Main.textGuest": "Convidat", "DE.Controllers.Main.textHasMacros": "El fitxer conté macros automàtiques.
    Voleu executar macros?", "DE.Controllers.Main.textLearnMore": "Aprèn Més", "DE.Controllers.Main.textLoadingDocument": "Carregant document", + "DE.Controllers.Main.textLongName": "Introduïu un nom que sigui inferior a 128 caràcters.", "DE.Controllers.Main.textNoLicenseTitle": "Heu arribat al límit de la llicència", "DE.Controllers.Main.textPaidFeature": "Funció de pagament", - "DE.Controllers.Main.textRemember": "Recorda la meva elecció", + "DE.Controllers.Main.textRemember": "Recordar la meva elecció per a tots els fitxers", + "DE.Controllers.Main.textRenameError": "El nom d'usuari no pot estar buit.", + "DE.Controllers.Main.textRenameLabel": "Introduïu un nom per a la col·laboració", "DE.Controllers.Main.textShape": "Forma", "DE.Controllers.Main.textStrict": "Mode estricte", "DE.Controllers.Main.textTryUndoRedo": "Les funcions Desfés / Rehabiliteu estan desactivades per al mode de coedició ràpida. Feu clic al botó \"Mode estricte\" per canviar al mode de coedició estricte per editar el fitxer sense que hi hagi interferències d'altres usuaris i enviar els canvis només després de desar-lo ells. Podeu canviar entre els modes de coedició mitjançant l'editor Paràmetres avançats.", + "DE.Controllers.Main.textTryUndoRedoWarn": "Les funcions Desfer/Refer estan desactivades per al mode de coedició ràpida.", "DE.Controllers.Main.titleLicenseExp": "Llicència Caducada", "DE.Controllers.Main.titleServerVersion": "S'ha actualitzat l'editor", "DE.Controllers.Main.titleUpdateVersion": "Versió canviada", @@ -525,6 +604,7 @@ "DE.Controllers.Main.txtCallouts": "Trucades", "DE.Controllers.Main.txtCharts": "Gràfics", "DE.Controllers.Main.txtChoose": "Tria un element", + "DE.Controllers.Main.txtClickToLoad": "Clicar per carregar la imatge", "DE.Controllers.Main.txtCurrentDocument": "Actual Document", "DE.Controllers.Main.txtDiagramTitle": "Gràfic Títol", "DE.Controllers.Main.txtEditingMode": "Establir el mode d'edició ...", @@ -545,7 +625,9 @@ "DE.Controllers.Main.txtMissArg": "Falta Argument", "DE.Controllers.Main.txtMissOperator": "Falta Operador", "DE.Controllers.Main.txtNeedSynchronize": "Teniu actualitzacions", + "DE.Controllers.Main.txtNone": "cap", "DE.Controllers.Main.txtNoTableOfContents": "No hi ha cap títol al document. Apliqueu un estil d’encapçalament al text perquè aparegui a la taula de continguts.", + "DE.Controllers.Main.txtNoTableOfFigures": "No s'ha trobat cap entrada a la taula de figures.", "DE.Controllers.Main.txtNoText": "Error! No hi ha cap text d'estil especificat al document.", "DE.Controllers.Main.txtNotInTable": "No està en la taula", "DE.Controllers.Main.txtNotValidBookmark": "Error! No és una autoreferenciació de favorit vàlid.", @@ -671,7 +753,7 @@ "DE.Controllers.Main.txtShape_mathNotEqual": "No igual", "DE.Controllers.Main.txtShape_mathPlus": "Més", "DE.Controllers.Main.txtShape_moon": "Lluna", - "DE.Controllers.Main.txtShape_noSmoking": "\"No\" Símbol", + "DE.Controllers.Main.txtShape_noSmoking": "Símbol \"No\"", "DE.Controllers.Main.txtShape_notchedRightArrow": "Fletxa a la dreta encaixada", "DE.Controllers.Main.txtShape_octagon": "Octagon", "DE.Controllers.Main.txtShape_parallelogram": "Paral·lelograma", @@ -701,16 +783,16 @@ "DE.Controllers.Main.txtShape_snip2SameRect": "Retallar Rectangle de la cantonada del mateix costat", "DE.Controllers.Main.txtShape_snipRoundRect": "Retallar i rondejar rectangle de cantonada senzilla", "DE.Controllers.Main.txtShape_spline": "Corba", - "DE.Controllers.Main.txtShape_star10": "10-Punt Principal", - "DE.Controllers.Main.txtShape_star12": "12-Punt Principal", - "DE.Controllers.Main.txtShape_star16": "16-Punt Principal", - "DE.Controllers.Main.txtShape_star24": "24-Punt Principal", - "DE.Controllers.Main.txtShape_star32": "32-Punt Principal", - "DE.Controllers.Main.txtShape_star4": "4-Punt Principal", - "DE.Controllers.Main.txtShape_star5": "5-Punt Principal", - "DE.Controllers.Main.txtShape_star6": "6-Punt Principal", - "DE.Controllers.Main.txtShape_star7": "7-Punt Principal", - "DE.Controllers.Main.txtShape_star8": "8-Punt Principal", + "DE.Controllers.Main.txtShape_star10": "Estrella de 10 puntes", + "DE.Controllers.Main.txtShape_star12": "Estrella de 12 puntes", + "DE.Controllers.Main.txtShape_star16": "Estrella de 16 puntes", + "DE.Controllers.Main.txtShape_star24": "Estrella de 24 puntes", + "DE.Controllers.Main.txtShape_star32": "Estrella de 32 puntes", + "DE.Controllers.Main.txtShape_star4": "Estrella de 4 puntes", + "DE.Controllers.Main.txtShape_star5": "Estrella de 5 puntes", + "DE.Controllers.Main.txtShape_star6": "Estrella de 6 puntes", + "DE.Controllers.Main.txtShape_star7": "Estrella de 7 puntes", + "DE.Controllers.Main.txtShape_star8": "Estrella de 8 puntes", "DE.Controllers.Main.txtShape_stripedRightArrow": "Fletxa a la dreta amb bandes", "DE.Controllers.Main.txtShape_sun": "Sol", "DE.Controllers.Main.txtShape_teardrop": "Llàgrima", @@ -728,6 +810,7 @@ "DE.Controllers.Main.txtShape_wedgeRoundRectCallout": "Llibre rectangular de punt rodó", "DE.Controllers.Main.txtStarsRibbons": "Estrelles i Cintes", "DE.Controllers.Main.txtStyle_Caption": "Subtítol", + "DE.Controllers.Main.txtStyle_endnote_text": "Text de nota final", "DE.Controllers.Main.txtStyle_footnote_text": "Tex Peu de Pàgina", "DE.Controllers.Main.txtStyle_Heading_1": "Títol 1", "DE.Controllers.Main.txtStyle_Heading_2": "Títol 2", @@ -748,6 +831,8 @@ "DE.Controllers.Main.txtSyntaxError": "Error de Sintaxis", "DE.Controllers.Main.txtTableInd": "L'índex de la taula no pot ser zero", "DE.Controllers.Main.txtTableOfContents": "Taula de continguts", + "DE.Controllers.Main.txtTableOfFigures": "Taula de figures", + "DE.Controllers.Main.txtTOCHeading": "Capçalera de la taula", "DE.Controllers.Main.txtTooLarge": "El número es massa gran per donar-l'hi format", "DE.Controllers.Main.txtTypeEquation": "Escrivir una equació aquí.", "DE.Controllers.Main.txtUndefBookmark": "Marcador no definit", @@ -769,6 +854,8 @@ "DE.Controllers.Main.warnBrowserZoom": "La configuració del zoom actual del navegador no és totalment compatible. Restabliu el zoom per defecte prement Ctrl+0.", "DE.Controllers.Main.warnLicenseExceeded": "S'ha superat el nombre de connexions simultànies al servidor de documents i el document s'obrirà només per a la seva visualització.
    Contacteu l'administrador per obtenir més informació.", "DE.Controllers.Main.warnLicenseExp": "La seva llicencia ha caducat.
    Si us plau, actualitzi la llicencia i recarregui la pàgina.", + "DE.Controllers.Main.warnLicenseLimitedNoAccess": "La llicència ha caducat.
    No teniu accés a la funcionalitat d'edició de documents.
    Si us plau, contacteu amb l'administrador.", + "DE.Controllers.Main.warnLicenseLimitedRenewed": "Cal renovar la llicència.
    Teniu un accés limitat a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador per obtenir accés complet", "DE.Controllers.Main.warnLicenseUsersExceeded": "S'ha superat el nombre d'usuaris concurrents i el document s'obrirà només per a la seva visualització.
    Per més informació, poseu-vos en contacte amb l'administrador.", "DE.Controllers.Main.warnNoLicense": "Heu arribat al límit de connexions simultànies per als editors %1. Aquest document s'obrirà al mode de només lectura. Contacteu l'equip de vendes %1 per a les condicions personals de millora del servei.", "DE.Controllers.Main.warnNoLicenseUsers": "Heu arribat al límit d'usuaris concurrents per a editors %1.
    Contactau l'equip de vendes per als termes de millora personal dels vostres serveis.", @@ -776,6 +863,7 @@ "DE.Controllers.Navigation.txtBeginning": "Inici del document", "DE.Controllers.Navigation.txtGotoBeginning": "Anar al començament del document", "DE.Controllers.Statusbar.textHasChanges": "S'han fet un seguiment de nous canvis", + "DE.Controllers.Statusbar.textSetTrackChanges": "Esteu en mode de seguiment de canvis", "DE.Controllers.Statusbar.textTrackChanges": "El document s'obre amb el mode Canvis de pista activat", "DE.Controllers.Statusbar.tipReview": "Control de Canvis", "DE.Controllers.Statusbar.zoomText": "Zoom {0}%", @@ -787,6 +875,7 @@ "DE.Controllers.Toolbar.textFontSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor numèric entre 1 i 300.", "DE.Controllers.Toolbar.textFraction": "Fraccions", "DE.Controllers.Toolbar.textFunction": "Funcions", + "DE.Controllers.Toolbar.textGroup": "Grup", "DE.Controllers.Toolbar.textInsert": "Inserta", "DE.Controllers.Toolbar.textIntegral": "Integrals", "DE.Controllers.Toolbar.textLargeOperator": "Operadors Grans", @@ -796,6 +885,7 @@ "DE.Controllers.Toolbar.textRadical": "Radicals", "DE.Controllers.Toolbar.textScript": "Lletres", "DE.Controllers.Toolbar.textSymbols": "Símbols", + "DE.Controllers.Toolbar.textTabForms": "Formularis", "DE.Controllers.Toolbar.textWarning": "Avis", "DE.Controllers.Toolbar.txtAccent_Accent": "Agut", "DE.Controllers.Toolbar.txtAccent_ArrowD": "Fletxa dreta-esquerra superior", @@ -810,7 +900,7 @@ "DE.Controllers.Toolbar.txtAccent_CurveBracketBot": "Clau Subjacent", "DE.Controllers.Toolbar.txtAccent_CurveBracketTop": "Clau superposada", "DE.Controllers.Toolbar.txtAccent_Custom_1": "Vector A", - "DE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra", + "DE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra a sobre", "DE.Controllers.Toolbar.txtAccent_Custom_3": "x XOR i amb barra sobreposada", "DE.Controllers.Toolbar.txtAccent_DDDot": "Tres punts", "DE.Controllers.Toolbar.txtAccent_DDot": "Doble punt", @@ -981,9 +1071,9 @@ "DE.Controllers.Toolbar.txtMatrix_2_2_RoundBracket": "Matriu buida amb claudàtors", "DE.Controllers.Toolbar.txtMatrix_2_2_SquareBracket": "Matriu buida amb claudàtors", "DE.Controllers.Toolbar.txtMatrix_2_3": "2x3 matriu buida", - "DE.Controllers.Toolbar.txtMatrix_3_1": "3x1 matriu buida", - "DE.Controllers.Toolbar.txtMatrix_3_2": "3x2 matriu buida", - "DE.Controllers.Toolbar.txtMatrix_3_3": "3s3 matriu buida", + "DE.Controllers.Toolbar.txtMatrix_3_1": "Matriu buida 3x1", + "DE.Controllers.Toolbar.txtMatrix_3_2": "Matriu buida 3x2", + "DE.Controllers.Toolbar.txtMatrix_3_3": "Matriu buida 3x3", "DE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts Subíndexs", "DE.Controllers.Toolbar.txtMatrix_Dots_Center": "Punts en línia mitja", "DE.Controllers.Toolbar.txtMatrix_Dots_Diagonal": "Punts en diagonal", @@ -991,9 +1081,9 @@ "DE.Controllers.Toolbar.txtMatrix_Flat_Round": "Matriu escassa", "DE.Controllers.Toolbar.txtMatrix_Flat_Square": "Matriu escassa", "DE.Controllers.Toolbar.txtMatrix_Identity_2": "2x2 matriu d’identitat", - "DE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "3x3 matriu d’identitat", - "DE.Controllers.Toolbar.txtMatrix_Identity_3": "3x3 matriu d’identitat", - "DE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "3x3 matriu d’identitat", + "DE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "Matriu d’identitat 3x3", + "DE.Controllers.Toolbar.txtMatrix_Identity_3": "Matriu d’identitat 3x3", + "DE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "Matriu d’identitat 3x3", "DE.Controllers.Toolbar.txtOperator_ArrowD_Bot": "Fletxa dreta-esquerra inferior", "DE.Controllers.Toolbar.txtOperator_ArrowD_Top": "Fletxa dreta-esquerra superior", "DE.Controllers.Toolbar.txtOperator_ArrowL_Bot": "Fletxa inferior cap a esquerra", @@ -1335,6 +1425,7 @@ "DE.Views.DocumentHolder.textArrangeForward": "Portar Endavant", "DE.Views.DocumentHolder.textArrangeFront": "Porta a Primer pla", "DE.Views.DocumentHolder.textCells": "Cel·les", + "DE.Views.DocumentHolder.textCol": "Suprimeix tota la columna", "DE.Views.DocumentHolder.textContentControls": "Control de contingut", "DE.Views.DocumentHolder.textContinueNumbering": "Continua la numeració", "DE.Views.DocumentHolder.textCopy": "Copiar", @@ -1353,18 +1444,26 @@ "DE.Views.DocumentHolder.textFromStorage": "Des d'Emmagatzematge", "DE.Views.DocumentHolder.textFromUrl": "Des d'un Enllaç", "DE.Views.DocumentHolder.textJoinList": "Uniu-vos a la llista anterior", + "DE.Views.DocumentHolder.textLeft": "Desplaça les cel·les a l'esquerra", "DE.Views.DocumentHolder.textNest": "Taula niu", "DE.Views.DocumentHolder.textNextPage": "Pàgina Següent", "DE.Views.DocumentHolder.textNumberingValue": "Valor d'inici", "DE.Views.DocumentHolder.textPaste": "Pegar", "DE.Views.DocumentHolder.textPrevPage": "Pàgina anterior", "DE.Views.DocumentHolder.textRefreshField": "Actualitza el camp", + "DE.Views.DocumentHolder.textRemCheckBox": "Elimina la casella de selecció", + "DE.Views.DocumentHolder.textRemComboBox": "Elimina el quadre de combinació", + "DE.Views.DocumentHolder.textRemDropdown": "Elimina el desplegable", + "DE.Views.DocumentHolder.textRemField": "Eliminar camp de text", "DE.Views.DocumentHolder.textRemove": "Esborrar", "DE.Views.DocumentHolder.textRemoveControl": "Esborrar el control de contingut", + "DE.Views.DocumentHolder.textRemPicture": "Suprimir Imatge", + "DE.Views.DocumentHolder.textRemRadioBox": "Eliminar botó de selecció", "DE.Views.DocumentHolder.textReplace": "Canviar Imatge", "DE.Views.DocumentHolder.textRotate": "Girar", "DE.Views.DocumentHolder.textRotate270": "Girar 90° a l'esquerra", "DE.Views.DocumentHolder.textRotate90": "Girar 90° a la dreta", + "DE.Views.DocumentHolder.textRow": "Suprimeix tota la fila", "DE.Views.DocumentHolder.textSeparateList": "Separar llista", "DE.Views.DocumentHolder.textSettings": "Configuració", "DE.Views.DocumentHolder.textSeveral": "Diverses Files/Columnes", @@ -1376,6 +1475,7 @@ "DE.Views.DocumentHolder.textShapeAlignTop": "Alinear Superior", "DE.Views.DocumentHolder.textStartNewList": "Iniciar una llista nova", "DE.Views.DocumentHolder.textStartNumberingFrom": "Establir el valor de numeració", + "DE.Views.DocumentHolder.textTitleCellsRemove": "Suprimeix Cel·les", "DE.Views.DocumentHolder.textTOC": "Taula de continguts", "DE.Views.DocumentHolder.textTOCSettings": "Configuració de la taula de continguts", "DE.Views.DocumentHolder.textUndo": "Desfer", @@ -1589,7 +1689,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Haureu d’acceptar canvis abans de poder-los veure", "DE.Views.FileMenuPanels.Settings.strFast": "Ràpid", "DE.Views.FileMenuPanels.Settings.strFontRender": "Font Suggerida", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Deseu sempre al servidor (en cas contrari, deseu-lo al servidor quan el tanqueu)", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Afegeix una versió a l'emmagatzematge després de fer clic a Desa o Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Activar els jeroglífics", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Activa la visualització dels comentaris", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Configuració de macros", @@ -1599,6 +1699,7 @@ "DE.Views.FileMenuPanels.Settings.strShowChanges": "Canvis de Col·laboració en temps real", "DE.Views.FileMenuPanels.Settings.strSpellCheckMode": "Activar l’opció de correcció ortogràfica", "DE.Views.FileMenuPanels.Settings.strStrict": "Estricte", + "DE.Views.FileMenuPanels.Settings.strTheme": "Tema de la interfície", "DE.Views.FileMenuPanels.Settings.strUnit": "Unitat de Mesura", "DE.Views.FileMenuPanels.Settings.strZoom": "Valor de Zoom Predeterminat", "DE.Views.FileMenuPanels.Settings.text10Minutes": "Cada 10 minuts", @@ -1610,7 +1711,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Guardar Automàticament", "DE.Views.FileMenuPanels.Settings.textCompatible": "Compatibilitat", "DE.Views.FileMenuPanels.Settings.textDisabled": "Desactivat", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Desar al Servidor", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Desant versions intermèdies", "DE.Views.FileMenuPanels.Settings.textMinute": "Cada Minut", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Feu que els fitxers siguin compatibles amb versions anteriors de MS Word quan els deseu com a DOCX", "DE.Views.FileMenuPanels.Settings.txtAll": "Veure Tot", @@ -1636,6 +1737,63 @@ "DE.Views.FileMenuPanels.Settings.txtWarnMacros": "Mostra la Notificació", "DE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Desactiveu totes les macros amb una notificació", "DE.Views.FileMenuPanels.Settings.txtWin": "com Windows", + "DE.Views.FormSettings.textCheckbox": "\nCasella de selecció", + "DE.Views.FormSettings.textColor": "Color Vora", + "DE.Views.FormSettings.textComb": "Pinta de caràcters", + "DE.Views.FormSettings.textCombobox": "Quadre combinat", + "DE.Views.FormSettings.textConnected": "Camps connectats", + "DE.Views.FormSettings.textDelete": "Suprimeix", + "DE.Views.FormSettings.textDisconnect": "Desconnectar", + "DE.Views.FormSettings.textDropDown": "Desplegar", + "DE.Views.FormSettings.textField": "Camp de text", + "DE.Views.FormSettings.textFixed": "Camp de mida fixa", + "DE.Views.FormSettings.textFromFile": "Des d'un fitxer", + "DE.Views.FormSettings.textFromStorage": "Des de l'Emmagatzematge", + "DE.Views.FormSettings.textFromUrl": "Des de l'URL", + "DE.Views.FormSettings.textGroupKey": "Clau de grup", + "DE.Views.FormSettings.textImage": "Imatge", + "DE.Views.FormSettings.textKey": "Clau", + "DE.Views.FormSettings.textLock": "Bloqueja", + "DE.Views.FormSettings.textMaxChars": "Límit de caràcters", + "DE.Views.FormSettings.textNoBorder": "Sense vora", + "DE.Views.FormSettings.textPlaceholder": "Marcador de posició", + "DE.Views.FormSettings.textRadiobox": "Botó d'opció", + "DE.Views.FormSettings.textRequired": "Requerit", + "DE.Views.FormSettings.textSelectImage": "Seleccionar imatge", + "DE.Views.FormSettings.textTip": "Consell", + "DE.Views.FormSettings.textTipAdd": "Afegeir nou valor", + "DE.Views.FormSettings.textTipDelete": "Suprimeix el valor", + "DE.Views.FormSettings.textTipDown": "Mou avall", + "DE.Views.FormSettings.textTipUp": "Mou amunt", + "DE.Views.FormSettings.textUnlock": "Desbloquejar", + "DE.Views.FormSettings.textValue": "Opcions de valor", + "DE.Views.FormSettings.textWidth": "Ample de cel·la", + "DE.Views.FormsTab.capBtnCheckBox": "Casella de selecció", + "DE.Views.FormsTab.capBtnComboBox": "Quadre combinat", + "DE.Views.FormsTab.capBtnDropDown": "Desplegable", + "DE.Views.FormsTab.capBtnImage": "Imatge", + "DE.Views.FormsTab.capBtnNext": "Camp Següent", + "DE.Views.FormsTab.capBtnPrev": "Camp anterior", + "DE.Views.FormsTab.capBtnRadioBox": "Botó d'opció", + "DE.Views.FormsTab.capBtnSubmit": "Enviar", + "DE.Views.FormsTab.capBtnText": "Camp de text", + "DE.Views.FormsTab.capBtnView": "Visualitzar formulari", + "DE.Views.FormsTab.textClear": "Neteja els camps", + "DE.Views.FormsTab.textClearFields": "Esborrar tots els camps", + "DE.Views.FormsTab.textHighlight": "Paràmetres de ressaltat", + "DE.Views.FormsTab.textNewColor": "Afegeix Color Personalitzat Nou", + "DE.Views.FormsTab.textNoHighlight": "Sense ressaltat", + "DE.Views.FormsTab.textSubmited": "El formulari s'ha enviat correctament", + "DE.Views.FormsTab.tipCheckBox": "Insereix casella de selecció", + "DE.Views.FormsTab.tipComboBox": "Insereix casella de combinació", + "DE.Views.FormsTab.tipDropDown": "Insereix llista desplegable", + "DE.Views.FormsTab.tipImageField": "Insereix imatge", + "DE.Views.FormsTab.tipNextForm": "Vés al camp següent", + "DE.Views.FormsTab.tipPrevForm": "Vés al camp anterior", + "DE.Views.FormsTab.tipRadioBox": "Insereix botó d'opció", + "DE.Views.FormsTab.tipSubmit": "Enviar formulari", + "DE.Views.FormsTab.tipTextField": "Insereix camp de text", + "DE.Views.FormsTab.tipViewForm": "Visualitzar formulari", "DE.Views.HeaderFooterSettings.textBottomCenter": "Inferior centre", "DE.Views.HeaderFooterSettings.textBottomLeft": "Inferior esquerra", "DE.Views.HeaderFooterSettings.textBottomPage": "Al Peu de Pàgina", @@ -1668,6 +1826,7 @@ "DE.Views.HyperlinkSettingsDialog.txtEmpty": "Aquest camp és obligatori", "DE.Views.HyperlinkSettingsDialog.txtHeadings": "Rúbriques", "DE.Views.HyperlinkSettingsDialog.txtNotUrl": "Aquest camp hauria de ser una URL en el format \"http://www.example.com\"", + "DE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Aquest camp està limitat a 2083 caràcters", "DE.Views.ImageSettings.textAdvanced": "Mostra la configuració avançada", "DE.Views.ImageSettings.textCrop": "Retallar", "DE.Views.ImageSettings.textCropFill": "Omplir", @@ -1773,7 +1932,7 @@ "DE.Views.ImageSettingsAdvanced.textWrapThroughTooltip": "A través", "DE.Views.ImageSettingsAdvanced.textWrapTightTooltip": "Estret", "DE.Views.ImageSettingsAdvanced.textWrapTopbottomTooltip": "Superior e Inferior", - "DE.Views.LeftMenu.tipAbout": "Sobre el programa", + "DE.Views.LeftMenu.tipAbout": "Quant a...", "DE.Views.LeftMenu.tipChat": "Xat", "DE.Views.LeftMenu.tipComments": "Comentaris", "DE.Views.LeftMenu.tipNavigation": "Navegació", @@ -1782,7 +1941,9 @@ "DE.Views.LeftMenu.tipSupport": "Opinió & Suport", "DE.Views.LeftMenu.tipTitles": "Títols", "DE.Views.LeftMenu.txtDeveloper": "MODALITAT DE DESENVOLUPADOR", + "DE.Views.LeftMenu.txtLimit": "Limitar l'accés", "DE.Views.LeftMenu.txtTrial": "ESTAT DE PROVA", + "DE.Views.LeftMenu.txtTrialDev": "Mode de desenvolupador de prova", "DE.Views.LineNumbersDialog.textAddLineNumbering": "Afegir numeració de línies", "DE.Views.LineNumbersDialog.textApplyTo": "Aplicar els canvis a", "DE.Views.LineNumbersDialog.textContinuous": "Contínua", @@ -1796,6 +1957,7 @@ "DE.Views.LineNumbersDialog.textSection": "Secció actual", "DE.Views.LineNumbersDialog.textStartAt": "Començar a", "DE.Views.LineNumbersDialog.textTitle": "Números de Línies", + "DE.Views.LineNumbersDialog.txtAutoText": "Automàtic", "DE.Views.Links.capBtnBookmarks": "Marcador", "DE.Views.Links.capBtnCaption": "Subtítol", "DE.Views.Links.capBtnContentsUpdate": "Actualitzar", @@ -1803,9 +1965,11 @@ "DE.Views.Links.capBtnInsContents": "Taula de continguts", "DE.Views.Links.capBtnInsFootnote": "Nota a peu de pàgina", "DE.Views.Links.capBtnInsLink": "Hiperenllaç", + "DE.Views.Links.capBtnTOF": "Taula de figures", "DE.Views.Links.confirmDeleteFootnotes": "Voleu suprimir totes les notes al peu de pàgina?", + "DE.Views.Links.confirmReplaceTOF": "Voleu substituir la taula de figures seleccionada?", "DE.Views.Links.mniConvertNote": "Converteix Totes les Notes", - "DE.Views.Links.mniDelFootnote": "Suprimeix totes les notes al peu de pàgina", + "DE.Views.Links.mniDelFootnote": "Suprimeix Totes les Notes", "DE.Views.Links.mniInsEndnote": "Inseriu Nota Final", "DE.Views.Links.mniInsFootnote": "Inserir Nota Peu Pàgina", "DE.Views.Links.mniNoteSettings": "Ajust de les notes a peu de pàgina", @@ -1825,6 +1989,9 @@ "DE.Views.Links.tipCrossRef": "Inseriu referència creuada", "DE.Views.Links.tipInsertHyperlink": "Afegir enllaç", "DE.Views.Links.tipNotes": "Inseriu o editeu notes a la pàgina de pàgina", + "DE.Views.Links.tipTableFigures": "Insereix taula de figures", + "DE.Views.Links.tipTableFiguresUpdate": "Actualitza la taula de figures", + "DE.Views.Links.titleUpdateTOF": "Actualitza la taula de figures", "DE.Views.ListSettingsDialog.textAuto": "Automàtic", "DE.Views.ListSettingsDialog.textCenter": "Centre", "DE.Views.ListSettingsDialog.textLeft": "Esquerra", @@ -1883,7 +2050,7 @@ "DE.Views.MailMergeSettings.textSendMsg": "Tots els missatges de correu electrònic estan preparats i seran enviats properament.
    La velocitat de la publicació depèn del servei de correu.
    Podeu continuar treballant amb el document o tancar-lo. Un cop finalitzada l’operació, la notificació s’enviarà a la vostra adreça de correu electrònic de registre.", "DE.Views.MailMergeSettings.textTo": "Per a", "DE.Views.MailMergeSettings.txtFirst": "Al Primer Camp", - "DE.Views.MailMergeSettings.txtFromToError": "El valor \"de\" ha de ser inferior al valor \"a\"", + "DE.Views.MailMergeSettings.txtFromToError": "El valor «De» ha de ser més petit que el valor «Fins»", "DE.Views.MailMergeSettings.txtLast": "A l'Últim camp", "DE.Views.MailMergeSettings.txtNext": "Al camp següent", "DE.Views.MailMergeSettings.txtPrev": "Al registre anterior", @@ -1904,6 +2071,7 @@ "DE.Views.NoteSettingsDialog.textApplyTo": "Aplicar els canvis a", "DE.Views.NoteSettingsDialog.textContinue": "Contínua", "DE.Views.NoteSettingsDialog.textCustom": "Personalitzar Marca", + "DE.Views.NoteSettingsDialog.textDocEnd": "Final del document", "DE.Views.NoteSettingsDialog.textDocument": "Tot el document", "DE.Views.NoteSettingsDialog.textEachPage": "Reinicieu cada pàgina", "DE.Views.NoteSettingsDialog.textEachSection": "Reinicieu cada secció", @@ -1947,6 +2115,10 @@ "DE.Views.PageSizeDialog.textTitle": "Mida de Pàgina", "DE.Views.PageSizeDialog.textWidth": "Amplada", "DE.Views.PageSizeDialog.txtCustom": "Personalitzat", + "DE.Views.ParagraphSettings.strIndent": "Sagnats", + "DE.Views.ParagraphSettings.strIndentsLeftText": "Esquerra", + "DE.Views.ParagraphSettings.strIndentsRightText": "Dreta", + "DE.Views.ParagraphSettings.strIndentsSpecial": "Especial", "DE.Views.ParagraphSettings.strLineHeight": "Espai entre Línies", "DE.Views.ParagraphSettings.strParagraphSpacing": "Espaiat de Paràgraf", "DE.Views.ParagraphSettings.strSomeParagraphSpace": "No afegiu interval entre paràgrafs del mateix estil", @@ -1958,6 +2130,9 @@ "DE.Views.ParagraphSettings.textAuto": "multiplicador", "DE.Views.ParagraphSettings.textBackColor": "Color de Fons", "DE.Views.ParagraphSettings.textExact": "Exacte", + "DE.Views.ParagraphSettings.textFirstLine": "Primera línia", + "DE.Views.ParagraphSettings.textHanging": "Penjat", + "DE.Views.ParagraphSettings.textNoneSpecial": "(cap)", "DE.Views.ParagraphSettings.txtAutoText": "Auto", "DE.Views.ParagraphSettingsAdvanced.noTabs": "Les pestanyes especificades apareixeran en aquest camp", "DE.Views.ParagraphSettingsAdvanced.strAllCaps": "Majúscules ", @@ -2033,6 +2208,7 @@ "DE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "DE.Views.ParagraphSettingsAdvanced.txtNoBorders": "Sense vores", "DE.Views.RightMenu.txtChartSettings": "Gràfic Configuració", + "DE.Views.RightMenu.txtFormSettings": "Paràmetres del formulari", "DE.Views.RightMenu.txtHeaderFooterSettings": "Configuració de la capçalera i el peu de pàgina", "DE.Views.RightMenu.txtImageSettings": "Configuració Imatge", "DE.Views.RightMenu.txtMailMergeSettings": "Ajusts de fusió", @@ -2049,7 +2225,7 @@ "DE.Views.ShapeSettings.strPattern": "Patró", "DE.Views.ShapeSettings.strShadow": "Mostra ombra", "DE.Views.ShapeSettings.strSize": "Mida", - "DE.Views.ShapeSettings.strStroke": "Traça", + "DE.Views.ShapeSettings.strStroke": "Línia", "DE.Views.ShapeSettings.strTransparency": "Opacitat", "DE.Views.ShapeSettings.strType": "Tipus", "DE.Views.ShapeSettings.textAdvanced": "Mostra la configuració avançada", @@ -2116,6 +2292,7 @@ "DE.Views.SignatureSettings.strValid": "Signatures vàlides", "DE.Views.SignatureSettings.txtContinueEditing": "Edita de totes maneres", "DE.Views.SignatureSettings.txtEditWarning": "L’edició eliminarà les signatures del document.
    Esteu segur que voleu continuar?", + "DE.Views.SignatureSettings.txtRemoveWarning": "Voleu eliminar aquesta signatura?
    Això no es podrà desfer.", "DE.Views.SignatureSettings.txtRequestedSignatures": "Aquest document s'ha de signar.", "DE.Views.SignatureSettings.txtSigned": "S'han afegit signatures vàlides al document. El document està protegit de l'edició.", "DE.Views.SignatureSettings.txtSignedInvalid": "Algunes de les signatures digitals del document no són vàlides o no s’han pogut verificar. El document està protegit de l'edició.", @@ -2140,20 +2317,32 @@ "DE.Views.TableFormulaDialog.textInsertFunction": "Funció Pegar", "DE.Views.TableFormulaDialog.textTitle": "Configuració de Fórmula", "DE.Views.TableOfContentsSettings.strAlign": "Alineeu a la dreta els números de pàgina", + "DE.Views.TableOfContentsSettings.strFullCaption": "Inclou l'etiqueta i el número", "DE.Views.TableOfContentsSettings.strLinks": "Format de la taula de continguts com a enllaços", + "DE.Views.TableOfContentsSettings.strLinksOF": "Formatar la taula de figures com a enllaços", "DE.Views.TableOfContentsSettings.strShowPages": "Mostra els números de la pàgina", "DE.Views.TableOfContentsSettings.textBuildTable": "Crea la taula de continguts a partir de", + "DE.Views.TableOfContentsSettings.textBuildTableOF": "Construir una taula de figures a partir de", + "DE.Views.TableOfContentsSettings.textEquation": "Equació", + "DE.Views.TableOfContentsSettings.textFigure": "Figura", "DE.Views.TableOfContentsSettings.textLeader": "Director", "DE.Views.TableOfContentsSettings.textLevel": "Nivell", "DE.Views.TableOfContentsSettings.textLevels": "Nivells", "DE.Views.TableOfContentsSettings.textNone": "Cap", + "DE.Views.TableOfContentsSettings.textRadioCaption": "Llegenda", "DE.Views.TableOfContentsSettings.textRadioLevels": "Nivells de perfil", + "DE.Views.TableOfContentsSettings.textRadioStyle": "Estil", "DE.Views.TableOfContentsSettings.textRadioStyles": "Seleccionar estils", "DE.Views.TableOfContentsSettings.textStyle": "Estil", "DE.Views.TableOfContentsSettings.textStyles": "Estils", + "DE.Views.TableOfContentsSettings.textTable": "Taula", "DE.Views.TableOfContentsSettings.textTitle": "Taula de continguts", + "DE.Views.TableOfContentsSettings.textTitleTOF": "Taula de figures", + "DE.Views.TableOfContentsSettings.txtCentered": "Centrat", "DE.Views.TableOfContentsSettings.txtClassic": "Clàssic", "DE.Views.TableOfContentsSettings.txtCurrent": "Actual", + "DE.Views.TableOfContentsSettings.txtDistinctive": "Distintiu", + "DE.Views.TableOfContentsSettings.txtFormal": "Formal", "DE.Views.TableOfContentsSettings.txtModern": "Moderna", "DE.Views.TableOfContentsSettings.txtOnline": "En línia", "DE.Views.TableOfContentsSettings.txtSimple": "Simple", @@ -2181,6 +2370,7 @@ "DE.Views.TableSettings.textBorders": "Estil de la Vora", "DE.Views.TableSettings.textCellSize": "Mida de Files i Columnes", "DE.Views.TableSettings.textColumns": "Columnes", + "DE.Views.TableSettings.textConvert": "Converteix la taula a text", "DE.Views.TableSettings.textDistributeCols": "Distribuïu les columnes", "DE.Views.TableSettings.textDistributeRows": "Distribuïu les files", "DE.Views.TableSettings.textEdit": "Files i Columnes", @@ -2285,10 +2475,18 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Sense vores", "DE.Views.TableSettingsAdvanced.txtPercent": "Percentatge", "DE.Views.TableSettingsAdvanced.txtPt": "Punt", + "DE.Views.TableToTextDialog.textEmpty": "Heu d'introduir un caràcter per al separador personalitzat.", + "DE.Views.TableToTextDialog.textNested": "Converteix les taules niuades", + "DE.Views.TableToTextDialog.textOther": "Altre", + "DE.Views.TableToTextDialog.textPara": "Marques de paràgraf", + "DE.Views.TableToTextDialog.textSemicolon": "Punts i coma", + "DE.Views.TableToTextDialog.textSeparator": "Separar el text amb", + "DE.Views.TableToTextDialog.textTab": "Pestanyes", + "DE.Views.TableToTextDialog.textTitle": "Converteix la taula a text", "DE.Views.TextArtSettings.strColor": "Color", "DE.Views.TextArtSettings.strFill": "Omplir", "DE.Views.TextArtSettings.strSize": "Mida", - "DE.Views.TextArtSettings.strStroke": "Traça", + "DE.Views.TextArtSettings.strStroke": "Línia", "DE.Views.TextArtSettings.strTransparency": "Opacitat", "DE.Views.TextArtSettings.strType": "Tipus", "DE.Views.TextArtSettings.textAngle": "Angle", @@ -2308,6 +2506,21 @@ "DE.Views.TextArtSettings.tipAddGradientPoint": "Afegir punt de degradat", "DE.Views.TextArtSettings.tipRemoveGradientPoint": "Elimina el punt de degradat", "DE.Views.TextArtSettings.txtNoBorders": "Sense Línia", + "DE.Views.TextToTableDialog.textAutofit": "Ajustament automàtic", + "DE.Views.TextToTableDialog.textColumns": "Columnes", + "DE.Views.TextToTableDialog.textContents": "Ajustar automàticament al contingut", + "DE.Views.TextToTableDialog.textEmpty": "Heu d'introduir un caràcter per al separador personalitzat.", + "DE.Views.TextToTableDialog.textFixed": "Amplada de columna fixa", + "DE.Views.TextToTableDialog.textOther": "Altre", + "DE.Views.TextToTableDialog.textPara": "Paràgrafs", + "DE.Views.TextToTableDialog.textRows": "Files", + "DE.Views.TextToTableDialog.textSemicolon": "Punts i coma", + "DE.Views.TextToTableDialog.textSeparator": "Separar el text a", + "DE.Views.TextToTableDialog.textTab": "Pestanyes", + "DE.Views.TextToTableDialog.textTableSize": "Mida de la taula", + "DE.Views.TextToTableDialog.textTitle": "Converteix el text a taula", + "DE.Views.TextToTableDialog.textWindow": "\nAjustar automàticament a la finestra", + "DE.Views.TextToTableDialog.txtAutoText": "Automàtic", "DE.Views.Toolbar.capBtnAddComment": "Afegir Comentari", "DE.Views.Toolbar.capBtnBlankPage": "Pàgina en Blanc", "DE.Views.Toolbar.capBtnColumns": "Columnes", @@ -2335,6 +2548,7 @@ "DE.Views.Toolbar.capImgForward": "Portar Endavant", "DE.Views.Toolbar.capImgGroup": "Agrupar", "DE.Views.Toolbar.capImgWrapping": "Ajustant", + "DE.Views.Toolbar.mniCapitalizeWords": "Posar en majúscules cada paraula", "DE.Views.Toolbar.mniCustomTable": "Inserir Taula Personalitzada", "DE.Views.Toolbar.mniDrawTable": "Taula de dibuix", "DE.Views.Toolbar.mniEditControls": "Configuració de control", @@ -2348,10 +2562,16 @@ "DE.Views.Toolbar.mniImageFromFile": "Imatge d'un Fitxer", "DE.Views.Toolbar.mniImageFromStorage": "Imatge d'un Magatzem", "DE.Views.Toolbar.mniImageFromUrl": "Imatge d'un Enllaç", + "DE.Views.Toolbar.mniLowerCase": "minúscules", + "DE.Views.Toolbar.mniSentenceCase": "Cas de frase", + "DE.Views.Toolbar.mniTextToTable": "Converteix el text a taula", + "DE.Views.Toolbar.mniToggleCase": "iNVERTIR mAJÚSCULES", + "DE.Views.Toolbar.mniUpperCase": "MAJÚSCULES", "DE.Views.Toolbar.strMenuNoFill": "Sense Omplir", "DE.Views.Toolbar.textAutoColor": "Automàtic", "DE.Views.Toolbar.textBold": "Negreta", "DE.Views.Toolbar.textBottom": "Inferior:", + "DE.Views.Toolbar.textChangeLevel": "Canvia el nivell de llista", "DE.Views.Toolbar.textCheckboxControl": "Casella de Selecció", "DE.Views.Toolbar.textColumnsCustom": "Personalitzar Columnes", "DE.Views.Toolbar.textColumnsLeft": "Esquerra", @@ -2428,6 +2648,7 @@ "DE.Views.Toolbar.tipAlignRight": "Alinear dreta", "DE.Views.Toolbar.tipBack": "Enrere", "DE.Views.Toolbar.tipBlankPage": "Inseriu pàgina en blanc", + "DE.Views.Toolbar.tipChangeCase": "Canvia el cas", "DE.Views.Toolbar.tipChangeChart": "Canviar el tipus de gràfic", "DE.Views.Toolbar.tipClearStyle": "Esborrar estil", "DE.Views.Toolbar.tipColorSchemas": "Canviar el esquema de color", diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 9aa7528bf..9c33f4a6b 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -35,7 +35,7 @@ "Common.Controllers.ReviewChanges.textIndentRight": "Indent right", "Common.Controllers.ReviewChanges.textInserted": "Inserted:", "Common.Controllers.ReviewChanges.textItalic": "Italic", - "Common.Controllers.ReviewChanges.textJustify": "Align justify", + "Common.Controllers.ReviewChanges.textJustify": "Align justified", "Common.Controllers.ReviewChanges.textKeepLines": "Keep lines together", "Common.Controllers.ReviewChanges.textKeepNext": "Keep with next", "Common.Controllers.ReviewChanges.textLeft": "Align left", @@ -846,7 +846,7 @@ "DE.Controllers.Main.uploadDocSizeMessage": "Maximum document size limit exceeded.", "DE.Controllers.Main.uploadImageExtMessage": "Unknown image format.", "DE.Controllers.Main.uploadImageFileCountMessage": "No images uploaded.", - "DE.Controllers.Main.uploadImageSizeMessage": "Maximum image size limit exceeded.", + "DE.Controllers.Main.uploadImageSizeMessage": "The image is too big. The maximum size is 25 MB.", "DE.Controllers.Main.uploadImageTextText": "Uploading image...", "DE.Controllers.Main.uploadImageTitleText": "Uploading Image", "DE.Controllers.Main.waitText": "Please, wait...", @@ -1737,6 +1737,9 @@ "DE.Views.FileMenuPanels.Settings.txtWarnMacros": "Show Notification", "DE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Disable all macros with a notification", "DE.Views.FileMenuPanels.Settings.txtWin": "as Windows", + "DE.Views.FormSettings.textAlways": "Always", + "DE.Views.FormSettings.textAspect": "Lock aspect ratio", + "DE.Views.FormSettings.textAutofit": "AutoFit", "DE.Views.FormSettings.textCheckbox": "Checkbox", "DE.Views.FormSettings.textColor": "Border color", "DE.Views.FormSettings.textComb": "Comb of characters", @@ -1755,27 +1758,24 @@ "DE.Views.FormSettings.textKey": "Key", "DE.Views.FormSettings.textLock": "Lock", "DE.Views.FormSettings.textMaxChars": "Characters limit", + "DE.Views.FormSettings.textMulti": "Multiline field", + "DE.Views.FormSettings.textNever": "Never", "DE.Views.FormSettings.textNoBorder": "No border", "DE.Views.FormSettings.textPlaceholder": "Placeholder", "DE.Views.FormSettings.textRadiobox": "Radio Button", "DE.Views.FormSettings.textRequired": "Required", + "DE.Views.FormSettings.textScale": "When to scale", "DE.Views.FormSettings.textSelectImage": "Select Image", "DE.Views.FormSettings.textTip": "Tip", "DE.Views.FormSettings.textTipAdd": "Add new value", "DE.Views.FormSettings.textTipDelete": "Delete value", "DE.Views.FormSettings.textTipDown": "Move down", "DE.Views.FormSettings.textTipUp": "Move up", + "DE.Views.FormSettings.textTooBig": "Image is Too Big", + "DE.Views.FormSettings.textTooSmall": "Image is Too Small", "DE.Views.FormSettings.textUnlock": "Unlock", "DE.Views.FormSettings.textValue": "Value Options", "DE.Views.FormSettings.textWidth": "Cell width", - "DE.Views.FormSettings.textAutofit": "AutoFit", - "DE.Views.FormSettings.textMulti": "Multiline field", - "DE.Views.FormSettings.textAspect": "Lock aspect ratio", - "DE.Views.FormSettings.textAlways": "Always", - "DE.Views.FormSettings.textNever": "Never", - "DE.Views.FormSettings.textTooBig": "Image is Too Big", - "DE.Views.FormSettings.textTooSmall": "Image is Too Small", - "DE.Views.FormSettings.textScale": "When to scale", "DE.Views.FormsTab.capBtnCheckBox": "Checkbox", "DE.Views.FormsTab.capBtnComboBox": "Combo Box", "DE.Views.FormsTab.capBtnDropDown": "Dropdown", diff --git a/apps/documenteditor/main/locale/es.json b/apps/documenteditor/main/locale/es.json index bb2a4e06d..a81763380 100644 --- a/apps/documenteditor/main/locale/es.json +++ b/apps/documenteditor/main/locale/es.json @@ -35,7 +35,7 @@ "Common.Controllers.ReviewChanges.textIndentRight": "Sangría derecha", "Common.Controllers.ReviewChanges.textInserted": "Insertado:", "Common.Controllers.ReviewChanges.textItalic": "Cursiva", - "Common.Controllers.ReviewChanges.textJustify": "Alinear justificar", + "Common.Controllers.ReviewChanges.textJustify": "Alinear justificado", "Common.Controllers.ReviewChanges.textKeepLines": "Mantener líneas juntas", "Common.Controllers.ReviewChanges.textKeepNext": "Conservar con el siguiente", "Common.Controllers.ReviewChanges.textLeft": "Alinear a la izquierda", @@ -846,7 +846,7 @@ "DE.Controllers.Main.uploadDocSizeMessage": "Límite de tamaño máximo del documento excedido.", "DE.Controllers.Main.uploadImageExtMessage": "Formato de imagen desconocido.", "DE.Controllers.Main.uploadImageFileCountMessage": "Ningunas imágenes cargadas.", - "DE.Controllers.Main.uploadImageSizeMessage": "Tamaño máximo de imagen está superado.", + "DE.Controllers.Main.uploadImageSizeMessage": "La imagen es demasiado grande. El tamaño máximo es de 25 MB.", "DE.Controllers.Main.uploadImageTextText": "Subiendo imagen...", "DE.Controllers.Main.uploadImageTitleText": "Subiendo imagen", "DE.Controllers.Main.waitText": "Por favor, espere...", diff --git a/apps/documenteditor/main/locale/it.json b/apps/documenteditor/main/locale/it.json index 6c3dc540d..e832e5ca6 100644 --- a/apps/documenteditor/main/locale/it.json +++ b/apps/documenteditor/main/locale/it.json @@ -583,6 +583,7 @@ "DE.Controllers.Main.textShape": "Forma", "DE.Controllers.Main.textStrict": "Modalità Rigorosa", "DE.Controllers.Main.textTryUndoRedo": "Le funzioni Annulla/Ripristina sono disabilitate per la Modalità di Co-editing Veloce.
    Clicca il pulsante 'Modalità Rigorosa' per passare alla Modalità di Co-editing Rigorosa per poter modificare il file senza l'interferenza di altri utenti e inviare le modifiche solamente dopo averle salvate. Puoi passare da una modalità all'altra di co-editing utilizzando le Impostazioni avanzate dell'editor.", + "DE.Controllers.Main.textTryUndoRedoWarn": "Le funzioni Annulla/Ripeti sono disattivate nella modalità rapida in modifica collaborativa.", "DE.Controllers.Main.titleLicenseExp": "La licenza è scaduta", "DE.Controllers.Main.titleServerVersion": "L'editor è stato aggiornato", "DE.Controllers.Main.titleUpdateVersion": "Versione Modificata", @@ -616,6 +617,7 @@ "DE.Controllers.Main.txtMissArg": "Argomento mancante", "DE.Controllers.Main.txtMissOperator": "Operatore mancante", "DE.Controllers.Main.txtNeedSynchronize": "Ci sono aggiornamenti disponibili", + "DE.Controllers.Main.txtNone": "Niente", "DE.Controllers.Main.txtNoTableOfContents": "Non ci sono titoli nel documento. Applicare uno stile di titolo al testo in modo che appaia nel sommario.", "DE.Controllers.Main.txtNoTableOfFigures": "Nessuna voce della tabella delle cifre trovata.", "DE.Controllers.Main.txtNoText": "Errore! Nessuno stile specificato per il testo nel documento.", @@ -1747,6 +1749,7 @@ "DE.Views.FormSettings.textNoBorder": "Senza bordo", "DE.Views.FormSettings.textPlaceholder": "Segnaposto", "DE.Views.FormSettings.textRadiobox": "Pulsante opzione", + "DE.Views.FormSettings.textRequired": "Richiesto", "DE.Views.FormSettings.textSelectImage": "Seleziona Immagine", "DE.Views.FormSettings.textTip": "Suggerimento", "DE.Views.FormSettings.textTipAdd": "Aggiungi un nuovo valore", @@ -2462,6 +2465,9 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Nessun bordo", "DE.Views.TableSettingsAdvanced.txtPercent": "Percento", "DE.Views.TableSettingsAdvanced.txtPt": "Punto", + "DE.Views.TableToTextDialog.textEmpty": "‎È necessario digitare un carattere per il separatore personalizzato.‎", + "DE.Views.TableToTextDialog.textOther": "Altro", + "DE.Views.TableToTextDialog.textSemicolon": "Virgole", "DE.Views.TextArtSettings.strColor": "Colore", "DE.Views.TextArtSettings.strFill": "Riempimento", "DE.Views.TextArtSettings.strSize": "Dimensione", @@ -2486,6 +2492,10 @@ "DE.Views.TextArtSettings.tipRemoveGradientPoint": "Rimuovi punto sfumatura", "DE.Views.TextArtSettings.txtNoBorders": "Nessuna linea", "DE.Views.TextToTableDialog.textColumns": "Colonne", + "DE.Views.TextToTableDialog.textEmpty": "‎È necessario digitare un carattere per il separatore personalizzato.‎", + "DE.Views.TextToTableDialog.textOther": "Altro", + "DE.Views.TextToTableDialog.textRows": "Righe", + "DE.Views.TextToTableDialog.textSemicolon": "Virgole", "DE.Views.TextToTableDialog.txtAutoText": "Automatico", "DE.Views.Toolbar.capBtnAddComment": "Aggiungi commento", "DE.Views.Toolbar.capBtnBlankPage": "Pagina Vuota", diff --git a/apps/documenteditor/main/locale/nl.json b/apps/documenteditor/main/locale/nl.json index a48440332..ff590e77e 100644 --- a/apps/documenteditor/main/locale/nl.json +++ b/apps/documenteditor/main/locale/nl.json @@ -182,6 +182,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Het document is gewijzigd door een andere gebruiker.
    Klik om uw wijzigingen op te slaan en de updates opnieuw te laden.", "Common.UI.ThemeColorPalette.textStandartColors": "Standaardkleuren", "Common.UI.ThemeColorPalette.textThemeColors": "Themakleuren", + "Common.UI.Themes.txtThemeClassicLight": "Klassiek Licht", + "Common.UI.Themes.txtThemeDark": "Donker", + "Common.UI.Themes.txtThemeLight": "Licht", "Common.UI.Window.cancelButtonText": "Annuleren", "Common.UI.Window.closeButtonText": "Sluiten", "Common.UI.Window.noButtonText": "Nee", @@ -203,10 +206,12 @@ "Common.Views.About.txtVersion": "Versie", "Common.Views.AutoCorrectDialog.textAdd": "Toevoegen", "Common.Views.AutoCorrectDialog.textApplyText": "Toepassen terwijl u typt", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Auto Correctie", "Common.Views.AutoCorrectDialog.textAutoFormat": "AutoOpmaak terwijl u typt", "Common.Views.AutoCorrectDialog.textBulleted": "Automatische lijsten met opsommingstekens", "Common.Views.AutoCorrectDialog.textBy": "Door", "Common.Views.AutoCorrectDialog.textDelete": "Verwijderen", + "Common.Views.AutoCorrectDialog.textFLSentence": "Maak de eerste letter van zinnen hoofdletter", "Common.Views.AutoCorrectDialog.textHyphens": "Koppeltekens (--) met streepje (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Wiskundige autocorrectie", "Common.Views.AutoCorrectDialog.textNumbered": "Automatische genummerde lijsten", @@ -343,6 +348,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Zet samenwerkings modus", "Common.Views.ReviewChanges.tipCommentRem": "Alle opmerkingen verwijderen", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Verwijder huidige opmerking", + "Common.Views.ReviewChanges.tipCommentResolve": "Oplossen van opmerkingen", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Oplossen van huidige opmerkingen", "Common.Views.ReviewChanges.tipCompare": "Vergelijk huidig document met een ander document.", "Common.Views.ReviewChanges.tipHistory": "Toon versie geschiedenis", "Common.Views.ReviewChanges.tipRejectCurrent": "Huidige wijziging afwijzen", @@ -363,6 +370,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Verwijder al mijn commentaar", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Verwijder mijn huidige opmerkingen", "Common.Views.ReviewChanges.txtCommentRemove": "Verwijderen", + "Common.Views.ReviewChanges.txtCommentResolve": "Oplossen", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Alle opmerkingen oplossen", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Oplossen van huidige opmerkingen", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Los mijn opmerkingen op", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Mijn huidige opmerkingen oplossen", "Common.Views.ReviewChanges.txtCompare": "Vergelijken", "Common.Views.ReviewChanges.txtDocLang": "Taal", "Common.Views.ReviewChanges.txtFinal": "Alle veranderingen geaccepteerd (Voorbeeld)", @@ -523,6 +535,7 @@ "DE.Controllers.Main.errorUsersExceed": "Het onder het prijsplan toegestane aantal gebruikers is overschreden", "DE.Controllers.Main.errorViewerDisconnect": "Verbinding is verbroken. U kunt het document nog wel bekijken,
    maar u kunt het pas downloaden of afdrukken als de verbinding is hersteld en de pagina opnieuw is geladen.", "DE.Controllers.Main.leavePageText": "Dit document bevat niet-opgeslagen wijzigingen. Klik op \"Op deze pagina blijven\" en dan op \"Opslaan\" om uw wijzigingen op te slaan. Klik op \"Pagina verlaten\" om alle niet-opgeslagen wijzigingen te negeren.", + "DE.Controllers.Main.leavePageTextOnClose": "Alle niet opgeslagen wijzigingen in dit document gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet opgeslagen wijzigingen te verwijderen.", "DE.Controllers.Main.loadFontsTextText": "Gegevens worden geladen...", "DE.Controllers.Main.loadFontsTitleText": "Gegevens worden geladen", "DE.Controllers.Main.loadFontTextText": "Gegevens worden geladen...", @@ -578,6 +591,7 @@ "DE.Controllers.Main.textShape": "Vorm", "DE.Controllers.Main.textStrict": "Strikte modus", "DE.Controllers.Main.textTryUndoRedo": "De functies Ongedaan maken/Opnieuw worden uitgeschakeld in de modus Snel gezamenlijk bewerken.
    Klik op de knop 'Strikte modus' om over te schakelen naar de strikte modus voor gezamenlijk bewerken. U kunt het bestand dan zonder interferentie van andere gebruikers bewerken en uw wijzigingen verzenden wanneer u die opslaat. U kunt schakelen tussen de modi voor gezamenlijke bewerking via Geavanceerde instellingen van de editor.", + "DE.Controllers.Main.textTryUndoRedoWarn": "De functies Ongedaan maken/Annuleren zijn uitgeschakeld in de modus Snel meewerken.", "DE.Controllers.Main.titleLicenseExp": "Licentie vervallen", "DE.Controllers.Main.titleServerVersion": "Editor bijgewerkt", "DE.Controllers.Main.titleUpdateVersion": "Versie gewijzigd", @@ -590,6 +604,7 @@ "DE.Controllers.Main.txtCallouts": "Legenda", "DE.Controllers.Main.txtCharts": "Grafieken", "DE.Controllers.Main.txtChoose": "Kies een item", + "DE.Controllers.Main.txtClickToLoad": "Klik om afbeelding te laden", "DE.Controllers.Main.txtCurrentDocument": "Huidig document", "DE.Controllers.Main.txtDiagramTitle": "Grafiektitel", "DE.Controllers.Main.txtEditingMode": "Bewerkmodus instellen...", @@ -610,7 +625,9 @@ "DE.Controllers.Main.txtMissArg": "Missende parameter", "DE.Controllers.Main.txtMissOperator": "Ontbrekende operator", "DE.Controllers.Main.txtNeedSynchronize": "U hebt updates", + "DE.Controllers.Main.txtNone": "Geen", "DE.Controllers.Main.txtNoTableOfContents": "Er zijn geen koppen in het document. Pas een kopstijl toe op de tekst zodat deze in de inhoudsopgave wordt weergegeven.", + "DE.Controllers.Main.txtNoTableOfFigures": "Geen tabel met cijfers gevonden.", "DE.Controllers.Main.txtNoText": "Fout! Geen gespecificeerde tekst in document", "DE.Controllers.Main.txtNotInTable": "Is niet in tabel", "DE.Controllers.Main.txtNotValidBookmark": "Fout! Geen geldige zelf referentie voor bladwijzers.", @@ -793,6 +810,7 @@ "DE.Controllers.Main.txtShape_wedgeRoundRectCallout": "Afgeronde rechthoekige Legenda", "DE.Controllers.Main.txtStarsRibbons": "Sterren en linten", "DE.Controllers.Main.txtStyle_Caption": "Onderschrift", + "DE.Controllers.Main.txtStyle_endnote_text": "Eindnoot tekst", "DE.Controllers.Main.txtStyle_footnote_text": "Voetnoot tekst", "DE.Controllers.Main.txtStyle_Heading_1": "Kop 1", "DE.Controllers.Main.txtStyle_Heading_2": "Kop 2", @@ -813,6 +831,8 @@ "DE.Controllers.Main.txtSyntaxError": "Syntax error", "DE.Controllers.Main.txtTableInd": "Tabelindex mag niet nul zijn", "DE.Controllers.Main.txtTableOfContents": "Inhoudsopgave", + "DE.Controllers.Main.txtTableOfFigures": "Tabel met cijfers", + "DE.Controllers.Main.txtTOCHeading": "TOC rubriek", "DE.Controllers.Main.txtTooLarge": "te groot getal om te formatteren", "DE.Controllers.Main.txtTypeEquation": "Typ hier een vergelijking.", "DE.Controllers.Main.txtUndefBookmark": "Ongedefinieerde bladwijzer", @@ -855,6 +875,7 @@ "DE.Controllers.Toolbar.textFontSizeErr": "De ingevoerde waarde is onjuist.
    Voer een waarde tussen 1 en 300 in", "DE.Controllers.Toolbar.textFraction": "Breuken", "DE.Controllers.Toolbar.textFunction": "Functies", + "DE.Controllers.Toolbar.textGroup": "Groep", "DE.Controllers.Toolbar.textInsert": "Invoegen", "DE.Controllers.Toolbar.textIntegral": "Integralen", "DE.Controllers.Toolbar.textLargeOperator": "Grote operators", @@ -1725,6 +1746,7 @@ "DE.Views.FormSettings.textDisconnect": "Verbinding verbreken", "DE.Views.FormSettings.textDropDown": "Dropdown", "DE.Views.FormSettings.textField": "Tekstvak", + "DE.Views.FormSettings.textFixed": "Veld met vaste afmetingen", "DE.Views.FormSettings.textFromFile": "Van bestand", "DE.Views.FormSettings.textFromStorage": "Van Opslag", "DE.Views.FormSettings.textFromUrl": "Van URL", @@ -1736,6 +1758,7 @@ "DE.Views.FormSettings.textNoBorder": "Geen rand", "DE.Views.FormSettings.textPlaceholder": "Tijdelijke aanduiding", "DE.Views.FormSettings.textRadiobox": "Radial knop", + "DE.Views.FormSettings.textRequired": "Vereist", "DE.Views.FormSettings.textSelectImage": "Selecteer afbeelding", "DE.Views.FormSettings.textTip": "Tip", "DE.Views.FormSettings.textTipAdd": "Voeg nieuwe waarde toe", @@ -1803,6 +1826,7 @@ "DE.Views.HyperlinkSettingsDialog.txtEmpty": "Dit veld is vereist", "DE.Views.HyperlinkSettingsDialog.txtHeadings": "Koppen", "DE.Views.HyperlinkSettingsDialog.txtNotUrl": "Dit veld moet een URL in de notatie \"http://www.voorbeeld.com\" bevatten", + "DE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Dit veld is beperkt tot 2083 tekens", "DE.Views.ImageSettings.textAdvanced": "Geavanceerde instellingen tonen", "DE.Views.ImageSettings.textCrop": "Uitsnijden", "DE.Views.ImageSettings.textCropFill": "Vulling", @@ -2346,6 +2370,7 @@ "DE.Views.TableSettings.textBorders": "Randstijl", "DE.Views.TableSettings.textCellSize": "Rijen & Kolommen grootte", "DE.Views.TableSettings.textColumns": "Kolommen", + "DE.Views.TableSettings.textConvert": "Tabel omzetten naar tekst", "DE.Views.TableSettings.textDistributeCols": "Kolommen verdelen", "DE.Views.TableSettings.textDistributeRows": "Rijen verdelen", "DE.Views.TableSettings.textEdit": "Rijen en kolommen", @@ -2450,6 +2475,14 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Geen randen", "DE.Views.TableSettingsAdvanced.txtPercent": "Procent", "DE.Views.TableSettingsAdvanced.txtPt": "Punt", + "DE.Views.TableToTextDialog.textEmpty": "U moet een teken typen voor het aangepaste scheidingsteken.", + "DE.Views.TableToTextDialog.textNested": "Geneste tabellen converteren", + "DE.Views.TableToTextDialog.textOther": "Andere", + "DE.Views.TableToTextDialog.textPara": "Paragraaf tekens", + "DE.Views.TableToTextDialog.textSemicolon": "Puntkomma's", + "DE.Views.TableToTextDialog.textSeparator": "Scheid tekst met", + "DE.Views.TableToTextDialog.textTab": "Table size", + "DE.Views.TableToTextDialog.textTitle": "Tabel omzetten naar tekst", "DE.Views.TextArtSettings.strColor": "Kleur", "DE.Views.TextArtSettings.strFill": "Vulling", "DE.Views.TextArtSettings.strSize": "Grootte", @@ -2473,6 +2506,21 @@ "DE.Views.TextArtSettings.tipAddGradientPoint": "Kleurovergangpunt toevoegen", "DE.Views.TextArtSettings.tipRemoveGradientPoint": "Kleurovergangpunt verwijderen", "DE.Views.TextArtSettings.txtNoBorders": "Geen lijn", + "DE.Views.TextToTableDialog.textAutofit": "Automatisch passend gedrag", + "DE.Views.TextToTableDialog.textColumns": "Kolommen", + "DE.Views.TextToTableDialog.textContents": "Automatisch aanpassen aan de inhoud", + "DE.Views.TextToTableDialog.textEmpty": "U moet een teken typen voor het aangepaste scheidingsteken.", + "DE.Views.TextToTableDialog.textFixed": "Vaste kolombreedte", + "DE.Views.TextToTableDialog.textOther": "Andere", + "DE.Views.TextToTableDialog.textPara": "Paragrafen", + "DE.Views.TextToTableDialog.textRows": "Rijen", + "DE.Views.TextToTableDialog.textSemicolon": "Puntkomma's", + "DE.Views.TextToTableDialog.textSeparator": "Afzonderlijke tekst op", + "DE.Views.TextToTableDialog.textTab": "Tabs", + "DE.Views.TextToTableDialog.textTableSize": "Tabel Grootte", + "DE.Views.TextToTableDialog.textTitle": "Tekst omzetten naar tabel", + "DE.Views.TextToTableDialog.textWindow": "Automatische aanpassing aan het venster", + "DE.Views.TextToTableDialog.txtAutoText": "Auto", "DE.Views.Toolbar.capBtnAddComment": "Opmerking toevoegen", "DE.Views.Toolbar.capBtnBlankPage": "Lege pagina", "DE.Views.Toolbar.capBtnColumns": "Kolommen", @@ -2516,6 +2564,7 @@ "DE.Views.Toolbar.mniImageFromUrl": "Afbeelding van URL", "DE.Views.Toolbar.mniLowerCase": "kleine letters ", "DE.Views.Toolbar.mniSentenceCase": "Zin lettertype", + "DE.Views.Toolbar.mniTextToTable": "Tekst omzetten naar tabel", "DE.Views.Toolbar.mniToggleCase": "Schakel lettertype", "DE.Views.Toolbar.mniUpperCase": "HOOFDLETTERS", "DE.Views.Toolbar.strMenuNoFill": "Geen vulling", @@ -2599,7 +2648,7 @@ "DE.Views.Toolbar.tipAlignRight": "Rechts uitlijnen", "DE.Views.Toolbar.tipBack": "Terug", "DE.Views.Toolbar.tipBlankPage": "Invoegen nieuwe pagina", - "DE.Views.Toolbar.tipChangeCase": "Verander lettertype", + "DE.Views.Toolbar.tipChangeCase": "Verander geval", "DE.Views.Toolbar.tipChangeChart": "Grafiektype wijzigen", "DE.Views.Toolbar.tipClearStyle": "Stijl wissen", "DE.Views.Toolbar.tipColorSchemas": "Kleurenschema wijzigen", diff --git a/apps/documenteditor/main/locale/pt.json b/apps/documenteditor/main/locale/pt.json index 711516688..a85479625 100644 --- a/apps/documenteditor/main/locale/pt.json +++ b/apps/documenteditor/main/locale/pt.json @@ -35,7 +35,7 @@ "Common.Controllers.ReviewChanges.textIndentRight": "Indent right", "Common.Controllers.ReviewChanges.textInserted": "Inserted:", "Common.Controllers.ReviewChanges.textItalic": "Italic", - "Common.Controllers.ReviewChanges.textJustify": "Align justify", + "Common.Controllers.ReviewChanges.textJustify": "Alinhamento justificado", "Common.Controllers.ReviewChanges.textKeepLines": "Keep lines together", "Common.Controllers.ReviewChanges.textKeepNext": "Keep with next", "Common.Controllers.ReviewChanges.textLeft": "Align left", diff --git a/apps/documenteditor/main/locale/ru.json b/apps/documenteditor/main/locale/ru.json index 261e06c30..53a1fd700 100644 --- a/apps/documenteditor/main/locale/ru.json +++ b/apps/documenteditor/main/locale/ru.json @@ -846,7 +846,7 @@ "DE.Controllers.Main.uploadDocSizeMessage": "Превышен максимальный размер документа.", "DE.Controllers.Main.uploadImageExtMessage": "Неизвестный формат изображения.", "DE.Controllers.Main.uploadImageFileCountMessage": "Ни одного изображения не загружено.", - "DE.Controllers.Main.uploadImageSizeMessage": "Превышен максимальный размер изображения.", + "DE.Controllers.Main.uploadImageSizeMessage": "Слишком большое изображение. Максимальный размер - 25 MB.", "DE.Controllers.Main.uploadImageTextText": "Загрузка изображения...", "DE.Controllers.Main.uploadImageTitleText": "Загрузка изображения", "DE.Controllers.Main.waitText": "Пожалуйста, подождите...", diff --git a/apps/documenteditor/main/locale/tr.json b/apps/documenteditor/main/locale/tr.json index 6151929fd..75c73ae1d 100644 --- a/apps/documenteditor/main/locale/tr.json +++ b/apps/documenteditor/main/locale/tr.json @@ -60,21 +60,26 @@ "Common.Controllers.ReviewChanges.textStrikeout": "Strikeout", "Common.Controllers.ReviewChanges.textSubScript": "Subscript", "Common.Controllers.ReviewChanges.textSuperScript": "Superscript", + "Common.Controllers.ReviewChanges.textTableChanged": "Tablo Ayarladı Değiştirildi", + "Common.Controllers.ReviewChanges.textTableRowsDel": "Tablo Satırı Silindi", "Common.Controllers.ReviewChanges.textTabs": "Change tabs", "Common.Controllers.ReviewChanges.textUnderline": "Underline", "Common.Controllers.ReviewChanges.textWidow": "Widow control", "Common.define.chartData.textArea": "Bölge Grafiği", "Common.define.chartData.textBar": "Çubuk grafik", "Common.define.chartData.textColumn": "Sütun grafik", + "Common.define.chartData.textComboCustom": "Özel kombinasyon", "Common.define.chartData.textLine": "Çizgi grafiği", "Common.define.chartData.textPie": "Dilim grafik", "Common.define.chartData.textPoint": "Nokta grafiği", "Common.define.chartData.textStock": "Stok Grafiği", "Common.define.chartData.textSurface": "Yüzey", + "Common.Translation.warnFileLockedBtnEdit": "Kopya oluştur", "Common.UI.Calendar.textApril": "Nisan", "Common.UI.Calendar.textAugust": "Ağustos", "Common.UI.Calendar.textDecember": "Aralık", "Common.UI.Calendar.textFebruary": "Şubat", + "Common.UI.ColorButton.textAutoColor": "Otomatik", "Common.UI.ColorButton.textNewColor": "Yeni Özel Renk Ekle", "Common.UI.ComboBorderSize.txtNoBorders": "Sınır yok", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "Sınır yok", @@ -119,6 +124,9 @@ "Common.Views.About.txtTel": "tel:", "Common.Views.About.txtVersion": "Versiyon", "Common.Views.AutoCorrectDialog.textAdd": "ekle", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Otomatik Düzeltme", + "Common.Views.AutoCorrectDialog.textDelete": "Sil", + "Common.Views.AutoCorrectDialog.textTitle": "Otomatik Düzeltme", "Common.Views.Chat.textSend": "Gönder", "Common.Views.Comments.textAdd": "Ekle", "Common.Views.Comments.textAddComment": "Yorum Ekle", @@ -200,7 +208,9 @@ "Common.Views.Plugins.textStart": "Başlat", "Common.Views.Plugins.textStop": "Bitir", "Common.Views.Protection.hintPwd": "Şifreyi değiştir veya sil", + "Common.Views.Protection.txtAddPwd": "Şifre ekle", "Common.Views.Protection.txtChangePwd": "Şifre Değiştir", + "Common.Views.Protection.txtDeletePwd": "Şifreyi sil", "Common.Views.Protection.txtInvisibleSignature": "Dijital imza ekle", "Common.Views.RenameDialog.textName": "Dosya adı", "Common.Views.RenameDialog.txtInvalidName": "Dosya adı aşağıdaki karakterlerden herhangi birini içeremez:", @@ -255,6 +265,7 @@ "Common.Views.ReviewChangesDialog.txtRejectAll": "Tüm Değişiklikleri Reddet", "Common.Views.ReviewChangesDialog.txtRejectCurrent": "Mevcut Değişiklikleri Reddet", "Common.Views.ReviewPopover.textAdd": "Ekle", + "Common.Views.ReviewPopover.textAddReply": "Cevap ekle", "Common.Views.ReviewPopover.textCancel": "İptal", "Common.Views.ReviewPopover.textClose": "Kapat", "Common.Views.ReviewPopover.textEdit": "Tamam", @@ -384,10 +395,13 @@ "DE.Controllers.Main.titleUpdateVersion": "Versiyon değiştirildi", "DE.Controllers.Main.txtArt": "Your text here", "DE.Controllers.Main.txtBasicShapes": "Temel Şekiller", + "DE.Controllers.Main.txtBelow": "Altında", "DE.Controllers.Main.txtBookmarkError": "Hata! Yer imi tanımlı değil", "DE.Controllers.Main.txtButtons": "Tuşlar", "DE.Controllers.Main.txtCallouts": "Belirtme Çizgiler", "DE.Controllers.Main.txtCharts": "Grafikler", + "DE.Controllers.Main.txtChoose": "Bir öğe seçin", + "DE.Controllers.Main.txtCurrentDocument": "Mevcut belge", "DE.Controllers.Main.txtDiagramTitle": "Diagram Başlığı", "DE.Controllers.Main.txtEditingMode": "Düzenleme modunu belirle", "DE.Controllers.Main.txtEnterDate": "Bir tarih girin", @@ -402,6 +416,11 @@ "DE.Controllers.Main.txtSeries": "Seriler", "DE.Controllers.Main.txtShape_actionButtonHome": "Ev Tuşu", "DE.Controllers.Main.txtShape_cloud": "Bulut", + "DE.Controllers.Main.txtShape_corner": "Köşe", + "DE.Controllers.Main.txtShape_decagon": "Dekagon", + "DE.Controllers.Main.txtShape_diagStripe": "Çapraz Çizgi", + "DE.Controllers.Main.txtShape_diamond": "Elmas", + "DE.Controllers.Main.txtShape_downArrow": "Aşağı Oku", "DE.Controllers.Main.txtShape_leftArrow": "Sol Ok", "DE.Controllers.Main.txtShape_lineWithArrow": "Ok", "DE.Controllers.Main.txtShape_noSmoking": "Simge \"Yok\"", @@ -830,6 +849,7 @@ "DE.Views.CaptionDialog.textSeparator": "Ayraç", "DE.Views.CaptionDialog.textTable": "Tablo", "DE.Views.CaptionDialog.textTitle": "Resim yazısı ekle", + "DE.Views.CellsAddDialog.textCol": "Sütunlar", "DE.Views.ChartSettings.textAdvanced": "Gelişmiş ayarları göster", "DE.Views.ChartSettings.textChartType": "Grafik Tipini Değiştir", "DE.Views.ChartSettings.textEditData": "Veri düzenle", @@ -849,13 +869,19 @@ "DE.Views.ChartSettings.txtTitle": "Grafik", "DE.Views.ChartSettings.txtTopAndBottom": "Üst ve alt", "DE.Views.ControlSettingsDialog.textAdd": "ekle", + "DE.Views.ControlSettingsDialog.textApplyAll": "Tümüne Uygula", "DE.Views.ControlSettingsDialog.textColor": "Renk", "DE.Views.ControlSettingsDialog.textDate": "Tarih formatı", + "DE.Views.ControlSettingsDialog.textDelete": "Sil", + "DE.Views.ControlSettingsDialog.textDisplayName": "Görünen ad", + "DE.Views.ControlSettingsDialog.textDown": "Aşağı", + "DE.Views.ControlSettingsDialog.textDropDown": "Aşağı açılır liste", "DE.Views.ControlSettingsDialog.textFormat": "Tarihi böyle göster", "DE.Views.ControlSettingsDialog.textLang": "Dil", "DE.Views.ControlSettingsDialog.textName": "Başlık", "DE.Views.ControlSettingsDialog.textTag": "Etiket", "DE.Views.ControlSettingsDialog.tipChange": "Simge değiştir", + "DE.Views.CrossReferenceDialog.textAboveBelow": "Yukarı/aşağı", "DE.Views.CrossReferenceDialog.textBookmark": "Yer imi", "DE.Views.CrossReferenceDialog.textBookmarkText": "Yer imi metni", "DE.Views.CrossReferenceDialog.textCaption": "Resim yazısının tamamı", @@ -949,6 +975,7 @@ "DE.Views.DocumentHolder.textArrangeBackward": "Geri Taşı", "DE.Views.DocumentHolder.textArrangeForward": "İleri Taşı", "DE.Views.DocumentHolder.textArrangeFront": "Önplana Getir", + "DE.Views.DocumentHolder.textCol": "Tüm sütunu sil", "DE.Views.DocumentHolder.textCopy": "Kopyala", "DE.Views.DocumentHolder.textCut": "Kes", "DE.Views.DocumentHolder.textEditWrapBoundary": "Sargı Sınırı Düzenle", @@ -959,12 +986,14 @@ "DE.Views.DocumentHolder.textRotate": "Döndür", "DE.Views.DocumentHolder.textRotate270": "Döndür 90° Saatyönütersi", "DE.Views.DocumentHolder.textRotate90": "Döndür 90° Saatyönü", + "DE.Views.DocumentHolder.textRow": "Tüm diziyi sil", "DE.Views.DocumentHolder.textShapeAlignBottom": "Alta Hizala", "DE.Views.DocumentHolder.textShapeAlignCenter": "Ortaya Hizala", "DE.Views.DocumentHolder.textShapeAlignLeft": "Sola Hizala", "DE.Views.DocumentHolder.textShapeAlignMiddle": "Ortaya hizala", "DE.Views.DocumentHolder.textShapeAlignRight": "Sağa Hizla", "DE.Views.DocumentHolder.textShapeAlignTop": "Üste Hizala", + "DE.Views.DocumentHolder.textTitleCellsRemove": "Hücre Sil", "DE.Views.DocumentHolder.textUndo": "Geri Al", "DE.Views.DocumentHolder.textUpdateAll": "Tüm tabloyu güncelle", "DE.Views.DocumentHolder.textUpdatePages": "Sadece sayfa numaralarını güncelle", @@ -1097,6 +1126,7 @@ "DE.Views.DropcapSettingsAdvanced.textWidth": "Genişlik", "DE.Views.DropcapSettingsAdvanced.tipFontName": "Yazı Tipi", "DE.Views.DropcapSettingsAdvanced.txtNoBorders": "Sınır yok", + "DE.Views.EditListItemDialog.textDisplayName": "Görünen ad", "DE.Views.FileMenu.btnBackCaption": "Dökümanlara Git", "DE.Views.FileMenu.btnCloseMenuCaption": "Menüyü kapat", "DE.Views.FileMenu.btnCreateNewCaption": "Yeni oluştur", @@ -1121,7 +1151,9 @@ "DE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Oluşturulduktan sonra düzenleme sırasında stil ve format verebileceğiniz yeni boş metin dosyası oluşturun. Yada belli tipte yada amaçta dökümana başlamak için şablonlardan birini seçin, bu şablonlar önceden düzenlenmiştir.", "DE.Views.FileMenuPanels.CreateNew.newDocumentText": "Yeni Metin Dökümanı", "DE.Views.FileMenuPanels.CreateNew.noTemplatesText": "Şablon yok", + "DE.Views.FileMenuPanels.DocumentInfo.okButtonText": "Uygula", "DE.Views.FileMenuPanels.DocumentInfo.txtAddAuthor": "Yazar Ekle", + "DE.Views.FileMenuPanels.DocumentInfo.txtAddText": "Metin Ekle", "DE.Views.FileMenuPanels.DocumentInfo.txtAuthor": "Yayıncı", "DE.Views.FileMenuPanels.DocumentInfo.txtBtnAccessRights": "Erişim haklarını değiştir", "DE.Views.FileMenuPanels.DocumentInfo.txtLoading": "Yükleniyor...", @@ -1168,6 +1200,7 @@ "DE.Views.FileMenuPanels.Settings.textForceSave": "Sunucuya Kaydet", "DE.Views.FileMenuPanels.Settings.textMinute": "Her Dakika", "DE.Views.FileMenuPanels.Settings.txtAll": "Tümünü göster", + "DE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Otomatik Düzeltme seçenekleri", "DE.Views.FileMenuPanels.Settings.txtCm": "Santimetre", "DE.Views.FileMenuPanels.Settings.txtFitPage": "Sayfaya Sığdır", "DE.Views.FileMenuPanels.Settings.txtFitWidth": "Genişliğe Sığdır", @@ -1184,6 +1217,15 @@ "DE.Views.FileMenuPanels.Settings.txtStopMacrosDesc": "Bütün macroları uyarı vermeden devre dışı bırak", "DE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Bütün macroları uyarı vererek devre dışı bırak", "DE.Views.FileMenuPanels.Settings.txtWin": "Windows olarak", + "DE.Views.FormSettings.textDelete": "Sil", + "DE.Views.FormSettings.textDisconnect": "Bağlantıyı Kes", + "DE.Views.FormSettings.textDropDown": "Aşağı açılır", + "DE.Views.FormSettings.textMaxChars": "Karakter sınırı", + "DE.Views.FormSettings.textTipAdd": "Yeni değer ekle", + "DE.Views.FormSettings.textTipDelete": "Değeri sil", + "DE.Views.FormsTab.capBtnDropDown": "Aşağı açılır", + "DE.Views.FormsTab.textNewColor": "Yeni Özel Renk Ekle", + "DE.Views.FormsTab.tipDropDown": "Aşağı açılır liste ekle", "DE.Views.HeaderFooterSettings.textBottomCenter": "Alt Orta", "DE.Views.HeaderFooterSettings.textBottomLeft": "Alt Sol", "DE.Views.HeaderFooterSettings.textBottomRight": "Alt Sağ", @@ -1244,6 +1286,7 @@ "DE.Views.ImageSettingsAdvanced.textAngle": "Açı", "DE.Views.ImageSettingsAdvanced.textArrows": "Oklar", "DE.Views.ImageSettingsAdvanced.textAspectRatio": "En-boy oranını kilitle", + "DE.Views.ImageSettingsAdvanced.textAutofit": "Otomatik Sığdır", "DE.Views.ImageSettingsAdvanced.textBeginSize": "Başlama Boyutu", "DE.Views.ImageSettingsAdvanced.textBeginStyle": "Başlama Stili", "DE.Views.ImageSettingsAdvanced.textBelow": "altında", @@ -1422,6 +1465,7 @@ "DE.Views.NoteSettingsDialog.textTitle": "Not ayarları", "DE.Views.NotesRemoveDialog.textEnd": "Tüm Son Notları sil", "DE.Views.NotesRemoveDialog.textFoot": "Tüm dipnotları sil", + "DE.Views.NotesRemoveDialog.textTitle": "Notları sil", "DE.Views.PageMarginsDialog.notcriticalErrorTitle": "Warning", "DE.Views.PageMarginsDialog.textBottom": "Bottom", "DE.Views.PageMarginsDialog.textLeft": "Left", @@ -1433,6 +1477,7 @@ "DE.Views.PageSizeDialog.textHeight": "Height", "DE.Views.PageSizeDialog.textTitle": "Page Size", "DE.Views.PageSizeDialog.textWidth": "Width", + "DE.Views.PageSizeDialog.txtCustom": "Özel", "DE.Views.ParagraphSettings.strLineHeight": "Satır Aralığı", "DE.Views.ParagraphSettings.strParagraphSpacing": "Aralık", "DE.Views.ParagraphSettings.strSomeParagraphSpace": "Aynı stildeki paragraflar arasına aralık ekleme", @@ -1453,6 +1498,7 @@ "DE.Views.ParagraphSettingsAdvanced.strIndentsLeftText": "Sol", "DE.Views.ParagraphSettingsAdvanced.strIndentsRightText": "Sağ", "DE.Views.ParagraphSettingsAdvanced.strIndentsSpacingAfter": "sonra", + "DE.Views.ParagraphSettingsAdvanced.strIndentsSpacingBefore": "Önce", "DE.Views.ParagraphSettingsAdvanced.strKeepLines": "Satırları birlikte tut", "DE.Views.ParagraphSettingsAdvanced.strKeepNext": "Sonrakiyle tut", "DE.Views.ParagraphSettingsAdvanced.strMargins": "Dolgu maddeleri", @@ -1473,6 +1519,7 @@ "DE.Views.ParagraphSettingsAdvanced.textBorderDesc": "Grafiğe tıklayın yada sınır seçmek için tuşları kullanın ve seçilen stili bunlara uygulayın", "DE.Views.ParagraphSettingsAdvanced.textBorderWidth": "Sınır Boyutu", "DE.Views.ParagraphSettingsAdvanced.textBottom": "Alt", + "DE.Views.ParagraphSettingsAdvanced.textCentered": "Ortalanmış", "DE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Karakter aralığı", "DE.Views.ParagraphSettingsAdvanced.textDefault": "Varsayılan Sekme", "DE.Views.ParagraphSettingsAdvanced.textEffects": "Efektler", @@ -1578,6 +1625,7 @@ "DE.Views.TableOfContentsSettings.textLeader": "Lider", "DE.Views.TableOfContentsSettings.textLevel": "Seviye", "DE.Views.TableOfContentsSettings.textLevels": "Seviyeler", + "DE.Views.TableOfContentsSettings.txtCurrent": "Mevcut", "DE.Views.TableOfContentsSettings.txtModern": "Modern", "DE.Views.TableSettings.deleteColumnText": "Sütunu Sil", "DE.Views.TableSettings.deleteRowText": "Satırı Sil", @@ -1594,6 +1642,7 @@ "DE.Views.TableSettings.splitCellsText": "Hücreyi Böl...", "DE.Views.TableSettings.splitCellTitleText": "Hücreyi Böl", "DE.Views.TableSettings.strRepeatRow": "Her sayfanın başında üst başlık sırası olarak tekrarla", + "DE.Views.TableSettings.textAddFormula": "Formül ekle", "DE.Views.TableSettings.textAdvanced": "Gelişmiş ayarları göster", "DE.Views.TableSettings.textBackColor": "Arka plan rengi", "DE.Views.TableSettings.textBanded": "Bağlı", @@ -1622,6 +1671,8 @@ "DE.Views.TableSettings.tipRight": "Sadece Dış Sağ Sınırı Belirle", "DE.Views.TableSettings.tipTop": "Sadece Dış Üst Sınırı Belirle", "DE.Views.TableSettings.txtNoBorders": "Sınır yok", + "DE.Views.TableSettings.txtTable_Accent": "Aksan", + "DE.Views.TableSettings.txtTable_Colorful": "Renkli", "DE.Views.TableSettingsAdvanced.textAlign": "Hiza", "DE.Views.TableSettingsAdvanced.textAlignment": "Hiza", "DE.Views.TableSettingsAdvanced.textAllowSpacing": "Hücreler arası aralığa izin ver", @@ -1700,6 +1751,7 @@ "DE.Views.TextArtSettings.strStroke": "Stroke", "DE.Views.TextArtSettings.strTransparency": "Opacity", "DE.Views.TextArtSettings.strType": "Tip", + "DE.Views.TextArtSettings.textAngle": "Açı", "DE.Views.TextArtSettings.textBorderSizeErr": "The entered value is incorrect.
    Please enter a value between 0 pt and 1584 pt.", "DE.Views.TextArtSettings.textColor": "Color Fill", "DE.Views.TextArtSettings.textDirection": "Direction", @@ -1713,6 +1765,9 @@ "DE.Views.TextArtSettings.textTemplate": "Template", "DE.Views.TextArtSettings.textTransform": "Transform", "DE.Views.TextArtSettings.txtNoBorders": "No Line", + "DE.Views.TextToTableDialog.textColumns": "Sütunlar", + "DE.Views.TextToTableDialog.textContents": "İçeriğe otomatik sığdır", + "DE.Views.TextToTableDialog.textWindow": "Pencereye otomatik sığdır", "DE.Views.Toolbar.capBtnAddComment": "Yorum ekle", "DE.Views.Toolbar.capBtnBlankPage": "Boş Sayfa", "DE.Views.Toolbar.capBtnColumns": "Sütunlar", @@ -1763,6 +1818,7 @@ "DE.Views.Toolbar.textContPage": "Devam Eden Sayfa", "DE.Views.Toolbar.textCustomLineNumbers": "Sayfa numaralandırma seçenekleri", "DE.Views.Toolbar.textDateControl": "Tarih", + "DE.Views.Toolbar.textDropdownControl": "Aşağı açılır liste", "DE.Views.Toolbar.textEditWatermark": "Özel Filigran", "DE.Views.Toolbar.textEvenPage": "Çift Sayfa", "DE.Views.Toolbar.textInMargin": "Kenar boşluğunda", @@ -1872,6 +1928,7 @@ "DE.Views.Toolbar.tipSynchronize": "Döküman başka bir kullanıcı tarafından değiştirildi. Lütfen değişikleri kaydetmek için tıklayın ve güncellemeleri yenileyin.", "DE.Views.Toolbar.tipUndo": "Geri Al", "DE.Views.Toolbar.tipWatermark": "Filigranı düzenle", + "DE.Views.Toolbar.txtObjectsAlign": "Seçili Objeleri Hizala", "DE.Views.Toolbar.txtScheme1": "Ofis", "DE.Views.Toolbar.txtScheme10": "Medyan", "DE.Views.Toolbar.txtScheme11": "Metro", diff --git a/apps/documenteditor/main/locale/zh.json b/apps/documenteditor/main/locale/zh.json index e36c42a85..3c6af3ada 100644 --- a/apps/documenteditor/main/locale/zh.json +++ b/apps/documenteditor/main/locale/zh.json @@ -169,6 +169,7 @@ "Common.Views.AutoCorrectDialog.textBy": "依据", "Common.Views.AutoCorrectDialog.textDelete": "删除", "Common.Views.AutoCorrectDialog.textMathCorrect": "数学自动修正", + "Common.Views.AutoCorrectDialog.textRecognizedDesc": "以下表达式被识别为数学公式。这些表达式不会被自动设为斜体。", "Common.Views.AutoCorrectDialog.textReplace": "替换", "Common.Views.AutoCorrectDialog.textReplaceText": "输入时自动替换", "Common.Views.AutoCorrectDialog.textReplaceType": "输入时自动替换文字", @@ -289,6 +290,7 @@ "Common.Views.ReviewChanges.strFastDesc": "实时共同编辑。所有更改将会自动保存。", "Common.Views.ReviewChanges.strStrict": "严格", "Common.Views.ReviewChanges.strStrictDesc": "使用“保存”按钮同步您和其他人所做的更改。", + "Common.Views.ReviewChanges.textWarnTrackChanges": "对全体有完整控制权的用户,“跟踪修改”功能将会启动。任何人下次打开该文档,“跟踪修改”功能都会保持在启动状态。", "Common.Views.ReviewChanges.tipAcceptCurrent": "接受当前的变化", "Common.Views.ReviewChanges.tipCoAuthMode": "设置共同编辑模式", "Common.Views.ReviewChanges.tipCommentRem": "移除批注", @@ -432,6 +434,7 @@ "DE.Controllers.Main.errorAccessDeny": "您正在尝试执行您没有权限的操作。
    请联系您的文档服务器管理员.", "DE.Controllers.Main.errorBadImageUrl": "图片地址不正确", "DE.Controllers.Main.errorCoAuthoringDisconnect": "服务器连接丢失。该文档现在无法编辑", + "DE.Controllers.Main.errorComboSeries": "要创建联立图表,请选中至少两组数据。", "DE.Controllers.Main.errorCompare": "协作编辑状态下,无法使用文件比对功能。", "DE.Controllers.Main.errorConnectToServer": "这份文件无法保存。请检查连接设置或联系您的管理员。
    当你点击“OK”按钮,系统将提示您下载文档。", "DE.Controllers.Main.errorDatabaseConnection": "外部错误。
    数据库连接错误。如果错误仍然存​​在,请联系支持人员。", @@ -454,6 +457,7 @@ "DE.Controllers.Main.errorSessionAbsolute": "文档编辑会话已过期。请重新加载页面。", "DE.Controllers.Main.errorSessionIdle": "该文件尚未编辑相当长的时间。请重新加载页面。", "DE.Controllers.Main.errorSessionToken": "与服务器的连接已中断。请重新加载页面。", + "DE.Controllers.Main.errorSetPassword": "未能成功设置密码", "DE.Controllers.Main.errorStockChart": "行顺序不正确。建立股票图表将数据按照以下顺序放置在表格上:
    开盘价,最高价格,最低价格,收盘价。", "DE.Controllers.Main.errorToken": "文档安全令牌未正确形成。
    请与您的文件服务器管理员联系。", "DE.Controllers.Main.errorTokenExpire": "文档安全令牌已过期。
    请与您的文档服务器管理员联系。", @@ -514,6 +518,7 @@ "DE.Controllers.Main.textShape": "形状", "DE.Controllers.Main.textStrict": "严格模式", "DE.Controllers.Main.textTryUndoRedo": "对于快速的协同编辑模式,取消/重做功能是禁用的。< br >单击“严格模式”按钮切换到严格co-editing模式编辑该文件没有其他用户干扰和发送您的更改只后你拯救他们。您可以使用编辑器高级设置在编辑模式之间切换。", + "DE.Controllers.Main.textTryUndoRedoWarn": "快速共同编辑模式下,撤销/重做功能被禁用。", "DE.Controllers.Main.titleLicenseExp": "许可证过期", "DE.Controllers.Main.titleServerVersion": "编辑器已更新", "DE.Controllers.Main.titleUpdateVersion": "版本已变化", @@ -779,6 +784,7 @@ "DE.Controllers.Navigation.txtBeginning": "文档开头", "DE.Controllers.Navigation.txtGotoBeginning": "转到文档开头", "DE.Controllers.Statusbar.textHasChanges": "已经跟踪了新的变化", + "DE.Controllers.Statusbar.textSetTrackChanges": "你现在处于了“跟踪变化”模式。", "DE.Controllers.Statusbar.textTrackChanges": "打开文档,并启用“跟踪更改”模式", "DE.Controllers.Statusbar.tipReview": "跟踪变化", "DE.Controllers.Statusbar.zoomText": "缩放%{0}", @@ -1704,6 +1710,7 @@ "DE.Views.HyperlinkSettingsDialog.txtEmpty": "这是必填栏", "DE.Views.HyperlinkSettingsDialog.txtHeadings": "标题", "DE.Views.HyperlinkSettingsDialog.txtNotUrl": "该字段应该是“http://www.example.com”格式的URL", + "DE.Views.HyperlinkSettingsDialog.txtSizeLimit": "该域字符限制为2803个。", "DE.Views.ImageSettings.textAdvanced": "显示高级设置", "DE.Views.ImageSettings.textCrop": "裁剪", "DE.Views.ImageSettings.textCropFill": "填满", @@ -1820,6 +1827,7 @@ "DE.Views.LeftMenu.txtDeveloper": "开发者模式", "DE.Views.LeftMenu.txtLimit": "限制访问", "DE.Views.LeftMenu.txtTrial": "试用模式", + "DE.Views.LeftMenu.txtTrialDev": "试用开发者模式", "DE.Views.LineNumbersDialog.textAddLineNumbering": "新增行号", "DE.Views.LineNumbersDialog.textApplyTo": "应用更改", "DE.Views.LineNumbersDialog.textContinuous": "连续", diff --git a/apps/presentationeditor/embed/locale/ro.json b/apps/presentationeditor/embed/locale/ro.json index fb9fb2621..d53edef04 100644 --- a/apps/presentationeditor/embed/locale/ro.json +++ b/apps/presentationeditor/embed/locale/ro.json @@ -25,6 +25,7 @@ "PE.ApplicationController.waitText": "Vă rugăm să așteptați...", "PE.ApplicationView.txtDownload": "Descărcare", "PE.ApplicationView.txtEmbed": "Încorporare", + "PE.ApplicationView.txtFileLocation": "Deschidere locația fișierului", "PE.ApplicationView.txtFullScreen": "Ecran complet", "PE.ApplicationView.txtPrint": "Imprimare", "PE.ApplicationView.txtShare": "Partajează" diff --git a/apps/presentationeditor/embed/locale/tr.json b/apps/presentationeditor/embed/locale/tr.json index e2e851937..402dc5d93 100644 --- a/apps/presentationeditor/embed/locale/tr.json +++ b/apps/presentationeditor/embed/locale/tr.json @@ -24,6 +24,7 @@ "PE.ApplicationController.waitText": "Lütfen bekleyin...", "PE.ApplicationView.txtDownload": "İndir", "PE.ApplicationView.txtEmbed": "Gömülü", + "PE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "PE.ApplicationView.txtFullScreen": "Tam Ekran", "PE.ApplicationView.txtPrint": "Yazdır", "PE.ApplicationView.txtShare": "Paylaş" diff --git a/apps/presentationeditor/embed/locale/zh.json b/apps/presentationeditor/embed/locale/zh.json index 86b913c56..fbb4fa02e 100644 --- a/apps/presentationeditor/embed/locale/zh.json +++ b/apps/presentationeditor/embed/locale/zh.json @@ -25,6 +25,7 @@ "PE.ApplicationController.waitText": "请稍候...", "PE.ApplicationView.txtDownload": "下载", "PE.ApplicationView.txtEmbed": "嵌入", + "PE.ApplicationView.txtFileLocation": "打开文件所在位置", "PE.ApplicationView.txtFullScreen": "全屏", "PE.ApplicationView.txtPrint": "打印", "PE.ApplicationView.txtShare": "共享" diff --git a/apps/presentationeditor/main/locale/ca.json b/apps/presentationeditor/main/locale/ca.json index 56d657a2f..566a18209 100644 --- a/apps/presentationeditor/main/locale/ca.json +++ b/apps/presentationeditor/main/locale/ca.json @@ -6,15 +6,51 @@ "Common.Controllers.ExternalDiagramEditor.warningText": "L’objecte està desactivat perquè està sent editat per un altre usuari.", "Common.Controllers.ExternalDiagramEditor.warningTitle": "Avis", "Common.define.chartData.textArea": "Àrea", + "Common.define.chartData.textAreaStacked": "Àrea apilada", + "Common.define.chartData.textAreaStackedPer": "Àrea apilada al 100%", "Common.define.chartData.textBar": "Barra", - "Common.define.chartData.textCharts": "Gràfics", + "Common.define.chartData.textBarNormal": "Columna agrupada", + "Common.define.chartData.textBarNormal3d": "Columna 3D agrupada", + "Common.define.chartData.textBarNormal3dPerspective": "Columna 3D", + "Common.define.chartData.textBarStacked": "Columna apilada", + "Common.define.chartData.textBarStacked3d": "Columna 3D apilada", + "Common.define.chartData.textBarStackedPer": "Columna apilada al 100%", + "Common.define.chartData.textBarStackedPer3d": "columna 3D apilada al 100%", + "Common.define.chartData.textCharts": "Diagrames", "Common.define.chartData.textColumn": "Columna", + "Common.define.chartData.textCombo": "Combo", + "Common.define.chartData.textComboAreaBar": "Àrea apilada - columna agrupada", + "Common.define.chartData.textComboBarLine": "Columna-línia agrupada", + "Common.define.chartData.textComboBarLineSecondary": " Columna-línia agrupada a l'eix secundari", + "Common.define.chartData.textComboCustom": "Combinació personalitzada", + "Common.define.chartData.textDoughnut": "Donut", + "Common.define.chartData.textHBarNormal": "Barra agrupada", + "Common.define.chartData.textHBarNormal3d": "Barra 3D agrupada", + "Common.define.chartData.textHBarStacked": "Barra apilada", + "Common.define.chartData.textHBarStacked3d": "Barra 3D apilada", + "Common.define.chartData.textHBarStackedPer": "Barra apilada al 100%", + "Common.define.chartData.textHBarStackedPer3d": "Barra 3D apilada al 100%", "Common.define.chartData.textLine": "Línia", + "Common.define.chartData.textLine3d": "Línia 3D", + "Common.define.chartData.textLineMarker": "Línia amb marcadors", + "Common.define.chartData.textLineStacked": "Línia apilada", + "Common.define.chartData.textLineStackedMarker": "Línia apilada amb marcadors", + "Common.define.chartData.textLineStackedPer": "Línia apilada al 100%", + "Common.define.chartData.textLineStackedPerMarker": "Línia apilada al 100% amb marcadors", "Common.define.chartData.textPie": "Gràfic circular", + "Common.define.chartData.textPie3d": "Pastís 3D", "Common.define.chartData.textPoint": "XY (Dispersió)", + "Common.define.chartData.textScatter": "Dispersió", + "Common.define.chartData.textScatterLine": "Dispersió amb línies rectes", + "Common.define.chartData.textScatterLineMarker": "Dispersió amb línies rectes i marcadors", + "Common.define.chartData.textScatterSmooth": "Dispersió amb línies suaus", + "Common.define.chartData.textScatterSmoothMarker": "Dispersió amb línies suaus i marcadors", "Common.define.chartData.textStock": "Existències", "Common.define.chartData.textSurface": "Superfície", "Common.Translation.warnFileLocked": "El document s'està editant en una altra aplicació. Podeu continuar editant i guardar-lo com a còpia.", + "Common.Translation.warnFileLockedBtnEdit": "Crea una còpia", + "Common.Translation.warnFileLockedBtnView": "Obrir per veure", + "Common.UI.ColorButton.textAutoColor": "Automàtic", "Common.UI.ColorButton.textNewColor": "Afegir un Nou Color Personalitzat", "Common.UI.ComboBorderSize.txtNoBorders": "Sense vores", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "Sense vores", @@ -39,6 +75,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Un altre usuari ha canviat el document.
    Feu clic per desar els canvis i tornar a carregar les actualitzacions.", "Common.UI.ThemeColorPalette.textStandartColors": "Colors Estàndards", "Common.UI.ThemeColorPalette.textThemeColors": "Colors Tema", + "Common.UI.Themes.txtThemeClassicLight": "Llum clàssica", + "Common.UI.Themes.txtThemeDark": "Fosc", + "Common.UI.Themes.txtThemeLight": "Clar", "Common.UI.Window.cancelButtonText": "Cancel·lar", "Common.UI.Window.closeButtonText": "Tancar", "Common.UI.Window.noButtonText": "No", @@ -59,12 +98,21 @@ "Common.Views.About.txtTel": "tel.: ", "Common.Views.About.txtVersion": "Versió", "Common.Views.AutoCorrectDialog.textAdd": "Afegir", + "Common.Views.AutoCorrectDialog.textApplyText": "Aplicar a mesura que s'escriu", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Correcció Automàtica", + "Common.Views.AutoCorrectDialog.textAutoFormat": "Format automàtic a mesura que s'escriu", + "Common.Views.AutoCorrectDialog.textBulleted": "Llistes de vinyetes automàtiques", "Common.Views.AutoCorrectDialog.textBy": "Per", "Common.Views.AutoCorrectDialog.textDelete": "Esborrar", + "Common.Views.AutoCorrectDialog.textFLSentence": "Posa en majúscules la primera lletra de les frases", + "Common.Views.AutoCorrectDialog.textHyphens": "Guions (--) amb guió (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Correcció Automàtica Matemàtica", + "Common.Views.AutoCorrectDialog.textNumbered": "Llistes numerades automàtiques", + "Common.Views.AutoCorrectDialog.textQuotes": "\"Cometes rectes\" amb \"cometes tipogràfiques\"", "Common.Views.AutoCorrectDialog.textRecognized": "Funcions Reconegudes", "Common.Views.AutoCorrectDialog.textRecognizedDesc": "Les expressions següents són expressions matemàtiques reconegudes. No es posaran en cursiva automàticament.", "Common.Views.AutoCorrectDialog.textReplace": "Substitueix", + "Common.Views.AutoCorrectDialog.textReplaceText": "Substitueix mentre s'escriu", "Common.Views.AutoCorrectDialog.textReplaceType": "Substituïu el text mentre escriviu", "Common.Views.AutoCorrectDialog.textReset": "Restablir", "Common.Views.AutoCorrectDialog.textResetAll": "Restableix a valor predeterminat", @@ -92,8 +140,8 @@ "Common.Views.Comments.textResolve": "Resol", "Common.Views.Comments.textResolved": "Resolt", "Common.Views.CopyWarningDialog.textDontShow": "No torneu a mostrar aquest missatge", - "Common.Views.CopyWarningDialog.textMsg": "Copiar, tallar i enganxar accions mitjançant els botons de la barra d’eines de l’editor i les accions del menú contextual només es realitzaran dins d’aquesta pestanya editor.

    Per copiar o enganxar a o des d’aplicacions fora de la pestanya editor, utilitzeu les combinacions de teclat següents:", - "Common.Views.CopyWarningDialog.textTitle": "Accions de Copiar, Tallar i Pegar ", + "Common.Views.CopyWarningDialog.textMsg": "Les accions Copia, retalla i enganxa utilitzant els botons de la barra d'eines de l'editor i les accions del menú contextual només es realitzaran dins d'aquesta pestanya de l'editor.

    Per copiar o enganxar a o des de les aplicacions fora de la pestanya de l'editor, utilitzeu les següents combinacions de teclat:", + "Common.Views.CopyWarningDialog.textTitle": "Accions de Copiar, Tallar i Enganxar ", "Common.Views.CopyWarningDialog.textToCopy": "Per Copiar", "Common.Views.CopyWarningDialog.textToCut": "Per Tallar", "Common.Views.CopyWarningDialog.textToPaste": "Per Pegar", @@ -101,13 +149,16 @@ "Common.Views.DocumentAccessDialog.textTitle": "Configuració per Compartir", "Common.Views.ExternalDiagramEditor.textClose": "Tancar", "Common.Views.ExternalDiagramEditor.textSave": "Desar i Sortir", - "Common.Views.ExternalDiagramEditor.textTitle": "Editor del Gràfic", + "Common.Views.ExternalDiagramEditor.textTitle": "Editor de Gràfics", "Common.Views.Header.labelCoUsersDescr": "Usuaris que editen el fitxer:", + "Common.Views.Header.textAddFavorite": "Marcar com a favorit", "Common.Views.Header.textAdvSettings": "Configuració avançada", "Common.Views.Header.textBack": "Obrir ubicació del arxiu", "Common.Views.Header.textCompactView": "Amagar la Barra d'Eines", "Common.Views.Header.textHideLines": "Amagar Regles", + "Common.Views.Header.textHideNotes": "Ocultar notes", "Common.Views.Header.textHideStatusBar": "Amagar la Barra d'Estat", + "Common.Views.Header.textRemoveFavorite": "Elimina dels Favorits", "Common.Views.Header.textSaveBegin": "Desant...", "Common.Views.Header.textSaveChanged": "Modificat", "Common.Views.Header.textSaveEnd": "Tots els canvis guardats", @@ -136,7 +187,7 @@ "Common.Views.InsertTableDialog.txtTitle": "Mida Taula", "Common.Views.InsertTableDialog.txtTitleSplit": "Dividir Cel·la", "Common.Views.LanguageDialog.labelSelect": "Seleccionar l'idioma de document", - "Common.Views.ListSettingsDialog.textBulleted": "Llista encuadrada", + "Common.Views.ListSettingsDialog.textBulleted": "Amb vinyetes", "Common.Views.ListSettingsDialog.textNumbering": "Numerats", "Common.Views.ListSettingsDialog.tipChange": "Canviar vinyeta", "Common.Views.ListSettingsDialog.txtBullet": "Vinyeta", @@ -149,13 +200,13 @@ "Common.Views.ListSettingsDialog.txtSymbol": "Símbol", "Common.Views.ListSettingsDialog.txtTitle": "Configuració de la Llista", "Common.Views.ListSettingsDialog.txtType": "Tipus", - "Common.Views.OpenDialog.closeButtonText": "Tancar Arxiu", + "Common.Views.OpenDialog.closeButtonText": "Tancar Fitxer", "Common.Views.OpenDialog.txtEncoding": "Codificació", "Common.Views.OpenDialog.txtIncorrectPwd": "La contrasenya es incorrecta.", "Common.Views.OpenDialog.txtOpenFile": "Introduïu una contrasenya per obrir el fitxer", "Common.Views.OpenDialog.txtPassword": "Contrasenya", "Common.Views.OpenDialog.txtProtected": "Un cop hàgiu introduït la contrasenya i obert el fitxer, es restablirà la contrasenya actual del fitxer.", - "Common.Views.OpenDialog.txtTitle": "Tria %1 opció", + "Common.Views.OpenDialog.txtTitle": "Tria opcions %1", "Common.Views.OpenDialog.txtTitleProtected": "Arxiu Protegit", "Common.Views.PasswordDialog.txtDescription": "Establir una contrasenya per protegir el document", "Common.Views.PasswordDialog.txtIncorrectPwd": "La contrasenya de confirmació no és idèntica", @@ -170,7 +221,7 @@ "Common.Views.Plugins.textStart": "Comença", "Common.Views.Plugins.textStop": "Parar", "Common.Views.Protection.hintAddPwd": "Xifrar amb contrasenya", - "Common.Views.Protection.hintPwd": "Canviar o Esborrar Contrasenya", + "Common.Views.Protection.hintPwd": "Canviar o Suprimir Contrasenya", "Common.Views.Protection.hintSignature": "Afegir signatura digital o línia de signatura", "Common.Views.Protection.txtAddPwd": "Afegir contrasenya", "Common.Views.Protection.txtChangePwd": "Canviar la contrasenya", @@ -191,6 +242,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Configura el mode de coedició", "Common.Views.ReviewChanges.tipCommentRem": "Esborrar comentaris", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Esborrar comentaris actuals", + "Common.Views.ReviewChanges.tipCommentResolve": "Resoldre els comentaris", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Resol els comentaris actuals", "Common.Views.ReviewChanges.tipHistory": "Mostra l'historial de versions", "Common.Views.ReviewChanges.tipRejectCurrent": "Rebutjar canvi actual", "Common.Views.ReviewChanges.tipReview": "Control de Canvis", @@ -202,7 +255,7 @@ "Common.Views.ReviewChanges.txtAcceptAll": "Acceptar Tots els Canvis", "Common.Views.ReviewChanges.txtAcceptChanges": "Acceptar canvis", "Common.Views.ReviewChanges.txtAcceptCurrent": "Acceptar el Canvi Actual", - "Common.Views.ReviewChanges.txtChat": "Chat", + "Common.Views.ReviewChanges.txtChat": "Xat", "Common.Views.ReviewChanges.txtClose": "Tancar", "Common.Views.ReviewChanges.txtCoAuthMode": "Mode de Coedició", "Common.Views.ReviewChanges.txtCommentRemAll": "Esborrar tots els comentaris", @@ -210,6 +263,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Esborrar els meus comentaris", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Esborrar els meus actuals comentaris", "Common.Views.ReviewChanges.txtCommentRemove": "Esborrar", + "Common.Views.ReviewChanges.txtCommentResolve": "Resoldre", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Resoldre tots els comentaris", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Resoldre els comentaris actuals", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Resoldre els Meus Comentaris", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Resoldre els Meus Comentaris Actuals", "Common.Views.ReviewChanges.txtDocLang": "Idioma", "Common.Views.ReviewChanges.txtFinal": "Tots el canvis acceptats (Previsualitzar)", "Common.Views.ReviewChanges.txtFinalCap": "Final", @@ -229,7 +287,7 @@ "Common.Views.ReviewChanges.txtTurnon": "Control de Canvis", "Common.Views.ReviewChanges.txtView": "Mode de visualització", "Common.Views.ReviewPopover.textAdd": "Afegir", - "Common.Views.ReviewPopover.textAddReply": "Afegir una Resposta", + "Common.Views.ReviewPopover.textAddReply": "Afegir Resposta", "Common.Views.ReviewPopover.textCancel": "Cancel·lar", "Common.Views.ReviewPopover.textClose": "Tancar", "Common.Views.ReviewPopover.textEdit": "Acceptar", @@ -247,6 +305,7 @@ "Common.Views.SignDialog.textChange": "Canviar", "Common.Views.SignDialog.textInputName": "Posar nom de qui ho firma", "Common.Views.SignDialog.textItalic": "Itàlica", + "Common.Views.SignDialog.textNameError": "El nom del signant no pot estar buit.", "Common.Views.SignDialog.textPurpose": "Finalitat de signar aquest document", "Common.Views.SignDialog.textSelect": "Seleccionar", "Common.Views.SignDialog.textSelectImage": "Seleccionar Imatge", @@ -267,8 +326,8 @@ "Common.Views.SignSettingsDialog.txtEmpty": "Aquest camp és obligatori", "Common.Views.SymbolTableDialog.textCharacter": "Caràcter", "Common.Views.SymbolTableDialog.textCode": "Valor HEX Unicode", - "Common.Views.SymbolTableDialog.textCopyright": "Signatura de Propietat Intel·lectual", - "Common.Views.SymbolTableDialog.textDCQuote": "Tancar Doble Pressupost", + "Common.Views.SymbolTableDialog.textCopyright": "Signe de copyright", + "Common.Views.SymbolTableDialog.textDCQuote": "S'està tancant una doble cita", "Common.Views.SymbolTableDialog.textDOQuote": "Obertura de Cotització Doble", "Common.Views.SymbolTableDialog.textEllipsis": "El·lipsi horitzontal", "Common.Views.SymbolTableDialog.textEmDash": "EM Dash", @@ -283,7 +342,7 @@ "Common.Views.SymbolTableDialog.textRange": "Rang", "Common.Views.SymbolTableDialog.textRecent": "Símbols utilitzats recentment", "Common.Views.SymbolTableDialog.textRegistered": "Registre Registrat", - "Common.Views.SymbolTableDialog.textSCQuote": "Tancar Simple Pressupost", + "Common.Views.SymbolTableDialog.textSCQuote": "S'està tancant una única cita", "Common.Views.SymbolTableDialog.textSection": "Signe de Secció", "Common.Views.SymbolTableDialog.textShortcut": "Tecla de Drecera", "Common.Views.SymbolTableDialog.textSHyphen": "Guionet Suau", @@ -292,16 +351,21 @@ "Common.Views.SymbolTableDialog.textSymbols": "Símbols", "Common.Views.SymbolTableDialog.textTitle": "Símbol", "Common.Views.SymbolTableDialog.textTradeMark": "Símbol de Marca Comercial", + "Common.Views.UserNameDialog.textDontShow": "No em tornis a preguntar", + "Common.Views.UserNameDialog.textLabel": "Etiqueta:", + "Common.Views.UserNameDialog.textLabelError": "L'etiqueta no pot estar en blanc.", + "PE.Controllers.LeftMenu.leavePageText": "Es perdran tots els canvis no guardats en aquest document.
    Feu clic a \"Cancel·lar\" i, a continuació, \"Desa\" per desar-los. Feu clic a \"OK\" per descartar tots els canvis no desats.", "PE.Controllers.LeftMenu.newDocumentTitle": "Presentació sense nom", "PE.Controllers.LeftMenu.notcriticalErrorTitle": "Avis", "PE.Controllers.LeftMenu.requestEditRightsText": "Sol·licitant drets d’edició ...", + "PE.Controllers.LeftMenu.textLoadHistory": "Carregant historial de versions...", "PE.Controllers.LeftMenu.textNoTextFound": "No s'han trobat les dades que heu cercat. Ajusteu les opcions de cerca.", "PE.Controllers.LeftMenu.textReplaceSkipped": "La substitució s’ha realitzat. Es van saltar {0} ocurrències.", "PE.Controllers.LeftMenu.textReplaceSuccess": "La recerca s’ha fet. Es van substituir les coincidències: {0}", "PE.Controllers.LeftMenu.txtUntitled": "Sense títol", "PE.Controllers.Main.applyChangesTextText": "Carregant dades...", "PE.Controllers.Main.applyChangesTitleText": "Carregant Dades", - "PE.Controllers.Main.convertationTimeoutText": "Conversió fora de temps", + "PE.Controllers.Main.convertationTimeoutText": "S'ha superat el temps de conversió.", "PE.Controllers.Main.criticalErrorExtText": "Prem \"Acceptar\" per tornar al document.", "PE.Controllers.Main.criticalErrorTitle": "Error", "PE.Controllers.Main.downloadErrorText": "Descàrrega fallida.", @@ -310,6 +374,7 @@ "PE.Controllers.Main.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", "PE.Controllers.Main.errorBadImageUrl": "Enllaç de la Imatge Incorrecte", "PE.Controllers.Main.errorCoAuthoringDisconnect": "S'ha perdut la connexió amb el servidor. El document no es pot editar ara mateix.", + "PE.Controllers.Main.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", "PE.Controllers.Main.errorConnectToServer": "El document no s'ha pogut desar. Comproveu la configuració de la connexió o poseu-vos en contacte amb l'administrador.
    Quan feu clic al botó \"D'acord\", se us demanarà que descarregueu el document.", "PE.Controllers.Main.errorDatabaseConnection": "Error extern.
    Error de connexió de base de dades. Contacteu amb l'assistència en cas que l'error continuï.", "PE.Controllers.Main.errorDataEncrypted": "S'han rebut canvis xifrats, que no es poden desxifrar.", @@ -328,6 +393,7 @@ "PE.Controllers.Main.errorSessionAbsolute": "La sessió d’edició del document ha caducat. Torneu a carregar la pàgina.", "PE.Controllers.Main.errorSessionIdle": "El document no s’ha editat des de fa temps. Torneu a carregar la pàgina.", "PE.Controllers.Main.errorSessionToken": "S'ha interromput la connexió amb el servidor. Torneu a carregar la pàgina.", + "PE.Controllers.Main.errorSetPassword": "No s'ha pogut establir la contrasenya.", "PE.Controllers.Main.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", "PE.Controllers.Main.errorToken": "El testimoni de seguretat del document no està format correctament.
    Contacteu l'administrador del servidor de documents.", "PE.Controllers.Main.errorTokenExpire": "El testimoni de seguretat del document ha caducat.
    Contacteu amb l'administrador del Document Server.", @@ -335,8 +401,9 @@ "PE.Controllers.Main.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "PE.Controllers.Main.errorUserDrop": "Ara no es pot accedir al fitxer.", "PE.Controllers.Main.errorUsersExceed": "S'ha superat el nombre d’usuaris permès pel pla de preus", - "PE.Controllers.Main.errorViewerDisconnect": "Es perd la connexió. Encara podeu visualitzar el document,
    però no podreu descarregar-lo ni imprimir-lo fins que no es restableixi la connexió i es torni a carregar la pàgina.", + "PE.Controllers.Main.errorViewerDisconnect": "S'ha perdut la connexió. Encara podeu visualitzar el document,
    però no podreu descarregar-lo ni imprimir-lo fins que no es restableixi la connexió i es torni a re-carregar la pàgina.", "PE.Controllers.Main.leavePageText": "Heu fet canvis no desats en aquesta presentació. Feu clic a \"Continua en aquesta pàgina\" i, a continuació, \"Desa\" per desar-les. Feu clic a \"Deixa aquesta pàgina\" per descartar tots els canvis no desats.", + "PE.Controllers.Main.leavePageTextOnClose": "Es perdran tots els canvis no desats en aquesta presentació.
    Feu clic a «Cancel·la» i després a «Desa» per desar-los. Feu clic a \"D'acord\" per descartar tots els canvis no desats.", "PE.Controllers.Main.loadFontsTextText": "Carregant dades...", "PE.Controllers.Main.loadFontsTitleText": "Carregant Dades", "PE.Controllers.Main.loadFontTextText": "Carregant dades...", @@ -359,6 +426,7 @@ "PE.Controllers.Main.requestEditFailedMessageText": "Algú està editant aquesta presentació ara mateix. Si us plau, intenta-ho més tard.", "PE.Controllers.Main.requestEditFailedTitleText": "Accés denegat", "PE.Controllers.Main.saveErrorText": "S'ha produït un error en desar el fitxer.", + "PE.Controllers.Main.saveErrorTextDesktop": "Aquest fitxer no es pot desar o crear.
    Les raons possibles són:
    1. El fitxer és de només lectura.
    2. El fitxer està sent editat per altres usuaris.
    3. El disc està ple o corromput.", "PE.Controllers.Main.savePreparingText": "Preparant per guardar", "PE.Controllers.Main.savePreparingTitle": "Preparant per guardar. Si us plau, esperi", "PE.Controllers.Main.saveTextText": "Guardant presentació...", @@ -371,31 +439,37 @@ "PE.Controllers.Main.textBuyNow": "Visita el Lloc Web", "PE.Controllers.Main.textChangesSaved": "Tots els canvis guardats", "PE.Controllers.Main.textClose": "Tancar", - "PE.Controllers.Main.textCloseTip": "Feu clic per tancar", - "PE.Controllers.Main.textContactUs": "Contacte de Vendes", + "PE.Controllers.Main.textCloseTip": "Clicar per tancar el consell", + "PE.Controllers.Main.textContactUs": "Equip de Vendes", "PE.Controllers.Main.textCustomLoader": "Tingueu en compte que, segons els termes de la llicència, no teniu dret a canviar el carregador.
    Consulteu el nostre departament de vendes per obtenir un pressupost.", + "PE.Controllers.Main.textGuest": "Convidat", "PE.Controllers.Main.textHasMacros": "El fitxer conté macros automàtiques.
    Voleu executar macros?", "PE.Controllers.Main.textLoadingDocument": "Carregant presentació", + "PE.Controllers.Main.textLongName": "Introduïu un nom de menys de 128 caràcters.", "PE.Controllers.Main.textNoLicenseTitle": "Heu arribat al límit de la llicència", "PE.Controllers.Main.textPaidFeature": "Funció de pagament", - "PE.Controllers.Main.textRemember": "Recorda la meva elecció", + "PE.Controllers.Main.textRemember": "Recordar la meva elecció per a tots els fitxers", + "PE.Controllers.Main.textRenameError": "El nom d'usuari no pot estar buit.", + "PE.Controllers.Main.textRenameLabel": "Introduïu un nom per a la col·laboració", "PE.Controllers.Main.textShape": "Forma", "PE.Controllers.Main.textStrict": "Mode estricte", "PE.Controllers.Main.textTryUndoRedo": "Les funcions Desfés / Rehabiliteu estan desactivades per al mode de coedició ràpida. Feu clic al botó \"Mode estricte\" per canviar al mode de coedició estricte per editar el fitxer sense que hi hagi interferències d'altres usuaris i enviar els canvis només després de desar-lo ells. Podeu canviar entre els modes de coedició mitjançant l'editor Paràmetres avançats.", + "PE.Controllers.Main.textTryUndoRedoWarn": "Les funcions Desfer/Refer estan desactivades per al mode de coedició ràpida.", "PE.Controllers.Main.titleLicenseExp": "Llicència Caducada", "PE.Controllers.Main.titleServerVersion": "S'ha actualitzat l'editor", - "PE.Controllers.Main.txtAddFirstSlide": "Faci clic per afegir la primera diapositiva", + "PE.Controllers.Main.txtAddFirstSlide": "Cliqui per a afegir la primera diapositiva", "PE.Controllers.Main.txtAddNotes": "Faci clic per afegir notes", "PE.Controllers.Main.txtArt": "El seu text aquí", "PE.Controllers.Main.txtBasicShapes": "Formes Bàsiques", "PE.Controllers.Main.txtButtons": "Botons", - "PE.Controllers.Main.txtCallouts": "Trucades", - "PE.Controllers.Main.txtCharts": "Gràfics", + "PE.Controllers.Main.txtCallouts": "Crides", + "PE.Controllers.Main.txtCharts": "Diagramas", "PE.Controllers.Main.txtClipArt": "Imatges Predissenyades", "PE.Controllers.Main.txtDateTime": "Data i hora", "PE.Controllers.Main.txtDiagram": "Imatge preconfigurada", - "PE.Controllers.Main.txtDiagramTitle": "Títol del Gràfic", + "PE.Controllers.Main.txtDiagramTitle": "Títol del Diagrama", "PE.Controllers.Main.txtEditingMode": "Establir el mode d'edició ...", + "PE.Controllers.Main.txtErrorLoadHistory": "Ha fallat la càrrega de l'historial", "PE.Controllers.Main.txtFiguredArrows": "Fletxes Figurades", "PE.Controllers.Main.txtFooter": "Peu de pàgina", "PE.Controllers.Main.txtHeader": "Capçalera", @@ -405,6 +479,7 @@ "PE.Controllers.Main.txtMath": "Matemàtiques", "PE.Controllers.Main.txtMedia": "Medis", "PE.Controllers.Main.txtNeedSynchronize": "Teniu actualitzacions", + "PE.Controllers.Main.txtNone": "cap", "PE.Controllers.Main.txtPicture": "Imatge", "PE.Controllers.Main.txtRectangles": "Rectangles", "PE.Controllers.Main.txtSeries": "Series", @@ -414,7 +489,7 @@ "PE.Controllers.Main.txtShape_accentCallout1": "Trucada amb línia 1 (barra d'èmfasis)", "PE.Controllers.Main.txtShape_accentCallout2": "Trucada amb línia 2 (barra d'èmfasis)", "PE.Controllers.Main.txtShape_accentCallout3": "Trucada amb línia 3 (barra d'èmfasis)", - "PE.Controllers.Main.txtShape_actionButtonBackPrevious": "Botó Enrere o Anterior", + "PE.Controllers.Main.txtShape_actionButtonBackPrevious": "Enrere o Botó Anterior", "PE.Controllers.Main.txtShape_actionButtonBeginning": "Botó d’Inici", "PE.Controllers.Main.txtShape_actionButtonBlank": "Botó en blanc", "PE.Controllers.Main.txtShape_actionButtonDocument": "Botó de Document", @@ -443,10 +518,10 @@ "PE.Controllers.Main.txtShape_callout3": "Trucada amb línia 3 (sense vora)", "PE.Controllers.Main.txtShape_can": "Cilindre", "PE.Controllers.Main.txtShape_chevron": "Chevron", - "PE.Controllers.Main.txtShape_chord": "Chord", + "PE.Controllers.Main.txtShape_chord": "Acord", "PE.Controllers.Main.txtShape_circularArrow": "Fletxa Circular", "PE.Controllers.Main.txtShape_cloud": "Núvol", - "PE.Controllers.Main.txtShape_cloudCallout": "Trucada de Núvol", + "PE.Controllers.Main.txtShape_cloudCallout": "Crida de Núvol", "PE.Controllers.Main.txtShape_corner": "Cantonada", "PE.Controllers.Main.txtShape_cube": "Cub", "PE.Controllers.Main.txtShape_curvedConnector3": "Connector corbat", @@ -581,7 +656,7 @@ "PE.Controllers.Main.txtShape_wedgeRoundRectCallout": "Llibre rectangular de punt rodó", "PE.Controllers.Main.txtSldLtTBlank": "En blanc", "PE.Controllers.Main.txtSldLtTChart": "Gràfic", - "PE.Controllers.Main.txtSldLtTChartAndTx": "Gràfic i Text", + "PE.Controllers.Main.txtSldLtTChartAndTx": "Gràfic i text", "PE.Controllers.Main.txtSldLtTClipArtAndTx": "Imatge Predissenyada i Tex", "PE.Controllers.Main.txtSldLtTClipArtAndVertTx": "Imatge PreDissenyada i Text Vertical", "PE.Controllers.Main.txtSldLtTCust": "Personalitzat", @@ -648,6 +723,8 @@ "PE.Controllers.Main.warnBrowserZoom": "La configuració del zoom actual del navegador no és totalment compatible. Restabliu el zoom per defecte prement Ctrl+0.", "PE.Controllers.Main.warnLicenseExceeded": "S'ha superat el nombre de connexions simultànies al servidor de documents i el document s'obrirà només per a la seva visualització.
    Contacteu l'administrador per obtenir més informació.", "PE.Controllers.Main.warnLicenseExp": "La seva llicencia ha caducat.
    Si us plau, actualitzi la llicencia i recarregui la pàgina.", + "PE.Controllers.Main.warnLicenseLimitedNoAccess": "La llicència ha caducat.
    No teniu accés a la funcionalitat d'edició de documents.
    Si us plau, contacteu amb l'administrador.", + "PE.Controllers.Main.warnLicenseLimitedRenewed": "Cal renovar la llicència.
    Teniu un accés limitat a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador per obtenir accés complet", "PE.Controllers.Main.warnLicenseUsersExceeded": "S'ha superat el nombre d'usuaris concurrents i el document s'obrirà només per a la seva visualització.
    Per més informació, poseu-vos en contacte amb l'administrador.", "PE.Controllers.Main.warnNoLicense": "Heu arribat al límit de connexions simultànies per als editors %1. Aquest document s'obrirà al mode de només lectura. Contacteu l'equip de vendes %1 per a les condicions personals de millora del servei.", "PE.Controllers.Main.warnNoLicenseUsers": "Heu arribat al límit d'usuaris concurrents per a editors %1.
    Contactau l'equip de vendes per als termes de millora personal dels vostres serveis.", @@ -677,8 +754,8 @@ "PE.Controllers.Toolbar.txtAccent_Bar": "Barra", "PE.Controllers.Toolbar.txtAccent_BarBot": "Barra Subjacent", "PE.Controllers.Toolbar.txtAccent_BarTop": "Barra superposada", - "PE.Controllers.Toolbar.txtAccent_BorderBox": "Fórmula a celda (amb el marcador de posició)", - "PE.Controllers.Toolbar.txtAccent_BorderBoxCustom": "Fórmula a celda (exemple)", + "PE.Controllers.Toolbar.txtAccent_BorderBox": "Fórmula encaixada (amb el marcador de posició)", + "PE.Controllers.Toolbar.txtAccent_BorderBoxCustom": "Fórmula encaixada (exemple)", "PE.Controllers.Toolbar.txtAccent_Check": "Comprovar", "PE.Controllers.Toolbar.txtAccent_CurveBracketBot": "Clau Subjacent", "PE.Controllers.Toolbar.txtAccent_CurveBracketTop": "Clau superposada", @@ -695,15 +772,15 @@ "PE.Controllers.Toolbar.txtAccent_HarpoonL": "Arpon cap a l'esquerra per sobre", "PE.Controllers.Toolbar.txtAccent_HarpoonR": "Arpon superior cap a dreta", "PE.Controllers.Toolbar.txtAccent_Hat": "Circumflex", - "PE.Controllers.Toolbar.txtAccent_Smile": "Accent breu", + "PE.Controllers.Toolbar.txtAccent_Smile": "Breve", "PE.Controllers.Toolbar.txtAccent_Tilde": "Tilde", "PE.Controllers.Toolbar.txtBracket_Angle": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_2": "Claudàtor amb separadors", - "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_3": "Claudàtor amb separadors", + "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_2": "Claudàtors amb separadors", + "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_3": "Claudàtors amb separadors", "PE.Controllers.Toolbar.txtBracket_Angle_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Angle_OpenNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Curve": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Curve_Delimiter_2": "Claudàtor amb separadors", + "PE.Controllers.Toolbar.txtBracket_Curve_Delimiter_2": "Claudàtors amb separadors", "PE.Controllers.Toolbar.txtBracket_Curve_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Curve_OpenNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Custom_1": "Casos (dos condicions)", @@ -716,26 +793,26 @@ "PE.Controllers.Toolbar.txtBracket_Line": "Claudàtor", "PE.Controllers.Toolbar.txtBracket_Line_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Line_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_LineDouble": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_LineDouble": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_LineDouble_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_LineDouble_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_LowLim": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_LowLim": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_LowLim_NoneNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_LowLim_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_Round": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Round_Delimiter_2": "Claudàtor amb separadors", + "PE.Controllers.Toolbar.txtBracket_Round": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_Round_Delimiter_2": "Claudàtors amb separadors", "PE.Controllers.Toolbar.txtBracket_Round_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Round_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_Square": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Square_CloseClose": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Square_CloseOpen": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_Square": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_Square_CloseClose": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_Square_CloseOpen": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_Square_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Square_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_Square_OpenOpen": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_SquareDouble": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_Square_OpenOpen": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_SquareDouble": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_SquareDouble_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_SquareDouble_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_UppLim": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_UppLim": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_UppLim_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_UppLim_OpenNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtFractionDiagonal": "Fracció inclinada", @@ -759,7 +836,7 @@ "PE.Controllers.Toolbar.txtFunction_1_Sinh": "Funció hiperbòlica del seno invers", "PE.Controllers.Toolbar.txtFunction_1_Tan": "Funció de tangent inversa", "PE.Controllers.Toolbar.txtFunction_1_Tanh": "Funció tangent inversa hiperbòlica", - "PE.Controllers.Toolbar.txtFunction_Cos": "Funció cosina", + "PE.Controllers.Toolbar.txtFunction_Cos": "funció cosinus", "PE.Controllers.Toolbar.txtFunction_Cosh": "Funció del cosin hiperbòlic", "PE.Controllers.Toolbar.txtFunction_Cot": "Funció cotangent", "PE.Controllers.Toolbar.txtFunction_Coth": "Funció cotangent hiperbòlic", @@ -782,12 +859,12 @@ "PE.Controllers.Toolbar.txtIntegralDouble": "Doble integral", "PE.Controllers.Toolbar.txtIntegralDoubleCenterSubSup": "Doble integral", "PE.Controllers.Toolbar.txtIntegralDoubleSubSup": "Doble integral", - "PE.Controllers.Toolbar.txtIntegralOriented": "Contorn integral", - "PE.Controllers.Toolbar.txtIntegralOrientedCenterSubSup": "Contorn integral", + "PE.Controllers.Toolbar.txtIntegralOriented": "Integral de contorn", + "PE.Controllers.Toolbar.txtIntegralOrientedCenterSubSup": "Integral de contorn", "PE.Controllers.Toolbar.txtIntegralOrientedDouble": "Integral de superfície", "PE.Controllers.Toolbar.txtIntegralOrientedDoubleCenterSubSup": "Integral de superfície", "PE.Controllers.Toolbar.txtIntegralOrientedDoubleSubSup": "Integral de superfície", - "PE.Controllers.Toolbar.txtIntegralOrientedSubSup": "Contorn integral", + "PE.Controllers.Toolbar.txtIntegralOrientedSubSup": "Integral de contorn", "PE.Controllers.Toolbar.txtIntegralOrientedTriple": "Volum integral", "PE.Controllers.Toolbar.txtIntegralOrientedTripleCenterSubSup": "Volum integral", "PE.Controllers.Toolbar.txtIntegralOrientedTripleSubSup": "Volum integral", @@ -800,11 +877,11 @@ "PE.Controllers.Toolbar.txtLargeOperator_Conjunction_CenterSubSup": "Falca", "PE.Controllers.Toolbar.txtLargeOperator_Conjunction_Sub": "Falca", "PE.Controllers.Toolbar.txtLargeOperator_Conjunction_SubSup": "Falca", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSub": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSubSup": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_Sub": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_SubSup": "Coproducte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSub": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSubSup": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_Sub": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_SubSup": "Co-producte", "PE.Controllers.Toolbar.txtLargeOperator_Custom_1": "Suma", "PE.Controllers.Toolbar.txtLargeOperator_Custom_2": "Suma", "PE.Controllers.Toolbar.txtLargeOperator_Custom_3": "Suma", @@ -855,7 +932,7 @@ "PE.Controllers.Toolbar.txtMatrix_3_1": "3x1 matriu buida", "PE.Controllers.Toolbar.txtMatrix_3_2": "3x2 matriu buida", "PE.Controllers.Toolbar.txtMatrix_3_3": "3s3 matriu buida", - "PE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts Subíndexs", + "PE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts de línia base", "PE.Controllers.Toolbar.txtMatrix_Dots_Center": "Punts en línia mitja", "PE.Controllers.Toolbar.txtMatrix_Dots_Diagonal": "Punts en diagonal", "PE.Controllers.Toolbar.txtMatrix_Dots_Vertical": "Punts Verticals", @@ -907,10 +984,10 @@ "PE.Controllers.Toolbar.txtSymbol_approx": "Gairebé igual a", "PE.Controllers.Toolbar.txtSymbol_ast": "Operador asterisc", "PE.Controllers.Toolbar.txtSymbol_beta": "Beta", - "PE.Controllers.Toolbar.txtSymbol_beth": "Bet", + "PE.Controllers.Toolbar.txtSymbol_beth": "Aposta", "PE.Controllers.Toolbar.txtSymbol_bullet": "Operador de Vinyeta", "PE.Controllers.Toolbar.txtSymbol_cap": "Intersecció", - "PE.Controllers.Toolbar.txtSymbol_cbrt": "Arrel de Cub", + "PE.Controllers.Toolbar.txtSymbol_cbrt": "Arrel cúbica", "PE.Controllers.Toolbar.txtSymbol_cdots": "El·lipsis horitzontal de línia mitja", "PE.Controllers.Toolbar.txtSymbol_celsius": "Graus Celsius", "PE.Controllers.Toolbar.txtSymbol_chi": "Chi", @@ -980,7 +1057,7 @@ "PE.Controllers.Toolbar.txtSymbol_varepsilon": "Variant d’èpsilon", "PE.Controllers.Toolbar.txtSymbol_varphi": "Variant Pi", "PE.Controllers.Toolbar.txtSymbol_varpi": "Variant Pi", - "PE.Controllers.Toolbar.txtSymbol_varrho": "Variant Ro", + "PE.Controllers.Toolbar.txtSymbol_varrho": "Variant Rho", "PE.Controllers.Toolbar.txtSymbol_varsigma": "Variant Sigma", "PE.Controllers.Toolbar.txtSymbol_vartheta": "Variant Zeta", "PE.Controllers.Toolbar.txtSymbol_vdots": "El·lipsis Vertical", @@ -989,7 +1066,7 @@ "PE.Controllers.Viewport.textFitPage": "Ajustar a la diapositiva", "PE.Controllers.Viewport.textFitWidth": "Ajusta a Amplada", "PE.Views.ChartSettings.textAdvanced": "Mostra la configuració avançada", - "PE.Views.ChartSettings.textChartType": "Canvia el tipus de gràfic", + "PE.Views.ChartSettings.textChartType": "Canviar el tipus de gràfic", "PE.Views.ChartSettings.textEditData": "Editar Dades", "PE.Views.ChartSettings.textHeight": "Alçada", "PE.Views.ChartSettings.textKeepRatio": "Proporcions Constants", @@ -1000,7 +1077,7 @@ "PE.Views.ChartSettingsAdvanced.textAltDescription": "Descripció", "PE.Views.ChartSettingsAdvanced.textAltTip": "La representació alternativa basada en text de la informació d’objectes visuals, que es llegirà a les persones amb deficiències de visió o cognitives per ajudar-les a comprendre millor quina informació hi ha a la imatge, autoforma, gràfic o taula.", "PE.Views.ChartSettingsAdvanced.textAltTitle": "Títol", - "PE.Views.ChartSettingsAdvanced.textTitle": "Gràfic-Configuració Avançada", + "PE.Views.ChartSettingsAdvanced.textTitle": "Diagrama - Configuració avançada", "PE.Views.DateTimeDialog.confirmDefault": "Definiu el format predeterminat per a {0}:\"{1}\"", "PE.Views.DateTimeDialog.textDefault": "Establir com a defecte", "PE.Views.DateTimeDialog.textFormat": "Formats", @@ -1011,12 +1088,12 @@ "PE.Views.DocumentHolder.addCommentText": "Afegir comentari", "PE.Views.DocumentHolder.addToLayoutText": "Afegir a la Maquetació", "PE.Views.DocumentHolder.advancedImageText": "Imatge Configuració Avançada", - "PE.Views.DocumentHolder.advancedParagraphText": "Configuració Avançada de Text", + "PE.Views.DocumentHolder.advancedParagraphText": "Configuració Avançada del Paràgraf", "PE.Views.DocumentHolder.advancedShapeText": "Forma Configuració Avançada", "PE.Views.DocumentHolder.advancedTableText": "Taula Configuració Avançada", "PE.Views.DocumentHolder.alignmentText": "Alineació", "PE.Views.DocumentHolder.belowText": "Abaix", - "PE.Views.DocumentHolder.cellAlignText": "Alineament Vertical Cel·la", + "PE.Views.DocumentHolder.cellAlignText": "Alineament Vertical de Cel·la", "PE.Views.DocumentHolder.cellText": "Cel·la", "PE.Views.DocumentHolder.centerText": "Centre", "PE.Views.DocumentHolder.columnText": "Columna", @@ -1059,7 +1136,7 @@ "PE.Views.DocumentHolder.textArrangeBack": "Enviar a un segon pla", "PE.Views.DocumentHolder.textArrangeBackward": "Envia Endarrere", "PE.Views.DocumentHolder.textArrangeForward": "Portar Endavant", - "PE.Views.DocumentHolder.textArrangeFront": "Porta a Primer pla", + "PE.Views.DocumentHolder.textArrangeFront": "Portar a Primer pla", "PE.Views.DocumentHolder.textCopy": "Copiar", "PE.Views.DocumentHolder.textCrop": "Retallar", "PE.Views.DocumentHolder.textCropFill": "Omplir", @@ -1081,10 +1158,10 @@ "PE.Views.DocumentHolder.textRotate90": "Girar 90° a la dreta", "PE.Views.DocumentHolder.textShapeAlignBottom": "Alineació Inferior", "PE.Views.DocumentHolder.textShapeAlignCenter": "Centrar", - "PE.Views.DocumentHolder.textShapeAlignLeft": "Alinear Esquerra", + "PE.Views.DocumentHolder.textShapeAlignLeft": "Alineació esquerra", "PE.Views.DocumentHolder.textShapeAlignMiddle": "Alinear al Mig", - "PE.Views.DocumentHolder.textShapeAlignRight": "Alinear Dreta", - "PE.Views.DocumentHolder.textShapeAlignTop": "Alinear Superior", + "PE.Views.DocumentHolder.textShapeAlignRight": "Alineació dreta", + "PE.Views.DocumentHolder.textShapeAlignTop": "Alineació superior", "PE.Views.DocumentHolder.textSlideSettings": "Configuració de la Diapositiva", "PE.Views.DocumentHolder.textUndo": "Desfer", "PE.Views.DocumentHolder.tipIsLocked": "Actualment, un altre usuari està editant aquest element.", @@ -1119,12 +1196,12 @@ "PE.Views.DocumentHolder.txtDistribHor": "Distribuïu Horitzontalment", "PE.Views.DocumentHolder.txtDistribVert": "Distribuïu Verticalment", "PE.Views.DocumentHolder.txtDuplicateSlide": "Duplicar Diapositiva", - "PE.Views.DocumentHolder.txtFractionLinear": "Canvia a fracció lineal", - "PE.Views.DocumentHolder.txtFractionSkewed": "Canviar a la fracció inclinada", + "PE.Views.DocumentHolder.txtFractionLinear": "Canviar a fracció lineal", + "PE.Views.DocumentHolder.txtFractionSkewed": "Canviar a fracció inclinada", "PE.Views.DocumentHolder.txtFractionStacked": "Canvia a fracció apilada", "PE.Views.DocumentHolder.txtGroup": "Agrupar", - "PE.Views.DocumentHolder.txtGroupCharOver": "Carrega el text", - "PE.Views.DocumentHolder.txtGroupCharUnder": "Línia sota el tex", + "PE.Views.DocumentHolder.txtGroupCharOver": "Caràcter sobre el text", + "PE.Views.DocumentHolder.txtGroupCharUnder": "Caràcter sota el text", "PE.Views.DocumentHolder.txtHideBottom": "Amagar vora del botó", "PE.Views.DocumentHolder.txtHideBottomLimit": "Amagar límit del botó", "PE.Views.DocumentHolder.txtHideCloseBracket": "Amagar el claudàtor del tancament", @@ -1146,7 +1223,7 @@ "PE.Views.DocumentHolder.txtInsertEqAfter": "Inserir equació després de", "PE.Views.DocumentHolder.txtInsertEqBefore": "Inserir equació abans de", "PE.Views.DocumentHolder.txtKeepTextOnly": "Mantenir sols text", - "PE.Views.DocumentHolder.txtLimitChange": "Canviar els límits de la ubicació", + "PE.Views.DocumentHolder.txtLimitChange": "Canviar límits d'ubicació", "PE.Views.DocumentHolder.txtLimitOver": "Límit damunt del text", "PE.Views.DocumentHolder.txtLimitUnder": "Límit sota el text", "PE.Views.DocumentHolder.txtMatchBrackets": "Relaciona els claudàtors amb l'alçada de l'argument", @@ -1202,12 +1279,13 @@ "PE.Views.FileMenu.btnCreateNewCaption": "Crear Nou", "PE.Views.FileMenu.btnDownloadCaption": "Descarregar com a...", "PE.Views.FileMenu.btnHelpCaption": "Ajuda...", + "PE.Views.FileMenu.btnHistoryCaption": "Historial de versions", "PE.Views.FileMenu.btnInfoCaption": "Info sobre Presentació...", "PE.Views.FileMenu.btnPrintCaption": "Imprimir", "PE.Views.FileMenu.btnProtectCaption": "Protegir", "PE.Views.FileMenu.btnRecentFilesCaption": "Obrir recent...", "PE.Views.FileMenu.btnRenameCaption": "Canvia el nom ...", - "PE.Views.FileMenu.btnReturnCaption": "Anar a la Presentació", + "PE.Views.FileMenu.btnReturnCaption": "Tornar a la presentació", "PE.Views.FileMenu.btnRightsCaption": "Drets d'Accés ...", "PE.Views.FileMenu.btnSaveAsCaption": "Desar com", "PE.Views.FileMenu.btnSaveCaption": "Desar", @@ -1216,7 +1294,7 @@ "PE.Views.FileMenu.btnToEditCaption": "Editar Presentació", "PE.Views.FileMenuPanels.CreateNew.fromBlankText": "De Document en Blanc", "PE.Views.FileMenuPanels.CreateNew.fromTemplateText": "Des d'una Plantilla", - "PE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Creeu una presentació en blanc nova que podreu dissenyar i formatar un cop creada durant l’edició. O bé trieu una de les plantilles per iniciar una presentació d’un determinat tipus o propòsit on ja s’han pre-aplicat alguns estils.", + "PE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Creeu una presentació en blanc nova que podreu estilar i formatar després que es creï durant l'edició. O trieu una de les plantilles per iniciar una presentació d'un cert tipus o propòsit on alguns estils ja s'han aplicat prèviament.", "PE.Views.FileMenuPanels.CreateNew.newDocumentText": "Nova Presentació", "PE.Views.FileMenuPanels.CreateNew.noTemplatesText": "No hi ha plantilles", "PE.Views.FileMenuPanels.DocumentInfo.okButtonText": "Aplicar", @@ -1226,7 +1304,7 @@ "PE.Views.FileMenuPanels.DocumentInfo.txtAuthor": "Autor", "PE.Views.FileMenuPanels.DocumentInfo.txtBtnAccessRights": "Canviar els drets d’accés", "PE.Views.FileMenuPanels.DocumentInfo.txtComment": "Comentari", - "PE.Views.FileMenuPanels.DocumentInfo.txtCreated": "Creació", + "PE.Views.FileMenuPanels.DocumentInfo.txtCreated": "Creat", "PE.Views.FileMenuPanels.DocumentInfo.txtModifyBy": "Última Modificació Per", "PE.Views.FileMenuPanels.DocumentInfo.txtModifyDate": "Última Modificació", "PE.Views.FileMenuPanels.DocumentInfo.txtOwner": "Propietari", @@ -1256,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Haureu d’acceptar canvis abans de poder-los veure", "PE.Views.FileMenuPanels.Settings.strFast": "Ràpid", "PE.Views.FileMenuPanels.Settings.strFontRender": "Font Suggerida", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Deseu sempre al servidor (en cas contrari, deseu-lo al servidor quan el tanqueu)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Afegeix una versió a l'emmagatzematge després de fer clic a Desa o Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Activar els jeroglífics", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Configuració de Macros", "PE.Views.FileMenuPanels.Settings.strPaste": "Tallar, copiar i enganxar", @@ -1264,6 +1342,7 @@ "PE.Views.FileMenuPanels.Settings.strShowChanges": "Canvis de Col·laboració en temps real", "PE.Views.FileMenuPanels.Settings.strSpellCheckMode": "Activar l’opció de correcció ortogràfica", "PE.Views.FileMenuPanels.Settings.strStrict": "Estricte", + "PE.Views.FileMenuPanels.Settings.strTheme": "Tema de la interfície", "PE.Views.FileMenuPanels.Settings.strUnit": "Unitat de Mesura", "PE.Views.FileMenuPanels.Settings.strZoom": "Valor de Zoom Predeterminat", "PE.Views.FileMenuPanels.Settings.text10Minutes": "Cada 10 minuts", @@ -1271,10 +1350,10 @@ "PE.Views.FileMenuPanels.Settings.text5Minutes": "Cada 5 minuts", "PE.Views.FileMenuPanels.Settings.text60Minutes": "Cada Hora", "PE.Views.FileMenuPanels.Settings.textAlignGuides": "Guies d'Alineació", - "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Auto recuperació", + "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Recuperació automàtica", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Guardar Automàticament", "PE.Views.FileMenuPanels.Settings.textDisabled": "Desactivat", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Desar al Servidor", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Desant versions intermèdies", "PE.Views.FileMenuPanels.Settings.textMinute": "Cada Minut", "PE.Views.FileMenuPanels.Settings.txtAll": "Veure Tot", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Opcions de Correcció Automàtica ...", @@ -1285,7 +1364,7 @@ "PE.Views.FileMenuPanels.Settings.txtInch": "Polzada", "PE.Views.FileMenuPanels.Settings.txtInput": "Entrada Alternativa", "PE.Views.FileMenuPanels.Settings.txtLast": "Veure Últims", - "PE.Views.FileMenuPanels.Settings.txtMac": "a OS X", + "PE.Views.FileMenuPanels.Settings.txtMac": "com a OS X", "PE.Views.FileMenuPanels.Settings.txtNative": "Natiu", "PE.Views.FileMenuPanels.Settings.txtProofing": "Prova", "PE.Views.FileMenuPanels.Settings.txtPt": "Punt", @@ -1296,8 +1375,8 @@ "PE.Views.FileMenuPanels.Settings.txtStopMacrosDesc": "Desactiveu totes les macros sense una notificació", "PE.Views.FileMenuPanels.Settings.txtWarnMacros": "Mostra la Notificació", "PE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Desactiveu totes les macros amb una notificació", - "PE.Views.FileMenuPanels.Settings.txtWin": "a Windows", - "PE.Views.HeaderFooterDialog.applyAllText": "Aplicar-se a tot", + "PE.Views.FileMenuPanels.Settings.txtWin": "com a Windows", + "PE.Views.HeaderFooterDialog.applyAllText": "Aplicar a tot", "PE.Views.HeaderFooterDialog.applyText": "Aplicar", "PE.Views.HeaderFooterDialog.diffLanguage": "No podeu utilitzar un format de data en un idioma diferent al mestre de diapositives.
    Per canviar el màster, feu clic a \"Aplica a tot\" en comptes de \"Aplicar\"", "PE.Views.HeaderFooterDialog.notcriticalErrorTitle": "Avis", @@ -1328,6 +1407,7 @@ "PE.Views.HyperlinkSettingsDialog.txtNext": "Següent Diapositiva", "PE.Views.HyperlinkSettingsDialog.txtNotUrl": "Aquest camp hauria de ser una URL en el format \"http://www.example.com\"", "PE.Views.HyperlinkSettingsDialog.txtPrev": "Diapositiva Anterior", + "PE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Aquest camp està limitat a 2083 caràcters", "PE.Views.HyperlinkSettingsDialog.txtSlide": "Diapositiva", "PE.Views.ImageSettings.textAdvanced": "Mostra la configuració avançada", "PE.Views.ImageSettings.textCrop": "Retallar", @@ -1369,7 +1449,7 @@ "PE.Views.ImageSettingsAdvanced.textVertically": "Verticalment", "PE.Views.ImageSettingsAdvanced.textWidth": "Amplada", "PE.Views.LeftMenu.tipAbout": "Sobre", - "PE.Views.LeftMenu.tipChat": "Chat", + "PE.Views.LeftMenu.tipChat": "Xat", "PE.Views.LeftMenu.tipComments": "Comentaris", "PE.Views.LeftMenu.tipPlugins": "Connectors", "PE.Views.LeftMenu.tipSearch": "Cerca", @@ -1377,19 +1457,21 @@ "PE.Views.LeftMenu.tipSupport": "Opinió & Suport", "PE.Views.LeftMenu.tipTitles": "Títols", "PE.Views.LeftMenu.txtDeveloper": "MODALITAT DE DESENVOLUPADOR", + "PE.Views.LeftMenu.txtLimit": "Limitar l'accés", "PE.Views.LeftMenu.txtTrial": "ESTAT DE PROVA", + "PE.Views.LeftMenu.txtTrialDev": "Mode de desenvolupador de prova", "PE.Views.ParagraphSettings.strLineHeight": "Espai entre Línies", "PE.Views.ParagraphSettings.strParagraphSpacing": "Espaiat de Paràgraf", "PE.Views.ParagraphSettings.strSpacingAfter": "Després", "PE.Views.ParagraphSettings.strSpacingBefore": "Abans", "PE.Views.ParagraphSettings.textAdvanced": "Mostra la configuració avançada", - "PE.Views.ParagraphSettings.textAt": "a", + "PE.Views.ParagraphSettings.textAt": "A", "PE.Views.ParagraphSettings.textAtLeast": "Al menys", "PE.Views.ParagraphSettings.textAuto": "Múltiples", "PE.Views.ParagraphSettings.textExact": "Exacte", - "PE.Views.ParagraphSettings.txtAutoText": "Auto", + "PE.Views.ParagraphSettings.txtAutoText": "Automàtic", "PE.Views.ParagraphSettingsAdvanced.noTabs": "Les pestanyes especificades apareixeran en aquest camp", - "PE.Views.ParagraphSettingsAdvanced.strAllCaps": "Majúscules ", + "PE.Views.ParagraphSettingsAdvanced.strAllCaps": "Tot majúscules", "PE.Views.ParagraphSettingsAdvanced.strDoubleStrike": "Doble ratllat", "PE.Views.ParagraphSettingsAdvanced.strIndent": "Retirades", "PE.Views.ParagraphSettingsAdvanced.strIndentsLeftText": "Esquerra", @@ -1408,7 +1490,7 @@ "PE.Views.ParagraphSettingsAdvanced.strTabs": "Pestanya", "PE.Views.ParagraphSettingsAdvanced.textAlign": "Alineació", "PE.Views.ParagraphSettingsAdvanced.textAuto": "Múltiples", - "PE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Caràcter Espai", + "PE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Espaiat de caràcters", "PE.Views.ParagraphSettingsAdvanced.textDefault": "Pestanya predeterminada", "PE.Views.ParagraphSettingsAdvanced.textEffects": "Efectes", "PE.Views.ParagraphSettingsAdvanced.textExact": "Exactament", @@ -1424,16 +1506,16 @@ "PE.Views.ParagraphSettingsAdvanced.textTabPosition": "Posició de Pestanya", "PE.Views.ParagraphSettingsAdvanced.textTabRight": "Dreta", "PE.Views.ParagraphSettingsAdvanced.textTitle": "Paràgraf - Configuració Avançada", - "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", - "PE.Views.RightMenu.txtChartSettings": "Gràfic Configuració", + "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Automàtic", + "PE.Views.RightMenu.txtChartSettings": "Paràmetres del diagrama", "PE.Views.RightMenu.txtImageSettings": "Configuració Imatge", - "PE.Views.RightMenu.txtParagraphSettings": "Configuració de text", + "PE.Views.RightMenu.txtParagraphSettings": "Configuració de paràgraf", "PE.Views.RightMenu.txtShapeSettings": "Configuració de la Forma", "PE.Views.RightMenu.txtSignatureSettings": "Configuració de la Firma", "PE.Views.RightMenu.txtSlideSettings": "Configuració de la Diapositiva", "PE.Views.RightMenu.txtTableSettings": "Configuració de la taula", "PE.Views.RightMenu.txtTextArtSettings": "Configuració de l'Art de Text", - "PE.Views.ShapeSettings.strBackground": "Color de Fons", + "PE.Views.ShapeSettings.strBackground": "Color de fons", "PE.Views.ShapeSettings.strChange": "Canvia la forma automàtica", "PE.Views.ShapeSettings.strColor": "Color", "PE.Views.ShapeSettings.strFill": "Omplir", @@ -1441,13 +1523,13 @@ "PE.Views.ShapeSettings.strPattern": "Patró", "PE.Views.ShapeSettings.strShadow": "Mostra ombra", "PE.Views.ShapeSettings.strSize": "Mida", - "PE.Views.ShapeSettings.strStroke": "Traça", + "PE.Views.ShapeSettings.strStroke": "Línia", "PE.Views.ShapeSettings.strTransparency": "Opacitat", "PE.Views.ShapeSettings.strType": "Tipus", "PE.Views.ShapeSettings.textAdvanced": "Mostra la configuració avançada", "PE.Views.ShapeSettings.textAngle": "Angle", "PE.Views.ShapeSettings.textBorderSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor entre 0 pt i 1584 pt.", - "PE.Views.ShapeSettings.textColor": "Omplir de Color", + "PE.Views.ShapeSettings.textColor": "Color de farciment", "PE.Views.ShapeSettings.textDirection": "Direcció", "PE.Views.ShapeSettings.textEmptyPattern": "Sense Patró", "PE.Views.ShapeSettings.textFlip": "Voltejar", @@ -1496,7 +1578,7 @@ "PE.Views.ShapeSettingsAdvanced.textAltTitle": "Títol", "PE.Views.ShapeSettingsAdvanced.textAngle": "Angle", "PE.Views.ShapeSettingsAdvanced.textArrows": "Fletxes", - "PE.Views.ShapeSettingsAdvanced.textAutofit": "AutoFit", + "PE.Views.ShapeSettingsAdvanced.textAutofit": "\nAjustar automàticament", "PE.Views.ShapeSettingsAdvanced.textBeginSize": "Mida Inicial", "PE.Views.ShapeSettingsAdvanced.textBeginStyle": "Estil d’Inici", "PE.Views.ShapeSettingsAdvanced.textBevel": "Bisell", @@ -1539,9 +1621,10 @@ "PE.Views.SignatureSettings.strValid": "Signatures vàlides", "PE.Views.SignatureSettings.txtContinueEditing": "Editar de totes maneres", "PE.Views.SignatureSettings.txtEditWarning": "L’edició eliminarà les signatures de la presentació.
    Esteu segur que voleu continuar?", + "PE.Views.SignatureSettings.txtRemoveWarning": "Voleu eliminar aquesta signatura?
    Això no es podrà desfer.", "PE.Views.SignatureSettings.txtSigned": "S'han afegit signatures vàlides a la presentació. La presentació està protegida de l'edició.", "PE.Views.SignatureSettings.txtSignedInvalid": "Algunes de les signatures digitals presentades no són vàlides o no es van poder verificar. La presentació està protegida de l'edició.", - "PE.Views.SlideSettings.strBackground": "Color de Fons", + "PE.Views.SlideSettings.strBackground": "Color de fons", "PE.Views.SlideSettings.strColor": "Color", "PE.Views.SlideSettings.strDateTime": "Mostrar Data i Hora", "PE.Views.SlideSettings.strDelay": "Retard", @@ -1552,6 +1635,7 @@ "PE.Views.SlideSettings.strPattern": "Patró", "PE.Views.SlideSettings.strSlideNum": "Mostra el Número de Diapositiva", "PE.Views.SlideSettings.strStartOnClick": "Arrancar Amb Clic", + "PE.Views.SlideSettings.strTransparency": "Opacitat", "PE.Views.SlideSettings.textAdvanced": "Mostra la configuració avançada", "PE.Views.SlideSettings.textAngle": "Angle", "PE.Views.SlideSettings.textApplyAll": "Aplicar a Totes les Diapositives", @@ -1560,8 +1644,8 @@ "PE.Views.SlideSettings.textBottomLeft": "Inferior esquerra", "PE.Views.SlideSettings.textBottomRight": "Inferior dreta", "PE.Views.SlideSettings.textClock": "Rellotge", - "PE.Views.SlideSettings.textClockwise": "En el sentit de les agulles del rellotge", - "PE.Views.SlideSettings.textColor": "Omplir de Color", + "PE.Views.SlideSettings.textClockwise": "En sentit horari", + "PE.Views.SlideSettings.textColor": "Color de farciment", "PE.Views.SlideSettings.textCounterclockwise": "En sentit antihorari", "PE.Views.SlideSettings.textCover": "Cobrir", "PE.Views.SlideSettings.textDirection": "Direcció", @@ -1632,14 +1716,15 @@ "PE.Views.SlideSizeSettings.txt35": "35 mm Diapositives", "PE.Views.SlideSizeSettings.txtA3": "A3 Full (297x420 mm)", "PE.Views.SlideSizeSettings.txtA4": "A4 Full (210x297 mm)", - "PE.Views.SlideSizeSettings.txtB4": "B4 Full (ICO) (250x353 mm)", - "PE.Views.SlideSizeSettings.txtB5": "B5 Full (ICO) (176x250 mm)", - "PE.Views.SlideSizeSettings.txtBanner": "Banner", + "PE.Views.SlideSizeSettings.txtB4": "Paper B4 (ICO)(250x353 mm)", + "PE.Views.SlideSizeSettings.txtB5": "Paper B5 (ICO)(176x250 mm)", + "PE.Views.SlideSizeSettings.txtBanner": "Bàner", "PE.Views.SlideSizeSettings.txtCustom": "Personalitzat", "PE.Views.SlideSizeSettings.txtLedger": "Paper de Comptabilitat (11x17 en)", "PE.Views.SlideSizeSettings.txtLetter": "Paper de Carta (8.5x11 en)", "PE.Views.SlideSizeSettings.txtOverhead": "Transparència", "PE.Views.SlideSizeSettings.txtStandard": "Estàndard (4:3)", + "PE.Views.SlideSizeSettings.txtWidescreen": "Pantalla ampla", "PE.Views.Statusbar.goToPageText": "Anar a Diapositiva", "PE.Views.Statusbar.pageIndexText": "Diapositiva {0} de {1}", "PE.Views.Statusbar.textShowBegin": "Mostrar presentació des de el principi", @@ -1669,10 +1754,10 @@ "PE.Views.TableSettings.splitCellsText": "Dividir Cel·la...", "PE.Views.TableSettings.splitCellTitleText": "Dividir Cel·la", "PE.Views.TableSettings.textAdvanced": "Mostra la configuració avançada", - "PE.Views.TableSettings.textBackColor": "Color de Fons", - "PE.Views.TableSettings.textBanded": "Bandat", + "PE.Views.TableSettings.textBackColor": "Color de fons", + "PE.Views.TableSettings.textBanded": "Bandejat", "PE.Views.TableSettings.textBorderColor": "Color", - "PE.Views.TableSettings.textBorders": "Estil de la Vora", + "PE.Views.TableSettings.textBorders": "Estil de Vores", "PE.Views.TableSettings.textCellSize": "Mida Cel·la", "PE.Views.TableSettings.textColumns": "Columnes", "PE.Views.TableSettings.textDistributeCols": "Distribuïu les columnes", @@ -1720,18 +1805,18 @@ "PE.Views.TableSettingsAdvanced.textTitle": "Taula - Configuració Avançada", "PE.Views.TableSettingsAdvanced.textTop": "Superior", "PE.Views.TableSettingsAdvanced.textWidthSpaces": "Marges", - "PE.Views.TextArtSettings.strBackground": "Color de Fons", + "PE.Views.TextArtSettings.strBackground": "Color de fons", "PE.Views.TextArtSettings.strColor": "Color", "PE.Views.TextArtSettings.strFill": "Omplir", "PE.Views.TextArtSettings.strForeground": "Color de Primer Pla", "PE.Views.TextArtSettings.strPattern": "Patró", "PE.Views.TextArtSettings.strSize": "Mida", - "PE.Views.TextArtSettings.strStroke": "Traça", + "PE.Views.TextArtSettings.strStroke": "Línia", "PE.Views.TextArtSettings.strTransparency": "Opacitat", "PE.Views.TextArtSettings.strType": "Tipus", "PE.Views.TextArtSettings.textAngle": "Angle", "PE.Views.TextArtSettings.textBorderSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor entre 0 pt i 1584 pt.", - "PE.Views.TextArtSettings.textColor": "Omplir de Color", + "PE.Views.TextArtSettings.textColor": "Color de farciment", "PE.Views.TextArtSettings.textDirection": "Direcció", "PE.Views.TextArtSettings.textEmptyPattern": "Sense Patró", "PE.Views.TextArtSettings.textFromFile": "Des d'un fitxer", @@ -1784,13 +1869,19 @@ "PE.Views.Toolbar.capTabFile": "Fitxer", "PE.Views.Toolbar.capTabHome": "Inici", "PE.Views.Toolbar.capTabInsert": "Insertar", + "PE.Views.Toolbar.mniCapitalizeWords": "Posar en majúscules cada paraula", "PE.Views.Toolbar.mniCustomTable": "Inserir Taula Personalitzada", "PE.Views.Toolbar.mniImageFromFile": "Imatge d'un Fitxer", "PE.Views.Toolbar.mniImageFromStorage": "Imatge d'un Magatzem", "PE.Views.Toolbar.mniImageFromUrl": "Imatge d'un Enllaç", + "PE.Views.Toolbar.mniLowerCase": "minúscules", + "PE.Views.Toolbar.mniSentenceCase": "Cas de frase", "PE.Views.Toolbar.mniSlideAdvanced": "Configuració Avançada", "PE.Views.Toolbar.mniSlideStandard": "Estàndard (4:3)", "PE.Views.Toolbar.mniSlideWide": "Pantalla ampla (16:9)", + "PE.Views.Toolbar.mniToggleCase": "iNVERTIR mAJÚSCULES", + "PE.Views.Toolbar.mniUpperCase": "MAJÚSCULES", + "PE.Views.Toolbar.strMenuNoFill": "Sense Farciment", "PE.Views.Toolbar.textAlignBottom": "Alinear text en la part superior", "PE.Views.Toolbar.textAlignCenter": "Centrar text", "PE.Views.Toolbar.textAlignJust": "Justificar", @@ -1801,17 +1892,21 @@ "PE.Views.Toolbar.textArrangeBack": "Enviar a un segon pla", "PE.Views.Toolbar.textArrangeBackward": "Envia Endarrere", "PE.Views.Toolbar.textArrangeForward": "Portar Endavant", - "PE.Views.Toolbar.textArrangeFront": "Porta a Primer pla", + "PE.Views.Toolbar.textArrangeFront": "Portar a Primer pla", "PE.Views.Toolbar.textBold": "Negreta", + "PE.Views.Toolbar.textColumnsCustom": "Columnes Personalitzades", + "PE.Views.Toolbar.textColumnsOne": "Una columna", + "PE.Views.Toolbar.textColumnsThree": "Tres columnes", + "PE.Views.Toolbar.textColumnsTwo": "Dues columnes", "PE.Views.Toolbar.textItalic": "Itàlica", "PE.Views.Toolbar.textListSettings": "Configuració de la Llista", - "PE.Views.Toolbar.textNewColor": "Color Personalitzat", + "PE.Views.Toolbar.textNewColor": "Afegir Nou Color Personalitzat", "PE.Views.Toolbar.textShapeAlignBottom": "Alineació Inferior", "PE.Views.Toolbar.textShapeAlignCenter": "Centrar", - "PE.Views.Toolbar.textShapeAlignLeft": "Alinear Esquerra", + "PE.Views.Toolbar.textShapeAlignLeft": "Alineació esquerra", "PE.Views.Toolbar.textShapeAlignMiddle": "Alinear al Mig", - "PE.Views.Toolbar.textShapeAlignRight": "Alinear Dreta", - "PE.Views.Toolbar.textShapeAlignTop": "Alinear Superior", + "PE.Views.Toolbar.textShapeAlignRight": "Alineació dreta", + "PE.Views.Toolbar.textShapeAlignTop": "Alineació superior", "PE.Views.Toolbar.textShowBegin": "Mostrar presentació des de el principi", "PE.Views.Toolbar.textShowCurrent": "Mostrar la Diapositiva Actual", "PE.Views.Toolbar.textShowPresenterView": "Veure Vista del Presentador", @@ -1828,19 +1923,24 @@ "PE.Views.Toolbar.textUnderline": "Subratllar", "PE.Views.Toolbar.tipAddSlide": "Afegir diapositiva", "PE.Views.Toolbar.tipBack": "Enrere", - "PE.Views.Toolbar.tipChangeChart": "Canvia el tipus de gràfic", + "PE.Views.Toolbar.tipChangeCase": "Canviar el cas", + "PE.Views.Toolbar.tipChangeChart": "Canviar el tipus de gràfic", "PE.Views.Toolbar.tipChangeSlide": "Canviar disseny de diapositiva", - "PE.Views.Toolbar.tipClearStyle": "Estil clar", - "PE.Views.Toolbar.tipColorSchemas": "Canviar el esquema de color", + "PE.Views.Toolbar.tipClearStyle": "Neteja l'estil", + "PE.Views.Toolbar.tipColorSchemas": "Canviar l'esquema de color", + "PE.Views.Toolbar.tipColumns": "Inserir columnes", "PE.Views.Toolbar.tipCopy": "Copiar", "PE.Views.Toolbar.tipCopyStyle": "Copiar estil", "PE.Views.Toolbar.tipDateTime": "Inseriu la data i l'hora actuals", + "PE.Views.Toolbar.tipDecFont": "Reduir la mida de la lletra", "PE.Views.Toolbar.tipDecPrLeft": "Disminuir el sagnat", "PE.Views.Toolbar.tipEditHeader": "Editar el peu de pàgina", "PE.Views.Toolbar.tipFontColor": "Color de Font", "PE.Views.Toolbar.tipFontName": "Font", "PE.Views.Toolbar.tipFontSize": "Mida de Font", "PE.Views.Toolbar.tipHAligh": "Alineació Horitzontal", + "PE.Views.Toolbar.tipHighlightColor": "Color de ressaltat", + "PE.Views.Toolbar.tipIncFont": "Augmentar la mida de la lletra", "PE.Views.Toolbar.tipIncPrLeft": "Augmentar el sagnat", "PE.Views.Toolbar.tipInsertAudio": "Inseriu àudio", "PE.Views.Toolbar.tipInsertChart": "Inseriu Gràfic", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 922388c7c..41c4ac979 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -715,7 +715,7 @@ "PE.Controllers.Main.unsupportedBrowserErrorText": "Your browser is not supported.", "PE.Controllers.Main.uploadImageExtMessage": "Unknown image format.", "PE.Controllers.Main.uploadImageFileCountMessage": "No images uploaded.", - "PE.Controllers.Main.uploadImageSizeMessage": "Maximum image size limit exceeded.", + "PE.Controllers.Main.uploadImageSizeMessage": "The image is too big. The maximum size is 25 MB.", "PE.Controllers.Main.uploadImageTextText": "Uploading image...", "PE.Controllers.Main.uploadImageTitleText": "Uploading Image", "PE.Controllers.Main.waitText": "Please, wait...", diff --git a/apps/presentationeditor/main/locale/es.json b/apps/presentationeditor/main/locale/es.json index 69f1d3545..1cd10a051 100644 --- a/apps/presentationeditor/main/locale/es.json +++ b/apps/presentationeditor/main/locale/es.json @@ -715,7 +715,7 @@ "PE.Controllers.Main.unsupportedBrowserErrorText": "Su navegador no está soportado.", "PE.Controllers.Main.uploadImageExtMessage": "Formato de imagen desconocido.", "PE.Controllers.Main.uploadImageFileCountMessage": "No hay imágenes subidas.", - "PE.Controllers.Main.uploadImageSizeMessage": "Tamaño máximo de imagen está superado.", + "PE.Controllers.Main.uploadImageSizeMessage": "La imagen es demasiado grande. El tamaño máximo es de 25 MB.", "PE.Controllers.Main.uploadImageTextText": "Subiendo imagen...", "PE.Controllers.Main.uploadImageTitleText": "Subiendo imagen", "PE.Controllers.Main.waitText": "Por favor, espere...", diff --git a/apps/presentationeditor/main/locale/it.json b/apps/presentationeditor/main/locale/it.json index e31ecf2e5..b0d976064 100644 --- a/apps/presentationeditor/main/locale/it.json +++ b/apps/presentationeditor/main/locale/it.json @@ -1088,7 +1088,7 @@ "PE.Views.DocumentHolder.addCommentText": "Aggiungi commento", "PE.Views.DocumentHolder.addToLayoutText": "Aggiungi al layout", "PE.Views.DocumentHolder.advancedImageText": "Impostazioni avanzate dell'immagine", - "PE.Views.DocumentHolder.advancedParagraphText": "Impostazioni avanzate testo", + "PE.Views.DocumentHolder.advancedParagraphText": "Impostazioni avanzate del paragrafo", "PE.Views.DocumentHolder.advancedShapeText": "Impostazioni avanzate forma", "PE.Views.DocumentHolder.advancedTableText": "Impostazioni avanzate della tabella", "PE.Views.DocumentHolder.alignmentText": "Allineamento", @@ -1334,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Dovrai accettare i cambiamenti prima di poterli visualizzare.", "PE.Views.FileMenuPanels.Settings.strFast": "Rapido", "PE.Views.FileMenuPanels.Settings.strFontRender": "Suggerimento per i caratteri", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "‎Aggiungere versione al salvataggio dopo aver fatto clic su Salva o CTRL+S‎", "PE.Views.FileMenuPanels.Settings.strInputMode": "Attiva geroglifici", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Impostazioni macro", "PE.Views.FileMenuPanels.Settings.strPaste": "Taglia, copia e incolla", @@ -1353,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Recupero automatico", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Salvataggio automatico", "PE.Views.FileMenuPanels.Settings.textDisabled": "Disattivato", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Salva sul server", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Salva versioni intermedie", "PE.Views.FileMenuPanels.Settings.textMinute": "Ogni minuto", "PE.Views.FileMenuPanels.Settings.txtAll": "Tutte", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Opzioni di correzione automatica ...", @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "PE.Views.RightMenu.txtChartSettings": "Impostazioni grafico", "PE.Views.RightMenu.txtImageSettings": "Impostazioni immagine", - "PE.Views.RightMenu.txtParagraphSettings": "Impostazioni testo", + "PE.Views.RightMenu.txtParagraphSettings": "Impostazioni paragrafo", "PE.Views.RightMenu.txtShapeSettings": "Impostazioni forma", "PE.Views.RightMenu.txtSignatureSettings": "Impostazioni della Firma", "PE.Views.RightMenu.txtSlideSettings": "Impostazioni diapositiva", diff --git a/apps/presentationeditor/main/locale/nl.json b/apps/presentationeditor/main/locale/nl.json index 0d6080230..5543ae087 100644 --- a/apps/presentationeditor/main/locale/nl.json +++ b/apps/presentationeditor/main/locale/nl.json @@ -48,6 +48,8 @@ "Common.define.chartData.textStock": "Voorraad", "Common.define.chartData.textSurface": "Oppervlak", "Common.Translation.warnFileLocked": "Het bestand wordt bewerkt in een andere app. U kunt doorgaan met bewerken en als kopie opslaan.", + "Common.Translation.warnFileLockedBtnEdit": "Maak een kopie", + "Common.Translation.warnFileLockedBtnView": "Open voor lezen", "Common.UI.ColorButton.textAutoColor": "Automatisch", "Common.UI.ColorButton.textNewColor": "Nieuwe aangepaste kleur toevoegen", "Common.UI.ComboBorderSize.txtNoBorders": "Geen randen", @@ -73,6 +75,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Het document is gewijzigd door een andere gebruiker.
    Klik om uw wijzigingen op te slaan en de updates opnieuw te laden.", "Common.UI.ThemeColorPalette.textStandartColors": "Standaardkleuren", "Common.UI.ThemeColorPalette.textThemeColors": "Themakleuren", + "Common.UI.Themes.txtThemeClassicLight": "Klassiek Licht", + "Common.UI.Themes.txtThemeDark": "Donker", + "Common.UI.Themes.txtThemeLight": "Licht", "Common.UI.Window.cancelButtonText": "Annuleren", "Common.UI.Window.closeButtonText": "Sluiten", "Common.UI.Window.noButtonText": "Nee", @@ -94,10 +99,12 @@ "Common.Views.About.txtVersion": "Versie", "Common.Views.AutoCorrectDialog.textAdd": "Toevoegen", "Common.Views.AutoCorrectDialog.textApplyText": "Toepassen terwijl u typt", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Auto correctie", "Common.Views.AutoCorrectDialog.textAutoFormat": "AutoOpmaak terwijl u typt", "Common.Views.AutoCorrectDialog.textBulleted": "Automatische lijsten met opsommingstekens", "Common.Views.AutoCorrectDialog.textBy": "Door", "Common.Views.AutoCorrectDialog.textDelete": "Verwijderen", + "Common.Views.AutoCorrectDialog.textFLSentence": "Maak de eerste letter van de zin hoofdletter", "Common.Views.AutoCorrectDialog.textHyphens": "Koppeltekens (--) met streepje (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Wiskundige autocorrectie", "Common.Views.AutoCorrectDialog.textNumbered": "Automatische genummerde lijsten", @@ -149,6 +156,7 @@ "Common.Views.Header.textBack": "Naar documenten", "Common.Views.Header.textCompactView": "Werkbalk Verbergen", "Common.Views.Header.textHideLines": "Linialen verbergen", + "Common.Views.Header.textHideNotes": "Verberg notities", "Common.Views.Header.textHideStatusBar": "Statusbalk verbergen", "Common.Views.Header.textRemoveFavorite": "Verwijder uit favorieten", "Common.Views.Header.textSaveBegin": "Opslaan...", @@ -234,6 +242,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Zet samenwerkings modus", "Common.Views.ReviewChanges.tipCommentRem": "Alle opmerkingen verwijderen", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Verwijder huidige opmerking", + "Common.Views.ReviewChanges.tipCommentResolve": "Oplossen van opmerkingen", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Oplossen van huidige opmerkingen", "Common.Views.ReviewChanges.tipHistory": "Toon versie geschiedenis", "Common.Views.ReviewChanges.tipRejectCurrent": "Huidige wijziging afwijzen", "Common.Views.ReviewChanges.tipReview": "Wijzigingen bijhouden", @@ -253,6 +263,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Verwijder al mijn commentaar", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Verwijder mijn huidige opmerkingen", "Common.Views.ReviewChanges.txtCommentRemove": "Verwijderen", + "Common.Views.ReviewChanges.txtCommentResolve": "Oplossen", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Alle opmerkingen oplossen", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Oplossen van huidige opmerkingen", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Los mijn opmerkingen op", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Mijn huidige opmerkingen oplossen", "Common.Views.ReviewChanges.txtDocLang": "Taal", "Common.Views.ReviewChanges.txtFinal": "Alle veranderingen geaccepteerd (Voorbeeld)", "Common.Views.ReviewChanges.txtFinalCap": "Einde", @@ -339,9 +354,11 @@ "Common.Views.UserNameDialog.textDontShow": "Vraag me niet nog een keer ", "Common.Views.UserNameDialog.textLabel": "Label:", "Common.Views.UserNameDialog.textLabelError": "Label mag niet leeg zijn", + "PE.Controllers.LeftMenu.leavePageText": "Alle niet-opgeslagen wijzigingen in dit document gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet-opgeslagen wijzigingen te verwijderen.", "PE.Controllers.LeftMenu.newDocumentTitle": "Presentatie zonder naam", "PE.Controllers.LeftMenu.notcriticalErrorTitle": "Waarschuwing", "PE.Controllers.LeftMenu.requestEditRightsText": "Bewerkrechten worden aangevraagd...", + "PE.Controllers.LeftMenu.textLoadHistory": "Versiehistorie wordt geladen...", "PE.Controllers.LeftMenu.textNoTextFound": "De gegevens waarnaar u zoekt, zijn niet gevonden. Pas uw zoekopties aan.", "PE.Controllers.LeftMenu.textReplaceSkipped": "De vervanging is uitgevoerd. {0} gevallen zijn overgeslagen.", "PE.Controllers.LeftMenu.textReplaceSuccess": "De zoekactie is uitgevoerd. Vervangen items: {0}", @@ -386,6 +403,7 @@ "PE.Controllers.Main.errorUsersExceed": "Het onder het prijsplan toegestane aantal gebruikers is overschreden", "PE.Controllers.Main.errorViewerDisconnect": "Verbinding is verbroken. U kunt het document nog wel bekijken,
    maar u kunt het pas downloaden of afdrukken als de verbinding is hersteld.", "PE.Controllers.Main.leavePageText": "Er zijn niet-opgeslagen wijzigingen in deze presentatie. Klik op \"Op deze pagina blijven\" en dan op \"Opslaan\" om de wijzigingen op te slaan. Klik op \"Pagina verlaten\" om de niet-opgeslagen wijzigingen te negeren.", + "PE.Controllers.Main.leavePageTextOnClose": "Alle niet-opgeslagen wijzigingen in deze presentatie gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet-opgeslagen wijzigingen te verwijderen.", "PE.Controllers.Main.loadFontsTextText": "Gegevens worden geladen...", "PE.Controllers.Main.loadFontsTitleText": "Gegevens worden geladen", "PE.Controllers.Main.loadFontTextText": "Gegevens worden geladen...", @@ -436,6 +454,7 @@ "PE.Controllers.Main.textShape": "Vorm", "PE.Controllers.Main.textStrict": "Strikte modus", "PE.Controllers.Main.textTryUndoRedo": "De functies Ongedaan maken/Opnieuw worden uitgeschakeld in de modus Snel gezamenlijk bewerken.
    Klik op de knop 'Strikte modus' om over te schakelen naar de strikte modus voor gezamenlijk bewerken. U kunt het bestand dan zonder interferentie van andere gebruikers bewerken en uw wijzigingen verzenden wanneer u die opslaat. U kunt schakelen tussen de modi voor gezamenlijke bewerking via Geavanceerde instellingen van de editor.", + "PE.Controllers.Main.textTryUndoRedoWarn": "De functies Ongedaan maken/Annuleren zijn uitgeschakeld in de modus Snel meewerken.", "PE.Controllers.Main.titleLicenseExp": "Licentie vervallen", "PE.Controllers.Main.titleServerVersion": "Editor bijgewerkt", "PE.Controllers.Main.txtAddFirstSlide": "Klik om de eerste slide te maken", @@ -450,6 +469,7 @@ "PE.Controllers.Main.txtDiagram": "SmartArt", "PE.Controllers.Main.txtDiagramTitle": "Grafiektitel", "PE.Controllers.Main.txtEditingMode": "Bewerkmodus instellen...", + "PE.Controllers.Main.txtErrorLoadHistory": "Geschiedenis laden mislukt", "PE.Controllers.Main.txtFiguredArrows": "Pijlvormen", "PE.Controllers.Main.txtFooter": "Voettekst", "PE.Controllers.Main.txtHeader": "Koptekst", @@ -459,6 +479,7 @@ "PE.Controllers.Main.txtMath": "Wiskunde", "PE.Controllers.Main.txtMedia": "Media", "PE.Controllers.Main.txtNeedSynchronize": "U hebt updates", + "PE.Controllers.Main.txtNone": "Geen", "PE.Controllers.Main.txtPicture": "Afbeelding", "PE.Controllers.Main.txtRectangles": "Rechthoeken", "PE.Controllers.Main.txtSeries": "Serie", @@ -1258,6 +1279,7 @@ "PE.Views.FileMenu.btnCreateNewCaption": "Nieuw maken", "PE.Views.FileMenu.btnDownloadCaption": "Downloaden als...", "PE.Views.FileMenu.btnHelpCaption": "Help...", + "PE.Views.FileMenu.btnHistoryCaption": "Versie geschiedenis", "PE.Views.FileMenu.btnInfoCaption": "Info over presentatie...", "PE.Views.FileMenu.btnPrintCaption": "Afdrukken", "PE.Views.FileMenu.btnProtectCaption": "Beveilig", @@ -1385,6 +1407,7 @@ "PE.Views.HyperlinkSettingsDialog.txtNext": "Volgende dia", "PE.Views.HyperlinkSettingsDialog.txtNotUrl": "Dit veld moet een URL in de notatie \"http://www.voorbeeld.com\" bevatten", "PE.Views.HyperlinkSettingsDialog.txtPrev": "Vorige dia", + "PE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Dit veld is beperkt tot 2083 tekens", "PE.Views.HyperlinkSettingsDialog.txtSlide": "Dia", "PE.Views.ImageSettings.textAdvanced": "Geavanceerde instellingen tonen", "PE.Views.ImageSettings.textCrop": "Uitsnijden", @@ -1900,7 +1923,7 @@ "PE.Views.Toolbar.textUnderline": "Onderstrepen", "PE.Views.Toolbar.tipAddSlide": "Dia toevoegen", "PE.Views.Toolbar.tipBack": "Terug", - "PE.Views.Toolbar.tipChangeCase": "Verander lettertype", + "PE.Views.Toolbar.tipChangeCase": "Verander geval", "PE.Views.Toolbar.tipChangeChart": "Grafiektype wijzigen", "PE.Views.Toolbar.tipChangeSlide": "Dia-indeling wijzigen", "PE.Views.Toolbar.tipClearStyle": "Stijl wissen", diff --git a/apps/presentationeditor/main/locale/ru.json b/apps/presentationeditor/main/locale/ru.json index 6937cec7e..9b8d514c0 100644 --- a/apps/presentationeditor/main/locale/ru.json +++ b/apps/presentationeditor/main/locale/ru.json @@ -715,7 +715,7 @@ "PE.Controllers.Main.unsupportedBrowserErrorText": "Ваш браузер не поддерживается.", "PE.Controllers.Main.uploadImageExtMessage": "Неизвестный формат изображения.", "PE.Controllers.Main.uploadImageFileCountMessage": "Ни одного изображения не загружено.", - "PE.Controllers.Main.uploadImageSizeMessage": "Превышен максимальный размер изображения.", + "PE.Controllers.Main.uploadImageSizeMessage": "Слишком большое изображение. Максимальный размер - 25 MB.", "PE.Controllers.Main.uploadImageTextText": "Загрузка изображения...", "PE.Controllers.Main.uploadImageTitleText": "Загрузка изображения", "PE.Controllers.Main.waitText": "Пожалуйста, подождите...", diff --git a/apps/presentationeditor/main/locale/zh.json b/apps/presentationeditor/main/locale/zh.json index f15c47a41..7440bcb3b 100644 --- a/apps/presentationeditor/main/locale/zh.json +++ b/apps/presentationeditor/main/locale/zh.json @@ -39,6 +39,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "该文档已被其他用户更改。
    请点击保存更改并重新加载更新。", "Common.UI.ThemeColorPalette.textStandartColors": "标准颜色", "Common.UI.ThemeColorPalette.textThemeColors": "主题颜色", + "Common.UI.Themes.txtThemeDark": "暗色模式", "Common.UI.Window.cancelButtonText": "取消", "Common.UI.Window.closeButtonText": "关闭", "Common.UI.Window.noButtonText": "否", @@ -64,6 +65,7 @@ "Common.Views.AutoCorrectDialog.textBy": "依据", "Common.Views.AutoCorrectDialog.textDelete": "删除", "Common.Views.AutoCorrectDialog.textMathCorrect": "数学自动修正", + "Common.Views.AutoCorrectDialog.textRecognizedDesc": "以下表达式被识别为数学公式。这些表达式不会被自动设为斜体。", "Common.Views.AutoCorrectDialog.textReplace": "替换", "Common.Views.AutoCorrectDialog.textReplaceText": "输入时自动替换", "Common.Views.AutoCorrectDialog.textReplaceType": "输入时自动替换文字", @@ -311,6 +313,7 @@ "PE.Controllers.Main.errorAccessDeny": "您正在尝试执行您没有权限的操作。
    请联系您的文档服务器管理员.", "PE.Controllers.Main.errorBadImageUrl": "图片地址不正确", "PE.Controllers.Main.errorCoAuthoringDisconnect": "服务器连接丢失。该文档现在无法编辑", + "PE.Controllers.Main.errorComboSeries": "要创建联立图表,请选中至少两组数据。", "PE.Controllers.Main.errorConnectToServer": "这份文件无法保存。请检查连接设置或联系您的管理员。
    当你点击“OK”按钮,系统将提示您下载文档。", "PE.Controllers.Main.errorDatabaseConnection": "外部错误。
    数据库连接错误。如果错误仍然存​​在,请联系支持人员。", "PE.Controllers.Main.errorDataEncrypted": "加密更改已收到,无法对其解密。", @@ -329,6 +332,7 @@ "PE.Controllers.Main.errorSessionAbsolute": "文档编辑会话已过期。请重新加载页面。", "PE.Controllers.Main.errorSessionIdle": "该文件尚未编辑相当长的时间。请重新加载页面。", "PE.Controllers.Main.errorSessionToken": "与服务器的连接已中断。请重新加载页面。", + "PE.Controllers.Main.errorSetPassword": "未能成功设置密码", "PE.Controllers.Main.errorStockChart": "行顺序不正确。建立股票图表将数据按照以下顺序放置在表格上:
    开盘价,最高价格,最低价格,收盘价。", "PE.Controllers.Main.errorToken": "文档安全令牌未正确形成。
    请与您的文件服务器管理员联系。", "PE.Controllers.Main.errorTokenExpire": "文档安全令牌已过期。
    请与您的文档服务器管理员联系。", @@ -381,9 +385,11 @@ "PE.Controllers.Main.textNoLicenseTitle": "ONLYOFFICE开源版本", "PE.Controllers.Main.textPaidFeature": "付费功能", "PE.Controllers.Main.textRemember": "记住我的选择", + "PE.Controllers.Main.textRenameError": "用户名不能留空。", "PE.Controllers.Main.textShape": "形状", "PE.Controllers.Main.textStrict": "严格模式", "PE.Controllers.Main.textTryUndoRedo": "对于快速的协同编辑模式,取消/重做功能是禁用的。< br >单击“严格模式”按钮切换到严格co-editing模式编辑该文件没有其他用户干扰和发送您的更改只后你拯救他们。您可以使用编辑器高级设置在编辑模式之间切换。", + "PE.Controllers.Main.textTryUndoRedoWarn": "快速共同编辑模式下,撤销/重做功能被禁用。", "PE.Controllers.Main.titleLicenseExp": "许可证过期", "PE.Controllers.Main.titleServerVersion": "编辑器已更新", "PE.Controllers.Main.txtAddFirstSlide": "单击添加第一张幻灯片", @@ -1332,6 +1338,7 @@ "PE.Views.HyperlinkSettingsDialog.txtNext": "下一张幻灯片", "PE.Views.HyperlinkSettingsDialog.txtNotUrl": "该字段应该是“http://www.example.com”格式的URL", "PE.Views.HyperlinkSettingsDialog.txtPrev": "上一张幻灯片", + "PE.Views.HyperlinkSettingsDialog.txtSizeLimit": "该域字符限制为2803个。", "PE.Views.HyperlinkSettingsDialog.txtSlide": "滑动", "PE.Views.ImageSettings.textAdvanced": "显示高级设置", "PE.Views.ImageSettings.textCrop": "裁剪", @@ -1383,6 +1390,7 @@ "PE.Views.LeftMenu.txtDeveloper": "开发者模式", "PE.Views.LeftMenu.txtLimit": "限制访问", "PE.Views.LeftMenu.txtTrial": "试用模式", + "PE.Views.LeftMenu.txtTrialDev": "试用开发者模式", "PE.Views.ParagraphSettings.strLineHeight": "行间距", "PE.Views.ParagraphSettings.strParagraphSpacing": "段落间距", "PE.Views.ParagraphSettings.strSpacingAfter": "后", @@ -1544,6 +1552,7 @@ "PE.Views.SignatureSettings.strValid": "有效签名", "PE.Views.SignatureSettings.txtContinueEditing": "继续编辑", "PE.Views.SignatureSettings.txtEditWarning": "编辑将删除演示文稿中的签名。
    您确定要继续吗?", + "PE.Views.SignatureSettings.txtRemoveWarning": "要删除该签名吗?
    这一操作不能被撤销。", "PE.Views.SignatureSettings.txtSigned": "有效签名已添加到演示文稿中。该演示文稿已限制编辑。", "PE.Views.SignatureSettings.txtSignedInvalid": "演示文稿中的某些数字签名无效或无法验证。该演示文稿已限制编辑。", "PE.Views.SlideSettings.strBackground": "背景颜色", @@ -1833,6 +1842,7 @@ "PE.Views.Toolbar.textUnderline": "下划线", "PE.Views.Toolbar.tipAddSlide": "添加幻灯片", "PE.Views.Toolbar.tipBack": "返回", + "PE.Views.Toolbar.tipChangeCase": "修改大小写", "PE.Views.Toolbar.tipChangeChart": "更改图表类型", "PE.Views.Toolbar.tipChangeSlide": "更改幻灯片布局", "PE.Views.Toolbar.tipClearStyle": "清除样式", diff --git a/apps/spreadsheeteditor/embed/locale/ro.json b/apps/spreadsheeteditor/embed/locale/ro.json index 1c7f695fa..91753d4c0 100644 --- a/apps/spreadsheeteditor/embed/locale/ro.json +++ b/apps/spreadsheeteditor/embed/locale/ro.json @@ -25,6 +25,7 @@ "SSE.ApplicationController.waitText": "Vă rugăm să așteptați...", "SSE.ApplicationView.txtDownload": "Descărcare", "SSE.ApplicationView.txtEmbed": "Încorporare", + "SSE.ApplicationView.txtFileLocation": "Deschidere locația fișierului", "SSE.ApplicationView.txtFullScreen": "Ecran complet", "SSE.ApplicationView.txtPrint": "Imprimare", "SSE.ApplicationView.txtShare": "Partajează" diff --git a/apps/spreadsheeteditor/embed/locale/tr.json b/apps/spreadsheeteditor/embed/locale/tr.json index 55a6ebedb..f5107458c 100644 --- a/apps/spreadsheeteditor/embed/locale/tr.json +++ b/apps/spreadsheeteditor/embed/locale/tr.json @@ -26,5 +26,6 @@ "SSE.ApplicationView.txtEmbed": "Gömülü", "SSE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "SSE.ApplicationView.txtFullScreen": "Tam Ekran", + "SSE.ApplicationView.txtPrint": "Yazdır", "SSE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/spreadsheeteditor/embed/locale/zh.json b/apps/spreadsheeteditor/embed/locale/zh.json index 63b6ffc93..667a0a52b 100644 --- a/apps/spreadsheeteditor/embed/locale/zh.json +++ b/apps/spreadsheeteditor/embed/locale/zh.json @@ -25,6 +25,7 @@ "SSE.ApplicationController.waitText": "请稍候...", "SSE.ApplicationView.txtDownload": "下载", "SSE.ApplicationView.txtEmbed": "嵌入", + "SSE.ApplicationView.txtFileLocation": "打开文件所在位置", "SSE.ApplicationView.txtFullScreen": "全屏", "SSE.ApplicationView.txtPrint": "打印", "SSE.ApplicationView.txtShare": "共享" diff --git a/apps/spreadsheeteditor/main/locale/ca.json b/apps/spreadsheeteditor/main/locale/ca.json index eff3f75ba..2412ade28 100644 --- a/apps/spreadsheeteditor/main/locale/ca.json +++ b/apps/spreadsheeteditor/main/locale/ca.json @@ -3,19 +3,106 @@ "Common.Controllers.Chat.notcriticalErrorTitle": "Avis", "Common.Controllers.Chat.textEnterMessage": "Introduïu el vostre missatge aquí", "Common.define.chartData.textArea": "Àrea", + "Common.define.chartData.textAreaStacked": "Àrea apilada", + "Common.define.chartData.textAreaStackedPer": "Àrea apilada al 100%", "Common.define.chartData.textBar": "Barra", + "Common.define.chartData.textBarNormal": "Columna agrupada", + "Common.define.chartData.textBarNormal3d": "Columna 3D agrupada", + "Common.define.chartData.textBarNormal3dPerspective": "Columna 3D", + "Common.define.chartData.textBarStacked": "Columna apilada", + "Common.define.chartData.textBarStacked3d": "Columna 3D apilada", + "Common.define.chartData.textBarStackedPer": "Columna apilada al 100%", + "Common.define.chartData.textBarStackedPer3d": "columna 3D apilada al 100%", "Common.define.chartData.textCharts": "Gràfics", "Common.define.chartData.textColumn": "Columna", "Common.define.chartData.textColumnSpark": "Columna", + "Common.define.chartData.textCombo": "Combo", + "Common.define.chartData.textComboAreaBar": "Àrea apilada - columna agrupada", + "Common.define.chartData.textComboBarLine": "Columna-línia agrupada", + "Common.define.chartData.textComboBarLineSecondary": " Columna-línia agrupada a l'eix secundari", + "Common.define.chartData.textComboCustom": "Combinació personalitzada", + "Common.define.chartData.textDoughnut": "Donut", + "Common.define.chartData.textHBarNormal": "Barra agrupada", + "Common.define.chartData.textHBarNormal3d": "Barra 3D agrupada", + "Common.define.chartData.textHBarStacked": "Barra apilada", + "Common.define.chartData.textHBarStacked3d": "Barra 3D apilada", + "Common.define.chartData.textHBarStackedPer": "Barra apilada al 100%", + "Common.define.chartData.textHBarStackedPer3d": "Barra 3D apilada al 100%", "Common.define.chartData.textLine": "Línia", + "Common.define.chartData.textLine3d": "Línia 3D", + "Common.define.chartData.textLineMarker": "Línia amb marcadors", "Common.define.chartData.textLineSpark": "Línia", + "Common.define.chartData.textLineStacked": "Línia apilada", + "Common.define.chartData.textLineStackedMarker": "Línia apilada amb marcadors", + "Common.define.chartData.textLineStackedPer": "Línia apilada al 100%", + "Common.define.chartData.textLineStackedPerMarker": "Línia apilada al 100% amb marcadors", "Common.define.chartData.textPie": "Gràfic circular", + "Common.define.chartData.textPie3d": "Pastís 3D", "Common.define.chartData.textPoint": "XY (Dispersió)", + "Common.define.chartData.textScatter": "Dispersió", + "Common.define.chartData.textScatterLine": "Dispersió amb línies rectes", + "Common.define.chartData.textScatterLineMarker": "Dispersió amb línies rectes i marcadors", + "Common.define.chartData.textScatterSmooth": "Dispersió amb línies suaus", + "Common.define.chartData.textScatterSmoothMarker": "Dispersió amb línies suaus i marcadors", "Common.define.chartData.textSparks": "Sparklines", "Common.define.chartData.textStock": "Existències", "Common.define.chartData.textSurface": "Superfície", "Common.define.chartData.textWinLossSpark": "Guanyar/Pèrdua", + "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.noFormatText": "No s'ha definit cap format", + "Common.define.conditionalData.text1Above": "1 per sobre de des. est.", + "Common.define.conditionalData.text1Below": "1 per sota de des. est.", + "Common.define.conditionalData.text2Above": "2 per sobre de des. est.", + "Common.define.conditionalData.text2Below": "2 per sota de des. est.", + "Common.define.conditionalData.text3Above": "3 per sobre de des. est.", + "Common.define.conditionalData.text3Below": "3 per sota de des. est.", + "Common.define.conditionalData.textAbove": "Damunt", + "Common.define.conditionalData.textAverage": "Mitjana", + "Common.define.conditionalData.textBegins": "Comença amb", + "Common.define.conditionalData.textBelow": "Sota", + "Common.define.conditionalData.textBetween": "entre", + "Common.define.conditionalData.textBlank": "En blanc", + "Common.define.conditionalData.textBlanks": "Conté espais en blanc", + "Common.define.conditionalData.textBottom": "Inferior", + "Common.define.conditionalData.textContains": "Conté", + "Common.define.conditionalData.textDataBar": "Barra de dades", + "Common.define.conditionalData.textDate": "Data", + "Common.define.conditionalData.textDuplicate": "Duplicar", + "Common.define.conditionalData.textEnds": "Acaba amb", + "Common.define.conditionalData.textEqAbove": "Igual o superior a", + "Common.define.conditionalData.textEqBelow": "Igual o inferior a", + "Common.define.conditionalData.textEqual": "Igual a", + "Common.define.conditionalData.textError": "Error", + "Common.define.conditionalData.textErrors": "Conté errors", + "Common.define.conditionalData.textFormula": "Fórmula", + "Common.define.conditionalData.textGreater": "Més gran que", + "Common.define.conditionalData.textGreaterEq": "Major o Igual a", + "Common.define.conditionalData.textIconSets": "Conjunts d'icones", + "Common.define.conditionalData.textLast7days": "En els darrers 7 dies", + "Common.define.conditionalData.textLastMonth": "El mes passat", + "Common.define.conditionalData.textLastWeek": "La setmana passada", + "Common.define.conditionalData.textLess": "Menor que", + "Common.define.conditionalData.textLessEq": "Menor o igual a", + "Common.define.conditionalData.textNextMonth": "Mes següent", + "Common.define.conditionalData.textNextWeek": "Setmana següent", + "Common.define.conditionalData.textNotBetween": "No entre", + "Common.define.conditionalData.textNotBlanks": "No conté espais en blanc", + "Common.define.conditionalData.textNotContains": "No conté", + "Common.define.conditionalData.textNotEqual": "No igual a", + "Common.define.conditionalData.textNotErrors": "No conté errors", + "Common.define.conditionalData.textText": "Text", + "Common.define.conditionalData.textThisMonth": "Aquest mes", + "Common.define.conditionalData.textThisWeek": "Aquesta setmana", + "Common.define.conditionalData.textToday": "Avui", + "Common.define.conditionalData.textTomorrow": "Demà", + "Common.define.conditionalData.textTop": "Superior", + "Common.define.conditionalData.textUnique": "Únic", + "Common.define.conditionalData.textValue": "El valor és", + "Common.define.conditionalData.textYesterday": "Ahir", "Common.Translation.warnFileLocked": "El document s'està editant en una altra aplicació. Podeu continuar editant i guardar-lo com a còpia.", + "Common.Translation.warnFileLockedBtnEdit": "Crea una còpia", + "Common.Translation.warnFileLockedBtnView": "Obrir per veure", + "Common.UI.ColorButton.textAutoColor": "Automàtic", "Common.UI.ColorButton.textNewColor": "Afegir un Nou Color Personalitzat", "Common.UI.ComboBorderSize.txtNoBorders": "Sense vores", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "Sense vores", @@ -40,6 +127,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Un altre usuari ha canviat el document.
    Feu clic per desar els canvis i tornar a carregar les actualitzacions.", "Common.UI.ThemeColorPalette.textStandartColors": "Colors Estàndards", "Common.UI.ThemeColorPalette.textThemeColors": "Colors Tema", + "Common.UI.Themes.txtThemeClassicLight": "Llum clàssica", + "Common.UI.Themes.txtThemeDark": "Fosc", + "Common.UI.Themes.txtThemeLight": "Clar", "Common.UI.Window.cancelButtonText": "Cancel·lar", "Common.UI.Window.closeButtonText": "Tancar", "Common.UI.Window.noButtonText": "No", @@ -61,9 +151,11 @@ "Common.Views.About.txtVersion": "Versió", "Common.Views.AutoCorrectDialog.textAdd": "Afegir", "Common.Views.AutoCorrectDialog.textApplyAsWork": "Aplicar mentre treballeu", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Correcció Automàtica", "Common.Views.AutoCorrectDialog.textAutoFormat": "Format automàtic a mesura que escriviu", "Common.Views.AutoCorrectDialog.textBy": "Per", "Common.Views.AutoCorrectDialog.textDelete": "Esborrar", + "Common.Views.AutoCorrectDialog.textHyperlink": "Dreceres d'internet i de xarxa amb enllaços", "Common.Views.AutoCorrectDialog.textMathCorrect": "Correcció Automàtica Matemàtica", "Common.Views.AutoCorrectDialog.textNewRowCol": "Incloure files i columnes noves a la taula", "Common.Views.AutoCorrectDialog.textRecognized": "Funcions Reconegudes", @@ -83,7 +175,7 @@ "Common.Views.Comments.textAdd": "Afegir", "Common.Views.Comments.textAddComment": "Afegir Comentari", "Common.Views.Comments.textAddCommentToDoc": "Afegir Comentari al Document", - "Common.Views.Comments.textAddReply": "Afegir una Resposta", + "Common.Views.Comments.textAddReply": "Afegir Resposta", "Common.Views.Comments.textAnonym": "Convidat", "Common.Views.Comments.textCancel": "Cancel·lar", "Common.Views.Comments.textClose": "Tancar", @@ -106,11 +198,13 @@ "Common.Views.EditNameDialog.textLabel": "Etiqueta:", "Common.Views.EditNameDialog.textLabelError": "La etiqueta no pot estar buida.", "Common.Views.Header.labelCoUsersDescr": "Usuaris que editen el fitxer:", - "Common.Views.Header.textAdvSettings": "Configuració Avançada", + "Common.Views.Header.textAddFavorite": "Marcar com a favorit", + "Common.Views.Header.textAdvSettings": "Configuració avançada", "Common.Views.Header.textBack": "Obrir ubicació del arxiu", "Common.Views.Header.textCompactView": "Amagar la Barra d'Eines", "Common.Views.Header.textHideLines": "Amagar Regles", "Common.Views.Header.textHideStatusBar": "Amagar la Barra d'Estat", + "Common.Views.Header.textRemoveFavorite": "Elimina dels Favorits", "Common.Views.Header.textSaveBegin": "Desant...", "Common.Views.Header.textSaveChanged": "Modificat", "Common.Views.Header.textSaveEnd": "Tots els canvis guardats", @@ -145,10 +239,14 @@ "Common.Views.ListSettingsDialog.txtTitle": "Configuració de la Llista", "Common.Views.ListSettingsDialog.txtType": "Tipus", "Common.Views.OpenDialog.closeButtonText": "Tancar Arxiu", + "Common.Views.OpenDialog.textInvalidRange": "Interval de cel·les no vàlid", + "Common.Views.OpenDialog.textSelectData": "Seleccionar dades", "Common.Views.OpenDialog.txtAdvanced": "Avançat", "Common.Views.OpenDialog.txtColon": "Dos punts", "Common.Views.OpenDialog.txtComma": "Financier", "Common.Views.OpenDialog.txtDelimiter": "Delimitador", + "Common.Views.OpenDialog.txtDestData": "Trieu on posar les dades", + "Common.Views.OpenDialog.txtEmpty": "Aquest camp és obligatori", "Common.Views.OpenDialog.txtEncoding": "Codificació", "Common.Views.OpenDialog.txtIncorrectPwd": "La contrasenya es incorrecta.", "Common.Views.OpenDialog.txtOpenFile": "Introduïu una contrasenya per obrir el fitxer", @@ -195,6 +293,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Configura el mode de coedició", "Common.Views.ReviewChanges.tipCommentRem": "Esborrar comentaris", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Esborrar comentaris actuals", + "Common.Views.ReviewChanges.tipCommentResolve": "Resoldre comentaris", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Resoldre comentaris actuals", "Common.Views.ReviewChanges.tipHistory": "Mostra l'historial de versions", "Common.Views.ReviewChanges.tipRejectCurrent": "Rebutjar canvi actual", "Common.Views.ReviewChanges.tipReview": "Control de Canvis", @@ -214,6 +314,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Esborrar els Meus Comentaris", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Esborrar els meus actuals comentaris", "Common.Views.ReviewChanges.txtCommentRemove": "Esborrar", + "Common.Views.ReviewChanges.txtCommentResolve": "Resoldre", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Resoldre tots els comentaris", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Resoldre comentaris actuals", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Resoldre els Meus Comentaris", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Resoldre els Meus Comentaris Actuals", "Common.Views.ReviewChanges.txtDocLang": "Idioma", "Common.Views.ReviewChanges.txtFinal": "Tots el canvis acceptats (Previsualitzar)", "Common.Views.ReviewChanges.txtFinalCap": "Final", @@ -233,7 +338,7 @@ "Common.Views.ReviewChanges.txtTurnon": "Control de Canvis", "Common.Views.ReviewChanges.txtView": "Mode de Visualització", "Common.Views.ReviewPopover.textAdd": "Afegir", - "Common.Views.ReviewPopover.textAddReply": "Afegir una Resposta", + "Common.Views.ReviewPopover.textAddReply": "Afegir Resposta", "Common.Views.ReviewPopover.textCancel": "Cancel·lar", "Common.Views.ReviewPopover.textClose": "Tancar", "Common.Views.ReviewPopover.textEdit": "Acceptar", @@ -251,6 +356,7 @@ "Common.Views.SignDialog.textChange": "Canviar", "Common.Views.SignDialog.textInputName": "Posar nom de qui ho firma", "Common.Views.SignDialog.textItalic": "Itàlica", + "Common.Views.SignDialog.textNameError": "El nom del signant no pot estar buit.", "Common.Views.SignDialog.textPurpose": "Finalitat de signar aquest document", "Common.Views.SignDialog.textSelect": "Seleccionar", "Common.Views.SignDialog.textSelectImage": "Seleccionar Imatge", @@ -283,7 +389,7 @@ "Common.Views.SymbolTableDialog.textNBHyphen": "Guionet no trencador", "Common.Views.SymbolTableDialog.textNBSpace": "Espai sense pauses", "Common.Views.SymbolTableDialog.textPilcrow": "Cartell Indicatiu", - "Common.Views.SymbolTableDialog.textQEmSpace": "1/4 Em Espai", + "Common.Views.SymbolTableDialog.textQEmSpace": "1/4 Espai llarg", "Common.Views.SymbolTableDialog.textRange": "Rang", "Common.Views.SymbolTableDialog.textRecent": "Símbols utilitzats recentment", "Common.Views.SymbolTableDialog.textRegistered": "Registre Registrat", @@ -296,10 +402,20 @@ "Common.Views.SymbolTableDialog.textSymbols": "Símbols", "Common.Views.SymbolTableDialog.textTitle": "Símbol", "Common.Views.SymbolTableDialog.textTradeMark": "Símbol de Marca Comercial", + "Common.Views.UserNameDialog.textDontShow": "No em tornis a preguntar", + "Common.Views.UserNameDialog.textLabel": "Etiqueta:", + "Common.Views.UserNameDialog.textLabelError": "L'etiqueta no pot estar en blanc.", + "SSE.Controllers.DataTab.textColumns": "Columnes", + "SSE.Controllers.DataTab.textEmptyUrl": "Heu d'especificar l'URL.", + "SSE.Controllers.DataTab.textRows": "Files", "SSE.Controllers.DataTab.textWizard": "Text en Columnes", + "SSE.Controllers.DataTab.txtDataValidation": "Validació de dades", "SSE.Controllers.DataTab.txtExpand": "Ampliar", "SSE.Controllers.DataTab.txtExpandRemDuplicates": "Les dades al costat de la selecció no se suprimiran. Voleu ampliar la selecció per incloure les dades adjacents o continuar només amb les cel·les actualment seleccionades?", + "SSE.Controllers.DataTab.txtExtendDataValidation": "La selecció conté algunes cel·les sense la configuració de validació de dades.
    Vols ampliar la validació de dades a aquestes cel·les?", + "SSE.Controllers.DataTab.txtImportWizard": "Assistent per Importar Text", "SSE.Controllers.DataTab.txtRemDuplicates": "Eliminar els Duplicats", + "SSE.Controllers.DataTab.txtRemoveDataValidation": "La selecció conté més d'un tipus de validació.
    Esborrar la configuració actual i continua?", "SSE.Controllers.DataTab.txtRemSelected": "Eliminar les opcions seleccionades", "SSE.Controllers.DocumentHolder.alignmentText": "Alineació", "SSE.Controllers.DocumentHolder.centerText": "Centre", @@ -316,12 +432,14 @@ "SSE.Controllers.DocumentHolder.leftText": "Esquerra", "SSE.Controllers.DocumentHolder.notcriticalErrorTitle": "Avis", "SSE.Controllers.DocumentHolder.rightText": "Dreta", + "SSE.Controllers.DocumentHolder.textAutoCorrectSettings": "Opcions de correcció automàtica", "SSE.Controllers.DocumentHolder.textChangeColumnWidth": "Amplada de la columna {0} símbols ({1} píxels)", "SSE.Controllers.DocumentHolder.textChangeRowHeight": "Alçada de fila {0} punts ({1} píxels)", "SSE.Controllers.DocumentHolder.textCtrlClick": "Feu clic a l'enllaç per obrir-lo o feu clic i manteniu premut el botó del ratolí per seleccionar la cel·la.", "SSE.Controllers.DocumentHolder.textInsertLeft": "Inserir a l'esquerra", "SSE.Controllers.DocumentHolder.textInsertTop": "Inserir A dalt", "SSE.Controllers.DocumentHolder.textPasteSpecial": "Pegar especial", + "SSE.Controllers.DocumentHolder.textStopExpand": "Aturar l'expansió automàtica de les taules", "SSE.Controllers.DocumentHolder.textSym": "sym", "SSE.Controllers.DocumentHolder.tipIsLocked": "Un altre usuari està editant aquest element.", "SSE.Controllers.DocumentHolder.txtAboveAve": "Per sobre de la mitja", @@ -339,7 +457,7 @@ "SSE.Controllers.DocumentHolder.txtAnd": "i", "SSE.Controllers.DocumentHolder.txtBegins": "Comença amb", "SSE.Controllers.DocumentHolder.txtBelowAve": "Per sota de la mitja", - "SSE.Controllers.DocumentHolder.txtBlanks": "(Buits)", + "SSE.Controllers.DocumentHolder.txtBlanks": "(En blanc)", "SSE.Controllers.DocumentHolder.txtBorderProps": "Propietats Vora", "SSE.Controllers.DocumentHolder.txtBottom": "Inferior", "SSE.Controllers.DocumentHolder.txtColumn": "Columna", @@ -456,7 +574,7 @@ "SSE.Controllers.FormulaDialog.sCategoryEngineering": "Enginyeria", "SSE.Controllers.FormulaDialog.sCategoryFinancial": "Financer", "SSE.Controllers.FormulaDialog.sCategoryInformation": "Informació", - "SSE.Controllers.FormulaDialog.sCategoryLast10": "10 per última vegada utilitzats", + "SSE.Controllers.FormulaDialog.sCategoryLast10": "10 darrers utilitzats", "SSE.Controllers.FormulaDialog.sCategoryLogical": "Lògic", "SSE.Controllers.FormulaDialog.sCategoryLookupAndReference": "Busca i Referència", "SSE.Controllers.FormulaDialog.sCategoryMathematic": "Matemàtiques i trigonometria", @@ -497,6 +615,7 @@ "SSE.Controllers.Main.errorBadImageUrl": "Enllaç de la Imatge Incorrecte", "SSE.Controllers.Main.errorCannotUngroup": "No es pot desagrupar. Per iniciar un esquema, seleccioneu les files o columnes de detall i agrupeu-les.", "SSE.Controllers.Main.errorChangeArray": "No podeu canviar part d'una matriu.", + "SSE.Controllers.Main.errorChangeFilteredRange": "Això canviarà un interval filtrat al vostre full de càlcul.
    Per completar aquesta tasca, si us plau, elimineu els Filtres Automàtics.", "SSE.Controllers.Main.errorCoAuthoringDisconnect": "S'ha perdut la connexió amb el servidor. El document no es pot editar ara mateix.", "SSE.Controllers.Main.errorConnectToServer": "El document no s'ha pogut desar. Comproveu la configuració de la connexió o poseu-vos en contacte amb l'administrador.
    Quan feu clic al botó \"D'acord\", se us demanarà que descarregueu el document.", "SSE.Controllers.Main.errorCopyMultiselectArea": "Aquesta ordre no es pot utilitzar amb diverses seleccions.
    Seleccioneu un únic rang i proveu-ho de nou.", @@ -541,14 +660,18 @@ "SSE.Controllers.Main.errorOpenWarning": "La longitud d'una de les fórmules del fitxer ha excedit el límit de 8192 caràcters permès.
    La formula s'ha esborrat.", "SSE.Controllers.Main.errorOperandExpected": "La sintaxi de la funció introduïda no és correcta. Comproveu si us falta un dels parèntesis - '(' o ')'.", "SSE.Controllers.Main.errorPasteMaxRange": "L’àrea de còpia i enganxa no coincideix.
    Seleccioneu una àrea amb la mateixa mida o feu clic a la primera cel·la d’una fila per enganxar les cel·les copiades.", + "SSE.Controllers.Main.errorPasteMultiSelect": "Aquesta acció no es pot fer en una selecció de rang múltiple.
    Selecciona un interval únic i torna-ho a provar.", "SSE.Controllers.Main.errorPasteSlicerError": "Les segmentacions de taules no es poden copiar d’un llibre a un altre.", + "SSE.Controllers.Main.errorPivotGroup": "No es pot agrupar aquesta selecció.", "SSE.Controllers.Main.errorPivotOverlap": "Un informe de la taula de pivot no pot sobreposar-se a una taula.", + "SSE.Controllers.Main.errorPivotWithoutUnderlying": "L'informe Taula dinàmica s'ha desat sense les dades subjacents.
    Utilitzeu el botó «Refresca» per actualitzar l'informe.", "SSE.Controllers.Main.errorPrintMaxPagesCount": "Malauradament, no és possible imprimir més de 1500 pàgines a la vegada en la versió actual del programa.
    Aquesta restricció serà eliminada en les properes versions.", "SSE.Controllers.Main.errorProcessSaveResult": "Desament Fallit", "SSE.Controllers.Main.errorServerVersion": "S'ha actualitzat la versió de l'editor. Es tornarà a carregar la pàgina per aplicar els canvis.", "SSE.Controllers.Main.errorSessionAbsolute": "La sessió d’edició del document ha caducat. Torneu a carregar la pàgina.", "SSE.Controllers.Main.errorSessionIdle": "El document no s’ha editat des de fa temps. Torneu a carregar la pàgina.", "SSE.Controllers.Main.errorSessionToken": "S'ha interromput la connexió amb el servidor. Torneu a carregar la pàgina.", + "SSE.Controllers.Main.errorSetPassword": "No s'ha pogut establir la contrasenya.", "SSE.Controllers.Main.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", "SSE.Controllers.Main.errorToken": "El testimoni de seguretat del document no està format correctament.
    Contacteu l'administrador del servidor de documents.", "SSE.Controllers.Main.errorTokenExpire": "El testimoni de seguretat del document ha caducat.
    Contacteu amb l'administrador del Document Server.", @@ -562,6 +685,7 @@ "SSE.Controllers.Main.errorWrongOperator": "Error en la fórmula introduïda. S'utilitza un operador incorrecte.
    Corregiu l'error.", "SSE.Controllers.Main.errRemDuplicates": "Duplica els valors trobats i suprimits: {0}, resten valors únics: {1}.", "SSE.Controllers.Main.leavePageText": "Heu fet canvis no guardats en aquest full de càlcul. Feu clic a \"Continua en aquesta pàgina\" i \"Desa\" per desar-les. Feu clic a \"Deixa aquesta pàgina\" per descartar tots els canvis no desats.", + "SSE.Controllers.Main.leavePageTextOnClose": "Es perdran tots els canvis no desats en aquest full de càlcul.
    Feu clic a «Cancel·la» i després a «Desa» per desar-los. Feu clic a \"D'acord\" per descartar tots els canvis no desats.", "SSE.Controllers.Main.loadFontsTextText": "Carregant dades...", "SSE.Controllers.Main.loadFontsTitleText": "Carregant Dades", "SSE.Controllers.Main.loadFontTextText": "Carregant dades...", @@ -582,6 +706,7 @@ "SSE.Controllers.Main.requestEditFailedMessageText": "Algú està editant aquest document ara mateix. Si us plau, intenta-ho més tard.", "SSE.Controllers.Main.requestEditFailedTitleText": "Accés denegat", "SSE.Controllers.Main.saveErrorText": "S'ha produït un error en desar el fitxer.", + "SSE.Controllers.Main.saveErrorTextDesktop": "Aquest fitxer no es pot desar o crear.
    Les raons possibles són:
    1. El fitxer és de només lectura.
    2. El fitxer està sent editat per altres usuaris.
    3. El disc està ple o corromput.", "SSE.Controllers.Main.savePreparingText": "Preparant per guardar", "SSE.Controllers.Main.savePreparingTitle": "Preparant per guardar. Si us plau, esperi", "SSE.Controllers.Main.saveTextText": "Desant el full de càlcul...", @@ -594,17 +719,22 @@ "SSE.Controllers.Main.textConfirm": "Confirmació", "SSE.Controllers.Main.textContactUs": "Contacte de Vendes", "SSE.Controllers.Main.textCustomLoader": "Tingueu en compte que, segons els termes de la llicència, no teniu dret a canviar el carregador.
    Consulteu el nostre departament de vendes per obtenir un pressupost.", + "SSE.Controllers.Main.textGuest": "Convidat", "SSE.Controllers.Main.textHasMacros": "El fitxer conté macros automàtiques.
    Voleu executar macros?", "SSE.Controllers.Main.textLoadingDocument": "Carregant full de càlcul", + "SSE.Controllers.Main.textLongName": "Introduïu un nom de menys de 128 caràcters.", "SSE.Controllers.Main.textNo": "No", "SSE.Controllers.Main.textNoLicenseTitle": "Heu arribat al límit de la licència", "SSE.Controllers.Main.textPaidFeature": "Funció de Pagament", "SSE.Controllers.Main.textPleaseWait": "L’operació pot trigar més temps del previst. Espereu...", "SSE.Controllers.Main.textRecalcFormulas": "Calculant formules...", - "SSE.Controllers.Main.textRemember": "Recorda la meva elecció", + "SSE.Controllers.Main.textRemember": "Recordar la meva elecció per a tots els fitxers", + "SSE.Controllers.Main.textRenameError": "El nom d'usuari no pot estar buit.", + "SSE.Controllers.Main.textRenameLabel": "Introduïu un nom per a la col·laboració", "SSE.Controllers.Main.textShape": "Forma", "SSE.Controllers.Main.textStrict": "Mode estricte", "SSE.Controllers.Main.textTryUndoRedo": "Les funcions Desfés / Rehabiliteu estan desactivades per al mode de coedició ràpida. Feu clic al botó \"Mode estricte\" per canviar al mode de coedició estricte per editar el fitxer sense que hi hagi interferències d'altres usuaris i enviar els canvis només després de desar-lo ells. Podeu canviar entre els modes de coedició mitjançant l'editor Paràmetres avançats.", + "SSE.Controllers.Main.textTryUndoRedoWarn": "Les funcions Desfer/Refer estan desactivades per al mode de coedició ràpida.", "SSE.Controllers.Main.textYes": "Sí", "SSE.Controllers.Main.titleLicenseExp": "Llicència Caducada", "SSE.Controllers.Main.titleRecalcFormulas": "Calculant...", @@ -623,22 +753,31 @@ "SSE.Controllers.Main.txtColumn": "Columna", "SSE.Controllers.Main.txtConfidential": "Confidencial", "SSE.Controllers.Main.txtDate": "Data", + "SSE.Controllers.Main.txtDays": "Dies", "SSE.Controllers.Main.txtDiagramTitle": "Títol del Gràfic", "SSE.Controllers.Main.txtEditingMode": "Establir el mode d'edició ...", "SSE.Controllers.Main.txtFiguredArrows": "Fletxes Figurades", "SSE.Controllers.Main.txtFile": "Fitxer", "SSE.Controllers.Main.txtGrandTotal": "Total General", + "SSE.Controllers.Main.txtGroup": "Grup", + "SSE.Controllers.Main.txtHours": "hores", "SSE.Controllers.Main.txtLines": "Línies", "SSE.Controllers.Main.txtMath": "Matemàtiques", + "SSE.Controllers.Main.txtMinutes": "Minuts", + "SSE.Controllers.Main.txtMonths": "Mesos", "SSE.Controllers.Main.txtMultiSelect": "Selecció Múltiple (Alt+S)", + "SSE.Controllers.Main.txtOr": "%1 o %2", "SSE.Controllers.Main.txtPage": "Pàgina", "SSE.Controllers.Main.txtPageOf": "Pàgina %1 de %2", "SSE.Controllers.Main.txtPages": "Pàgines", "SSE.Controllers.Main.txtPreparedBy": "Preparat per", "SSE.Controllers.Main.txtPrintArea": "Àrea d'Impressió", + "SSE.Controllers.Main.txtQuarter": "Qtr", + "SSE.Controllers.Main.txtQuarters": "Trimestres", "SSE.Controllers.Main.txtRectangles": "Rectangles", "SSE.Controllers.Main.txtRow": "Fila", "SSE.Controllers.Main.txtRowLbls": "Etiquetes de Fila", + "SSE.Controllers.Main.txtSeconds": "Segons", "SSE.Controllers.Main.txtSeries": "Serie", "SSE.Controllers.Main.txtShape_accentBorderCallout1": "Trucada amb Línia 1 (Vora i Barra d'Èmfasis)", "SSE.Controllers.Main.txtShape_accentBorderCallout2": "Trucada amb Línia 2 (Vora i Barra d'Èmfasis)", @@ -786,16 +925,16 @@ "SSE.Controllers.Main.txtShape_snip2SameRect": "Retallar Rectangle de la cantonada del mateix costat", "SSE.Controllers.Main.txtShape_snipRoundRect": "Retallar i Rondejar rectangle de cantonada senzilla", "SSE.Controllers.Main.txtShape_spline": "Corba", - "SSE.Controllers.Main.txtShape_star10": "10-Punt Principal", - "SSE.Controllers.Main.txtShape_star12": "12-Punt Principal", - "SSE.Controllers.Main.txtShape_star16": "16-Punt Principal", - "SSE.Controllers.Main.txtShape_star24": "24-Punt Principal", - "SSE.Controllers.Main.txtShape_star32": "32-Punt Principal", - "SSE.Controllers.Main.txtShape_star4": "4-Punt Principal", - "SSE.Controllers.Main.txtShape_star5": "5-Punt Principal", - "SSE.Controllers.Main.txtShape_star6": "6-Punt Principal", - "SSE.Controllers.Main.txtShape_star7": "7-Punt Principal", - "SSE.Controllers.Main.txtShape_star8": "8-Punt Principal", + "SSE.Controllers.Main.txtShape_star10": "Estrella de 10 puntes", + "SSE.Controllers.Main.txtShape_star12": "Estrella de 12 puntes", + "SSE.Controllers.Main.txtShape_star16": "Estrella de 16 puntes", + "SSE.Controllers.Main.txtShape_star24": "Estrella de 24 puntes", + "SSE.Controllers.Main.txtShape_star32": "Estrella de 32 puntes", + "SSE.Controllers.Main.txtShape_star4": "Estrella de 4 puntes", + "SSE.Controllers.Main.txtShape_star5": "Estrella de 5 puntes", + "SSE.Controllers.Main.txtShape_star6": "Estrella de 6 puntes", + "SSE.Controllers.Main.txtShape_star7": "Estrella de 7 puntes", + "SSE.Controllers.Main.txtShape_star8": "Estrella de 8 puntes", "SSE.Controllers.Main.txtShape_stripedRightArrow": "Fletxa a la dreta amb bandes", "SSE.Controllers.Main.txtShape_sun": "Sol", "SSE.Controllers.Main.txtShape_teardrop": "Llàgrima", @@ -839,6 +978,7 @@ "SSE.Controllers.Main.txtValues": "Valors", "SSE.Controllers.Main.txtXAxis": "Eix X", "SSE.Controllers.Main.txtYAxis": "Eix Y", + "SSE.Controllers.Main.txtYears": "Anys", "SSE.Controllers.Main.unknownErrorText": "Error Desconegut.", "SSE.Controllers.Main.unsupportedBrowserErrorText": "El vostre navegador no és compatible.", "SSE.Controllers.Main.uploadImageExtMessage": "Format imatge desconegut.", @@ -851,6 +991,8 @@ "SSE.Controllers.Main.warnBrowserZoom": "La configuració del zoom actual del navegador no és totalment compatible. Restabliu el zoom per defecte prement Ctrl+0.", "SSE.Controllers.Main.warnLicenseExceeded": "S'ha superat el nombre de connexions simultànies al servidor de documents i el document s'obrirà només per a la seva visualització.
    Contacteu l'administrador per obtenir més informació.", "SSE.Controllers.Main.warnLicenseExp": "La seva llicencia ha caducat.
    Si us plau, actualitzi la llicencia i recarregui la pàgina.", + "SSE.Controllers.Main.warnLicenseLimitedNoAccess": "La llicència ha caducat.
    No teniu accés a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador.", + "SSE.Controllers.Main.warnLicenseLimitedRenewed": "Cal renovar la llicència.
    Teniu un accés limitat a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador per obtenir accés complet", "SSE.Controllers.Main.warnLicenseUsersExceeded": "S'ha superat el nombre d'usuaris concurrents i el document s'obrirà només per a la seva visualització.
    Per més informació, poseu-vos en contacte amb l'administrador.", "SSE.Controllers.Main.warnNoLicense": "Heu arribat al límit de connexions simultànies per als editors %1. Aquest document s'obrirà al mode de només lectura. Contacteu l'equip de vendes %1 per a les condicions personals de millora del servei.", "SSE.Controllers.Main.warnNoLicenseUsers": "Heu arribat al límit d'usuaris concurrents per a editors %1.
    Contactau l'equip de vendes per als termes de millora personal dels vostres serveis.", @@ -871,16 +1013,20 @@ "SSE.Controllers.Statusbar.errorRemoveSheet": "No es pot suprimir el full de treball.", "SSE.Controllers.Statusbar.strSheet": "Full", "SSE.Controllers.Statusbar.textSheetViewTip": "Esteu en mode de visualització de fulls. Els filtres i l'ordenació només són visibles per a vosaltres i per a aquells que encara estan en aquesta visualització.", + "SSE.Controllers.Statusbar.textSheetViewTipFilters": "Esteu en mode de vista del full. Els filtres només són visibles per a vós i per a aquells que encara estan en aquesta vista.", "SSE.Controllers.Statusbar.warnDeleteSheet": "Els fulls de treball seleccionats poden contenir dades. Esteu segur que voleu continuar?", "SSE.Controllers.Statusbar.zoomText": "Zoom {0}%", "SSE.Controllers.Toolbar.confirmAddFontName": "El tipus de lletra que guardareu no està disponible al dispositiu actual.
    L'estil de text es mostrarà amb un dels tipus de lletra del sistema, el tipus de lletra desat s'utilitzarà quan estigui disponible.
    Voleu continuar ?", + "SSE.Controllers.Toolbar.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", "SSE.Controllers.Toolbar.errorMaxRows": "ERROR! El nombre màxim de sèries de dades per gràfic és de 255", "SSE.Controllers.Toolbar.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", "SSE.Controllers.Toolbar.textAccent": "Accents", "SSE.Controllers.Toolbar.textBracket": "Claudàtor", + "SSE.Controllers.Toolbar.textDirectional": "Direccional", "SSE.Controllers.Toolbar.textFontSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor numèric entre 1 i 409", "SSE.Controllers.Toolbar.textFraction": "Fraccions", "SSE.Controllers.Toolbar.textFunction": "Funcions", + "SSE.Controllers.Toolbar.textIndicator": "Indicadors", "SSE.Controllers.Toolbar.textInsert": "Insertar", "SSE.Controllers.Toolbar.textIntegral": "Integrals", "SSE.Controllers.Toolbar.textLargeOperator": "Operadors Grans", @@ -890,7 +1036,9 @@ "SSE.Controllers.Toolbar.textOperator": "Operadors", "SSE.Controllers.Toolbar.textPivot": "Taula Clau", "SSE.Controllers.Toolbar.textRadical": "Radicals", + "SSE.Controllers.Toolbar.textRating": "Valoracions", "SSE.Controllers.Toolbar.textScript": "Índexs", + "SSE.Controllers.Toolbar.textShapes": "Formes", "SSE.Controllers.Toolbar.textSymbols": "Símbols", "SSE.Controllers.Toolbar.textWarning": "Avis", "SSE.Controllers.Toolbar.txtAccent_Accent": "Agut", @@ -906,7 +1054,7 @@ "SSE.Controllers.Toolbar.txtAccent_CurveBracketBot": "Clau Subjacent", "SSE.Controllers.Toolbar.txtAccent_CurveBracketTop": "Clau Superposada", "SSE.Controllers.Toolbar.txtAccent_Custom_1": "Vector A", - "SSE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra", + "SSE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra a sobre", "SSE.Controllers.Toolbar.txtAccent_Custom_3": "x XOR i amb barra sobreposada", "SSE.Controllers.Toolbar.txtAccent_DDDot": "Tres punts", "SSE.Controllers.Toolbar.txtAccent_DDot": "Doble punt", @@ -1071,28 +1219,28 @@ "SSE.Controllers.Toolbar.txtLimitLog_LogBase": "Logaritme", "SSE.Controllers.Toolbar.txtLimitLog_Max": "Màxim", "SSE.Controllers.Toolbar.txtLimitLog_Min": "Mínim", - "SSE.Controllers.Toolbar.txtMatrix_1_2": "1x2 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_1_3": "1x3 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_2_1": "2x1 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_2_2": "2x2 matriu buida", + "SSE.Controllers.Toolbar.txtMatrix_1_2": "Matriu buida 1x2", + "SSE.Controllers.Toolbar.txtMatrix_1_3": "Matriu buida 1x3", + "SSE.Controllers.Toolbar.txtMatrix_2_1": "Matriu buida 2x1", + "SSE.Controllers.Toolbar.txtMatrix_2_2": "Matriu buida 2x2", "SSE.Controllers.Toolbar.txtMatrix_2_2_DLineBracket": "Matriu buida amb claudàtors", "SSE.Controllers.Toolbar.txtMatrix_2_2_LineBracket": "Matriu buida amb claudàtors", "SSE.Controllers.Toolbar.txtMatrix_2_2_RoundBracket": "Matriu buida amb claudàtors", "SSE.Controllers.Toolbar.txtMatrix_2_2_SquareBracket": "Matriu buida amb claudàtors", - "SSE.Controllers.Toolbar.txtMatrix_2_3": "2x3 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_3_1": "3x1 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_3_2": "3x2 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_3_3": "3s3 matriu buida", + "SSE.Controllers.Toolbar.txtMatrix_2_3": "Matriu buida 2x3 ", + "SSE.Controllers.Toolbar.txtMatrix_3_1": "Matriu buida 3x1", + "SSE.Controllers.Toolbar.txtMatrix_3_2": "Matriu buida 3x2", + "SSE.Controllers.Toolbar.txtMatrix_3_3": "Matriu buida 3x3", "SSE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts Subíndexs", "SSE.Controllers.Toolbar.txtMatrix_Dots_Center": "Punts en línia mitja", "SSE.Controllers.Toolbar.txtMatrix_Dots_Diagonal": "Punts en diagonal", "SSE.Controllers.Toolbar.txtMatrix_Dots_Vertical": "Punts Verticals", "SSE.Controllers.Toolbar.txtMatrix_Flat_Round": "Matriu escassa", "SSE.Controllers.Toolbar.txtMatrix_Flat_Square": "Matriu escassa", - "SSE.Controllers.Toolbar.txtMatrix_Identity_2": "2x2 matriu d’identitat", - "SSE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "3x3 matriu d’identitat", - "SSE.Controllers.Toolbar.txtMatrix_Identity_3": "3x3 matriu d’identitat", - "SSE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "3x3 matriu d’identitat", + "SSE.Controllers.Toolbar.txtMatrix_Identity_2": "Matriu d’identitat 2x2", + "SSE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "Matriu d’identitat 3x3", + "SSE.Controllers.Toolbar.txtMatrix_Identity_3": "Matriu d’identitat 3x3", + "SSE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "Matriu d’identitat 3x3", "SSE.Controllers.Toolbar.txtOperator_ArrowD_Bot": "Fletxa dreta-esquerra inferior", "SSE.Controllers.Toolbar.txtOperator_ArrowD_Top": "Fletxa dreta-esquerra superior", "SSE.Controllers.Toolbar.txtOperator_ArrowL_Bot": "Fletxa inferior cap a esquerra", @@ -1232,7 +1380,7 @@ "SSE.Views.AdvancedSeparatorDialog.textTitle": "Configuració Avançada", "SSE.Views.AutoFilterDialog.btnCustomFilter": "Filtre Personalitzat", "SSE.Views.AutoFilterDialog.textAddSelection": "Afegiu la selecció actual al filtre", - "SSE.Views.AutoFilterDialog.textEmptyItem": "{Buits}", + "SSE.Views.AutoFilterDialog.textEmptyItem": "{En blanc}", "SSE.Views.AutoFilterDialog.textSelectAll": "Selecciona-ho tot ", "SSE.Views.AutoFilterDialog.textSelectAllResults": "Seleccionar Tots els Resultats de la Cerca", "SSE.Views.AutoFilterDialog.textWarning": "Avis", @@ -1284,15 +1432,23 @@ "SSE.Views.CellSettings.textBackground": "Color de Fons", "SSE.Views.CellSettings.textBorderColor": "Color", "SSE.Views.CellSettings.textBorders": "Estil de la Vora", + "SSE.Views.CellSettings.textClearRule": "Netejar les regles", "SSE.Views.CellSettings.textColor": "Omplir de Color", + "SSE.Views.CellSettings.textColorScales": "Escala de color", + "SSE.Views.CellSettings.textCondFormat": "Format condicional", "SSE.Views.CellSettings.textControl": "Control de Text", + "SSE.Views.CellSettings.textDataBars": "Barra de Dades", "SSE.Views.CellSettings.textDirection": "Direcció", "SSE.Views.CellSettings.textFill": "Omplir", "SSE.Views.CellSettings.textForeground": "Color de Primer Pla", "SSE.Views.CellSettings.textGradient": "Punts de Degradat", "SSE.Views.CellSettings.textGradientColor": "Color", "SSE.Views.CellSettings.textGradientFill": "Omplir Degradat", + "SSE.Views.CellSettings.textIndent": "Sagnat", + "SSE.Views.CellSettings.textItems": "Elements", "SSE.Views.CellSettings.textLinear": "Lineal", + "SSE.Views.CellSettings.textManageRule": "Gestionar Regles", + "SSE.Views.CellSettings.textNewRule": "Nova regla", "SSE.Views.CellSettings.textNoFill": "Sense Omplir", "SSE.Views.CellSettings.textOrientation": "Orientació del Text", "SSE.Views.CellSettings.textPattern": "Patró", @@ -1300,6 +1456,10 @@ "SSE.Views.CellSettings.textPosition": "Posició", "SSE.Views.CellSettings.textRadial": "Radial", "SSE.Views.CellSettings.textSelectBorders": "Seleccioneu les vores que vulgueu canviar aplicant l'estil escollit anteriorment", + "SSE.Views.CellSettings.textSelection": "Des de la selecció actual", + "SSE.Views.CellSettings.textThisPivot": "Des d'aquesta taula pivot", + "SSE.Views.CellSettings.textThisSheet": "Des d'aquest full de treball", + "SSE.Views.CellSettings.textThisTable": "Des d'aquesta taula", "SSE.Views.CellSettings.tipAddGradientPoint": "Afegir punt de degradat", "SSE.Views.CellSettings.tipAll": "Establir el límit exterior i totes les línies interiors", "SSE.Views.CellSettings.tipBottom": "Establir només la vora inferior exterior", @@ -1355,6 +1515,7 @@ "SSE.Views.ChartSettings.strTemplate": "Plantilla", "SSE.Views.ChartSettings.textAdvanced": "Mostra la configuració avançada", "SSE.Views.ChartSettings.textBorderSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor entre 0 pt i 1584 pt.", + "SSE.Views.ChartSettings.textChangeType": "Canvia el tipus", "SSE.Views.ChartSettings.textChartType": "Canviar el tipus de gràfic", "SSE.Views.ChartSettings.textEditData": "Editar Dades i Ubicació", "SSE.Views.ChartSettings.textFirstPoint": "Primer Punt", @@ -1386,6 +1547,7 @@ "SSE.Views.ChartSettingsDlg.textAxisOptions": "Opcions de l’Eix", "SSE.Views.ChartSettingsDlg.textAxisPos": "Posició de l’Eix", "SSE.Views.ChartSettingsDlg.textAxisSettings": "Configuració de l’Eix", + "SSE.Views.ChartSettingsDlg.textAxisTitle": "Títol", "SSE.Views.ChartSettingsDlg.textBetweenTickMarks": "Entre Marques de Graduació", "SSE.Views.ChartSettingsDlg.textBillions": "Bilions", "SSE.Views.ChartSettingsDlg.textBottom": "Inferior", @@ -1403,12 +1565,15 @@ "SSE.Views.ChartSettingsDlg.textEmptyLine": "Connectar punts de dades amb línies", "SSE.Views.ChartSettingsDlg.textFit": "Ajusta a Amplada", "SSE.Views.ChartSettingsDlg.textFixed": "Fixat", + "SSE.Views.ChartSettingsDlg.textFormat": "Format de l'etiqueta", "SSE.Views.ChartSettingsDlg.textGaps": "Bretxa", "SSE.Views.ChartSettingsDlg.textGridLines": "Quadrícules", "SSE.Views.ChartSettingsDlg.textGroup": "Agrupar sparkline", "SSE.Views.ChartSettingsDlg.textHide": "Amagar", + "SSE.Views.ChartSettingsDlg.textHideAxis": "Amagar eix", "SSE.Views.ChartSettingsDlg.textHigh": "Alt", "SSE.Views.ChartSettingsDlg.textHorAxis": "Eix Horitzontal", + "SSE.Views.ChartSettingsDlg.textHorAxisSec": "Eix Horitzontal secundari", "SSE.Views.ChartSettingsDlg.textHorizontal": "Horitzontal", "SSE.Views.ChartSettingsDlg.textHundredMil": "100 000 000", "SSE.Views.ChartSettingsDlg.textHundreds": "Centenars", @@ -1486,10 +1651,18 @@ "SSE.Views.ChartSettingsDlg.textUnits": "Unitats de Visualització", "SSE.Views.ChartSettingsDlg.textValue": "Valor", "SSE.Views.ChartSettingsDlg.textVertAxis": "Eix Vertical", + "SSE.Views.ChartSettingsDlg.textVertAxisSec": "Eix Vertical Secundari", "SSE.Views.ChartSettingsDlg.textXAxisTitle": "Títol Eix X", "SSE.Views.ChartSettingsDlg.textYAxisTitle": "Títol Eix Y", "SSE.Views.ChartSettingsDlg.textZero": "Zero", "SSE.Views.ChartSettingsDlg.txtEmpty": "Aquest camp és obligatori", + "SSE.Views.ChartTypeDialog.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", + "SSE.Views.ChartTypeDialog.errorSecondaryAxis": "El tipus de diagrama seleccionat requereix l'eix secundari que utilitza un diagrama existent. Seleccioneu un altre tipus de diagrama.", + "SSE.Views.ChartTypeDialog.textSecondary": "Eix secundari", + "SSE.Views.ChartTypeDialog.textSeries": "Serie", + "SSE.Views.ChartTypeDialog.textStyle": "Estil", + "SSE.Views.ChartTypeDialog.textTitle": "Tipus de diagrama", + "SSE.Views.ChartTypeDialog.textType": "Tipus", "SSE.Views.CreatePivotDialog.textDataRange": "Interval de dades d'origen", "SSE.Views.CreatePivotDialog.textDestination": "Trieu on col·locar la taula", "SSE.Views.CreatePivotDialog.textExist": "Full de treball existent", @@ -1498,11 +1671,21 @@ "SSE.Views.CreatePivotDialog.textSelectData": "Seleccionar dades", "SSE.Views.CreatePivotDialog.textTitle": "Crear Taula Dinàmica", "SSE.Views.CreatePivotDialog.txtEmpty": "Aquest camp és obligatori", + "SSE.Views.CreateSparklineDialog.textDataRange": "Interval de dades d'origen", + "SSE.Views.CreateSparklineDialog.textDestination": "Trieu, on s'han de situar les sparklines", + "SSE.Views.CreateSparklineDialog.textInvalidRange": "Interval de cel·les no vàlid", + "SSE.Views.CreateSparklineDialog.textSelectData": "Seleccionar dades", + "SSE.Views.CreateSparklineDialog.textTitle": "Crear Sparklines", + "SSE.Views.CreateSparklineDialog.txtEmpty": "Aquest camp és obligatori", "SSE.Views.DataTab.capBtnGroup": "Agrupar", "SSE.Views.DataTab.capBtnTextCustomSort": "Classificació Personalitzada", + "SSE.Views.DataTab.capBtnTextDataValidation": "Validació de dades", "SSE.Views.DataTab.capBtnTextRemDuplicates": "Eliminar els Duplicats", "SSE.Views.DataTab.capBtnTextToCol": "Text en Columnes", "SSE.Views.DataTab.capBtnUngroup": "Des agrupar", + "SSE.Views.DataTab.capDataFromText": "Des de text/CSV", + "SSE.Views.DataTab.mniFromFile": "Obtenir Dades des de Fitxer", + "SSE.Views.DataTab.mniFromUrl": "Obtenir dades des de l'URL", "SSE.Views.DataTab.textBelow": "Sumar les files a sota del detall", "SSE.Views.DataTab.textClear": "Esborrar esquema", "SSE.Views.DataTab.textColumns": "Des agrupar columnes", @@ -1511,10 +1694,74 @@ "SSE.Views.DataTab.textRightOf": "Sumar les columnes a la dreta de detall", "SSE.Views.DataTab.textRows": "Des agrupar files", "SSE.Views.DataTab.tipCustomSort": "Classificació Personalitzada", + "SSE.Views.DataTab.tipDataFromText": "Obtenir dades des de fitxer Text/CSV", + "SSE.Views.DataTab.tipDataValidation": "Validació de dades", "SSE.Views.DataTab.tipGroup": "Agrupar rang de cel·les", "SSE.Views.DataTab.tipRemDuplicates": "Eliminar les files duplicades d'un full", "SSE.Views.DataTab.tipToColumns": "Separa el text de la cel·la en columnes", "SSE.Views.DataTab.tipUngroup": "Des agrupar rang de cel·les", + "SSE.Views.DataValidationDialog.errorFormula": "El valor actualment s’avalua com a error. Vols continuar?", + "SSE.Views.DataValidationDialog.errorInvalid": "El valor que heu introduït per al camp \"{0}\" no és vàlid.", + "SSE.Views.DataValidationDialog.errorInvalidDate": "La data que heu introduït per al camp \"{0}\" no és vàlida.", + "SSE.Views.DataValidationDialog.errorInvalidList": "L'origen de la llista ha de ser una llista delimitada, o una referència a una sola fila o columna.", + "SSE.Views.DataValidationDialog.errorInvalidTime": "El temps que heu introduït per al camp \"{0}\" no és vàlid.", + "SSE.Views.DataValidationDialog.errorMinGreaterMax": "El camp \"{1}\" ha de ser més gran o igual que el camp \"{0}\".", + "SSE.Views.DataValidationDialog.errorMustEnterBothValues": "Heu d'introduir un valor tant al camp \"{0}\" com al camp \"{1}\".", + "SSE.Views.DataValidationDialog.errorMustEnterValue": "Heu d'introduir un valor al camp \"{0}\".", + "SSE.Views.DataValidationDialog.errorNamedRange": "No es pot trobar l'interval amb nom que heu especificat.", + "SSE.Views.DataValidationDialog.errorNegativeTextLength": "Els valors negatius no es poden utilitzar en les condicions \"{0}\".", + "SSE.Views.DataValidationDialog.errorNotNumeric": "El camp \"{0}\" ha de ser un valor numèric, una expressió numèrica, o referir-se a una cel·la que contingui un valor numèric.", + "SSE.Views.DataValidationDialog.strError": "Avís d'error", + "SSE.Views.DataValidationDialog.strInput": "Missatge d'entrada", + "SSE.Views.DataValidationDialog.strSettings": "Configuració", + "SSE.Views.DataValidationDialog.textAlert": "Alerta", + "SSE.Views.DataValidationDialog.textAllow": "Permetre", + "SSE.Views.DataValidationDialog.textApply": "Aplica aquests canvis a totes les altres cel·les amb la mateixa configuració", + "SSE.Views.DataValidationDialog.textCellSelected": "Quan la cel·la estigui seleccionada, mostra aquest missatge d'entrada", + "SSE.Views.DataValidationDialog.textCompare": "Comparar amb", + "SSE.Views.DataValidationDialog.textData": "Dades", + "SSE.Views.DataValidationDialog.textEndDate": "Data final", + "SSE.Views.DataValidationDialog.textEndTime": "Hora final", + "SSE.Views.DataValidationDialog.textError": "Missatge d'error", + "SSE.Views.DataValidationDialog.textFormula": "Fórmula", + "SSE.Views.DataValidationDialog.textIgnore": "Ignora en blanc", + "SSE.Views.DataValidationDialog.textInput": "Missatge d'entrada", + "SSE.Views.DataValidationDialog.textMax": "Màxim", + "SSE.Views.DataValidationDialog.textMessage": "Missatge", + "SSE.Views.DataValidationDialog.textMin": "Mínim", + "SSE.Views.DataValidationDialog.textSelectData": "Seleccionar dades", + "SSE.Views.DataValidationDialog.textShowDropDown": "Mostrar la llista desplegable a la cel·la", + "SSE.Views.DataValidationDialog.textShowError": "Mostra l'alerta d'error després d'introduir dades no vàlides", + "SSE.Views.DataValidationDialog.textShowInput": "Mostra el missatge d'entrada quan se seleccioni la cel·la", + "SSE.Views.DataValidationDialog.textSource": "Font", + "SSE.Views.DataValidationDialog.textStartDate": "Data d'inici", + "SSE.Views.DataValidationDialog.textStartTime": "Hora d'inici", + "SSE.Views.DataValidationDialog.textStop": "Aturar", + "SSE.Views.DataValidationDialog.textStyle": "Estil", + "SSE.Views.DataValidationDialog.textTitle": "Títol", + "SSE.Views.DataValidationDialog.textUserEnters": "Quan l'usuari introdueix dades no vàlides, mostra aquesta alerta d'error", + "SSE.Views.DataValidationDialog.txtAny": "Qualsevol valor", + "SSE.Views.DataValidationDialog.txtBetween": "entre", + "SSE.Views.DataValidationDialog.txtDate": "Data", + "SSE.Views.DataValidationDialog.txtDecimal": "Decimal", + "SSE.Views.DataValidationDialog.txtElTime": "Temps transcorregut", + "SSE.Views.DataValidationDialog.txtEndDate": "Data Límit", + "SSE.Views.DataValidationDialog.txtEndTime": "Hora final", + "SSE.Views.DataValidationDialog.txtEqual": "Igual", + "SSE.Views.DataValidationDialog.txtGreaterThan": "més gran que", + "SSE.Views.DataValidationDialog.txtGreaterThanOrEqual": "més gran o igual a", + "SSE.Views.DataValidationDialog.txtLength": "Longitud", + "SSE.Views.DataValidationDialog.txtLessThan": "menor que", + "SSE.Views.DataValidationDialog.txtLessThanOrEqual": "menor o igual a", + "SSE.Views.DataValidationDialog.txtList": "Llista", + "SSE.Views.DataValidationDialog.txtNotBetween": "no entre", + "SSE.Views.DataValidationDialog.txtNotEqual": "No igual a", + "SSE.Views.DataValidationDialog.txtOther": "Altre", + "SSE.Views.DataValidationDialog.txtStartDate": "Data d'inici", + "SSE.Views.DataValidationDialog.txtStartTime": "Hora d'inici", + "SSE.Views.DataValidationDialog.txtTextLength": "Longitud del text", + "SSE.Views.DataValidationDialog.txtTime": "Hora", + "SSE.Views.DataValidationDialog.txtWhole": "Nombre sencer", "SSE.Views.DigitalFilterDialog.capAnd": "I", "SSE.Views.DigitalFilterDialog.capCondition1": "és igual", "SSE.Views.DigitalFilterDialog.capCondition10": "no acaba amb", @@ -1539,7 +1786,7 @@ "SSE.Views.DocumentHolder.advancedSlicerText": "Slicer Configuració Avançada", "SSE.Views.DocumentHolder.bottomCellText": "Alineació Inferior", "SSE.Views.DocumentHolder.bulletsText": "Vinyetes i Numeració", - "SSE.Views.DocumentHolder.centerCellText": "Alinear al Mig", + "SSE.Views.DocumentHolder.centerCellText": "Alineació al Mig", "SSE.Views.DocumentHolder.chartText": "Configuració Avançada del Gràfic", "SSE.Views.DocumentHolder.deleteColumnText": "Columna", "SSE.Views.DocumentHolder.deleteRowText": "Fila", @@ -1571,6 +1818,7 @@ "SSE.Views.DocumentHolder.textArrangeForward": "Portar Endavant", "SSE.Views.DocumentHolder.textArrangeFront": "Porta a Primer pla", "SSE.Views.DocumentHolder.textAverage": "Mitjana", + "SSE.Views.DocumentHolder.textBullets": "Vinyetes", "SSE.Views.DocumentHolder.textCount": "Contar", "SSE.Views.DocumentHolder.textCrop": "Retallar", "SSE.Views.DocumentHolder.textCropFill": "Omplir", @@ -1583,27 +1831,29 @@ "SSE.Views.DocumentHolder.textFromStorage": "Des d'Emmagatzematge", "SSE.Views.DocumentHolder.textFromUrl": "Des d'un Enllaç", "SSE.Views.DocumentHolder.textListSettings": "Configuració de la Llista", + "SSE.Views.DocumentHolder.textMacro": "Assignar Macro", "SSE.Views.DocumentHolder.textMax": "Max", "SSE.Views.DocumentHolder.textMin": "Min", "SSE.Views.DocumentHolder.textMore": "Més funcions", "SSE.Views.DocumentHolder.textMoreFormats": "Altres formats", "SSE.Views.DocumentHolder.textNone": "Cap", + "SSE.Views.DocumentHolder.textNumbering": "Numeració", "SSE.Views.DocumentHolder.textReplace": "Canviar imatge", "SSE.Views.DocumentHolder.textRotate": "Girar", "SSE.Views.DocumentHolder.textRotate270": "Girar 90° a l'esquerra", "SSE.Views.DocumentHolder.textRotate90": "Girar 90° a la dreta", "SSE.Views.DocumentHolder.textShapeAlignBottom": "Alineació Inferior", "SSE.Views.DocumentHolder.textShapeAlignCenter": "Centrar", - "SSE.Views.DocumentHolder.textShapeAlignLeft": "Alinear Esquerra", - "SSE.Views.DocumentHolder.textShapeAlignMiddle": "Alinear al Mig", - "SSE.Views.DocumentHolder.textShapeAlignRight": "Alinear Dreta", - "SSE.Views.DocumentHolder.textShapeAlignTop": "Alinear Superior", + "SSE.Views.DocumentHolder.textShapeAlignLeft": "Alineació Esquerra", + "SSE.Views.DocumentHolder.textShapeAlignMiddle": "Alineació al Mig", + "SSE.Views.DocumentHolder.textShapeAlignRight": "Alineació Dreta", + "SSE.Views.DocumentHolder.textShapeAlignTop": "Alineació Superior", "SSE.Views.DocumentHolder.textStdDev": "StdDev", "SSE.Views.DocumentHolder.textSum": "Suma", "SSE.Views.DocumentHolder.textUndo": "Desfer", "SSE.Views.DocumentHolder.textUnFreezePanes": "Descongelar Panells", "SSE.Views.DocumentHolder.textVar": "Var", - "SSE.Views.DocumentHolder.topCellText": "Alinear Superior", + "SSE.Views.DocumentHolder.topCellText": "Alineació Superior", "SSE.Views.DocumentHolder.txtAccounting": "Comptabilitat", "SSE.Views.DocumentHolder.txtAddComment": "Afegir Comentari", "SSE.Views.DocumentHolder.txtAddNamedRange": "Definiu el Nom", @@ -1625,6 +1875,7 @@ "SSE.Views.DocumentHolder.txtCurrency": "Moneda", "SSE.Views.DocumentHolder.txtCustomColumnWidth": "Amplada de Columna Personalitzada", "SSE.Views.DocumentHolder.txtCustomRowHeight": "Alçada de Fila Personalitzada", + "SSE.Views.DocumentHolder.txtCustomSort": "Ordenació personalitzada", "SSE.Views.DocumentHolder.txtCut": "Tallar", "SSE.Views.DocumentHolder.txtDate": "Data", "SSE.Views.DocumentHolder.txtDelete": "Esborra", @@ -1663,7 +1914,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Color de la Font Seleccionada a la part superior", "SSE.Views.DocumentHolder.txtSparklines": "Sparklines", "SSE.Views.DocumentHolder.txtText": "Text", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Configuració Avançada de Text", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Configuració Avançada del Paràgraf", "SSE.Views.DocumentHolder.txtTime": "Hora", "SSE.Views.DocumentHolder.txtUngroup": "Des agrupar", "SSE.Views.DocumentHolder.txtWidth": "Amplada", @@ -1756,6 +2007,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.strResolvedComment": "Activa la visualització dels comentaris resolts", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strSeparator": "Separador", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strStrict": "Estricte", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strTheme": "Tema de la interfície", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strThousandsSeparator": "Separador de milers", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strUnit": "Unitat de Mesura", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strUseSeparatorsBasedOnRegionalSettings": "Utilitzeu separadors en funció de la configuració regional", @@ -1767,30 +2019,54 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Auto recuperació", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Guardar Automàticament", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Desactivat", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Desar al Servidor", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Desant versions intermèdies", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Cada Minut", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Estil de Referència", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Bielorús", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBg": "Búlgar", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCa": "Català", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCacheMode": "Mode de memòria cau per defecte", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCm": "Centímetre", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCs": "Txec", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDa": "Danès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Alemany", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEl": "Grec", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEn": "Anglès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEs": "Castellà", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtFi": "Finlandès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtFr": "Francès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtHu": "Hongarès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtId": "Indonesi", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInch": "Polzada", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtIt": "Italià", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtJa": "Japonès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtKo": "Coreà", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLiveComment": "Visualització de Comentaris", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLo": "Lao", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLv": "Letó", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtMac": "a OS X", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNative": "Natiu", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNb": "Noruec", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNl": "Holandès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPl": "Polonès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Punt", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPtlang": "Portuguès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRo": "Romanès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Rus", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacros": "Activa Tot", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacrosDesc": "Habiliteu totes les macros sense una notificació", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSk": "Eslovac", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSl": "Eslovè", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacros": "Inhabilita tot", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacrosDesc": "Desactiveu totes les macros sense una notificació", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSv": "Suec", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtTr": "Turc", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtUk": "Ucraïnès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtVi": "Vietnamita", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacros": "Mostra la Notificació", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacrosDesc": "Desactiveu totes les macros amb una notificació", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "a Windows", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtZh": "Xinès", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.okButtonText": "Aplicar", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strDictionaryLanguage": "Diccionari Idioma", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strIgnoreWordsInUPPERCASE": "Ignorar les paraules a UPPERCASE", @@ -1811,9 +2087,152 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "General", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Configuració de la Pàgina", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Comprovació Ortogràfica", + "SSE.Views.FormatRulesEditDlg.fillColor": "Color de Fons", + "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Avís", + "SSE.Views.FormatRulesEditDlg.text2Scales": "Escala de 2 colors", + "SSE.Views.FormatRulesEditDlg.text3Scales": "Escala de 3 colors", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Totes les Vores", + "SSE.Views.FormatRulesEditDlg.textAppearance": "Aparença de la barra", + "SSE.Views.FormatRulesEditDlg.textApply": "Aplicar a l'interval", + "SSE.Views.FormatRulesEditDlg.textAutomatic": "Automàtic", + "SSE.Views.FormatRulesEditDlg.textAxis": "Eix", + "SSE.Views.FormatRulesEditDlg.textBarDirection": "Direcció de la barra", + "SSE.Views.FormatRulesEditDlg.textBold": "Negreta", + "SSE.Views.FormatRulesEditDlg.textBorder": "Vora", + "SSE.Views.FormatRulesEditDlg.textBordersColor": "Color de les vores", + "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Estil de Vora", + "SSE.Views.FormatRulesEditDlg.textBottomBorders": "Vores inferiors", + "SSE.Views.FormatRulesEditDlg.textCannotAddCF": "No es pot afegir el format condicional.", + "SSE.Views.FormatRulesEditDlg.textCellMidpoint": "Punt mitjà de cel·la", + "SSE.Views.FormatRulesEditDlg.textCenterBorders": "Vores Verticals Internes", + "SSE.Views.FormatRulesEditDlg.textClear": "Netejar", + "SSE.Views.FormatRulesEditDlg.textColor": "Color de text", + "SSE.Views.FormatRulesEditDlg.textContext": "Context", + "SSE.Views.FormatRulesEditDlg.textCustom": "Personalitzat", + "SSE.Views.FormatRulesEditDlg.textDiagDownBorder": "Vora Diagonal Descendent", + "SSE.Views.FormatRulesEditDlg.textDiagUpBorder": "Vora Diagonal Ascendent", + "SSE.Views.FormatRulesEditDlg.textEmptyFormula": "Introduïu una fórmula vàlida.", + "SSE.Views.FormatRulesEditDlg.textEmptyFormulaExt": "La fórmula que heu introduït no avalua un número, data, hora o cadena.", + "SSE.Views.FormatRulesEditDlg.textEmptyText": "Introduïu un valor.", + "SSE.Views.FormatRulesEditDlg.textEmptyValue": "El valor que heu introduït no és un número, data, hora o cadena vàlids.", + "SSE.Views.FormatRulesEditDlg.textErrorGreater": "El valor per al {0} ha de ser més gran que el valor per al {1}.", + "SSE.Views.FormatRulesEditDlg.textErrorTop10Between": "Introduïu un número entre {0} i {1}.", + "SSE.Views.FormatRulesEditDlg.textFill": "Omplir", + "SSE.Views.FormatRulesEditDlg.textFormat": "Format", + "SSE.Views.FormatRulesEditDlg.textFormula": "Fórmula", + "SSE.Views.FormatRulesEditDlg.textGradient": "Degradat", + "SSE.Views.FormatRulesEditDlg.textIconLabel": "quan {0} {1} i", + "SSE.Views.FormatRulesEditDlg.textIconLabelFirst": "quan {0} {1}", + "SSE.Views.FormatRulesEditDlg.textIconLabelLast": "quan el valor és", + "SSE.Views.FormatRulesEditDlg.textIconsOverlap": "Un o més intervals de dades d'icones se solapen.
    Ajusteu els valors de l'interval de dades de les icones de manera que no se superposin.", + "SSE.Views.FormatRulesEditDlg.textIconStyle": "Estil de la icona", + "SSE.Views.FormatRulesEditDlg.textInsideBorders": "Vores Internes", + "SSE.Views.FormatRulesEditDlg.textInvalid": "Interval de dades no vàlid.", + "SSE.Views.FormatRulesEditDlg.textInvalidRange": "ERROR! Interval de cel·les no vàlid", + "SSE.Views.FormatRulesEditDlg.textItalic": "Itàlica", + "SSE.Views.FormatRulesEditDlg.textItem": "Element", + "SSE.Views.FormatRulesEditDlg.textLeft2Right": "D'esquerra a dreta", + "SSE.Views.FormatRulesEditDlg.textLeftBorders": "Vores esquerra", + "SSE.Views.FormatRulesEditDlg.textLongBar": "barra més llarga", + "SSE.Views.FormatRulesEditDlg.textMaximum": "Màxim", + "SSE.Views.FormatRulesEditDlg.textMaxpoint": "Punt màxim", + "SSE.Views.FormatRulesEditDlg.textMiddleBorders": "Vores Horitzontals Internes", + "SSE.Views.FormatRulesEditDlg.textMidpoint": "Punt mitjà", + "SSE.Views.FormatRulesEditDlg.textMinimum": "Mínim", + "SSE.Views.FormatRulesEditDlg.textMinpoint": "Punt mínim", + "SSE.Views.FormatRulesEditDlg.textNegative": "Negatiu", + "SSE.Views.FormatRulesEditDlg.textNewColor": "Afegir Nou Color Personalitzat", + "SSE.Views.FormatRulesEditDlg.textNoBorders": "Sense Vores", + "SSE.Views.FormatRulesEditDlg.textNone": "cap", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentage": "Un o més dels valors especificats no és un percentatge vàlid.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentageExt": "El valor {0} especificat no és un percentatge vàlid.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentile": "Un o més dels valors especificats no és un percentil vàlid.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentileExt": "El valor {0} especificat no és un percentil vàlid.", + "SSE.Views.FormatRulesEditDlg.textOutBorders": "Vores Exteriors", + "SSE.Views.FormatRulesEditDlg.textPercent": "Percentatge", + "SSE.Views.FormatRulesEditDlg.textPercentile": "Percentil", + "SSE.Views.FormatRulesEditDlg.textPosition": "Posició", + "SSE.Views.FormatRulesEditDlg.textPositive": "Positiu", + "SSE.Views.FormatRulesEditDlg.textPresets": "Preestablerts", + "SSE.Views.FormatRulesEditDlg.textPreview": "Vista prèvia", + "SSE.Views.FormatRulesEditDlg.textRelativeRef": "No podeu utilitzar referències relatives en criteris de format condicional per a escales de color, barres de dades i conjunts d'icones", + "SSE.Views.FormatRulesEditDlg.textReverse": "Ordre invers d'icones", + "SSE.Views.FormatRulesEditDlg.textRight2Left": "De dreta a esquerra", + "SSE.Views.FormatRulesEditDlg.textRightBorders": "Vores de la dreta", + "SSE.Views.FormatRulesEditDlg.textRule": "Regla", + "SSE.Views.FormatRulesEditDlg.textSameAs": "Igual que positiu", + "SSE.Views.FormatRulesEditDlg.textSelectData": "Seleccionar Dades", + "SSE.Views.FormatRulesEditDlg.textShortBar": "barra més curta", + "SSE.Views.FormatRulesEditDlg.textShowBar": "Mostra només la barra", + "SSE.Views.FormatRulesEditDlg.textShowIcon": "Mostra només la icona", + "SSE.Views.FormatRulesEditDlg.textSingleRef": "Aquest tipus de referència no es pot utilitzar en una fórmula de format condicional.
    Canvia la referència a una única cel·la, o utilitza la referència amb una funció de full de càlcul, com ara =SUMA(A1:B5).", + "SSE.Views.FormatRulesEditDlg.textSolid": "Solid", + "SSE.Views.FormatRulesEditDlg.textStrikeout": "Ratllar", + "SSE.Views.FormatRulesEditDlg.textSubscript": "Subíndex", + "SSE.Views.FormatRulesEditDlg.textSuperscript": "Superíndex", + "SSE.Views.FormatRulesEditDlg.textTopBorders": "Vores Superiors", + "SSE.Views.FormatRulesEditDlg.textUnderline": "Subratllar", + "SSE.Views.FormatRulesEditDlg.tipBorders": "Vores", + "SSE.Views.FormatRulesEditDlg.tipNumFormat": "Format de Número", + "SSE.Views.FormatRulesEditDlg.txtAccounting": "Comptabilitat", + "SSE.Views.FormatRulesEditDlg.txtCurrency": "Moneda", + "SSE.Views.FormatRulesEditDlg.txtDate": "Data", + "SSE.Views.FormatRulesEditDlg.txtEmpty": "Aquest camp és obligatori", + "SSE.Views.FormatRulesEditDlg.txtFraction": "Fracció", + "SSE.Views.FormatRulesEditDlg.txtGeneral": "General", + "SSE.Views.FormatRulesEditDlg.txtNumber": "Número", + "SSE.Views.FormatRulesEditDlg.txtPercentage": "Percentatge", + "SSE.Views.FormatRulesEditDlg.txtScientific": "Científic", + "SSE.Views.FormatRulesEditDlg.txtText": "Text", + "SSE.Views.FormatRulesEditDlg.txtTime": "Hora", + "SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Editar regla de format", + "SSE.Views.FormatRulesEditDlg.txtTitleNew": "Nova regla de format", + "SSE.Views.FormatRulesManagerDlg.guestText": "Convidat", + "SSE.Views.FormatRulesManagerDlg.text1Above": "1 per sobre la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text1Below": "1 per sota la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text2Above": "2 per sobre la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text2Below": "2 per sota la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text3Above": "3 per sobre la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text3Below": "3 per sota la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.textAbove": "Per sobre de la mitja", + "SSE.Views.FormatRulesManagerDlg.textApply": "Aplicar a", + "SSE.Views.FormatRulesManagerDlg.textBeginsWith": "El valor de la cel·la comença amb", + "SSE.Views.FormatRulesManagerDlg.textBelow": "Per sota de la mitja", + "SSE.Views.FormatRulesManagerDlg.textBetween": "està entre {0} i {1}", + "SSE.Views.FormatRulesManagerDlg.textCellValue": "Valor de la cel·la", + "SSE.Views.FormatRulesManagerDlg.textColorScale": "Escala de color graduada", + "SSE.Views.FormatRulesManagerDlg.textContains": "El valor de la cel·la conté", + "SSE.Views.FormatRulesManagerDlg.textContainsBlank": "La cel·la conté un valor en blanc", + "SSE.Views.FormatRulesManagerDlg.textContainsError": "La cel·la conté un error", + "SSE.Views.FormatRulesManagerDlg.textDelete": "Suprimir", + "SSE.Views.FormatRulesManagerDlg.textDown": "Moure la regla avall", + "SSE.Views.FormatRulesManagerDlg.textDuplicate": "Valors duplicats", + "SSE.Views.FormatRulesManagerDlg.textEdit": "Editar", + "SSE.Views.FormatRulesManagerDlg.textEnds": "El valor de la cel·la acaba amb", + "SSE.Views.FormatRulesManagerDlg.textEqAbove": "Igual o superior a la mitjana", + "SSE.Views.FormatRulesManagerDlg.textEqBelow": "Igual o inferior a la mitjana", + "SSE.Views.FormatRulesManagerDlg.textFormat": "Format", + "SSE.Views.FormatRulesManagerDlg.textIconSet": "Conjunt d'icones", + "SSE.Views.FormatRulesManagerDlg.textNew": "Nou", + "SSE.Views.FormatRulesManagerDlg.textNotBetween": "no és entre {0} i {1}", + "SSE.Views.FormatRulesManagerDlg.textNotContains": "El valor de la cel·la no conté", + "SSE.Views.FormatRulesManagerDlg.textNotContainsBlank": "La cel·la no conté un valor en blanc", + "SSE.Views.FormatRulesManagerDlg.textNotContainsError": "La cel·la no conté cap error", + "SSE.Views.FormatRulesManagerDlg.textRules": "Regles", + "SSE.Views.FormatRulesManagerDlg.textScope": "Mostra les regles de format per a", + "SSE.Views.FormatRulesManagerDlg.textSelectData": "Seleccionar dades", + "SSE.Views.FormatRulesManagerDlg.textSelection": "Selecció actual", + "SSE.Views.FormatRulesManagerDlg.textThisPivot": "Aquesta taula pivot", + "SSE.Views.FormatRulesManagerDlg.textThisSheet": "Aquest full de càlcul", + "SSE.Views.FormatRulesManagerDlg.textThisTable": "Aquesta taula", + "SSE.Views.FormatRulesManagerDlg.textUnique": "Valors únics", + "SSE.Views.FormatRulesManagerDlg.textUp": "Moure la regla amunt", + "SSE.Views.FormatRulesManagerDlg.tipIsLocked": "Un altre usuari està editant aquest element.", + "SSE.Views.FormatRulesManagerDlg.txtTitle": "Format condicional", "SSE.Views.FormatSettingsDialog.textCategory": "Categoria", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimal", "SSE.Views.FormatSettingsDialog.textFormat": "Format", + "SSE.Views.FormatSettingsDialog.textLinked": "Enllaçat al codi font", "SSE.Views.FormatSettingsDialog.textSeparator": "Utilitzeu separador de millars", "SSE.Views.FormatSettingsDialog.textSymbols": "Símbols", "SSE.Views.FormatSettingsDialog.textTitle": "Format de Número", @@ -1826,6 +2245,7 @@ "SSE.Views.FormatSettingsDialog.txtAs8": "Octaus (4/8)", "SSE.Views.FormatSettingsDialog.txtCurrency": "Moneda", "SSE.Views.FormatSettingsDialog.txtCustom": "Personalitzat", + "SSE.Views.FormatSettingsDialog.txtCustomWarning": "Introduïu el format numèric personalitzat amb cura. L'editor de fulls de càlcul no comprova els formats personalitzats per als errors que poden afectar el fitxer xlsx.", "SSE.Views.FormatSettingsDialog.txtDate": "Data", "SSE.Views.FormatSettingsDialog.txtFraction": "Fracció", "SSE.Views.FormatSettingsDialog.txtGeneral": "General", @@ -1924,6 +2344,7 @@ "SSE.Views.HyperlinkSettingsDialog.textTitle": "Característiques de hipervincle", "SSE.Views.HyperlinkSettingsDialog.txtEmpty": "Aquest camp és obligatori", "SSE.Views.HyperlinkSettingsDialog.txtNotUrl": "Aquest camp hauria de ser una URL en el format \"http://www.example.com\"", + "SSE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Aquest camp està limitat a 2083 caràcters", "SSE.Views.ImageSettings.textAdvanced": "Mostra la configuració avançada", "SSE.Views.ImageSettings.textCrop": "Retallar", "SSE.Views.ImageSettings.textCropFill": "Omplir", @@ -1960,7 +2381,7 @@ "SSE.Views.ImageSettingsAdvanced.textTitle": "Imatge - Configuració Avançada", "SSE.Views.ImageSettingsAdvanced.textTwoCell": "Moure i mida de les cel·les", "SSE.Views.ImageSettingsAdvanced.textVertically": "Verticalment", - "SSE.Views.LeftMenu.tipAbout": "Sobre", + "SSE.Views.LeftMenu.tipAbout": "Quant a...", "SSE.Views.LeftMenu.tipChat": "Chat", "SSE.Views.LeftMenu.tipComments": "Comentaris", "SSE.Views.LeftMenu.tipFile": "Fitxer", @@ -1969,7 +2390,11 @@ "SSE.Views.LeftMenu.tipSpellcheck": "Comprovació Ortogràfica", "SSE.Views.LeftMenu.tipSupport": "Opinió & Suport", "SSE.Views.LeftMenu.txtDeveloper": "MODALITAT DE DESENVOLUPADOR", + "SSE.Views.LeftMenu.txtLimit": "Limitar l'accés", "SSE.Views.LeftMenu.txtTrial": "ESTAT DE PROVA", + "SSE.Views.LeftMenu.txtTrialDev": "Mode de desenvolupador de prova", + "SSE.Views.MacroDialog.textMacro": "Nom de macro", + "SSE.Views.MacroDialog.textTitle": "Assignar Macro", "SSE.Views.MainSettingsPrint.okButtonText": "Desar", "SSE.Views.MainSettingsPrint.strBottom": "Inferior", "SSE.Views.MainSettingsPrint.strLandscape": "Horitzontal", @@ -2032,6 +2457,7 @@ "SSE.Views.NameManagerDlg.textWorkbook": "Llibre de treball", "SSE.Views.NameManagerDlg.tipIsLocked": "Un altre usuari està editant aquest element.", "SSE.Views.NameManagerDlg.txtTitle": "Gestor de Noms", + "SSE.Views.NameManagerDlg.warnDelete": "Segur que voleu suprimir el nom {0}?", "SSE.Views.PageMarginsDialog.textBottom": "Inferior", "SSE.Views.PageMarginsDialog.textLeft": "Esquerra", "SSE.Views.PageMarginsDialog.textRight": "Dreta", @@ -2106,6 +2532,21 @@ "SSE.Views.PivotDigitalFilterDialog.txtAnd": "i", "SSE.Views.PivotDigitalFilterDialog.txtTitleLabel": "Filtre Etiqueta", "SSE.Views.PivotDigitalFilterDialog.txtTitleValue": "Valor del Filtre", + "SSE.Views.PivotGroupDialog.textAuto": "Automàtic", + "SSE.Views.PivotGroupDialog.textBy": "Per", + "SSE.Views.PivotGroupDialog.textDays": "Dies", + "SSE.Views.PivotGroupDialog.textEnd": "Acabant a", + "SSE.Views.PivotGroupDialog.textError": "Aquest camp ha de ser un valor numèric", + "SSE.Views.PivotGroupDialog.textGreaterError": "El número final ha de ser més gran que el número inicial.", + "SSE.Views.PivotGroupDialog.textHour": "hores", + "SSE.Views.PivotGroupDialog.textMin": "Minuts", + "SSE.Views.PivotGroupDialog.textMonth": "Mesos", + "SSE.Views.PivotGroupDialog.textNumDays": "Nombre de dies", + "SSE.Views.PivotGroupDialog.textQuart": "Trimestres", + "SSE.Views.PivotGroupDialog.textSec": "Segons", + "SSE.Views.PivotGroupDialog.textStart": "Començant a", + "SSE.Views.PivotGroupDialog.textYear": "Anys", + "SSE.Views.PivotGroupDialog.txtTitle": "Agrupació", "SSE.Views.PivotSettings.textAdvanced": "Mostra la configuració avançada", "SSE.Views.PivotSettings.textColumns": "Columnes", "SSE.Views.PivotSettings.textFields": "Seleccionar Camps", @@ -2238,7 +2679,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Configuració de la cel·la", "SSE.Views.RightMenu.txtChartSettings": "Gràfic Configuració", "SSE.Views.RightMenu.txtImageSettings": "Configuració Imatge", - "SSE.Views.RightMenu.txtParagraphSettings": "Configuració de text", + "SSE.Views.RightMenu.txtParagraphSettings": "Configuració de paràgraf", "SSE.Views.RightMenu.txtPivotSettings": "Configuració de la taula activada", "SSE.Views.RightMenu.txtSettings": "Configuració Comuna", "SSE.Views.RightMenu.txtShapeSettings": "Configuració de la Forma", @@ -2267,7 +2708,7 @@ "SSE.Views.ShapeSettings.strPattern": "Patró", "SSE.Views.ShapeSettings.strShadow": "Mostra ombra", "SSE.Views.ShapeSettings.strSize": "Mida", - "SSE.Views.ShapeSettings.strStroke": "Traça", + "SSE.Views.ShapeSettings.strStroke": "Línia", "SSE.Views.ShapeSettings.strTransparency": "Opacitat", "SSE.Views.ShapeSettings.strType": "Tipus", "SSE.Views.ShapeSettings.textAdvanced": "Mostra la configuració avançada", @@ -2371,6 +2812,7 @@ "SSE.Views.SignatureSettings.strValid": "Signatures vàlides", "SSE.Views.SignatureSettings.txtContinueEditing": "Editar de totes maneres", "SSE.Views.SignatureSettings.txtEditWarning": "L’edició eliminarà les signatures del full de càlcul.
    Esteu segur que voleu continuar?", + "SSE.Views.SignatureSettings.txtRemoveWarning": "Voleu eliminar aquesta signatura?
    Això no es podrà desfer.", "SSE.Views.SignatureSettings.txtRequestedSignatures": "Cal signar aquest full de càlcul.", "SSE.Views.SignatureSettings.txtSigned": "S'ha afegit signatures vàlides al full de càlcul. El full de càlcul està protegit de l’edició.", "SSE.Views.SignatureSettings.txtSignedInvalid": "Algunes de les signatures digitals del full de càlcul no són vàlides o no es van poder verificar. El full de càlcul està protegit de l’edició.", @@ -2459,8 +2901,8 @@ "SSE.Views.SortDialog.textDown": "Moure el nivell cap avall", "SSE.Views.SortDialog.textFontColor": "Color de Font", "SSE.Views.SortDialog.textLeft": "Esquerra", - "SSE.Views.SortDialog.textMoreCols": "(Afegir columnes...)", - "SSE.Views.SortDialog.textMoreRows": "(Afegir files...)", + "SSE.Views.SortDialog.textMoreCols": "(Més columnes...)", + "SSE.Views.SortDialog.textMoreRows": "(Mes files...)", "SSE.Views.SortDialog.textNone": "Cap", "SSE.Views.SortDialog.textOptions": "Opcions", "SSE.Views.SortDialog.textOrder": "Ordenar", @@ -2614,7 +3056,7 @@ "SSE.Views.TextArtSettings.strForeground": "Color de Primer Pla", "SSE.Views.TextArtSettings.strPattern": "Patró", "SSE.Views.TextArtSettings.strSize": "Mida", - "SSE.Views.TextArtSettings.strStroke": "Traça", + "SSE.Views.TextArtSettings.strStroke": "Línia", "SSE.Views.TextArtSettings.strTransparency": "Opacitat", "SSE.Views.TextArtSettings.strType": "Tipus", "SSE.Views.TextArtSettings.textAngle": "Angle", @@ -2654,6 +3096,7 @@ "SSE.Views.TextArtSettings.txtPapyrus": "Papiro", "SSE.Views.TextArtSettings.txtWood": "Fusta", "SSE.Views.Toolbar.capBtnAddComment": "Afegir Comentari", + "SSE.Views.Toolbar.capBtnColorSchemas": "Esquema de color", "SSE.Views.Toolbar.capBtnComment": "Comentari", "SSE.Views.Toolbar.capBtnInsHeader": "Capçalera/Peu de Pàgina", "SSE.Views.Toolbar.capBtnInsSlicer": "Slicer", @@ -2673,6 +3116,7 @@ "SSE.Views.Toolbar.capInsertHyperlink": "Hiperenllaç", "SSE.Views.Toolbar.capInsertImage": "Imatge", "SSE.Views.Toolbar.capInsertShape": "Forma", + "SSE.Views.Toolbar.capInsertSpark": "Sparklines", "SSE.Views.Toolbar.capInsertTable": "Taula", "SSE.Views.Toolbar.capInsertText": "Quadre de Text", "SSE.Views.Toolbar.mniImageFromFile": "Imatge d'un Fitxer", @@ -2682,12 +3126,13 @@ "SSE.Views.Toolbar.textAlignBottom": "Alineació Inferior", "SSE.Views.Toolbar.textAlignCenter": "Centrar", "SSE.Views.Toolbar.textAlignJust": "Justificat", - "SSE.Views.Toolbar.textAlignLeft": "Alinear Esquerra", - "SSE.Views.Toolbar.textAlignMiddle": "Alinear al Mig", - "SSE.Views.Toolbar.textAlignRight": "Alinear Dreta", - "SSE.Views.Toolbar.textAlignTop": "Alinear Superior", - "SSE.Views.Toolbar.textAllBorders": "Tots els Costats", + "SSE.Views.Toolbar.textAlignLeft": "Alineació Esquerra", + "SSE.Views.Toolbar.textAlignMiddle": "Alineació al Mig", + "SSE.Views.Toolbar.textAlignRight": "Alineació Dreta", + "SSE.Views.Toolbar.textAlignTop": "Alineació Superior", + "SSE.Views.Toolbar.textAllBorders": "Totes les Vores", "SSE.Views.Toolbar.textAuto": "Auto", + "SSE.Views.Toolbar.textAutoColor": "Automàtic", "SSE.Views.Toolbar.textBold": "Negreta", "SSE.Views.Toolbar.textBordersColor": "Color Vora", "SSE.Views.Toolbar.textBordersStyle": "Estil de Vora", @@ -2695,8 +3140,11 @@ "SSE.Views.Toolbar.textBottomBorders": "Vores inferiors", "SSE.Views.Toolbar.textCenterBorders": "Vores Verticals Internes", "SSE.Views.Toolbar.textClearPrintArea": "Esborrar l'Àrea d'Impressió", + "SSE.Views.Toolbar.textClearRule": "Netejar les regles", "SSE.Views.Toolbar.textClockwise": "Angle en sentit horari", + "SSE.Views.Toolbar.textColorScales": "Escala de color", "SSE.Views.Toolbar.textCounterCw": "Angle en sentit antihorari", + "SSE.Views.Toolbar.textDataBars": "Barra de Dades", "SSE.Views.Toolbar.textDelLeft": "Desplaçar les cel·les cap a l'esquerra", "SSE.Views.Toolbar.textDelUp": "Desplaçar Cel·les Amunt", "SSE.Views.Toolbar.textDiagDownBorder": "Vora Diagonal Descendent", @@ -2710,9 +3158,11 @@ "SSE.Views.Toolbar.textInsideBorders": "Vores Internes", "SSE.Views.Toolbar.textInsRight": "Desplaçar Cel·les a la Dreta", "SSE.Views.Toolbar.textItalic": "Itàlica", + "SSE.Views.Toolbar.textItems": "Elements", "SSE.Views.Toolbar.textLandscape": "Horitzontal", "SSE.Views.Toolbar.textLeft": "Esquerra:", "SSE.Views.Toolbar.textLeftBorders": "Vores Esquerres", + "SSE.Views.Toolbar.textManageRule": "Gestionar Regles", "SSE.Views.Toolbar.textManyPages": "pàgines", "SSE.Views.Toolbar.textMarginsLast": "Últim Personalitzat", "SSE.Views.Toolbar.textMarginsNarrow": "Estret", @@ -2722,6 +3172,7 @@ "SSE.Views.Toolbar.textMoreFormats": "Altres formats", "SSE.Views.Toolbar.textMorePages": "Més pàgines", "SSE.Views.Toolbar.textNewColor": "Afegir un Nou Color Personalitzat", + "SSE.Views.Toolbar.textNewRule": "Nova regla", "SSE.Views.Toolbar.textNoBorders": "Sense Vores", "SSE.Views.Toolbar.textOnePage": "pàgina", "SSE.Views.Toolbar.textOutBorders": "Vores Exteriors", @@ -2735,6 +3186,7 @@ "SSE.Views.Toolbar.textRotateUp": "Girar Text cap a munt", "SSE.Views.Toolbar.textScale": "Escala", "SSE.Views.Toolbar.textScaleCustom": "Personalitzat", + "SSE.Views.Toolbar.textSelection": "Des de la selecció actual", "SSE.Views.Toolbar.textSetPrintArea": "Definir l'Àrea d'Impressió", "SSE.Views.Toolbar.textStrikeout": "Ratllar", "SSE.Views.Toolbar.textSubscript": "Subíndex", @@ -2749,6 +3201,9 @@ "SSE.Views.Toolbar.textTabLayout": "Maquetació", "SSE.Views.Toolbar.textTabProtect": "Protecció", "SSE.Views.Toolbar.textTabView": "Vista", + "SSE.Views.Toolbar.textThisPivot": "Des d'aquesta taula pivot", + "SSE.Views.Toolbar.textThisSheet": "Des d'aquest full de treball", + "SSE.Views.Toolbar.textThisTable": "Des d'aquesta taula", "SSE.Views.Toolbar.textTop": "Superior:", "SSE.Views.Toolbar.textTopBorders": "Vores Superiors", "SSE.Views.Toolbar.textUnderline": "Subratllar", @@ -2758,10 +3213,10 @@ "SSE.Views.Toolbar.tipAlignBottom": "Alineació inferior", "SSE.Views.Toolbar.tipAlignCenter": "Centrar", "SSE.Views.Toolbar.tipAlignJust": "Justificat", - "SSE.Views.Toolbar.tipAlignLeft": "Alinear esquerra", - "SSE.Views.Toolbar.tipAlignMiddle": "Alinear al Mig", - "SSE.Views.Toolbar.tipAlignRight": "Alinear dreta", - "SSE.Views.Toolbar.tipAlignTop": "Alinear superior", + "SSE.Views.Toolbar.tipAlignLeft": "Alineació esquerra", + "SSE.Views.Toolbar.tipAlignMiddle": "Alineació al Mig", + "SSE.Views.Toolbar.tipAlignRight": "Alineació Dreta", + "SSE.Views.Toolbar.tipAlignTop": "Alineació superior", "SSE.Views.Toolbar.tipAutofilter": "Ordenar i Filtrar", "SSE.Views.Toolbar.tipBack": "Enrere", "SSE.Views.Toolbar.tipBorders": "Vores", @@ -2769,6 +3224,7 @@ "SSE.Views.Toolbar.tipChangeChart": "Canviar el tipus de gràfic", "SSE.Views.Toolbar.tipClearStyle": "Esborrar", "SSE.Views.Toolbar.tipColorSchemas": "Canviar el esquema de color", + "SSE.Views.Toolbar.tipCondFormat": "Format condicional", "SSE.Views.Toolbar.tipCopy": "Copiar", "SSE.Views.Toolbar.tipCopyStyle": "Copiar estil", "SSE.Views.Toolbar.tipDecDecimal": "Disminuir el decimal", @@ -2779,6 +3235,7 @@ "SSE.Views.Toolbar.tipDigStylePercent": "Estil Percentual", "SSE.Views.Toolbar.tipEditChart": "Editar Gràfic", "SSE.Views.Toolbar.tipEditChartData": "Seleccionar Dades", + "SSE.Views.Toolbar.tipEditChartType": "Canviar el tipus de gràfic", "SSE.Views.Toolbar.tipEditHeader": "Edita la capçalera o el peu de pàgina", "SSE.Views.Toolbar.tipFontColor": "Color de Font", "SSE.Views.Toolbar.tipFontName": "Font", @@ -2795,6 +3252,7 @@ "SSE.Views.Toolbar.tipInsertOpt": "Inserir cel·les", "SSE.Views.Toolbar.tipInsertShape": "Inseriu autoforma", "SSE.Views.Toolbar.tipInsertSlicer": "Inserir desplegable", + "SSE.Views.Toolbar.tipInsertSpark": "Inserir sparkline", "SSE.Views.Toolbar.tipInsertSymbol": "Inserir símbol", "SSE.Views.Toolbar.tipInsertTable": "Inserir taula", "SSE.Views.Toolbar.tipInsertText": "Inserir quadre de text", @@ -2931,6 +3389,7 @@ "SSE.Views.ViewManagerDlg.textDuplicate": "Duplicar", "SSE.Views.ViewManagerDlg.textEmpty": "Encara no s'ha creat cap visualització.", "SSE.Views.ViewManagerDlg.textGoTo": "Anar a vista", + "SSE.Views.ViewManagerDlg.textLongName": "Introduïu un nom de menys de 128 caràcters.", "SSE.Views.ViewManagerDlg.textNew": "Nou", "SSE.Views.ViewManagerDlg.textRename": "Canviar el nom", "SSE.Views.ViewManagerDlg.textRenameError": "El nom de la vista no pot estar buit.", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 06340e575..43ce5002c 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -984,7 +984,7 @@ "SSE.Controllers.Main.unsupportedBrowserErrorText": "Your browser is not supported.", "SSE.Controllers.Main.uploadImageExtMessage": "Unknown image format.", "SSE.Controllers.Main.uploadImageFileCountMessage": "No images uploaded.", - "SSE.Controllers.Main.uploadImageSizeMessage": "Maximium image size limit exceeded.", + "SSE.Controllers.Main.uploadImageSizeMessage": "The image is too big. The maximum size is 25 MB.", "SSE.Controllers.Main.uploadImageTextText": "Uploading image...", "SSE.Controllers.Main.uploadImageTitleText": "Uploading Image", "SSE.Controllers.Main.waitText": "Please, wait...", @@ -2088,7 +2088,7 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "General", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Page Settings", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Spell checking", - "SSE.Views.FormatRulesEditDlg.fillColor": "Background color", + "SSE.Views.FormatRulesEditDlg.fillColor": "Fill color", "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Warning", "SSE.Views.FormatRulesEditDlg.text2Scales": "2 Color scale", "SSE.Views.FormatRulesEditDlg.text3Scales": "3 Color scale", @@ -3264,7 +3264,7 @@ "SSE.Views.Toolbar.tipPageOrient": "Page orientation", "SSE.Views.Toolbar.tipPageSize": "Page size", "SSE.Views.Toolbar.tipPaste": "Paste", - "SSE.Views.Toolbar.tipPrColor": "Background color", + "SSE.Views.Toolbar.tipPrColor": "Fill color", "SSE.Views.Toolbar.tipPrint": "Print", "SSE.Views.Toolbar.tipPrintArea": "Print area", "SSE.Views.Toolbar.tipPrintTitles": "Print titles", diff --git a/apps/spreadsheeteditor/main/locale/es.json b/apps/spreadsheeteditor/main/locale/es.json index 0b6d29ed9..1966ea32b 100644 --- a/apps/spreadsheeteditor/main/locale/es.json +++ b/apps/spreadsheeteditor/main/locale/es.json @@ -983,7 +983,7 @@ "SSE.Controllers.Main.unsupportedBrowserErrorText": "Su navegador no está soportado.", "SSE.Controllers.Main.uploadImageExtMessage": "Formato de imagen desconocido.", "SSE.Controllers.Main.uploadImageFileCountMessage": "No hay imágenes subidas.", - "SSE.Controllers.Main.uploadImageSizeMessage": "Tamaño de imagen máximo está superado.", + "SSE.Controllers.Main.uploadImageSizeMessage": "La imagen es demasiado grande. El tamaño máximo es de 25 MB.", "SSE.Controllers.Main.uploadImageTextText": "Subiendo imagen...", "SSE.Controllers.Main.uploadImageTitleText": "Subiendo imagen", "SSE.Controllers.Main.waitText": "Por favor, espere...", @@ -1026,7 +1026,7 @@ "SSE.Controllers.Toolbar.textFontSizeErr": "El valor introducido es incorrecto.
    Por favor, introduzca un valor numérico entre 1 y 409", "SSE.Controllers.Toolbar.textFraction": "Fracciones", "SSE.Controllers.Toolbar.textFunction": "Funciones", - "SSE.Controllers.Toolbar.textIndicator": "Indicadores", + "SSE.Controllers.Toolbar.textIndicator": "Hitos", "SSE.Controllers.Toolbar.textInsert": "Insertar", "SSE.Controllers.Toolbar.textIntegral": "Integrales", "SSE.Controllers.Toolbar.textLargeOperator": "Operadores grandes", diff --git a/apps/spreadsheeteditor/main/locale/it.json b/apps/spreadsheeteditor/main/locale/it.json index b800012d3..d56e7c009 100644 --- a/apps/spreadsheeteditor/main/locale/it.json +++ b/apps/spreadsheeteditor/main/locale/it.json @@ -49,6 +49,8 @@ "Common.define.chartData.textSurface": "Superficie", "Common.define.chartData.textWinLossSpark": "Vinci/Perdi", "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.textBlank": "Vuoto", + "Common.define.conditionalData.textBottom": "In basso", "Common.define.conditionalData.textLastMonth": "ultimo mese", "Common.define.conditionalData.textLastWeek": "ultima settimana", "Common.Translation.warnFileLocked": "Il file è in fase di modifica in un'altra applicazione. Puoi continuare a modificarlo e salvarlo come copia.", @@ -1729,6 +1731,7 @@ "SSE.Views.DocumentHolder.textArrangeForward": "Porta avanti", "SSE.Views.DocumentHolder.textArrangeFront": "Porta in primo piano", "SSE.Views.DocumentHolder.textAverage": "Media", + "SSE.Views.DocumentHolder.textBullets": "Elenchi puntati", "SSE.Views.DocumentHolder.textCount": "Conteggio", "SSE.Views.DocumentHolder.textCrop": "Ritaglia", "SSE.Views.DocumentHolder.textCropFill": "Riempimento", @@ -1930,6 +1933,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Salva sul server", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Ogni minuto", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Stile di riferimento", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBg": "Bulgaro", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCacheMode": "Modalità cache predefinita", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCm": "Centimetro", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Tedesco", @@ -1978,10 +1982,18 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Generale", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Impostazioni pagina", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Controllo ortografico", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Tutti i bordi", + "SSE.Views.FormatRulesEditDlg.textBold": "Grassetto", + "SSE.Views.FormatRulesEditDlg.textBorder": "Bordo", + "SSE.Views.FormatRulesEditDlg.textBordersColor": "‎Colore bordi‎", + "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Stile bordo", + "SSE.Views.FormatRulesEditDlg.textBottomBorders": "Bordi inferiori", "SSE.Views.FormatRulesEditDlg.textItalic": "Corsivo", "SSE.Views.FormatRulesEditDlg.textItem": "Elemento", + "SSE.Views.FormatRulesEditDlg.tipBorders": "Bordi", "SSE.Views.FormatRulesEditDlg.txtGeneral": "Generale", "SSE.Views.FormatRulesManagerDlg.guestText": "Ospite", + "SSE.Views.FormatRulesManagerDlg.textApply": "Applica a", "SSE.Views.FormatSettingsDialog.textCategory": "Categoria", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimale", "SSE.Views.FormatSettingsDialog.textFormat": "Formato", diff --git a/apps/spreadsheeteditor/main/locale/nl.json b/apps/spreadsheeteditor/main/locale/nl.json index e7672af67..b85237986 100644 --- a/apps/spreadsheeteditor/main/locale/nl.json +++ b/apps/spreadsheeteditor/main/locale/nl.json @@ -48,6 +48,20 @@ "Common.define.chartData.textStock": "Voorraad", "Common.define.chartData.textSurface": "Oppervlak", "Common.define.chartData.textWinLossSpark": "Winst/verlies", + "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.text1Above": "1 std dev boven", + "Common.define.conditionalData.text1Below": "1 std dev onder", + "Common.define.conditionalData.text2Above": "2 std dev boven", + "Common.define.conditionalData.text2Below": "2 std dev onder", + "Common.define.conditionalData.text3Above": "3 std dev boven", + "Common.define.conditionalData.text3Below": "3 std dev onder", + "Common.define.conditionalData.textAbove": "Boven", + "Common.define.conditionalData.textAverage": "Gemiddeld", + "Common.define.conditionalData.textBegins": "Begint met", + "Common.define.conditionalData.textBelow": "Onder", + "Common.define.conditionalData.textBetween": "Tussen", + "Common.define.conditionalData.textBlank": "Blanco", + "Common.define.conditionalData.textBottom": "Bodem", "Common.Translation.warnFileLocked": "Het bestand wordt bewerkt in een andere app. U kunt doorgaan met bewerken en als kopie opslaan.", "Common.UI.ColorButton.textAutoColor": "Automatisch", "Common.UI.ColorButton.textNewColor": "Nieuwe aangepaste kleur toevoegen", @@ -95,6 +109,7 @@ "Common.Views.About.txtVersion": "Versie", "Common.Views.AutoCorrectDialog.textAdd": "Toevoegen", "Common.Views.AutoCorrectDialog.textApplyAsWork": "Pas toe terwijl u werkt", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "AutoCorrectie", "Common.Views.AutoCorrectDialog.textAutoFormat": "AutoOpmaak terwijl u typt", "Common.Views.AutoCorrectDialog.textBy": "Door", "Common.Views.AutoCorrectDialog.textDelete": "Verwijder", @@ -612,6 +627,7 @@ "SSE.Controllers.Main.errorWrongOperator": "De ingevoerde formule bevat een fout. Verkeerde operator gebruikt.
    Corrigeer de fout.", "SSE.Controllers.Main.errRemDuplicates": "Dubbele waarden gevonden en verwijderd: {0}, unieke waarden over: {1}.", "SSE.Controllers.Main.leavePageText": "Er zijn niet-opgeslagen wijzigingen in deze spreadsheet. Klik op 'Op deze pagina blijven' en dan op 'Opslaan' om de wijzigingen op te slaan. Klik op 'Pagina verlaten' om alle niet-opgeslagen wijzigingen te negeren.", + "SSE.Controllers.Main.leavePageTextOnClose": "Alle niet-opgeslagen wijzigingen in deze spreadsheet gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet-opgeslagen wijzigingen te verwijderen.", "SSE.Controllers.Main.loadFontsTextText": "Gegevens worden geladen...", "SSE.Controllers.Main.loadFontsTitleText": "Gegevens worden geladen", "SSE.Controllers.Main.loadFontTextText": "Gegevens worden geladen...", @@ -691,6 +707,7 @@ "SSE.Controllers.Main.txtMinutes": "minuten", "SSE.Controllers.Main.txtMonths": "maanden", "SSE.Controllers.Main.txtMultiSelect": "Meerdere selecteren (Alt + S)", + "SSE.Controllers.Main.txtOr": "%1 of %2", "SSE.Controllers.Main.txtPage": "Pagina", "SSE.Controllers.Main.txtPageOf": "Pagina %1 van %2", "SSE.Controllers.Main.txtPages": "Pagina's", @@ -1728,6 +1745,7 @@ "SSE.Views.DocumentHolder.textFromStorage": "Van Opslag", "SSE.Views.DocumentHolder.textFromUrl": "Van URL", "SSE.Views.DocumentHolder.textListSettings": "Lijst instellingen", + "SSE.Views.DocumentHolder.textMacro": "Macro toewijzen", "SSE.Views.DocumentHolder.textMax": "Max", "SSE.Views.DocumentHolder.textMin": "Min", "SSE.Views.DocumentHolder.textMore": "Meer functies", @@ -1917,6 +1935,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Opslaan op server", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Elke minuut", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Referentie stijl", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Wit-Russisch", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCacheMode": "standaard cache modus", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCm": "Centimeter", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Duits", @@ -1958,6 +1977,31 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Algemeen", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Pagina-instellingen", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Spellingcontrole", + "SSE.Views.FormatRulesEditDlg.fillColor": "Achtergrond kleur", + "SSE.Views.FormatRulesEditDlg.text2Scales": "2 Kleurenschaal", + "SSE.Views.FormatRulesEditDlg.text3Scales": "3 Kleurenschaal", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Alle grenzen", + "SSE.Views.FormatRulesEditDlg.textAppearance": "Uiterlijk van de bar", + "SSE.Views.FormatRulesEditDlg.textApply": "Solliciteer naar Bereik", + "SSE.Views.FormatRulesEditDlg.textAutomatic": "Automatisch", + "SSE.Views.FormatRulesEditDlg.textAxis": "Assen", + "SSE.Views.FormatRulesEditDlg.textBarDirection": "Bar richting", + "SSE.Views.FormatRulesEditDlg.textBold": "Vet", + "SSE.Views.FormatRulesEditDlg.textBorder": "Grens", + "SSE.Views.FormatRulesEditDlg.textBordersColor": "Randen Kleur", + "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Rand Stijl", + "SSE.Views.FormatRulesEditDlg.textNewColor": "Nieuwe aangepaste kleur toevoegen", + "SSE.Views.FormatRulesEditDlg.tipBorders": "Randen", + "SSE.Views.FormatRulesEditDlg.txtAccounting": "Boekhouding", + "SSE.Views.FormatRulesManagerDlg.text1Above": "1 std dev boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text1Below": "1 std dev onder het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text2Above": "2 std dev boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text2Below": "2 std dev onder het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text3Above": "3 std dev boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text3Below": "3 std dev onder het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.textAbove": "Boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.textApply": "Solliciteer naar", + "SSE.Views.FormatRulesManagerDlg.textBelow": "Onder het gemiddelde", "SSE.Views.FormatSettingsDialog.textCategory": "Categorie", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimaal", "SSE.Views.FormatSettingsDialog.textFormat": "Opmaak", @@ -2121,6 +2165,7 @@ "SSE.Views.LeftMenu.txtLimit": "Beperk toegang", "SSE.Views.LeftMenu.txtTrial": "TEST MODUS", "SSE.Views.LeftMenu.txtTrialDev": "Proefontwikkelaarsmodus", + "SSE.Views.MacroDialog.textTitle": "Macro toewijzen", "SSE.Views.MainSettingsPrint.okButtonText": "Opslaan", "SSE.Views.MainSettingsPrint.strBottom": "Onder", "SSE.Views.MainSettingsPrint.strLandscape": "Liggend", diff --git a/apps/spreadsheeteditor/main/locale/pl.json b/apps/spreadsheeteditor/main/locale/pl.json index b8a6cbced..9a97c5d78 100644 --- a/apps/spreadsheeteditor/main/locale/pl.json +++ b/apps/spreadsheeteditor/main/locale/pl.json @@ -1489,7 +1489,7 @@ "SSE.Views.PrintSettings.textPrintGrid": "Drukuj siatkę", "SSE.Views.PrintSettings.textPrintHeadings": "Drukuj wiersze i kolumny", "SSE.Views.PrintSettings.textPrintRange": "Drukuj zakres", - "SSE.Views.PrintSettings.textSelection": "Wybrany", + "SSE.Views.PrintSettings.textSelection": "Zaznaczenie", "SSE.Views.PrintSettings.textSettings": "Ustawienia arkusza", "SSE.Views.PrintSettings.textShowDetails": "Pokaż szczegóły", "SSE.Views.PrintSettings.textShowGrid": "Pokaż linie siatki", diff --git a/apps/spreadsheeteditor/main/locale/ro.json b/apps/spreadsheeteditor/main/locale/ro.json index 1cd00ac47..4021b99d5 100644 --- a/apps/spreadsheeteditor/main/locale/ro.json +++ b/apps/spreadsheeteditor/main/locale/ro.json @@ -49,6 +49,7 @@ "Common.define.chartData.textSurface": "Suprafața", "Common.define.chartData.textWinLossSpark": "Câștig/pierdere", "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.noFormatText": "Niciun format definit ", "Common.define.conditionalData.text1Above": "1 abatere standard deasupra", "Common.define.conditionalData.text1Below": "1 abatere standard dedesubt ", "Common.define.conditionalData.text2Above": "2 abateri standard deasupra", @@ -78,9 +79,16 @@ "Common.define.conditionalData.textGreaterEq": "Mai mare sau egal", "Common.define.conditionalData.textIconSets": "Ansamble de icoane", "Common.define.conditionalData.textLast7days": "În ultimele 7 zile", + "Common.define.conditionalData.textLastMonth": "Ultima lună", + "Common.define.conditionalData.textLastWeek": "Săptămâna anterioară", + "Common.define.conditionalData.textLess": "Mai mic decât", "Common.define.conditionalData.textLessEq": "Mai mic sau egal", + "Common.define.conditionalData.textNextMonth": "Luna următoare", + "Common.define.conditionalData.textNextWeek": "Săptămâna următoare", + "Common.define.conditionalData.textNotBetween": "nu între", "Common.define.conditionalData.textNotBlanks": "Nu conțime celule goale", "Common.define.conditionalData.textNotContains": "Nu conține", + "Common.define.conditionalData.textNotEqual": "Nu este egal cu", "Common.define.conditionalData.textNotErrors": "Nu conține erori", "Common.Translation.warnFileLocked": "Fișierul este editat într-o altă aplicație. Puteți continua să editați și să-l salvați ca o copie.", "Common.Translation.warnFileLockedBtnEdit": "Crează o copie", @@ -138,6 +146,7 @@ "Common.Views.AutoCorrectDialog.textAutoFormat": "Formatare automată la tastare", "Common.Views.AutoCorrectDialog.textBy": "După", "Common.Views.AutoCorrectDialog.textDelete": "Ștergere", + "Common.Views.AutoCorrectDialog.textHyperlink": "Căi Internet și de rețea cu hyperlink-uri", "Common.Views.AutoCorrectDialog.textMathCorrect": "Autocorecție matematică", "Common.Views.AutoCorrectDialog.textNewRowCol": "Inserare de rânduri și coloane noi în tabel", "Common.Views.AutoCorrectDialog.textRecognized": "Funcțiile recunoscute", @@ -221,6 +230,7 @@ "Common.Views.ListSettingsDialog.txtTitle": "Setări lista", "Common.Views.ListSettingsDialog.txtType": "Tip", "Common.Views.OpenDialog.closeButtonText": "Închide fișierul", + "Common.Views.OpenDialog.textInvalidRange": "Zona de celule nu este validă", "Common.Views.OpenDialog.txtAdvanced": "Avansat", "Common.Views.OpenDialog.txtColon": "Două puncte", "Common.Views.OpenDialog.txtComma": "Virgulă", @@ -1412,7 +1422,10 @@ "SSE.Views.CellSettings.textGradientColor": "Culoare", "SSE.Views.CellSettings.textGradientFill": "Umplere gradient", "SSE.Views.CellSettings.textIndent": "Indentare", + "SSE.Views.CellSettings.textItems": "Elemente", "SSE.Views.CellSettings.textLinear": "Liniar", + "SSE.Views.CellSettings.textManageRule": "Gestionare reguli", + "SSE.Views.CellSettings.textNewRule": "Nouă regilă", "SSE.Views.CellSettings.textNoFill": "Fără umplere", "SSE.Views.CellSettings.textOrientation": "Orientarea textului", "SSE.Views.CellSettings.textPattern": "Model", @@ -1636,6 +1649,7 @@ "SSE.Views.CreatePivotDialog.textTitle": "Creare tabel Pivot", "SSE.Views.CreatePivotDialog.txtEmpty": "Câmp obligatoriu", "SSE.Views.CreateSparklineDialog.textDestination": "Alegeți locul unde se va plasa diagrama sparkline", + "SSE.Views.CreateSparklineDialog.textInvalidRange": "Zona de celule nu este validă", "SSE.Views.CreateSparklineDialog.textTitle": "Creare diagrame sparkline", "SSE.Views.DataTab.capBtnGroup": "Grupare", "SSE.Views.DataTab.capBtnTextCustomSort": "Sortare particularizată", @@ -1797,6 +1811,7 @@ "SSE.Views.DocumentHolder.textMore": "Mai multe funcții", "SSE.Views.DocumentHolder.textMoreFormats": "Mai multe formate", "SSE.Views.DocumentHolder.textNone": "Niciunul", + "SSE.Views.DocumentHolder.textNumbering": "Numerotare", "SSE.Views.DocumentHolder.textReplace": "Înlocuire imagine", "SSE.Views.DocumentHolder.textRotate": "Rotire", "SSE.Views.DocumentHolder.textRotate270": "Rotire 90° în sens contrar acelor de ceasornic", @@ -1998,9 +2013,14 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtId": "Indoneziană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInch": "Inch", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtIt": "Italiană", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtJa": "Japoneză", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtKo": "Coreeană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLiveComment": "Afișare comentarii", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLo": "Laoțiană", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLv": "Letonă", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtMac": "ca OS X", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNative": "Sursă", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNb": "Norvegiană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNl": "Neerlandeză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPl": "Poloneză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Punct", @@ -2064,17 +2084,33 @@ "SSE.Views.FormatRulesEditDlg.textGradient": "Gradient", "SSE.Views.FormatRulesEditDlg.textIconStyle": "Stil icoană", "SSE.Views.FormatRulesEditDlg.textInsideBorders": "Borduri în interiorul ", + "SSE.Views.FormatRulesEditDlg.textInvalid": "Zona de date nevalidă.", "SSE.Views.FormatRulesEditDlg.textInvalidRange": "EROARE! Zonă de celule nu este validă", + "SSE.Views.FormatRulesEditDlg.textItalic": "Cursiv", "SSE.Views.FormatRulesEditDlg.textItem": "Element", + "SSE.Views.FormatRulesEditDlg.textLeft2Right": "De la stânga la dreapta", + "SSE.Views.FormatRulesEditDlg.textLeftBorders": "Bordură la stânga", + "SSE.Views.FormatRulesEditDlg.textLongBar": "bară cea mai lungă ", + "SSE.Views.FormatRulesEditDlg.textMaximum": "Maxim", + "SSE.Views.FormatRulesEditDlg.textMaxpoint": "Punct maxim", "SSE.Views.FormatRulesEditDlg.textMiddleBorders": "Bordurile orizontale în interiorul ", + "SSE.Views.FormatRulesEditDlg.textMidpoint": "Punct median", + "SSE.Views.FormatRulesEditDlg.textMinimum": "Minim", + "SSE.Views.FormatRulesEditDlg.textMinpoint": "Punct minim", + "SSE.Views.FormatRulesEditDlg.textNegative": "Negativ", "SSE.Views.FormatRulesEditDlg.textNewColor": "Adăugarea unei culori particularizate noi", + "SSE.Views.FormatRulesEditDlg.textNoBorders": "Fără borduri", + "SSE.Views.FormatRulesEditDlg.textNone": "Niciunul", "SSE.Views.FormatRulesEditDlg.tipBorders": "Borduri", + "SSE.Views.FormatRulesEditDlg.tipNumFormat": "Formatul de număr", "SSE.Views.FormatRulesEditDlg.txtAccounting": "Contabilitate", "SSE.Views.FormatRulesEditDlg.txtCurrency": "Monedă", "SSE.Views.FormatRulesEditDlg.txtDate": "Dată", "SSE.Views.FormatRulesEditDlg.txtFraction": "Fracție", "SSE.Views.FormatRulesEditDlg.txtGeneral": "General", + "SSE.Views.FormatRulesEditDlg.txtNumber": "Număr", "SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Editare regulă de formatare", + "SSE.Views.FormatRulesEditDlg.txtTitleNew": "Nouă regulă de formatare", "SSE.Views.FormatRulesManagerDlg.guestText": "Invitat", "SSE.Views.FormatRulesManagerDlg.text1Above": "1 abatere standard deasupra medie", "SSE.Views.FormatRulesManagerDlg.text1Below": "1 abatere standard sub medie", @@ -2086,12 +2122,14 @@ "SSE.Views.FormatRulesManagerDlg.textApply": "Se aplică la", "SSE.Views.FormatRulesManagerDlg.textBeginsWith": "Valoarea din celulă se începe cu", "SSE.Views.FormatRulesManagerDlg.textBelow": "Sub medie", + "SSE.Views.FormatRulesManagerDlg.textBetween": "este între {0} și {1}", "SSE.Views.FormatRulesManagerDlg.textCellValue": "Valoarea din celulă", "SSE.Views.FormatRulesManagerDlg.textColorScale": "Scală de culoare cu gradare ", "SSE.Views.FormatRulesManagerDlg.textContains": "Valoarea din celulă conține", "SSE.Views.FormatRulesManagerDlg.textContainsBlank": "Celula canține o valorae goală", "SSE.Views.FormatRulesManagerDlg.textContainsError": "Celula conține o eroare", "SSE.Views.FormatRulesManagerDlg.textDelete": "Ștergere", + "SSE.Views.FormatRulesManagerDlg.textDown": "Mutare regulă în jos", "SSE.Views.FormatRulesManagerDlg.textDuplicate": "Valori duble", "SSE.Views.FormatRulesManagerDlg.textEdit": "Editare", "SSE.Views.FormatRulesManagerDlg.textEnds": "Valoarea din celulă se termină cu", @@ -2099,11 +2137,14 @@ "SSE.Views.FormatRulesManagerDlg.textEqBelow": "Egal cu sau sub medie", "SSE.Views.FormatRulesManagerDlg.textFormat": "Formatare", "SSE.Views.FormatRulesManagerDlg.textIconSet": "Ansamblul de icoane", + "SSE.Views.FormatRulesManagerDlg.textNew": "Nou", + "SSE.Views.FormatRulesManagerDlg.textNotBetween": "nu este între {0} și {1}", "SSE.Views.FormatRulesManagerDlg.textNotContains": "Valoarea din celulă nu conține", "SSE.Views.FormatRulesManagerDlg.textNotContainsBlank": "Celula nu conține nicio valoare goală", "SSE.Views.FormatRulesManagerDlg.textNotContainsError": "Celula nu conține nicio eroare", "SSE.Views.FormatRulesManagerDlg.textSelection": "Selecția curentă", "SSE.Views.FormatRulesManagerDlg.textThisTable": "Acest tabel", + "SSE.Views.FormatRulesManagerDlg.textUp": "Mutare regulă în sus", "SSE.Views.FormatRulesManagerDlg.txtTitle": "Formatarea condiționată", "SSE.Views.FormatSettingsDialog.textCategory": "Categorie", "SSE.Views.FormatSettingsDialog.textDecimal": "Zecimal", @@ -2269,6 +2310,7 @@ "SSE.Views.LeftMenu.txtLimit": "Limitare acces", "SSE.Views.LeftMenu.txtTrial": "PERIOADĂ DE PROBĂ", "SSE.Views.LeftMenu.txtTrialDev": "Mod dezvoltator de încercare", + "SSE.Views.MacroDialog.textMacro": "Nume macro", "SSE.Views.MacroDialog.textTitle": "Asocierea macrocomenzii", "SSE.Views.MainSettingsPrint.okButtonText": "Salvează", "SSE.Views.MainSettingsPrint.strBottom": "Jos", @@ -3032,9 +3074,11 @@ "SSE.Views.Toolbar.textInsideBorders": "Borduri în interiorul ", "SSE.Views.Toolbar.textInsRight": "Deplasare celule la dreapta", "SSE.Views.Toolbar.textItalic": "Cursiv", + "SSE.Views.Toolbar.textItems": "Elemente", "SSE.Views.Toolbar.textLandscape": "Vedere", "SSE.Views.Toolbar.textLeft": "Stânga:", "SSE.Views.Toolbar.textLeftBorders": "Bordură la stânga", + "SSE.Views.Toolbar.textManageRule": "Gestionare reguli", "SSE.Views.Toolbar.textManyPages": "pagini", "SSE.Views.Toolbar.textMarginsLast": "Ultima setare particularizată", "SSE.Views.Toolbar.textMarginsNarrow": "Îngust", @@ -3044,6 +3088,7 @@ "SSE.Views.Toolbar.textMoreFormats": "Mai multe formate", "SSE.Views.Toolbar.textMorePages": "Mai multe pagini", "SSE.Views.Toolbar.textNewColor": "Сuloare particularizată", + "SSE.Views.Toolbar.textNewRule": "Nouă regulă", "SSE.Views.Toolbar.textNoBorders": "Fără borduri", "SSE.Views.Toolbar.textOnePage": "pagina", "SSE.Views.Toolbar.textOutBorders": "Borduri în exteriorul", diff --git a/apps/spreadsheeteditor/main/locale/ru.json b/apps/spreadsheeteditor/main/locale/ru.json index 50946ceb9..273b2c7e8 100644 --- a/apps/spreadsheeteditor/main/locale/ru.json +++ b/apps/spreadsheeteditor/main/locale/ru.json @@ -983,7 +983,7 @@ "SSE.Controllers.Main.unsupportedBrowserErrorText": "Ваш браузер не поддерживается.", "SSE.Controllers.Main.uploadImageExtMessage": "Неизвестный формат изображения.", "SSE.Controllers.Main.uploadImageFileCountMessage": "Ни одного изображения не загружено.", - "SSE.Controllers.Main.uploadImageSizeMessage": "Превышен максимальный размер изображения.", + "SSE.Controllers.Main.uploadImageSizeMessage": "Слишком большое изображение. Максимальный размер - 25 MB.", "SSE.Controllers.Main.uploadImageTextText": "Загрузка изображения...", "SSE.Controllers.Main.uploadImageTitleText": "Загрузка изображения", "SSE.Controllers.Main.waitText": "Пожалуйста, подождите...", @@ -2087,7 +2087,7 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Общие", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Параметры страницы", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Проверка орфографии", - "SSE.Views.FormatRulesEditDlg.fillColor": "Цвет фона", + "SSE.Views.FormatRulesEditDlg.fillColor": "Цвет заливки", "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Внимание", "SSE.Views.FormatRulesEditDlg.text2Scales": "Двухцветная шкала", "SSE.Views.FormatRulesEditDlg.text3Scales": "Трехцветная шкала", @@ -3263,7 +3263,7 @@ "SSE.Views.Toolbar.tipPageOrient": "Ориентация страницы", "SSE.Views.Toolbar.tipPageSize": "Размер страницы", "SSE.Views.Toolbar.tipPaste": "Вставить", - "SSE.Views.Toolbar.tipPrColor": "Цвет фона", + "SSE.Views.Toolbar.tipPrColor": "Цвет заливки", "SSE.Views.Toolbar.tipPrint": "Печать", "SSE.Views.Toolbar.tipPrintArea": "Область печати", "SSE.Views.Toolbar.tipPrintTitles": "Печатать заголовки", From 2a0016e7768b14c8559781eb15359b8443d4e0cb Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Mon, 12 Jul 2021 16:39:41 +0300 Subject: [PATCH 259/376] [DE mobile] Added store for link settings --- .../mobile/src/store/linkSettings.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/documenteditor/mobile/src/store/linkSettings.js diff --git a/apps/documenteditor/mobile/src/store/linkSettings.js b/apps/documenteditor/mobile/src/store/linkSettings.js new file mode 100644 index 000000000..42e10d243 --- /dev/null +++ b/apps/documenteditor/mobile/src/store/linkSettings.js @@ -0,0 +1,16 @@ +import {action, observable, makeObservable} from 'mobx'; + +export class storeLinkSettings { + constructor() { + makeObservable(this, { + canAddLink: observable, + canAddHyperlink: action + }); + } + + canAddLink; + + canAddHyperlink (value) { + this.canAddLink = value; + } +} From de98eaf0facd452714086d800b97efe7ff0f6b63 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 12 Jul 2021 18:08:02 +0300 Subject: [PATCH 260/376] [DE] Fix Bug 51224 --- apps/documenteditor/main/app/view/FormSettings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/documenteditor/main/app/view/FormSettings.js b/apps/documenteditor/main/app/view/FormSettings.js index 1e7f0a893..72fdc4f9f 100644 --- a/apps/documenteditor/main/app/view/FormSettings.js +++ b/apps/documenteditor/main/app/view/FormSettings.js @@ -867,14 +867,14 @@ define([ this.chMulti.setValue(!!val, true); this._state.Multi=val; } - this.chMulti.setDisabled(!this._state.Fixed); + this.chMulti.setDisabled(!this._state.Fixed || this._state.Comb); val = formTextPr.get_AutoFit(); if ( this._state.AutoFit!==val ) { this.chAutofit.setValue(!!val, true); this._state.AutoFit=val; } - this.chAutofit.setDisabled(!this._state.Fixed); + this.chAutofit.setDisabled(!this._state.Fixed || this._state.Comb); this.btnColor.setDisabled(!this._state.Comb); From 172306dceb7bf8ddcaf433deeba06e9bd84ecdb4 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 12 Jul 2021 18:12:39 +0300 Subject: [PATCH 261/376] [SSE] Fix icon set combobox in dark style --- .../main/resources/less/combo-border-size.less | 14 ++++++++++++++ .../main/app/view/FormatRulesEditDlg.js | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/common/main/resources/less/combo-border-size.less b/apps/common/main/resources/less/combo-border-size.less index f27acd1de..0d1422789 100644 --- a/apps/common/main/resources/less/combo-border-size.less +++ b/apps/common/main/resources/less/combo-border-size.less @@ -57,4 +57,18 @@ .form-control:not(input) { cursor: pointer; } + + li { + img { + -webkit-filter: none; + filter: none; + } + + &.selected { + img { + -webkit-filter: none; + filter: none; + } + } + } } \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js index 21f537a89..a5bc7b4b9 100644 --- a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js +++ b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js @@ -229,7 +229,8 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', editable : false, cls : 'input-group-nr', data : cmbData, - takeFocusOnClose: true + takeFocusOnClose: true, + scrollAlwaysVisible: false }).on('selected', function(combo, record) { me.refreshRules(record.value); }); From c20d006606f3f1ce66aa6a9f050a9a2024164eb6 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 12 Jul 2021 18:20:49 +0300 Subject: [PATCH 262/376] [SSE] Fix Bug 51240 --- .../main/app/template/FormatRulesEditDlg.template | 2 +- apps/spreadsheeteditor/main/app/view/FormatRulesManagerDlg.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template b/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template index cb6411f36..5b818504b 100644 --- a/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template +++ b/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template @@ -42,7 +42,7 @@
    -
    +
    diff --git a/apps/spreadsheeteditor/main/app/view/FormatRulesManagerDlg.js b/apps/spreadsheeteditor/main/app/view/FormatRulesManagerDlg.js index 2eeabea6e..821b0f3fc 100644 --- a/apps/spreadsheeteditor/main/app/view/FormatRulesManagerDlg.js +++ b/apps/spreadsheeteditor/main/app/view/FormatRulesManagerDlg.js @@ -152,7 +152,7 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.templa '
    ', '
    <%= name %>
    ', '
    ', - '
    ', + '
    ', '<% if (lock) { %>', '
    <%=lockuser%>
    ', '<% } %>', From ba8133a29b07d2df06cb908c3bd2069b6f25bc6f Mon Sep 17 00:00:00 2001 From: ShimaginAndrey Date: Mon, 12 Jul 2021 18:41:43 +0300 Subject: [PATCH 263/376] [DE PE SSE] Adding parser-plugins --- apps/common/mobile/lib/controller/Plugins.jsx | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/apps/common/mobile/lib/controller/Plugins.jsx b/apps/common/mobile/lib/controller/Plugins.jsx index 146407841..abdcc0fb6 100644 --- a/apps/common/mobile/lib/controller/Plugins.jsx +++ b/apps/common/mobile/lib/controller/Plugins.jsx @@ -182,7 +182,31 @@ const PluginsController = inject('storeAppOptions')(observer(props => { const onPluginsInit = pluginsdata => { !(pluginsdata instanceof Array) && (pluginsdata = pluginsdata["pluginsData"]); - registerPlugins(pluginsdata) + parsePlugins(pluginsdata) + }; + + const parsePlugins = pluginsdata => { + let isEdit = storeAppOptions.isEdit; + + if ( pluginsdata instanceof Array ) { + let lang = storeAppOptions.lang.split(/[\-_]/)[0]; + pluginsdata.forEach((item) => { + item.variations.forEach( (itemVar) => { + let description = itemVar.description; + if (typeof itemVar.descriptionLocale == 'object') + description = itemVar.descriptionLocale[lang] || itemVar.descriptionLocale['en'] || description || ''; + + if(itemVar.buttons !== undefined) { + itemVar.buttons.forEach( (button) => { + if (typeof button.textLocale == 'object') + button.text = button.textLocale[lang] || button.textLocale['en'] || button.text || ''; + button.visible = (isEdit || button.isViewer !== false); + }) + } + }) + }); + } + registerPlugins(pluginsdata); }; const registerPlugins = plugins => { @@ -245,7 +269,7 @@ const PluginsController = inject('storeAppOptions')(observer(props => { arr = arr.concat(plugins.plugins); } - registerPlugins(arr); + parsePlugins(arr); } }; From 3a65ac540f757fee0864c45b5f97e8d29b4bc2d9 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Mon, 12 Jul 2021 19:33:05 +0300 Subject: [PATCH 264/376] Hint manager: fix locking key events, fix click/mousedown handling --- apps/common/main/lib/component/HintManager.js | 56 +++++++++++++++---- .../main/app/controller/Main.js | 4 +- .../main/app/controller/Main.js | 4 +- .../main/app/controller/Main.js | 4 +- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index aa2e5de4e..7102b883d 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -59,7 +59,10 @@ Common.UI.HintManager = new(function() { _currentControls = [], _currentHints = [], _inputLetters = '', - _isClear = false; + _isComplete = false, + _isLockedKeyEvents = false; + + var _api; var _setCurrentSection = function (btn) { if (btn === 'esc') { @@ -75,18 +78,27 @@ Common.UI.HintManager = new(function() { } }; + var _lockedKeyEvents = function (isLocked) { + if (_api) { + _isLockedKeyEvents = isLocked; + _api.asc_enableKeyEvents(!isLocked); + } + }; + var _showHints = function () { _inputLetters = ''; if (_currentHints.length === 0 || ($('#file-menu-panel').is(':visible') && _currentLevel === 1)) { _getHints(); } if (_currentHints.length > 0) { + !_isLockedKeyEvents && _lockedKeyEvents(true); _hintVisible = true; _currentHints.forEach(function(item) { item.show(); }); - } else + } else { _hintVisible = false; + } }; var _hideHints = function() { @@ -271,7 +283,8 @@ Common.UI.HintManager = new(function() { _currentControls.length = 0; }; - var _init = function() { + var _init = function(api) { + _api = api; Common.NotificationCenter.on({ 'app:ready': function (mode) { _lang = mode.lang; @@ -279,6 +292,12 @@ Common.UI.HintManager = new(function() { }, 'hints:clear': _clearHints }); + $('#editor_sdk').on('click', function () { + _clearHints(); + }); + $(document).on('mousedown', function () { + _clearHints(); + }); $(document).on('keyup', function(e) { if (e.keyCode == Common.UI.Keys.ALT && _isAlt) { e.preventDefault(); @@ -290,6 +309,10 @@ Common.UI.HintManager = new(function() { } else { _hideHints(); _resetToDefault(); + if (_isLockedKeyEvents) { + _isLockedKeyEvents = false; + _api.asc_enableKeyEvents(true); + } } } _isAlt = false; @@ -299,6 +322,7 @@ Common.UI.HintManager = new(function() { if (e.keyCode == Common.UI.Keys.ESC ) { if (_currentLevel === 0) { _hideHints(); + _lockedKeyEvents(false); } else { _prevLevel(); _setCurrentSection('esc'); @@ -324,13 +348,17 @@ Common.UI.HintManager = new(function() { if (curr) { var tag = curr.prop("tagName").toLowerCase(); if (window.SSE && curr.parent().prop('id') === 'statusbar_bottom') { + _hideHints(); curr.contextmenu(); - _clearHints(); + _resetToDefault(); } else if (tag === 'input' || tag === 'textarea') { + _hideHints(); curr.trigger(jQuery.Event('click', {which: 1})); curr.focus(); - _clearHints(); + _resetToDefault(); } else { + _isComplete = false; + _hideHints(); if (!curr.attr('content-target') || (curr.attr('content-target') && !$(`#${curr.attr('content-target')}`).is(':visible'))) { // need to open panel if (!($('#file-menu-panel').is(':visible') && (curr.parent().prop('id') === 'fm-btn-info' && $('#panel-info').is(':visible') || curr.parent().prop('id') === 'fm-btn-settings' && $('#panel-settings').is(':visible')))) { @@ -342,7 +370,8 @@ Common.UI.HintManager = new(function() { } } if (curr.prop('id') === 'btn-goback' || curr.closest('.btn-slot').prop('id') === 'slot-btn-options' || curr.prop('id') === 'left-btn-thumbs') { - _clearHints(); + _resetToDefault(); + return; } if (curr.prop('id') === 'add-comment-doc') { _removeHints(); @@ -351,13 +380,12 @@ Common.UI.HintManager = new(function() { _showHints(); return; } - if (!_isClear) { + if (!_isComplete) { _nextLevel(); _setCurrentSection(curr); _showHints(); } } - _isClear = false; } } e.preventDefault(); @@ -384,11 +412,15 @@ Common.UI.HintManager = new(function() { return !(_hintVisible && _currentLevel > 1); }; - var _clearHints = function () { - if (_hintVisible) { - _hideHints(); + var _clearHints = function (isComplete) { + _hintVisible && _hideHints(); + if (_currentHints.length > 0) { _resetToDefault(); - _isClear = true; + } + _isLockedKeyEvents && _lockedKeyEvents(false); + + if (isComplete) { + _isComplete = true; } }; diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index bd3ac2019..f71a635de 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -178,7 +178,7 @@ define([ this.api = this.getApplication().getController('Viewport').getApi(); Common.UI.FocusManager.init(); - Common.UI.HintManager.init(); + Common.UI.HintManager.init(this.api); Common.UI.Themes.init(this.api); if (this.api){ @@ -803,7 +803,7 @@ define([ toolbarView.btnSave.setDisabled(isDisabled); } - Common.UI.HintManager.clearHints(); + Common.UI.HintManager.clearHints(true); }, onLongActionBegin: function(type, id) { diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index 87997c876..6d274093a 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -160,7 +160,7 @@ define([ this.api = this.getApplication().getController('Viewport').getApi(); Common.UI.FocusManager.init(); - Common.UI.HintManager.init(); + Common.UI.HintManager.init(this.api); Common.UI.Themes.init(this.api); if (this.api){ @@ -569,6 +569,8 @@ define([ isDisabled = !cansave && !isSyncButton && !forcesave || this._state.isDisconnected || this._state.fastCoauth && this._state.usersCount>1 && !forcesave; toolbarView.btnSave.setDisabled(isDisabled); } + + Common.UI.HintManager.clearHints(true); }, onLongActionBegin: function(type, id) { diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index d5b9ad0ae..e45256ce2 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -182,7 +182,7 @@ define([ this.api = this.getApplication().getController('Viewport').getApi(); Common.UI.FocusManager.init(); - Common.UI.HintManager.init(); + Common.UI.HintManager.init(this.api); Common.UI.Themes.init(this.api); var value = Common.localStorage.getBool("sse-settings-cachemode", true); @@ -625,6 +625,8 @@ define([ this.getApplication().getController('DocumentHolder').getView('DocumentHolder').focus(); this.api.isCEditorFocused = false; } + + Common.UI.HintManager.clearHints(true); }, onSelectionChanged: function(info){ From 64854721e3d78ac1e8881ea40a6eea5faa690b1a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 13 Jul 2021 11:26:38 +0300 Subject: [PATCH 265/376] Update translation --- apps/documenteditor/embed/locale/tr.json | 1 + apps/documenteditor/embed/locale/zh.json | 9 + apps/documenteditor/main/locale/ca.json | 279 ++++++++- apps/documenteditor/main/locale/en.json | 20 +- apps/documenteditor/main/locale/es.json | 4 +- apps/documenteditor/main/locale/it.json | 10 + apps/documenteditor/main/locale/nl.json | 51 +- apps/documenteditor/main/locale/pt.json | 2 +- apps/documenteditor/main/locale/ru.json | 2 +- apps/documenteditor/main/locale/tr.json | 55 ++ apps/documenteditor/main/locale/zh.json | 8 + apps/presentationeditor/embed/locale/ro.json | 1 + apps/presentationeditor/embed/locale/tr.json | 1 + apps/presentationeditor/embed/locale/zh.json | 1 + apps/presentationeditor/main/locale/ca.json | 316 +++++++---- apps/presentationeditor/main/locale/en.json | 18 +- apps/presentationeditor/main/locale/es.json | 2 +- apps/presentationeditor/main/locale/it.json | 8 +- apps/presentationeditor/main/locale/nl.json | 25 +- apps/presentationeditor/main/locale/ru.json | 2 +- apps/presentationeditor/main/locale/zh.json | 10 + apps/spreadsheeteditor/embed/locale/ro.json | 1 + apps/spreadsheeteditor/embed/locale/tr.json | 1 + apps/spreadsheeteditor/embed/locale/zh.json | 1 + apps/spreadsheeteditor/main/locale/ca.json | 566 +++++++++++++++++-- apps/spreadsheeteditor/main/locale/en.json | 22 +- apps/spreadsheeteditor/main/locale/es.json | 4 +- apps/spreadsheeteditor/main/locale/it.json | 12 + apps/spreadsheeteditor/main/locale/nl.json | 45 ++ apps/spreadsheeteditor/main/locale/pl.json | 2 +- apps/spreadsheeteditor/main/locale/ro.json | 45 ++ apps/spreadsheeteditor/main/locale/ru.json | 6 +- 32 files changed, 1289 insertions(+), 241 deletions(-) diff --git a/apps/documenteditor/embed/locale/tr.json b/apps/documenteditor/embed/locale/tr.json index 2895da645..6cc48ad89 100644 --- a/apps/documenteditor/embed/locale/tr.json +++ b/apps/documenteditor/embed/locale/tr.json @@ -22,6 +22,7 @@ "DE.ApplicationController.textNext": "Sonraki alan", "DE.ApplicationController.textOf": "'in", "DE.ApplicationController.textSubmit": "Kaydet", + "DE.ApplicationController.textSubmited": "Form başarılı bir şekilde kaydedildi
    İpucunu kapatmak için tıklayın", "DE.ApplicationController.txtClose": "Kapat", "DE.ApplicationController.unknownErrorText": "Bilinmeyen hata.", "DE.ApplicationController.unsupportedBrowserErrorText": "Tarayıcınız desteklenmiyor.", diff --git a/apps/documenteditor/embed/locale/zh.json b/apps/documenteditor/embed/locale/zh.json index 3305185d9..16ef5651e 100644 --- a/apps/documenteditor/embed/locale/zh.json +++ b/apps/documenteditor/embed/locale/zh.json @@ -11,20 +11,29 @@ "DE.ApplicationController.downloadTextText": "正在下载文件...", "DE.ApplicationController.errorAccessDeny": "您正在尝试执行您没有权限的操作。
    请联系您的文档服务器管理员.", "DE.ApplicationController.errorDefaultMessage": "错误代码:%1", + "DE.ApplicationController.errorEditingDownloadas": "在处理文档期间发生错误。
    使用“下载为…”选项将文件备份复制到您的计算机硬盘中。", "DE.ApplicationController.errorFilePassProtect": "该文档受密码保护,无法被打开。", "DE.ApplicationController.errorFileSizeExceed": "文件大小超出了为服务器设置的限制.
    有关详细信息,请与文档服务器管理员联系。", + "DE.ApplicationController.errorSubmit": "提交失败", "DE.ApplicationController.errorUpdateVersionOnDisconnect": "网络连接已恢复,文件版本已变更。
    在继续工作之前,需要下载文件或复制其内容以避免丢失数据,然后刷新此页。", "DE.ApplicationController.errorUserDrop": "该文件现在无法访问。", "DE.ApplicationController.notcriticalErrorTitle": "警告", "DE.ApplicationController.scriptLoadError": "连接速度过慢,部分组件无法被加载。请重新加载页面。", + "DE.ApplicationController.textClear": "清除所有字段", "DE.ApplicationController.textLoadingDocument": "文件加载中…", + "DE.ApplicationController.textNext": "下一域", "DE.ApplicationController.textOf": "的", + "DE.ApplicationController.textSubmit": "提交", + "DE.ApplicationController.textSubmited": "表单成功地被提交了
    点击以关闭贴士", "DE.ApplicationController.txtClose": "关闭", "DE.ApplicationController.unknownErrorText": "未知错误。", "DE.ApplicationController.unsupportedBrowserErrorText": "您的浏览器不受支持", "DE.ApplicationController.waitText": "请稍候...", "DE.ApplicationView.txtDownload": "下载", + "DE.ApplicationView.txtDownloadDocx": "导出成docx格式", + "DE.ApplicationView.txtDownloadPdf": "导出成PDF格式", "DE.ApplicationView.txtEmbed": "嵌入", + "DE.ApplicationView.txtFileLocation": "打开文件所在位置", "DE.ApplicationView.txtFullScreen": "全屏", "DE.ApplicationView.txtPrint": "打印", "DE.ApplicationView.txtShare": "共享" diff --git a/apps/documenteditor/main/locale/ca.json b/apps/documenteditor/main/locale/ca.json index 2e87e25f5..3684c73f5 100644 --- a/apps/documenteditor/main/locale/ca.json +++ b/apps/documenteditor/main/locale/ca.json @@ -18,6 +18,7 @@ "Common.Controllers.ReviewChanges.textBreakBefore": "Salt de pàgina abans", "Common.Controllers.ReviewChanges.textCaps": "Majúscules ", "Common.Controllers.ReviewChanges.textCenter": "Centrar", + "Common.Controllers.ReviewChanges.textChar": "Nivell de caràcter", "Common.Controllers.ReviewChanges.textChart": "Gràfic", "Common.Controllers.ReviewChanges.textColor": "Color de Font", "Common.Controllers.ReviewChanges.textContextual": "No afegiu interval entre paràgrafs del mateix estil", @@ -47,6 +48,10 @@ "Common.Controllers.ReviewChanges.textNot": "No", "Common.Controllers.ReviewChanges.textNoWidow": "Sense control de la finestra", "Common.Controllers.ReviewChanges.textNum": "Canviar numeració", + "Common.Controllers.ReviewChanges.textOff": "{0} Ja no s'utilitza el seguiment de canvis.", + "Common.Controllers.ReviewChanges.textOffGlobal": "{0} S'ha inhabilitat el Seguiment de Canvis per a tothom.", + "Common.Controllers.ReviewChanges.textOn": "{0} Ara s'està utilitzant el seguiment de canvis.", + "Common.Controllers.ReviewChanges.textOnGlobal": "{0} S'ha activat el seguiment de canvis per a tothom.", "Common.Controllers.ReviewChanges.textParaDeleted": "Paràgraf Suprimit", "Common.Controllers.ReviewChanges.textParaFormatted": "Paràgraf Formatat", "Common.Controllers.ReviewChanges.textParaInserted": "Paràgraf Inserit", @@ -57,6 +62,7 @@ "Common.Controllers.ReviewChanges.textRight": "Alinear dreta", "Common.Controllers.ReviewChanges.textShape": "Forma", "Common.Controllers.ReviewChanges.textShd": "Color de Fons", + "Common.Controllers.ReviewChanges.textShow": "Mostra els canvis a", "Common.Controllers.ReviewChanges.textSmallCaps": "Majúscules petites", "Common.Controllers.ReviewChanges.textSpacing": "Espai", "Common.Controllers.ReviewChanges.textSpacingAfter": "Espai després", @@ -68,19 +74,56 @@ "Common.Controllers.ReviewChanges.textTableRowsAdd": "Files de Taula Afegides", "Common.Controllers.ReviewChanges.textTableRowsDel": "Files de Taula Suprimides", "Common.Controllers.ReviewChanges.textTabs": "Canviar tabulació", + "Common.Controllers.ReviewChanges.textTitleComparison": "Paràmetres de comparació", "Common.Controllers.ReviewChanges.textUnderline": "Subratllar", "Common.Controllers.ReviewChanges.textUrl": "Enganxar la URL del document", "Common.Controllers.ReviewChanges.textWidow": "Control Finestra", + "Common.Controllers.ReviewChanges.textWord": "Nivell de paraula", "Common.define.chartData.textArea": "Àrea", + "Common.define.chartData.textAreaStacked": "Àrea apilada", + "Common.define.chartData.textAreaStackedPer": "Àrea apilada al 100%", "Common.define.chartData.textBar": "Barra", + "Common.define.chartData.textBarNormal": "Columna agrupada", + "Common.define.chartData.textBarNormal3d": "Columna 3D agrupada", + "Common.define.chartData.textBarNormal3dPerspective": "Columna 3D", + "Common.define.chartData.textBarStacked": "Columna apilada", + "Common.define.chartData.textBarStacked3d": "Columna 3D apilada", + "Common.define.chartData.textBarStackedPer": "Columna apilada al 100%", + "Common.define.chartData.textBarStackedPer3d": "columna 3D apilada al 100%", "Common.define.chartData.textCharts": "Gràfics", "Common.define.chartData.textColumn": "Columna", + "Common.define.chartData.textCombo": "Combo", + "Common.define.chartData.textComboAreaBar": "Àrea apilada - columna agrupada", + "Common.define.chartData.textComboBarLine": "Columna-línia agrupada", + "Common.define.chartData.textComboBarLineSecondary": " Columna-línia agrupada a l'eix secundari", + "Common.define.chartData.textComboCustom": "Combinació personalitzada", + "Common.define.chartData.textDoughnut": "Donut", + "Common.define.chartData.textHBarNormal": "Barra agrupada", + "Common.define.chartData.textHBarNormal3d": "Barra 3D agrupada", + "Common.define.chartData.textHBarStacked": "Barra apilada", + "Common.define.chartData.textHBarStacked3d": "Barra 3D apilada", + "Common.define.chartData.textHBarStackedPer": "Barra apilada al 100%", + "Common.define.chartData.textHBarStackedPer3d": "Barra 3-D apilada al 100%", "Common.define.chartData.textLine": "Línia", + "Common.define.chartData.textLine3d": "Línia 3D", + "Common.define.chartData.textLineMarker": "Línia amb marcadors", + "Common.define.chartData.textLineStacked": "Línia apilada", + "Common.define.chartData.textLineStackedMarker": "Línia apilada amb marcadors", + "Common.define.chartData.textLineStackedPer": "Línia apilada al 100%", + "Common.define.chartData.textLineStackedPerMarker": "Línia apilada al 100% amb marcadors", "Common.define.chartData.textPie": "Gràfic circular", + "Common.define.chartData.textPie3d": "Pastís 3D", "Common.define.chartData.textPoint": "XY (Dispersió)", + "Common.define.chartData.textScatter": "Dispersió", + "Common.define.chartData.textScatterLine": "Dispersió amb línies rectes", + "Common.define.chartData.textScatterLineMarker": "Dispersió amb línies rectes i marcadors", + "Common.define.chartData.textScatterSmooth": "Dispersió amb línies suaus", + "Common.define.chartData.textScatterSmoothMarker": "Dispersió amb línies suaus i marcadors", "Common.define.chartData.textStock": "Existències", "Common.define.chartData.textSurface": "Superfície", - "Common.Translation.warnFileLocked": "El document està sent editat per una altra aplicació. Podeu continuar editant i guardar-lo com a còpia.", + "Common.Translation.warnFileLocked": "No pot editar aquest fitxer perquè s'està editant en una altra aplicació.", + "Common.Translation.warnFileLockedBtnEdit": "Crea una còpia", + "Common.Translation.warnFileLockedBtnView": "Obrir per veure", "Common.UI.Calendar.textApril": "Abril", "Common.UI.Calendar.textAugust": "Agost", "Common.UI.Calendar.textDecember": "Desembre", @@ -138,6 +181,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Un altre usuari ha canviat el document.
    Feu clic per desar els canvis i tornar a carregar les actualitzacions.", "Common.UI.ThemeColorPalette.textStandartColors": "Colors Estàndards", "Common.UI.ThemeColorPalette.textThemeColors": "Colors Tema", + "Common.UI.Themes.txtThemeClassicLight": "Llum clàssica", + "Common.UI.Themes.txtThemeDark": "Fosc", + "Common.UI.Themes.txtThemeLight": "Llum", "Common.UI.Window.cancelButtonText": "Cancel·lar", "Common.UI.Window.closeButtonText": "Tancar", "Common.UI.Window.noButtonText": "No", @@ -159,10 +205,12 @@ "Common.Views.About.txtVersion": "Versió", "Common.Views.AutoCorrectDialog.textAdd": "Afegir", "Common.Views.AutoCorrectDialog.textApplyText": "Aplica a mesura que escrius", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Correcció Automàtica", "Common.Views.AutoCorrectDialog.textAutoFormat": "Format automàtic a mesura que escriviu", "Common.Views.AutoCorrectDialog.textBulleted": "Llistes automàtiques de vinyetes", "Common.Views.AutoCorrectDialog.textBy": "Per", "Common.Views.AutoCorrectDialog.textDelete": "Esborrar", + "Common.Views.AutoCorrectDialog.textFLSentence": "Posa en majúscules la primera lletra de les frases", "Common.Views.AutoCorrectDialog.textHyphens": "Guions (--) amb guió (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Correcció Automàtica Matemàtica", "Common.Views.AutoCorrectDialog.textNumbered": "Llistes numerades automàtiques", @@ -212,11 +260,13 @@ "Common.Views.ExternalMergeEditor.textSave": "Desar i Sortir", "Common.Views.ExternalMergeEditor.textTitle": "Receptors de Fusió de Correu", "Common.Views.Header.labelCoUsersDescr": "Usuaris que editen el fitxer:", + "Common.Views.Header.textAddFavorite": "Marca com a favorit", "Common.Views.Header.textAdvSettings": "Configuració Avançada", "Common.Views.Header.textBack": "Obrir ubicació del arxiu", "Common.Views.Header.textCompactView": "Amagar la Barra d'Eines", "Common.Views.Header.textHideLines": "Amagar Regles", "Common.Views.Header.textHideStatusBar": "Amagar la Barra d'Estat", + "Common.Views.Header.textRemoveFavorite": "Elimina dels Favorits", "Common.Views.Header.textZoom": "Zoom", "Common.Views.Header.tipAccessRights": "Gestiona els drets d’accés al document", "Common.Views.Header.tipDownload": "Descarregar arxiu", @@ -290,10 +340,15 @@ "Common.Views.ReviewChanges.strFastDesc": "Co-edició a temps real. Tots", "Common.Views.ReviewChanges.strStrict": "Estricte", "Common.Views.ReviewChanges.strStrictDesc": "Feu servir el botó \"Desa\" per sincronitzar els canvis que feu i els altres.", + "Common.Views.ReviewChanges.textEnable": "Activar", + "Common.Views.ReviewChanges.textWarnTrackChanges": "El seguiment de canvis s'activarà per a tots els usuaris amb accés total. La pròxima vegada que algú obri el document, el seguiment de canvis seguirà activat.", + "Common.Views.ReviewChanges.textWarnTrackChangesTitle": "Voleu activar el seguiment de canvis per a tothom?", "Common.Views.ReviewChanges.tipAcceptCurrent": "Acceptar el canvi actual", "Common.Views.ReviewChanges.tipCoAuthMode": "Configura el mode de coedició", "Common.Views.ReviewChanges.tipCommentRem": "Esborrar comentaris", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Esborrar comentaris actuals", + "Common.Views.ReviewChanges.tipCommentResolve": "Resoldre els comentaris", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Resol els comentaris actuals", "Common.Views.ReviewChanges.tipCompare": "Comparar el document actual amb un altre", "Common.Views.ReviewChanges.tipHistory": "Mostra l'historial de versions", "Common.Views.ReviewChanges.tipRejectCurrent": "Rebutjar canvi actual", @@ -305,7 +360,7 @@ "Common.Views.ReviewChanges.txtAccept": "Acceptar", "Common.Views.ReviewChanges.txtAcceptAll": "Acceptar Tots els Canvis", "Common.Views.ReviewChanges.txtAcceptChanges": "Acceptar canvis", - "Common.Views.ReviewChanges.txtAcceptCurrent": "Acceptar els Canvis Actuals", + "Common.Views.ReviewChanges.txtAcceptCurrent": "Acceptar el Canvis Actual", "Common.Views.ReviewChanges.txtChat": "Xat", "Common.Views.ReviewChanges.txtClose": "Tancar", "Common.Views.ReviewChanges.txtCoAuthMode": "Mode de Coedició", @@ -314,6 +369,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Esborrar els meus comentaris", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Esborrar els meus actuals comentaris", "Common.Views.ReviewChanges.txtCommentRemove": "Esborrar", + "Common.Views.ReviewChanges.txtCommentResolve": "Resol", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Resoldre tots els comentaris", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Resol els comentaris actuals", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Resoldre els Meus Comentaris", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Resoldre els Meus Comentaris Actuals", "Common.Views.ReviewChanges.txtCompare": "Comparar", "Common.Views.ReviewChanges.txtDocLang": "Idioma", "Common.Views.ReviewChanges.txtFinal": "Tots el canvis acceptats (Previsualitzar)", @@ -322,6 +382,10 @@ "Common.Views.ReviewChanges.txtMarkup": "Tots els canvis (Edició)", "Common.Views.ReviewChanges.txtMarkupCap": "Cambis", "Common.Views.ReviewChanges.txtNext": "Següent", + "Common.Views.ReviewChanges.txtOff": "DESACTIVAT per mi", + "Common.Views.ReviewChanges.txtOffGlobal": "DESACTIVAT per mi i per tothom", + "Common.Views.ReviewChanges.txtOn": "ACTIU per mi", + "Common.Views.ReviewChanges.txtOnGlobal": "ACTIU per mi i per tothom", "Common.Views.ReviewChanges.txtOriginal": "Tots els canvis rebutjats (Previsualitzar)", "Common.Views.ReviewChanges.txtOriginalCap": "Original", "Common.Views.ReviewChanges.txtPrev": "Anterior", @@ -336,7 +400,7 @@ "Common.Views.ReviewChangesDialog.textTitle": "Revisar canvis", "Common.Views.ReviewChangesDialog.txtAccept": "Acceptar", "Common.Views.ReviewChangesDialog.txtAcceptAll": "Acceptar Tots els Canvis", - "Common.Views.ReviewChangesDialog.txtAcceptCurrent": "Acceptar el Canvi Actual", + "Common.Views.ReviewChangesDialog.txtAcceptCurrent": "Acceptar el canvi actual", "Common.Views.ReviewChangesDialog.txtNext": "Al següent canvi", "Common.Views.ReviewChangesDialog.txtPrev": "Al canvi anterior", "Common.Views.ReviewChangesDialog.txtReject": "Rebutjar", @@ -349,7 +413,7 @@ "Common.Views.ReviewPopover.textEdit": "Acceptar", "Common.Views.ReviewPopover.textFollowMove": "Seguir Moure", "Common.Views.ReviewPopover.textMention": "+mention proporcionarà accés al document i enviarà un correu electrònic", - "Common.Views.ReviewPopover.textMentionNotify": "+mention notificarà l'usuari per correu electrònic", + "Common.Views.ReviewPopover.textMentionNotify": "+mention notificarà a l'usuari per correu electrònic", "Common.Views.ReviewPopover.textOpenAgain": "Obriu de nou", "Common.Views.ReviewPopover.textReply": "Contestar", "Common.Views.ReviewPopover.textResolve": "Resol", @@ -362,6 +426,7 @@ "Common.Views.SignDialog.textChange": "Canviar", "Common.Views.SignDialog.textInputName": "Posar nom de qui ho firma", "Common.Views.SignDialog.textItalic": "Itàlica", + "Common.Views.SignDialog.textNameError": "El nom del signant no pot estar buit.", "Common.Views.SignDialog.textPurpose": "Finalitat de signar aquest document", "Common.Views.SignDialog.textSelect": "Selecciona", "Common.Views.SignDialog.textSelectImage": "Seleccionar Imatge", @@ -407,6 +472,9 @@ "Common.Views.SymbolTableDialog.textSymbols": "Símbols", "Common.Views.SymbolTableDialog.textTitle": "Símbol", "Common.Views.SymbolTableDialog.textTradeMark": "Símbol de Marca Comercial", + "Common.Views.UserNameDialog.textDontShow": "No em tornis a preguntar", + "Common.Views.UserNameDialog.textLabel": "Etiqueta:", + "Common.Views.UserNameDialog.textLabelError": "L'etiqueta no pot estar en blanc.", "DE.Controllers.LeftMenu.leavePageText": "Es perdran tots els canvis no guardats en aquest document.
    Feu clic a \"Cancel·lar\" i, a continuació, \"Desa\" per desar-los. Feu clic a \"OK\" per descartar tots els canvis no desats.", "DE.Controllers.LeftMenu.newDocumentTitle": "Document sense nom", "DE.Controllers.LeftMenu.notcriticalErrorTitle": "Avis", @@ -432,6 +500,7 @@ "DE.Controllers.Main.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", "DE.Controllers.Main.errorBadImageUrl": "Enllaç de la Imatge Incorrecte", "DE.Controllers.Main.errorCoAuthoringDisconnect": "S'ha perdut la connexió amb el servidor. El document no es pot editar ara mateix.", + "DE.Controllers.Main.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", "DE.Controllers.Main.errorCompare": "La funció de comparació de documents no està disponible durant la coedició.", "DE.Controllers.Main.errorConnectToServer": "El document no s'ha pogut desar. Comproveu la configuració de la connexió o poseu-vos en contacte amb el vostre administrador.
    Quan feu clic al botó \"D'acord\", se us demanarà que descarregueu el document.", "DE.Controllers.Main.errorDatabaseConnection": "Error extern.
    Error de connexió de base de dades. Contacteu amb l'assistència en cas que l'error continuï.", @@ -454,7 +523,9 @@ "DE.Controllers.Main.errorSessionAbsolute": "La sessió d’edició del document ha caducat. Torneu a carregar la pàgina.", "DE.Controllers.Main.errorSessionIdle": "El document no s’ha editat des de fa temps. Torneu a carregar la pàgina.", "DE.Controllers.Main.errorSessionToken": "S'ha interromput la connexió amb el servidor. Torneu a carregar la pàgina.", + "DE.Controllers.Main.errorSetPassword": "No s'ha pogut establir la contrasenya.", "DE.Controllers.Main.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", + "DE.Controllers.Main.errorSubmit": "L'enviament ha fallat.", "DE.Controllers.Main.errorToken": "El testimoni de seguretat del document no està format correctament.
    Contacteu l'administrador del servidor de documents.", "DE.Controllers.Main.errorTokenExpire": "El testimoni de seguretat del document ha caducat.
    Contacteu amb l'administrador del Document Server.", "DE.Controllers.Main.errorUpdateVersion": "La versió del fitxer s'ha canviat. La pàgina es tornarà a carregar.", @@ -463,6 +534,7 @@ "DE.Controllers.Main.errorUsersExceed": "S'ha superat el nombre d’usuaris permès pel pla de preus", "DE.Controllers.Main.errorViewerDisconnect": "Es perd la connexió. Encara podeu visualitzar el document,
    però no podreu descarregar-lo ni imprimir-lo fins que no es restableixi la connexió i es torni a carregar la pàgina.", "DE.Controllers.Main.leavePageText": "Heu fet canvis no guardats en aquest document. Feu clic a \"Continua en aquesta pàgina\" i, a continuació, \"Desa\" per desar-les. Feu clic a \"Deixa aquesta pàgina\" per descartar tots els canvis no desats.", + "DE.Controllers.Main.leavePageTextOnClose": "Es perdran tots els canvis no guardats en aquest document.
    Feu clic a \"Cancel·lar\" i, a continuació, \"Desa\" per desar-los. Feu clic a \"OK\" per descartar tots els canvis no desats.", "DE.Controllers.Main.loadFontsTextText": "Carregant dades...", "DE.Controllers.Main.loadFontsTitleText": "Carregant Dades", "DE.Controllers.Main.loadFontTextText": "Carregant dades...", @@ -485,6 +557,7 @@ "DE.Controllers.Main.requestEditFailedMessageText": "Algú està editant aquest document ara mateix. Si us plau, intenta-ho més tard.", "DE.Controllers.Main.requestEditFailedTitleText": "Accés denegat", "DE.Controllers.Main.saveErrorText": "S'ha produït un error en desar el fitxer.", + "DE.Controllers.Main.saveErrorTextDesktop": "Aquest fitxer no es pot desar o crear.
    Les raons possibles són:
    1. El fitxer és de només lectura.
    2. El fitxer està sent editat per altres usuaris.
    3. El disc està ple o corromput.", "DE.Controllers.Main.savePreparingText": "Preparant per guardar", "DE.Controllers.Main.savePreparingTitle": "Preparant per guardar. Si us plau, esperi", "DE.Controllers.Main.saveTextText": "Desant Document...", @@ -504,15 +577,20 @@ "DE.Controllers.Main.textContactUs": "Contacte de Vendes", "DE.Controllers.Main.textConvertEquation": "Aquesta equació es va crear amb una versió antiga de l'editor d'equacions que ja no és compatible. Per editar-la, converteix l’equació al format d’Office Math ML.
    Converteix ara?", "DE.Controllers.Main.textCustomLoader": "Tingueu en compte que, segons els termes de la llicència, no teniu dret a canviar el carregador.
    Consulteu el nostre departament de vendes per obtenir un pressupost.", + "DE.Controllers.Main.textGuest": "Convidat", "DE.Controllers.Main.textHasMacros": "El fitxer conté macros automàtiques.
    Voleu executar macros?", "DE.Controllers.Main.textLearnMore": "Aprèn Més", "DE.Controllers.Main.textLoadingDocument": "Carregant document", + "DE.Controllers.Main.textLongName": "Introduïu un nom que sigui inferior a 128 caràcters.", "DE.Controllers.Main.textNoLicenseTitle": "Heu arribat al límit de la llicència", "DE.Controllers.Main.textPaidFeature": "Funció de pagament", - "DE.Controllers.Main.textRemember": "Recorda la meva elecció", + "DE.Controllers.Main.textRemember": "Recordar la meva elecció per a tots els fitxers", + "DE.Controllers.Main.textRenameError": "El nom d'usuari no pot estar buit.", + "DE.Controllers.Main.textRenameLabel": "Introduïu un nom per a la col·laboració", "DE.Controllers.Main.textShape": "Forma", "DE.Controllers.Main.textStrict": "Mode estricte", "DE.Controllers.Main.textTryUndoRedo": "Les funcions Desfés / Rehabiliteu estan desactivades per al mode de coedició ràpida. Feu clic al botó \"Mode estricte\" per canviar al mode de coedició estricte per editar el fitxer sense que hi hagi interferències d'altres usuaris i enviar els canvis només després de desar-lo ells. Podeu canviar entre els modes de coedició mitjançant l'editor Paràmetres avançats.", + "DE.Controllers.Main.textTryUndoRedoWarn": "Les funcions Desfer/Refer estan desactivades per al mode de coedició ràpida.", "DE.Controllers.Main.titleLicenseExp": "Llicència Caducada", "DE.Controllers.Main.titleServerVersion": "S'ha actualitzat l'editor", "DE.Controllers.Main.titleUpdateVersion": "Versió canviada", @@ -525,6 +603,7 @@ "DE.Controllers.Main.txtCallouts": "Trucades", "DE.Controllers.Main.txtCharts": "Gràfics", "DE.Controllers.Main.txtChoose": "Tria un element", + "DE.Controllers.Main.txtClickToLoad": "Clicar per carregar la imatge", "DE.Controllers.Main.txtCurrentDocument": "Actual Document", "DE.Controllers.Main.txtDiagramTitle": "Gràfic Títol", "DE.Controllers.Main.txtEditingMode": "Establir el mode d'edició ...", @@ -545,7 +624,9 @@ "DE.Controllers.Main.txtMissArg": "Falta Argument", "DE.Controllers.Main.txtMissOperator": "Falta Operador", "DE.Controllers.Main.txtNeedSynchronize": "Teniu actualitzacions", + "DE.Controllers.Main.txtNone": "cap", "DE.Controllers.Main.txtNoTableOfContents": "No hi ha cap títol al document. Apliqueu un estil d’encapçalament al text perquè aparegui a la taula de continguts.", + "DE.Controllers.Main.txtNoTableOfFigures": "No s'ha trobat cap entrada a la taula de figures.", "DE.Controllers.Main.txtNoText": "Error! No hi ha cap text d'estil especificat al document.", "DE.Controllers.Main.txtNotInTable": "No està en la taula", "DE.Controllers.Main.txtNotValidBookmark": "Error! No és una autoreferenciació de favorit vàlid.", @@ -671,7 +752,7 @@ "DE.Controllers.Main.txtShape_mathNotEqual": "No igual", "DE.Controllers.Main.txtShape_mathPlus": "Més", "DE.Controllers.Main.txtShape_moon": "Lluna", - "DE.Controllers.Main.txtShape_noSmoking": "\"No\" Símbol", + "DE.Controllers.Main.txtShape_noSmoking": "Símbol \"No\"", "DE.Controllers.Main.txtShape_notchedRightArrow": "Fletxa a la dreta encaixada", "DE.Controllers.Main.txtShape_octagon": "Octagon", "DE.Controllers.Main.txtShape_parallelogram": "Paral·lelograma", @@ -701,16 +782,16 @@ "DE.Controllers.Main.txtShape_snip2SameRect": "Retallar Rectangle de la cantonada del mateix costat", "DE.Controllers.Main.txtShape_snipRoundRect": "Retallar i rondejar rectangle de cantonada senzilla", "DE.Controllers.Main.txtShape_spline": "Corba", - "DE.Controllers.Main.txtShape_star10": "10-Punt Principal", - "DE.Controllers.Main.txtShape_star12": "12-Punt Principal", - "DE.Controllers.Main.txtShape_star16": "16-Punt Principal", - "DE.Controllers.Main.txtShape_star24": "24-Punt Principal", - "DE.Controllers.Main.txtShape_star32": "32-Punt Principal", - "DE.Controllers.Main.txtShape_star4": "4-Punt Principal", - "DE.Controllers.Main.txtShape_star5": "5-Punt Principal", - "DE.Controllers.Main.txtShape_star6": "6-Punt Principal", - "DE.Controllers.Main.txtShape_star7": "7-Punt Principal", - "DE.Controllers.Main.txtShape_star8": "8-Punt Principal", + "DE.Controllers.Main.txtShape_star10": "Estrella de 10 puntes", + "DE.Controllers.Main.txtShape_star12": "Estrella de 12 puntes", + "DE.Controllers.Main.txtShape_star16": "Estrella de 16 puntes", + "DE.Controllers.Main.txtShape_star24": "Estrella de 24 puntes", + "DE.Controllers.Main.txtShape_star32": "Estrella de 32 puntes", + "DE.Controllers.Main.txtShape_star4": "Estrella de 4 puntes", + "DE.Controllers.Main.txtShape_star5": "Estrella de 5 puntes", + "DE.Controllers.Main.txtShape_star6": "Estrella de 6 puntes", + "DE.Controllers.Main.txtShape_star7": "Estrella de 7 puntes", + "DE.Controllers.Main.txtShape_star8": "Estrella de 8 puntes", "DE.Controllers.Main.txtShape_stripedRightArrow": "Fletxa a la dreta amb bandes", "DE.Controllers.Main.txtShape_sun": "Sol", "DE.Controllers.Main.txtShape_teardrop": "Llàgrima", @@ -728,6 +809,7 @@ "DE.Controllers.Main.txtShape_wedgeRoundRectCallout": "Llibre rectangular de punt rodó", "DE.Controllers.Main.txtStarsRibbons": "Estrelles i Cintes", "DE.Controllers.Main.txtStyle_Caption": "Subtítol", + "DE.Controllers.Main.txtStyle_endnote_text": "Text de nota final", "DE.Controllers.Main.txtStyle_footnote_text": "Tex Peu de Pàgina", "DE.Controllers.Main.txtStyle_Heading_1": "Títol 1", "DE.Controllers.Main.txtStyle_Heading_2": "Títol 2", @@ -748,6 +830,8 @@ "DE.Controllers.Main.txtSyntaxError": "Error de Sintaxis", "DE.Controllers.Main.txtTableInd": "L'índex de la taula no pot ser zero", "DE.Controllers.Main.txtTableOfContents": "Taula de continguts", + "DE.Controllers.Main.txtTableOfFigures": "Taula de figures", + "DE.Controllers.Main.txtTOCHeading": "Capçalera de la taula", "DE.Controllers.Main.txtTooLarge": "El número es massa gran per donar-l'hi format", "DE.Controllers.Main.txtTypeEquation": "Escrivir una equació aquí.", "DE.Controllers.Main.txtUndefBookmark": "Marcador no definit", @@ -769,6 +853,8 @@ "DE.Controllers.Main.warnBrowserZoom": "La configuració del zoom actual del navegador no és totalment compatible. Restabliu el zoom per defecte prement Ctrl+0.", "DE.Controllers.Main.warnLicenseExceeded": "S'ha superat el nombre de connexions simultànies al servidor de documents i el document s'obrirà només per a la seva visualització.
    Contacteu l'administrador per obtenir més informació.", "DE.Controllers.Main.warnLicenseExp": "La seva llicencia ha caducat.
    Si us plau, actualitzi la llicencia i recarregui la pàgina.", + "DE.Controllers.Main.warnLicenseLimitedNoAccess": "La llicència ha caducat.
    No teniu accés a la funcionalitat d'edició de documents.
    Si us plau, contacteu amb l'administrador.", + "DE.Controllers.Main.warnLicenseLimitedRenewed": "Cal renovar la llicència.
    Teniu un accés limitat a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador per obtenir accés complet", "DE.Controllers.Main.warnLicenseUsersExceeded": "S'ha superat el nombre d'usuaris concurrents i el document s'obrirà només per a la seva visualització.
    Per més informació, poseu-vos en contacte amb l'administrador.", "DE.Controllers.Main.warnNoLicense": "Heu arribat al límit de connexions simultànies per als editors %1. Aquest document s'obrirà al mode de només lectura. Contacteu l'equip de vendes %1 per a les condicions personals de millora del servei.", "DE.Controllers.Main.warnNoLicenseUsers": "Heu arribat al límit d'usuaris concurrents per a editors %1.
    Contactau l'equip de vendes per als termes de millora personal dels vostres serveis.", @@ -776,6 +862,7 @@ "DE.Controllers.Navigation.txtBeginning": "Inici del document", "DE.Controllers.Navigation.txtGotoBeginning": "Anar al començament del document", "DE.Controllers.Statusbar.textHasChanges": "S'han fet un seguiment de nous canvis", + "DE.Controllers.Statusbar.textSetTrackChanges": "Esteu en mode de seguiment de canvis", "DE.Controllers.Statusbar.textTrackChanges": "El document s'obre amb el mode Canvis de pista activat", "DE.Controllers.Statusbar.tipReview": "Control de Canvis", "DE.Controllers.Statusbar.zoomText": "Zoom {0}%", @@ -787,6 +874,7 @@ "DE.Controllers.Toolbar.textFontSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor numèric entre 1 i 300.", "DE.Controllers.Toolbar.textFraction": "Fraccions", "DE.Controllers.Toolbar.textFunction": "Funcions", + "DE.Controllers.Toolbar.textGroup": "Grup", "DE.Controllers.Toolbar.textInsert": "Inserta", "DE.Controllers.Toolbar.textIntegral": "Integrals", "DE.Controllers.Toolbar.textLargeOperator": "Operadors Grans", @@ -796,6 +884,7 @@ "DE.Controllers.Toolbar.textRadical": "Radicals", "DE.Controllers.Toolbar.textScript": "Lletres", "DE.Controllers.Toolbar.textSymbols": "Símbols", + "DE.Controllers.Toolbar.textTabForms": "Formularis", "DE.Controllers.Toolbar.textWarning": "Avis", "DE.Controllers.Toolbar.txtAccent_Accent": "Agut", "DE.Controllers.Toolbar.txtAccent_ArrowD": "Fletxa dreta-esquerra superior", @@ -810,7 +899,7 @@ "DE.Controllers.Toolbar.txtAccent_CurveBracketBot": "Clau Subjacent", "DE.Controllers.Toolbar.txtAccent_CurveBracketTop": "Clau superposada", "DE.Controllers.Toolbar.txtAccent_Custom_1": "Vector A", - "DE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra", + "DE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra a sobre", "DE.Controllers.Toolbar.txtAccent_Custom_3": "x XOR i amb barra sobreposada", "DE.Controllers.Toolbar.txtAccent_DDDot": "Tres punts", "DE.Controllers.Toolbar.txtAccent_DDot": "Doble punt", @@ -981,9 +1070,9 @@ "DE.Controllers.Toolbar.txtMatrix_2_2_RoundBracket": "Matriu buida amb claudàtors", "DE.Controllers.Toolbar.txtMatrix_2_2_SquareBracket": "Matriu buida amb claudàtors", "DE.Controllers.Toolbar.txtMatrix_2_3": "2x3 matriu buida", - "DE.Controllers.Toolbar.txtMatrix_3_1": "3x1 matriu buida", - "DE.Controllers.Toolbar.txtMatrix_3_2": "3x2 matriu buida", - "DE.Controllers.Toolbar.txtMatrix_3_3": "3s3 matriu buida", + "DE.Controllers.Toolbar.txtMatrix_3_1": "Matriu buida 3x1", + "DE.Controllers.Toolbar.txtMatrix_3_2": "Matriu buida 3x2", + "DE.Controllers.Toolbar.txtMatrix_3_3": "Matriu buida 3x3", "DE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts Subíndexs", "DE.Controllers.Toolbar.txtMatrix_Dots_Center": "Punts en línia mitja", "DE.Controllers.Toolbar.txtMatrix_Dots_Diagonal": "Punts en diagonal", @@ -991,9 +1080,9 @@ "DE.Controllers.Toolbar.txtMatrix_Flat_Round": "Matriu escassa", "DE.Controllers.Toolbar.txtMatrix_Flat_Square": "Matriu escassa", "DE.Controllers.Toolbar.txtMatrix_Identity_2": "2x2 matriu d’identitat", - "DE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "3x3 matriu d’identitat", - "DE.Controllers.Toolbar.txtMatrix_Identity_3": "3x3 matriu d’identitat", - "DE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "3x3 matriu d’identitat", + "DE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "Matriu d’identitat 3x3", + "DE.Controllers.Toolbar.txtMatrix_Identity_3": "Matriu d’identitat 3x3", + "DE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "Matriu d’identitat 3x3", "DE.Controllers.Toolbar.txtOperator_ArrowD_Bot": "Fletxa dreta-esquerra inferior", "DE.Controllers.Toolbar.txtOperator_ArrowD_Top": "Fletxa dreta-esquerra superior", "DE.Controllers.Toolbar.txtOperator_ArrowL_Bot": "Fletxa inferior cap a esquerra", @@ -1335,6 +1424,7 @@ "DE.Views.DocumentHolder.textArrangeForward": "Portar Endavant", "DE.Views.DocumentHolder.textArrangeFront": "Porta a Primer pla", "DE.Views.DocumentHolder.textCells": "Cel·les", + "DE.Views.DocumentHolder.textCol": "Suprimeix tota la columna", "DE.Views.DocumentHolder.textContentControls": "Control de contingut", "DE.Views.DocumentHolder.textContinueNumbering": "Continua la numeració", "DE.Views.DocumentHolder.textCopy": "Copiar", @@ -1353,18 +1443,26 @@ "DE.Views.DocumentHolder.textFromStorage": "Des d'Emmagatzematge", "DE.Views.DocumentHolder.textFromUrl": "Des d'un Enllaç", "DE.Views.DocumentHolder.textJoinList": "Uniu-vos a la llista anterior", + "DE.Views.DocumentHolder.textLeft": "Desplaça les cel·les a l'esquerra", "DE.Views.DocumentHolder.textNest": "Taula niu", "DE.Views.DocumentHolder.textNextPage": "Pàgina Següent", "DE.Views.DocumentHolder.textNumberingValue": "Valor d'inici", "DE.Views.DocumentHolder.textPaste": "Pegar", "DE.Views.DocumentHolder.textPrevPage": "Pàgina anterior", "DE.Views.DocumentHolder.textRefreshField": "Actualitza el camp", + "DE.Views.DocumentHolder.textRemCheckBox": "Elimina la casella de selecció", + "DE.Views.DocumentHolder.textRemComboBox": "Elimina el quadre de combinació", + "DE.Views.DocumentHolder.textRemDropdown": "Elimina el desplegable", + "DE.Views.DocumentHolder.textRemField": "Eliminar camp de text", "DE.Views.DocumentHolder.textRemove": "Esborrar", "DE.Views.DocumentHolder.textRemoveControl": "Esborrar el control de contingut", + "DE.Views.DocumentHolder.textRemPicture": "Suprimir Imatge", + "DE.Views.DocumentHolder.textRemRadioBox": "Eliminar botó de selecció", "DE.Views.DocumentHolder.textReplace": "Canviar Imatge", "DE.Views.DocumentHolder.textRotate": "Girar", "DE.Views.DocumentHolder.textRotate270": "Girar 90° a l'esquerra", "DE.Views.DocumentHolder.textRotate90": "Girar 90° a la dreta", + "DE.Views.DocumentHolder.textRow": "Suprimeix tota la fila", "DE.Views.DocumentHolder.textSeparateList": "Separar llista", "DE.Views.DocumentHolder.textSettings": "Configuració", "DE.Views.DocumentHolder.textSeveral": "Diverses Files/Columnes", @@ -1376,6 +1474,7 @@ "DE.Views.DocumentHolder.textShapeAlignTop": "Alinear Superior", "DE.Views.DocumentHolder.textStartNewList": "Iniciar una llista nova", "DE.Views.DocumentHolder.textStartNumberingFrom": "Establir el valor de numeració", + "DE.Views.DocumentHolder.textTitleCellsRemove": "Suprimeix Cel·les", "DE.Views.DocumentHolder.textTOC": "Taula de continguts", "DE.Views.DocumentHolder.textTOCSettings": "Configuració de la taula de continguts", "DE.Views.DocumentHolder.textUndo": "Desfer", @@ -1589,7 +1688,7 @@ "DE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Haureu d’acceptar canvis abans de poder-los veure", "DE.Views.FileMenuPanels.Settings.strFast": "Ràpid", "DE.Views.FileMenuPanels.Settings.strFontRender": "Font Suggerida", - "DE.Views.FileMenuPanels.Settings.strForcesave": "Deseu sempre al servidor (en cas contrari, deseu-lo al servidor quan el tanqueu)", + "DE.Views.FileMenuPanels.Settings.strForcesave": "Afegeix una versió a l'emmagatzematge després de fer clic a Desa o Ctrl+S", "DE.Views.FileMenuPanels.Settings.strInputMode": "Activar els jeroglífics", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Activa la visualització dels comentaris", "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Configuració de macros", @@ -1599,6 +1698,7 @@ "DE.Views.FileMenuPanels.Settings.strShowChanges": "Canvis de Col·laboració en temps real", "DE.Views.FileMenuPanels.Settings.strSpellCheckMode": "Activar l’opció de correcció ortogràfica", "DE.Views.FileMenuPanels.Settings.strStrict": "Estricte", + "DE.Views.FileMenuPanels.Settings.strTheme": "Tema de la interfície", "DE.Views.FileMenuPanels.Settings.strUnit": "Unitat de Mesura", "DE.Views.FileMenuPanels.Settings.strZoom": "Valor de Zoom Predeterminat", "DE.Views.FileMenuPanels.Settings.text10Minutes": "Cada 10 minuts", @@ -1610,7 +1710,7 @@ "DE.Views.FileMenuPanels.Settings.textAutoSave": "Guardar Automàticament", "DE.Views.FileMenuPanels.Settings.textCompatible": "Compatibilitat", "DE.Views.FileMenuPanels.Settings.textDisabled": "Desactivat", - "DE.Views.FileMenuPanels.Settings.textForceSave": "Desar al Servidor", + "DE.Views.FileMenuPanels.Settings.textForceSave": "Desant versions intermèdies", "DE.Views.FileMenuPanels.Settings.textMinute": "Cada Minut", "DE.Views.FileMenuPanels.Settings.textOldVersions": "Feu que els fitxers siguin compatibles amb versions anteriors de MS Word quan els deseu com a DOCX", "DE.Views.FileMenuPanels.Settings.txtAll": "Veure Tot", @@ -1636,6 +1736,62 @@ "DE.Views.FileMenuPanels.Settings.txtWarnMacros": "Mostra la Notificació", "DE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Desactiveu totes les macros amb una notificació", "DE.Views.FileMenuPanels.Settings.txtWin": "com Windows", + "DE.Views.FormSettings.textCheckbox": "\nCasella de selecció", + "DE.Views.FormSettings.textColor": "Color Vora", + "DE.Views.FormSettings.textComb": "Pinta de caràcters", + "DE.Views.FormSettings.textCombobox": "Quadre combinat", + "DE.Views.FormSettings.textConnected": "Camps connectats", + "DE.Views.FormSettings.textDelete": "Suprimeix", + "DE.Views.FormSettings.textDisconnect": "Desconnectar", + "DE.Views.FormSettings.textDropDown": "Desplegar", + "DE.Views.FormSettings.textField": "Camp de text", + "DE.Views.FormSettings.textFixed": "Camp de mida fixa", + "DE.Views.FormSettings.textFromFile": "Des d'un fitxer", + "DE.Views.FormSettings.textFromStorage": "Des de l'Emmagatzematge", + "DE.Views.FormSettings.textFromUrl": "Des de l'URL", + "DE.Views.FormSettings.textGroupKey": "Clau de grup", + "DE.Views.FormSettings.textImage": "Imatge", + "DE.Views.FormSettings.textKey": "Clau", + "DE.Views.FormSettings.textLock": "Bloqueja", + "DE.Views.FormSettings.textMaxChars": "Límit de caràcters", + "DE.Views.FormSettings.textNoBorder": "Sense vora", + "DE.Views.FormSettings.textPlaceholder": "Marcador de posició", + "DE.Views.FormSettings.textRadiobox": "Botó d'opció", + "DE.Views.FormSettings.textRequired": "Requerit", + "DE.Views.FormSettings.textSelectImage": "Seleccionar imatge", + "DE.Views.FormSettings.textTip": "Consell", + "DE.Views.FormSettings.textTipAdd": "Afegeir nou valor", + "DE.Views.FormSettings.textTipDelete": "Suprimeix el valor", + "DE.Views.FormSettings.textTipDown": "Mou avall", + "DE.Views.FormSettings.textTipUp": "Mou amunt", + "DE.Views.FormSettings.textUnlock": "Desbloquejar", + "DE.Views.FormSettings.textValue": "Opcions de valor", + "DE.Views.FormSettings.textWidth": "Ample de cel·la", + "DE.Views.FormsTab.capBtnCheckBox": "Casella de selecció", + "DE.Views.FormsTab.capBtnComboBox": "Quadre combinat", + "DE.Views.FormsTab.capBtnDropDown": "Desplegable", + "DE.Views.FormsTab.capBtnImage": "Imatge", + "DE.Views.FormsTab.capBtnNext": "Camp Següent", + "DE.Views.FormsTab.capBtnPrev": "Camp anterior", + "DE.Views.FormsTab.capBtnRadioBox": "Botó d'opció", + "DE.Views.FormsTab.capBtnSubmit": "Enviar", + "DE.Views.FormsTab.capBtnText": "Camp de text", + "DE.Views.FormsTab.capBtnView": "Visualitzar formulari", + "DE.Views.FormsTab.textClear": "Neteja els camps", + "DE.Views.FormsTab.textClearFields": "Esborrar tots els camps", + "DE.Views.FormsTab.textHighlight": "Paràmetres de ressaltat", + "DE.Views.FormsTab.textNoHighlight": "Sense ressaltat", + "DE.Views.FormsTab.textSubmited": "El formulari s'ha enviat correctament", + "DE.Views.FormsTab.tipCheckBox": "Insereix casella de selecció", + "DE.Views.FormsTab.tipComboBox": "Insereix casella de combinació", + "DE.Views.FormsTab.tipDropDown": "Insereix llista desplegable", + "DE.Views.FormsTab.tipImageField": "Insereix imatge", + "DE.Views.FormsTab.tipNextForm": "Vés al camp següent", + "DE.Views.FormsTab.tipPrevForm": "Vés al camp anterior", + "DE.Views.FormsTab.tipRadioBox": "Insereix botó d'opció", + "DE.Views.FormsTab.tipSubmit": "Enviar formulari", + "DE.Views.FormsTab.tipTextField": "Insereix camp de text", + "DE.Views.FormsTab.tipViewForm": "Visualitzar formulari", "DE.Views.HeaderFooterSettings.textBottomCenter": "Inferior centre", "DE.Views.HeaderFooterSettings.textBottomLeft": "Inferior esquerra", "DE.Views.HeaderFooterSettings.textBottomPage": "Al Peu de Pàgina", @@ -1668,6 +1824,7 @@ "DE.Views.HyperlinkSettingsDialog.txtEmpty": "Aquest camp és obligatori", "DE.Views.HyperlinkSettingsDialog.txtHeadings": "Rúbriques", "DE.Views.HyperlinkSettingsDialog.txtNotUrl": "Aquest camp hauria de ser una URL en el format \"http://www.example.com\"", + "DE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Aquest camp està limitat a 2083 caràcters", "DE.Views.ImageSettings.textAdvanced": "Mostra la configuració avançada", "DE.Views.ImageSettings.textCrop": "Retallar", "DE.Views.ImageSettings.textCropFill": "Omplir", @@ -1773,7 +1930,7 @@ "DE.Views.ImageSettingsAdvanced.textWrapThroughTooltip": "A través", "DE.Views.ImageSettingsAdvanced.textWrapTightTooltip": "Estret", "DE.Views.ImageSettingsAdvanced.textWrapTopbottomTooltip": "Superior e Inferior", - "DE.Views.LeftMenu.tipAbout": "Sobre el programa", + "DE.Views.LeftMenu.tipAbout": "Quant a...", "DE.Views.LeftMenu.tipChat": "Xat", "DE.Views.LeftMenu.tipComments": "Comentaris", "DE.Views.LeftMenu.tipNavigation": "Navegació", @@ -1782,7 +1939,9 @@ "DE.Views.LeftMenu.tipSupport": "Opinió & Suport", "DE.Views.LeftMenu.tipTitles": "Títols", "DE.Views.LeftMenu.txtDeveloper": "MODALITAT DE DESENVOLUPADOR", + "DE.Views.LeftMenu.txtLimit": "Limitar l'accés", "DE.Views.LeftMenu.txtTrial": "ESTAT DE PROVA", + "DE.Views.LeftMenu.txtTrialDev": "Mode de desenvolupador de prova", "DE.Views.LineNumbersDialog.textAddLineNumbering": "Afegir numeració de línies", "DE.Views.LineNumbersDialog.textApplyTo": "Aplicar els canvis a", "DE.Views.LineNumbersDialog.textContinuous": "Contínua", @@ -1796,6 +1955,7 @@ "DE.Views.LineNumbersDialog.textSection": "Secció actual", "DE.Views.LineNumbersDialog.textStartAt": "Començar a", "DE.Views.LineNumbersDialog.textTitle": "Números de Línies", + "DE.Views.LineNumbersDialog.txtAutoText": "Automàtic", "DE.Views.Links.capBtnBookmarks": "Marcador", "DE.Views.Links.capBtnCaption": "Subtítol", "DE.Views.Links.capBtnContentsUpdate": "Actualitzar", @@ -1803,9 +1963,11 @@ "DE.Views.Links.capBtnInsContents": "Taula de continguts", "DE.Views.Links.capBtnInsFootnote": "Nota a peu de pàgina", "DE.Views.Links.capBtnInsLink": "Hiperenllaç", + "DE.Views.Links.capBtnTOF": "Taula de figures", "DE.Views.Links.confirmDeleteFootnotes": "Voleu suprimir totes les notes al peu de pàgina?", + "DE.Views.Links.confirmReplaceTOF": "Voleu substituir la taula de figures seleccionada?", "DE.Views.Links.mniConvertNote": "Converteix Totes les Notes", - "DE.Views.Links.mniDelFootnote": "Suprimeix totes les notes al peu de pàgina", + "DE.Views.Links.mniDelFootnote": "Suprimeix Totes les Notes", "DE.Views.Links.mniInsEndnote": "Inseriu Nota Final", "DE.Views.Links.mniInsFootnote": "Inserir Nota Peu Pàgina", "DE.Views.Links.mniNoteSettings": "Ajust de les notes a peu de pàgina", @@ -1825,6 +1987,9 @@ "DE.Views.Links.tipCrossRef": "Inseriu referència creuada", "DE.Views.Links.tipInsertHyperlink": "Afegir enllaç", "DE.Views.Links.tipNotes": "Inseriu o editeu notes a la pàgina de pàgina", + "DE.Views.Links.tipTableFigures": "Insereix taula de figures", + "DE.Views.Links.tipTableFiguresUpdate": "Actualitza la taula de figures", + "DE.Views.Links.titleUpdateTOF": "Actualitza la taula de figures", "DE.Views.ListSettingsDialog.textAuto": "Automàtic", "DE.Views.ListSettingsDialog.textCenter": "Centre", "DE.Views.ListSettingsDialog.textLeft": "Esquerra", @@ -1883,7 +2048,7 @@ "DE.Views.MailMergeSettings.textSendMsg": "Tots els missatges de correu electrònic estan preparats i seran enviats properament.
    La velocitat de la publicació depèn del servei de correu.
    Podeu continuar treballant amb el document o tancar-lo. Un cop finalitzada l’operació, la notificació s’enviarà a la vostra adreça de correu electrònic de registre.", "DE.Views.MailMergeSettings.textTo": "Per a", "DE.Views.MailMergeSettings.txtFirst": "Al Primer Camp", - "DE.Views.MailMergeSettings.txtFromToError": "El valor \"de\" ha de ser inferior al valor \"a\"", + "DE.Views.MailMergeSettings.txtFromToError": "El valor «De» ha de ser més petit que el valor «Fins»", "DE.Views.MailMergeSettings.txtLast": "A l'Últim camp", "DE.Views.MailMergeSettings.txtNext": "Al camp següent", "DE.Views.MailMergeSettings.txtPrev": "Al registre anterior", @@ -1904,6 +2069,7 @@ "DE.Views.NoteSettingsDialog.textApplyTo": "Aplicar els canvis a", "DE.Views.NoteSettingsDialog.textContinue": "Contínua", "DE.Views.NoteSettingsDialog.textCustom": "Personalitzar Marca", + "DE.Views.NoteSettingsDialog.textDocEnd": "Final del document", "DE.Views.NoteSettingsDialog.textDocument": "Tot el document", "DE.Views.NoteSettingsDialog.textEachPage": "Reinicieu cada pàgina", "DE.Views.NoteSettingsDialog.textEachSection": "Reinicieu cada secció", @@ -1947,6 +2113,10 @@ "DE.Views.PageSizeDialog.textTitle": "Mida de Pàgina", "DE.Views.PageSizeDialog.textWidth": "Amplada", "DE.Views.PageSizeDialog.txtCustom": "Personalitzat", + "DE.Views.ParagraphSettings.strIndent": "Sagnats", + "DE.Views.ParagraphSettings.strIndentsLeftText": "Esquerra", + "DE.Views.ParagraphSettings.strIndentsRightText": "Dreta", + "DE.Views.ParagraphSettings.strIndentsSpecial": "Especial", "DE.Views.ParagraphSettings.strLineHeight": "Espai entre Línies", "DE.Views.ParagraphSettings.strParagraphSpacing": "Espaiat de Paràgraf", "DE.Views.ParagraphSettings.strSomeParagraphSpace": "No afegiu interval entre paràgrafs del mateix estil", @@ -1958,6 +2128,9 @@ "DE.Views.ParagraphSettings.textAuto": "multiplicador", "DE.Views.ParagraphSettings.textBackColor": "Color de Fons", "DE.Views.ParagraphSettings.textExact": "Exacte", + "DE.Views.ParagraphSettings.textFirstLine": "Primera línia", + "DE.Views.ParagraphSettings.textHanging": "Penjat", + "DE.Views.ParagraphSettings.textNoneSpecial": "(cap)", "DE.Views.ParagraphSettings.txtAutoText": "Auto", "DE.Views.ParagraphSettingsAdvanced.noTabs": "Les pestanyes especificades apareixeran en aquest camp", "DE.Views.ParagraphSettingsAdvanced.strAllCaps": "Majúscules ", @@ -2033,6 +2206,7 @@ "DE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "DE.Views.ParagraphSettingsAdvanced.txtNoBorders": "Sense vores", "DE.Views.RightMenu.txtChartSettings": "Gràfic Configuració", + "DE.Views.RightMenu.txtFormSettings": "Paràmetres del formulari", "DE.Views.RightMenu.txtHeaderFooterSettings": "Configuració de la capçalera i el peu de pàgina", "DE.Views.RightMenu.txtImageSettings": "Configuració Imatge", "DE.Views.RightMenu.txtMailMergeSettings": "Ajusts de fusió", @@ -2049,7 +2223,7 @@ "DE.Views.ShapeSettings.strPattern": "Patró", "DE.Views.ShapeSettings.strShadow": "Mostra ombra", "DE.Views.ShapeSettings.strSize": "Mida", - "DE.Views.ShapeSettings.strStroke": "Traça", + "DE.Views.ShapeSettings.strStroke": "Línia", "DE.Views.ShapeSettings.strTransparency": "Opacitat", "DE.Views.ShapeSettings.strType": "Tipus", "DE.Views.ShapeSettings.textAdvanced": "Mostra la configuració avançada", @@ -2116,6 +2290,7 @@ "DE.Views.SignatureSettings.strValid": "Signatures vàlides", "DE.Views.SignatureSettings.txtContinueEditing": "Edita de totes maneres", "DE.Views.SignatureSettings.txtEditWarning": "L’edició eliminarà les signatures del document.
    Esteu segur que voleu continuar?", + "DE.Views.SignatureSettings.txtRemoveWarning": "Voleu eliminar aquesta signatura?
    Això no es podrà desfer.", "DE.Views.SignatureSettings.txtRequestedSignatures": "Aquest document s'ha de signar.", "DE.Views.SignatureSettings.txtSigned": "S'han afegit signatures vàlides al document. El document està protegit de l'edició.", "DE.Views.SignatureSettings.txtSignedInvalid": "Algunes de les signatures digitals del document no són vàlides o no s’han pogut verificar. El document està protegit de l'edició.", @@ -2140,20 +2315,32 @@ "DE.Views.TableFormulaDialog.textInsertFunction": "Funció Pegar", "DE.Views.TableFormulaDialog.textTitle": "Configuració de Fórmula", "DE.Views.TableOfContentsSettings.strAlign": "Alineeu a la dreta els números de pàgina", + "DE.Views.TableOfContentsSettings.strFullCaption": "Inclou l'etiqueta i el número", "DE.Views.TableOfContentsSettings.strLinks": "Format de la taula de continguts com a enllaços", + "DE.Views.TableOfContentsSettings.strLinksOF": "Formatar la taula de figures com a enllaços", "DE.Views.TableOfContentsSettings.strShowPages": "Mostra els números de la pàgina", "DE.Views.TableOfContentsSettings.textBuildTable": "Crea la taula de continguts a partir de", + "DE.Views.TableOfContentsSettings.textBuildTableOF": "Construir una taula de figures a partir de", + "DE.Views.TableOfContentsSettings.textEquation": "Equació", + "DE.Views.TableOfContentsSettings.textFigure": "Figura", "DE.Views.TableOfContentsSettings.textLeader": "Director", "DE.Views.TableOfContentsSettings.textLevel": "Nivell", "DE.Views.TableOfContentsSettings.textLevels": "Nivells", "DE.Views.TableOfContentsSettings.textNone": "Cap", + "DE.Views.TableOfContentsSettings.textRadioCaption": "Llegenda", "DE.Views.TableOfContentsSettings.textRadioLevels": "Nivells de perfil", + "DE.Views.TableOfContentsSettings.textRadioStyle": "Estil", "DE.Views.TableOfContentsSettings.textRadioStyles": "Seleccionar estils", "DE.Views.TableOfContentsSettings.textStyle": "Estil", "DE.Views.TableOfContentsSettings.textStyles": "Estils", + "DE.Views.TableOfContentsSettings.textTable": "Taula", "DE.Views.TableOfContentsSettings.textTitle": "Taula de continguts", + "DE.Views.TableOfContentsSettings.textTitleTOF": "Taula de figures", + "DE.Views.TableOfContentsSettings.txtCentered": "Centrat", "DE.Views.TableOfContentsSettings.txtClassic": "Clàssic", "DE.Views.TableOfContentsSettings.txtCurrent": "Actual", + "DE.Views.TableOfContentsSettings.txtDistinctive": "Distintiu", + "DE.Views.TableOfContentsSettings.txtFormal": "Formal", "DE.Views.TableOfContentsSettings.txtModern": "Moderna", "DE.Views.TableOfContentsSettings.txtOnline": "En línia", "DE.Views.TableOfContentsSettings.txtSimple": "Simple", @@ -2181,6 +2368,7 @@ "DE.Views.TableSettings.textBorders": "Estil de la Vora", "DE.Views.TableSettings.textCellSize": "Mida de Files i Columnes", "DE.Views.TableSettings.textColumns": "Columnes", + "DE.Views.TableSettings.textConvert": "Converteix la taula a text", "DE.Views.TableSettings.textDistributeCols": "Distribuïu les columnes", "DE.Views.TableSettings.textDistributeRows": "Distribuïu les files", "DE.Views.TableSettings.textEdit": "Files i Columnes", @@ -2285,10 +2473,18 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Sense vores", "DE.Views.TableSettingsAdvanced.txtPercent": "Percentatge", "DE.Views.TableSettingsAdvanced.txtPt": "Punt", + "DE.Views.TableToTextDialog.textEmpty": "Heu d'introduir un caràcter per al separador personalitzat.", + "DE.Views.TableToTextDialog.textNested": "Converteix les taules niuades", + "DE.Views.TableToTextDialog.textOther": "Altre", + "DE.Views.TableToTextDialog.textPara": "Marques de paràgraf", + "DE.Views.TableToTextDialog.textSemicolon": "Punts i coma", + "DE.Views.TableToTextDialog.textSeparator": "Separar el text amb", + "DE.Views.TableToTextDialog.textTab": "Pestanyes", + "DE.Views.TableToTextDialog.textTitle": "Converteix la taula a text", "DE.Views.TextArtSettings.strColor": "Color", "DE.Views.TextArtSettings.strFill": "Omplir", "DE.Views.TextArtSettings.strSize": "Mida", - "DE.Views.TextArtSettings.strStroke": "Traça", + "DE.Views.TextArtSettings.strStroke": "Línia", "DE.Views.TextArtSettings.strTransparency": "Opacitat", "DE.Views.TextArtSettings.strType": "Tipus", "DE.Views.TextArtSettings.textAngle": "Angle", @@ -2308,6 +2504,21 @@ "DE.Views.TextArtSettings.tipAddGradientPoint": "Afegir punt de degradat", "DE.Views.TextArtSettings.tipRemoveGradientPoint": "Elimina el punt de degradat", "DE.Views.TextArtSettings.txtNoBorders": "Sense Línia", + "DE.Views.TextToTableDialog.textAutofit": "Ajustament automàtic", + "DE.Views.TextToTableDialog.textColumns": "Columnes", + "DE.Views.TextToTableDialog.textContents": "Ajustar automàticament al contingut", + "DE.Views.TextToTableDialog.textEmpty": "Heu d'introduir un caràcter per al separador personalitzat.", + "DE.Views.TextToTableDialog.textFixed": "Amplada de columna fixa", + "DE.Views.TextToTableDialog.textOther": "Altre", + "DE.Views.TextToTableDialog.textPara": "Paràgrafs", + "DE.Views.TextToTableDialog.textRows": "Files", + "DE.Views.TextToTableDialog.textSemicolon": "Punts i coma", + "DE.Views.TextToTableDialog.textSeparator": "Separar el text a", + "DE.Views.TextToTableDialog.textTab": "Pestanyes", + "DE.Views.TextToTableDialog.textTableSize": "Mida de la taula", + "DE.Views.TextToTableDialog.textTitle": "Converteix el text a taula", + "DE.Views.TextToTableDialog.textWindow": "\nAjustar automàticament a la finestra", + "DE.Views.TextToTableDialog.txtAutoText": "Automàtic", "DE.Views.Toolbar.capBtnAddComment": "Afegir Comentari", "DE.Views.Toolbar.capBtnBlankPage": "Pàgina en Blanc", "DE.Views.Toolbar.capBtnColumns": "Columnes", @@ -2335,6 +2546,7 @@ "DE.Views.Toolbar.capImgForward": "Portar Endavant", "DE.Views.Toolbar.capImgGroup": "Agrupar", "DE.Views.Toolbar.capImgWrapping": "Ajustant", + "DE.Views.Toolbar.mniCapitalizeWords": "Posar en majúscules cada paraula", "DE.Views.Toolbar.mniCustomTable": "Inserir Taula Personalitzada", "DE.Views.Toolbar.mniDrawTable": "Taula de dibuix", "DE.Views.Toolbar.mniEditControls": "Configuració de control", @@ -2348,10 +2560,16 @@ "DE.Views.Toolbar.mniImageFromFile": "Imatge d'un Fitxer", "DE.Views.Toolbar.mniImageFromStorage": "Imatge d'un Magatzem", "DE.Views.Toolbar.mniImageFromUrl": "Imatge d'un Enllaç", + "DE.Views.Toolbar.mniLowerCase": "minúscules", + "DE.Views.Toolbar.mniSentenceCase": "Cas de frase", + "DE.Views.Toolbar.mniTextToTable": "Converteix el text a taula", + "DE.Views.Toolbar.mniToggleCase": "iNVERTIR mAJÚSCULES", + "DE.Views.Toolbar.mniUpperCase": "MAJÚSCULES", "DE.Views.Toolbar.strMenuNoFill": "Sense Omplir", "DE.Views.Toolbar.textAutoColor": "Automàtic", "DE.Views.Toolbar.textBold": "Negreta", "DE.Views.Toolbar.textBottom": "Inferior:", + "DE.Views.Toolbar.textChangeLevel": "Canvia el nivell de llista", "DE.Views.Toolbar.textCheckboxControl": "Casella de Selecció", "DE.Views.Toolbar.textColumnsCustom": "Personalitzar Columnes", "DE.Views.Toolbar.textColumnsLeft": "Esquerra", @@ -2428,6 +2646,7 @@ "DE.Views.Toolbar.tipAlignRight": "Alinear dreta", "DE.Views.Toolbar.tipBack": "Enrere", "DE.Views.Toolbar.tipBlankPage": "Inseriu pàgina en blanc", + "DE.Views.Toolbar.tipChangeCase": "Canvia el cas", "DE.Views.Toolbar.tipChangeChart": "Canviar el tipus de gràfic", "DE.Views.Toolbar.tipClearStyle": "Esborrar estil", "DE.Views.Toolbar.tipColorSchemas": "Canviar el esquema de color", diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index d78eb51d6..b7d3e1d3c 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -35,7 +35,7 @@ "Common.Controllers.ReviewChanges.textIndentRight": "Indent right", "Common.Controllers.ReviewChanges.textInserted": "Inserted:", "Common.Controllers.ReviewChanges.textItalic": "Italic", - "Common.Controllers.ReviewChanges.textJustify": "Align justify", + "Common.Controllers.ReviewChanges.textJustify": "Align justified", "Common.Controllers.ReviewChanges.textKeepLines": "Keep lines together", "Common.Controllers.ReviewChanges.textKeepNext": "Keep with next", "Common.Controllers.ReviewChanges.textLeft": "Align left", @@ -233,6 +233,12 @@ "Common.Views.AutoCorrectDialog.warnReset": "Any autocorrect you added will be removed and the changed ones will be restored to their original values. Do you want to continue?", "Common.Views.AutoCorrectDialog.warnRestore": "The autocorrect entry for %1 will be reset to its original value. Do you want to continue?", "Common.Views.Chat.textSend": "Send", + "Common.Views.Comments.mniAuthorAsc": "Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Author Z to A", + "Common.Views.Comments.mniDateAsc": "Oldest", + "Common.Views.Comments.mniDateDesc": "Newest", + "Common.Views.Comments.mniPositionAsc": "From top", + "Common.Views.Comments.mniPositionDesc": "From bottom", "Common.Views.Comments.textAdd": "Add", "Common.Views.Comments.textAddComment": "Add Comment", "Common.Views.Comments.textAddCommentToDoc": "Add Comment to Document", @@ -240,6 +246,7 @@ "Common.Views.Comments.textAnonym": "Guest", "Common.Views.Comments.textCancel": "Cancel", "Common.Views.Comments.textClose": "Close", + "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.Comments.textComments": "Comments", "Common.Views.Comments.textEdit": "OK", "Common.Views.Comments.textEnterCommentHint": "Enter your comment here", @@ -249,13 +256,6 @@ "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", - "Common.Views.Comments.mniAuthorAsc": "Author A to Z", - "Common.Views.Comments.mniAuthorDesc": "Author Z to A", - "Common.Views.Comments.mniDateDesc": "Newest", - "Common.Views.Comments.mniDateAsc": "Oldest", - "Common.Views.Comments.mniPositionAsc": "From top", - "Common.Views.Comments.mniPositionDesc": "From bottom", - "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", "Common.Views.CopyWarningDialog.textTitle": "Copy, Cut and Paste Actions", @@ -588,6 +588,7 @@ "DE.Controllers.Main.textContactUs": "Contact sales", "DE.Controllers.Main.textConvertEquation": "This equation was created with an old version of the equation editor which is no longer supported. To edit it, convert the equation to the Office Math ML format.
    Convert now?", "DE.Controllers.Main.textCustomLoader": "Please note that according to the terms of the license you are not entitled to change the loader.
    Please contact our Sales Department to get a quote.", + "DE.Controllers.Main.textDisconnect": "Connection is lost", "DE.Controllers.Main.textGuest": "Guest", "DE.Controllers.Main.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", "DE.Controllers.Main.textLearnMore": "Learn More", @@ -856,7 +857,7 @@ "DE.Controllers.Main.uploadDocSizeMessage": "Maximum document size limit exceeded.", "DE.Controllers.Main.uploadImageExtMessage": "Unknown image format.", "DE.Controllers.Main.uploadImageFileCountMessage": "No images uploaded.", - "DE.Controllers.Main.uploadImageSizeMessage": "Maximum image size limit exceeded.", + "DE.Controllers.Main.uploadImageSizeMessage": "The image is too big. The maximum size is 25 MB.", "DE.Controllers.Main.uploadImageTextText": "Uploading image...", "DE.Controllers.Main.uploadImageTitleText": "Uploading Image", "DE.Controllers.Main.waitText": "Please, wait...", @@ -870,7 +871,6 @@ "DE.Controllers.Main.warnNoLicense": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", "DE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", "DE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", - "DE.Controllers.Main.textDisconnect": "Connection is lost", "DE.Controllers.Navigation.txtBeginning": "Beginning of document", "DE.Controllers.Navigation.txtGotoBeginning": "Go to the beginning of the document", "DE.Controllers.Statusbar.textHasChanges": "New changes have been tracked", diff --git a/apps/documenteditor/main/locale/es.json b/apps/documenteditor/main/locale/es.json index bb2a4e06d..a81763380 100644 --- a/apps/documenteditor/main/locale/es.json +++ b/apps/documenteditor/main/locale/es.json @@ -35,7 +35,7 @@ "Common.Controllers.ReviewChanges.textIndentRight": "Sangría derecha", "Common.Controllers.ReviewChanges.textInserted": "Insertado:", "Common.Controllers.ReviewChanges.textItalic": "Cursiva", - "Common.Controllers.ReviewChanges.textJustify": "Alinear justificar", + "Common.Controllers.ReviewChanges.textJustify": "Alinear justificado", "Common.Controllers.ReviewChanges.textKeepLines": "Mantener líneas juntas", "Common.Controllers.ReviewChanges.textKeepNext": "Conservar con el siguiente", "Common.Controllers.ReviewChanges.textLeft": "Alinear a la izquierda", @@ -846,7 +846,7 @@ "DE.Controllers.Main.uploadDocSizeMessage": "Límite de tamaño máximo del documento excedido.", "DE.Controllers.Main.uploadImageExtMessage": "Formato de imagen desconocido.", "DE.Controllers.Main.uploadImageFileCountMessage": "Ningunas imágenes cargadas.", - "DE.Controllers.Main.uploadImageSizeMessage": "Tamaño máximo de imagen está superado.", + "DE.Controllers.Main.uploadImageSizeMessage": "La imagen es demasiado grande. El tamaño máximo es de 25 MB.", "DE.Controllers.Main.uploadImageTextText": "Subiendo imagen...", "DE.Controllers.Main.uploadImageTitleText": "Subiendo imagen", "DE.Controllers.Main.waitText": "Por favor, espere...", diff --git a/apps/documenteditor/main/locale/it.json b/apps/documenteditor/main/locale/it.json index 6c3dc540d..e832e5ca6 100644 --- a/apps/documenteditor/main/locale/it.json +++ b/apps/documenteditor/main/locale/it.json @@ -583,6 +583,7 @@ "DE.Controllers.Main.textShape": "Forma", "DE.Controllers.Main.textStrict": "Modalità Rigorosa", "DE.Controllers.Main.textTryUndoRedo": "Le funzioni Annulla/Ripristina sono disabilitate per la Modalità di Co-editing Veloce.
    Clicca il pulsante 'Modalità Rigorosa' per passare alla Modalità di Co-editing Rigorosa per poter modificare il file senza l'interferenza di altri utenti e inviare le modifiche solamente dopo averle salvate. Puoi passare da una modalità all'altra di co-editing utilizzando le Impostazioni avanzate dell'editor.", + "DE.Controllers.Main.textTryUndoRedoWarn": "Le funzioni Annulla/Ripeti sono disattivate nella modalità rapida in modifica collaborativa.", "DE.Controllers.Main.titleLicenseExp": "La licenza è scaduta", "DE.Controllers.Main.titleServerVersion": "L'editor è stato aggiornato", "DE.Controllers.Main.titleUpdateVersion": "Versione Modificata", @@ -616,6 +617,7 @@ "DE.Controllers.Main.txtMissArg": "Argomento mancante", "DE.Controllers.Main.txtMissOperator": "Operatore mancante", "DE.Controllers.Main.txtNeedSynchronize": "Ci sono aggiornamenti disponibili", + "DE.Controllers.Main.txtNone": "Niente", "DE.Controllers.Main.txtNoTableOfContents": "Non ci sono titoli nel documento. Applicare uno stile di titolo al testo in modo che appaia nel sommario.", "DE.Controllers.Main.txtNoTableOfFigures": "Nessuna voce della tabella delle cifre trovata.", "DE.Controllers.Main.txtNoText": "Errore! Nessuno stile specificato per il testo nel documento.", @@ -1747,6 +1749,7 @@ "DE.Views.FormSettings.textNoBorder": "Senza bordo", "DE.Views.FormSettings.textPlaceholder": "Segnaposto", "DE.Views.FormSettings.textRadiobox": "Pulsante opzione", + "DE.Views.FormSettings.textRequired": "Richiesto", "DE.Views.FormSettings.textSelectImage": "Seleziona Immagine", "DE.Views.FormSettings.textTip": "Suggerimento", "DE.Views.FormSettings.textTipAdd": "Aggiungi un nuovo valore", @@ -2462,6 +2465,9 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Nessun bordo", "DE.Views.TableSettingsAdvanced.txtPercent": "Percento", "DE.Views.TableSettingsAdvanced.txtPt": "Punto", + "DE.Views.TableToTextDialog.textEmpty": "‎È necessario digitare un carattere per il separatore personalizzato.‎", + "DE.Views.TableToTextDialog.textOther": "Altro", + "DE.Views.TableToTextDialog.textSemicolon": "Virgole", "DE.Views.TextArtSettings.strColor": "Colore", "DE.Views.TextArtSettings.strFill": "Riempimento", "DE.Views.TextArtSettings.strSize": "Dimensione", @@ -2486,6 +2492,10 @@ "DE.Views.TextArtSettings.tipRemoveGradientPoint": "Rimuovi punto sfumatura", "DE.Views.TextArtSettings.txtNoBorders": "Nessuna linea", "DE.Views.TextToTableDialog.textColumns": "Colonne", + "DE.Views.TextToTableDialog.textEmpty": "‎È necessario digitare un carattere per il separatore personalizzato.‎", + "DE.Views.TextToTableDialog.textOther": "Altro", + "DE.Views.TextToTableDialog.textRows": "Righe", + "DE.Views.TextToTableDialog.textSemicolon": "Virgole", "DE.Views.TextToTableDialog.txtAutoText": "Automatico", "DE.Views.Toolbar.capBtnAddComment": "Aggiungi commento", "DE.Views.Toolbar.capBtnBlankPage": "Pagina Vuota", diff --git a/apps/documenteditor/main/locale/nl.json b/apps/documenteditor/main/locale/nl.json index a48440332..ff590e77e 100644 --- a/apps/documenteditor/main/locale/nl.json +++ b/apps/documenteditor/main/locale/nl.json @@ -182,6 +182,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Het document is gewijzigd door een andere gebruiker.
    Klik om uw wijzigingen op te slaan en de updates opnieuw te laden.", "Common.UI.ThemeColorPalette.textStandartColors": "Standaardkleuren", "Common.UI.ThemeColorPalette.textThemeColors": "Themakleuren", + "Common.UI.Themes.txtThemeClassicLight": "Klassiek Licht", + "Common.UI.Themes.txtThemeDark": "Donker", + "Common.UI.Themes.txtThemeLight": "Licht", "Common.UI.Window.cancelButtonText": "Annuleren", "Common.UI.Window.closeButtonText": "Sluiten", "Common.UI.Window.noButtonText": "Nee", @@ -203,10 +206,12 @@ "Common.Views.About.txtVersion": "Versie", "Common.Views.AutoCorrectDialog.textAdd": "Toevoegen", "Common.Views.AutoCorrectDialog.textApplyText": "Toepassen terwijl u typt", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Auto Correctie", "Common.Views.AutoCorrectDialog.textAutoFormat": "AutoOpmaak terwijl u typt", "Common.Views.AutoCorrectDialog.textBulleted": "Automatische lijsten met opsommingstekens", "Common.Views.AutoCorrectDialog.textBy": "Door", "Common.Views.AutoCorrectDialog.textDelete": "Verwijderen", + "Common.Views.AutoCorrectDialog.textFLSentence": "Maak de eerste letter van zinnen hoofdletter", "Common.Views.AutoCorrectDialog.textHyphens": "Koppeltekens (--) met streepje (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Wiskundige autocorrectie", "Common.Views.AutoCorrectDialog.textNumbered": "Automatische genummerde lijsten", @@ -343,6 +348,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Zet samenwerkings modus", "Common.Views.ReviewChanges.tipCommentRem": "Alle opmerkingen verwijderen", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Verwijder huidige opmerking", + "Common.Views.ReviewChanges.tipCommentResolve": "Oplossen van opmerkingen", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Oplossen van huidige opmerkingen", "Common.Views.ReviewChanges.tipCompare": "Vergelijk huidig document met een ander document.", "Common.Views.ReviewChanges.tipHistory": "Toon versie geschiedenis", "Common.Views.ReviewChanges.tipRejectCurrent": "Huidige wijziging afwijzen", @@ -363,6 +370,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Verwijder al mijn commentaar", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Verwijder mijn huidige opmerkingen", "Common.Views.ReviewChanges.txtCommentRemove": "Verwijderen", + "Common.Views.ReviewChanges.txtCommentResolve": "Oplossen", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Alle opmerkingen oplossen", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Oplossen van huidige opmerkingen", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Los mijn opmerkingen op", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Mijn huidige opmerkingen oplossen", "Common.Views.ReviewChanges.txtCompare": "Vergelijken", "Common.Views.ReviewChanges.txtDocLang": "Taal", "Common.Views.ReviewChanges.txtFinal": "Alle veranderingen geaccepteerd (Voorbeeld)", @@ -523,6 +535,7 @@ "DE.Controllers.Main.errorUsersExceed": "Het onder het prijsplan toegestane aantal gebruikers is overschreden", "DE.Controllers.Main.errorViewerDisconnect": "Verbinding is verbroken. U kunt het document nog wel bekijken,
    maar u kunt het pas downloaden of afdrukken als de verbinding is hersteld en de pagina opnieuw is geladen.", "DE.Controllers.Main.leavePageText": "Dit document bevat niet-opgeslagen wijzigingen. Klik op \"Op deze pagina blijven\" en dan op \"Opslaan\" om uw wijzigingen op te slaan. Klik op \"Pagina verlaten\" om alle niet-opgeslagen wijzigingen te negeren.", + "DE.Controllers.Main.leavePageTextOnClose": "Alle niet opgeslagen wijzigingen in dit document gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet opgeslagen wijzigingen te verwijderen.", "DE.Controllers.Main.loadFontsTextText": "Gegevens worden geladen...", "DE.Controllers.Main.loadFontsTitleText": "Gegevens worden geladen", "DE.Controllers.Main.loadFontTextText": "Gegevens worden geladen...", @@ -578,6 +591,7 @@ "DE.Controllers.Main.textShape": "Vorm", "DE.Controllers.Main.textStrict": "Strikte modus", "DE.Controllers.Main.textTryUndoRedo": "De functies Ongedaan maken/Opnieuw worden uitgeschakeld in de modus Snel gezamenlijk bewerken.
    Klik op de knop 'Strikte modus' om over te schakelen naar de strikte modus voor gezamenlijk bewerken. U kunt het bestand dan zonder interferentie van andere gebruikers bewerken en uw wijzigingen verzenden wanneer u die opslaat. U kunt schakelen tussen de modi voor gezamenlijke bewerking via Geavanceerde instellingen van de editor.", + "DE.Controllers.Main.textTryUndoRedoWarn": "De functies Ongedaan maken/Annuleren zijn uitgeschakeld in de modus Snel meewerken.", "DE.Controllers.Main.titleLicenseExp": "Licentie vervallen", "DE.Controllers.Main.titleServerVersion": "Editor bijgewerkt", "DE.Controllers.Main.titleUpdateVersion": "Versie gewijzigd", @@ -590,6 +604,7 @@ "DE.Controllers.Main.txtCallouts": "Legenda", "DE.Controllers.Main.txtCharts": "Grafieken", "DE.Controllers.Main.txtChoose": "Kies een item", + "DE.Controllers.Main.txtClickToLoad": "Klik om afbeelding te laden", "DE.Controllers.Main.txtCurrentDocument": "Huidig document", "DE.Controllers.Main.txtDiagramTitle": "Grafiektitel", "DE.Controllers.Main.txtEditingMode": "Bewerkmodus instellen...", @@ -610,7 +625,9 @@ "DE.Controllers.Main.txtMissArg": "Missende parameter", "DE.Controllers.Main.txtMissOperator": "Ontbrekende operator", "DE.Controllers.Main.txtNeedSynchronize": "U hebt updates", + "DE.Controllers.Main.txtNone": "Geen", "DE.Controllers.Main.txtNoTableOfContents": "Er zijn geen koppen in het document. Pas een kopstijl toe op de tekst zodat deze in de inhoudsopgave wordt weergegeven.", + "DE.Controllers.Main.txtNoTableOfFigures": "Geen tabel met cijfers gevonden.", "DE.Controllers.Main.txtNoText": "Fout! Geen gespecificeerde tekst in document", "DE.Controllers.Main.txtNotInTable": "Is niet in tabel", "DE.Controllers.Main.txtNotValidBookmark": "Fout! Geen geldige zelf referentie voor bladwijzers.", @@ -793,6 +810,7 @@ "DE.Controllers.Main.txtShape_wedgeRoundRectCallout": "Afgeronde rechthoekige Legenda", "DE.Controllers.Main.txtStarsRibbons": "Sterren en linten", "DE.Controllers.Main.txtStyle_Caption": "Onderschrift", + "DE.Controllers.Main.txtStyle_endnote_text": "Eindnoot tekst", "DE.Controllers.Main.txtStyle_footnote_text": "Voetnoot tekst", "DE.Controllers.Main.txtStyle_Heading_1": "Kop 1", "DE.Controllers.Main.txtStyle_Heading_2": "Kop 2", @@ -813,6 +831,8 @@ "DE.Controllers.Main.txtSyntaxError": "Syntax error", "DE.Controllers.Main.txtTableInd": "Tabelindex mag niet nul zijn", "DE.Controllers.Main.txtTableOfContents": "Inhoudsopgave", + "DE.Controllers.Main.txtTableOfFigures": "Tabel met cijfers", + "DE.Controllers.Main.txtTOCHeading": "TOC rubriek", "DE.Controllers.Main.txtTooLarge": "te groot getal om te formatteren", "DE.Controllers.Main.txtTypeEquation": "Typ hier een vergelijking.", "DE.Controllers.Main.txtUndefBookmark": "Ongedefinieerde bladwijzer", @@ -855,6 +875,7 @@ "DE.Controllers.Toolbar.textFontSizeErr": "De ingevoerde waarde is onjuist.
    Voer een waarde tussen 1 en 300 in", "DE.Controllers.Toolbar.textFraction": "Breuken", "DE.Controllers.Toolbar.textFunction": "Functies", + "DE.Controllers.Toolbar.textGroup": "Groep", "DE.Controllers.Toolbar.textInsert": "Invoegen", "DE.Controllers.Toolbar.textIntegral": "Integralen", "DE.Controllers.Toolbar.textLargeOperator": "Grote operators", @@ -1725,6 +1746,7 @@ "DE.Views.FormSettings.textDisconnect": "Verbinding verbreken", "DE.Views.FormSettings.textDropDown": "Dropdown", "DE.Views.FormSettings.textField": "Tekstvak", + "DE.Views.FormSettings.textFixed": "Veld met vaste afmetingen", "DE.Views.FormSettings.textFromFile": "Van bestand", "DE.Views.FormSettings.textFromStorage": "Van Opslag", "DE.Views.FormSettings.textFromUrl": "Van URL", @@ -1736,6 +1758,7 @@ "DE.Views.FormSettings.textNoBorder": "Geen rand", "DE.Views.FormSettings.textPlaceholder": "Tijdelijke aanduiding", "DE.Views.FormSettings.textRadiobox": "Radial knop", + "DE.Views.FormSettings.textRequired": "Vereist", "DE.Views.FormSettings.textSelectImage": "Selecteer afbeelding", "DE.Views.FormSettings.textTip": "Tip", "DE.Views.FormSettings.textTipAdd": "Voeg nieuwe waarde toe", @@ -1803,6 +1826,7 @@ "DE.Views.HyperlinkSettingsDialog.txtEmpty": "Dit veld is vereist", "DE.Views.HyperlinkSettingsDialog.txtHeadings": "Koppen", "DE.Views.HyperlinkSettingsDialog.txtNotUrl": "Dit veld moet een URL in de notatie \"http://www.voorbeeld.com\" bevatten", + "DE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Dit veld is beperkt tot 2083 tekens", "DE.Views.ImageSettings.textAdvanced": "Geavanceerde instellingen tonen", "DE.Views.ImageSettings.textCrop": "Uitsnijden", "DE.Views.ImageSettings.textCropFill": "Vulling", @@ -2346,6 +2370,7 @@ "DE.Views.TableSettings.textBorders": "Randstijl", "DE.Views.TableSettings.textCellSize": "Rijen & Kolommen grootte", "DE.Views.TableSettings.textColumns": "Kolommen", + "DE.Views.TableSettings.textConvert": "Tabel omzetten naar tekst", "DE.Views.TableSettings.textDistributeCols": "Kolommen verdelen", "DE.Views.TableSettings.textDistributeRows": "Rijen verdelen", "DE.Views.TableSettings.textEdit": "Rijen en kolommen", @@ -2450,6 +2475,14 @@ "DE.Views.TableSettingsAdvanced.txtNoBorders": "Geen randen", "DE.Views.TableSettingsAdvanced.txtPercent": "Procent", "DE.Views.TableSettingsAdvanced.txtPt": "Punt", + "DE.Views.TableToTextDialog.textEmpty": "U moet een teken typen voor het aangepaste scheidingsteken.", + "DE.Views.TableToTextDialog.textNested": "Geneste tabellen converteren", + "DE.Views.TableToTextDialog.textOther": "Andere", + "DE.Views.TableToTextDialog.textPara": "Paragraaf tekens", + "DE.Views.TableToTextDialog.textSemicolon": "Puntkomma's", + "DE.Views.TableToTextDialog.textSeparator": "Scheid tekst met", + "DE.Views.TableToTextDialog.textTab": "Table size", + "DE.Views.TableToTextDialog.textTitle": "Tabel omzetten naar tekst", "DE.Views.TextArtSettings.strColor": "Kleur", "DE.Views.TextArtSettings.strFill": "Vulling", "DE.Views.TextArtSettings.strSize": "Grootte", @@ -2473,6 +2506,21 @@ "DE.Views.TextArtSettings.tipAddGradientPoint": "Kleurovergangpunt toevoegen", "DE.Views.TextArtSettings.tipRemoveGradientPoint": "Kleurovergangpunt verwijderen", "DE.Views.TextArtSettings.txtNoBorders": "Geen lijn", + "DE.Views.TextToTableDialog.textAutofit": "Automatisch passend gedrag", + "DE.Views.TextToTableDialog.textColumns": "Kolommen", + "DE.Views.TextToTableDialog.textContents": "Automatisch aanpassen aan de inhoud", + "DE.Views.TextToTableDialog.textEmpty": "U moet een teken typen voor het aangepaste scheidingsteken.", + "DE.Views.TextToTableDialog.textFixed": "Vaste kolombreedte", + "DE.Views.TextToTableDialog.textOther": "Andere", + "DE.Views.TextToTableDialog.textPara": "Paragrafen", + "DE.Views.TextToTableDialog.textRows": "Rijen", + "DE.Views.TextToTableDialog.textSemicolon": "Puntkomma's", + "DE.Views.TextToTableDialog.textSeparator": "Afzonderlijke tekst op", + "DE.Views.TextToTableDialog.textTab": "Tabs", + "DE.Views.TextToTableDialog.textTableSize": "Tabel Grootte", + "DE.Views.TextToTableDialog.textTitle": "Tekst omzetten naar tabel", + "DE.Views.TextToTableDialog.textWindow": "Automatische aanpassing aan het venster", + "DE.Views.TextToTableDialog.txtAutoText": "Auto", "DE.Views.Toolbar.capBtnAddComment": "Opmerking toevoegen", "DE.Views.Toolbar.capBtnBlankPage": "Lege pagina", "DE.Views.Toolbar.capBtnColumns": "Kolommen", @@ -2516,6 +2564,7 @@ "DE.Views.Toolbar.mniImageFromUrl": "Afbeelding van URL", "DE.Views.Toolbar.mniLowerCase": "kleine letters ", "DE.Views.Toolbar.mniSentenceCase": "Zin lettertype", + "DE.Views.Toolbar.mniTextToTable": "Tekst omzetten naar tabel", "DE.Views.Toolbar.mniToggleCase": "Schakel lettertype", "DE.Views.Toolbar.mniUpperCase": "HOOFDLETTERS", "DE.Views.Toolbar.strMenuNoFill": "Geen vulling", @@ -2599,7 +2648,7 @@ "DE.Views.Toolbar.tipAlignRight": "Rechts uitlijnen", "DE.Views.Toolbar.tipBack": "Terug", "DE.Views.Toolbar.tipBlankPage": "Invoegen nieuwe pagina", - "DE.Views.Toolbar.tipChangeCase": "Verander lettertype", + "DE.Views.Toolbar.tipChangeCase": "Verander geval", "DE.Views.Toolbar.tipChangeChart": "Grafiektype wijzigen", "DE.Views.Toolbar.tipClearStyle": "Stijl wissen", "DE.Views.Toolbar.tipColorSchemas": "Kleurenschema wijzigen", diff --git a/apps/documenteditor/main/locale/pt.json b/apps/documenteditor/main/locale/pt.json index 711516688..a85479625 100644 --- a/apps/documenteditor/main/locale/pt.json +++ b/apps/documenteditor/main/locale/pt.json @@ -35,7 +35,7 @@ "Common.Controllers.ReviewChanges.textIndentRight": "Indent right", "Common.Controllers.ReviewChanges.textInserted": "Inserted:", "Common.Controllers.ReviewChanges.textItalic": "Italic", - "Common.Controllers.ReviewChanges.textJustify": "Align justify", + "Common.Controllers.ReviewChanges.textJustify": "Alinhamento justificado", "Common.Controllers.ReviewChanges.textKeepLines": "Keep lines together", "Common.Controllers.ReviewChanges.textKeepNext": "Keep with next", "Common.Controllers.ReviewChanges.textLeft": "Align left", diff --git a/apps/documenteditor/main/locale/ru.json b/apps/documenteditor/main/locale/ru.json index 261e06c30..53a1fd700 100644 --- a/apps/documenteditor/main/locale/ru.json +++ b/apps/documenteditor/main/locale/ru.json @@ -846,7 +846,7 @@ "DE.Controllers.Main.uploadDocSizeMessage": "Превышен максимальный размер документа.", "DE.Controllers.Main.uploadImageExtMessage": "Неизвестный формат изображения.", "DE.Controllers.Main.uploadImageFileCountMessage": "Ни одного изображения не загружено.", - "DE.Controllers.Main.uploadImageSizeMessage": "Превышен максимальный размер изображения.", + "DE.Controllers.Main.uploadImageSizeMessage": "Слишком большое изображение. Максимальный размер - 25 MB.", "DE.Controllers.Main.uploadImageTextText": "Загрузка изображения...", "DE.Controllers.Main.uploadImageTitleText": "Загрузка изображения", "DE.Controllers.Main.waitText": "Пожалуйста, подождите...", diff --git a/apps/documenteditor/main/locale/tr.json b/apps/documenteditor/main/locale/tr.json index 6151929fd..9c0fa1705 100644 --- a/apps/documenteditor/main/locale/tr.json +++ b/apps/documenteditor/main/locale/tr.json @@ -60,17 +60,21 @@ "Common.Controllers.ReviewChanges.textStrikeout": "Strikeout", "Common.Controllers.ReviewChanges.textSubScript": "Subscript", "Common.Controllers.ReviewChanges.textSuperScript": "Superscript", + "Common.Controllers.ReviewChanges.textTableChanged": "Tablo Ayarladı Değiştirildi", + "Common.Controllers.ReviewChanges.textTableRowsDel": "Tablo Satırı Silindi", "Common.Controllers.ReviewChanges.textTabs": "Change tabs", "Common.Controllers.ReviewChanges.textUnderline": "Underline", "Common.Controllers.ReviewChanges.textWidow": "Widow control", "Common.define.chartData.textArea": "Bölge Grafiği", "Common.define.chartData.textBar": "Çubuk grafik", "Common.define.chartData.textColumn": "Sütun grafik", + "Common.define.chartData.textComboCustom": "Özel kombinasyon", "Common.define.chartData.textLine": "Çizgi grafiği", "Common.define.chartData.textPie": "Dilim grafik", "Common.define.chartData.textPoint": "Nokta grafiği", "Common.define.chartData.textStock": "Stok Grafiği", "Common.define.chartData.textSurface": "Yüzey", + "Common.Translation.warnFileLockedBtnEdit": "Kopya oluştur", "Common.UI.Calendar.textApril": "Nisan", "Common.UI.Calendar.textAugust": "Ağustos", "Common.UI.Calendar.textDecember": "Aralık", @@ -119,6 +123,9 @@ "Common.Views.About.txtTel": "tel:", "Common.Views.About.txtVersion": "Versiyon", "Common.Views.AutoCorrectDialog.textAdd": "ekle", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Otomatik Düzeltme", + "Common.Views.AutoCorrectDialog.textDelete": "Sil", + "Common.Views.AutoCorrectDialog.textTitle": "Otomatik Düzeltme", "Common.Views.Chat.textSend": "Gönder", "Common.Views.Comments.textAdd": "Ekle", "Common.Views.Comments.textAddComment": "Yorum Ekle", @@ -200,7 +207,9 @@ "Common.Views.Plugins.textStart": "Başlat", "Common.Views.Plugins.textStop": "Bitir", "Common.Views.Protection.hintPwd": "Şifreyi değiştir veya sil", + "Common.Views.Protection.txtAddPwd": "Şifre ekle", "Common.Views.Protection.txtChangePwd": "Şifre Değiştir", + "Common.Views.Protection.txtDeletePwd": "Şifreyi sil", "Common.Views.Protection.txtInvisibleSignature": "Dijital imza ekle", "Common.Views.RenameDialog.textName": "Dosya adı", "Common.Views.RenameDialog.txtInvalidName": "Dosya adı aşağıdaki karakterlerden herhangi birini içeremez:", @@ -255,6 +264,7 @@ "Common.Views.ReviewChangesDialog.txtRejectAll": "Tüm Değişiklikleri Reddet", "Common.Views.ReviewChangesDialog.txtRejectCurrent": "Mevcut Değişiklikleri Reddet", "Common.Views.ReviewPopover.textAdd": "Ekle", + "Common.Views.ReviewPopover.textAddReply": "Cevap ekle", "Common.Views.ReviewPopover.textCancel": "İptal", "Common.Views.ReviewPopover.textClose": "Kapat", "Common.Views.ReviewPopover.textEdit": "Tamam", @@ -384,10 +394,13 @@ "DE.Controllers.Main.titleUpdateVersion": "Versiyon değiştirildi", "DE.Controllers.Main.txtArt": "Your text here", "DE.Controllers.Main.txtBasicShapes": "Temel Şekiller", + "DE.Controllers.Main.txtBelow": "Altında", "DE.Controllers.Main.txtBookmarkError": "Hata! Yer imi tanımlı değil", "DE.Controllers.Main.txtButtons": "Tuşlar", "DE.Controllers.Main.txtCallouts": "Belirtme Çizgiler", "DE.Controllers.Main.txtCharts": "Grafikler", + "DE.Controllers.Main.txtChoose": "Bir öğe seçin", + "DE.Controllers.Main.txtCurrentDocument": "Mevcut belge", "DE.Controllers.Main.txtDiagramTitle": "Diagram Başlığı", "DE.Controllers.Main.txtEditingMode": "Düzenleme modunu belirle", "DE.Controllers.Main.txtEnterDate": "Bir tarih girin", @@ -402,6 +415,11 @@ "DE.Controllers.Main.txtSeries": "Seriler", "DE.Controllers.Main.txtShape_actionButtonHome": "Ev Tuşu", "DE.Controllers.Main.txtShape_cloud": "Bulut", + "DE.Controllers.Main.txtShape_corner": "Köşe", + "DE.Controllers.Main.txtShape_decagon": "Dekagon", + "DE.Controllers.Main.txtShape_diagStripe": "Çapraz Çizgi", + "DE.Controllers.Main.txtShape_diamond": "Elmas", + "DE.Controllers.Main.txtShape_downArrow": "Aşağı Oku", "DE.Controllers.Main.txtShape_leftArrow": "Sol Ok", "DE.Controllers.Main.txtShape_lineWithArrow": "Ok", "DE.Controllers.Main.txtShape_noSmoking": "Simge \"Yok\"", @@ -830,6 +848,7 @@ "DE.Views.CaptionDialog.textSeparator": "Ayraç", "DE.Views.CaptionDialog.textTable": "Tablo", "DE.Views.CaptionDialog.textTitle": "Resim yazısı ekle", + "DE.Views.CellsAddDialog.textCol": "Sütunlar", "DE.Views.ChartSettings.textAdvanced": "Gelişmiş ayarları göster", "DE.Views.ChartSettings.textChartType": "Grafik Tipini Değiştir", "DE.Views.ChartSettings.textEditData": "Veri düzenle", @@ -849,13 +868,19 @@ "DE.Views.ChartSettings.txtTitle": "Grafik", "DE.Views.ChartSettings.txtTopAndBottom": "Üst ve alt", "DE.Views.ControlSettingsDialog.textAdd": "ekle", + "DE.Views.ControlSettingsDialog.textApplyAll": "Tümüne Uygula", "DE.Views.ControlSettingsDialog.textColor": "Renk", "DE.Views.ControlSettingsDialog.textDate": "Tarih formatı", + "DE.Views.ControlSettingsDialog.textDelete": "Sil", + "DE.Views.ControlSettingsDialog.textDisplayName": "Görünen ad", + "DE.Views.ControlSettingsDialog.textDown": "Aşağı", + "DE.Views.ControlSettingsDialog.textDropDown": "Aşağı açılır liste", "DE.Views.ControlSettingsDialog.textFormat": "Tarihi böyle göster", "DE.Views.ControlSettingsDialog.textLang": "Dil", "DE.Views.ControlSettingsDialog.textName": "Başlık", "DE.Views.ControlSettingsDialog.textTag": "Etiket", "DE.Views.ControlSettingsDialog.tipChange": "Simge değiştir", + "DE.Views.CrossReferenceDialog.textAboveBelow": "Yukarı/aşağı", "DE.Views.CrossReferenceDialog.textBookmark": "Yer imi", "DE.Views.CrossReferenceDialog.textBookmarkText": "Yer imi metni", "DE.Views.CrossReferenceDialog.textCaption": "Resim yazısının tamamı", @@ -949,6 +974,7 @@ "DE.Views.DocumentHolder.textArrangeBackward": "Geri Taşı", "DE.Views.DocumentHolder.textArrangeForward": "İleri Taşı", "DE.Views.DocumentHolder.textArrangeFront": "Önplana Getir", + "DE.Views.DocumentHolder.textCol": "Tüm sütunu sil", "DE.Views.DocumentHolder.textCopy": "Kopyala", "DE.Views.DocumentHolder.textCut": "Kes", "DE.Views.DocumentHolder.textEditWrapBoundary": "Sargı Sınırı Düzenle", @@ -959,12 +985,14 @@ "DE.Views.DocumentHolder.textRotate": "Döndür", "DE.Views.DocumentHolder.textRotate270": "Döndür 90° Saatyönütersi", "DE.Views.DocumentHolder.textRotate90": "Döndür 90° Saatyönü", + "DE.Views.DocumentHolder.textRow": "Tüm diziyi sil", "DE.Views.DocumentHolder.textShapeAlignBottom": "Alta Hizala", "DE.Views.DocumentHolder.textShapeAlignCenter": "Ortaya Hizala", "DE.Views.DocumentHolder.textShapeAlignLeft": "Sola Hizala", "DE.Views.DocumentHolder.textShapeAlignMiddle": "Ortaya hizala", "DE.Views.DocumentHolder.textShapeAlignRight": "Sağa Hizla", "DE.Views.DocumentHolder.textShapeAlignTop": "Üste Hizala", + "DE.Views.DocumentHolder.textTitleCellsRemove": "Hücre Sil", "DE.Views.DocumentHolder.textUndo": "Geri Al", "DE.Views.DocumentHolder.textUpdateAll": "Tüm tabloyu güncelle", "DE.Views.DocumentHolder.textUpdatePages": "Sadece sayfa numaralarını güncelle", @@ -1097,6 +1125,7 @@ "DE.Views.DropcapSettingsAdvanced.textWidth": "Genişlik", "DE.Views.DropcapSettingsAdvanced.tipFontName": "Yazı Tipi", "DE.Views.DropcapSettingsAdvanced.txtNoBorders": "Sınır yok", + "DE.Views.EditListItemDialog.textDisplayName": "Görünen ad", "DE.Views.FileMenu.btnBackCaption": "Dökümanlara Git", "DE.Views.FileMenu.btnCloseMenuCaption": "Menüyü kapat", "DE.Views.FileMenu.btnCreateNewCaption": "Yeni oluştur", @@ -1121,7 +1150,9 @@ "DE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Oluşturulduktan sonra düzenleme sırasında stil ve format verebileceğiniz yeni boş metin dosyası oluşturun. Yada belli tipte yada amaçta dökümana başlamak için şablonlardan birini seçin, bu şablonlar önceden düzenlenmiştir.", "DE.Views.FileMenuPanels.CreateNew.newDocumentText": "Yeni Metin Dökümanı", "DE.Views.FileMenuPanels.CreateNew.noTemplatesText": "Şablon yok", + "DE.Views.FileMenuPanels.DocumentInfo.okButtonText": "Uygula", "DE.Views.FileMenuPanels.DocumentInfo.txtAddAuthor": "Yazar Ekle", + "DE.Views.FileMenuPanels.DocumentInfo.txtAddText": "Metin Ekle", "DE.Views.FileMenuPanels.DocumentInfo.txtAuthor": "Yayıncı", "DE.Views.FileMenuPanels.DocumentInfo.txtBtnAccessRights": "Erişim haklarını değiştir", "DE.Views.FileMenuPanels.DocumentInfo.txtLoading": "Yükleniyor...", @@ -1168,6 +1199,7 @@ "DE.Views.FileMenuPanels.Settings.textForceSave": "Sunucuya Kaydet", "DE.Views.FileMenuPanels.Settings.textMinute": "Her Dakika", "DE.Views.FileMenuPanels.Settings.txtAll": "Tümünü göster", + "DE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Otomatik Düzeltme seçenekleri", "DE.Views.FileMenuPanels.Settings.txtCm": "Santimetre", "DE.Views.FileMenuPanels.Settings.txtFitPage": "Sayfaya Sığdır", "DE.Views.FileMenuPanels.Settings.txtFitWidth": "Genişliğe Sığdır", @@ -1184,6 +1216,14 @@ "DE.Views.FileMenuPanels.Settings.txtStopMacrosDesc": "Bütün macroları uyarı vermeden devre dışı bırak", "DE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Bütün macroları uyarı vererek devre dışı bırak", "DE.Views.FileMenuPanels.Settings.txtWin": "Windows olarak", + "DE.Views.FormSettings.textDelete": "Sil", + "DE.Views.FormSettings.textDisconnect": "Bağlantıyı Kes", + "DE.Views.FormSettings.textDropDown": "Aşağı açılır", + "DE.Views.FormSettings.textMaxChars": "Karakter sınırı", + "DE.Views.FormSettings.textTipAdd": "Yeni değer ekle", + "DE.Views.FormSettings.textTipDelete": "Değeri sil", + "DE.Views.FormsTab.capBtnDropDown": "Aşağı açılır", + "DE.Views.FormsTab.tipDropDown": "Aşağı açılır liste ekle", "DE.Views.HeaderFooterSettings.textBottomCenter": "Alt Orta", "DE.Views.HeaderFooterSettings.textBottomLeft": "Alt Sol", "DE.Views.HeaderFooterSettings.textBottomRight": "Alt Sağ", @@ -1244,6 +1284,7 @@ "DE.Views.ImageSettingsAdvanced.textAngle": "Açı", "DE.Views.ImageSettingsAdvanced.textArrows": "Oklar", "DE.Views.ImageSettingsAdvanced.textAspectRatio": "En-boy oranını kilitle", + "DE.Views.ImageSettingsAdvanced.textAutofit": "Otomatik Sığdır", "DE.Views.ImageSettingsAdvanced.textBeginSize": "Başlama Boyutu", "DE.Views.ImageSettingsAdvanced.textBeginStyle": "Başlama Stili", "DE.Views.ImageSettingsAdvanced.textBelow": "altında", @@ -1422,6 +1463,7 @@ "DE.Views.NoteSettingsDialog.textTitle": "Not ayarları", "DE.Views.NotesRemoveDialog.textEnd": "Tüm Son Notları sil", "DE.Views.NotesRemoveDialog.textFoot": "Tüm dipnotları sil", + "DE.Views.NotesRemoveDialog.textTitle": "Notları sil", "DE.Views.PageMarginsDialog.notcriticalErrorTitle": "Warning", "DE.Views.PageMarginsDialog.textBottom": "Bottom", "DE.Views.PageMarginsDialog.textLeft": "Left", @@ -1433,6 +1475,7 @@ "DE.Views.PageSizeDialog.textHeight": "Height", "DE.Views.PageSizeDialog.textTitle": "Page Size", "DE.Views.PageSizeDialog.textWidth": "Width", + "DE.Views.PageSizeDialog.txtCustom": "Özel", "DE.Views.ParagraphSettings.strLineHeight": "Satır Aralığı", "DE.Views.ParagraphSettings.strParagraphSpacing": "Aralık", "DE.Views.ParagraphSettings.strSomeParagraphSpace": "Aynı stildeki paragraflar arasına aralık ekleme", @@ -1453,6 +1496,7 @@ "DE.Views.ParagraphSettingsAdvanced.strIndentsLeftText": "Sol", "DE.Views.ParagraphSettingsAdvanced.strIndentsRightText": "Sağ", "DE.Views.ParagraphSettingsAdvanced.strIndentsSpacingAfter": "sonra", + "DE.Views.ParagraphSettingsAdvanced.strIndentsSpacingBefore": "Önce", "DE.Views.ParagraphSettingsAdvanced.strKeepLines": "Satırları birlikte tut", "DE.Views.ParagraphSettingsAdvanced.strKeepNext": "Sonrakiyle tut", "DE.Views.ParagraphSettingsAdvanced.strMargins": "Dolgu maddeleri", @@ -1473,6 +1517,7 @@ "DE.Views.ParagraphSettingsAdvanced.textBorderDesc": "Grafiğe tıklayın yada sınır seçmek için tuşları kullanın ve seçilen stili bunlara uygulayın", "DE.Views.ParagraphSettingsAdvanced.textBorderWidth": "Sınır Boyutu", "DE.Views.ParagraphSettingsAdvanced.textBottom": "Alt", + "DE.Views.ParagraphSettingsAdvanced.textCentered": "Ortalanmış", "DE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Karakter aralığı", "DE.Views.ParagraphSettingsAdvanced.textDefault": "Varsayılan Sekme", "DE.Views.ParagraphSettingsAdvanced.textEffects": "Efektler", @@ -1578,6 +1623,7 @@ "DE.Views.TableOfContentsSettings.textLeader": "Lider", "DE.Views.TableOfContentsSettings.textLevel": "Seviye", "DE.Views.TableOfContentsSettings.textLevels": "Seviyeler", + "DE.Views.TableOfContentsSettings.txtCurrent": "Mevcut", "DE.Views.TableOfContentsSettings.txtModern": "Modern", "DE.Views.TableSettings.deleteColumnText": "Sütunu Sil", "DE.Views.TableSettings.deleteRowText": "Satırı Sil", @@ -1594,6 +1640,7 @@ "DE.Views.TableSettings.splitCellsText": "Hücreyi Böl...", "DE.Views.TableSettings.splitCellTitleText": "Hücreyi Böl", "DE.Views.TableSettings.strRepeatRow": "Her sayfanın başında üst başlık sırası olarak tekrarla", + "DE.Views.TableSettings.textAddFormula": "Formül ekle", "DE.Views.TableSettings.textAdvanced": "Gelişmiş ayarları göster", "DE.Views.TableSettings.textBackColor": "Arka plan rengi", "DE.Views.TableSettings.textBanded": "Bağlı", @@ -1622,6 +1669,8 @@ "DE.Views.TableSettings.tipRight": "Sadece Dış Sağ Sınırı Belirle", "DE.Views.TableSettings.tipTop": "Sadece Dış Üst Sınırı Belirle", "DE.Views.TableSettings.txtNoBorders": "Sınır yok", + "DE.Views.TableSettings.txtTable_Accent": "Aksan", + "DE.Views.TableSettings.txtTable_Colorful": "Renkli", "DE.Views.TableSettingsAdvanced.textAlign": "Hiza", "DE.Views.TableSettingsAdvanced.textAlignment": "Hiza", "DE.Views.TableSettingsAdvanced.textAllowSpacing": "Hücreler arası aralığa izin ver", @@ -1700,6 +1749,7 @@ "DE.Views.TextArtSettings.strStroke": "Stroke", "DE.Views.TextArtSettings.strTransparency": "Opacity", "DE.Views.TextArtSettings.strType": "Tip", + "DE.Views.TextArtSettings.textAngle": "Açı", "DE.Views.TextArtSettings.textBorderSizeErr": "The entered value is incorrect.
    Please enter a value between 0 pt and 1584 pt.", "DE.Views.TextArtSettings.textColor": "Color Fill", "DE.Views.TextArtSettings.textDirection": "Direction", @@ -1713,6 +1763,9 @@ "DE.Views.TextArtSettings.textTemplate": "Template", "DE.Views.TextArtSettings.textTransform": "Transform", "DE.Views.TextArtSettings.txtNoBorders": "No Line", + "DE.Views.TextToTableDialog.textColumns": "Sütunlar", + "DE.Views.TextToTableDialog.textContents": "İçeriğe otomatik sığdır", + "DE.Views.TextToTableDialog.textWindow": "Pencereye otomatik sığdır", "DE.Views.Toolbar.capBtnAddComment": "Yorum ekle", "DE.Views.Toolbar.capBtnBlankPage": "Boş Sayfa", "DE.Views.Toolbar.capBtnColumns": "Sütunlar", @@ -1763,6 +1816,7 @@ "DE.Views.Toolbar.textContPage": "Devam Eden Sayfa", "DE.Views.Toolbar.textCustomLineNumbers": "Sayfa numaralandırma seçenekleri", "DE.Views.Toolbar.textDateControl": "Tarih", + "DE.Views.Toolbar.textDropdownControl": "Aşağı açılır liste", "DE.Views.Toolbar.textEditWatermark": "Özel Filigran", "DE.Views.Toolbar.textEvenPage": "Çift Sayfa", "DE.Views.Toolbar.textInMargin": "Kenar boşluğunda", @@ -1872,6 +1926,7 @@ "DE.Views.Toolbar.tipSynchronize": "Döküman başka bir kullanıcı tarafından değiştirildi. Lütfen değişikleri kaydetmek için tıklayın ve güncellemeleri yenileyin.", "DE.Views.Toolbar.tipUndo": "Geri Al", "DE.Views.Toolbar.tipWatermark": "Filigranı düzenle", + "DE.Views.Toolbar.txtObjectsAlign": "Seçili Objeleri Hizala", "DE.Views.Toolbar.txtScheme1": "Ofis", "DE.Views.Toolbar.txtScheme10": "Medyan", "DE.Views.Toolbar.txtScheme11": "Metro", diff --git a/apps/documenteditor/main/locale/zh.json b/apps/documenteditor/main/locale/zh.json index e36c42a85..3c6af3ada 100644 --- a/apps/documenteditor/main/locale/zh.json +++ b/apps/documenteditor/main/locale/zh.json @@ -169,6 +169,7 @@ "Common.Views.AutoCorrectDialog.textBy": "依据", "Common.Views.AutoCorrectDialog.textDelete": "删除", "Common.Views.AutoCorrectDialog.textMathCorrect": "数学自动修正", + "Common.Views.AutoCorrectDialog.textRecognizedDesc": "以下表达式被识别为数学公式。这些表达式不会被自动设为斜体。", "Common.Views.AutoCorrectDialog.textReplace": "替换", "Common.Views.AutoCorrectDialog.textReplaceText": "输入时自动替换", "Common.Views.AutoCorrectDialog.textReplaceType": "输入时自动替换文字", @@ -289,6 +290,7 @@ "Common.Views.ReviewChanges.strFastDesc": "实时共同编辑。所有更改将会自动保存。", "Common.Views.ReviewChanges.strStrict": "严格", "Common.Views.ReviewChanges.strStrictDesc": "使用“保存”按钮同步您和其他人所做的更改。", + "Common.Views.ReviewChanges.textWarnTrackChanges": "对全体有完整控制权的用户,“跟踪修改”功能将会启动。任何人下次打开该文档,“跟踪修改”功能都会保持在启动状态。", "Common.Views.ReviewChanges.tipAcceptCurrent": "接受当前的变化", "Common.Views.ReviewChanges.tipCoAuthMode": "设置共同编辑模式", "Common.Views.ReviewChanges.tipCommentRem": "移除批注", @@ -432,6 +434,7 @@ "DE.Controllers.Main.errorAccessDeny": "您正在尝试执行您没有权限的操作。
    请联系您的文档服务器管理员.", "DE.Controllers.Main.errorBadImageUrl": "图片地址不正确", "DE.Controllers.Main.errorCoAuthoringDisconnect": "服务器连接丢失。该文档现在无法编辑", + "DE.Controllers.Main.errorComboSeries": "要创建联立图表,请选中至少两组数据。", "DE.Controllers.Main.errorCompare": "协作编辑状态下,无法使用文件比对功能。", "DE.Controllers.Main.errorConnectToServer": "这份文件无法保存。请检查连接设置或联系您的管理员。
    当你点击“OK”按钮,系统将提示您下载文档。", "DE.Controllers.Main.errorDatabaseConnection": "外部错误。
    数据库连接错误。如果错误仍然存​​在,请联系支持人员。", @@ -454,6 +457,7 @@ "DE.Controllers.Main.errorSessionAbsolute": "文档编辑会话已过期。请重新加载页面。", "DE.Controllers.Main.errorSessionIdle": "该文件尚未编辑相当长的时间。请重新加载页面。", "DE.Controllers.Main.errorSessionToken": "与服务器的连接已中断。请重新加载页面。", + "DE.Controllers.Main.errorSetPassword": "未能成功设置密码", "DE.Controllers.Main.errorStockChart": "行顺序不正确。建立股票图表将数据按照以下顺序放置在表格上:
    开盘价,最高价格,最低价格,收盘价。", "DE.Controllers.Main.errorToken": "文档安全令牌未正确形成。
    请与您的文件服务器管理员联系。", "DE.Controllers.Main.errorTokenExpire": "文档安全令牌已过期。
    请与您的文档服务器管理员联系。", @@ -514,6 +518,7 @@ "DE.Controllers.Main.textShape": "形状", "DE.Controllers.Main.textStrict": "严格模式", "DE.Controllers.Main.textTryUndoRedo": "对于快速的协同编辑模式,取消/重做功能是禁用的。< br >单击“严格模式”按钮切换到严格co-editing模式编辑该文件没有其他用户干扰和发送您的更改只后你拯救他们。您可以使用编辑器高级设置在编辑模式之间切换。", + "DE.Controllers.Main.textTryUndoRedoWarn": "快速共同编辑模式下,撤销/重做功能被禁用。", "DE.Controllers.Main.titleLicenseExp": "许可证过期", "DE.Controllers.Main.titleServerVersion": "编辑器已更新", "DE.Controllers.Main.titleUpdateVersion": "版本已变化", @@ -779,6 +784,7 @@ "DE.Controllers.Navigation.txtBeginning": "文档开头", "DE.Controllers.Navigation.txtGotoBeginning": "转到文档开头", "DE.Controllers.Statusbar.textHasChanges": "已经跟踪了新的变化", + "DE.Controllers.Statusbar.textSetTrackChanges": "你现在处于了“跟踪变化”模式。", "DE.Controllers.Statusbar.textTrackChanges": "打开文档,并启用“跟踪更改”模式", "DE.Controllers.Statusbar.tipReview": "跟踪变化", "DE.Controllers.Statusbar.zoomText": "缩放%{0}", @@ -1704,6 +1710,7 @@ "DE.Views.HyperlinkSettingsDialog.txtEmpty": "这是必填栏", "DE.Views.HyperlinkSettingsDialog.txtHeadings": "标题", "DE.Views.HyperlinkSettingsDialog.txtNotUrl": "该字段应该是“http://www.example.com”格式的URL", + "DE.Views.HyperlinkSettingsDialog.txtSizeLimit": "该域字符限制为2803个。", "DE.Views.ImageSettings.textAdvanced": "显示高级设置", "DE.Views.ImageSettings.textCrop": "裁剪", "DE.Views.ImageSettings.textCropFill": "填满", @@ -1820,6 +1827,7 @@ "DE.Views.LeftMenu.txtDeveloper": "开发者模式", "DE.Views.LeftMenu.txtLimit": "限制访问", "DE.Views.LeftMenu.txtTrial": "试用模式", + "DE.Views.LeftMenu.txtTrialDev": "试用开发者模式", "DE.Views.LineNumbersDialog.textAddLineNumbering": "新增行号", "DE.Views.LineNumbersDialog.textApplyTo": "应用更改", "DE.Views.LineNumbersDialog.textContinuous": "连续", diff --git a/apps/presentationeditor/embed/locale/ro.json b/apps/presentationeditor/embed/locale/ro.json index fb9fb2621..d53edef04 100644 --- a/apps/presentationeditor/embed/locale/ro.json +++ b/apps/presentationeditor/embed/locale/ro.json @@ -25,6 +25,7 @@ "PE.ApplicationController.waitText": "Vă rugăm să așteptați...", "PE.ApplicationView.txtDownload": "Descărcare", "PE.ApplicationView.txtEmbed": "Încorporare", + "PE.ApplicationView.txtFileLocation": "Deschidere locația fișierului", "PE.ApplicationView.txtFullScreen": "Ecran complet", "PE.ApplicationView.txtPrint": "Imprimare", "PE.ApplicationView.txtShare": "Partajează" diff --git a/apps/presentationeditor/embed/locale/tr.json b/apps/presentationeditor/embed/locale/tr.json index e2e851937..402dc5d93 100644 --- a/apps/presentationeditor/embed/locale/tr.json +++ b/apps/presentationeditor/embed/locale/tr.json @@ -24,6 +24,7 @@ "PE.ApplicationController.waitText": "Lütfen bekleyin...", "PE.ApplicationView.txtDownload": "İndir", "PE.ApplicationView.txtEmbed": "Gömülü", + "PE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "PE.ApplicationView.txtFullScreen": "Tam Ekran", "PE.ApplicationView.txtPrint": "Yazdır", "PE.ApplicationView.txtShare": "Paylaş" diff --git a/apps/presentationeditor/embed/locale/zh.json b/apps/presentationeditor/embed/locale/zh.json index 86b913c56..fbb4fa02e 100644 --- a/apps/presentationeditor/embed/locale/zh.json +++ b/apps/presentationeditor/embed/locale/zh.json @@ -25,6 +25,7 @@ "PE.ApplicationController.waitText": "请稍候...", "PE.ApplicationView.txtDownload": "下载", "PE.ApplicationView.txtEmbed": "嵌入", + "PE.ApplicationView.txtFileLocation": "打开文件所在位置", "PE.ApplicationView.txtFullScreen": "全屏", "PE.ApplicationView.txtPrint": "打印", "PE.ApplicationView.txtShare": "共享" diff --git a/apps/presentationeditor/main/locale/ca.json b/apps/presentationeditor/main/locale/ca.json index 56d657a2f..8e7fc7442 100644 --- a/apps/presentationeditor/main/locale/ca.json +++ b/apps/presentationeditor/main/locale/ca.json @@ -6,16 +6,51 @@ "Common.Controllers.ExternalDiagramEditor.warningText": "L’objecte està desactivat perquè està sent editat per un altre usuari.", "Common.Controllers.ExternalDiagramEditor.warningTitle": "Avis", "Common.define.chartData.textArea": "Àrea", + "Common.define.chartData.textAreaStacked": "Àrea apilada", + "Common.define.chartData.textAreaStackedPer": "Àrea apilada al 100%", "Common.define.chartData.textBar": "Barra", - "Common.define.chartData.textCharts": "Gràfics", + "Common.define.chartData.textBarNormal": "Columna agrupada", + "Common.define.chartData.textBarNormal3d": "Columna 3D agrupada", + "Common.define.chartData.textBarNormal3dPerspective": "Columna 3D", + "Common.define.chartData.textBarStacked": "Columna apilada", + "Common.define.chartData.textBarStacked3d": "Columna 3D apilada", + "Common.define.chartData.textBarStackedPer": "Columna apilada al 100%", + "Common.define.chartData.textBarStackedPer3d": "columna 3D apilada al 100%", + "Common.define.chartData.textCharts": "Diagrames", "Common.define.chartData.textColumn": "Columna", + "Common.define.chartData.textCombo": "Combo", + "Common.define.chartData.textComboAreaBar": "Àrea apilada - columna agrupada", + "Common.define.chartData.textComboBarLine": "Columna-línia agrupada", + "Common.define.chartData.textComboBarLineSecondary": " Columna-línia agrupada a l'eix secundari", + "Common.define.chartData.textComboCustom": "Combinació personalitzada", + "Common.define.chartData.textDoughnut": "Donut", + "Common.define.chartData.textHBarNormal": "Barra agrupada", + "Common.define.chartData.textHBarNormal3d": "Barra 3D agrupada", + "Common.define.chartData.textHBarStacked": "Barra apilada", + "Common.define.chartData.textHBarStacked3d": "Barra 3D apilada", + "Common.define.chartData.textHBarStackedPer": "Barra apilada al 100%", + "Common.define.chartData.textHBarStackedPer3d": "Barra 3D apilada al 100%", "Common.define.chartData.textLine": "Línia", + "Common.define.chartData.textLine3d": "Línia 3D", + "Common.define.chartData.textLineMarker": "Línia amb marcadors", + "Common.define.chartData.textLineStacked": "Línia apilada", + "Common.define.chartData.textLineStackedMarker": "Línia apilada amb marcadors", + "Common.define.chartData.textLineStackedPer": "Línia apilada al 100%", + "Common.define.chartData.textLineStackedPerMarker": "Línia apilada al 100% amb marcadors", "Common.define.chartData.textPie": "Gràfic circular", + "Common.define.chartData.textPie3d": "Pastís 3D", "Common.define.chartData.textPoint": "XY (Dispersió)", + "Common.define.chartData.textScatter": "Dispersió", + "Common.define.chartData.textScatterLine": "Dispersió amb línies rectes", + "Common.define.chartData.textScatterLineMarker": "Dispersió amb línies rectes i marcadors", + "Common.define.chartData.textScatterSmooth": "Dispersió amb línies suaus", + "Common.define.chartData.textScatterSmoothMarker": "Dispersió amb línies suaus i marcadors", "Common.define.chartData.textStock": "Existències", "Common.define.chartData.textSurface": "Superfície", "Common.Translation.warnFileLocked": "El document s'està editant en una altra aplicació. Podeu continuar editant i guardar-lo com a còpia.", "Common.UI.ColorButton.textNewColor": "Afegir un Nou Color Personalitzat", + "Common.Translation.warnFileLockedBtnEdit": "Crea una còpia", + "Common.Translation.warnFileLockedBtnView": "Obrir per veure", "Common.UI.ComboBorderSize.txtNoBorders": "Sense vores", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "Sense vores", "Common.UI.ComboDataView.emptyComboText": "Sense Estils", @@ -39,6 +74,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Un altre usuari ha canviat el document.
    Feu clic per desar els canvis i tornar a carregar les actualitzacions.", "Common.UI.ThemeColorPalette.textStandartColors": "Colors Estàndards", "Common.UI.ThemeColorPalette.textThemeColors": "Colors Tema", + "Common.UI.Themes.txtThemeClassicLight": "Llum clàssica", + "Common.UI.Themes.txtThemeDark": "Fosc", + "Common.UI.Themes.txtThemeLight": "Clar", "Common.UI.Window.cancelButtonText": "Cancel·lar", "Common.UI.Window.closeButtonText": "Tancar", "Common.UI.Window.noButtonText": "No", @@ -59,12 +97,21 @@ "Common.Views.About.txtTel": "tel.: ", "Common.Views.About.txtVersion": "Versió", "Common.Views.AutoCorrectDialog.textAdd": "Afegir", + "Common.Views.AutoCorrectDialog.textApplyText": "Aplicar a mesura que s'escriu", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Correcció Automàtica", + "Common.Views.AutoCorrectDialog.textAutoFormat": "Format automàtic a mesura que s'escriu", + "Common.Views.AutoCorrectDialog.textBulleted": "Llistes de vinyetes automàtiques", "Common.Views.AutoCorrectDialog.textBy": "Per", "Common.Views.AutoCorrectDialog.textDelete": "Esborrar", + "Common.Views.AutoCorrectDialog.textFLSentence": "Posa en majúscules la primera lletra de les frases", + "Common.Views.AutoCorrectDialog.textHyphens": "Guions (--) amb guió (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Correcció Automàtica Matemàtica", + "Common.Views.AutoCorrectDialog.textNumbered": "Llistes numerades automàtiques", + "Common.Views.AutoCorrectDialog.textQuotes": "\"Cometes rectes\" amb \"cometes tipogràfiques\"", "Common.Views.AutoCorrectDialog.textRecognized": "Funcions Reconegudes", "Common.Views.AutoCorrectDialog.textRecognizedDesc": "Les expressions següents són expressions matemàtiques reconegudes. No es posaran en cursiva automàticament.", "Common.Views.AutoCorrectDialog.textReplace": "Substitueix", + "Common.Views.AutoCorrectDialog.textReplaceText": "Substitueix mentre s'escriu", "Common.Views.AutoCorrectDialog.textReplaceType": "Substituïu el text mentre escriviu", "Common.Views.AutoCorrectDialog.textReset": "Restablir", "Common.Views.AutoCorrectDialog.textResetAll": "Restableix a valor predeterminat", @@ -92,8 +139,8 @@ "Common.Views.Comments.textResolve": "Resol", "Common.Views.Comments.textResolved": "Resolt", "Common.Views.CopyWarningDialog.textDontShow": "No torneu a mostrar aquest missatge", - "Common.Views.CopyWarningDialog.textMsg": "Copiar, tallar i enganxar accions mitjançant els botons de la barra d’eines de l’editor i les accions del menú contextual només es realitzaran dins d’aquesta pestanya editor.

    Per copiar o enganxar a o des d’aplicacions fora de la pestanya editor, utilitzeu les combinacions de teclat següents:", - "Common.Views.CopyWarningDialog.textTitle": "Accions de Copiar, Tallar i Pegar ", + "Common.Views.CopyWarningDialog.textMsg": "Les accions Copia, retalla i enganxa utilitzant els botons de la barra d'eines de l'editor i les accions del menú contextual només es realitzaran dins d'aquesta pestanya de l'editor.

    Per copiar o enganxar a o des de les aplicacions fora de la pestanya de l'editor, utilitzeu les següents combinacions de teclat:", + "Common.Views.CopyWarningDialog.textTitle": "Accions de Copiar, Tallar i Enganxar ", "Common.Views.CopyWarningDialog.textToCopy": "Per Copiar", "Common.Views.CopyWarningDialog.textToCut": "Per Tallar", "Common.Views.CopyWarningDialog.textToPaste": "Per Pegar", @@ -101,13 +148,16 @@ "Common.Views.DocumentAccessDialog.textTitle": "Configuració per Compartir", "Common.Views.ExternalDiagramEditor.textClose": "Tancar", "Common.Views.ExternalDiagramEditor.textSave": "Desar i Sortir", - "Common.Views.ExternalDiagramEditor.textTitle": "Editor del Gràfic", + "Common.Views.ExternalDiagramEditor.textTitle": "Editor de Gràfics", "Common.Views.Header.labelCoUsersDescr": "Usuaris que editen el fitxer:", + "Common.Views.Header.textAddFavorite": "Marcar com a favorit", "Common.Views.Header.textAdvSettings": "Configuració avançada", "Common.Views.Header.textBack": "Obrir ubicació del arxiu", "Common.Views.Header.textCompactView": "Amagar la Barra d'Eines", "Common.Views.Header.textHideLines": "Amagar Regles", + "Common.Views.Header.textHideNotes": "Ocultar notes", "Common.Views.Header.textHideStatusBar": "Amagar la Barra d'Estat", + "Common.Views.Header.textRemoveFavorite": "Elimina dels Favorits", "Common.Views.Header.textSaveBegin": "Desant...", "Common.Views.Header.textSaveChanged": "Modificat", "Common.Views.Header.textSaveEnd": "Tots els canvis guardats", @@ -136,7 +186,7 @@ "Common.Views.InsertTableDialog.txtTitle": "Mida Taula", "Common.Views.InsertTableDialog.txtTitleSplit": "Dividir Cel·la", "Common.Views.LanguageDialog.labelSelect": "Seleccionar l'idioma de document", - "Common.Views.ListSettingsDialog.textBulleted": "Llista encuadrada", + "Common.Views.ListSettingsDialog.textBulleted": "Amb vinyetes", "Common.Views.ListSettingsDialog.textNumbering": "Numerats", "Common.Views.ListSettingsDialog.tipChange": "Canviar vinyeta", "Common.Views.ListSettingsDialog.txtBullet": "Vinyeta", @@ -149,13 +199,13 @@ "Common.Views.ListSettingsDialog.txtSymbol": "Símbol", "Common.Views.ListSettingsDialog.txtTitle": "Configuració de la Llista", "Common.Views.ListSettingsDialog.txtType": "Tipus", - "Common.Views.OpenDialog.closeButtonText": "Tancar Arxiu", + "Common.Views.OpenDialog.closeButtonText": "Tancar Fitxer", "Common.Views.OpenDialog.txtEncoding": "Codificació", "Common.Views.OpenDialog.txtIncorrectPwd": "La contrasenya es incorrecta.", "Common.Views.OpenDialog.txtOpenFile": "Introduïu una contrasenya per obrir el fitxer", "Common.Views.OpenDialog.txtPassword": "Contrasenya", "Common.Views.OpenDialog.txtProtected": "Un cop hàgiu introduït la contrasenya i obert el fitxer, es restablirà la contrasenya actual del fitxer.", - "Common.Views.OpenDialog.txtTitle": "Tria %1 opció", + "Common.Views.OpenDialog.txtTitle": "Tria opcions %1", "Common.Views.OpenDialog.txtTitleProtected": "Arxiu Protegit", "Common.Views.PasswordDialog.txtDescription": "Establir una contrasenya per protegir el document", "Common.Views.PasswordDialog.txtIncorrectPwd": "La contrasenya de confirmació no és idèntica", @@ -170,7 +220,7 @@ "Common.Views.Plugins.textStart": "Comença", "Common.Views.Plugins.textStop": "Parar", "Common.Views.Protection.hintAddPwd": "Xifrar amb contrasenya", - "Common.Views.Protection.hintPwd": "Canviar o Esborrar Contrasenya", + "Common.Views.Protection.hintPwd": "Canviar o Suprimir Contrasenya", "Common.Views.Protection.hintSignature": "Afegir signatura digital o línia de signatura", "Common.Views.Protection.txtAddPwd": "Afegir contrasenya", "Common.Views.Protection.txtChangePwd": "Canviar la contrasenya", @@ -191,6 +241,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Configura el mode de coedició", "Common.Views.ReviewChanges.tipCommentRem": "Esborrar comentaris", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Esborrar comentaris actuals", + "Common.Views.ReviewChanges.tipCommentResolve": "Resoldre els comentaris", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Resol els comentaris actuals", "Common.Views.ReviewChanges.tipHistory": "Mostra l'historial de versions", "Common.Views.ReviewChanges.tipRejectCurrent": "Rebutjar canvi actual", "Common.Views.ReviewChanges.tipReview": "Control de Canvis", @@ -202,7 +254,7 @@ "Common.Views.ReviewChanges.txtAcceptAll": "Acceptar Tots els Canvis", "Common.Views.ReviewChanges.txtAcceptChanges": "Acceptar canvis", "Common.Views.ReviewChanges.txtAcceptCurrent": "Acceptar el Canvi Actual", - "Common.Views.ReviewChanges.txtChat": "Chat", + "Common.Views.ReviewChanges.txtChat": "Xat", "Common.Views.ReviewChanges.txtClose": "Tancar", "Common.Views.ReviewChanges.txtCoAuthMode": "Mode de Coedició", "Common.Views.ReviewChanges.txtCommentRemAll": "Esborrar tots els comentaris", @@ -210,6 +262,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Esborrar els meus comentaris", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Esborrar els meus actuals comentaris", "Common.Views.ReviewChanges.txtCommentRemove": "Esborrar", + "Common.Views.ReviewChanges.txtCommentResolve": "Resoldre", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Resoldre tots els comentaris", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Resoldre els comentaris actuals", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Resoldre els Meus Comentaris", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Resoldre els Meus Comentaris Actuals", "Common.Views.ReviewChanges.txtDocLang": "Idioma", "Common.Views.ReviewChanges.txtFinal": "Tots el canvis acceptats (Previsualitzar)", "Common.Views.ReviewChanges.txtFinalCap": "Final", @@ -229,7 +286,7 @@ "Common.Views.ReviewChanges.txtTurnon": "Control de Canvis", "Common.Views.ReviewChanges.txtView": "Mode de visualització", "Common.Views.ReviewPopover.textAdd": "Afegir", - "Common.Views.ReviewPopover.textAddReply": "Afegir una Resposta", + "Common.Views.ReviewPopover.textAddReply": "Afegir Resposta", "Common.Views.ReviewPopover.textCancel": "Cancel·lar", "Common.Views.ReviewPopover.textClose": "Tancar", "Common.Views.ReviewPopover.textEdit": "Acceptar", @@ -247,6 +304,7 @@ "Common.Views.SignDialog.textChange": "Canviar", "Common.Views.SignDialog.textInputName": "Posar nom de qui ho firma", "Common.Views.SignDialog.textItalic": "Itàlica", + "Common.Views.SignDialog.textNameError": "El nom del signant no pot estar buit.", "Common.Views.SignDialog.textPurpose": "Finalitat de signar aquest document", "Common.Views.SignDialog.textSelect": "Seleccionar", "Common.Views.SignDialog.textSelectImage": "Seleccionar Imatge", @@ -267,8 +325,8 @@ "Common.Views.SignSettingsDialog.txtEmpty": "Aquest camp és obligatori", "Common.Views.SymbolTableDialog.textCharacter": "Caràcter", "Common.Views.SymbolTableDialog.textCode": "Valor HEX Unicode", - "Common.Views.SymbolTableDialog.textCopyright": "Signatura de Propietat Intel·lectual", - "Common.Views.SymbolTableDialog.textDCQuote": "Tancar Doble Pressupost", + "Common.Views.SymbolTableDialog.textCopyright": "Signe de copyright", + "Common.Views.SymbolTableDialog.textDCQuote": "S'està tancant una doble cita", "Common.Views.SymbolTableDialog.textDOQuote": "Obertura de Cotització Doble", "Common.Views.SymbolTableDialog.textEllipsis": "El·lipsi horitzontal", "Common.Views.SymbolTableDialog.textEmDash": "EM Dash", @@ -283,7 +341,7 @@ "Common.Views.SymbolTableDialog.textRange": "Rang", "Common.Views.SymbolTableDialog.textRecent": "Símbols utilitzats recentment", "Common.Views.SymbolTableDialog.textRegistered": "Registre Registrat", - "Common.Views.SymbolTableDialog.textSCQuote": "Tancar Simple Pressupost", + "Common.Views.SymbolTableDialog.textSCQuote": "S'està tancant una única cita", "Common.Views.SymbolTableDialog.textSection": "Signe de Secció", "Common.Views.SymbolTableDialog.textShortcut": "Tecla de Drecera", "Common.Views.SymbolTableDialog.textSHyphen": "Guionet Suau", @@ -292,16 +350,21 @@ "Common.Views.SymbolTableDialog.textSymbols": "Símbols", "Common.Views.SymbolTableDialog.textTitle": "Símbol", "Common.Views.SymbolTableDialog.textTradeMark": "Símbol de Marca Comercial", + "Common.Views.UserNameDialog.textDontShow": "No em tornis a preguntar", + "Common.Views.UserNameDialog.textLabel": "Etiqueta:", + "Common.Views.UserNameDialog.textLabelError": "L'etiqueta no pot estar en blanc.", + "PE.Controllers.LeftMenu.leavePageText": "Es perdran tots els canvis no guardats en aquest document.
    Feu clic a \"Cancel·lar\" i, a continuació, \"Desa\" per desar-los. Feu clic a \"OK\" per descartar tots els canvis no desats.", "PE.Controllers.LeftMenu.newDocumentTitle": "Presentació sense nom", "PE.Controllers.LeftMenu.notcriticalErrorTitle": "Avis", "PE.Controllers.LeftMenu.requestEditRightsText": "Sol·licitant drets d’edició ...", + "PE.Controllers.LeftMenu.textLoadHistory": "Carregant historial de versions...", "PE.Controllers.LeftMenu.textNoTextFound": "No s'han trobat les dades que heu cercat. Ajusteu les opcions de cerca.", "PE.Controllers.LeftMenu.textReplaceSkipped": "La substitució s’ha realitzat. Es van saltar {0} ocurrències.", "PE.Controllers.LeftMenu.textReplaceSuccess": "La recerca s’ha fet. Es van substituir les coincidències: {0}", "PE.Controllers.LeftMenu.txtUntitled": "Sense títol", "PE.Controllers.Main.applyChangesTextText": "Carregant dades...", "PE.Controllers.Main.applyChangesTitleText": "Carregant Dades", - "PE.Controllers.Main.convertationTimeoutText": "Conversió fora de temps", + "PE.Controllers.Main.convertationTimeoutText": "S'ha superat el temps de conversió.", "PE.Controllers.Main.criticalErrorExtText": "Prem \"Acceptar\" per tornar al document.", "PE.Controllers.Main.criticalErrorTitle": "Error", "PE.Controllers.Main.downloadErrorText": "Descàrrega fallida.", @@ -310,6 +373,7 @@ "PE.Controllers.Main.errorAccessDeny": "Intenteu realitzar una acció per la qual no teniu drets.
    Poseu-vos en contacte amb l'administrador del servidor de documents.", "PE.Controllers.Main.errorBadImageUrl": "Enllaç de la Imatge Incorrecte", "PE.Controllers.Main.errorCoAuthoringDisconnect": "S'ha perdut la connexió amb el servidor. El document no es pot editar ara mateix.", + "PE.Controllers.Main.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", "PE.Controllers.Main.errorConnectToServer": "El document no s'ha pogut desar. Comproveu la configuració de la connexió o poseu-vos en contacte amb l'administrador.
    Quan feu clic al botó \"D'acord\", se us demanarà que descarregueu el document.", "PE.Controllers.Main.errorDatabaseConnection": "Error extern.
    Error de connexió de base de dades. Contacteu amb l'assistència en cas que l'error continuï.", "PE.Controllers.Main.errorDataEncrypted": "S'han rebut canvis xifrats, que no es poden desxifrar.", @@ -328,6 +392,7 @@ "PE.Controllers.Main.errorSessionAbsolute": "La sessió d’edició del document ha caducat. Torneu a carregar la pàgina.", "PE.Controllers.Main.errorSessionIdle": "El document no s’ha editat des de fa temps. Torneu a carregar la pàgina.", "PE.Controllers.Main.errorSessionToken": "S'ha interromput la connexió amb el servidor. Torneu a carregar la pàgina.", + "PE.Controllers.Main.errorSetPassword": "No s'ha pogut establir la contrasenya.", "PE.Controllers.Main.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", "PE.Controllers.Main.errorToken": "El testimoni de seguretat del document no està format correctament.
    Contacteu l'administrador del servidor de documents.", "PE.Controllers.Main.errorTokenExpire": "El testimoni de seguretat del document ha caducat.
    Contacteu amb l'administrador del Document Server.", @@ -335,8 +400,9 @@ "PE.Controllers.Main.errorUpdateVersionOnDisconnect": "La connexió a Internet s'ha restaurat i la versió del fitxer s'ha canviat.
    Abans de continuar treballant, heu de descarregar el fitxer o copiar-ne el contingut per assegurar-vos que no es perdi res i, després, tornar a carregar aquesta pàgina.", "PE.Controllers.Main.errorUserDrop": "Ara no es pot accedir al fitxer.", "PE.Controllers.Main.errorUsersExceed": "S'ha superat el nombre d’usuaris permès pel pla de preus", - "PE.Controllers.Main.errorViewerDisconnect": "Es perd la connexió. Encara podeu visualitzar el document,
    però no podreu descarregar-lo ni imprimir-lo fins que no es restableixi la connexió i es torni a carregar la pàgina.", + "PE.Controllers.Main.errorViewerDisconnect": "S'ha perdut la connexió. Encara podeu visualitzar el document,
    però no podreu descarregar-lo ni imprimir-lo fins que no es restableixi la connexió i es torni a re-carregar la pàgina.", "PE.Controllers.Main.leavePageText": "Heu fet canvis no desats en aquesta presentació. Feu clic a \"Continua en aquesta pàgina\" i, a continuació, \"Desa\" per desar-les. Feu clic a \"Deixa aquesta pàgina\" per descartar tots els canvis no desats.", + "PE.Controllers.Main.leavePageTextOnClose": "Es perdran tots els canvis no desats en aquesta presentació.
    Feu clic a «Cancel·la» i després a «Desa» per desar-los. Feu clic a \"D'acord\" per descartar tots els canvis no desats.", "PE.Controllers.Main.loadFontsTextText": "Carregant dades...", "PE.Controllers.Main.loadFontsTitleText": "Carregant Dades", "PE.Controllers.Main.loadFontTextText": "Carregant dades...", @@ -359,6 +425,7 @@ "PE.Controllers.Main.requestEditFailedMessageText": "Algú està editant aquesta presentació ara mateix. Si us plau, intenta-ho més tard.", "PE.Controllers.Main.requestEditFailedTitleText": "Accés denegat", "PE.Controllers.Main.saveErrorText": "S'ha produït un error en desar el fitxer.", + "PE.Controllers.Main.saveErrorTextDesktop": "Aquest fitxer no es pot desar o crear.
    Les raons possibles són:
    1. El fitxer és de només lectura.
    2. El fitxer està sent editat per altres usuaris.
    3. El disc està ple o corromput.", "PE.Controllers.Main.savePreparingText": "Preparant per guardar", "PE.Controllers.Main.savePreparingTitle": "Preparant per guardar. Si us plau, esperi", "PE.Controllers.Main.saveTextText": "Guardant presentació...", @@ -371,31 +438,37 @@ "PE.Controllers.Main.textBuyNow": "Visita el Lloc Web", "PE.Controllers.Main.textChangesSaved": "Tots els canvis guardats", "PE.Controllers.Main.textClose": "Tancar", - "PE.Controllers.Main.textCloseTip": "Feu clic per tancar", - "PE.Controllers.Main.textContactUs": "Contacte de Vendes", + "PE.Controllers.Main.textCloseTip": "Clicar per tancar el consell", + "PE.Controllers.Main.textContactUs": "Equip de Vendes", "PE.Controllers.Main.textCustomLoader": "Tingueu en compte que, segons els termes de la llicència, no teniu dret a canviar el carregador.
    Consulteu el nostre departament de vendes per obtenir un pressupost.", + "PE.Controllers.Main.textGuest": "Convidat", "PE.Controllers.Main.textHasMacros": "El fitxer conté macros automàtiques.
    Voleu executar macros?", "PE.Controllers.Main.textLoadingDocument": "Carregant presentació", + "PE.Controllers.Main.textLongName": "Introduïu un nom de menys de 128 caràcters.", "PE.Controllers.Main.textNoLicenseTitle": "Heu arribat al límit de la llicència", "PE.Controllers.Main.textPaidFeature": "Funció de pagament", - "PE.Controllers.Main.textRemember": "Recorda la meva elecció", + "PE.Controllers.Main.textRemember": "Recordar la meva elecció per a tots els fitxers", + "PE.Controllers.Main.textRenameError": "El nom d'usuari no pot estar buit.", + "PE.Controllers.Main.textRenameLabel": "Introduïu un nom per a la col·laboració", "PE.Controllers.Main.textShape": "Forma", "PE.Controllers.Main.textStrict": "Mode estricte", "PE.Controllers.Main.textTryUndoRedo": "Les funcions Desfés / Rehabiliteu estan desactivades per al mode de coedició ràpida. Feu clic al botó \"Mode estricte\" per canviar al mode de coedició estricte per editar el fitxer sense que hi hagi interferències d'altres usuaris i enviar els canvis només després de desar-lo ells. Podeu canviar entre els modes de coedició mitjançant l'editor Paràmetres avançats.", + "PE.Controllers.Main.textTryUndoRedoWarn": "Les funcions Desfer/Refer estan desactivades per al mode de coedició ràpida.", "PE.Controllers.Main.titleLicenseExp": "Llicència Caducada", "PE.Controllers.Main.titleServerVersion": "S'ha actualitzat l'editor", - "PE.Controllers.Main.txtAddFirstSlide": "Faci clic per afegir la primera diapositiva", + "PE.Controllers.Main.txtAddFirstSlide": "Cliqui per a afegir la primera diapositiva", "PE.Controllers.Main.txtAddNotes": "Faci clic per afegir notes", "PE.Controllers.Main.txtArt": "El seu text aquí", "PE.Controllers.Main.txtBasicShapes": "Formes Bàsiques", "PE.Controllers.Main.txtButtons": "Botons", - "PE.Controllers.Main.txtCallouts": "Trucades", - "PE.Controllers.Main.txtCharts": "Gràfics", + "PE.Controllers.Main.txtCallouts": "Crides", + "PE.Controllers.Main.txtCharts": "Diagramas", "PE.Controllers.Main.txtClipArt": "Imatges Predissenyades", "PE.Controllers.Main.txtDateTime": "Data i hora", "PE.Controllers.Main.txtDiagram": "Imatge preconfigurada", - "PE.Controllers.Main.txtDiagramTitle": "Títol del Gràfic", + "PE.Controllers.Main.txtDiagramTitle": "Títol del Diagrama", "PE.Controllers.Main.txtEditingMode": "Establir el mode d'edició ...", + "PE.Controllers.Main.txtErrorLoadHistory": "Ha fallat la càrrega de l'historial", "PE.Controllers.Main.txtFiguredArrows": "Fletxes Figurades", "PE.Controllers.Main.txtFooter": "Peu de pàgina", "PE.Controllers.Main.txtHeader": "Capçalera", @@ -405,6 +478,7 @@ "PE.Controllers.Main.txtMath": "Matemàtiques", "PE.Controllers.Main.txtMedia": "Medis", "PE.Controllers.Main.txtNeedSynchronize": "Teniu actualitzacions", + "PE.Controllers.Main.txtNone": "cap", "PE.Controllers.Main.txtPicture": "Imatge", "PE.Controllers.Main.txtRectangles": "Rectangles", "PE.Controllers.Main.txtSeries": "Series", @@ -414,7 +488,7 @@ "PE.Controllers.Main.txtShape_accentCallout1": "Trucada amb línia 1 (barra d'èmfasis)", "PE.Controllers.Main.txtShape_accentCallout2": "Trucada amb línia 2 (barra d'èmfasis)", "PE.Controllers.Main.txtShape_accentCallout3": "Trucada amb línia 3 (barra d'èmfasis)", - "PE.Controllers.Main.txtShape_actionButtonBackPrevious": "Botó Enrere o Anterior", + "PE.Controllers.Main.txtShape_actionButtonBackPrevious": "Enrere o Botó Anterior", "PE.Controllers.Main.txtShape_actionButtonBeginning": "Botó d’Inici", "PE.Controllers.Main.txtShape_actionButtonBlank": "Botó en blanc", "PE.Controllers.Main.txtShape_actionButtonDocument": "Botó de Document", @@ -443,10 +517,10 @@ "PE.Controllers.Main.txtShape_callout3": "Trucada amb línia 3 (sense vora)", "PE.Controllers.Main.txtShape_can": "Cilindre", "PE.Controllers.Main.txtShape_chevron": "Chevron", - "PE.Controllers.Main.txtShape_chord": "Chord", + "PE.Controllers.Main.txtShape_chord": "Acord", "PE.Controllers.Main.txtShape_circularArrow": "Fletxa Circular", "PE.Controllers.Main.txtShape_cloud": "Núvol", - "PE.Controllers.Main.txtShape_cloudCallout": "Trucada de Núvol", + "PE.Controllers.Main.txtShape_cloudCallout": "Crida de Núvol", "PE.Controllers.Main.txtShape_corner": "Cantonada", "PE.Controllers.Main.txtShape_cube": "Cub", "PE.Controllers.Main.txtShape_curvedConnector3": "Connector corbat", @@ -581,7 +655,7 @@ "PE.Controllers.Main.txtShape_wedgeRoundRectCallout": "Llibre rectangular de punt rodó", "PE.Controllers.Main.txtSldLtTBlank": "En blanc", "PE.Controllers.Main.txtSldLtTChart": "Gràfic", - "PE.Controllers.Main.txtSldLtTChartAndTx": "Gràfic i Text", + "PE.Controllers.Main.txtSldLtTChartAndTx": "Gràfic i text", "PE.Controllers.Main.txtSldLtTClipArtAndTx": "Imatge Predissenyada i Tex", "PE.Controllers.Main.txtSldLtTClipArtAndVertTx": "Imatge PreDissenyada i Text Vertical", "PE.Controllers.Main.txtSldLtTCust": "Personalitzat", @@ -648,6 +722,8 @@ "PE.Controllers.Main.warnBrowserZoom": "La configuració del zoom actual del navegador no és totalment compatible. Restabliu el zoom per defecte prement Ctrl+0.", "PE.Controllers.Main.warnLicenseExceeded": "S'ha superat el nombre de connexions simultànies al servidor de documents i el document s'obrirà només per a la seva visualització.
    Contacteu l'administrador per obtenir més informació.", "PE.Controllers.Main.warnLicenseExp": "La seva llicencia ha caducat.
    Si us plau, actualitzi la llicencia i recarregui la pàgina.", + "PE.Controllers.Main.warnLicenseLimitedNoAccess": "La llicència ha caducat.
    No teniu accés a la funcionalitat d'edició de documents.
    Si us plau, contacteu amb l'administrador.", + "PE.Controllers.Main.warnLicenseLimitedRenewed": "Cal renovar la llicència.
    Teniu un accés limitat a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador per obtenir accés complet", "PE.Controllers.Main.warnLicenseUsersExceeded": "S'ha superat el nombre d'usuaris concurrents i el document s'obrirà només per a la seva visualització.
    Per més informació, poseu-vos en contacte amb l'administrador.", "PE.Controllers.Main.warnNoLicense": "Heu arribat al límit de connexions simultànies per als editors %1. Aquest document s'obrirà al mode de només lectura. Contacteu l'equip de vendes %1 per a les condicions personals de millora del servei.", "PE.Controllers.Main.warnNoLicenseUsers": "Heu arribat al límit d'usuaris concurrents per a editors %1.
    Contactau l'equip de vendes per als termes de millora personal dels vostres serveis.", @@ -677,8 +753,8 @@ "PE.Controllers.Toolbar.txtAccent_Bar": "Barra", "PE.Controllers.Toolbar.txtAccent_BarBot": "Barra Subjacent", "PE.Controllers.Toolbar.txtAccent_BarTop": "Barra superposada", - "PE.Controllers.Toolbar.txtAccent_BorderBox": "Fórmula a celda (amb el marcador de posició)", - "PE.Controllers.Toolbar.txtAccent_BorderBoxCustom": "Fórmula a celda (exemple)", + "PE.Controllers.Toolbar.txtAccent_BorderBox": "Fórmula encaixada (amb el marcador de posició)", + "PE.Controllers.Toolbar.txtAccent_BorderBoxCustom": "Fórmula encaixada (exemple)", "PE.Controllers.Toolbar.txtAccent_Check": "Comprovar", "PE.Controllers.Toolbar.txtAccent_CurveBracketBot": "Clau Subjacent", "PE.Controllers.Toolbar.txtAccent_CurveBracketTop": "Clau superposada", @@ -695,15 +771,15 @@ "PE.Controllers.Toolbar.txtAccent_HarpoonL": "Arpon cap a l'esquerra per sobre", "PE.Controllers.Toolbar.txtAccent_HarpoonR": "Arpon superior cap a dreta", "PE.Controllers.Toolbar.txtAccent_Hat": "Circumflex", - "PE.Controllers.Toolbar.txtAccent_Smile": "Accent breu", + "PE.Controllers.Toolbar.txtAccent_Smile": "Breve", "PE.Controllers.Toolbar.txtAccent_Tilde": "Tilde", "PE.Controllers.Toolbar.txtBracket_Angle": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_2": "Claudàtor amb separadors", - "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_3": "Claudàtor amb separadors", + "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_2": "Claudàtors amb separadors", + "PE.Controllers.Toolbar.txtBracket_Angle_Delimiter_3": "Claudàtors amb separadors", "PE.Controllers.Toolbar.txtBracket_Angle_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Angle_OpenNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Curve": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Curve_Delimiter_2": "Claudàtor amb separadors", + "PE.Controllers.Toolbar.txtBracket_Curve_Delimiter_2": "Claudàtors amb separadors", "PE.Controllers.Toolbar.txtBracket_Curve_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Curve_OpenNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Custom_1": "Casos (dos condicions)", @@ -716,26 +792,26 @@ "PE.Controllers.Toolbar.txtBracket_Line": "Claudàtor", "PE.Controllers.Toolbar.txtBracket_Line_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Line_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_LineDouble": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_LineDouble": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_LineDouble_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_LineDouble_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_LowLim": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_LowLim": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_LowLim_NoneNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_LowLim_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_Round": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Round_Delimiter_2": "Claudàtor amb separadors", + "PE.Controllers.Toolbar.txtBracket_Round": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_Round_Delimiter_2": "Claudàtors amb separadors", "PE.Controllers.Toolbar.txtBracket_Round_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Round_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_Square": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Square_CloseClose": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_Square_CloseOpen": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_Square": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_Square_CloseClose": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_Square_CloseOpen": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_Square_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_Square_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_Square_OpenOpen": "Claudàtor", - "PE.Controllers.Toolbar.txtBracket_SquareDouble": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_Square_OpenOpen": "Claudàtors", + "PE.Controllers.Toolbar.txtBracket_SquareDouble": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_SquareDouble_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_SquareDouble_OpenNone": "Claudàtor Únic", - "PE.Controllers.Toolbar.txtBracket_UppLim": "Claudàtor", + "PE.Controllers.Toolbar.txtBracket_UppLim": "Claudàtors", "PE.Controllers.Toolbar.txtBracket_UppLim_NoneOpen": "Claudàtor Únic", "PE.Controllers.Toolbar.txtBracket_UppLim_OpenNone": "Claudàtor Únic", "PE.Controllers.Toolbar.txtFractionDiagonal": "Fracció inclinada", @@ -759,7 +835,7 @@ "PE.Controllers.Toolbar.txtFunction_1_Sinh": "Funció hiperbòlica del seno invers", "PE.Controllers.Toolbar.txtFunction_1_Tan": "Funció de tangent inversa", "PE.Controllers.Toolbar.txtFunction_1_Tanh": "Funció tangent inversa hiperbòlica", - "PE.Controllers.Toolbar.txtFunction_Cos": "Funció cosina", + "PE.Controllers.Toolbar.txtFunction_Cos": "funció cosinus", "PE.Controllers.Toolbar.txtFunction_Cosh": "Funció del cosin hiperbòlic", "PE.Controllers.Toolbar.txtFunction_Cot": "Funció cotangent", "PE.Controllers.Toolbar.txtFunction_Coth": "Funció cotangent hiperbòlic", @@ -782,12 +858,12 @@ "PE.Controllers.Toolbar.txtIntegralDouble": "Doble integral", "PE.Controllers.Toolbar.txtIntegralDoubleCenterSubSup": "Doble integral", "PE.Controllers.Toolbar.txtIntegralDoubleSubSup": "Doble integral", - "PE.Controllers.Toolbar.txtIntegralOriented": "Contorn integral", - "PE.Controllers.Toolbar.txtIntegralOrientedCenterSubSup": "Contorn integral", + "PE.Controllers.Toolbar.txtIntegralOriented": "Integral de contorn", + "PE.Controllers.Toolbar.txtIntegralOrientedCenterSubSup": "Integral de contorn", "PE.Controllers.Toolbar.txtIntegralOrientedDouble": "Integral de superfície", "PE.Controllers.Toolbar.txtIntegralOrientedDoubleCenterSubSup": "Integral de superfície", "PE.Controllers.Toolbar.txtIntegralOrientedDoubleSubSup": "Integral de superfície", - "PE.Controllers.Toolbar.txtIntegralOrientedSubSup": "Contorn integral", + "PE.Controllers.Toolbar.txtIntegralOrientedSubSup": "Integral de contorn", "PE.Controllers.Toolbar.txtIntegralOrientedTriple": "Volum integral", "PE.Controllers.Toolbar.txtIntegralOrientedTripleCenterSubSup": "Volum integral", "PE.Controllers.Toolbar.txtIntegralOrientedTripleSubSup": "Volum integral", @@ -800,11 +876,11 @@ "PE.Controllers.Toolbar.txtLargeOperator_Conjunction_CenterSubSup": "Falca", "PE.Controllers.Toolbar.txtLargeOperator_Conjunction_Sub": "Falca", "PE.Controllers.Toolbar.txtLargeOperator_Conjunction_SubSup": "Falca", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSub": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSubSup": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_Sub": "Coproducte", - "PE.Controllers.Toolbar.txtLargeOperator_CoProd_SubSup": "Coproducte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSub": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_CenterSubSup": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_Sub": "Co-producte", + "PE.Controllers.Toolbar.txtLargeOperator_CoProd_SubSup": "Co-producte", "PE.Controllers.Toolbar.txtLargeOperator_Custom_1": "Suma", "PE.Controllers.Toolbar.txtLargeOperator_Custom_2": "Suma", "PE.Controllers.Toolbar.txtLargeOperator_Custom_3": "Suma", @@ -855,7 +931,7 @@ "PE.Controllers.Toolbar.txtMatrix_3_1": "3x1 matriu buida", "PE.Controllers.Toolbar.txtMatrix_3_2": "3x2 matriu buida", "PE.Controllers.Toolbar.txtMatrix_3_3": "3s3 matriu buida", - "PE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts Subíndexs", + "PE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts de línia base", "PE.Controllers.Toolbar.txtMatrix_Dots_Center": "Punts en línia mitja", "PE.Controllers.Toolbar.txtMatrix_Dots_Diagonal": "Punts en diagonal", "PE.Controllers.Toolbar.txtMatrix_Dots_Vertical": "Punts Verticals", @@ -907,10 +983,10 @@ "PE.Controllers.Toolbar.txtSymbol_approx": "Gairebé igual a", "PE.Controllers.Toolbar.txtSymbol_ast": "Operador asterisc", "PE.Controllers.Toolbar.txtSymbol_beta": "Beta", - "PE.Controllers.Toolbar.txtSymbol_beth": "Bet", + "PE.Controllers.Toolbar.txtSymbol_beth": "Aposta", "PE.Controllers.Toolbar.txtSymbol_bullet": "Operador de Vinyeta", "PE.Controllers.Toolbar.txtSymbol_cap": "Intersecció", - "PE.Controllers.Toolbar.txtSymbol_cbrt": "Arrel de Cub", + "PE.Controllers.Toolbar.txtSymbol_cbrt": "Arrel cúbica", "PE.Controllers.Toolbar.txtSymbol_cdots": "El·lipsis horitzontal de línia mitja", "PE.Controllers.Toolbar.txtSymbol_celsius": "Graus Celsius", "PE.Controllers.Toolbar.txtSymbol_chi": "Chi", @@ -980,7 +1056,7 @@ "PE.Controllers.Toolbar.txtSymbol_varepsilon": "Variant d’èpsilon", "PE.Controllers.Toolbar.txtSymbol_varphi": "Variant Pi", "PE.Controllers.Toolbar.txtSymbol_varpi": "Variant Pi", - "PE.Controllers.Toolbar.txtSymbol_varrho": "Variant Ro", + "PE.Controllers.Toolbar.txtSymbol_varrho": "Variant Rho", "PE.Controllers.Toolbar.txtSymbol_varsigma": "Variant Sigma", "PE.Controllers.Toolbar.txtSymbol_vartheta": "Variant Zeta", "PE.Controllers.Toolbar.txtSymbol_vdots": "El·lipsis Vertical", @@ -989,7 +1065,7 @@ "PE.Controllers.Viewport.textFitPage": "Ajustar a la diapositiva", "PE.Controllers.Viewport.textFitWidth": "Ajusta a Amplada", "PE.Views.ChartSettings.textAdvanced": "Mostra la configuració avançada", - "PE.Views.ChartSettings.textChartType": "Canvia el tipus de gràfic", + "PE.Views.ChartSettings.textChartType": "Canviar el tipus de gràfic", "PE.Views.ChartSettings.textEditData": "Editar Dades", "PE.Views.ChartSettings.textHeight": "Alçada", "PE.Views.ChartSettings.textKeepRatio": "Proporcions Constants", @@ -1000,7 +1076,7 @@ "PE.Views.ChartSettingsAdvanced.textAltDescription": "Descripció", "PE.Views.ChartSettingsAdvanced.textAltTip": "La representació alternativa basada en text de la informació d’objectes visuals, que es llegirà a les persones amb deficiències de visió o cognitives per ajudar-les a comprendre millor quina informació hi ha a la imatge, autoforma, gràfic o taula.", "PE.Views.ChartSettingsAdvanced.textAltTitle": "Títol", - "PE.Views.ChartSettingsAdvanced.textTitle": "Gràfic-Configuració Avançada", + "PE.Views.ChartSettingsAdvanced.textTitle": "Diagrama - Configuració avançada", "PE.Views.DateTimeDialog.confirmDefault": "Definiu el format predeterminat per a {0}:\"{1}\"", "PE.Views.DateTimeDialog.textDefault": "Establir com a defecte", "PE.Views.DateTimeDialog.textFormat": "Formats", @@ -1011,12 +1087,12 @@ "PE.Views.DocumentHolder.addCommentText": "Afegir comentari", "PE.Views.DocumentHolder.addToLayoutText": "Afegir a la Maquetació", "PE.Views.DocumentHolder.advancedImageText": "Imatge Configuració Avançada", - "PE.Views.DocumentHolder.advancedParagraphText": "Configuració Avançada de Text", + "PE.Views.DocumentHolder.advancedParagraphText": "Configuració Avançada del Paràgraf", "PE.Views.DocumentHolder.advancedShapeText": "Forma Configuració Avançada", "PE.Views.DocumentHolder.advancedTableText": "Taula Configuració Avançada", "PE.Views.DocumentHolder.alignmentText": "Alineació", "PE.Views.DocumentHolder.belowText": "Abaix", - "PE.Views.DocumentHolder.cellAlignText": "Alineament Vertical Cel·la", + "PE.Views.DocumentHolder.cellAlignText": "Alineament Vertical de Cel·la", "PE.Views.DocumentHolder.cellText": "Cel·la", "PE.Views.DocumentHolder.centerText": "Centre", "PE.Views.DocumentHolder.columnText": "Columna", @@ -1059,7 +1135,7 @@ "PE.Views.DocumentHolder.textArrangeBack": "Enviar a un segon pla", "PE.Views.DocumentHolder.textArrangeBackward": "Envia Endarrere", "PE.Views.DocumentHolder.textArrangeForward": "Portar Endavant", - "PE.Views.DocumentHolder.textArrangeFront": "Porta a Primer pla", + "PE.Views.DocumentHolder.textArrangeFront": "Portar a Primer pla", "PE.Views.DocumentHolder.textCopy": "Copiar", "PE.Views.DocumentHolder.textCrop": "Retallar", "PE.Views.DocumentHolder.textCropFill": "Omplir", @@ -1081,10 +1157,10 @@ "PE.Views.DocumentHolder.textRotate90": "Girar 90° a la dreta", "PE.Views.DocumentHolder.textShapeAlignBottom": "Alineació Inferior", "PE.Views.DocumentHolder.textShapeAlignCenter": "Centrar", - "PE.Views.DocumentHolder.textShapeAlignLeft": "Alinear Esquerra", + "PE.Views.DocumentHolder.textShapeAlignLeft": "Alineació esquerra", "PE.Views.DocumentHolder.textShapeAlignMiddle": "Alinear al Mig", - "PE.Views.DocumentHolder.textShapeAlignRight": "Alinear Dreta", - "PE.Views.DocumentHolder.textShapeAlignTop": "Alinear Superior", + "PE.Views.DocumentHolder.textShapeAlignRight": "Alineació dreta", + "PE.Views.DocumentHolder.textShapeAlignTop": "Alineació superior", "PE.Views.DocumentHolder.textSlideSettings": "Configuració de la Diapositiva", "PE.Views.DocumentHolder.textUndo": "Desfer", "PE.Views.DocumentHolder.tipIsLocked": "Actualment, un altre usuari està editant aquest element.", @@ -1119,12 +1195,12 @@ "PE.Views.DocumentHolder.txtDistribHor": "Distribuïu Horitzontalment", "PE.Views.DocumentHolder.txtDistribVert": "Distribuïu Verticalment", "PE.Views.DocumentHolder.txtDuplicateSlide": "Duplicar Diapositiva", - "PE.Views.DocumentHolder.txtFractionLinear": "Canvia a fracció lineal", - "PE.Views.DocumentHolder.txtFractionSkewed": "Canviar a la fracció inclinada", + "PE.Views.DocumentHolder.txtFractionLinear": "Canviar a fracció lineal", + "PE.Views.DocumentHolder.txtFractionSkewed": "Canviar a fracció inclinada", "PE.Views.DocumentHolder.txtFractionStacked": "Canvia a fracció apilada", "PE.Views.DocumentHolder.txtGroup": "Agrupar", - "PE.Views.DocumentHolder.txtGroupCharOver": "Carrega el text", - "PE.Views.DocumentHolder.txtGroupCharUnder": "Línia sota el tex", + "PE.Views.DocumentHolder.txtGroupCharOver": "Caràcter sobre el text", + "PE.Views.DocumentHolder.txtGroupCharUnder": "Caràcter sota el text", "PE.Views.DocumentHolder.txtHideBottom": "Amagar vora del botó", "PE.Views.DocumentHolder.txtHideBottomLimit": "Amagar límit del botó", "PE.Views.DocumentHolder.txtHideCloseBracket": "Amagar el claudàtor del tancament", @@ -1146,7 +1222,7 @@ "PE.Views.DocumentHolder.txtInsertEqAfter": "Inserir equació després de", "PE.Views.DocumentHolder.txtInsertEqBefore": "Inserir equació abans de", "PE.Views.DocumentHolder.txtKeepTextOnly": "Mantenir sols text", - "PE.Views.DocumentHolder.txtLimitChange": "Canviar els límits de la ubicació", + "PE.Views.DocumentHolder.txtLimitChange": "Canviar límits d'ubicació", "PE.Views.DocumentHolder.txtLimitOver": "Límit damunt del text", "PE.Views.DocumentHolder.txtLimitUnder": "Límit sota el text", "PE.Views.DocumentHolder.txtMatchBrackets": "Relaciona els claudàtors amb l'alçada de l'argument", @@ -1202,12 +1278,13 @@ "PE.Views.FileMenu.btnCreateNewCaption": "Crear Nou", "PE.Views.FileMenu.btnDownloadCaption": "Descarregar com a...", "PE.Views.FileMenu.btnHelpCaption": "Ajuda...", + "PE.Views.FileMenu.btnHistoryCaption": "Historial de versions", "PE.Views.FileMenu.btnInfoCaption": "Info sobre Presentació...", "PE.Views.FileMenu.btnPrintCaption": "Imprimir", "PE.Views.FileMenu.btnProtectCaption": "Protegir", "PE.Views.FileMenu.btnRecentFilesCaption": "Obrir recent...", "PE.Views.FileMenu.btnRenameCaption": "Canvia el nom ...", - "PE.Views.FileMenu.btnReturnCaption": "Anar a la Presentació", + "PE.Views.FileMenu.btnReturnCaption": "Tornar a la presentació", "PE.Views.FileMenu.btnRightsCaption": "Drets d'Accés ...", "PE.Views.FileMenu.btnSaveAsCaption": "Desar com", "PE.Views.FileMenu.btnSaveCaption": "Desar", @@ -1216,7 +1293,7 @@ "PE.Views.FileMenu.btnToEditCaption": "Editar Presentació", "PE.Views.FileMenuPanels.CreateNew.fromBlankText": "De Document en Blanc", "PE.Views.FileMenuPanels.CreateNew.fromTemplateText": "Des d'una Plantilla", - "PE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Creeu una presentació en blanc nova que podreu dissenyar i formatar un cop creada durant l’edició. O bé trieu una de les plantilles per iniciar una presentació d’un determinat tipus o propòsit on ja s’han pre-aplicat alguns estils.", + "PE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Creeu una presentació en blanc nova que podreu estilar i formatar després que es creï durant l'edició. O trieu una de les plantilles per iniciar una presentació d'un cert tipus o propòsit on alguns estils ja s'han aplicat prèviament.", "PE.Views.FileMenuPanels.CreateNew.newDocumentText": "Nova Presentació", "PE.Views.FileMenuPanels.CreateNew.noTemplatesText": "No hi ha plantilles", "PE.Views.FileMenuPanels.DocumentInfo.okButtonText": "Aplicar", @@ -1226,7 +1303,7 @@ "PE.Views.FileMenuPanels.DocumentInfo.txtAuthor": "Autor", "PE.Views.FileMenuPanels.DocumentInfo.txtBtnAccessRights": "Canviar els drets d’accés", "PE.Views.FileMenuPanels.DocumentInfo.txtComment": "Comentari", - "PE.Views.FileMenuPanels.DocumentInfo.txtCreated": "Creació", + "PE.Views.FileMenuPanels.DocumentInfo.txtCreated": "Creat", "PE.Views.FileMenuPanels.DocumentInfo.txtModifyBy": "Última Modificació Per", "PE.Views.FileMenuPanels.DocumentInfo.txtModifyDate": "Última Modificació", "PE.Views.FileMenuPanels.DocumentInfo.txtOwner": "Propietari", @@ -1256,7 +1333,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Haureu d’acceptar canvis abans de poder-los veure", "PE.Views.FileMenuPanels.Settings.strFast": "Ràpid", "PE.Views.FileMenuPanels.Settings.strFontRender": "Font Suggerida", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Deseu sempre al servidor (en cas contrari, deseu-lo al servidor quan el tanqueu)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "Afegeix una versió a l'emmagatzematge després de fer clic a Desa o Ctrl+S", "PE.Views.FileMenuPanels.Settings.strInputMode": "Activar els jeroglífics", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Configuració de Macros", "PE.Views.FileMenuPanels.Settings.strPaste": "Tallar, copiar i enganxar", @@ -1264,6 +1341,7 @@ "PE.Views.FileMenuPanels.Settings.strShowChanges": "Canvis de Col·laboració en temps real", "PE.Views.FileMenuPanels.Settings.strSpellCheckMode": "Activar l’opció de correcció ortogràfica", "PE.Views.FileMenuPanels.Settings.strStrict": "Estricte", + "PE.Views.FileMenuPanels.Settings.strTheme": "Tema de la interfície", "PE.Views.FileMenuPanels.Settings.strUnit": "Unitat de Mesura", "PE.Views.FileMenuPanels.Settings.strZoom": "Valor de Zoom Predeterminat", "PE.Views.FileMenuPanels.Settings.text10Minutes": "Cada 10 minuts", @@ -1271,10 +1349,10 @@ "PE.Views.FileMenuPanels.Settings.text5Minutes": "Cada 5 minuts", "PE.Views.FileMenuPanels.Settings.text60Minutes": "Cada Hora", "PE.Views.FileMenuPanels.Settings.textAlignGuides": "Guies d'Alineació", - "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Auto recuperació", + "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Recuperació automàtica", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Guardar Automàticament", "PE.Views.FileMenuPanels.Settings.textDisabled": "Desactivat", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Desar al Servidor", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Desant versions intermèdies", "PE.Views.FileMenuPanels.Settings.textMinute": "Cada Minut", "PE.Views.FileMenuPanels.Settings.txtAll": "Veure Tot", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Opcions de Correcció Automàtica ...", @@ -1285,7 +1363,7 @@ "PE.Views.FileMenuPanels.Settings.txtInch": "Polzada", "PE.Views.FileMenuPanels.Settings.txtInput": "Entrada Alternativa", "PE.Views.FileMenuPanels.Settings.txtLast": "Veure Últims", - "PE.Views.FileMenuPanels.Settings.txtMac": "a OS X", + "PE.Views.FileMenuPanels.Settings.txtMac": "com a OS X", "PE.Views.FileMenuPanels.Settings.txtNative": "Natiu", "PE.Views.FileMenuPanels.Settings.txtProofing": "Prova", "PE.Views.FileMenuPanels.Settings.txtPt": "Punt", @@ -1296,8 +1374,8 @@ "PE.Views.FileMenuPanels.Settings.txtStopMacrosDesc": "Desactiveu totes les macros sense una notificació", "PE.Views.FileMenuPanels.Settings.txtWarnMacros": "Mostra la Notificació", "PE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Desactiveu totes les macros amb una notificació", - "PE.Views.FileMenuPanels.Settings.txtWin": "a Windows", - "PE.Views.HeaderFooterDialog.applyAllText": "Aplicar-se a tot", + "PE.Views.FileMenuPanels.Settings.txtWin": "com a Windows", + "PE.Views.HeaderFooterDialog.applyAllText": "Aplicar a tot", "PE.Views.HeaderFooterDialog.applyText": "Aplicar", "PE.Views.HeaderFooterDialog.diffLanguage": "No podeu utilitzar un format de data en un idioma diferent al mestre de diapositives.
    Per canviar el màster, feu clic a \"Aplica a tot\" en comptes de \"Aplicar\"", "PE.Views.HeaderFooterDialog.notcriticalErrorTitle": "Avis", @@ -1328,6 +1406,7 @@ "PE.Views.HyperlinkSettingsDialog.txtNext": "Següent Diapositiva", "PE.Views.HyperlinkSettingsDialog.txtNotUrl": "Aquest camp hauria de ser una URL en el format \"http://www.example.com\"", "PE.Views.HyperlinkSettingsDialog.txtPrev": "Diapositiva Anterior", + "PE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Aquest camp està limitat a 2083 caràcters", "PE.Views.HyperlinkSettingsDialog.txtSlide": "Diapositiva", "PE.Views.ImageSettings.textAdvanced": "Mostra la configuració avançada", "PE.Views.ImageSettings.textCrop": "Retallar", @@ -1369,7 +1448,7 @@ "PE.Views.ImageSettingsAdvanced.textVertically": "Verticalment", "PE.Views.ImageSettingsAdvanced.textWidth": "Amplada", "PE.Views.LeftMenu.tipAbout": "Sobre", - "PE.Views.LeftMenu.tipChat": "Chat", + "PE.Views.LeftMenu.tipChat": "Xat", "PE.Views.LeftMenu.tipComments": "Comentaris", "PE.Views.LeftMenu.tipPlugins": "Connectors", "PE.Views.LeftMenu.tipSearch": "Cerca", @@ -1377,19 +1456,21 @@ "PE.Views.LeftMenu.tipSupport": "Opinió & Suport", "PE.Views.LeftMenu.tipTitles": "Títols", "PE.Views.LeftMenu.txtDeveloper": "MODALITAT DE DESENVOLUPADOR", + "PE.Views.LeftMenu.txtLimit": "Limitar l'accés", "PE.Views.LeftMenu.txtTrial": "ESTAT DE PROVA", + "PE.Views.LeftMenu.txtTrialDev": "Mode de desenvolupador de prova", "PE.Views.ParagraphSettings.strLineHeight": "Espai entre Línies", "PE.Views.ParagraphSettings.strParagraphSpacing": "Espaiat de Paràgraf", "PE.Views.ParagraphSettings.strSpacingAfter": "Després", "PE.Views.ParagraphSettings.strSpacingBefore": "Abans", "PE.Views.ParagraphSettings.textAdvanced": "Mostra la configuració avançada", - "PE.Views.ParagraphSettings.textAt": "a", + "PE.Views.ParagraphSettings.textAt": "A", "PE.Views.ParagraphSettings.textAtLeast": "Al menys", "PE.Views.ParagraphSettings.textAuto": "Múltiples", "PE.Views.ParagraphSettings.textExact": "Exacte", - "PE.Views.ParagraphSettings.txtAutoText": "Auto", + "PE.Views.ParagraphSettings.txtAutoText": "Automàtic", "PE.Views.ParagraphSettingsAdvanced.noTabs": "Les pestanyes especificades apareixeran en aquest camp", - "PE.Views.ParagraphSettingsAdvanced.strAllCaps": "Majúscules ", + "PE.Views.ParagraphSettingsAdvanced.strAllCaps": "Tot majúscules", "PE.Views.ParagraphSettingsAdvanced.strDoubleStrike": "Doble ratllat", "PE.Views.ParagraphSettingsAdvanced.strIndent": "Retirades", "PE.Views.ParagraphSettingsAdvanced.strIndentsLeftText": "Esquerra", @@ -1408,7 +1489,7 @@ "PE.Views.ParagraphSettingsAdvanced.strTabs": "Pestanya", "PE.Views.ParagraphSettingsAdvanced.textAlign": "Alineació", "PE.Views.ParagraphSettingsAdvanced.textAuto": "Múltiples", - "PE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Caràcter Espai", + "PE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Espaiat de caràcters", "PE.Views.ParagraphSettingsAdvanced.textDefault": "Pestanya predeterminada", "PE.Views.ParagraphSettingsAdvanced.textEffects": "Efectes", "PE.Views.ParagraphSettingsAdvanced.textExact": "Exactament", @@ -1424,16 +1505,16 @@ "PE.Views.ParagraphSettingsAdvanced.textTabPosition": "Posició de Pestanya", "PE.Views.ParagraphSettingsAdvanced.textTabRight": "Dreta", "PE.Views.ParagraphSettingsAdvanced.textTitle": "Paràgraf - Configuració Avançada", - "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", - "PE.Views.RightMenu.txtChartSettings": "Gràfic Configuració", + "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Automàtic", + "PE.Views.RightMenu.txtChartSettings": "Paràmetres del diagrama", "PE.Views.RightMenu.txtImageSettings": "Configuració Imatge", - "PE.Views.RightMenu.txtParagraphSettings": "Configuració de text", + "PE.Views.RightMenu.txtParagraphSettings": "Configuració de paràgraf", "PE.Views.RightMenu.txtShapeSettings": "Configuració de la Forma", "PE.Views.RightMenu.txtSignatureSettings": "Configuració de la Firma", "PE.Views.RightMenu.txtSlideSettings": "Configuració de la Diapositiva", "PE.Views.RightMenu.txtTableSettings": "Configuració de la taula", "PE.Views.RightMenu.txtTextArtSettings": "Configuració de l'Art de Text", - "PE.Views.ShapeSettings.strBackground": "Color de Fons", + "PE.Views.ShapeSettings.strBackground": "Color de fons", "PE.Views.ShapeSettings.strChange": "Canvia la forma automàtica", "PE.Views.ShapeSettings.strColor": "Color", "PE.Views.ShapeSettings.strFill": "Omplir", @@ -1441,13 +1522,13 @@ "PE.Views.ShapeSettings.strPattern": "Patró", "PE.Views.ShapeSettings.strShadow": "Mostra ombra", "PE.Views.ShapeSettings.strSize": "Mida", - "PE.Views.ShapeSettings.strStroke": "Traça", + "PE.Views.ShapeSettings.strStroke": "Línia", "PE.Views.ShapeSettings.strTransparency": "Opacitat", "PE.Views.ShapeSettings.strType": "Tipus", "PE.Views.ShapeSettings.textAdvanced": "Mostra la configuració avançada", "PE.Views.ShapeSettings.textAngle": "Angle", "PE.Views.ShapeSettings.textBorderSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor entre 0 pt i 1584 pt.", - "PE.Views.ShapeSettings.textColor": "Omplir de Color", + "PE.Views.ShapeSettings.textColor": "Color de farciment", "PE.Views.ShapeSettings.textDirection": "Direcció", "PE.Views.ShapeSettings.textEmptyPattern": "Sense Patró", "PE.Views.ShapeSettings.textFlip": "Voltejar", @@ -1496,7 +1577,7 @@ "PE.Views.ShapeSettingsAdvanced.textAltTitle": "Títol", "PE.Views.ShapeSettingsAdvanced.textAngle": "Angle", "PE.Views.ShapeSettingsAdvanced.textArrows": "Fletxes", - "PE.Views.ShapeSettingsAdvanced.textAutofit": "AutoFit", + "PE.Views.ShapeSettingsAdvanced.textAutofit": "\nAjustar automàticament", "PE.Views.ShapeSettingsAdvanced.textBeginSize": "Mida Inicial", "PE.Views.ShapeSettingsAdvanced.textBeginStyle": "Estil d’Inici", "PE.Views.ShapeSettingsAdvanced.textBevel": "Bisell", @@ -1539,9 +1620,10 @@ "PE.Views.SignatureSettings.strValid": "Signatures vàlides", "PE.Views.SignatureSettings.txtContinueEditing": "Editar de totes maneres", "PE.Views.SignatureSettings.txtEditWarning": "L’edició eliminarà les signatures de la presentació.
    Esteu segur que voleu continuar?", + "PE.Views.SignatureSettings.txtRemoveWarning": "Voleu eliminar aquesta signatura?
    Això no es podrà desfer.", "PE.Views.SignatureSettings.txtSigned": "S'han afegit signatures vàlides a la presentació. La presentació està protegida de l'edició.", "PE.Views.SignatureSettings.txtSignedInvalid": "Algunes de les signatures digitals presentades no són vàlides o no es van poder verificar. La presentació està protegida de l'edició.", - "PE.Views.SlideSettings.strBackground": "Color de Fons", + "PE.Views.SlideSettings.strBackground": "Color de fons", "PE.Views.SlideSettings.strColor": "Color", "PE.Views.SlideSettings.strDateTime": "Mostrar Data i Hora", "PE.Views.SlideSettings.strDelay": "Retard", @@ -1552,6 +1634,7 @@ "PE.Views.SlideSettings.strPattern": "Patró", "PE.Views.SlideSettings.strSlideNum": "Mostra el Número de Diapositiva", "PE.Views.SlideSettings.strStartOnClick": "Arrancar Amb Clic", + "PE.Views.SlideSettings.strTransparency": "Opacitat", "PE.Views.SlideSettings.textAdvanced": "Mostra la configuració avançada", "PE.Views.SlideSettings.textAngle": "Angle", "PE.Views.SlideSettings.textApplyAll": "Aplicar a Totes les Diapositives", @@ -1560,8 +1643,8 @@ "PE.Views.SlideSettings.textBottomLeft": "Inferior esquerra", "PE.Views.SlideSettings.textBottomRight": "Inferior dreta", "PE.Views.SlideSettings.textClock": "Rellotge", - "PE.Views.SlideSettings.textClockwise": "En el sentit de les agulles del rellotge", - "PE.Views.SlideSettings.textColor": "Omplir de Color", + "PE.Views.SlideSettings.textClockwise": "En sentit horari", + "PE.Views.SlideSettings.textColor": "Color de farciment", "PE.Views.SlideSettings.textCounterclockwise": "En sentit antihorari", "PE.Views.SlideSettings.textCover": "Cobrir", "PE.Views.SlideSettings.textDirection": "Direcció", @@ -1632,14 +1715,15 @@ "PE.Views.SlideSizeSettings.txt35": "35 mm Diapositives", "PE.Views.SlideSizeSettings.txtA3": "A3 Full (297x420 mm)", "PE.Views.SlideSizeSettings.txtA4": "A4 Full (210x297 mm)", - "PE.Views.SlideSizeSettings.txtB4": "B4 Full (ICO) (250x353 mm)", - "PE.Views.SlideSizeSettings.txtB5": "B5 Full (ICO) (176x250 mm)", - "PE.Views.SlideSizeSettings.txtBanner": "Banner", + "PE.Views.SlideSizeSettings.txtB4": "Paper B4 (ICO)(250x353 mm)", + "PE.Views.SlideSizeSettings.txtB5": "Paper B5 (ICO)(176x250 mm)", + "PE.Views.SlideSizeSettings.txtBanner": "Bàner", "PE.Views.SlideSizeSettings.txtCustom": "Personalitzat", "PE.Views.SlideSizeSettings.txtLedger": "Paper de Comptabilitat (11x17 en)", "PE.Views.SlideSizeSettings.txtLetter": "Paper de Carta (8.5x11 en)", "PE.Views.SlideSizeSettings.txtOverhead": "Transparència", "PE.Views.SlideSizeSettings.txtStandard": "Estàndard (4:3)", + "PE.Views.SlideSizeSettings.txtWidescreen": "Pantalla ampla", "PE.Views.Statusbar.goToPageText": "Anar a Diapositiva", "PE.Views.Statusbar.pageIndexText": "Diapositiva {0} de {1}", "PE.Views.Statusbar.textShowBegin": "Mostrar presentació des de el principi", @@ -1669,10 +1753,10 @@ "PE.Views.TableSettings.splitCellsText": "Dividir Cel·la...", "PE.Views.TableSettings.splitCellTitleText": "Dividir Cel·la", "PE.Views.TableSettings.textAdvanced": "Mostra la configuració avançada", - "PE.Views.TableSettings.textBackColor": "Color de Fons", - "PE.Views.TableSettings.textBanded": "Bandat", + "PE.Views.TableSettings.textBackColor": "Color de fons", + "PE.Views.TableSettings.textBanded": "Bandejat", "PE.Views.TableSettings.textBorderColor": "Color", - "PE.Views.TableSettings.textBorders": "Estil de la Vora", + "PE.Views.TableSettings.textBorders": "Estil de Vores", "PE.Views.TableSettings.textCellSize": "Mida Cel·la", "PE.Views.TableSettings.textColumns": "Columnes", "PE.Views.TableSettings.textDistributeCols": "Distribuïu les columnes", @@ -1720,18 +1804,18 @@ "PE.Views.TableSettingsAdvanced.textTitle": "Taula - Configuració Avançada", "PE.Views.TableSettingsAdvanced.textTop": "Superior", "PE.Views.TableSettingsAdvanced.textWidthSpaces": "Marges", - "PE.Views.TextArtSettings.strBackground": "Color de Fons", + "PE.Views.TextArtSettings.strBackground": "Color de fons", "PE.Views.TextArtSettings.strColor": "Color", "PE.Views.TextArtSettings.strFill": "Omplir", "PE.Views.TextArtSettings.strForeground": "Color de Primer Pla", "PE.Views.TextArtSettings.strPattern": "Patró", "PE.Views.TextArtSettings.strSize": "Mida", - "PE.Views.TextArtSettings.strStroke": "Traça", + "PE.Views.TextArtSettings.strStroke": "Línia", "PE.Views.TextArtSettings.strTransparency": "Opacitat", "PE.Views.TextArtSettings.strType": "Tipus", "PE.Views.TextArtSettings.textAngle": "Angle", "PE.Views.TextArtSettings.textBorderSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor entre 0 pt i 1584 pt.", - "PE.Views.TextArtSettings.textColor": "Omplir de Color", + "PE.Views.TextArtSettings.textColor": "Color de farciment", "PE.Views.TextArtSettings.textDirection": "Direcció", "PE.Views.TextArtSettings.textEmptyPattern": "Sense Patró", "PE.Views.TextArtSettings.textFromFile": "Des d'un fitxer", @@ -1784,13 +1868,19 @@ "PE.Views.Toolbar.capTabFile": "Fitxer", "PE.Views.Toolbar.capTabHome": "Inici", "PE.Views.Toolbar.capTabInsert": "Insertar", + "PE.Views.Toolbar.mniCapitalizeWords": "Posar en majúscules cada paraula", "PE.Views.Toolbar.mniCustomTable": "Inserir Taula Personalitzada", "PE.Views.Toolbar.mniImageFromFile": "Imatge d'un Fitxer", "PE.Views.Toolbar.mniImageFromStorage": "Imatge d'un Magatzem", "PE.Views.Toolbar.mniImageFromUrl": "Imatge d'un Enllaç", + "PE.Views.Toolbar.mniLowerCase": "minúscules", + "PE.Views.Toolbar.mniSentenceCase": "Cas de frase", "PE.Views.Toolbar.mniSlideAdvanced": "Configuració Avançada", "PE.Views.Toolbar.mniSlideStandard": "Estàndard (4:3)", "PE.Views.Toolbar.mniSlideWide": "Pantalla ampla (16:9)", + "PE.Views.Toolbar.mniToggleCase": "iNVERTIR mAJÚSCULES", + "PE.Views.Toolbar.mniUpperCase": "MAJÚSCULES", + "PE.Views.Toolbar.strMenuNoFill": "Sense Farciment", "PE.Views.Toolbar.textAlignBottom": "Alinear text en la part superior", "PE.Views.Toolbar.textAlignCenter": "Centrar text", "PE.Views.Toolbar.textAlignJust": "Justificar", @@ -1801,17 +1891,20 @@ "PE.Views.Toolbar.textArrangeBack": "Enviar a un segon pla", "PE.Views.Toolbar.textArrangeBackward": "Envia Endarrere", "PE.Views.Toolbar.textArrangeForward": "Portar Endavant", - "PE.Views.Toolbar.textArrangeFront": "Porta a Primer pla", + "PE.Views.Toolbar.textArrangeFront": "Portar a Primer pla", "PE.Views.Toolbar.textBold": "Negreta", + "PE.Views.Toolbar.textColumnsCustom": "Columnes Personalitzades", + "PE.Views.Toolbar.textColumnsOne": "Una columna", + "PE.Views.Toolbar.textColumnsThree": "Tres columnes", + "PE.Views.Toolbar.textColumnsTwo": "Dues columnes", "PE.Views.Toolbar.textItalic": "Itàlica", "PE.Views.Toolbar.textListSettings": "Configuració de la Llista", - "PE.Views.Toolbar.textNewColor": "Color Personalitzat", "PE.Views.Toolbar.textShapeAlignBottom": "Alineació Inferior", "PE.Views.Toolbar.textShapeAlignCenter": "Centrar", - "PE.Views.Toolbar.textShapeAlignLeft": "Alinear Esquerra", + "PE.Views.Toolbar.textShapeAlignLeft": "Alineació esquerra", "PE.Views.Toolbar.textShapeAlignMiddle": "Alinear al Mig", - "PE.Views.Toolbar.textShapeAlignRight": "Alinear Dreta", - "PE.Views.Toolbar.textShapeAlignTop": "Alinear Superior", + "PE.Views.Toolbar.textShapeAlignRight": "Alineació dreta", + "PE.Views.Toolbar.textShapeAlignTop": "Alineació superior", "PE.Views.Toolbar.textShowBegin": "Mostrar presentació des de el principi", "PE.Views.Toolbar.textShowCurrent": "Mostrar la Diapositiva Actual", "PE.Views.Toolbar.textShowPresenterView": "Veure Vista del Presentador", @@ -1828,19 +1921,24 @@ "PE.Views.Toolbar.textUnderline": "Subratllar", "PE.Views.Toolbar.tipAddSlide": "Afegir diapositiva", "PE.Views.Toolbar.tipBack": "Enrere", - "PE.Views.Toolbar.tipChangeChart": "Canvia el tipus de gràfic", + "PE.Views.Toolbar.tipChangeCase": "Canviar el cas", + "PE.Views.Toolbar.tipChangeChart": "Canviar el tipus de gràfic", "PE.Views.Toolbar.tipChangeSlide": "Canviar disseny de diapositiva", - "PE.Views.Toolbar.tipClearStyle": "Estil clar", - "PE.Views.Toolbar.tipColorSchemas": "Canviar el esquema de color", + "PE.Views.Toolbar.tipClearStyle": "Neteja l'estil", + "PE.Views.Toolbar.tipColorSchemas": "Canviar l'esquema de color", + "PE.Views.Toolbar.tipColumns": "Inserir columnes", "PE.Views.Toolbar.tipCopy": "Copiar", "PE.Views.Toolbar.tipCopyStyle": "Copiar estil", "PE.Views.Toolbar.tipDateTime": "Inseriu la data i l'hora actuals", + "PE.Views.Toolbar.tipDecFont": "Reduir la mida de la lletra", "PE.Views.Toolbar.tipDecPrLeft": "Disminuir el sagnat", "PE.Views.Toolbar.tipEditHeader": "Editar el peu de pàgina", "PE.Views.Toolbar.tipFontColor": "Color de Font", "PE.Views.Toolbar.tipFontName": "Font", "PE.Views.Toolbar.tipFontSize": "Mida de Font", "PE.Views.Toolbar.tipHAligh": "Alineació Horitzontal", + "PE.Views.Toolbar.tipHighlightColor": "Color de ressaltat", + "PE.Views.Toolbar.tipIncFont": "Augmentar la mida de la lletra", "PE.Views.Toolbar.tipIncPrLeft": "Augmentar el sagnat", "PE.Views.Toolbar.tipInsertAudio": "Inseriu àudio", "PE.Views.Toolbar.tipInsertChart": "Inseriu Gràfic", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index beb6effac..05d49feb3 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -126,6 +126,12 @@ "Common.Views.AutoCorrectDialog.warnReset": "Any autocorrect you added will be removed and the changed ones will be restored to their original values. Do you want to continue?", "Common.Views.AutoCorrectDialog.warnRestore": "The autocorrect entry for %1 will be reset to its original value. Do you want to continue?", "Common.Views.Chat.textSend": "Send", + "Common.Views.Comments.mniAuthorAsc": "Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Author Z to A", + "Common.Views.Comments.mniDateAsc": "Oldest", + "Common.Views.Comments.mniDateDesc": "Newest", + "Common.Views.Comments.mniPositionAsc": "From top", + "Common.Views.Comments.mniPositionDesc": "From bottom", "Common.Views.Comments.textAdd": "Add", "Common.Views.Comments.textAddComment": "Add Comment", "Common.Views.Comments.textAddCommentToDoc": "Add Comment to Document", @@ -133,6 +139,7 @@ "Common.Views.Comments.textAnonym": "Guest", "Common.Views.Comments.textCancel": "Cancel", "Common.Views.Comments.textClose": "Close", + "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.Comments.textComments": "Comments", "Common.Views.Comments.textEdit": "OK", "Common.Views.Comments.textEnterCommentHint": "Enter your comment here", @@ -142,13 +149,6 @@ "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", - "Common.Views.Comments.mniAuthorAsc": "Author A to Z", - "Common.Views.Comments.mniAuthorDesc": "Author Z to A", - "Common.Views.Comments.mniDateDesc": "Newest", - "Common.Views.Comments.mniDateAsc": "Oldest", - "Common.Views.Comments.mniPositionAsc": "From top", - "Common.Views.Comments.mniPositionDesc": "From bottom", - "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", "Common.Views.CopyWarningDialog.textTitle": "Copy, Cut and Paste Actions", @@ -452,6 +452,7 @@ "PE.Controllers.Main.textCloseTip": "Click to close the tip", "PE.Controllers.Main.textContactUs": "Contact sales", "PE.Controllers.Main.textCustomLoader": "Please note that according to the terms of the license you are not entitled to change the loader.
    Please contact our Sales Department to get a quote.", + "PE.Controllers.Main.textDisconnect": "Connection is lost", "PE.Controllers.Main.textGuest": "Guest", "PE.Controllers.Main.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", "PE.Controllers.Main.textLoadingDocument": "Loading presentation", @@ -725,7 +726,7 @@ "PE.Controllers.Main.unsupportedBrowserErrorText": "Your browser is not supported.", "PE.Controllers.Main.uploadImageExtMessage": "Unknown image format.", "PE.Controllers.Main.uploadImageFileCountMessage": "No images uploaded.", - "PE.Controllers.Main.uploadImageSizeMessage": "Maximum image size limit exceeded.", + "PE.Controllers.Main.uploadImageSizeMessage": "The image is too big. The maximum size is 25 MB.", "PE.Controllers.Main.uploadImageTextText": "Uploading image...", "PE.Controllers.Main.uploadImageTitleText": "Uploading Image", "PE.Controllers.Main.waitText": "Please, wait...", @@ -739,7 +740,6 @@ "PE.Controllers.Main.warnNoLicense": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", "PE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", "PE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", - "PE.Controllers.Main.textDisconnect": "Connection is lost", "PE.Controllers.Statusbar.zoomText": "Zoom {0}%", "PE.Controllers.Toolbar.confirmAddFontName": "The font you are going to save is not available on the current device.
    The text style will be displayed using one of the system fonts, the saved font will be used when it is available.
    Do you want to continue?", "PE.Controllers.Toolbar.textAccent": "Accents", diff --git a/apps/presentationeditor/main/locale/es.json b/apps/presentationeditor/main/locale/es.json index 69f1d3545..1cd10a051 100644 --- a/apps/presentationeditor/main/locale/es.json +++ b/apps/presentationeditor/main/locale/es.json @@ -715,7 +715,7 @@ "PE.Controllers.Main.unsupportedBrowserErrorText": "Su navegador no está soportado.", "PE.Controllers.Main.uploadImageExtMessage": "Formato de imagen desconocido.", "PE.Controllers.Main.uploadImageFileCountMessage": "No hay imágenes subidas.", - "PE.Controllers.Main.uploadImageSizeMessage": "Tamaño máximo de imagen está superado.", + "PE.Controllers.Main.uploadImageSizeMessage": "La imagen es demasiado grande. El tamaño máximo es de 25 MB.", "PE.Controllers.Main.uploadImageTextText": "Subiendo imagen...", "PE.Controllers.Main.uploadImageTitleText": "Subiendo imagen", "PE.Controllers.Main.waitText": "Por favor, espere...", diff --git a/apps/presentationeditor/main/locale/it.json b/apps/presentationeditor/main/locale/it.json index e31ecf2e5..b0d976064 100644 --- a/apps/presentationeditor/main/locale/it.json +++ b/apps/presentationeditor/main/locale/it.json @@ -1088,7 +1088,7 @@ "PE.Views.DocumentHolder.addCommentText": "Aggiungi commento", "PE.Views.DocumentHolder.addToLayoutText": "Aggiungi al layout", "PE.Views.DocumentHolder.advancedImageText": "Impostazioni avanzate dell'immagine", - "PE.Views.DocumentHolder.advancedParagraphText": "Impostazioni avanzate testo", + "PE.Views.DocumentHolder.advancedParagraphText": "Impostazioni avanzate del paragrafo", "PE.Views.DocumentHolder.advancedShapeText": "Impostazioni avanzate forma", "PE.Views.DocumentHolder.advancedTableText": "Impostazioni avanzate della tabella", "PE.Views.DocumentHolder.alignmentText": "Allineamento", @@ -1334,7 +1334,7 @@ "PE.Views.FileMenuPanels.Settings.strCoAuthModeDescStrict": "Dovrai accettare i cambiamenti prima di poterli visualizzare.", "PE.Views.FileMenuPanels.Settings.strFast": "Rapido", "PE.Views.FileMenuPanels.Settings.strFontRender": "Suggerimento per i caratteri", - "PE.Views.FileMenuPanels.Settings.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)", + "PE.Views.FileMenuPanels.Settings.strForcesave": "‎Aggiungere versione al salvataggio dopo aver fatto clic su Salva o CTRL+S‎", "PE.Views.FileMenuPanels.Settings.strInputMode": "Attiva geroglifici", "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Impostazioni macro", "PE.Views.FileMenuPanels.Settings.strPaste": "Taglia, copia e incolla", @@ -1353,7 +1353,7 @@ "PE.Views.FileMenuPanels.Settings.textAutoRecover": "Recupero automatico", "PE.Views.FileMenuPanels.Settings.textAutoSave": "Salvataggio automatico", "PE.Views.FileMenuPanels.Settings.textDisabled": "Disattivato", - "PE.Views.FileMenuPanels.Settings.textForceSave": "Salva sul server", + "PE.Views.FileMenuPanels.Settings.textForceSave": "Salva versioni intermedie", "PE.Views.FileMenuPanels.Settings.textMinute": "Ogni minuto", "PE.Views.FileMenuPanels.Settings.txtAll": "Tutte", "PE.Views.FileMenuPanels.Settings.txtAutoCorrect": "Opzioni di correzione automatica ...", @@ -1509,7 +1509,7 @@ "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "PE.Views.RightMenu.txtChartSettings": "Impostazioni grafico", "PE.Views.RightMenu.txtImageSettings": "Impostazioni immagine", - "PE.Views.RightMenu.txtParagraphSettings": "Impostazioni testo", + "PE.Views.RightMenu.txtParagraphSettings": "Impostazioni paragrafo", "PE.Views.RightMenu.txtShapeSettings": "Impostazioni forma", "PE.Views.RightMenu.txtSignatureSettings": "Impostazioni della Firma", "PE.Views.RightMenu.txtSlideSettings": "Impostazioni diapositiva", diff --git a/apps/presentationeditor/main/locale/nl.json b/apps/presentationeditor/main/locale/nl.json index 0d6080230..1fa527dc9 100644 --- a/apps/presentationeditor/main/locale/nl.json +++ b/apps/presentationeditor/main/locale/nl.json @@ -50,6 +50,8 @@ "Common.Translation.warnFileLocked": "Het bestand wordt bewerkt in een andere app. U kunt doorgaan met bewerken en als kopie opslaan.", "Common.UI.ColorButton.textAutoColor": "Automatisch", "Common.UI.ColorButton.textNewColor": "Nieuwe aangepaste kleur toevoegen", + "Common.Translation.warnFileLockedBtnEdit": "Maak een kopie", + "Common.Translation.warnFileLockedBtnView": "Open voor lezen", "Common.UI.ComboBorderSize.txtNoBorders": "Geen randen", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "Geen randen", "Common.UI.ComboDataView.emptyComboText": "Geen stijlen", @@ -73,6 +75,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Het document is gewijzigd door een andere gebruiker.
    Klik om uw wijzigingen op te slaan en de updates opnieuw te laden.", "Common.UI.ThemeColorPalette.textStandartColors": "Standaardkleuren", "Common.UI.ThemeColorPalette.textThemeColors": "Themakleuren", + "Common.UI.Themes.txtThemeClassicLight": "Klassiek Licht", + "Common.UI.Themes.txtThemeDark": "Donker", + "Common.UI.Themes.txtThemeLight": "Licht", "Common.UI.Window.cancelButtonText": "Annuleren", "Common.UI.Window.closeButtonText": "Sluiten", "Common.UI.Window.noButtonText": "Nee", @@ -94,10 +99,12 @@ "Common.Views.About.txtVersion": "Versie", "Common.Views.AutoCorrectDialog.textAdd": "Toevoegen", "Common.Views.AutoCorrectDialog.textApplyText": "Toepassen terwijl u typt", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Auto correctie", "Common.Views.AutoCorrectDialog.textAutoFormat": "AutoOpmaak terwijl u typt", "Common.Views.AutoCorrectDialog.textBulleted": "Automatische lijsten met opsommingstekens", "Common.Views.AutoCorrectDialog.textBy": "Door", "Common.Views.AutoCorrectDialog.textDelete": "Verwijderen", + "Common.Views.AutoCorrectDialog.textFLSentence": "Maak de eerste letter van de zin hoofdletter", "Common.Views.AutoCorrectDialog.textHyphens": "Koppeltekens (--) met streepje (—)", "Common.Views.AutoCorrectDialog.textMathCorrect": "Wiskundige autocorrectie", "Common.Views.AutoCorrectDialog.textNumbered": "Automatische genummerde lijsten", @@ -149,6 +156,7 @@ "Common.Views.Header.textBack": "Naar documenten", "Common.Views.Header.textCompactView": "Werkbalk Verbergen", "Common.Views.Header.textHideLines": "Linialen verbergen", + "Common.Views.Header.textHideNotes": "Verberg notities", "Common.Views.Header.textHideStatusBar": "Statusbalk verbergen", "Common.Views.Header.textRemoveFavorite": "Verwijder uit favorieten", "Common.Views.Header.textSaveBegin": "Opslaan...", @@ -234,6 +242,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Zet samenwerkings modus", "Common.Views.ReviewChanges.tipCommentRem": "Alle opmerkingen verwijderen", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Verwijder huidige opmerking", + "Common.Views.ReviewChanges.tipCommentResolve": "Oplossen van opmerkingen", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Oplossen van huidige opmerkingen", "Common.Views.ReviewChanges.tipHistory": "Toon versie geschiedenis", "Common.Views.ReviewChanges.tipRejectCurrent": "Huidige wijziging afwijzen", "Common.Views.ReviewChanges.tipReview": "Wijzigingen bijhouden", @@ -253,6 +263,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Verwijder al mijn commentaar", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Verwijder mijn huidige opmerkingen", "Common.Views.ReviewChanges.txtCommentRemove": "Verwijderen", + "Common.Views.ReviewChanges.txtCommentResolve": "Oplossen", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Alle opmerkingen oplossen", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Oplossen van huidige opmerkingen", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Los mijn opmerkingen op", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Mijn huidige opmerkingen oplossen", "Common.Views.ReviewChanges.txtDocLang": "Taal", "Common.Views.ReviewChanges.txtFinal": "Alle veranderingen geaccepteerd (Voorbeeld)", "Common.Views.ReviewChanges.txtFinalCap": "Einde", @@ -339,9 +354,11 @@ "Common.Views.UserNameDialog.textDontShow": "Vraag me niet nog een keer ", "Common.Views.UserNameDialog.textLabel": "Label:", "Common.Views.UserNameDialog.textLabelError": "Label mag niet leeg zijn", + "PE.Controllers.LeftMenu.leavePageText": "Alle niet-opgeslagen wijzigingen in dit document gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet-opgeslagen wijzigingen te verwijderen.", "PE.Controllers.LeftMenu.newDocumentTitle": "Presentatie zonder naam", "PE.Controllers.LeftMenu.notcriticalErrorTitle": "Waarschuwing", "PE.Controllers.LeftMenu.requestEditRightsText": "Bewerkrechten worden aangevraagd...", + "PE.Controllers.LeftMenu.textLoadHistory": "Versiehistorie wordt geladen...", "PE.Controllers.LeftMenu.textNoTextFound": "De gegevens waarnaar u zoekt, zijn niet gevonden. Pas uw zoekopties aan.", "PE.Controllers.LeftMenu.textReplaceSkipped": "De vervanging is uitgevoerd. {0} gevallen zijn overgeslagen.", "PE.Controllers.LeftMenu.textReplaceSuccess": "De zoekactie is uitgevoerd. Vervangen items: {0}", @@ -386,6 +403,7 @@ "PE.Controllers.Main.errorUsersExceed": "Het onder het prijsplan toegestane aantal gebruikers is overschreden", "PE.Controllers.Main.errorViewerDisconnect": "Verbinding is verbroken. U kunt het document nog wel bekijken,
    maar u kunt het pas downloaden of afdrukken als de verbinding is hersteld.", "PE.Controllers.Main.leavePageText": "Er zijn niet-opgeslagen wijzigingen in deze presentatie. Klik op \"Op deze pagina blijven\" en dan op \"Opslaan\" om de wijzigingen op te slaan. Klik op \"Pagina verlaten\" om de niet-opgeslagen wijzigingen te negeren.", + "PE.Controllers.Main.leavePageTextOnClose": "Alle niet-opgeslagen wijzigingen in deze presentatie gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet-opgeslagen wijzigingen te verwijderen.", "PE.Controllers.Main.loadFontsTextText": "Gegevens worden geladen...", "PE.Controllers.Main.loadFontsTitleText": "Gegevens worden geladen", "PE.Controllers.Main.loadFontTextText": "Gegevens worden geladen...", @@ -436,6 +454,7 @@ "PE.Controllers.Main.textShape": "Vorm", "PE.Controllers.Main.textStrict": "Strikte modus", "PE.Controllers.Main.textTryUndoRedo": "De functies Ongedaan maken/Opnieuw worden uitgeschakeld in de modus Snel gezamenlijk bewerken.
    Klik op de knop 'Strikte modus' om over te schakelen naar de strikte modus voor gezamenlijk bewerken. U kunt het bestand dan zonder interferentie van andere gebruikers bewerken en uw wijzigingen verzenden wanneer u die opslaat. U kunt schakelen tussen de modi voor gezamenlijke bewerking via Geavanceerde instellingen van de editor.", + "PE.Controllers.Main.textTryUndoRedoWarn": "De functies Ongedaan maken/Annuleren zijn uitgeschakeld in de modus Snel meewerken.", "PE.Controllers.Main.titleLicenseExp": "Licentie vervallen", "PE.Controllers.Main.titleServerVersion": "Editor bijgewerkt", "PE.Controllers.Main.txtAddFirstSlide": "Klik om de eerste slide te maken", @@ -450,6 +469,7 @@ "PE.Controllers.Main.txtDiagram": "SmartArt", "PE.Controllers.Main.txtDiagramTitle": "Grafiektitel", "PE.Controllers.Main.txtEditingMode": "Bewerkmodus instellen...", + "PE.Controllers.Main.txtErrorLoadHistory": "Geschiedenis laden mislukt", "PE.Controllers.Main.txtFiguredArrows": "Pijlvormen", "PE.Controllers.Main.txtFooter": "Voettekst", "PE.Controllers.Main.txtHeader": "Koptekst", @@ -459,6 +479,7 @@ "PE.Controllers.Main.txtMath": "Wiskunde", "PE.Controllers.Main.txtMedia": "Media", "PE.Controllers.Main.txtNeedSynchronize": "U hebt updates", + "PE.Controllers.Main.txtNone": "Geen", "PE.Controllers.Main.txtPicture": "Afbeelding", "PE.Controllers.Main.txtRectangles": "Rechthoeken", "PE.Controllers.Main.txtSeries": "Serie", @@ -1258,6 +1279,7 @@ "PE.Views.FileMenu.btnCreateNewCaption": "Nieuw maken", "PE.Views.FileMenu.btnDownloadCaption": "Downloaden als...", "PE.Views.FileMenu.btnHelpCaption": "Help...", + "PE.Views.FileMenu.btnHistoryCaption": "Versie geschiedenis", "PE.Views.FileMenu.btnInfoCaption": "Info over presentatie...", "PE.Views.FileMenu.btnPrintCaption": "Afdrukken", "PE.Views.FileMenu.btnProtectCaption": "Beveilig", @@ -1385,6 +1407,7 @@ "PE.Views.HyperlinkSettingsDialog.txtNext": "Volgende dia", "PE.Views.HyperlinkSettingsDialog.txtNotUrl": "Dit veld moet een URL in de notatie \"http://www.voorbeeld.com\" bevatten", "PE.Views.HyperlinkSettingsDialog.txtPrev": "Vorige dia", + "PE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Dit veld is beperkt tot 2083 tekens", "PE.Views.HyperlinkSettingsDialog.txtSlide": "Dia", "PE.Views.ImageSettings.textAdvanced": "Geavanceerde instellingen tonen", "PE.Views.ImageSettings.textCrop": "Uitsnijden", @@ -1900,7 +1923,7 @@ "PE.Views.Toolbar.textUnderline": "Onderstrepen", "PE.Views.Toolbar.tipAddSlide": "Dia toevoegen", "PE.Views.Toolbar.tipBack": "Terug", - "PE.Views.Toolbar.tipChangeCase": "Verander lettertype", + "PE.Views.Toolbar.tipChangeCase": "Verander geval", "PE.Views.Toolbar.tipChangeChart": "Grafiektype wijzigen", "PE.Views.Toolbar.tipChangeSlide": "Dia-indeling wijzigen", "PE.Views.Toolbar.tipClearStyle": "Stijl wissen", diff --git a/apps/presentationeditor/main/locale/ru.json b/apps/presentationeditor/main/locale/ru.json index 6937cec7e..9b8d514c0 100644 --- a/apps/presentationeditor/main/locale/ru.json +++ b/apps/presentationeditor/main/locale/ru.json @@ -715,7 +715,7 @@ "PE.Controllers.Main.unsupportedBrowserErrorText": "Ваш браузер не поддерживается.", "PE.Controllers.Main.uploadImageExtMessage": "Неизвестный формат изображения.", "PE.Controllers.Main.uploadImageFileCountMessage": "Ни одного изображения не загружено.", - "PE.Controllers.Main.uploadImageSizeMessage": "Превышен максимальный размер изображения.", + "PE.Controllers.Main.uploadImageSizeMessage": "Слишком большое изображение. Максимальный размер - 25 MB.", "PE.Controllers.Main.uploadImageTextText": "Загрузка изображения...", "PE.Controllers.Main.uploadImageTitleText": "Загрузка изображения", "PE.Controllers.Main.waitText": "Пожалуйста, подождите...", diff --git a/apps/presentationeditor/main/locale/zh.json b/apps/presentationeditor/main/locale/zh.json index f15c47a41..7440bcb3b 100644 --- a/apps/presentationeditor/main/locale/zh.json +++ b/apps/presentationeditor/main/locale/zh.json @@ -39,6 +39,7 @@ "Common.UI.SynchronizeTip.textSynchronize": "该文档已被其他用户更改。
    请点击保存更改并重新加载更新。", "Common.UI.ThemeColorPalette.textStandartColors": "标准颜色", "Common.UI.ThemeColorPalette.textThemeColors": "主题颜色", + "Common.UI.Themes.txtThemeDark": "暗色模式", "Common.UI.Window.cancelButtonText": "取消", "Common.UI.Window.closeButtonText": "关闭", "Common.UI.Window.noButtonText": "否", @@ -64,6 +65,7 @@ "Common.Views.AutoCorrectDialog.textBy": "依据", "Common.Views.AutoCorrectDialog.textDelete": "删除", "Common.Views.AutoCorrectDialog.textMathCorrect": "数学自动修正", + "Common.Views.AutoCorrectDialog.textRecognizedDesc": "以下表达式被识别为数学公式。这些表达式不会被自动设为斜体。", "Common.Views.AutoCorrectDialog.textReplace": "替换", "Common.Views.AutoCorrectDialog.textReplaceText": "输入时自动替换", "Common.Views.AutoCorrectDialog.textReplaceType": "输入时自动替换文字", @@ -311,6 +313,7 @@ "PE.Controllers.Main.errorAccessDeny": "您正在尝试执行您没有权限的操作。
    请联系您的文档服务器管理员.", "PE.Controllers.Main.errorBadImageUrl": "图片地址不正确", "PE.Controllers.Main.errorCoAuthoringDisconnect": "服务器连接丢失。该文档现在无法编辑", + "PE.Controllers.Main.errorComboSeries": "要创建联立图表,请选中至少两组数据。", "PE.Controllers.Main.errorConnectToServer": "这份文件无法保存。请检查连接设置或联系您的管理员。
    当你点击“OK”按钮,系统将提示您下载文档。", "PE.Controllers.Main.errorDatabaseConnection": "外部错误。
    数据库连接错误。如果错误仍然存​​在,请联系支持人员。", "PE.Controllers.Main.errorDataEncrypted": "加密更改已收到,无法对其解密。", @@ -329,6 +332,7 @@ "PE.Controllers.Main.errorSessionAbsolute": "文档编辑会话已过期。请重新加载页面。", "PE.Controllers.Main.errorSessionIdle": "该文件尚未编辑相当长的时间。请重新加载页面。", "PE.Controllers.Main.errorSessionToken": "与服务器的连接已中断。请重新加载页面。", + "PE.Controllers.Main.errorSetPassword": "未能成功设置密码", "PE.Controllers.Main.errorStockChart": "行顺序不正确。建立股票图表将数据按照以下顺序放置在表格上:
    开盘价,最高价格,最低价格,收盘价。", "PE.Controllers.Main.errorToken": "文档安全令牌未正确形成。
    请与您的文件服务器管理员联系。", "PE.Controllers.Main.errorTokenExpire": "文档安全令牌已过期。
    请与您的文档服务器管理员联系。", @@ -381,9 +385,11 @@ "PE.Controllers.Main.textNoLicenseTitle": "ONLYOFFICE开源版本", "PE.Controllers.Main.textPaidFeature": "付费功能", "PE.Controllers.Main.textRemember": "记住我的选择", + "PE.Controllers.Main.textRenameError": "用户名不能留空。", "PE.Controllers.Main.textShape": "形状", "PE.Controllers.Main.textStrict": "严格模式", "PE.Controllers.Main.textTryUndoRedo": "对于快速的协同编辑模式,取消/重做功能是禁用的。< br >单击“严格模式”按钮切换到严格co-editing模式编辑该文件没有其他用户干扰和发送您的更改只后你拯救他们。您可以使用编辑器高级设置在编辑模式之间切换。", + "PE.Controllers.Main.textTryUndoRedoWarn": "快速共同编辑模式下,撤销/重做功能被禁用。", "PE.Controllers.Main.titleLicenseExp": "许可证过期", "PE.Controllers.Main.titleServerVersion": "编辑器已更新", "PE.Controllers.Main.txtAddFirstSlide": "单击添加第一张幻灯片", @@ -1332,6 +1338,7 @@ "PE.Views.HyperlinkSettingsDialog.txtNext": "下一张幻灯片", "PE.Views.HyperlinkSettingsDialog.txtNotUrl": "该字段应该是“http://www.example.com”格式的URL", "PE.Views.HyperlinkSettingsDialog.txtPrev": "上一张幻灯片", + "PE.Views.HyperlinkSettingsDialog.txtSizeLimit": "该域字符限制为2803个。", "PE.Views.HyperlinkSettingsDialog.txtSlide": "滑动", "PE.Views.ImageSettings.textAdvanced": "显示高级设置", "PE.Views.ImageSettings.textCrop": "裁剪", @@ -1383,6 +1390,7 @@ "PE.Views.LeftMenu.txtDeveloper": "开发者模式", "PE.Views.LeftMenu.txtLimit": "限制访问", "PE.Views.LeftMenu.txtTrial": "试用模式", + "PE.Views.LeftMenu.txtTrialDev": "试用开发者模式", "PE.Views.ParagraphSettings.strLineHeight": "行间距", "PE.Views.ParagraphSettings.strParagraphSpacing": "段落间距", "PE.Views.ParagraphSettings.strSpacingAfter": "后", @@ -1544,6 +1552,7 @@ "PE.Views.SignatureSettings.strValid": "有效签名", "PE.Views.SignatureSettings.txtContinueEditing": "继续编辑", "PE.Views.SignatureSettings.txtEditWarning": "编辑将删除演示文稿中的签名。
    您确定要继续吗?", + "PE.Views.SignatureSettings.txtRemoveWarning": "要删除该签名吗?
    这一操作不能被撤销。", "PE.Views.SignatureSettings.txtSigned": "有效签名已添加到演示文稿中。该演示文稿已限制编辑。", "PE.Views.SignatureSettings.txtSignedInvalid": "演示文稿中的某些数字签名无效或无法验证。该演示文稿已限制编辑。", "PE.Views.SlideSettings.strBackground": "背景颜色", @@ -1833,6 +1842,7 @@ "PE.Views.Toolbar.textUnderline": "下划线", "PE.Views.Toolbar.tipAddSlide": "添加幻灯片", "PE.Views.Toolbar.tipBack": "返回", + "PE.Views.Toolbar.tipChangeCase": "修改大小写", "PE.Views.Toolbar.tipChangeChart": "更改图表类型", "PE.Views.Toolbar.tipChangeSlide": "更改幻灯片布局", "PE.Views.Toolbar.tipClearStyle": "清除样式", diff --git a/apps/spreadsheeteditor/embed/locale/ro.json b/apps/spreadsheeteditor/embed/locale/ro.json index 1c7f695fa..91753d4c0 100644 --- a/apps/spreadsheeteditor/embed/locale/ro.json +++ b/apps/spreadsheeteditor/embed/locale/ro.json @@ -25,6 +25,7 @@ "SSE.ApplicationController.waitText": "Vă rugăm să așteptați...", "SSE.ApplicationView.txtDownload": "Descărcare", "SSE.ApplicationView.txtEmbed": "Încorporare", + "SSE.ApplicationView.txtFileLocation": "Deschidere locația fișierului", "SSE.ApplicationView.txtFullScreen": "Ecran complet", "SSE.ApplicationView.txtPrint": "Imprimare", "SSE.ApplicationView.txtShare": "Partajează" diff --git a/apps/spreadsheeteditor/embed/locale/tr.json b/apps/spreadsheeteditor/embed/locale/tr.json index 55a6ebedb..f5107458c 100644 --- a/apps/spreadsheeteditor/embed/locale/tr.json +++ b/apps/spreadsheeteditor/embed/locale/tr.json @@ -26,5 +26,6 @@ "SSE.ApplicationView.txtEmbed": "Gömülü", "SSE.ApplicationView.txtFileLocation": "Dosya konumunu aç", "SSE.ApplicationView.txtFullScreen": "Tam Ekran", + "SSE.ApplicationView.txtPrint": "Yazdır", "SSE.ApplicationView.txtShare": "Paylaş" } \ No newline at end of file diff --git a/apps/spreadsheeteditor/embed/locale/zh.json b/apps/spreadsheeteditor/embed/locale/zh.json index 63b6ffc93..667a0a52b 100644 --- a/apps/spreadsheeteditor/embed/locale/zh.json +++ b/apps/spreadsheeteditor/embed/locale/zh.json @@ -25,6 +25,7 @@ "SSE.ApplicationController.waitText": "请稍候...", "SSE.ApplicationView.txtDownload": "下载", "SSE.ApplicationView.txtEmbed": "嵌入", + "SSE.ApplicationView.txtFileLocation": "打开文件所在位置", "SSE.ApplicationView.txtFullScreen": "全屏", "SSE.ApplicationView.txtPrint": "打印", "SSE.ApplicationView.txtShare": "共享" diff --git a/apps/spreadsheeteditor/main/locale/ca.json b/apps/spreadsheeteditor/main/locale/ca.json index eff3f75ba..64b3c6805 100644 --- a/apps/spreadsheeteditor/main/locale/ca.json +++ b/apps/spreadsheeteditor/main/locale/ca.json @@ -3,20 +3,106 @@ "Common.Controllers.Chat.notcriticalErrorTitle": "Avis", "Common.Controllers.Chat.textEnterMessage": "Introduïu el vostre missatge aquí", "Common.define.chartData.textArea": "Àrea", + "Common.define.chartData.textAreaStacked": "Àrea apilada", + "Common.define.chartData.textAreaStackedPer": "Àrea apilada al 100%", "Common.define.chartData.textBar": "Barra", + "Common.define.chartData.textBarNormal": "Columna agrupada", + "Common.define.chartData.textBarNormal3d": "Columna 3D agrupada", + "Common.define.chartData.textBarNormal3dPerspective": "Columna 3D", + "Common.define.chartData.textBarStacked": "Columna apilada", + "Common.define.chartData.textBarStacked3d": "Columna 3D apilada", + "Common.define.chartData.textBarStackedPer": "Columna apilada al 100%", + "Common.define.chartData.textBarStackedPer3d": "columna 3D apilada al 100%", "Common.define.chartData.textCharts": "Gràfics", "Common.define.chartData.textColumn": "Columna", "Common.define.chartData.textColumnSpark": "Columna", + "Common.define.chartData.textCombo": "Combo", + "Common.define.chartData.textComboAreaBar": "Àrea apilada - columna agrupada", + "Common.define.chartData.textComboBarLine": "Columna-línia agrupada", + "Common.define.chartData.textComboBarLineSecondary": " Columna-línia agrupada a l'eix secundari", + "Common.define.chartData.textComboCustom": "Combinació personalitzada", + "Common.define.chartData.textDoughnut": "Donut", + "Common.define.chartData.textHBarNormal": "Barra agrupada", + "Common.define.chartData.textHBarNormal3d": "Barra 3D agrupada", + "Common.define.chartData.textHBarStacked": "Barra apilada", + "Common.define.chartData.textHBarStacked3d": "Barra 3D apilada", + "Common.define.chartData.textHBarStackedPer": "Barra apilada al 100%", + "Common.define.chartData.textHBarStackedPer3d": "Barra 3D apilada al 100%", "Common.define.chartData.textLine": "Línia", + "Common.define.chartData.textLine3d": "Línia 3D", + "Common.define.chartData.textLineMarker": "Línia amb marcadors", "Common.define.chartData.textLineSpark": "Línia", + "Common.define.chartData.textLineStacked": "Línia apilada", + "Common.define.chartData.textLineStackedMarker": "Línia apilada amb marcadors", + "Common.define.chartData.textLineStackedPer": "Línia apilada al 100%", + "Common.define.chartData.textLineStackedPerMarker": "Línia apilada al 100% amb marcadors", "Common.define.chartData.textPie": "Gràfic circular", + "Common.define.chartData.textPie3d": "Pastís 3D", "Common.define.chartData.textPoint": "XY (Dispersió)", + "Common.define.chartData.textScatter": "Dispersió", + "Common.define.chartData.textScatterLine": "Dispersió amb línies rectes", + "Common.define.chartData.textScatterLineMarker": "Dispersió amb línies rectes i marcadors", + "Common.define.chartData.textScatterSmooth": "Dispersió amb línies suaus", + "Common.define.chartData.textScatterSmoothMarker": "Dispersió amb línies suaus i marcadors", "Common.define.chartData.textSparks": "Sparklines", "Common.define.chartData.textStock": "Existències", "Common.define.chartData.textSurface": "Superfície", "Common.define.chartData.textWinLossSpark": "Guanyar/Pèrdua", + "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.noFormatText": "No s'ha definit cap format", + "Common.define.conditionalData.text1Above": "1 per sobre de des. est.", + "Common.define.conditionalData.text1Below": "1 per sota de des. est.", + "Common.define.conditionalData.text2Above": "2 per sobre de des. est.", + "Common.define.conditionalData.text2Below": "2 per sota de des. est.", + "Common.define.conditionalData.text3Above": "3 per sobre de des. est.", + "Common.define.conditionalData.text3Below": "3 per sota de des. est.", + "Common.define.conditionalData.textAbove": "Damunt", + "Common.define.conditionalData.textAverage": "Mitjana", + "Common.define.conditionalData.textBegins": "Comença amb", + "Common.define.conditionalData.textBelow": "Sota", + "Common.define.conditionalData.textBetween": "entre", + "Common.define.conditionalData.textBlank": "En blanc", + "Common.define.conditionalData.textBlanks": "Conté espais en blanc", + "Common.define.conditionalData.textBottom": "Inferior", + "Common.define.conditionalData.textContains": "Conté", + "Common.define.conditionalData.textDataBar": "Barra de dades", + "Common.define.conditionalData.textDate": "Data", + "Common.define.conditionalData.textDuplicate": "Duplicar", + "Common.define.conditionalData.textEnds": "Acaba amb", + "Common.define.conditionalData.textEqAbove": "Igual o superior a", + "Common.define.conditionalData.textEqBelow": "Igual o inferior a", + "Common.define.conditionalData.textEqual": "Igual a", + "Common.define.conditionalData.textError": "Error", + "Common.define.conditionalData.textErrors": "Conté errors", + "Common.define.conditionalData.textFormula": "Fórmula", + "Common.define.conditionalData.textGreater": "Més gran que", + "Common.define.conditionalData.textGreaterEq": "Major o Igual a", + "Common.define.conditionalData.textIconSets": "Conjunts d'icones", + "Common.define.conditionalData.textLast7days": "En els darrers 7 dies", + "Common.define.conditionalData.textLastMonth": "El mes passat", + "Common.define.conditionalData.textLastWeek": "La setmana passada", + "Common.define.conditionalData.textLess": "Menor que", + "Common.define.conditionalData.textLessEq": "Menor o igual a", + "Common.define.conditionalData.textNextMonth": "Mes següent", + "Common.define.conditionalData.textNextWeek": "Setmana següent", + "Common.define.conditionalData.textNotBetween": "No entre", + "Common.define.conditionalData.textNotBlanks": "No conté espais en blanc", + "Common.define.conditionalData.textNotContains": "No conté", + "Common.define.conditionalData.textNotEqual": "No igual a", + "Common.define.conditionalData.textNotErrors": "No conté errors", + "Common.define.conditionalData.textText": "Text", + "Common.define.conditionalData.textThisMonth": "Aquest mes", + "Common.define.conditionalData.textThisWeek": "Aquesta setmana", + "Common.define.conditionalData.textToday": "Avui", + "Common.define.conditionalData.textTomorrow": "Demà", + "Common.define.conditionalData.textTop": "Superior", + "Common.define.conditionalData.textUnique": "Únic", + "Common.define.conditionalData.textValue": "El valor és", + "Common.define.conditionalData.textYesterday": "Ahir", "Common.Translation.warnFileLocked": "El document s'està editant en una altra aplicació. Podeu continuar editant i guardar-lo com a còpia.", "Common.UI.ColorButton.textNewColor": "Afegir un Nou Color Personalitzat", + "Common.Translation.warnFileLockedBtnEdit": "Crea una còpia", + "Common.Translation.warnFileLockedBtnView": "Obrir per veure", "Common.UI.ComboBorderSize.txtNoBorders": "Sense vores", "Common.UI.ComboBorderSizeEditable.txtNoBorders": "Sense vores", "Common.UI.ComboDataView.emptyComboText": "Sense Estils", @@ -40,6 +126,9 @@ "Common.UI.SynchronizeTip.textSynchronize": "Un altre usuari ha canviat el document.
    Feu clic per desar els canvis i tornar a carregar les actualitzacions.", "Common.UI.ThemeColorPalette.textStandartColors": "Colors Estàndards", "Common.UI.ThemeColorPalette.textThemeColors": "Colors Tema", + "Common.UI.Themes.txtThemeClassicLight": "Llum clàssica", + "Common.UI.Themes.txtThemeDark": "Fosc", + "Common.UI.Themes.txtThemeLight": "Clar", "Common.UI.Window.cancelButtonText": "Cancel·lar", "Common.UI.Window.closeButtonText": "Tancar", "Common.UI.Window.noButtonText": "No", @@ -61,9 +150,11 @@ "Common.Views.About.txtVersion": "Versió", "Common.Views.AutoCorrectDialog.textAdd": "Afegir", "Common.Views.AutoCorrectDialog.textApplyAsWork": "Aplicar mentre treballeu", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "Correcció Automàtica", "Common.Views.AutoCorrectDialog.textAutoFormat": "Format automàtic a mesura que escriviu", "Common.Views.AutoCorrectDialog.textBy": "Per", "Common.Views.AutoCorrectDialog.textDelete": "Esborrar", + "Common.Views.AutoCorrectDialog.textHyperlink": "Dreceres d'internet i de xarxa amb enllaços", "Common.Views.AutoCorrectDialog.textMathCorrect": "Correcció Automàtica Matemàtica", "Common.Views.AutoCorrectDialog.textNewRowCol": "Incloure files i columnes noves a la taula", "Common.Views.AutoCorrectDialog.textRecognized": "Funcions Reconegudes", @@ -83,7 +174,7 @@ "Common.Views.Comments.textAdd": "Afegir", "Common.Views.Comments.textAddComment": "Afegir Comentari", "Common.Views.Comments.textAddCommentToDoc": "Afegir Comentari al Document", - "Common.Views.Comments.textAddReply": "Afegir una Resposta", + "Common.Views.Comments.textAddReply": "Afegir Resposta", "Common.Views.Comments.textAnonym": "Convidat", "Common.Views.Comments.textCancel": "Cancel·lar", "Common.Views.Comments.textClose": "Tancar", @@ -106,11 +197,13 @@ "Common.Views.EditNameDialog.textLabel": "Etiqueta:", "Common.Views.EditNameDialog.textLabelError": "La etiqueta no pot estar buida.", "Common.Views.Header.labelCoUsersDescr": "Usuaris que editen el fitxer:", - "Common.Views.Header.textAdvSettings": "Configuració Avançada", + "Common.Views.Header.textAddFavorite": "Marcar com a favorit", + "Common.Views.Header.textAdvSettings": "Configuració avançada", "Common.Views.Header.textBack": "Obrir ubicació del arxiu", "Common.Views.Header.textCompactView": "Amagar la Barra d'Eines", "Common.Views.Header.textHideLines": "Amagar Regles", "Common.Views.Header.textHideStatusBar": "Amagar la Barra d'Estat", + "Common.Views.Header.textRemoveFavorite": "Elimina dels Favorits", "Common.Views.Header.textSaveBegin": "Desant...", "Common.Views.Header.textSaveChanged": "Modificat", "Common.Views.Header.textSaveEnd": "Tots els canvis guardats", @@ -145,10 +238,14 @@ "Common.Views.ListSettingsDialog.txtTitle": "Configuració de la Llista", "Common.Views.ListSettingsDialog.txtType": "Tipus", "Common.Views.OpenDialog.closeButtonText": "Tancar Arxiu", + "Common.Views.OpenDialog.textInvalidRange": "Interval de cel·les no vàlid", + "Common.Views.OpenDialog.textSelectData": "Seleccionar dades", "Common.Views.OpenDialog.txtAdvanced": "Avançat", "Common.Views.OpenDialog.txtColon": "Dos punts", "Common.Views.OpenDialog.txtComma": "Financier", "Common.Views.OpenDialog.txtDelimiter": "Delimitador", + "Common.Views.OpenDialog.txtDestData": "Trieu on posar les dades", + "Common.Views.OpenDialog.txtEmpty": "Aquest camp és obligatori", "Common.Views.OpenDialog.txtEncoding": "Codificació", "Common.Views.OpenDialog.txtIncorrectPwd": "La contrasenya es incorrecta.", "Common.Views.OpenDialog.txtOpenFile": "Introduïu una contrasenya per obrir el fitxer", @@ -195,6 +292,8 @@ "Common.Views.ReviewChanges.tipCoAuthMode": "Configura el mode de coedició", "Common.Views.ReviewChanges.tipCommentRem": "Esborrar comentaris", "Common.Views.ReviewChanges.tipCommentRemCurrent": "Esborrar comentaris actuals", + "Common.Views.ReviewChanges.tipCommentResolve": "Resoldre comentaris", + "Common.Views.ReviewChanges.tipCommentResolveCurrent": "Resoldre comentaris actuals", "Common.Views.ReviewChanges.tipHistory": "Mostra l'historial de versions", "Common.Views.ReviewChanges.tipRejectCurrent": "Rebutjar canvi actual", "Common.Views.ReviewChanges.tipReview": "Control de Canvis", @@ -214,6 +313,11 @@ "Common.Views.ReviewChanges.txtCommentRemMy": "Esborrar els Meus Comentaris", "Common.Views.ReviewChanges.txtCommentRemMyCurrent": "Esborrar els meus actuals comentaris", "Common.Views.ReviewChanges.txtCommentRemove": "Esborrar", + "Common.Views.ReviewChanges.txtCommentResolve": "Resoldre", + "Common.Views.ReviewChanges.txtCommentResolveAll": "Resoldre tots els comentaris", + "Common.Views.ReviewChanges.txtCommentResolveCurrent": "Resoldre comentaris actuals", + "Common.Views.ReviewChanges.txtCommentResolveMy": "Resoldre els Meus Comentaris", + "Common.Views.ReviewChanges.txtCommentResolveMyCurrent": "Resoldre els Meus Comentaris Actuals", "Common.Views.ReviewChanges.txtDocLang": "Idioma", "Common.Views.ReviewChanges.txtFinal": "Tots el canvis acceptats (Previsualitzar)", "Common.Views.ReviewChanges.txtFinalCap": "Final", @@ -233,7 +337,7 @@ "Common.Views.ReviewChanges.txtTurnon": "Control de Canvis", "Common.Views.ReviewChanges.txtView": "Mode de Visualització", "Common.Views.ReviewPopover.textAdd": "Afegir", - "Common.Views.ReviewPopover.textAddReply": "Afegir una Resposta", + "Common.Views.ReviewPopover.textAddReply": "Afegir Resposta", "Common.Views.ReviewPopover.textCancel": "Cancel·lar", "Common.Views.ReviewPopover.textClose": "Tancar", "Common.Views.ReviewPopover.textEdit": "Acceptar", @@ -251,6 +355,7 @@ "Common.Views.SignDialog.textChange": "Canviar", "Common.Views.SignDialog.textInputName": "Posar nom de qui ho firma", "Common.Views.SignDialog.textItalic": "Itàlica", + "Common.Views.SignDialog.textNameError": "El nom del signant no pot estar buit.", "Common.Views.SignDialog.textPurpose": "Finalitat de signar aquest document", "Common.Views.SignDialog.textSelect": "Seleccionar", "Common.Views.SignDialog.textSelectImage": "Seleccionar Imatge", @@ -283,7 +388,7 @@ "Common.Views.SymbolTableDialog.textNBHyphen": "Guionet no trencador", "Common.Views.SymbolTableDialog.textNBSpace": "Espai sense pauses", "Common.Views.SymbolTableDialog.textPilcrow": "Cartell Indicatiu", - "Common.Views.SymbolTableDialog.textQEmSpace": "1/4 Em Espai", + "Common.Views.SymbolTableDialog.textQEmSpace": "1/4 Espai llarg", "Common.Views.SymbolTableDialog.textRange": "Rang", "Common.Views.SymbolTableDialog.textRecent": "Símbols utilitzats recentment", "Common.Views.SymbolTableDialog.textRegistered": "Registre Registrat", @@ -296,10 +401,20 @@ "Common.Views.SymbolTableDialog.textSymbols": "Símbols", "Common.Views.SymbolTableDialog.textTitle": "Símbol", "Common.Views.SymbolTableDialog.textTradeMark": "Símbol de Marca Comercial", + "Common.Views.UserNameDialog.textDontShow": "No em tornis a preguntar", + "Common.Views.UserNameDialog.textLabel": "Etiqueta:", + "Common.Views.UserNameDialog.textLabelError": "L'etiqueta no pot estar en blanc.", + "SSE.Controllers.DataTab.textColumns": "Columnes", + "SSE.Controllers.DataTab.textEmptyUrl": "Heu d'especificar l'URL.", + "SSE.Controllers.DataTab.textRows": "Files", "SSE.Controllers.DataTab.textWizard": "Text en Columnes", + "SSE.Controllers.DataTab.txtDataValidation": "Validació de dades", "SSE.Controllers.DataTab.txtExpand": "Ampliar", "SSE.Controllers.DataTab.txtExpandRemDuplicates": "Les dades al costat de la selecció no se suprimiran. Voleu ampliar la selecció per incloure les dades adjacents o continuar només amb les cel·les actualment seleccionades?", + "SSE.Controllers.DataTab.txtExtendDataValidation": "La selecció conté algunes cel·les sense la configuració de validació de dades.
    Vols ampliar la validació de dades a aquestes cel·les?", + "SSE.Controllers.DataTab.txtImportWizard": "Assistent per Importar Text", "SSE.Controllers.DataTab.txtRemDuplicates": "Eliminar els Duplicats", + "SSE.Controllers.DataTab.txtRemoveDataValidation": "La selecció conté més d'un tipus de validació.
    Esborrar la configuració actual i continua?", "SSE.Controllers.DataTab.txtRemSelected": "Eliminar les opcions seleccionades", "SSE.Controllers.DocumentHolder.alignmentText": "Alineació", "SSE.Controllers.DocumentHolder.centerText": "Centre", @@ -316,12 +431,14 @@ "SSE.Controllers.DocumentHolder.leftText": "Esquerra", "SSE.Controllers.DocumentHolder.notcriticalErrorTitle": "Avis", "SSE.Controllers.DocumentHolder.rightText": "Dreta", + "SSE.Controllers.DocumentHolder.textAutoCorrectSettings": "Opcions de correcció automàtica", "SSE.Controllers.DocumentHolder.textChangeColumnWidth": "Amplada de la columna {0} símbols ({1} píxels)", "SSE.Controllers.DocumentHolder.textChangeRowHeight": "Alçada de fila {0} punts ({1} píxels)", "SSE.Controllers.DocumentHolder.textCtrlClick": "Feu clic a l'enllaç per obrir-lo o feu clic i manteniu premut el botó del ratolí per seleccionar la cel·la.", "SSE.Controllers.DocumentHolder.textInsertLeft": "Inserir a l'esquerra", "SSE.Controllers.DocumentHolder.textInsertTop": "Inserir A dalt", "SSE.Controllers.DocumentHolder.textPasteSpecial": "Pegar especial", + "SSE.Controllers.DocumentHolder.textStopExpand": "Aturar l'expansió automàtica de les taules", "SSE.Controllers.DocumentHolder.textSym": "sym", "SSE.Controllers.DocumentHolder.tipIsLocked": "Un altre usuari està editant aquest element.", "SSE.Controllers.DocumentHolder.txtAboveAve": "Per sobre de la mitja", @@ -339,7 +456,7 @@ "SSE.Controllers.DocumentHolder.txtAnd": "i", "SSE.Controllers.DocumentHolder.txtBegins": "Comença amb", "SSE.Controllers.DocumentHolder.txtBelowAve": "Per sota de la mitja", - "SSE.Controllers.DocumentHolder.txtBlanks": "(Buits)", + "SSE.Controllers.DocumentHolder.txtBlanks": "(En blanc)", "SSE.Controllers.DocumentHolder.txtBorderProps": "Propietats Vora", "SSE.Controllers.DocumentHolder.txtBottom": "Inferior", "SSE.Controllers.DocumentHolder.txtColumn": "Columna", @@ -456,7 +573,7 @@ "SSE.Controllers.FormulaDialog.sCategoryEngineering": "Enginyeria", "SSE.Controllers.FormulaDialog.sCategoryFinancial": "Financer", "SSE.Controllers.FormulaDialog.sCategoryInformation": "Informació", - "SSE.Controllers.FormulaDialog.sCategoryLast10": "10 per última vegada utilitzats", + "SSE.Controllers.FormulaDialog.sCategoryLast10": "10 darrers utilitzats", "SSE.Controllers.FormulaDialog.sCategoryLogical": "Lògic", "SSE.Controllers.FormulaDialog.sCategoryLookupAndReference": "Busca i Referència", "SSE.Controllers.FormulaDialog.sCategoryMathematic": "Matemàtiques i trigonometria", @@ -497,6 +614,7 @@ "SSE.Controllers.Main.errorBadImageUrl": "Enllaç de la Imatge Incorrecte", "SSE.Controllers.Main.errorCannotUngroup": "No es pot desagrupar. Per iniciar un esquema, seleccioneu les files o columnes de detall i agrupeu-les.", "SSE.Controllers.Main.errorChangeArray": "No podeu canviar part d'una matriu.", + "SSE.Controllers.Main.errorChangeFilteredRange": "Això canviarà un interval filtrat al vostre full de càlcul.
    Per completar aquesta tasca, si us plau, elimineu els Filtres Automàtics.", "SSE.Controllers.Main.errorCoAuthoringDisconnect": "S'ha perdut la connexió amb el servidor. El document no es pot editar ara mateix.", "SSE.Controllers.Main.errorConnectToServer": "El document no s'ha pogut desar. Comproveu la configuració de la connexió o poseu-vos en contacte amb l'administrador.
    Quan feu clic al botó \"D'acord\", se us demanarà que descarregueu el document.", "SSE.Controllers.Main.errorCopyMultiselectArea": "Aquesta ordre no es pot utilitzar amb diverses seleccions.
    Seleccioneu un únic rang i proveu-ho de nou.", @@ -541,14 +659,18 @@ "SSE.Controllers.Main.errorOpenWarning": "La longitud d'una de les fórmules del fitxer ha excedit el límit de 8192 caràcters permès.
    La formula s'ha esborrat.", "SSE.Controllers.Main.errorOperandExpected": "La sintaxi de la funció introduïda no és correcta. Comproveu si us falta un dels parèntesis - '(' o ')'.", "SSE.Controllers.Main.errorPasteMaxRange": "L’àrea de còpia i enganxa no coincideix.
    Seleccioneu una àrea amb la mateixa mida o feu clic a la primera cel·la d’una fila per enganxar les cel·les copiades.", + "SSE.Controllers.Main.errorPasteMultiSelect": "Aquesta acció no es pot fer en una selecció de rang múltiple.
    Selecciona un interval únic i torna-ho a provar.", "SSE.Controllers.Main.errorPasteSlicerError": "Les segmentacions de taules no es poden copiar d’un llibre a un altre.", + "SSE.Controllers.Main.errorPivotGroup": "No es pot agrupar aquesta selecció.", "SSE.Controllers.Main.errorPivotOverlap": "Un informe de la taula de pivot no pot sobreposar-se a una taula.", + "SSE.Controllers.Main.errorPivotWithoutUnderlying": "L'informe Taula dinàmica s'ha desat sense les dades subjacents.
    Utilitzeu el botó «Refresca» per actualitzar l'informe.", "SSE.Controllers.Main.errorPrintMaxPagesCount": "Malauradament, no és possible imprimir més de 1500 pàgines a la vegada en la versió actual del programa.
    Aquesta restricció serà eliminada en les properes versions.", "SSE.Controllers.Main.errorProcessSaveResult": "Desament Fallit", "SSE.Controllers.Main.errorServerVersion": "S'ha actualitzat la versió de l'editor. Es tornarà a carregar la pàgina per aplicar els canvis.", "SSE.Controllers.Main.errorSessionAbsolute": "La sessió d’edició del document ha caducat. Torneu a carregar la pàgina.", "SSE.Controllers.Main.errorSessionIdle": "El document no s’ha editat des de fa temps. Torneu a carregar la pàgina.", "SSE.Controllers.Main.errorSessionToken": "S'ha interromput la connexió amb el servidor. Torneu a carregar la pàgina.", + "SSE.Controllers.Main.errorSetPassword": "No s'ha pogut establir la contrasenya.", "SSE.Controllers.Main.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", "SSE.Controllers.Main.errorToken": "El testimoni de seguretat del document no està format correctament.
    Contacteu l'administrador del servidor de documents.", "SSE.Controllers.Main.errorTokenExpire": "El testimoni de seguretat del document ha caducat.
    Contacteu amb l'administrador del Document Server.", @@ -562,6 +684,7 @@ "SSE.Controllers.Main.errorWrongOperator": "Error en la fórmula introduïda. S'utilitza un operador incorrecte.
    Corregiu l'error.", "SSE.Controllers.Main.errRemDuplicates": "Duplica els valors trobats i suprimits: {0}, resten valors únics: {1}.", "SSE.Controllers.Main.leavePageText": "Heu fet canvis no guardats en aquest full de càlcul. Feu clic a \"Continua en aquesta pàgina\" i \"Desa\" per desar-les. Feu clic a \"Deixa aquesta pàgina\" per descartar tots els canvis no desats.", + "SSE.Controllers.Main.leavePageTextOnClose": "Es perdran tots els canvis no desats en aquest full de càlcul.
    Feu clic a «Cancel·la» i després a «Desa» per desar-los. Feu clic a \"D'acord\" per descartar tots els canvis no desats.", "SSE.Controllers.Main.loadFontsTextText": "Carregant dades...", "SSE.Controllers.Main.loadFontsTitleText": "Carregant Dades", "SSE.Controllers.Main.loadFontTextText": "Carregant dades...", @@ -582,6 +705,7 @@ "SSE.Controllers.Main.requestEditFailedMessageText": "Algú està editant aquest document ara mateix. Si us plau, intenta-ho més tard.", "SSE.Controllers.Main.requestEditFailedTitleText": "Accés denegat", "SSE.Controllers.Main.saveErrorText": "S'ha produït un error en desar el fitxer.", + "SSE.Controllers.Main.saveErrorTextDesktop": "Aquest fitxer no es pot desar o crear.
    Les raons possibles són:
    1. El fitxer és de només lectura.
    2. El fitxer està sent editat per altres usuaris.
    3. El disc està ple o corromput.", "SSE.Controllers.Main.savePreparingText": "Preparant per guardar", "SSE.Controllers.Main.savePreparingTitle": "Preparant per guardar. Si us plau, esperi", "SSE.Controllers.Main.saveTextText": "Desant el full de càlcul...", @@ -594,17 +718,22 @@ "SSE.Controllers.Main.textConfirm": "Confirmació", "SSE.Controllers.Main.textContactUs": "Contacte de Vendes", "SSE.Controllers.Main.textCustomLoader": "Tingueu en compte que, segons els termes de la llicència, no teniu dret a canviar el carregador.
    Consulteu el nostre departament de vendes per obtenir un pressupost.", + "SSE.Controllers.Main.textGuest": "Convidat", "SSE.Controllers.Main.textHasMacros": "El fitxer conté macros automàtiques.
    Voleu executar macros?", "SSE.Controllers.Main.textLoadingDocument": "Carregant full de càlcul", + "SSE.Controllers.Main.textLongName": "Introduïu un nom de menys de 128 caràcters.", "SSE.Controllers.Main.textNo": "No", "SSE.Controllers.Main.textNoLicenseTitle": "Heu arribat al límit de la licència", "SSE.Controllers.Main.textPaidFeature": "Funció de Pagament", "SSE.Controllers.Main.textPleaseWait": "L’operació pot trigar més temps del previst. Espereu...", "SSE.Controllers.Main.textRecalcFormulas": "Calculant formules...", - "SSE.Controllers.Main.textRemember": "Recorda la meva elecció", + "SSE.Controllers.Main.textRemember": "Recordar la meva elecció per a tots els fitxers", + "SSE.Controllers.Main.textRenameError": "El nom d'usuari no pot estar buit.", + "SSE.Controllers.Main.textRenameLabel": "Introduïu un nom per a la col·laboració", "SSE.Controllers.Main.textShape": "Forma", "SSE.Controllers.Main.textStrict": "Mode estricte", "SSE.Controllers.Main.textTryUndoRedo": "Les funcions Desfés / Rehabiliteu estan desactivades per al mode de coedició ràpida. Feu clic al botó \"Mode estricte\" per canviar al mode de coedició estricte per editar el fitxer sense que hi hagi interferències d'altres usuaris i enviar els canvis només després de desar-lo ells. Podeu canviar entre els modes de coedició mitjançant l'editor Paràmetres avançats.", + "SSE.Controllers.Main.textTryUndoRedoWarn": "Les funcions Desfer/Refer estan desactivades per al mode de coedició ràpida.", "SSE.Controllers.Main.textYes": "Sí", "SSE.Controllers.Main.titleLicenseExp": "Llicència Caducada", "SSE.Controllers.Main.titleRecalcFormulas": "Calculant...", @@ -623,22 +752,31 @@ "SSE.Controllers.Main.txtColumn": "Columna", "SSE.Controllers.Main.txtConfidential": "Confidencial", "SSE.Controllers.Main.txtDate": "Data", + "SSE.Controllers.Main.txtDays": "Dies", "SSE.Controllers.Main.txtDiagramTitle": "Títol del Gràfic", "SSE.Controllers.Main.txtEditingMode": "Establir el mode d'edició ...", "SSE.Controllers.Main.txtFiguredArrows": "Fletxes Figurades", "SSE.Controllers.Main.txtFile": "Fitxer", "SSE.Controllers.Main.txtGrandTotal": "Total General", + "SSE.Controllers.Main.txtGroup": "Grup", + "SSE.Controllers.Main.txtHours": "hores", "SSE.Controllers.Main.txtLines": "Línies", "SSE.Controllers.Main.txtMath": "Matemàtiques", + "SSE.Controllers.Main.txtMinutes": "Minuts", + "SSE.Controllers.Main.txtMonths": "Mesos", "SSE.Controllers.Main.txtMultiSelect": "Selecció Múltiple (Alt+S)", + "SSE.Controllers.Main.txtOr": "%1 o %2", "SSE.Controllers.Main.txtPage": "Pàgina", "SSE.Controllers.Main.txtPageOf": "Pàgina %1 de %2", "SSE.Controllers.Main.txtPages": "Pàgines", "SSE.Controllers.Main.txtPreparedBy": "Preparat per", "SSE.Controllers.Main.txtPrintArea": "Àrea d'Impressió", + "SSE.Controllers.Main.txtQuarter": "Qtr", + "SSE.Controllers.Main.txtQuarters": "Trimestres", "SSE.Controllers.Main.txtRectangles": "Rectangles", "SSE.Controllers.Main.txtRow": "Fila", "SSE.Controllers.Main.txtRowLbls": "Etiquetes de Fila", + "SSE.Controllers.Main.txtSeconds": "Segons", "SSE.Controllers.Main.txtSeries": "Serie", "SSE.Controllers.Main.txtShape_accentBorderCallout1": "Trucada amb Línia 1 (Vora i Barra d'Èmfasis)", "SSE.Controllers.Main.txtShape_accentBorderCallout2": "Trucada amb Línia 2 (Vora i Barra d'Èmfasis)", @@ -786,16 +924,16 @@ "SSE.Controllers.Main.txtShape_snip2SameRect": "Retallar Rectangle de la cantonada del mateix costat", "SSE.Controllers.Main.txtShape_snipRoundRect": "Retallar i Rondejar rectangle de cantonada senzilla", "SSE.Controllers.Main.txtShape_spline": "Corba", - "SSE.Controllers.Main.txtShape_star10": "10-Punt Principal", - "SSE.Controllers.Main.txtShape_star12": "12-Punt Principal", - "SSE.Controllers.Main.txtShape_star16": "16-Punt Principal", - "SSE.Controllers.Main.txtShape_star24": "24-Punt Principal", - "SSE.Controllers.Main.txtShape_star32": "32-Punt Principal", - "SSE.Controllers.Main.txtShape_star4": "4-Punt Principal", - "SSE.Controllers.Main.txtShape_star5": "5-Punt Principal", - "SSE.Controllers.Main.txtShape_star6": "6-Punt Principal", - "SSE.Controllers.Main.txtShape_star7": "7-Punt Principal", - "SSE.Controllers.Main.txtShape_star8": "8-Punt Principal", + "SSE.Controllers.Main.txtShape_star10": "Estrella de 10 puntes", + "SSE.Controllers.Main.txtShape_star12": "Estrella de 12 puntes", + "SSE.Controllers.Main.txtShape_star16": "Estrella de 16 puntes", + "SSE.Controllers.Main.txtShape_star24": "Estrella de 24 puntes", + "SSE.Controllers.Main.txtShape_star32": "Estrella de 32 puntes", + "SSE.Controllers.Main.txtShape_star4": "Estrella de 4 puntes", + "SSE.Controllers.Main.txtShape_star5": "Estrella de 5 puntes", + "SSE.Controllers.Main.txtShape_star6": "Estrella de 6 puntes", + "SSE.Controllers.Main.txtShape_star7": "Estrella de 7 puntes", + "SSE.Controllers.Main.txtShape_star8": "Estrella de 8 puntes", "SSE.Controllers.Main.txtShape_stripedRightArrow": "Fletxa a la dreta amb bandes", "SSE.Controllers.Main.txtShape_sun": "Sol", "SSE.Controllers.Main.txtShape_teardrop": "Llàgrima", @@ -839,6 +977,7 @@ "SSE.Controllers.Main.txtValues": "Valors", "SSE.Controllers.Main.txtXAxis": "Eix X", "SSE.Controllers.Main.txtYAxis": "Eix Y", + "SSE.Controllers.Main.txtYears": "Anys", "SSE.Controllers.Main.unknownErrorText": "Error Desconegut.", "SSE.Controllers.Main.unsupportedBrowserErrorText": "El vostre navegador no és compatible.", "SSE.Controllers.Main.uploadImageExtMessage": "Format imatge desconegut.", @@ -851,6 +990,8 @@ "SSE.Controllers.Main.warnBrowserZoom": "La configuració del zoom actual del navegador no és totalment compatible. Restabliu el zoom per defecte prement Ctrl+0.", "SSE.Controllers.Main.warnLicenseExceeded": "S'ha superat el nombre de connexions simultànies al servidor de documents i el document s'obrirà només per a la seva visualització.
    Contacteu l'administrador per obtenir més informació.", "SSE.Controllers.Main.warnLicenseExp": "La seva llicencia ha caducat.
    Si us plau, actualitzi la llicencia i recarregui la pàgina.", + "SSE.Controllers.Main.warnLicenseLimitedNoAccess": "La llicència ha caducat.
    No teniu accés a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador.", + "SSE.Controllers.Main.warnLicenseLimitedRenewed": "Cal renovar la llicència.
    Teniu un accés limitat a la funcionalitat d'edició de documents.
    Contacteu amb l'administrador per obtenir accés complet", "SSE.Controllers.Main.warnLicenseUsersExceeded": "S'ha superat el nombre d'usuaris concurrents i el document s'obrirà només per a la seva visualització.
    Per més informació, poseu-vos en contacte amb l'administrador.", "SSE.Controllers.Main.warnNoLicense": "Heu arribat al límit de connexions simultànies per als editors %1. Aquest document s'obrirà al mode de només lectura. Contacteu l'equip de vendes %1 per a les condicions personals de millora del servei.", "SSE.Controllers.Main.warnNoLicenseUsers": "Heu arribat al límit d'usuaris concurrents per a editors %1.
    Contactau l'equip de vendes per als termes de millora personal dels vostres serveis.", @@ -871,16 +1012,20 @@ "SSE.Controllers.Statusbar.errorRemoveSheet": "No es pot suprimir el full de treball.", "SSE.Controllers.Statusbar.strSheet": "Full", "SSE.Controllers.Statusbar.textSheetViewTip": "Esteu en mode de visualització de fulls. Els filtres i l'ordenació només són visibles per a vosaltres i per a aquells que encara estan en aquesta visualització.", + "SSE.Controllers.Statusbar.textSheetViewTipFilters": "Esteu en mode de vista del full. Els filtres només són visibles per a vós i per a aquells que encara estan en aquesta vista.", "SSE.Controllers.Statusbar.warnDeleteSheet": "Els fulls de treball seleccionats poden contenir dades. Esteu segur que voleu continuar?", "SSE.Controllers.Statusbar.zoomText": "Zoom {0}%", "SSE.Controllers.Toolbar.confirmAddFontName": "El tipus de lletra que guardareu no està disponible al dispositiu actual.
    L'estil de text es mostrarà amb un dels tipus de lletra del sistema, el tipus de lletra desat s'utilitzarà quan estigui disponible.
    Voleu continuar ?", + "SSE.Controllers.Toolbar.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", "SSE.Controllers.Toolbar.errorMaxRows": "ERROR! El nombre màxim de sèries de dades per gràfic és de 255", "SSE.Controllers.Toolbar.errorStockChart": "Ordre de fila incorrecte. Per crear un gràfic de valors, col·loqueu les dades del full en l’ordre següent:
    preu d’obertura, preu màxim, preu mínim, preu de tancament.", "SSE.Controllers.Toolbar.textAccent": "Accents", "SSE.Controllers.Toolbar.textBracket": "Claudàtor", + "SSE.Controllers.Toolbar.textDirectional": "Direccional", "SSE.Controllers.Toolbar.textFontSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor numèric entre 1 i 409", "SSE.Controllers.Toolbar.textFraction": "Fraccions", "SSE.Controllers.Toolbar.textFunction": "Funcions", + "SSE.Controllers.Toolbar.textIndicator": "Indicadors", "SSE.Controllers.Toolbar.textInsert": "Insertar", "SSE.Controllers.Toolbar.textIntegral": "Integrals", "SSE.Controllers.Toolbar.textLargeOperator": "Operadors Grans", @@ -890,7 +1035,9 @@ "SSE.Controllers.Toolbar.textOperator": "Operadors", "SSE.Controllers.Toolbar.textPivot": "Taula Clau", "SSE.Controllers.Toolbar.textRadical": "Radicals", + "SSE.Controllers.Toolbar.textRating": "Valoracions", "SSE.Controllers.Toolbar.textScript": "Índexs", + "SSE.Controllers.Toolbar.textShapes": "Formes", "SSE.Controllers.Toolbar.textSymbols": "Símbols", "SSE.Controllers.Toolbar.textWarning": "Avis", "SSE.Controllers.Toolbar.txtAccent_Accent": "Agut", @@ -906,7 +1053,7 @@ "SSE.Controllers.Toolbar.txtAccent_CurveBracketBot": "Clau Subjacent", "SSE.Controllers.Toolbar.txtAccent_CurveBracketTop": "Clau Superposada", "SSE.Controllers.Toolbar.txtAccent_Custom_1": "Vector A", - "SSE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra", + "SSE.Controllers.Toolbar.txtAccent_Custom_2": "ABC amb barra a sobre", "SSE.Controllers.Toolbar.txtAccent_Custom_3": "x XOR i amb barra sobreposada", "SSE.Controllers.Toolbar.txtAccent_DDDot": "Tres punts", "SSE.Controllers.Toolbar.txtAccent_DDot": "Doble punt", @@ -1071,28 +1218,28 @@ "SSE.Controllers.Toolbar.txtLimitLog_LogBase": "Logaritme", "SSE.Controllers.Toolbar.txtLimitLog_Max": "Màxim", "SSE.Controllers.Toolbar.txtLimitLog_Min": "Mínim", - "SSE.Controllers.Toolbar.txtMatrix_1_2": "1x2 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_1_3": "1x3 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_2_1": "2x1 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_2_2": "2x2 matriu buida", + "SSE.Controllers.Toolbar.txtMatrix_1_2": "Matriu buida 1x2", + "SSE.Controllers.Toolbar.txtMatrix_1_3": "Matriu buida 1x3", + "SSE.Controllers.Toolbar.txtMatrix_2_1": "Matriu buida 2x1", + "SSE.Controllers.Toolbar.txtMatrix_2_2": "Matriu buida 2x2", "SSE.Controllers.Toolbar.txtMatrix_2_2_DLineBracket": "Matriu buida amb claudàtors", "SSE.Controllers.Toolbar.txtMatrix_2_2_LineBracket": "Matriu buida amb claudàtors", "SSE.Controllers.Toolbar.txtMatrix_2_2_RoundBracket": "Matriu buida amb claudàtors", "SSE.Controllers.Toolbar.txtMatrix_2_2_SquareBracket": "Matriu buida amb claudàtors", - "SSE.Controllers.Toolbar.txtMatrix_2_3": "2x3 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_3_1": "3x1 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_3_2": "3x2 matriu buida", - "SSE.Controllers.Toolbar.txtMatrix_3_3": "3s3 matriu buida", + "SSE.Controllers.Toolbar.txtMatrix_2_3": "Matriu buida 2x3 ", + "SSE.Controllers.Toolbar.txtMatrix_3_1": "Matriu buida 3x1", + "SSE.Controllers.Toolbar.txtMatrix_3_2": "Matriu buida 3x2", + "SSE.Controllers.Toolbar.txtMatrix_3_3": "Matriu buida 3x3", "SSE.Controllers.Toolbar.txtMatrix_Dots_Baseline": "Punts Subíndexs", "SSE.Controllers.Toolbar.txtMatrix_Dots_Center": "Punts en línia mitja", "SSE.Controllers.Toolbar.txtMatrix_Dots_Diagonal": "Punts en diagonal", "SSE.Controllers.Toolbar.txtMatrix_Dots_Vertical": "Punts Verticals", "SSE.Controllers.Toolbar.txtMatrix_Flat_Round": "Matriu escassa", "SSE.Controllers.Toolbar.txtMatrix_Flat_Square": "Matriu escassa", - "SSE.Controllers.Toolbar.txtMatrix_Identity_2": "2x2 matriu d’identitat", - "SSE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "3x3 matriu d’identitat", - "SSE.Controllers.Toolbar.txtMatrix_Identity_3": "3x3 matriu d’identitat", - "SSE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "3x3 matriu d’identitat", + "SSE.Controllers.Toolbar.txtMatrix_Identity_2": "Matriu d’identitat 2x2", + "SSE.Controllers.Toolbar.txtMatrix_Identity_2_NoZeros": "Matriu d’identitat 3x3", + "SSE.Controllers.Toolbar.txtMatrix_Identity_3": "Matriu d’identitat 3x3", + "SSE.Controllers.Toolbar.txtMatrix_Identity_3_NoZeros": "Matriu d’identitat 3x3", "SSE.Controllers.Toolbar.txtOperator_ArrowD_Bot": "Fletxa dreta-esquerra inferior", "SSE.Controllers.Toolbar.txtOperator_ArrowD_Top": "Fletxa dreta-esquerra superior", "SSE.Controllers.Toolbar.txtOperator_ArrowL_Bot": "Fletxa inferior cap a esquerra", @@ -1232,7 +1379,7 @@ "SSE.Views.AdvancedSeparatorDialog.textTitle": "Configuració Avançada", "SSE.Views.AutoFilterDialog.btnCustomFilter": "Filtre Personalitzat", "SSE.Views.AutoFilterDialog.textAddSelection": "Afegiu la selecció actual al filtre", - "SSE.Views.AutoFilterDialog.textEmptyItem": "{Buits}", + "SSE.Views.AutoFilterDialog.textEmptyItem": "{En blanc}", "SSE.Views.AutoFilterDialog.textSelectAll": "Selecciona-ho tot ", "SSE.Views.AutoFilterDialog.textSelectAllResults": "Seleccionar Tots els Resultats de la Cerca", "SSE.Views.AutoFilterDialog.textWarning": "Avis", @@ -1284,15 +1431,23 @@ "SSE.Views.CellSettings.textBackground": "Color de Fons", "SSE.Views.CellSettings.textBorderColor": "Color", "SSE.Views.CellSettings.textBorders": "Estil de la Vora", + "SSE.Views.CellSettings.textClearRule": "Netejar les regles", "SSE.Views.CellSettings.textColor": "Omplir de Color", + "SSE.Views.CellSettings.textColorScales": "Escala de color", + "SSE.Views.CellSettings.textCondFormat": "Format condicional", "SSE.Views.CellSettings.textControl": "Control de Text", + "SSE.Views.CellSettings.textDataBars": "Barra de Dades", "SSE.Views.CellSettings.textDirection": "Direcció", "SSE.Views.CellSettings.textFill": "Omplir", "SSE.Views.CellSettings.textForeground": "Color de Primer Pla", "SSE.Views.CellSettings.textGradient": "Punts de Degradat", "SSE.Views.CellSettings.textGradientColor": "Color", "SSE.Views.CellSettings.textGradientFill": "Omplir Degradat", + "SSE.Views.CellSettings.textIndent": "Sagnat", + "SSE.Views.CellSettings.textItems": "Elements", "SSE.Views.CellSettings.textLinear": "Lineal", + "SSE.Views.CellSettings.textManageRule": "Gestionar Regles", + "SSE.Views.CellSettings.textNewRule": "Nova regla", "SSE.Views.CellSettings.textNoFill": "Sense Omplir", "SSE.Views.CellSettings.textOrientation": "Orientació del Text", "SSE.Views.CellSettings.textPattern": "Patró", @@ -1300,6 +1455,10 @@ "SSE.Views.CellSettings.textPosition": "Posició", "SSE.Views.CellSettings.textRadial": "Radial", "SSE.Views.CellSettings.textSelectBorders": "Seleccioneu les vores que vulgueu canviar aplicant l'estil escollit anteriorment", + "SSE.Views.CellSettings.textSelection": "Des de la selecció actual", + "SSE.Views.CellSettings.textThisPivot": "Des d'aquesta taula pivot", + "SSE.Views.CellSettings.textThisSheet": "Des d'aquest full de treball", + "SSE.Views.CellSettings.textThisTable": "Des d'aquesta taula", "SSE.Views.CellSettings.tipAddGradientPoint": "Afegir punt de degradat", "SSE.Views.CellSettings.tipAll": "Establir el límit exterior i totes les línies interiors", "SSE.Views.CellSettings.tipBottom": "Establir només la vora inferior exterior", @@ -1355,6 +1514,7 @@ "SSE.Views.ChartSettings.strTemplate": "Plantilla", "SSE.Views.ChartSettings.textAdvanced": "Mostra la configuració avançada", "SSE.Views.ChartSettings.textBorderSizeErr": "El valor introduït és incorrecte.
    Introduïu un valor entre 0 pt i 1584 pt.", + "SSE.Views.ChartSettings.textChangeType": "Canvia el tipus", "SSE.Views.ChartSettings.textChartType": "Canviar el tipus de gràfic", "SSE.Views.ChartSettings.textEditData": "Editar Dades i Ubicació", "SSE.Views.ChartSettings.textFirstPoint": "Primer Punt", @@ -1386,6 +1546,7 @@ "SSE.Views.ChartSettingsDlg.textAxisOptions": "Opcions de l’Eix", "SSE.Views.ChartSettingsDlg.textAxisPos": "Posició de l’Eix", "SSE.Views.ChartSettingsDlg.textAxisSettings": "Configuració de l’Eix", + "SSE.Views.ChartSettingsDlg.textAxisTitle": "Títol", "SSE.Views.ChartSettingsDlg.textBetweenTickMarks": "Entre Marques de Graduació", "SSE.Views.ChartSettingsDlg.textBillions": "Bilions", "SSE.Views.ChartSettingsDlg.textBottom": "Inferior", @@ -1403,12 +1564,15 @@ "SSE.Views.ChartSettingsDlg.textEmptyLine": "Connectar punts de dades amb línies", "SSE.Views.ChartSettingsDlg.textFit": "Ajusta a Amplada", "SSE.Views.ChartSettingsDlg.textFixed": "Fixat", + "SSE.Views.ChartSettingsDlg.textFormat": "Format de l'etiqueta", "SSE.Views.ChartSettingsDlg.textGaps": "Bretxa", "SSE.Views.ChartSettingsDlg.textGridLines": "Quadrícules", "SSE.Views.ChartSettingsDlg.textGroup": "Agrupar sparkline", "SSE.Views.ChartSettingsDlg.textHide": "Amagar", + "SSE.Views.ChartSettingsDlg.textHideAxis": "Amagar eix", "SSE.Views.ChartSettingsDlg.textHigh": "Alt", "SSE.Views.ChartSettingsDlg.textHorAxis": "Eix Horitzontal", + "SSE.Views.ChartSettingsDlg.textHorAxisSec": "Eix Horitzontal secundari", "SSE.Views.ChartSettingsDlg.textHorizontal": "Horitzontal", "SSE.Views.ChartSettingsDlg.textHundredMil": "100 000 000", "SSE.Views.ChartSettingsDlg.textHundreds": "Centenars", @@ -1486,10 +1650,18 @@ "SSE.Views.ChartSettingsDlg.textUnits": "Unitats de Visualització", "SSE.Views.ChartSettingsDlg.textValue": "Valor", "SSE.Views.ChartSettingsDlg.textVertAxis": "Eix Vertical", + "SSE.Views.ChartSettingsDlg.textVertAxisSec": "Eix Vertical Secundari", "SSE.Views.ChartSettingsDlg.textXAxisTitle": "Títol Eix X", "SSE.Views.ChartSettingsDlg.textYAxisTitle": "Títol Eix Y", "SSE.Views.ChartSettingsDlg.textZero": "Zero", "SSE.Views.ChartSettingsDlg.txtEmpty": "Aquest camp és obligatori", + "SSE.Views.ChartTypeDialog.errorComboSeries": "Per crear un diagrama combinat, seleccioneu almenys dues sèries de dades.", + "SSE.Views.ChartTypeDialog.errorSecondaryAxis": "El tipus de diagrama seleccionat requereix l'eix secundari que utilitza un diagrama existent. Seleccioneu un altre tipus de diagrama.", + "SSE.Views.ChartTypeDialog.textSecondary": "Eix secundari", + "SSE.Views.ChartTypeDialog.textSeries": "Serie", + "SSE.Views.ChartTypeDialog.textStyle": "Estil", + "SSE.Views.ChartTypeDialog.textTitle": "Tipus de diagrama", + "SSE.Views.ChartTypeDialog.textType": "Tipus", "SSE.Views.CreatePivotDialog.textDataRange": "Interval de dades d'origen", "SSE.Views.CreatePivotDialog.textDestination": "Trieu on col·locar la taula", "SSE.Views.CreatePivotDialog.textExist": "Full de treball existent", @@ -1498,11 +1670,21 @@ "SSE.Views.CreatePivotDialog.textSelectData": "Seleccionar dades", "SSE.Views.CreatePivotDialog.textTitle": "Crear Taula Dinàmica", "SSE.Views.CreatePivotDialog.txtEmpty": "Aquest camp és obligatori", + "SSE.Views.CreateSparklineDialog.textDataRange": "Interval de dades d'origen", + "SSE.Views.CreateSparklineDialog.textDestination": "Trieu, on s'han de situar les sparklines", + "SSE.Views.CreateSparklineDialog.textInvalidRange": "Interval de cel·les no vàlid", + "SSE.Views.CreateSparklineDialog.textSelectData": "Seleccionar dades", + "SSE.Views.CreateSparklineDialog.textTitle": "Crear Sparklines", + "SSE.Views.CreateSparklineDialog.txtEmpty": "Aquest camp és obligatori", "SSE.Views.DataTab.capBtnGroup": "Agrupar", "SSE.Views.DataTab.capBtnTextCustomSort": "Classificació Personalitzada", + "SSE.Views.DataTab.capBtnTextDataValidation": "Validació de dades", "SSE.Views.DataTab.capBtnTextRemDuplicates": "Eliminar els Duplicats", "SSE.Views.DataTab.capBtnTextToCol": "Text en Columnes", "SSE.Views.DataTab.capBtnUngroup": "Des agrupar", + "SSE.Views.DataTab.capDataFromText": "Des de text/CSV", + "SSE.Views.DataTab.mniFromFile": "Obtenir Dades des de Fitxer", + "SSE.Views.DataTab.mniFromUrl": "Obtenir dades des de l'URL", "SSE.Views.DataTab.textBelow": "Sumar les files a sota del detall", "SSE.Views.DataTab.textClear": "Esborrar esquema", "SSE.Views.DataTab.textColumns": "Des agrupar columnes", @@ -1511,10 +1693,74 @@ "SSE.Views.DataTab.textRightOf": "Sumar les columnes a la dreta de detall", "SSE.Views.DataTab.textRows": "Des agrupar files", "SSE.Views.DataTab.tipCustomSort": "Classificació Personalitzada", + "SSE.Views.DataTab.tipDataFromText": "Obtenir dades des de fitxer Text/CSV", + "SSE.Views.DataTab.tipDataValidation": "Validació de dades", "SSE.Views.DataTab.tipGroup": "Agrupar rang de cel·les", "SSE.Views.DataTab.tipRemDuplicates": "Eliminar les files duplicades d'un full", "SSE.Views.DataTab.tipToColumns": "Separa el text de la cel·la en columnes", "SSE.Views.DataTab.tipUngroup": "Des agrupar rang de cel·les", + "SSE.Views.DataValidationDialog.errorFormula": "El valor actualment s’avalua com a error. Vols continuar?", + "SSE.Views.DataValidationDialog.errorInvalid": "El valor que heu introduït per al camp \"{0}\" no és vàlid.", + "SSE.Views.DataValidationDialog.errorInvalidDate": "La data que heu introduït per al camp \"{0}\" no és vàlida.", + "SSE.Views.DataValidationDialog.errorInvalidList": "L'origen de la llista ha de ser una llista delimitada, o una referència a una sola fila o columna.", + "SSE.Views.DataValidationDialog.errorInvalidTime": "El temps que heu introduït per al camp \"{0}\" no és vàlid.", + "SSE.Views.DataValidationDialog.errorMinGreaterMax": "El camp \"{1}\" ha de ser més gran o igual que el camp \"{0}\".", + "SSE.Views.DataValidationDialog.errorMustEnterBothValues": "Heu d'introduir un valor tant al camp \"{0}\" com al camp \"{1}\".", + "SSE.Views.DataValidationDialog.errorMustEnterValue": "Heu d'introduir un valor al camp \"{0}\".", + "SSE.Views.DataValidationDialog.errorNamedRange": "No es pot trobar l'interval amb nom que heu especificat.", + "SSE.Views.DataValidationDialog.errorNegativeTextLength": "Els valors negatius no es poden utilitzar en les condicions \"{0}\".", + "SSE.Views.DataValidationDialog.errorNotNumeric": "El camp \"{0}\" ha de ser un valor numèric, una expressió numèrica, o referir-se a una cel·la que contingui un valor numèric.", + "SSE.Views.DataValidationDialog.strError": "Avís d'error", + "SSE.Views.DataValidationDialog.strInput": "Missatge d'entrada", + "SSE.Views.DataValidationDialog.strSettings": "Configuració", + "SSE.Views.DataValidationDialog.textAlert": "Alerta", + "SSE.Views.DataValidationDialog.textAllow": "Permetre", + "SSE.Views.DataValidationDialog.textApply": "Aplica aquests canvis a totes les altres cel·les amb la mateixa configuració", + "SSE.Views.DataValidationDialog.textCellSelected": "Quan la cel·la estigui seleccionada, mostra aquest missatge d'entrada", + "SSE.Views.DataValidationDialog.textCompare": "Comparar amb", + "SSE.Views.DataValidationDialog.textData": "Dades", + "SSE.Views.DataValidationDialog.textEndDate": "Data final", + "SSE.Views.DataValidationDialog.textEndTime": "Hora final", + "SSE.Views.DataValidationDialog.textError": "Missatge d'error", + "SSE.Views.DataValidationDialog.textFormula": "Fórmula", + "SSE.Views.DataValidationDialog.textIgnore": "Ignora en blanc", + "SSE.Views.DataValidationDialog.textInput": "Missatge d'entrada", + "SSE.Views.DataValidationDialog.textMax": "Màxim", + "SSE.Views.DataValidationDialog.textMessage": "Missatge", + "SSE.Views.DataValidationDialog.textMin": "Mínim", + "SSE.Views.DataValidationDialog.textSelectData": "Seleccionar dades", + "SSE.Views.DataValidationDialog.textShowDropDown": "Mostrar la llista desplegable a la cel·la", + "SSE.Views.DataValidationDialog.textShowError": "Mostra l'alerta d'error després d'introduir dades no vàlides", + "SSE.Views.DataValidationDialog.textShowInput": "Mostra el missatge d'entrada quan se seleccioni la cel·la", + "SSE.Views.DataValidationDialog.textSource": "Font", + "SSE.Views.DataValidationDialog.textStartDate": "Data d'inici", + "SSE.Views.DataValidationDialog.textStartTime": "Hora d'inici", + "SSE.Views.DataValidationDialog.textStop": "Aturar", + "SSE.Views.DataValidationDialog.textStyle": "Estil", + "SSE.Views.DataValidationDialog.textTitle": "Títol", + "SSE.Views.DataValidationDialog.textUserEnters": "Quan l'usuari introdueix dades no vàlides, mostra aquesta alerta d'error", + "SSE.Views.DataValidationDialog.txtAny": "Qualsevol valor", + "SSE.Views.DataValidationDialog.txtBetween": "entre", + "SSE.Views.DataValidationDialog.txtDate": "Data", + "SSE.Views.DataValidationDialog.txtDecimal": "Decimal", + "SSE.Views.DataValidationDialog.txtElTime": "Temps transcorregut", + "SSE.Views.DataValidationDialog.txtEndDate": "Data Límit", + "SSE.Views.DataValidationDialog.txtEndTime": "Hora final", + "SSE.Views.DataValidationDialog.txtEqual": "Igual", + "SSE.Views.DataValidationDialog.txtGreaterThan": "més gran que", + "SSE.Views.DataValidationDialog.txtGreaterThanOrEqual": "més gran o igual a", + "SSE.Views.DataValidationDialog.txtLength": "Longitud", + "SSE.Views.DataValidationDialog.txtLessThan": "menor que", + "SSE.Views.DataValidationDialog.txtLessThanOrEqual": "menor o igual a", + "SSE.Views.DataValidationDialog.txtList": "Llista", + "SSE.Views.DataValidationDialog.txtNotBetween": "no entre", + "SSE.Views.DataValidationDialog.txtNotEqual": "No igual a", + "SSE.Views.DataValidationDialog.txtOther": "Altre", + "SSE.Views.DataValidationDialog.txtStartDate": "Data d'inici", + "SSE.Views.DataValidationDialog.txtStartTime": "Hora d'inici", + "SSE.Views.DataValidationDialog.txtTextLength": "Longitud del text", + "SSE.Views.DataValidationDialog.txtTime": "Hora", + "SSE.Views.DataValidationDialog.txtWhole": "Nombre sencer", "SSE.Views.DigitalFilterDialog.capAnd": "I", "SSE.Views.DigitalFilterDialog.capCondition1": "és igual", "SSE.Views.DigitalFilterDialog.capCondition10": "no acaba amb", @@ -1539,7 +1785,7 @@ "SSE.Views.DocumentHolder.advancedSlicerText": "Slicer Configuració Avançada", "SSE.Views.DocumentHolder.bottomCellText": "Alineació Inferior", "SSE.Views.DocumentHolder.bulletsText": "Vinyetes i Numeració", - "SSE.Views.DocumentHolder.centerCellText": "Alinear al Mig", + "SSE.Views.DocumentHolder.centerCellText": "Alineació al Mig", "SSE.Views.DocumentHolder.chartText": "Configuració Avançada del Gràfic", "SSE.Views.DocumentHolder.deleteColumnText": "Columna", "SSE.Views.DocumentHolder.deleteRowText": "Fila", @@ -1571,6 +1817,7 @@ "SSE.Views.DocumentHolder.textArrangeForward": "Portar Endavant", "SSE.Views.DocumentHolder.textArrangeFront": "Porta a Primer pla", "SSE.Views.DocumentHolder.textAverage": "Mitjana", + "SSE.Views.DocumentHolder.textBullets": "Vinyetes", "SSE.Views.DocumentHolder.textCount": "Contar", "SSE.Views.DocumentHolder.textCrop": "Retallar", "SSE.Views.DocumentHolder.textCropFill": "Omplir", @@ -1583,27 +1830,29 @@ "SSE.Views.DocumentHolder.textFromStorage": "Des d'Emmagatzematge", "SSE.Views.DocumentHolder.textFromUrl": "Des d'un Enllaç", "SSE.Views.DocumentHolder.textListSettings": "Configuració de la Llista", + "SSE.Views.DocumentHolder.textMacro": "Assignar Macro", "SSE.Views.DocumentHolder.textMax": "Max", "SSE.Views.DocumentHolder.textMin": "Min", "SSE.Views.DocumentHolder.textMore": "Més funcions", "SSE.Views.DocumentHolder.textMoreFormats": "Altres formats", "SSE.Views.DocumentHolder.textNone": "Cap", + "SSE.Views.DocumentHolder.textNumbering": "Numeració", "SSE.Views.DocumentHolder.textReplace": "Canviar imatge", "SSE.Views.DocumentHolder.textRotate": "Girar", "SSE.Views.DocumentHolder.textRotate270": "Girar 90° a l'esquerra", "SSE.Views.DocumentHolder.textRotate90": "Girar 90° a la dreta", "SSE.Views.DocumentHolder.textShapeAlignBottom": "Alineació Inferior", "SSE.Views.DocumentHolder.textShapeAlignCenter": "Centrar", - "SSE.Views.DocumentHolder.textShapeAlignLeft": "Alinear Esquerra", - "SSE.Views.DocumentHolder.textShapeAlignMiddle": "Alinear al Mig", - "SSE.Views.DocumentHolder.textShapeAlignRight": "Alinear Dreta", - "SSE.Views.DocumentHolder.textShapeAlignTop": "Alinear Superior", + "SSE.Views.DocumentHolder.textShapeAlignLeft": "Alineació Esquerra", + "SSE.Views.DocumentHolder.textShapeAlignMiddle": "Alineació al Mig", + "SSE.Views.DocumentHolder.textShapeAlignRight": "Alineació Dreta", + "SSE.Views.DocumentHolder.textShapeAlignTop": "Alineació Superior", "SSE.Views.DocumentHolder.textStdDev": "StdDev", "SSE.Views.DocumentHolder.textSum": "Suma", "SSE.Views.DocumentHolder.textUndo": "Desfer", "SSE.Views.DocumentHolder.textUnFreezePanes": "Descongelar Panells", "SSE.Views.DocumentHolder.textVar": "Var", - "SSE.Views.DocumentHolder.topCellText": "Alinear Superior", + "SSE.Views.DocumentHolder.topCellText": "Alineació Superior", "SSE.Views.DocumentHolder.txtAccounting": "Comptabilitat", "SSE.Views.DocumentHolder.txtAddComment": "Afegir Comentari", "SSE.Views.DocumentHolder.txtAddNamedRange": "Definiu el Nom", @@ -1625,6 +1874,7 @@ "SSE.Views.DocumentHolder.txtCurrency": "Moneda", "SSE.Views.DocumentHolder.txtCustomColumnWidth": "Amplada de Columna Personalitzada", "SSE.Views.DocumentHolder.txtCustomRowHeight": "Alçada de Fila Personalitzada", + "SSE.Views.DocumentHolder.txtCustomSort": "Ordenació personalitzada", "SSE.Views.DocumentHolder.txtCut": "Tallar", "SSE.Views.DocumentHolder.txtDate": "Data", "SSE.Views.DocumentHolder.txtDelete": "Esborra", @@ -1663,7 +1913,7 @@ "SSE.Views.DocumentHolder.txtSortFontColor": "Color de la Font Seleccionada a la part superior", "SSE.Views.DocumentHolder.txtSparklines": "Sparklines", "SSE.Views.DocumentHolder.txtText": "Text", - "SSE.Views.DocumentHolder.txtTextAdvanced": "Configuració Avançada de Text", + "SSE.Views.DocumentHolder.txtTextAdvanced": "Configuració Avançada del Paràgraf", "SSE.Views.DocumentHolder.txtTime": "Hora", "SSE.Views.DocumentHolder.txtUngroup": "Des agrupar", "SSE.Views.DocumentHolder.txtWidth": "Amplada", @@ -1756,6 +2006,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.strResolvedComment": "Activa la visualització dels comentaris resolts", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strSeparator": "Separador", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strStrict": "Estricte", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strTheme": "Tema de la interfície", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strThousandsSeparator": "Separador de milers", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strUnit": "Unitat de Mesura", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strUseSeparatorsBasedOnRegionalSettings": "Utilitzeu separadors en funció de la configuració regional", @@ -1767,30 +2018,54 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoRecover": "Auto recuperació", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textAutoSave": "Guardar Automàticament", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textDisabled": "Desactivat", - "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Desar al Servidor", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Desant versions intermèdies", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Cada Minut", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Estil de Referència", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Bielorús", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBg": "Búlgar", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCa": "Català", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCacheMode": "Mode de memòria cau per defecte", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCm": "Centímetre", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCs": "Txec", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDa": "Danès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Alemany", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEl": "Grec", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEn": "Anglès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEs": "Castellà", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtFi": "Finlandès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtFr": "Francès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtHu": "Hongarès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtId": "Indonesi", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInch": "Polzada", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtIt": "Italià", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtJa": "Japonès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtKo": "Coreà", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLiveComment": "Visualització de Comentaris", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLo": "Lao", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLv": "Letó", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtMac": "a OS X", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNative": "Natiu", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNb": "Noruec", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNl": "Holandès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPl": "Polonès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Punt", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPtlang": "Portuguès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRo": "Romanès", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Rus", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacros": "Activa Tot", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacrosDesc": "Habiliteu totes les macros sense una notificació", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSk": "Eslovac", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSl": "Eslovè", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacros": "Inhabilita tot", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacrosDesc": "Desactiveu totes les macros sense una notificació", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtSv": "Suec", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtTr": "Turc", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtUk": "Ucraïnès", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtVi": "Vietnamita", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacros": "Mostra la Notificació", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacrosDesc": "Desactiveu totes les macros amb una notificació", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "a Windows", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtZh": "Xinès", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.okButtonText": "Aplicar", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strDictionaryLanguage": "Diccionari Idioma", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strIgnoreWordsInUPPERCASE": "Ignorar les paraules a UPPERCASE", @@ -1811,9 +2086,152 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "General", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Configuració de la Pàgina", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Comprovació Ortogràfica", + "SSE.Views.FormatRulesEditDlg.fillColor": "Color de Fons", + "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Avís", + "SSE.Views.FormatRulesEditDlg.text2Scales": "Escala de 2 colors", + "SSE.Views.FormatRulesEditDlg.text3Scales": "Escala de 3 colors", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Totes les Vores", + "SSE.Views.FormatRulesEditDlg.textAppearance": "Aparença de la barra", + "SSE.Views.FormatRulesEditDlg.textApply": "Aplicar a l'interval", + "SSE.Views.FormatRulesEditDlg.textAutomatic": "Automàtic", + "SSE.Views.FormatRulesEditDlg.textAxis": "Eix", + "SSE.Views.FormatRulesEditDlg.textBarDirection": "Direcció de la barra", + "SSE.Views.FormatRulesEditDlg.textBold": "Negreta", + "SSE.Views.FormatRulesEditDlg.textBorder": "Vora", + "SSE.Views.FormatRulesEditDlg.textBordersColor": "Color de les vores", + "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Estil de Vora", + "SSE.Views.FormatRulesEditDlg.textBottomBorders": "Vores inferiors", + "SSE.Views.FormatRulesEditDlg.textCannotAddCF": "No es pot afegir el format condicional.", + "SSE.Views.FormatRulesEditDlg.textCellMidpoint": "Punt mitjà de cel·la", + "SSE.Views.FormatRulesEditDlg.textCenterBorders": "Vores Verticals Internes", + "SSE.Views.FormatRulesEditDlg.textClear": "Netejar", + "SSE.Views.FormatRulesEditDlg.textColor": "Color de text", + "SSE.Views.FormatRulesEditDlg.textContext": "Context", + "SSE.Views.FormatRulesEditDlg.textCustom": "Personalitzat", + "SSE.Views.FormatRulesEditDlg.textDiagDownBorder": "Vora Diagonal Descendent", + "SSE.Views.FormatRulesEditDlg.textDiagUpBorder": "Vora Diagonal Ascendent", + "SSE.Views.FormatRulesEditDlg.textEmptyFormula": "Introduïu una fórmula vàlida.", + "SSE.Views.FormatRulesEditDlg.textEmptyFormulaExt": "La fórmula que heu introduït no avalua un número, data, hora o cadena.", + "SSE.Views.FormatRulesEditDlg.textEmptyText": "Introduïu un valor.", + "SSE.Views.FormatRulesEditDlg.textEmptyValue": "El valor que heu introduït no és un número, data, hora o cadena vàlids.", + "SSE.Views.FormatRulesEditDlg.textErrorGreater": "El valor per al {0} ha de ser més gran que el valor per al {1}.", + "SSE.Views.FormatRulesEditDlg.textErrorTop10Between": "Introduïu un número entre {0} i {1}.", + "SSE.Views.FormatRulesEditDlg.textFill": "Omplir", + "SSE.Views.FormatRulesEditDlg.textFormat": "Format", + "SSE.Views.FormatRulesEditDlg.textFormula": "Fórmula", + "SSE.Views.FormatRulesEditDlg.textGradient": "Degradat", + "SSE.Views.FormatRulesEditDlg.textIconLabel": "quan {0} {1} i", + "SSE.Views.FormatRulesEditDlg.textIconLabelFirst": "quan {0} {1}", + "SSE.Views.FormatRulesEditDlg.textIconLabelLast": "quan el valor és", + "SSE.Views.FormatRulesEditDlg.textIconsOverlap": "Un o més intervals de dades d'icones se solapen.
    Ajusteu els valors de l'interval de dades de les icones de manera que no se superposin.", + "SSE.Views.FormatRulesEditDlg.textIconStyle": "Estil de la icona", + "SSE.Views.FormatRulesEditDlg.textInsideBorders": "Vores Internes", + "SSE.Views.FormatRulesEditDlg.textInvalid": "Interval de dades no vàlid.", + "SSE.Views.FormatRulesEditDlg.textInvalidRange": "ERROR! Interval de cel·les no vàlid", + "SSE.Views.FormatRulesEditDlg.textItalic": "Itàlica", + "SSE.Views.FormatRulesEditDlg.textItem": "Element", + "SSE.Views.FormatRulesEditDlg.textLeft2Right": "D'esquerra a dreta", + "SSE.Views.FormatRulesEditDlg.textLeftBorders": "Vores esquerra", + "SSE.Views.FormatRulesEditDlg.textLongBar": "barra més llarga", + "SSE.Views.FormatRulesEditDlg.textMaximum": "Màxim", + "SSE.Views.FormatRulesEditDlg.textMaxpoint": "Punt màxim", + "SSE.Views.FormatRulesEditDlg.textMiddleBorders": "Vores Horitzontals Internes", + "SSE.Views.FormatRulesEditDlg.textMidpoint": "Punt mitjà", + "SSE.Views.FormatRulesEditDlg.textMinimum": "Mínim", + "SSE.Views.FormatRulesEditDlg.textMinpoint": "Punt mínim", + "SSE.Views.FormatRulesEditDlg.textNegative": "Negatiu", + "SSE.Views.FormatRulesEditDlg.textNewColor": "Afegir Nou Color Personalitzat", + "SSE.Views.FormatRulesEditDlg.textNoBorders": "Sense Vores", + "SSE.Views.FormatRulesEditDlg.textNone": "cap", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentage": "Un o més dels valors especificats no és un percentatge vàlid.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentageExt": "El valor {0} especificat no és un percentatge vàlid.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentile": "Un o més dels valors especificats no és un percentil vàlid.", + "SSE.Views.FormatRulesEditDlg.textNotValidPercentileExt": "El valor {0} especificat no és un percentil vàlid.", + "SSE.Views.FormatRulesEditDlg.textOutBorders": "Vores Exteriors", + "SSE.Views.FormatRulesEditDlg.textPercent": "Percentatge", + "SSE.Views.FormatRulesEditDlg.textPercentile": "Percentil", + "SSE.Views.FormatRulesEditDlg.textPosition": "Posició", + "SSE.Views.FormatRulesEditDlg.textPositive": "Positiu", + "SSE.Views.FormatRulesEditDlg.textPresets": "Preestablerts", + "SSE.Views.FormatRulesEditDlg.textPreview": "Vista prèvia", + "SSE.Views.FormatRulesEditDlg.textRelativeRef": "No podeu utilitzar referències relatives en criteris de format condicional per a escales de color, barres de dades i conjunts d'icones", + "SSE.Views.FormatRulesEditDlg.textReverse": "Ordre invers d'icones", + "SSE.Views.FormatRulesEditDlg.textRight2Left": "De dreta a esquerra", + "SSE.Views.FormatRulesEditDlg.textRightBorders": "Vores de la dreta", + "SSE.Views.FormatRulesEditDlg.textRule": "Regla", + "SSE.Views.FormatRulesEditDlg.textSameAs": "Igual que positiu", + "SSE.Views.FormatRulesEditDlg.textSelectData": "Seleccionar Dades", + "SSE.Views.FormatRulesEditDlg.textShortBar": "barra més curta", + "SSE.Views.FormatRulesEditDlg.textShowBar": "Mostra només la barra", + "SSE.Views.FormatRulesEditDlg.textShowIcon": "Mostra només la icona", + "SSE.Views.FormatRulesEditDlg.textSingleRef": "Aquest tipus de referència no es pot utilitzar en una fórmula de format condicional.
    Canvia la referència a una única cel·la, o utilitza la referència amb una funció de full de càlcul, com ara =SUMA(A1:B5).", + "SSE.Views.FormatRulesEditDlg.textSolid": "Solid", + "SSE.Views.FormatRulesEditDlg.textStrikeout": "Ratllar", + "SSE.Views.FormatRulesEditDlg.textSubscript": "Subíndex", + "SSE.Views.FormatRulesEditDlg.textSuperscript": "Superíndex", + "SSE.Views.FormatRulesEditDlg.textTopBorders": "Vores Superiors", + "SSE.Views.FormatRulesEditDlg.textUnderline": "Subratllar", + "SSE.Views.FormatRulesEditDlg.tipBorders": "Vores", + "SSE.Views.FormatRulesEditDlg.tipNumFormat": "Format de Número", + "SSE.Views.FormatRulesEditDlg.txtAccounting": "Comptabilitat", + "SSE.Views.FormatRulesEditDlg.txtCurrency": "Moneda", + "SSE.Views.FormatRulesEditDlg.txtDate": "Data", + "SSE.Views.FormatRulesEditDlg.txtEmpty": "Aquest camp és obligatori", + "SSE.Views.FormatRulesEditDlg.txtFraction": "Fracció", + "SSE.Views.FormatRulesEditDlg.txtGeneral": "General", + "SSE.Views.FormatRulesEditDlg.txtNumber": "Número", + "SSE.Views.FormatRulesEditDlg.txtPercentage": "Percentatge", + "SSE.Views.FormatRulesEditDlg.txtScientific": "Científic", + "SSE.Views.FormatRulesEditDlg.txtText": "Text", + "SSE.Views.FormatRulesEditDlg.txtTime": "Hora", + "SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Editar regla de format", + "SSE.Views.FormatRulesEditDlg.txtTitleNew": "Nova regla de format", + "SSE.Views.FormatRulesManagerDlg.guestText": "Convidat", + "SSE.Views.FormatRulesManagerDlg.text1Above": "1 per sobre la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text1Below": "1 per sota la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text2Above": "2 per sobre la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text2Below": "2 per sota la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text3Above": "3 per sobre la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.text3Below": "3 per sota la mitjana de des. est.", + "SSE.Views.FormatRulesManagerDlg.textAbove": "Per sobre de la mitja", + "SSE.Views.FormatRulesManagerDlg.textApply": "Aplicar a", + "SSE.Views.FormatRulesManagerDlg.textBeginsWith": "El valor de la cel·la comença amb", + "SSE.Views.FormatRulesManagerDlg.textBelow": "Per sota de la mitja", + "SSE.Views.FormatRulesManagerDlg.textBetween": "està entre {0} i {1}", + "SSE.Views.FormatRulesManagerDlg.textCellValue": "Valor de la cel·la", + "SSE.Views.FormatRulesManagerDlg.textColorScale": "Escala de color graduada", + "SSE.Views.FormatRulesManagerDlg.textContains": "El valor de la cel·la conté", + "SSE.Views.FormatRulesManagerDlg.textContainsBlank": "La cel·la conté un valor en blanc", + "SSE.Views.FormatRulesManagerDlg.textContainsError": "La cel·la conté un error", + "SSE.Views.FormatRulesManagerDlg.textDelete": "Suprimir", + "SSE.Views.FormatRulesManagerDlg.textDown": "Moure la regla avall", + "SSE.Views.FormatRulesManagerDlg.textDuplicate": "Valors duplicats", + "SSE.Views.FormatRulesManagerDlg.textEdit": "Editar", + "SSE.Views.FormatRulesManagerDlg.textEnds": "El valor de la cel·la acaba amb", + "SSE.Views.FormatRulesManagerDlg.textEqAbove": "Igual o superior a la mitjana", + "SSE.Views.FormatRulesManagerDlg.textEqBelow": "Igual o inferior a la mitjana", + "SSE.Views.FormatRulesManagerDlg.textFormat": "Format", + "SSE.Views.FormatRulesManagerDlg.textIconSet": "Conjunt d'icones", + "SSE.Views.FormatRulesManagerDlg.textNew": "Nou", + "SSE.Views.FormatRulesManagerDlg.textNotBetween": "no és entre {0} i {1}", + "SSE.Views.FormatRulesManagerDlg.textNotContains": "El valor de la cel·la no conté", + "SSE.Views.FormatRulesManagerDlg.textNotContainsBlank": "La cel·la no conté un valor en blanc", + "SSE.Views.FormatRulesManagerDlg.textNotContainsError": "La cel·la no conté cap error", + "SSE.Views.FormatRulesManagerDlg.textRules": "Regles", + "SSE.Views.FormatRulesManagerDlg.textScope": "Mostra les regles de format per a", + "SSE.Views.FormatRulesManagerDlg.textSelectData": "Seleccionar dades", + "SSE.Views.FormatRulesManagerDlg.textSelection": "Selecció actual", + "SSE.Views.FormatRulesManagerDlg.textThisPivot": "Aquesta taula pivot", + "SSE.Views.FormatRulesManagerDlg.textThisSheet": "Aquest full de càlcul", + "SSE.Views.FormatRulesManagerDlg.textThisTable": "Aquesta taula", + "SSE.Views.FormatRulesManagerDlg.textUnique": "Valors únics", + "SSE.Views.FormatRulesManagerDlg.textUp": "Moure la regla amunt", + "SSE.Views.FormatRulesManagerDlg.tipIsLocked": "Un altre usuari està editant aquest element.", + "SSE.Views.FormatRulesManagerDlg.txtTitle": "Format condicional", "SSE.Views.FormatSettingsDialog.textCategory": "Categoria", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimal", "SSE.Views.FormatSettingsDialog.textFormat": "Format", + "SSE.Views.FormatSettingsDialog.textLinked": "Enllaçat al codi font", "SSE.Views.FormatSettingsDialog.textSeparator": "Utilitzeu separador de millars", "SSE.Views.FormatSettingsDialog.textSymbols": "Símbols", "SSE.Views.FormatSettingsDialog.textTitle": "Format de Número", @@ -1826,6 +2244,7 @@ "SSE.Views.FormatSettingsDialog.txtAs8": "Octaus (4/8)", "SSE.Views.FormatSettingsDialog.txtCurrency": "Moneda", "SSE.Views.FormatSettingsDialog.txtCustom": "Personalitzat", + "SSE.Views.FormatSettingsDialog.txtCustomWarning": "Introduïu el format numèric personalitzat amb cura. L'editor de fulls de càlcul no comprova els formats personalitzats per als errors que poden afectar el fitxer xlsx.", "SSE.Views.FormatSettingsDialog.txtDate": "Data", "SSE.Views.FormatSettingsDialog.txtFraction": "Fracció", "SSE.Views.FormatSettingsDialog.txtGeneral": "General", @@ -1924,6 +2343,7 @@ "SSE.Views.HyperlinkSettingsDialog.textTitle": "Característiques de hipervincle", "SSE.Views.HyperlinkSettingsDialog.txtEmpty": "Aquest camp és obligatori", "SSE.Views.HyperlinkSettingsDialog.txtNotUrl": "Aquest camp hauria de ser una URL en el format \"http://www.example.com\"", + "SSE.Views.HyperlinkSettingsDialog.txtSizeLimit": "Aquest camp està limitat a 2083 caràcters", "SSE.Views.ImageSettings.textAdvanced": "Mostra la configuració avançada", "SSE.Views.ImageSettings.textCrop": "Retallar", "SSE.Views.ImageSettings.textCropFill": "Omplir", @@ -1960,7 +2380,7 @@ "SSE.Views.ImageSettingsAdvanced.textTitle": "Imatge - Configuració Avançada", "SSE.Views.ImageSettingsAdvanced.textTwoCell": "Moure i mida de les cel·les", "SSE.Views.ImageSettingsAdvanced.textVertically": "Verticalment", - "SSE.Views.LeftMenu.tipAbout": "Sobre", + "SSE.Views.LeftMenu.tipAbout": "Quant a...", "SSE.Views.LeftMenu.tipChat": "Chat", "SSE.Views.LeftMenu.tipComments": "Comentaris", "SSE.Views.LeftMenu.tipFile": "Fitxer", @@ -1969,7 +2389,11 @@ "SSE.Views.LeftMenu.tipSpellcheck": "Comprovació Ortogràfica", "SSE.Views.LeftMenu.tipSupport": "Opinió & Suport", "SSE.Views.LeftMenu.txtDeveloper": "MODALITAT DE DESENVOLUPADOR", + "SSE.Views.LeftMenu.txtLimit": "Limitar l'accés", "SSE.Views.LeftMenu.txtTrial": "ESTAT DE PROVA", + "SSE.Views.LeftMenu.txtTrialDev": "Mode de desenvolupador de prova", + "SSE.Views.MacroDialog.textMacro": "Nom de macro", + "SSE.Views.MacroDialog.textTitle": "Assignar Macro", "SSE.Views.MainSettingsPrint.okButtonText": "Desar", "SSE.Views.MainSettingsPrint.strBottom": "Inferior", "SSE.Views.MainSettingsPrint.strLandscape": "Horitzontal", @@ -2032,6 +2456,7 @@ "SSE.Views.NameManagerDlg.textWorkbook": "Llibre de treball", "SSE.Views.NameManagerDlg.tipIsLocked": "Un altre usuari està editant aquest element.", "SSE.Views.NameManagerDlg.txtTitle": "Gestor de Noms", + "SSE.Views.NameManagerDlg.warnDelete": "Segur que voleu suprimir el nom {0}?", "SSE.Views.PageMarginsDialog.textBottom": "Inferior", "SSE.Views.PageMarginsDialog.textLeft": "Esquerra", "SSE.Views.PageMarginsDialog.textRight": "Dreta", @@ -2106,6 +2531,21 @@ "SSE.Views.PivotDigitalFilterDialog.txtAnd": "i", "SSE.Views.PivotDigitalFilterDialog.txtTitleLabel": "Filtre Etiqueta", "SSE.Views.PivotDigitalFilterDialog.txtTitleValue": "Valor del Filtre", + "SSE.Views.PivotGroupDialog.textAuto": "Automàtic", + "SSE.Views.PivotGroupDialog.textBy": "Per", + "SSE.Views.PivotGroupDialog.textDays": "Dies", + "SSE.Views.PivotGroupDialog.textEnd": "Acabant a", + "SSE.Views.PivotGroupDialog.textError": "Aquest camp ha de ser un valor numèric", + "SSE.Views.PivotGroupDialog.textGreaterError": "El número final ha de ser més gran que el número inicial.", + "SSE.Views.PivotGroupDialog.textHour": "hores", + "SSE.Views.PivotGroupDialog.textMin": "Minuts", + "SSE.Views.PivotGroupDialog.textMonth": "Mesos", + "SSE.Views.PivotGroupDialog.textNumDays": "Nombre de dies", + "SSE.Views.PivotGroupDialog.textQuart": "Trimestres", + "SSE.Views.PivotGroupDialog.textSec": "Segons", + "SSE.Views.PivotGroupDialog.textStart": "Començant a", + "SSE.Views.PivotGroupDialog.textYear": "Anys", + "SSE.Views.PivotGroupDialog.txtTitle": "Agrupació", "SSE.Views.PivotSettings.textAdvanced": "Mostra la configuració avançada", "SSE.Views.PivotSettings.textColumns": "Columnes", "SSE.Views.PivotSettings.textFields": "Seleccionar Camps", @@ -2238,7 +2678,7 @@ "SSE.Views.RightMenu.txtCellSettings": "Configuració de la cel·la", "SSE.Views.RightMenu.txtChartSettings": "Gràfic Configuració", "SSE.Views.RightMenu.txtImageSettings": "Configuració Imatge", - "SSE.Views.RightMenu.txtParagraphSettings": "Configuració de text", + "SSE.Views.RightMenu.txtParagraphSettings": "Configuració de paràgraf", "SSE.Views.RightMenu.txtPivotSettings": "Configuració de la taula activada", "SSE.Views.RightMenu.txtSettings": "Configuració Comuna", "SSE.Views.RightMenu.txtShapeSettings": "Configuració de la Forma", @@ -2267,7 +2707,7 @@ "SSE.Views.ShapeSettings.strPattern": "Patró", "SSE.Views.ShapeSettings.strShadow": "Mostra ombra", "SSE.Views.ShapeSettings.strSize": "Mida", - "SSE.Views.ShapeSettings.strStroke": "Traça", + "SSE.Views.ShapeSettings.strStroke": "Línia", "SSE.Views.ShapeSettings.strTransparency": "Opacitat", "SSE.Views.ShapeSettings.strType": "Tipus", "SSE.Views.ShapeSettings.textAdvanced": "Mostra la configuració avançada", @@ -2371,6 +2811,7 @@ "SSE.Views.SignatureSettings.strValid": "Signatures vàlides", "SSE.Views.SignatureSettings.txtContinueEditing": "Editar de totes maneres", "SSE.Views.SignatureSettings.txtEditWarning": "L’edició eliminarà les signatures del full de càlcul.
    Esteu segur que voleu continuar?", + "SSE.Views.SignatureSettings.txtRemoveWarning": "Voleu eliminar aquesta signatura?
    Això no es podrà desfer.", "SSE.Views.SignatureSettings.txtRequestedSignatures": "Cal signar aquest full de càlcul.", "SSE.Views.SignatureSettings.txtSigned": "S'ha afegit signatures vàlides al full de càlcul. El full de càlcul està protegit de l’edició.", "SSE.Views.SignatureSettings.txtSignedInvalid": "Algunes de les signatures digitals del full de càlcul no són vàlides o no es van poder verificar. El full de càlcul està protegit de l’edició.", @@ -2459,8 +2900,8 @@ "SSE.Views.SortDialog.textDown": "Moure el nivell cap avall", "SSE.Views.SortDialog.textFontColor": "Color de Font", "SSE.Views.SortDialog.textLeft": "Esquerra", - "SSE.Views.SortDialog.textMoreCols": "(Afegir columnes...)", - "SSE.Views.SortDialog.textMoreRows": "(Afegir files...)", + "SSE.Views.SortDialog.textMoreCols": "(Més columnes...)", + "SSE.Views.SortDialog.textMoreRows": "(Mes files...)", "SSE.Views.SortDialog.textNone": "Cap", "SSE.Views.SortDialog.textOptions": "Opcions", "SSE.Views.SortDialog.textOrder": "Ordenar", @@ -2614,7 +3055,7 @@ "SSE.Views.TextArtSettings.strForeground": "Color de Primer Pla", "SSE.Views.TextArtSettings.strPattern": "Patró", "SSE.Views.TextArtSettings.strSize": "Mida", - "SSE.Views.TextArtSettings.strStroke": "Traça", + "SSE.Views.TextArtSettings.strStroke": "Línia", "SSE.Views.TextArtSettings.strTransparency": "Opacitat", "SSE.Views.TextArtSettings.strType": "Tipus", "SSE.Views.TextArtSettings.textAngle": "Angle", @@ -2654,6 +3095,7 @@ "SSE.Views.TextArtSettings.txtPapyrus": "Papiro", "SSE.Views.TextArtSettings.txtWood": "Fusta", "SSE.Views.Toolbar.capBtnAddComment": "Afegir Comentari", + "SSE.Views.Toolbar.capBtnColorSchemas": "Esquema de color", "SSE.Views.Toolbar.capBtnComment": "Comentari", "SSE.Views.Toolbar.capBtnInsHeader": "Capçalera/Peu de Pàgina", "SSE.Views.Toolbar.capBtnInsSlicer": "Slicer", @@ -2673,6 +3115,7 @@ "SSE.Views.Toolbar.capInsertHyperlink": "Hiperenllaç", "SSE.Views.Toolbar.capInsertImage": "Imatge", "SSE.Views.Toolbar.capInsertShape": "Forma", + "SSE.Views.Toolbar.capInsertSpark": "Sparklines", "SSE.Views.Toolbar.capInsertTable": "Taula", "SSE.Views.Toolbar.capInsertText": "Quadre de Text", "SSE.Views.Toolbar.mniImageFromFile": "Imatge d'un Fitxer", @@ -2682,12 +3125,13 @@ "SSE.Views.Toolbar.textAlignBottom": "Alineació Inferior", "SSE.Views.Toolbar.textAlignCenter": "Centrar", "SSE.Views.Toolbar.textAlignJust": "Justificat", - "SSE.Views.Toolbar.textAlignLeft": "Alinear Esquerra", - "SSE.Views.Toolbar.textAlignMiddle": "Alinear al Mig", - "SSE.Views.Toolbar.textAlignRight": "Alinear Dreta", - "SSE.Views.Toolbar.textAlignTop": "Alinear Superior", - "SSE.Views.Toolbar.textAllBorders": "Tots els Costats", + "SSE.Views.Toolbar.textAlignLeft": "Alineació Esquerra", + "SSE.Views.Toolbar.textAlignMiddle": "Alineació al Mig", + "SSE.Views.Toolbar.textAlignRight": "Alineació Dreta", + "SSE.Views.Toolbar.textAlignTop": "Alineació Superior", + "SSE.Views.Toolbar.textAllBorders": "Totes les Vores", "SSE.Views.Toolbar.textAuto": "Auto", + "SSE.Views.Toolbar.textAutoColor": "Automàtic", "SSE.Views.Toolbar.textBold": "Negreta", "SSE.Views.Toolbar.textBordersColor": "Color Vora", "SSE.Views.Toolbar.textBordersStyle": "Estil de Vora", @@ -2695,8 +3139,11 @@ "SSE.Views.Toolbar.textBottomBorders": "Vores inferiors", "SSE.Views.Toolbar.textCenterBorders": "Vores Verticals Internes", "SSE.Views.Toolbar.textClearPrintArea": "Esborrar l'Àrea d'Impressió", + "SSE.Views.Toolbar.textClearRule": "Netejar les regles", "SSE.Views.Toolbar.textClockwise": "Angle en sentit horari", + "SSE.Views.Toolbar.textColorScales": "Escala de color", "SSE.Views.Toolbar.textCounterCw": "Angle en sentit antihorari", + "SSE.Views.Toolbar.textDataBars": "Barra de Dades", "SSE.Views.Toolbar.textDelLeft": "Desplaçar les cel·les cap a l'esquerra", "SSE.Views.Toolbar.textDelUp": "Desplaçar Cel·les Amunt", "SSE.Views.Toolbar.textDiagDownBorder": "Vora Diagonal Descendent", @@ -2710,9 +3157,11 @@ "SSE.Views.Toolbar.textInsideBorders": "Vores Internes", "SSE.Views.Toolbar.textInsRight": "Desplaçar Cel·les a la Dreta", "SSE.Views.Toolbar.textItalic": "Itàlica", + "SSE.Views.Toolbar.textItems": "Elements", "SSE.Views.Toolbar.textLandscape": "Horitzontal", "SSE.Views.Toolbar.textLeft": "Esquerra:", "SSE.Views.Toolbar.textLeftBorders": "Vores Esquerres", + "SSE.Views.Toolbar.textManageRule": "Gestionar Regles", "SSE.Views.Toolbar.textManyPages": "pàgines", "SSE.Views.Toolbar.textMarginsLast": "Últim Personalitzat", "SSE.Views.Toolbar.textMarginsNarrow": "Estret", @@ -2722,6 +3171,7 @@ "SSE.Views.Toolbar.textMoreFormats": "Altres formats", "SSE.Views.Toolbar.textMorePages": "Més pàgines", "SSE.Views.Toolbar.textNewColor": "Afegir un Nou Color Personalitzat", + "SSE.Views.Toolbar.textNewRule": "Nova regla", "SSE.Views.Toolbar.textNoBorders": "Sense Vores", "SSE.Views.Toolbar.textOnePage": "pàgina", "SSE.Views.Toolbar.textOutBorders": "Vores Exteriors", @@ -2735,6 +3185,7 @@ "SSE.Views.Toolbar.textRotateUp": "Girar Text cap a munt", "SSE.Views.Toolbar.textScale": "Escala", "SSE.Views.Toolbar.textScaleCustom": "Personalitzat", + "SSE.Views.Toolbar.textSelection": "Des de la selecció actual", "SSE.Views.Toolbar.textSetPrintArea": "Definir l'Àrea d'Impressió", "SSE.Views.Toolbar.textStrikeout": "Ratllar", "SSE.Views.Toolbar.textSubscript": "Subíndex", @@ -2749,6 +3200,9 @@ "SSE.Views.Toolbar.textTabLayout": "Maquetació", "SSE.Views.Toolbar.textTabProtect": "Protecció", "SSE.Views.Toolbar.textTabView": "Vista", + "SSE.Views.Toolbar.textThisPivot": "Des d'aquesta taula pivot", + "SSE.Views.Toolbar.textThisSheet": "Des d'aquest full de treball", + "SSE.Views.Toolbar.textThisTable": "Des d'aquesta taula", "SSE.Views.Toolbar.textTop": "Superior:", "SSE.Views.Toolbar.textTopBorders": "Vores Superiors", "SSE.Views.Toolbar.textUnderline": "Subratllar", @@ -2758,10 +3212,10 @@ "SSE.Views.Toolbar.tipAlignBottom": "Alineació inferior", "SSE.Views.Toolbar.tipAlignCenter": "Centrar", "SSE.Views.Toolbar.tipAlignJust": "Justificat", - "SSE.Views.Toolbar.tipAlignLeft": "Alinear esquerra", - "SSE.Views.Toolbar.tipAlignMiddle": "Alinear al Mig", - "SSE.Views.Toolbar.tipAlignRight": "Alinear dreta", - "SSE.Views.Toolbar.tipAlignTop": "Alinear superior", + "SSE.Views.Toolbar.tipAlignLeft": "Alineació esquerra", + "SSE.Views.Toolbar.tipAlignMiddle": "Alineació al Mig", + "SSE.Views.Toolbar.tipAlignRight": "Alineació Dreta", + "SSE.Views.Toolbar.tipAlignTop": "Alineació superior", "SSE.Views.Toolbar.tipAutofilter": "Ordenar i Filtrar", "SSE.Views.Toolbar.tipBack": "Enrere", "SSE.Views.Toolbar.tipBorders": "Vores", @@ -2769,6 +3223,7 @@ "SSE.Views.Toolbar.tipChangeChart": "Canviar el tipus de gràfic", "SSE.Views.Toolbar.tipClearStyle": "Esborrar", "SSE.Views.Toolbar.tipColorSchemas": "Canviar el esquema de color", + "SSE.Views.Toolbar.tipCondFormat": "Format condicional", "SSE.Views.Toolbar.tipCopy": "Copiar", "SSE.Views.Toolbar.tipCopyStyle": "Copiar estil", "SSE.Views.Toolbar.tipDecDecimal": "Disminuir el decimal", @@ -2779,6 +3234,7 @@ "SSE.Views.Toolbar.tipDigStylePercent": "Estil Percentual", "SSE.Views.Toolbar.tipEditChart": "Editar Gràfic", "SSE.Views.Toolbar.tipEditChartData": "Seleccionar Dades", + "SSE.Views.Toolbar.tipEditChartType": "Canviar el tipus de gràfic", "SSE.Views.Toolbar.tipEditHeader": "Edita la capçalera o el peu de pàgina", "SSE.Views.Toolbar.tipFontColor": "Color de Font", "SSE.Views.Toolbar.tipFontName": "Font", @@ -2795,6 +3251,7 @@ "SSE.Views.Toolbar.tipInsertOpt": "Inserir cel·les", "SSE.Views.Toolbar.tipInsertShape": "Inseriu autoforma", "SSE.Views.Toolbar.tipInsertSlicer": "Inserir desplegable", + "SSE.Views.Toolbar.tipInsertSpark": "Inserir sparkline", "SSE.Views.Toolbar.tipInsertSymbol": "Inserir símbol", "SSE.Views.Toolbar.tipInsertTable": "Inserir taula", "SSE.Views.Toolbar.tipInsertText": "Inserir quadre de text", @@ -2931,6 +3388,7 @@ "SSE.Views.ViewManagerDlg.textDuplicate": "Duplicar", "SSE.Views.ViewManagerDlg.textEmpty": "Encara no s'ha creat cap visualització.", "SSE.Views.ViewManagerDlg.textGoTo": "Anar a vista", + "SSE.Views.ViewManagerDlg.textLongName": "Introduïu un nom de menys de 128 caràcters.", "SSE.Views.ViewManagerDlg.textNew": "Nou", "SSE.Views.ViewManagerDlg.textRename": "Canviar el nom", "SSE.Views.ViewManagerDlg.textRenameError": "El nom de la vista no pot estar buit.", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 5592a0e37..7f75d064a 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -174,6 +174,12 @@ "Common.Views.AutoCorrectDialog.warnReset": "Any autocorrect you added will be removed and the changed ones will be restored to their original values. Do you want to continue?", "Common.Views.AutoCorrectDialog.warnRestore": "The autocorrect entry for %1 will be reset to its original value. Do you want to continue?", "Common.Views.Chat.textSend": "Send", + "Common.Views.Comments.mniAuthorAsc": "Author A to Z", + "Common.Views.Comments.mniAuthorDesc": "Author Z to A", + "Common.Views.Comments.mniDateAsc": "Oldest", + "Common.Views.Comments.mniDateDesc": "Newest", + "Common.Views.Comments.mniPositionAsc": "From top", + "Common.Views.Comments.mniPositionDesc": "From bottom", "Common.Views.Comments.textAdd": "Add", "Common.Views.Comments.textAddComment": "Add Comment", "Common.Views.Comments.textAddCommentToDoc": "Add Comment to Document", @@ -181,6 +187,7 @@ "Common.Views.Comments.textAnonym": "Guest", "Common.Views.Comments.textCancel": "Cancel", "Common.Views.Comments.textClose": "Close", + "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.Comments.textComments": "Comments", "Common.Views.Comments.textEdit": "OK", "Common.Views.Comments.textEnterCommentHint": "Enter your comment here", @@ -190,13 +197,6 @@ "Common.Views.Comments.textResolve": "Resolve", "Common.Views.Comments.textResolved": "Resolved", "Common.Views.Comments.textSort": "Sort comments", - "Common.Views.Comments.mniAuthorAsc": "Author A to Z", - "Common.Views.Comments.mniAuthorDesc": "Author Z to A", - "Common.Views.Comments.mniDateDesc": "Newest", - "Common.Views.Comments.mniDateAsc": "Oldest", - "Common.Views.Comments.mniPositionAsc": "From top", - "Common.Views.Comments.mniPositionDesc": "From bottom", - "Common.Views.Comments.textClosePanel": "Close comments", "Common.Views.CopyWarningDialog.textDontShow": "Don't show this message again", "Common.Views.CopyWarningDialog.textMsg": "Copy, cut and paste actions using the editor toolbar buttons and context menu actions will be performed within this editor tab only.

    To copy or paste to or from applications outside the editor tab use the following keyboard combinations:", "Common.Views.CopyWarningDialog.textTitle": "Copy, Cut and Paste Actions", @@ -730,6 +730,7 @@ "SSE.Controllers.Main.textConfirm": "Confirmation", "SSE.Controllers.Main.textContactUs": "Contact sales", "SSE.Controllers.Main.textCustomLoader": "Please note that according to the terms of the license you are not entitled to change the loader.
    Please contact our Sales Department to get a quote.", + "SSE.Controllers.Main.textDisconnect": "Connection is lost", "SSE.Controllers.Main.textGuest": "Guest", "SSE.Controllers.Main.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", "SSE.Controllers.Main.textLoadingDocument": "Loading spreadsheet", @@ -994,7 +995,7 @@ "SSE.Controllers.Main.unsupportedBrowserErrorText": "Your browser is not supported.", "SSE.Controllers.Main.uploadImageExtMessage": "Unknown image format.", "SSE.Controllers.Main.uploadImageFileCountMessage": "No images uploaded.", - "SSE.Controllers.Main.uploadImageSizeMessage": "Maximium image size limit exceeded.", + "SSE.Controllers.Main.uploadImageSizeMessage": "The image is too big. The maximum size is 25 MB.", "SSE.Controllers.Main.uploadImageTextText": "Uploading image...", "SSE.Controllers.Main.uploadImageTitleText": "Uploading Image", "SSE.Controllers.Main.waitText": "Please, wait...", @@ -1008,7 +1009,6 @@ "SSE.Controllers.Main.warnNoLicense": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", "SSE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", "SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", - "SSE.Controllers.Main.textDisconnect": "Connection is lost", "SSE.Controllers.Print.strAllSheets": "All Sheets", "SSE.Controllers.Print.textFirstCol": "First column", "SSE.Controllers.Print.textFirstRow": "First row", @@ -2099,7 +2099,7 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "General", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Page Settings", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Spell checking", - "SSE.Views.FormatRulesEditDlg.fillColor": "Background color", + "SSE.Views.FormatRulesEditDlg.fillColor": "Fill color", "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Warning", "SSE.Views.FormatRulesEditDlg.text2Scales": "2 Color scale", "SSE.Views.FormatRulesEditDlg.text3Scales": "3 Color scale", @@ -3275,7 +3275,7 @@ "SSE.Views.Toolbar.tipPageOrient": "Page orientation", "SSE.Views.Toolbar.tipPageSize": "Page size", "SSE.Views.Toolbar.tipPaste": "Paste", - "SSE.Views.Toolbar.tipPrColor": "Background color", + "SSE.Views.Toolbar.tipPrColor": "Fill color", "SSE.Views.Toolbar.tipPrint": "Print", "SSE.Views.Toolbar.tipPrintArea": "Print area", "SSE.Views.Toolbar.tipPrintTitles": "Print titles", diff --git a/apps/spreadsheeteditor/main/locale/es.json b/apps/spreadsheeteditor/main/locale/es.json index 0b6d29ed9..1966ea32b 100644 --- a/apps/spreadsheeteditor/main/locale/es.json +++ b/apps/spreadsheeteditor/main/locale/es.json @@ -983,7 +983,7 @@ "SSE.Controllers.Main.unsupportedBrowserErrorText": "Su navegador no está soportado.", "SSE.Controllers.Main.uploadImageExtMessage": "Formato de imagen desconocido.", "SSE.Controllers.Main.uploadImageFileCountMessage": "No hay imágenes subidas.", - "SSE.Controllers.Main.uploadImageSizeMessage": "Tamaño de imagen máximo está superado.", + "SSE.Controllers.Main.uploadImageSizeMessage": "La imagen es demasiado grande. El tamaño máximo es de 25 MB.", "SSE.Controllers.Main.uploadImageTextText": "Subiendo imagen...", "SSE.Controllers.Main.uploadImageTitleText": "Subiendo imagen", "SSE.Controllers.Main.waitText": "Por favor, espere...", @@ -1026,7 +1026,7 @@ "SSE.Controllers.Toolbar.textFontSizeErr": "El valor introducido es incorrecto.
    Por favor, introduzca un valor numérico entre 1 y 409", "SSE.Controllers.Toolbar.textFraction": "Fracciones", "SSE.Controllers.Toolbar.textFunction": "Funciones", - "SSE.Controllers.Toolbar.textIndicator": "Indicadores", + "SSE.Controllers.Toolbar.textIndicator": "Hitos", "SSE.Controllers.Toolbar.textInsert": "Insertar", "SSE.Controllers.Toolbar.textIntegral": "Integrales", "SSE.Controllers.Toolbar.textLargeOperator": "Operadores grandes", diff --git a/apps/spreadsheeteditor/main/locale/it.json b/apps/spreadsheeteditor/main/locale/it.json index b800012d3..d56e7c009 100644 --- a/apps/spreadsheeteditor/main/locale/it.json +++ b/apps/spreadsheeteditor/main/locale/it.json @@ -49,6 +49,8 @@ "Common.define.chartData.textSurface": "Superficie", "Common.define.chartData.textWinLossSpark": "Vinci/Perdi", "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.textBlank": "Vuoto", + "Common.define.conditionalData.textBottom": "In basso", "Common.define.conditionalData.textLastMonth": "ultimo mese", "Common.define.conditionalData.textLastWeek": "ultima settimana", "Common.Translation.warnFileLocked": "Il file è in fase di modifica in un'altra applicazione. Puoi continuare a modificarlo e salvarlo come copia.", @@ -1729,6 +1731,7 @@ "SSE.Views.DocumentHolder.textArrangeForward": "Porta avanti", "SSE.Views.DocumentHolder.textArrangeFront": "Porta in primo piano", "SSE.Views.DocumentHolder.textAverage": "Media", + "SSE.Views.DocumentHolder.textBullets": "Elenchi puntati", "SSE.Views.DocumentHolder.textCount": "Conteggio", "SSE.Views.DocumentHolder.textCrop": "Ritaglia", "SSE.Views.DocumentHolder.textCropFill": "Riempimento", @@ -1930,6 +1933,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Salva sul server", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Ogni minuto", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Stile di riferimento", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBg": "Bulgaro", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCacheMode": "Modalità cache predefinita", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCm": "Centimetro", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Tedesco", @@ -1978,10 +1982,18 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Generale", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Impostazioni pagina", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Controllo ortografico", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Tutti i bordi", + "SSE.Views.FormatRulesEditDlg.textBold": "Grassetto", + "SSE.Views.FormatRulesEditDlg.textBorder": "Bordo", + "SSE.Views.FormatRulesEditDlg.textBordersColor": "‎Colore bordi‎", + "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Stile bordo", + "SSE.Views.FormatRulesEditDlg.textBottomBorders": "Bordi inferiori", "SSE.Views.FormatRulesEditDlg.textItalic": "Corsivo", "SSE.Views.FormatRulesEditDlg.textItem": "Elemento", + "SSE.Views.FormatRulesEditDlg.tipBorders": "Bordi", "SSE.Views.FormatRulesEditDlg.txtGeneral": "Generale", "SSE.Views.FormatRulesManagerDlg.guestText": "Ospite", + "SSE.Views.FormatRulesManagerDlg.textApply": "Applica a", "SSE.Views.FormatSettingsDialog.textCategory": "Categoria", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimale", "SSE.Views.FormatSettingsDialog.textFormat": "Formato", diff --git a/apps/spreadsheeteditor/main/locale/nl.json b/apps/spreadsheeteditor/main/locale/nl.json index e7672af67..b85237986 100644 --- a/apps/spreadsheeteditor/main/locale/nl.json +++ b/apps/spreadsheeteditor/main/locale/nl.json @@ -48,6 +48,20 @@ "Common.define.chartData.textStock": "Voorraad", "Common.define.chartData.textSurface": "Oppervlak", "Common.define.chartData.textWinLossSpark": "Winst/verlies", + "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.text1Above": "1 std dev boven", + "Common.define.conditionalData.text1Below": "1 std dev onder", + "Common.define.conditionalData.text2Above": "2 std dev boven", + "Common.define.conditionalData.text2Below": "2 std dev onder", + "Common.define.conditionalData.text3Above": "3 std dev boven", + "Common.define.conditionalData.text3Below": "3 std dev onder", + "Common.define.conditionalData.textAbove": "Boven", + "Common.define.conditionalData.textAverage": "Gemiddeld", + "Common.define.conditionalData.textBegins": "Begint met", + "Common.define.conditionalData.textBelow": "Onder", + "Common.define.conditionalData.textBetween": "Tussen", + "Common.define.conditionalData.textBlank": "Blanco", + "Common.define.conditionalData.textBottom": "Bodem", "Common.Translation.warnFileLocked": "Het bestand wordt bewerkt in een andere app. U kunt doorgaan met bewerken en als kopie opslaan.", "Common.UI.ColorButton.textAutoColor": "Automatisch", "Common.UI.ColorButton.textNewColor": "Nieuwe aangepaste kleur toevoegen", @@ -95,6 +109,7 @@ "Common.Views.About.txtVersion": "Versie", "Common.Views.AutoCorrectDialog.textAdd": "Toevoegen", "Common.Views.AutoCorrectDialog.textApplyAsWork": "Pas toe terwijl u werkt", + "Common.Views.AutoCorrectDialog.textAutoCorrect": "AutoCorrectie", "Common.Views.AutoCorrectDialog.textAutoFormat": "AutoOpmaak terwijl u typt", "Common.Views.AutoCorrectDialog.textBy": "Door", "Common.Views.AutoCorrectDialog.textDelete": "Verwijder", @@ -612,6 +627,7 @@ "SSE.Controllers.Main.errorWrongOperator": "De ingevoerde formule bevat een fout. Verkeerde operator gebruikt.
    Corrigeer de fout.", "SSE.Controllers.Main.errRemDuplicates": "Dubbele waarden gevonden en verwijderd: {0}, unieke waarden over: {1}.", "SSE.Controllers.Main.leavePageText": "Er zijn niet-opgeslagen wijzigingen in deze spreadsheet. Klik op 'Op deze pagina blijven' en dan op 'Opslaan' om de wijzigingen op te slaan. Klik op 'Pagina verlaten' om alle niet-opgeslagen wijzigingen te negeren.", + "SSE.Controllers.Main.leavePageTextOnClose": "Alle niet-opgeslagen wijzigingen in deze spreadsheet gaan verloren.
    Klik op \"Annuleren\" en dan op \"Opslaan\" om ze op te slaan. Klik op \"OK\" om alle niet-opgeslagen wijzigingen te verwijderen.", "SSE.Controllers.Main.loadFontsTextText": "Gegevens worden geladen...", "SSE.Controllers.Main.loadFontsTitleText": "Gegevens worden geladen", "SSE.Controllers.Main.loadFontTextText": "Gegevens worden geladen...", @@ -691,6 +707,7 @@ "SSE.Controllers.Main.txtMinutes": "minuten", "SSE.Controllers.Main.txtMonths": "maanden", "SSE.Controllers.Main.txtMultiSelect": "Meerdere selecteren (Alt + S)", + "SSE.Controllers.Main.txtOr": "%1 of %2", "SSE.Controllers.Main.txtPage": "Pagina", "SSE.Controllers.Main.txtPageOf": "Pagina %1 van %2", "SSE.Controllers.Main.txtPages": "Pagina's", @@ -1728,6 +1745,7 @@ "SSE.Views.DocumentHolder.textFromStorage": "Van Opslag", "SSE.Views.DocumentHolder.textFromUrl": "Van URL", "SSE.Views.DocumentHolder.textListSettings": "Lijst instellingen", + "SSE.Views.DocumentHolder.textMacro": "Macro toewijzen", "SSE.Views.DocumentHolder.textMax": "Max", "SSE.Views.DocumentHolder.textMin": "Min", "SSE.Views.DocumentHolder.textMore": "Meer functies", @@ -1917,6 +1935,7 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.textForceSave": "Opslaan op server", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textMinute": "Elke minuut", "SSE.Views.FileMenuPanels.MainSettingsGeneral.textRefStyle": "Referentie stijl", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtBe": "Wit-Russisch", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCacheMode": "standaard cache modus", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtCm": "Centimeter", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Duits", @@ -1958,6 +1977,31 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Algemeen", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Pagina-instellingen", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Spellingcontrole", + "SSE.Views.FormatRulesEditDlg.fillColor": "Achtergrond kleur", + "SSE.Views.FormatRulesEditDlg.text2Scales": "2 Kleurenschaal", + "SSE.Views.FormatRulesEditDlg.text3Scales": "3 Kleurenschaal", + "SSE.Views.FormatRulesEditDlg.textAllBorders": "Alle grenzen", + "SSE.Views.FormatRulesEditDlg.textAppearance": "Uiterlijk van de bar", + "SSE.Views.FormatRulesEditDlg.textApply": "Solliciteer naar Bereik", + "SSE.Views.FormatRulesEditDlg.textAutomatic": "Automatisch", + "SSE.Views.FormatRulesEditDlg.textAxis": "Assen", + "SSE.Views.FormatRulesEditDlg.textBarDirection": "Bar richting", + "SSE.Views.FormatRulesEditDlg.textBold": "Vet", + "SSE.Views.FormatRulesEditDlg.textBorder": "Grens", + "SSE.Views.FormatRulesEditDlg.textBordersColor": "Randen Kleur", + "SSE.Views.FormatRulesEditDlg.textBordersStyle": "Rand Stijl", + "SSE.Views.FormatRulesEditDlg.textNewColor": "Nieuwe aangepaste kleur toevoegen", + "SSE.Views.FormatRulesEditDlg.tipBorders": "Randen", + "SSE.Views.FormatRulesEditDlg.txtAccounting": "Boekhouding", + "SSE.Views.FormatRulesManagerDlg.text1Above": "1 std dev boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text1Below": "1 std dev onder het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text2Above": "2 std dev boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text2Below": "2 std dev onder het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text3Above": "3 std dev boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.text3Below": "3 std dev onder het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.textAbove": "Boven het gemiddelde", + "SSE.Views.FormatRulesManagerDlg.textApply": "Solliciteer naar", + "SSE.Views.FormatRulesManagerDlg.textBelow": "Onder het gemiddelde", "SSE.Views.FormatSettingsDialog.textCategory": "Categorie", "SSE.Views.FormatSettingsDialog.textDecimal": "Decimaal", "SSE.Views.FormatSettingsDialog.textFormat": "Opmaak", @@ -2121,6 +2165,7 @@ "SSE.Views.LeftMenu.txtLimit": "Beperk toegang", "SSE.Views.LeftMenu.txtTrial": "TEST MODUS", "SSE.Views.LeftMenu.txtTrialDev": "Proefontwikkelaarsmodus", + "SSE.Views.MacroDialog.textTitle": "Macro toewijzen", "SSE.Views.MainSettingsPrint.okButtonText": "Opslaan", "SSE.Views.MainSettingsPrint.strBottom": "Onder", "SSE.Views.MainSettingsPrint.strLandscape": "Liggend", diff --git a/apps/spreadsheeteditor/main/locale/pl.json b/apps/spreadsheeteditor/main/locale/pl.json index b8a6cbced..9a97c5d78 100644 --- a/apps/spreadsheeteditor/main/locale/pl.json +++ b/apps/spreadsheeteditor/main/locale/pl.json @@ -1489,7 +1489,7 @@ "SSE.Views.PrintSettings.textPrintGrid": "Drukuj siatkę", "SSE.Views.PrintSettings.textPrintHeadings": "Drukuj wiersze i kolumny", "SSE.Views.PrintSettings.textPrintRange": "Drukuj zakres", - "SSE.Views.PrintSettings.textSelection": "Wybrany", + "SSE.Views.PrintSettings.textSelection": "Zaznaczenie", "SSE.Views.PrintSettings.textSettings": "Ustawienia arkusza", "SSE.Views.PrintSettings.textShowDetails": "Pokaż szczegóły", "SSE.Views.PrintSettings.textShowGrid": "Pokaż linie siatki", diff --git a/apps/spreadsheeteditor/main/locale/ro.json b/apps/spreadsheeteditor/main/locale/ro.json index 1cd00ac47..4021b99d5 100644 --- a/apps/spreadsheeteditor/main/locale/ro.json +++ b/apps/spreadsheeteditor/main/locale/ro.json @@ -49,6 +49,7 @@ "Common.define.chartData.textSurface": "Suprafața", "Common.define.chartData.textWinLossSpark": "Câștig/pierdere", "Common.define.conditionalData.exampleText": "AaBbCcYyZz", + "Common.define.conditionalData.noFormatText": "Niciun format definit ", "Common.define.conditionalData.text1Above": "1 abatere standard deasupra", "Common.define.conditionalData.text1Below": "1 abatere standard dedesubt ", "Common.define.conditionalData.text2Above": "2 abateri standard deasupra", @@ -78,9 +79,16 @@ "Common.define.conditionalData.textGreaterEq": "Mai mare sau egal", "Common.define.conditionalData.textIconSets": "Ansamble de icoane", "Common.define.conditionalData.textLast7days": "În ultimele 7 zile", + "Common.define.conditionalData.textLastMonth": "Ultima lună", + "Common.define.conditionalData.textLastWeek": "Săptămâna anterioară", + "Common.define.conditionalData.textLess": "Mai mic decât", "Common.define.conditionalData.textLessEq": "Mai mic sau egal", + "Common.define.conditionalData.textNextMonth": "Luna următoare", + "Common.define.conditionalData.textNextWeek": "Săptămâna următoare", + "Common.define.conditionalData.textNotBetween": "nu între", "Common.define.conditionalData.textNotBlanks": "Nu conțime celule goale", "Common.define.conditionalData.textNotContains": "Nu conține", + "Common.define.conditionalData.textNotEqual": "Nu este egal cu", "Common.define.conditionalData.textNotErrors": "Nu conține erori", "Common.Translation.warnFileLocked": "Fișierul este editat într-o altă aplicație. Puteți continua să editați și să-l salvați ca o copie.", "Common.Translation.warnFileLockedBtnEdit": "Crează o copie", @@ -138,6 +146,7 @@ "Common.Views.AutoCorrectDialog.textAutoFormat": "Formatare automată la tastare", "Common.Views.AutoCorrectDialog.textBy": "După", "Common.Views.AutoCorrectDialog.textDelete": "Ștergere", + "Common.Views.AutoCorrectDialog.textHyperlink": "Căi Internet și de rețea cu hyperlink-uri", "Common.Views.AutoCorrectDialog.textMathCorrect": "Autocorecție matematică", "Common.Views.AutoCorrectDialog.textNewRowCol": "Inserare de rânduri și coloane noi în tabel", "Common.Views.AutoCorrectDialog.textRecognized": "Funcțiile recunoscute", @@ -221,6 +230,7 @@ "Common.Views.ListSettingsDialog.txtTitle": "Setări lista", "Common.Views.ListSettingsDialog.txtType": "Tip", "Common.Views.OpenDialog.closeButtonText": "Închide fișierul", + "Common.Views.OpenDialog.textInvalidRange": "Zona de celule nu este validă", "Common.Views.OpenDialog.txtAdvanced": "Avansat", "Common.Views.OpenDialog.txtColon": "Două puncte", "Common.Views.OpenDialog.txtComma": "Virgulă", @@ -1412,7 +1422,10 @@ "SSE.Views.CellSettings.textGradientColor": "Culoare", "SSE.Views.CellSettings.textGradientFill": "Umplere gradient", "SSE.Views.CellSettings.textIndent": "Indentare", + "SSE.Views.CellSettings.textItems": "Elemente", "SSE.Views.CellSettings.textLinear": "Liniar", + "SSE.Views.CellSettings.textManageRule": "Gestionare reguli", + "SSE.Views.CellSettings.textNewRule": "Nouă regilă", "SSE.Views.CellSettings.textNoFill": "Fără umplere", "SSE.Views.CellSettings.textOrientation": "Orientarea textului", "SSE.Views.CellSettings.textPattern": "Model", @@ -1636,6 +1649,7 @@ "SSE.Views.CreatePivotDialog.textTitle": "Creare tabel Pivot", "SSE.Views.CreatePivotDialog.txtEmpty": "Câmp obligatoriu", "SSE.Views.CreateSparklineDialog.textDestination": "Alegeți locul unde se va plasa diagrama sparkline", + "SSE.Views.CreateSparklineDialog.textInvalidRange": "Zona de celule nu este validă", "SSE.Views.CreateSparklineDialog.textTitle": "Creare diagrame sparkline", "SSE.Views.DataTab.capBtnGroup": "Grupare", "SSE.Views.DataTab.capBtnTextCustomSort": "Sortare particularizată", @@ -1797,6 +1811,7 @@ "SSE.Views.DocumentHolder.textMore": "Mai multe funcții", "SSE.Views.DocumentHolder.textMoreFormats": "Mai multe formate", "SSE.Views.DocumentHolder.textNone": "Niciunul", + "SSE.Views.DocumentHolder.textNumbering": "Numerotare", "SSE.Views.DocumentHolder.textReplace": "Înlocuire imagine", "SSE.Views.DocumentHolder.textRotate": "Rotire", "SSE.Views.DocumentHolder.textRotate270": "Rotire 90° în sens contrar acelor de ceasornic", @@ -1998,9 +2013,14 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtId": "Indoneziană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInch": "Inch", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtIt": "Italiană", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtJa": "Japoneză", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtKo": "Coreeană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLiveComment": "Afișare comentarii", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLo": "Laoțiană", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLv": "Letonă", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtMac": "ca OS X", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNative": "Sursă", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNb": "Norvegiană", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNl": "Neerlandeză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPl": "Poloneză", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Punct", @@ -2064,17 +2084,33 @@ "SSE.Views.FormatRulesEditDlg.textGradient": "Gradient", "SSE.Views.FormatRulesEditDlg.textIconStyle": "Stil icoană", "SSE.Views.FormatRulesEditDlg.textInsideBorders": "Borduri în interiorul ", + "SSE.Views.FormatRulesEditDlg.textInvalid": "Zona de date nevalidă.", "SSE.Views.FormatRulesEditDlg.textInvalidRange": "EROARE! Zonă de celule nu este validă", + "SSE.Views.FormatRulesEditDlg.textItalic": "Cursiv", "SSE.Views.FormatRulesEditDlg.textItem": "Element", + "SSE.Views.FormatRulesEditDlg.textLeft2Right": "De la stânga la dreapta", + "SSE.Views.FormatRulesEditDlg.textLeftBorders": "Bordură la stânga", + "SSE.Views.FormatRulesEditDlg.textLongBar": "bară cea mai lungă ", + "SSE.Views.FormatRulesEditDlg.textMaximum": "Maxim", + "SSE.Views.FormatRulesEditDlg.textMaxpoint": "Punct maxim", "SSE.Views.FormatRulesEditDlg.textMiddleBorders": "Bordurile orizontale în interiorul ", + "SSE.Views.FormatRulesEditDlg.textMidpoint": "Punct median", + "SSE.Views.FormatRulesEditDlg.textMinimum": "Minim", + "SSE.Views.FormatRulesEditDlg.textMinpoint": "Punct minim", + "SSE.Views.FormatRulesEditDlg.textNegative": "Negativ", "SSE.Views.FormatRulesEditDlg.textNewColor": "Adăugarea unei culori particularizate noi", + "SSE.Views.FormatRulesEditDlg.textNoBorders": "Fără borduri", + "SSE.Views.FormatRulesEditDlg.textNone": "Niciunul", "SSE.Views.FormatRulesEditDlg.tipBorders": "Borduri", + "SSE.Views.FormatRulesEditDlg.tipNumFormat": "Formatul de număr", "SSE.Views.FormatRulesEditDlg.txtAccounting": "Contabilitate", "SSE.Views.FormatRulesEditDlg.txtCurrency": "Monedă", "SSE.Views.FormatRulesEditDlg.txtDate": "Dată", "SSE.Views.FormatRulesEditDlg.txtFraction": "Fracție", "SSE.Views.FormatRulesEditDlg.txtGeneral": "General", + "SSE.Views.FormatRulesEditDlg.txtNumber": "Număr", "SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Editare regulă de formatare", + "SSE.Views.FormatRulesEditDlg.txtTitleNew": "Nouă regulă de formatare", "SSE.Views.FormatRulesManagerDlg.guestText": "Invitat", "SSE.Views.FormatRulesManagerDlg.text1Above": "1 abatere standard deasupra medie", "SSE.Views.FormatRulesManagerDlg.text1Below": "1 abatere standard sub medie", @@ -2086,12 +2122,14 @@ "SSE.Views.FormatRulesManagerDlg.textApply": "Se aplică la", "SSE.Views.FormatRulesManagerDlg.textBeginsWith": "Valoarea din celulă se începe cu", "SSE.Views.FormatRulesManagerDlg.textBelow": "Sub medie", + "SSE.Views.FormatRulesManagerDlg.textBetween": "este între {0} și {1}", "SSE.Views.FormatRulesManagerDlg.textCellValue": "Valoarea din celulă", "SSE.Views.FormatRulesManagerDlg.textColorScale": "Scală de culoare cu gradare ", "SSE.Views.FormatRulesManagerDlg.textContains": "Valoarea din celulă conține", "SSE.Views.FormatRulesManagerDlg.textContainsBlank": "Celula canține o valorae goală", "SSE.Views.FormatRulesManagerDlg.textContainsError": "Celula conține o eroare", "SSE.Views.FormatRulesManagerDlg.textDelete": "Ștergere", + "SSE.Views.FormatRulesManagerDlg.textDown": "Mutare regulă în jos", "SSE.Views.FormatRulesManagerDlg.textDuplicate": "Valori duble", "SSE.Views.FormatRulesManagerDlg.textEdit": "Editare", "SSE.Views.FormatRulesManagerDlg.textEnds": "Valoarea din celulă se termină cu", @@ -2099,11 +2137,14 @@ "SSE.Views.FormatRulesManagerDlg.textEqBelow": "Egal cu sau sub medie", "SSE.Views.FormatRulesManagerDlg.textFormat": "Formatare", "SSE.Views.FormatRulesManagerDlg.textIconSet": "Ansamblul de icoane", + "SSE.Views.FormatRulesManagerDlg.textNew": "Nou", + "SSE.Views.FormatRulesManagerDlg.textNotBetween": "nu este între {0} și {1}", "SSE.Views.FormatRulesManagerDlg.textNotContains": "Valoarea din celulă nu conține", "SSE.Views.FormatRulesManagerDlg.textNotContainsBlank": "Celula nu conține nicio valoare goală", "SSE.Views.FormatRulesManagerDlg.textNotContainsError": "Celula nu conține nicio eroare", "SSE.Views.FormatRulesManagerDlg.textSelection": "Selecția curentă", "SSE.Views.FormatRulesManagerDlg.textThisTable": "Acest tabel", + "SSE.Views.FormatRulesManagerDlg.textUp": "Mutare regulă în sus", "SSE.Views.FormatRulesManagerDlg.txtTitle": "Formatarea condiționată", "SSE.Views.FormatSettingsDialog.textCategory": "Categorie", "SSE.Views.FormatSettingsDialog.textDecimal": "Zecimal", @@ -2269,6 +2310,7 @@ "SSE.Views.LeftMenu.txtLimit": "Limitare acces", "SSE.Views.LeftMenu.txtTrial": "PERIOADĂ DE PROBĂ", "SSE.Views.LeftMenu.txtTrialDev": "Mod dezvoltator de încercare", + "SSE.Views.MacroDialog.textMacro": "Nume macro", "SSE.Views.MacroDialog.textTitle": "Asocierea macrocomenzii", "SSE.Views.MainSettingsPrint.okButtonText": "Salvează", "SSE.Views.MainSettingsPrint.strBottom": "Jos", @@ -3032,9 +3074,11 @@ "SSE.Views.Toolbar.textInsideBorders": "Borduri în interiorul ", "SSE.Views.Toolbar.textInsRight": "Deplasare celule la dreapta", "SSE.Views.Toolbar.textItalic": "Cursiv", + "SSE.Views.Toolbar.textItems": "Elemente", "SSE.Views.Toolbar.textLandscape": "Vedere", "SSE.Views.Toolbar.textLeft": "Stânga:", "SSE.Views.Toolbar.textLeftBorders": "Bordură la stânga", + "SSE.Views.Toolbar.textManageRule": "Gestionare reguli", "SSE.Views.Toolbar.textManyPages": "pagini", "SSE.Views.Toolbar.textMarginsLast": "Ultima setare particularizată", "SSE.Views.Toolbar.textMarginsNarrow": "Îngust", @@ -3044,6 +3088,7 @@ "SSE.Views.Toolbar.textMoreFormats": "Mai multe formate", "SSE.Views.Toolbar.textMorePages": "Mai multe pagini", "SSE.Views.Toolbar.textNewColor": "Сuloare particularizată", + "SSE.Views.Toolbar.textNewRule": "Nouă regulă", "SSE.Views.Toolbar.textNoBorders": "Fără borduri", "SSE.Views.Toolbar.textOnePage": "pagina", "SSE.Views.Toolbar.textOutBorders": "Borduri în exteriorul", diff --git a/apps/spreadsheeteditor/main/locale/ru.json b/apps/spreadsheeteditor/main/locale/ru.json index 50946ceb9..273b2c7e8 100644 --- a/apps/spreadsheeteditor/main/locale/ru.json +++ b/apps/spreadsheeteditor/main/locale/ru.json @@ -983,7 +983,7 @@ "SSE.Controllers.Main.unsupportedBrowserErrorText": "Ваш браузер не поддерживается.", "SSE.Controllers.Main.uploadImageExtMessage": "Неизвестный формат изображения.", "SSE.Controllers.Main.uploadImageFileCountMessage": "Ни одного изображения не загружено.", - "SSE.Controllers.Main.uploadImageSizeMessage": "Превышен максимальный размер изображения.", + "SSE.Controllers.Main.uploadImageSizeMessage": "Слишком большое изображение. Максимальный размер - 25 MB.", "SSE.Controllers.Main.uploadImageTextText": "Загрузка изображения...", "SSE.Controllers.Main.uploadImageTitleText": "Загрузка изображения", "SSE.Controllers.Main.waitText": "Пожалуйста, подождите...", @@ -2087,7 +2087,7 @@ "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Общие", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Параметры страницы", "SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Проверка орфографии", - "SSE.Views.FormatRulesEditDlg.fillColor": "Цвет фона", + "SSE.Views.FormatRulesEditDlg.fillColor": "Цвет заливки", "SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Внимание", "SSE.Views.FormatRulesEditDlg.text2Scales": "Двухцветная шкала", "SSE.Views.FormatRulesEditDlg.text3Scales": "Трехцветная шкала", @@ -3263,7 +3263,7 @@ "SSE.Views.Toolbar.tipPageOrient": "Ориентация страницы", "SSE.Views.Toolbar.tipPageSize": "Размер страницы", "SSE.Views.Toolbar.tipPaste": "Вставить", - "SSE.Views.Toolbar.tipPrColor": "Цвет фона", + "SSE.Views.Toolbar.tipPrColor": "Цвет заливки", "SSE.Views.Toolbar.tipPrint": "Печать", "SSE.Views.Toolbar.tipPrintArea": "Область печати", "SSE.Views.Toolbar.tipPrintTitles": "Печатать заголовки", From b8a660068f2b4fe345fd39ca9bfaf96167d72a02 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Tue, 13 Jul 2021 12:02:06 +0300 Subject: [PATCH 266/376] Hint Manager: add timer, disable processing of other shortcuts when hints are visible --- apps/common/main/lib/component/HintManager.js | 9 ++++++++- apps/common/main/lib/core/keymaster.js | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index 7102b883d..0010918b2 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -60,7 +60,8 @@ Common.UI.HintManager = new(function() { _currentHints = [], _inputLetters = '', _isComplete = false, - _isLockedKeyEvents = false; + _isLockedKeyEvents = false, + _inputTimer; var _api; @@ -96,6 +97,11 @@ Common.UI.HintManager = new(function() { _currentHints.forEach(function(item) { item.show(); }); + _inputTimer = setInterval(function () { + if (_inputLetters.length > 0) { + _inputLetters = ''; + } + }, 5000); } else { _hintVisible = false; } @@ -106,6 +112,7 @@ Common.UI.HintManager = new(function() { _currentHints && _currentHints.forEach(function(item) { item.hide() }); + clearInterval(_inputTimer); }; var _nextLevel = function() { diff --git a/apps/common/main/lib/core/keymaster.js b/apps/common/main/lib/core/keymaster.js index f6d05de70..4feedd4a0 100644 --- a/apps/common/main/lib/core/keymaster.js +++ b/apps/common/main/lib/core/keymaster.js @@ -71,6 +71,8 @@ var key, handler, k, i, modifiersMatch, scope; key = event.keyCode; + if (key !== 27 && Common.UI.HintManager.isHintVisible()) return; + if (index(_downKeys, key) == -1) { _downKeys.push(key); } @@ -105,8 +107,6 @@ for(k in _mods) if((!_mods[k] && index(handler.mods, +k) > -1) || (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false; - if (modifiersMatch) - Common.NotificationCenter.trigger('hints:clear'); // call the handler and stop the event if neccessary if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ if(locked===true || handler.locked || handler.method(event, handler)===false){ From 2ae5c222f573fd8121415cb878899448bc71c260 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Tue, 13 Jul 2021 14:14:08 +0300 Subject: [PATCH 267/376] [DE mobile] Make encoding --- apps/documenteditor/mobile/locale/en.json | 5 +- .../src/controller/settings/Download.jsx | 127 +++++++++--------- .../src/controller/settings/Encoding.jsx | 25 ++++ .../mobile/src/store/encoding.js | 44 ++++++ .../mobile/src/store/mainStore.js | 2 + .../mobile/src/view/settings/Encoding.jsx | 60 +++++++++ .../mobile/src/view/settings/Settings.jsx | 10 ++ 7 files changed, 211 insertions(+), 62 deletions(-) create mode 100644 apps/documenteditor/mobile/src/controller/settings/Encoding.jsx create mode 100644 apps/documenteditor/mobile/src/store/encoding.js create mode 100644 apps/documenteditor/mobile/src/view/settings/Encoding.jsx diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index bbd70cc3f..5604188d0 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -340,7 +340,10 @@ "textMarginsW": "Left and right margins are too high for a given page width", "textMarginsH": "Top and bottom margins are too high for a given page height", "textCollaboration": "Collaboration", - "textFindAndReplaceAll": "Find and Replace All" + "textFindAndReplaceAll": "Find and Replace All", + "textChooseTxtOptions": "Choose TXT Options", + "txtDownloadTxt": "Download TXT", + "textChooseEncoding": "Choose Encoding" }, "Edit": { "textClose": "Close", diff --git a/apps/documenteditor/mobile/src/controller/settings/Download.jsx b/apps/documenteditor/mobile/src/controller/settings/Download.jsx index 81cfa0dfe..2b1cfb2d1 100644 --- a/apps/documenteditor/mobile/src/controller/settings/Download.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/Download.jsx @@ -25,7 +25,6 @@ class DownloadController extends Component { const _t = t("Settings", { returnObjects: true }); if(format) { - this.closeModal(); if (format == Asc.c_oAscFileType.TXT || format == Asc.c_oAscFileType.RTF) { f7.dialog.confirm( (format === Asc.c_oAscFileType.TXT) ? _t.textDownloadTxt : _t.textDownloadRtf, @@ -33,9 +32,13 @@ class DownloadController extends Component { () => { if (format == Asc.c_oAscFileType.TXT) { const isDocReady = this.props.storeAppOptions.isDocReady; - onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.TXT, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t, isDocReady, isDRM); + const advOptions = api.asc_getAdvancedOptions(); + + this.props.storeEncoding.initOptions({type: Asc.c_oAscAdvancedOptionsID.TXT, advOptions, formatOptions: new Asc.asc_CDownloadOptions(format)}); + onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.TXT, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t, isDocReady); } else { + this.closeModal(); setTimeout(() => { api.asc_DownloadAs(new Asc.asc_CDownloadOptions(format)); }, 400); @@ -44,6 +47,7 @@ class DownloadController extends Component { ); } else { + this.closeModal(); setTimeout(() => { api.asc_DownloadAs(new Asc.asc_CDownloadOptions(format)); }, 400); @@ -58,71 +62,72 @@ class DownloadController extends Component { } } -const DownloadWithTranslation = inject("storeAppOptions")(observer(withTranslation()(DownloadController))); +const DownloadWithTranslation = inject("storeAppOptions", "storeEncoding")(observer(withTranslation()(DownloadController))); const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady, canRequestClose, isDRM) => { if ($$('.dlg-adv-options.modal-in').length > 0) return; const api = Common.EditorApi.get(); if (type == Asc.c_oAscAdvancedOptionsID.TXT) { - let picker; - const pages = []; - const pagesName = []; - for (let page of advOptions.asc_getCodePages()) { - pages.push(page.asc_getCodePage()); - pagesName.push(page.asc_getCodePageName()); - } - Common.Notifications.trigger('preloader:close'); - Common.Notifications.trigger('preloader:endAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256, true); - const buttons = []; - if (mode === 2) { - buttons.push({ - text: _t.textCancel - }); - } - buttons.push({ - text: 'OK', - bold: true, - onClick: function() { - const encoding = picker.value; - if (mode==2) { - formatOptions && formatOptions.asc_setAdvancedOptions(new Asc.asc_CTextOptions(encoding)); - api.asc_DownloadAs(formatOptions); - } else { - api.asc_setAdvancedOptions(type, new Asc.asc_CTextOptions(encoding)); - } - if (!isDocReady) { - Common.Notifications.trigger('preloader:beginAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256); - } - } - }); - const dialog = f7.dialog.create({ - title: _t.advTxtOptions, - text: '', - content: - '
    ' + - '
    ' + - '
    ' + _t.textEncoding + '
    ' + - '
    ' + - '
    ' + - '
    ', - buttons: buttons, - cssClass: 'dlg-adv-options' - }).open(); - dialog.on('opened', () => { - picker = f7.picker.create({ - containerEl: document.getElementById('txt-encoding'), - cols: [ - { - values: pages, - displayValues: pagesName - } - ], - toolbar: false, - rotateEffect: true, - value: [advOptions.asc_getRecommendedSettings().asc_getCodePage()], - }); - }); + f7.views.current.router.navigate('/encoding/'); + // let picker; + // const pages = []; + // const pagesName = []; + // for (let page of advOptions.asc_getCodePages()) { + // pages.push(page.asc_getCodePage()); + // pagesName.push(page.asc_getCodePageName()); + // } + // Common.Notifications.trigger('preloader:close'); + // Common.Notifications.trigger('preloader:endAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256, true); + // const buttons = []; + // if (mode === 2) { + // buttons.push({ + // text: _t.textCancel + // }); + // } + // buttons.push({ + // text: 'OK', + // bold: true, + // onClick: function() { + // const encoding = picker.value; + // if (mode==2) { + // formatOptions && formatOptions.asc_setAdvancedOptions(new Asc.asc_CTextOptions(encoding)); + // api.asc_DownloadAs(formatOptions); + // } else { + // api.asc_setAdvancedOptions(type, new Asc.asc_CTextOptions(encoding)); + // } + // if (!isDocReady) { + // Common.Notifications.trigger('preloader:beginAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256); + // } + // } + // }); + // const dialog = f7.dialog.create({ + // title: _t.advTxtOptions, + // text: '', + // content: + // '
    ' + + // '
    ' + + // '
    ' + _t.textEncoding + '
    ' + + // '
    ' + + // '
    ' + + // '
    ', + // buttons: buttons, + // cssClass: 'dlg-adv-options' + // }).open(); + // dialog.on('opened', () => { + // picker = f7.picker.create({ + // containerEl: document.getElementById('txt-encoding'), + // cols: [ + // { + // values: pages, + // displayValues: pagesName + // } + // ], + // toolbar: false, + // rotateEffect: true, + // value: [advOptions.asc_getRecommendedSettings().asc_getCodePage()], + // }); + // }); } else if (type == Asc.c_oAscAdvancedOptionsID.DRM) { Common.Notifications.trigger('preloader:close'); Common.Notifications.trigger('preloader:endAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256, true); diff --git a/apps/documenteditor/mobile/src/controller/settings/Encoding.jsx b/apps/documenteditor/mobile/src/controller/settings/Encoding.jsx new file mode 100644 index 000000000..f594149bf --- /dev/null +++ b/apps/documenteditor/mobile/src/controller/settings/Encoding.jsx @@ -0,0 +1,25 @@ +import React, { Component } from 'react'; +import { Device } from '../../../../../common/mobile/utils/device'; +import { f7, Page, Navbar, List, ListItem, BlockTitle, ListButton, Popover, Popup } from "framework7-react"; +import { withTranslation } from 'react-i18next'; +import { observer, inject } from "mobx-react"; +import { Encoding } from "../../view/settings/Encoding"; + +class EncodingController extends Component { + constructor(props) { + super(props); + } + + onSaveFormat(type, value) { + const api = Common.EditorApi.get(); + api.asc_setAdvancedOptions(type, new Asc.asc_CTextOptions(value)); + } + + render() { + return ( + + ); + } +} + +export default EncodingController; \ No newline at end of file diff --git a/apps/documenteditor/mobile/src/store/encoding.js b/apps/documenteditor/mobile/src/store/encoding.js new file mode 100644 index 000000000..03b8b6fa4 --- /dev/null +++ b/apps/documenteditor/mobile/src/store/encoding.js @@ -0,0 +1,44 @@ +import {action, observable, makeObservable} from 'mobx'; + +export class storeEncoding { + constructor() { + makeObservable(this, { + type: observable, + advOptions: observable, + formatOptions: observable, + pages: observable, + pagesName: observable, + initOptions: action, + valueEncoding: observable, + nameEncoding: observable, + initPages: action, + changeEncoding: action + }); + } + + pages = []; + pagesName = []; + type; + advOptions; + formatOptions; + valueEncoding; + nameEncoding; + + initOptions ({type, advOptions, formatOptions}) { + this.type= type; + this.advOptions = advOptions; + this.formatOptions = formatOptions; + } + + initPages() { + for (let page of this.advOptions.asc_getCodePages()) { + this.pages.push(page.asc_getCodePage()); + this.pagesName.push(page.asc_getCodePageName()); + } + } + + changeEncoding(value) { + this.nameEncoding = this.pagesName[this.pages.indexOf(value)]; + this.valueEncoding = value; + } +} diff --git a/apps/documenteditor/mobile/src/store/mainStore.js b/apps/documenteditor/mobile/src/store/mainStore.js index 57fa6ee88..d649831f6 100644 --- a/apps/documenteditor/mobile/src/store/mainStore.js +++ b/apps/documenteditor/mobile/src/store/mainStore.js @@ -10,6 +10,7 @@ import {storeTableSettings} from "./tableSettings"; import {storeChartSettings} from "./chartSettings"; import {storeDocumentInfo} from "./documentInfo"; import {storeApplicationSettings} from './applicationSettings'; +import {storeEncoding} from "./encoding"; import {storeAppOptions} from "./appOptions"; import {storePalette} from "./palette"; import {storeReview} from "./review"; @@ -20,6 +21,7 @@ export const stores = { storeFocusObjects: new storeFocusObjects(), storeDocumentSettings: new storeDocumentSettings(), users: new storeUsers(), + storeEncoding: new storeEncoding(), storeTextSettings: new storeTextSettings(), storeParagraphSettings: new storeParagraphSettings(), storeShapeSettings: new storeShapeSettings(), diff --git a/apps/documenteditor/mobile/src/view/settings/Encoding.jsx b/apps/documenteditor/mobile/src/view/settings/Encoding.jsx new file mode 100644 index 000000000..7fc6330fc --- /dev/null +++ b/apps/documenteditor/mobile/src/view/settings/Encoding.jsx @@ -0,0 +1,60 @@ +import React from 'react'; +import { observer, inject } from "mobx-react"; +import { f7, Page, Navbar, List, ListItem, BlockTitle, ListButton } from "framework7-react"; +import { useTranslation } from "react-i18next"; + +const PageEncoding = props => { + const { t } = useTranslation(); + const _t = t("Settings", { returnObjects: true }); + const storeEncoding = props.storeEncoding; + const nameEncoding = storeEncoding.nameEncoding; + const type = storeEncoding.type; + storeEncoding.initPages(); + const advOptions = storeEncoding.advOptions; + const pagesName = storeEncoding.pagesName; + + return ( + + + {_t.textEncoding} + + + + + props.onSaveFormat(type, storeEncoding.valueEncoding)}> + + + ) +} + +const PageEncodingList = props => { + const { t } = useTranslation(); + const _t = t("Settings", { returnObjects: true }); + const storeEncoding = props.storeEncoding; + const encoding = storeEncoding.encoding; + // const advOptions = storeEncoding.advOptions; + const pages = storeEncoding.pages; + const pagesName = storeEncoding.pagesName; + + return ( + + + {_t.textChooseEncoding} + + {pagesName.map((name, index) => { + return ( + { + storeEncoding.changeEncoding(pages[index]); + f7.views.current.router.back(); + }}> + ) + })} + + + ) +} + +const Encoding = inject("storeEncoding")(observer(PageEncoding)); +const EncodingList = inject("storeEncoding")(observer(PageEncodingList)); + +export {EncodingList, Encoding} \ No newline at end of file diff --git a/apps/documenteditor/mobile/src/view/settings/Settings.jsx b/apps/documenteditor/mobile/src/view/settings/Settings.jsx index 93f40c4aa..48a930fcb 100644 --- a/apps/documenteditor/mobile/src/view/settings/Settings.jsx +++ b/apps/documenteditor/mobile/src/view/settings/Settings.jsx @@ -12,6 +12,8 @@ import ApplicationSettingsController from "../../controller/settings/Application import { DocumentFormats, DocumentMargins, DocumentColorSchemes } from "./DocumentSettings"; import { MacrosSettings } from "./ApplicationSettings"; import About from '../../../../../common/mobile/lib/view/About'; +import EncodingController from '../../controller/settings/Encoding'; +import { EncodingList } from '../../view/settings/Encoding'; const routes = [ { @@ -53,6 +55,14 @@ const routes = [ { path: '/about/', component: About + }, + { + path: '/encoding/', + component: EncodingController + }, + { + path: '/encoding-list/', + component: EncodingList } ]; From 7eabfe94af07f544e6a9be4a78cb762e1a095b1b Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Tue, 13 Jul 2021 14:43:54 +0300 Subject: [PATCH 268/376] Hint Manager: add example usage --- apps/common/main/lib/component/HintManager.js | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/apps/common/main/lib/component/HintManager.js b/apps/common/main/lib/component/HintManager.js index 0010918b2..b97fbb8cf 100644 --- a/apps/common/main/lib/component/HintManager.js +++ b/apps/common/main/lib/component/HintManager.js @@ -38,6 +38,59 @@ * */ +/** + * Example usage with simple items: + * + * + * + * + * Example usage with components: + * + * new Common.UI.Button({ + * ... + * dataHint: '1', // '0' - tabs in toolbar, left and right menu, statusbar; + * // '1' - file menu, contents of toolbar tabs, contents of right and left panels + * dataHintDirection: 'bottom', // top, bottom, right, left, left-top + * dataHintOffset: 'small', // big - 6px, medium - 4px, small - 2px + * dataHintTitle : 'S' + * }); + * + * new Common.UI.CheckBox({ + * ... + * dataHint: '1', + * dataHintDirection: 'left', + * dataHintOffset: 'small' + * }); + * + * new Common.UI.ComboBox({ + * ... + * dataHint: '1', + * dataHintDirection: 'bottom', + * dataHintOffset: 'big' + * }); + * + * new Common.UI.InputField({ + * ... + * dataHint: '1', + * dataHintDirection: 'left', + * dataHintOffset: 'small' + * }); + * + * new Common.UI.MetricSpinner({ + * ... + * dataHint: '1', + * dataHintDirection: 'bottom', + * dataHintOffset: 'big' + * }); + * + * new Common.UI.RadioBox({ + * ... + * dataHint: '1', + * dataHintDirection: 'left', + * dataHintOffset: 'small' + * }); + */ + if (Common === undefined) var Common = {}; From 5f2b4ad4a1c19c4bf53fa8d99488b0332a2e20cf Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Tue, 13 Jul 2021 15:50:55 +0300 Subject: [PATCH 269/376] [mobile] Fix bug 51268 --- .../common/mobile/lib/controller/collaboration/Comments.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/common/mobile/lib/controller/collaboration/Comments.jsx b/apps/common/mobile/lib/controller/collaboration/Comments.jsx index 93fc3eede..1a43a0825 100644 --- a/apps/common/mobile/lib/controller/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/controller/collaboration/Comments.jsx @@ -457,7 +457,11 @@ class ViewCommentsController extends Component { }); } closeViewCurComments () { - f7.sheet.close('#view-comment-sheet'); + if (Device.phone) { + f7.sheet.close('#view-comment-sheet'); + } else { + f7.popover.close('#view-comment-popover'); + } this.setState({isOpenViewCurComments: false}); } onResolveComment (comment) { From de1ac14073acc2a38d98a69fe15fd11581b8e7b2 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Tue, 13 Jul 2021 17:09:20 +0300 Subject: [PATCH 270/376] [DE mobile] Added encoding options --- .../src/controller/settings/Download.jsx | 68 ++----------------- .../src/controller/settings/Encoding.jsx | 20 ++++-- .../mobile/src/view/settings/Encoding.jsx | 13 ++-- 3 files changed, 25 insertions(+), 76 deletions(-) diff --git a/apps/documenteditor/mobile/src/controller/settings/Download.jsx b/apps/documenteditor/mobile/src/controller/settings/Download.jsx index 2b1cfb2d1..06b13bb85 100644 --- a/apps/documenteditor/mobile/src/controller/settings/Download.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/Download.jsx @@ -31,11 +31,12 @@ class DownloadController extends Component { _t.notcriticalErrorTitle, () => { if (format == Asc.c_oAscFileType.TXT) { - const isDocReady = this.props.storeAppOptions.isDocReady; const advOptions = api.asc_getAdvancedOptions(); this.props.storeEncoding.initOptions({type: Asc.c_oAscAdvancedOptionsID.TXT, advOptions, formatOptions: new Asc.asc_CDownloadOptions(format)}); - onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.TXT, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t, isDocReady); + this.props.storeEncoding.initPages(); + this.props.storeEncoding.changeEncoding(advOptions.asc_getRecommendedSettings().asc_getCodePage()); + f7.views.current.router.navigate('/encoding/'); } else { this.closeModal(); @@ -68,67 +69,8 @@ const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, isDocReady if ($$('.dlg-adv-options.modal-in').length > 0) return; const api = Common.EditorApi.get(); - if (type == Asc.c_oAscAdvancedOptionsID.TXT) { - f7.views.current.router.navigate('/encoding/'); - // let picker; - // const pages = []; - // const pagesName = []; - // for (let page of advOptions.asc_getCodePages()) { - // pages.push(page.asc_getCodePage()); - // pagesName.push(page.asc_getCodePageName()); - // } - // Common.Notifications.trigger('preloader:close'); - // Common.Notifications.trigger('preloader:endAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256, true); - // const buttons = []; - // if (mode === 2) { - // buttons.push({ - // text: _t.textCancel - // }); - // } - // buttons.push({ - // text: 'OK', - // bold: true, - // onClick: function() { - // const encoding = picker.value; - // if (mode==2) { - // formatOptions && formatOptions.asc_setAdvancedOptions(new Asc.asc_CTextOptions(encoding)); - // api.asc_DownloadAs(formatOptions); - // } else { - // api.asc_setAdvancedOptions(type, new Asc.asc_CTextOptions(encoding)); - // } - // if (!isDocReady) { - // Common.Notifications.trigger('preloader:beginAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256); - // } - // } - // }); - // const dialog = f7.dialog.create({ - // title: _t.advTxtOptions, - // text: '', - // content: - // '
    ' + - // '
    ' + - // '
    ' + _t.textEncoding + '
    ' + - // '
    ' + - // '
    ' + - // '
    ', - // buttons: buttons, - // cssClass: 'dlg-adv-options' - // }).open(); - // dialog.on('opened', () => { - // picker = f7.picker.create({ - // containerEl: document.getElementById('txt-encoding'), - // cols: [ - // { - // values: pages, - // displayValues: pagesName - // } - // ], - // toolbar: false, - // rotateEffect: true, - // value: [advOptions.asc_getRecommendedSettings().asc_getCodePage()], - // }); - // }); - } else if (type == Asc.c_oAscAdvancedOptionsID.DRM) { + + if (type == Asc.c_oAscAdvancedOptionsID.DRM) { Common.Notifications.trigger('preloader:close'); Common.Notifications.trigger('preloader:endAction', Asc.c_oAscAsyncActionType['BlockInteraction'], -256, true); const buttons = [{ diff --git a/apps/documenteditor/mobile/src/controller/settings/Encoding.jsx b/apps/documenteditor/mobile/src/controller/settings/Encoding.jsx index f594149bf..2a272aa64 100644 --- a/apps/documenteditor/mobile/src/controller/settings/Encoding.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/Encoding.jsx @@ -1,18 +1,28 @@ import React, { Component } from 'react'; import { Device } from '../../../../../common/mobile/utils/device'; -import { f7, Page, Navbar, List, ListItem, BlockTitle, ListButton, Popover, Popup } from "framework7-react"; -import { withTranslation } from 'react-i18next'; -import { observer, inject } from "mobx-react"; +import { f7 } from "framework7-react"; import { Encoding } from "../../view/settings/Encoding"; class EncodingController extends Component { constructor(props) { super(props); + this.onSaveFormat = this.onSaveFormat.bind(this); } - onSaveFormat(type, value) { + closeModal() { + if (Device.phone) { + f7.sheet.close('.settings-popup', true); + } else { + f7.popover.close('#settings-popover'); + } + } + + onSaveFormat(formatOptions, value) { const api = Common.EditorApi.get(); - api.asc_setAdvancedOptions(type, new Asc.asc_CTextOptions(value)); + + this.closeModal(); + formatOptions && formatOptions.asc_setAdvancedOptions(new Asc.asc_CTextOptions(value)); + api.asc_DownloadAs(formatOptions); } render() { diff --git a/apps/documenteditor/mobile/src/view/settings/Encoding.jsx b/apps/documenteditor/mobile/src/view/settings/Encoding.jsx index 7fc6330fc..f4acd2bd4 100644 --- a/apps/documenteditor/mobile/src/view/settings/Encoding.jsx +++ b/apps/documenteditor/mobile/src/view/settings/Encoding.jsx @@ -7,11 +7,9 @@ const PageEncoding = props => { const { t } = useTranslation(); const _t = t("Settings", { returnObjects: true }); const storeEncoding = props.storeEncoding; + const valueEncoding= storeEncoding.valueEncoding; const nameEncoding = storeEncoding.nameEncoding; - const type = storeEncoding.type; - storeEncoding.initPages(); - const advOptions = storeEncoding.advOptions; - const pagesName = storeEncoding.pagesName; + const formatOptions = storeEncoding.formatOptions; return ( @@ -21,7 +19,7 @@ const PageEncoding = props => { - props.onSaveFormat(type, storeEncoding.valueEncoding)}> + props.onSaveFormat(formatOptions, valueEncoding)}> ) @@ -31,8 +29,7 @@ const PageEncodingList = props => { const { t } = useTranslation(); const _t = t("Settings", { returnObjects: true }); const storeEncoding = props.storeEncoding; - const encoding = storeEncoding.encoding; - // const advOptions = storeEncoding.advOptions; + const valueEncoding = storeEncoding.valueEncoding; const pages = storeEncoding.pages; const pagesName = storeEncoding.pagesName; @@ -43,7 +40,7 @@ const PageEncodingList = props => { {pagesName.map((name, index) => { return ( - { + { storeEncoding.changeEncoding(pages[index]); f7.views.current.router.back(); }}> From ad2926db4324306eb82168e68e771bdc1541e05a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 13 Jul 2021 22:08:32 +0300 Subject: [PATCH 271/376] [SSE] Add "no icon" to format rule. Fix Bug 51270 --- .../app/template/FormatRulesEditDlg.template | 30 ++++---- .../main/app/view/FormatRulesEditDlg.js | 74 +++++++++++++------ apps/spreadsheeteditor/main/locale/en.json | 1 + 3 files changed, 67 insertions(+), 38 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template b/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template index 5b818504b..4cdebbce4 100644 --- a/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template +++ b/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template @@ -162,45 +162,45 @@
    diff --git a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js index a5bc7b4b9..595b61f68 100644 --- a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js +++ b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js @@ -662,7 +662,9 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', type : i, template: _.template([ '' @@ -673,6 +675,7 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', style: 'min-width: 105px;', additionalAlign: this.menuAddAlign, items: [ + { caption: this.txtNoCellIcon, checkable: true, allowDepress: false, toggleGroup: 'no-cell-icons-' + (i+1) }, { template: _.template('
    ') } ] })).render($('#format-rules-combo-icon-' + (i+1))); @@ -684,10 +687,12 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', itemTemplate: _.template(''), type : i }); - picker.on('item:click', _.bind(this.onSelectIcon, this, combo)); + picker.on('item:click', _.bind(this.onSelectIcon, this, combo, menu.items[0])); + menu.items[0].on('toggle', _.bind(this.onSelectNoIcon, this, combo, picker)); this.iconsControls[i].cmbIcons = combo; this.iconsControls[i].pickerIcons = picker; + this.iconsControls[i].itemNoIcons = menu.items[0]; combo = new Common.UI.ComboBox({ el : $('#format-rules-edit-combo-op-' + (i+1)), @@ -1429,19 +1434,26 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', value.asc_setGte(controls.cmbOperator.getValue()); values.push(value); if (icons) { - var icon = controls.pickerIcons.getSelectedRec().get('value')+1; - for (var k=0; k0) { this.cmbIconsPresets.setValue(this.textCustom); _.each(icons, function(item) { - iconsIndexes.push(me.collectionPresets.at(item.asc_getIconSet()).get('icons')[item.asc_getIconId()]); + if (item.asc_getIconSet()==Asc.EIconSetType.NoIcons) { + iconsIndexes.push(-1); + } else + iconsIndexes.push(me.collectionPresets.at(item.asc_getIconSet()).get('icons')[item.asc_getIconId()]); }); } else { this.cmbIconsPresets.setValue(iconSet); @@ -1870,8 +1885,9 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', var len = iconsIndexes.length; for (var i=0; i div'); formcontrol.css('background-image', record ? 'url(' + record.get('imgUrl') + ')' : ''); + formcontrol.text(record ? '' : this.txtNoCellIcon); }, isRangeValid: function() { @@ -2191,7 +2218,8 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', textInvalid: 'Invalid data range.', textClear: 'Clear', textItem: 'Item', - textPresets: 'Presets' + textPresets: 'Presets', + txtNoCellIcon: 'No Icon' }, SSE.Views.FormatRulesEditDlg || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 43ce5002c..59f3f6372 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -2188,6 +2188,7 @@ "SSE.Views.FormatRulesEditDlg.txtTime": "Time", "SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Edit Formatting Rule", "SSE.Views.FormatRulesEditDlg.txtTitleNew": "New Formatting Rule", + "SSE.Views.FormatRulesEditDlg.txtNoCellIcon": "No Icon", "SSE.Views.FormatRulesManagerDlg.guestText": "Guest", "SSE.Views.FormatRulesManagerDlg.text1Above": "1 std dev above average", "SSE.Views.FormatRulesManagerDlg.text1Below": "1 std dev below average", From ef6b13059b904aff182302e9f56dca2cfc3b6e60 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 13 Jul 2021 22:30:34 +0300 Subject: [PATCH 272/376] [SSE] Refactoring --- .../app/template/FormatRulesEditDlg.template | 20 +++++++++---------- .../main/app/view/FormatRulesEditDlg.js | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template b/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template index 4cdebbce4..f5a40a45a 100644 --- a/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template +++ b/apps/spreadsheeteditor/main/app/template/FormatRulesEditDlg.template @@ -161,8 +161,8 @@ -
    @@ -170,8 +170,8 @@ -
    @@ -179,8 +179,8 @@ -
    @@ -188,8 +188,8 @@ -
    @@ -197,8 +197,8 @@ -
    diff --git a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js index 595b61f68..07fc6fbe3 100644 --- a/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js +++ b/apps/spreadsheeteditor/main/app/view/FormatRulesEditDlg.js @@ -662,8 +662,8 @@ define([ 'text!spreadsheeteditor/main/app/template/FormatRulesEditDlg.template', type : i, template: _.template([ ' + +

    Example: Stacked-to-horizontal

    +

    Using a single set of .col-md-* grid classes, you can create a basic grid system that starts out stacked on mobile devices and tablet devices (the extra small to small range) before becoming horizontal on desktop (medium) devices. Place grid columns in any .row.

    +
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    +
    +
    .col-md-8
    +
    .col-md-4
    +
    +
    +
    .col-md-4
    +
    .col-md-4
    +
    .col-md-4
    +
    +
    +
    .col-md-6
    +
    .col-md-6
    +
    +{% highlight html %} +
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    .col-md-1
    +
    +
    +
    .col-md-8
    +
    .col-md-4
    +
    +
    +
    .col-md-4
    +
    .col-md-4
    +
    .col-md-4
    +
    +
    +
    .col-md-6
    +
    .col-md-6
    +
    +{% endhighlight %} + +

    Example: Fluid container

    +

    Turn any fixed-width grid layout into a full-width layout by changing your outermost .container to .container-fluid.

    +{% highlight html %} +
    +
    + ... +
    +
    +{% endhighlight %} + +

    Example: Mobile and desktop

    +

    Don't want your columns to simply stack in smaller devices? Use the extra small and medium device grid classes by adding .col-xs-* .col-md-* to your columns. See the example below for a better idea of how it all works.

    +
    +
    .col-xs-12 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6
    +
    .col-xs-6
    +
    +{% highlight html %} + +
    +
    .col-xs-12 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    + + +
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    + + +
    +
    .col-xs-6
    +
    .col-xs-6
    +
    +{% endhighlight %} + +

    Example: Mobile, tablet, desktop

    +

    Build on the previous example by creating even more dynamic and powerful layouts with tablet .col-sm-* classes.

    +
    +
    .col-xs-12 .col-sm-6 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-sm-4
    +
    .col-xs-6 .col-sm-4
    + +
    +
    .col-xs-6 .col-sm-4
    +
    +{% highlight html %} +
    +
    .col-xs-12 .col-sm-6 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-sm-4
    +
    .col-xs-6 .col-sm-4
    + +
    +
    .col-xs-6 .col-sm-4
    +
    +{% endhighlight %} + +

    Example: Column wrapping

    +

    If more than 12 columns are placed within a single row, each group of extra columns will, as one unit, wrap onto a new line.

    +
    +
    .col-xs-9
    +
    .col-xs-4
    Since 9 + 4 = 13 > 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.
    +
    .col-xs-6
    Subsequent columns continue along the new line.
    +
    +{% highlight html %} +
    +
    .col-xs-9
    +
    .col-xs-4
    Since 9 + 4 = 13 > 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.
    +
    .col-xs-6
    Subsequent columns continue along the new line.
    +
    +{% endhighlight %} + +

    Responsive column resets

    +

    With the four tiers of grids available you're bound to run into issues where, at certain breakpoints, your columns don't clear quite right as one is taller than the other. To fix that, use a combination of a .clearfix and our responsive utility classes.

    +
    +
    + .col-xs-6 .col-sm-3 +
    + Resize your viewport or check it out on your phone for an example. +
    +
    .col-xs-6 .col-sm-3
    + + +
    + +
    .col-xs-6 .col-sm-3
    +
    .col-xs-6 .col-sm-3
    +
    +{% highlight html %} +
    +
    .col-xs-6 .col-sm-3
    +
    .col-xs-6 .col-sm-3
    + + +
    + +
    .col-xs-6 .col-sm-3
    +
    .col-xs-6 .col-sm-3
    +
    +{% endhighlight %} +

    In addition to column clearing at responsive breakpoints, you may need to reset offsets, pushes, or pulls. See this in action in the grid example.

    +{% highlight html %} +
    +
    .col-sm-5 .col-md-6
    +
    .col-sm-5 .col-sm-offset-2 .col-md-6 .col-md-offset-0
    +
    + +
    +
    .col-sm-6 .col-md-5 .col-lg-6
    +
    .col-sm-6 .col-md-5 .col-md-offset-2 .col-lg-6 .col-lg-offset-0
    +
    +{% endhighlight %} + + +

    Remove gutters

    +

    Remove the gutters from a row and it's columns with the .row-no-gutters class.

    +
    +
    .col-xs-12 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6
    +
    .col-xs-6
    +
    +{% highlight html %} +
    +
    .col-xs-12 .col-md-8
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    .col-xs-6 .col-md-4
    +
    +
    +
    .col-xs-6
    +
    .col-xs-6
    +
    +{% endhighlight %} + + +

    Offsetting columns

    +

    Move columns to the right using .col-md-offset-* classes. These classes increase the left margin of a column by * columns. For example, .col-md-offset-4 moves .col-md-4 over four columns.

    +
    +
    .col-md-4
    +
    .col-md-4 .col-md-offset-4
    +
    +
    +
    .col-md-3 .col-md-offset-3
    +
    .col-md-3 .col-md-offset-3
    +
    +
    +
    .col-md-6 .col-md-offset-3
    +
    +{% highlight html %} +
    +
    .col-md-4
    +
    .col-md-4 .col-md-offset-4
    +
    +
    +
    .col-md-3 .col-md-offset-3
    +
    .col-md-3 .col-md-offset-3
    +
    +
    +
    .col-md-6 .col-md-offset-3
    +
    +{% endhighlight %} + +

    You can also override offsets from lower grid tiers with .col-*-offset-0 classes.

    +{% highlight html %} +
    +
    +
    +
    +
    +
    +
    +
    +{% endhighlight %} + +

    Nesting columns

    +

    To nest your content with the default grid, add a new .row and set of .col-sm-* columns within an existing .col-sm-* column. Nested rows should include a set of columns that add up to 12 or fewer (it is not required that you use all 12 available columns).

    +
    +
    + Level 1: .col-sm-9 +
    +
    + Level 2: .col-xs-8 .col-sm-6 +
    +
    + Level 2: .col-xs-4 .col-sm-6 +
    +
    +
    +
    +{% highlight html %} +
    +
    + Level 1: .col-sm-9 +
    +
    + Level 2: .col-xs-8 .col-sm-6 +
    +
    + Level 2: .col-xs-4 .col-sm-6 +
    +
    +
    +
    +{% endhighlight %} + +

    Column ordering

    +

    Easily change the order of our built-in grid columns with .col-md-push-* and .col-md-pull-* modifier classes.

    +
    +
    .col-md-9 .col-md-push-3
    +
    .col-md-3 .col-md-pull-9
    +
    + +{% highlight html %} +
    +
    .col-md-9 .col-md-push-3
    +
    .col-md-3 .col-md-pull-9
    +
    +{% endhighlight %} + +

    Less mixins and variables

    +

    In addition to prebuilt grid classes for fast layouts, Bootstrap includes Less variables and mixins for quickly generating your own simple, semantic layouts.

    + +

    Variables

    +

    Variables determine the number of columns, the gutter width, and the media query point at which to begin floating columns. We use these to generate the predefined grid classes documented above, as well as for the custom mixins listed below.

    +{% highlight scss %} +@grid-columns: 12; +@grid-gutter-width: 30px; +@grid-float-breakpoint: 768px; +{% endhighlight %} + +

    Mixins

    +

    Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.

    +{% highlight scss %} +// Creates a wrapper for a series of columns +.make-row(@gutter: @grid-gutter-width) { + // Then clear the floated columns + .clearfix(); + + @media (min-width: @screen-sm-min) { + margin-left: (@gutter / -2); + margin-right: (@gutter / -2); + } + + // Negative margin nested rows out to align the content of columns + .row { + margin-left: (@gutter / -2); + margin-right: (@gutter / -2); + } +} + +// Generate the extra small columns +.make-xs-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @grid-float-breakpoint) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the small columns +.make-sm-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @screen-sm-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the small column offsets +.make-sm-column-offset(@columns) { + @media (min-width: @screen-sm-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-push(@columns) { + @media (min-width: @screen-sm-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-pull(@columns) { + @media (min-width: @screen-sm-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the medium columns +.make-md-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @screen-md-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the medium column offsets +.make-md-column-offset(@columns) { + @media (min-width: @screen-md-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-push(@columns) { + @media (min-width: @screen-md-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-pull(@columns) { + @media (min-width: @screen-md-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the large columns +.make-lg-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + // Calculate width based on number of columns available + @media (min-width: @screen-lg-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} + +// Generate the large column offsets +.make-lg-column-offset(@columns) { + @media (min-width: @screen-lg-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-push(@columns) { + @media (min-width: @screen-lg-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-pull(@columns) { + @media (min-width: @screen-lg-min) { + right: percentage((@columns / @grid-columns)); + } +} +{% endhighlight %} + +

    Example usage

    +

    You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an example of using the default settings to create a two-column layout with a gap between.

    +{% highlight scss %} +.wrapper { + .make-row(); +} +.content-main { + .make-lg-column(8); +} +.content-secondary { + .make-lg-column(3); + .make-lg-column-offset(1); +} +{% endhighlight %} +{% highlight html %} +
    +
    ...
    +
    ...
    +
    +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/css/helpers.html b/vendor/bootstrap/docs/_includes/css/helpers.html new file mode 100644 index 000000000..969872776 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/helpers.html @@ -0,0 +1,207 @@ +
    +

    Helper classes

    + +

    Contextual colors

    +

    Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and will darken on hover just like our default link styles.

    +
    +

    Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.

    +

    Nullam id dolor id nibh ultricies vehicula ut id elit.

    +

    Duis mollis, est non commodo luctus, nisi erat porttitor ligula.

    +

    Maecenas sed diam eget risus varius blandit sit amet non magna.

    +

    Etiam porta sem malesuada magna mollis euismod.

    +

    Donec ullamcorper nulla non metus auctor fringilla.

    +
    +{% highlight html %} +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +{% endhighlight %} +
    +

    Dealing with specificity

    +

    Sometimes emphasis classes cannot be applied due to the specificity of another selector. In most cases, a sufficient workaround is to wrap your text in a <span> with the class.

    +
    +
    +

    Conveying meaning to assistive technologies

    +

    Using color to add meaning only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers. Ensure that information denoted by the color is either obvious from the content itself (the contextual colors are only used to reinforce meaning that is already present in the text/markup), or is included through alternative means, such as additional text hidden with the .sr-only class.

    +
    + +

    Contextual backgrounds

    +

    Similar to the contextual text color classes, easily set the background of an element to any contextual class. Anchor components will darken on hover, just like the text classes.

    +
    +

    Nullam id dolor id nibh ultricies vehicula ut id elit.

    +

    Duis mollis, est non commodo luctus, nisi erat porttitor ligula.

    +

    Maecenas sed diam eget risus varius blandit sit amet non magna.

    +

    Etiam porta sem malesuada magna mollis euismod.

    +

    Donec ullamcorper nulla non metus auctor fringilla.

    +
    +{% highlight html %} +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +{% endhighlight %} +
    +

    Dealing with specificity

    +

    Sometimes contextual background classes cannot be applied due to the specificity of another selector. In some cases, a sufficient workaround is to wrap your element's content in a <div> with the class.

    +
    +
    +

    Conveying meaning to assistive technologies

    +

    As with contextual colors, ensure that any meaning conveyed through color is also conveyed in a format that is not purely presentational.

    +
    + +

    Close icon

    +

    Use the generic close icon for dismissing content like modals and alerts.

    +
    +

    +
    +{% highlight html %} + +{% endhighlight %} + + +

    Carets

    +

    Use carets to indicate dropdown functionality and direction. Note that the default caret will reverse automatically in dropup menus.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + + +

    Quick floats

    +

    Float an element to the left or right with a class. !important is included to avoid specificity issues. Classes can also be used as mixins.

    +{% highlight html %} +
    ...
    +
    ...
    +{% endhighlight %} +{% highlight scss %} +// Classes +.pull-left { + float: left !important; +} +.pull-right { + float: right !important; +} + +// Usage as mixins +.element { + .pull-left(); +} +.another-element { + .pull-right(); +} +{% endhighlight %} + +
    +

    Not for use in navbars

    +

    To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar docs for details.

    +
    + + +

    Center content blocks

    +

    Set an element to display: block and center via margin. Available as a mixin and class.

    +{% highlight html %} +
    ...
    +{% endhighlight %} +{% highlight scss %} +// Class +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +// Usage as a mixin +.element { + .center-block(); +} +{% endhighlight %} + + +

    Clearfix

    +

    Easily clear floats by adding .clearfix to the parent element. Utilizes the micro clearfix as popularized by Nicolas Gallagher. Can also be used as a mixin.

    +{% highlight html %} + +
    ...
    +{% endhighlight %} +{% highlight scss %} +// Mixin itself +.clearfix() { + &:before, + &:after { + content: " "; + display: table; + } + &:after { + clear: both; + } +} + +// Usage as a mixin +.element { + .clearfix(); +} +{% endhighlight %} + + +

    Showing and hiding content

    +

    Force an element to be shown or hidden (including for screen readers) with the use of .show and .hidden classes. These classes use !important to avoid specificity conflicts, just like the quick floats. They are only available for block level toggling. They can also be used as mixins.

    +

    .hide is available, but it does not always affect screen readers and is deprecated as of v3.0.1. Use .hidden or .sr-only instead.

    +

    Furthermore, .invisible can be used to toggle only the visibility of an element, meaning its display is not modified and the element can still affect the flow of the document.

    +{% highlight html %} +
    ...
    + +{% endhighlight %} +{% highlight scss %} +// Classes +.show { + display: block !important; +} +.hidden { + display: none !important; +} +.invisible { + visibility: hidden; +} + +// Usage as mixins +.element { + .show(); +} +.another-element { + .hidden(); +} +{% endhighlight %} + + +

    Screen reader and keyboard navigation content

    +

    Hide an element to all devices except screen readers with .sr-only. Combine .sr-only with .sr-only-focusable to show the element again when it's focused (e.g. by a keyboard-only user). Necessary for following accessibility best practices. Can also be used as mixins.

    +{% highlight html %} +Skip to main content +{% endhighlight %} +{% highlight scss %} +// Usage as a mixin +.skip-navigation { + .sr-only(); + .sr-only-focusable(); +} +{% endhighlight %} + + +

    Image replacement

    +

    Utilize the .text-hide class or mixin to help replace an element's text content with a background image.

    +{% highlight html %} +

    Custom heading

    +{% endhighlight %} +{% highlight scss %} +// Usage as a mixin +.heading { + .text-hide(); +} +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/css/images.html b/vendor/bootstrap/docs/_includes/css/images.html new file mode 100644 index 000000000..08aedb874 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/images.html @@ -0,0 +1,31 @@ +
    +

    Images

    + +

    Responsive images

    +

    Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. This applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the parent element.

    +

    To center images which use the .img-responsive class, use .center-block instead of .text-center. See the helper classes section for more details about .center-block usage.

    +
    +

    SVG images and IE 8-10

    +

    In Internet Explorer 8-10, SVG images with .img-responsive are disproportionately sized. To fix this, add width: 100% \9; where necessary. Bootstrap doesn't apply this automatically as it causes complications to other image formats.

    +
    +{% highlight html %} +Responsive image +{% endhighlight %} + +

    Image shapes

    +

    Add classes to an <img> element to easily style images in any project.

    +
    +

    Cross-browser compatibility

    +

    Keep in mind that Internet Explorer 8 lacks support for rounded corners.

    +
    +
    + A generic square placeholder image with rounded corners + A generic square placeholder image where only the portion within the circle circumscribed about said square is visible + A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera +
    +{% highlight html %} +... +... +... +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/css/less.html b/vendor/bootstrap/docs/_includes/css/less.html new file mode 100644 index 000000000..be05f17a9 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/less.html @@ -0,0 +1,499 @@ +
    +

    Using Less

    + +

    Bootstrap's CSS is built on Less, a preprocessor with additional functionality like variables, mixins, and functions for compiling CSS. Those looking to use the source Less files instead of our compiled CSS files can make use of the numerous variables and mixins we use throughout the framework.

    + +

    Grid variables and mixins are covered within the Grid system section.

    + + +

    Compiling Bootstrap

    +

    Bootstrap can be used in at least two ways: with the compiled CSS or with the source Less files. To compile the Less files, consult the Getting Started section for how to setup your development environment to run the necessary commands.

    +

    Third party compilation tools may work with Bootstrap, but they are not supported by our core team.

    + +

    Variables

    +

    Variables are used throughout the entire project as a way to centralize and share commonly used values like colors, spacing, or font stacks. For a complete breakdown, please see the Customizer.

    + +

    Colors

    +

    Easily make use of two color schemes: grayscale and semantic. Grayscale colors provide quick access to commonly used shades of black while semantic include various colors assigned to meaningful contextual values.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +{% highlight scss %} +@gray-darker: lighten(#000, 13.5%); // #222 +@gray-dark: lighten(#000, 20%); // #333 +@gray: lighten(#000, 33.5%); // #555 +@gray-light: lighten(#000, 46.7%); // #777 +@gray-lighter: lighten(#000, 93.5%); // #eee +{% endhighlight %} + +
    +
    +
    +
    +
    +
    +
    +
    +
    +{% highlight scss %} +@brand-primary: darken(#428bca, 6.5%); // #337ab7 +@brand-success: #5cb85c; +@brand-info: #5bc0de; +@brand-warning: #f0ad4e; +@brand-danger: #d9534f; +{% endhighlight %} + +

    Use any of these color variables as they are or reassign them to more meaningful variables for your project.

    +{% highlight scss %} +// Use as-is +.masthead { + background-color: @brand-primary; +} + +// Reassigned variables in Less +@alert-message-background: @brand-info; +.alert { + background-color: @alert-message-background; +} +{% endhighlight %} + +

    Scaffolding

    +

    A handful of variables for quickly customizing key elements of your site's skeleton.

    +{% highlight scss %} +// Scaffolding +@body-bg: #fff; +@text-color: @black-50; +{% endhighlight %} + + +

    Easily style your links with the right color with only one value.

    +{% highlight scss %} +// Variables +@link-color: @brand-primary; +@link-hover-color: darken(@link-color, 15%); + +// Usage +a { + color: @link-color; + text-decoration: none; + + &:hover { + color: @link-hover-color; + text-decoration: underline; + } +} +{% endhighlight %} +

    Note that the @link-hover-color uses a function, another awesome tool from Less, to automagically create the right hover color. You can use darken, lighten, saturate, and desaturate.

    + +

    Typography

    +

    Easily set your typeface, text size, leading, and more with a few quick variables. Bootstrap makes use of these as well to provide easy typographic mixins.

    +{% highlight scss %} +@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-family-serif: Georgia, "Times New Roman", Times, serif; +@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace; +@font-family-base: @font-family-sans-serif; + +@font-size-base: 14px; +@font-size-large: ceil((@font-size-base * 1.25)); // ~18px +@font-size-small: ceil((@font-size-base * 0.85)); // ~12px + +@font-size-h1: floor((@font-size-base * 2.6)); // ~36px +@font-size-h2: floor((@font-size-base * 2.15)); // ~30px +@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px +@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px +@font-size-h5: @font-size-base; +@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px + +@line-height-base: 1.428571429; // 20/14 +@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px + +@headings-font-family: inherit; +@headings-font-weight: 500; +@headings-line-height: 1.1; +@headings-color: inherit; +{% endhighlight %} + +

    Icons

    +

    Two quick variables for customizing the location and filename of your icons.

    +{% highlight scss %} +@icon-font-path: "../fonts/"; +@icon-font-name: "glyphicons-halflings-regular"; +{% endhighlight %} + +

    Components

    +

    Components throughout Bootstrap make use of some default variables for setting common values. Here are the most commonly used.

    +{% highlight scss %} +@padding-base-vertical: 6px; +@padding-base-horizontal: 12px; + +@padding-large-vertical: 10px; +@padding-large-horizontal: 16px; + +@padding-small-vertical: 5px; +@padding-small-horizontal: 10px; + +@padding-xs-vertical: 1px; +@padding-xs-horizontal: 5px; + +@line-height-large: 1.33; +@line-height-small: 1.5; + +@border-radius-base: 4px; +@border-radius-large: 6px; +@border-radius-small: 3px; + +@component-active-color: #fff; +@component-active-bg: @brand-primary; + +@caret-width-base: 4px; +@caret-width-large: 5px; +{% endhighlight %} + + +

    Vendor mixins

    +

    Vendor mixins are mixins to help support multiple browsers by including all relevant vendor prefixes in your compiled CSS.

    + + +

    Box-sizing

    +

    Reset your components' box model with a single mixin. For context, see this helpful article from Mozilla.

    +

    The mixin is deprecated as of v3.2.0, with the introduction of Autoprefixer. To preserve backwards-compatibility, Bootstrap will continue to use the mixin internally until Bootstrap v4.

    +{% highlight scss %} +.box-sizing(@box-model) { + -webkit-box-sizing: @box-model; // Safari <= 5 + -moz-box-sizing: @box-model; // Firefox <= 19 + box-sizing: @box-model; +} +{% endhighlight %} + +

    Rounded corners

    +

    Today all modern browsers support the non-prefixed border-radius property. As such, there is no .border-radius() mixin, but Bootstrap does include shortcuts for quickly rounding two corners on a particular side of an object.

    +{% highlight scss %} +.border-top-radius(@radius) { + border-top-right-radius: @radius; + border-top-left-radius: @radius; +} +.border-right-radius(@radius) { + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; +} +.border-bottom-radius(@radius) { + border-bottom-right-radius: @radius; + border-bottom-left-radius: @radius; +} +.border-left-radius(@radius) { + border-bottom-left-radius: @radius; + border-top-left-radius: @radius; +} +{% endhighlight %} + +

    Box (Drop) shadows

    +

    If your target audience is using the latest and greatest browsers and devices, be sure to just use the box-shadow property on its own. If you need support for older Android (pre-v4) and iOS devices (pre-iOS 5), use the deprecated mixin to pick up the required -webkit prefix.

    +

    The mixin is deprecated as of v3.1.0, since Bootstrap doesn't officially support the outdated platforms that don't support the standard property. To preserve backwards-compatibility, Bootstrap will continue to use the mixin internally until Bootstrap v4.

    +

    Be sure to use rgba() colors in your box shadows so they blend as seamlessly as possible with backgrounds.

    +{% highlight scss %} +.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) { + -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 + box-shadow: @shadow; +} +{% endhighlight %} + +

    Transitions

    +

    Multiple mixins for flexibility. Set all transition information with one, or specify a separate delay and duration as needed.

    +

    The mixins are deprecated as of v3.2.0, with the introduction of Autoprefixer. To preserve backwards-compatibility, Bootstrap will continue to use the mixins internally until Bootstrap v4.

    +{% highlight scss %} +.transition(@transition) { + -webkit-transition: @transition; + transition: @transition; +} +.transition-property(@transition-property) { + -webkit-transition-property: @transition-property; + transition-property: @transition-property; +} +.transition-delay(@transition-delay) { + -webkit-transition-delay: @transition-delay; + transition-delay: @transition-delay; +} +.transition-duration(@transition-duration) { + -webkit-transition-duration: @transition-duration; + transition-duration: @transition-duration; +} +.transition-timing-function(@timing-function) { + -webkit-transition-timing-function: @timing-function; + transition-timing-function: @timing-function; +} +.transition-transform(@transition) { + -webkit-transition: -webkit-transform @transition; + -moz-transition: -moz-transform @transition; + -o-transition: -o-transform @transition; + transition: transform @transition; +} +{% endhighlight %} + +

    Transformations

    +

    Rotate, scale, translate (move), or skew any object.

    +

    The mixins are deprecated as of v3.2.0, with the introduction of Autoprefixer. To preserve backwards-compatibility, Bootstrap will continue to use the mixins internally until Bootstrap v4.

    +{% highlight scss %} +.rotate(@degrees) { + -webkit-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); // IE9 only + transform: rotate(@degrees); +} +.scale(@ratio; @ratio-y...) { + -webkit-transform: scale(@ratio, @ratio-y); + -ms-transform: scale(@ratio, @ratio-y); // IE9 only + transform: scale(@ratio, @ratio-y); +} +.translate(@x; @y) { + -webkit-transform: translate(@x, @y); + -ms-transform: translate(@x, @y); // IE9 only + transform: translate(@x, @y); +} +.skew(@x; @y) { + -webkit-transform: skew(@x, @y); + -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ + transform: skew(@x, @y); +} +.translate3d(@x; @y; @z) { + -webkit-transform: translate3d(@x, @y, @z); + transform: translate3d(@x, @y, @z); +} + +.rotateX(@degrees) { + -webkit-transform: rotateX(@degrees); + -ms-transform: rotateX(@degrees); // IE9 only + transform: rotateX(@degrees); +} +.rotateY(@degrees) { + -webkit-transform: rotateY(@degrees); + -ms-transform: rotateY(@degrees); // IE9 only + transform: rotateY(@degrees); +} +.perspective(@perspective) { + -webkit-perspective: @perspective; + -moz-perspective: @perspective; + perspective: @perspective; +} +.perspective-origin(@perspective) { + -webkit-perspective-origin: @perspective; + -moz-perspective-origin: @perspective; + perspective-origin: @perspective; +} +.transform-origin(@origin) { + -webkit-transform-origin: @origin; + -moz-transform-origin: @origin; + -ms-transform-origin: @origin; // IE9 only + transform-origin: @origin; +} +{% endhighlight %} + +

    Animations

    +

    A single mixin for using all of CSS3's animation properties in one declaration and other mixins for individual properties.

    +

    The mixins are deprecated as of v3.2.0, with the introduction of Autoprefixer. To preserve backwards-compatibility, Bootstrap will continue to use the mixins internally until Bootstrap v4.

    +{% highlight scss %} +.animation(@animation) { + -webkit-animation: @animation; + animation: @animation; +} +.animation-name(@name) { + -webkit-animation-name: @name; + animation-name: @name; +} +.animation-duration(@duration) { + -webkit-animation-duration: @duration; + animation-duration: @duration; +} +.animation-timing-function(@timing-function) { + -webkit-animation-timing-function: @timing-function; + animation-timing-function: @timing-function; +} +.animation-delay(@delay) { + -webkit-animation-delay: @delay; + animation-delay: @delay; +} +.animation-iteration-count(@iteration-count) { + -webkit-animation-iteration-count: @iteration-count; + animation-iteration-count: @iteration-count; +} +.animation-direction(@direction) { + -webkit-animation-direction: @direction; + animation-direction: @direction; +} +{% endhighlight %} + +

    Opacity

    +

    Set the opacity for all browsers and provide a filter fallback for IE8.

    +{% highlight scss %} +.opacity(@opacity) { + opacity: @opacity; + // IE8 filter + @opacity-ie: (@opacity * 100); + filter: ~"alpha(opacity=@{opacity-ie})"; +} +{% endhighlight %} + +

    Placeholder text

    +

    Provide context for form controls within each field.

    +{% highlight scss %} +.placeholder(@color: @input-color-placeholder) { + &::-moz-placeholder { color: @color; } // Firefox + &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ + &::-webkit-input-placeholder { color: @color; } // Safari and Chrome +} +{% endhighlight %} + +

    Columns

    +

    Generate columns via CSS within a single element.

    +{% highlight scss %} +.content-columns(@width; @count; @gap) { + -webkit-column-width: @width; + -moz-column-width: @width; + column-width: @width; + -webkit-column-count: @count; + -moz-column-count: @count; + column-count: @count; + -webkit-column-gap: @gap; + -moz-column-gap: @gap; + column-gap: @gap; +} +{% endhighlight %} + +

    Gradients

    +

    Easily turn any two colors into a background gradient. Get more advanced and set a direction, use three colors, or use a radial gradient. With a single mixin you get all the prefixed syntaxes you'll need.

    +{% highlight scss %} +#gradient > .vertical(#333; #000); +#gradient > .horizontal(#333; #000); +#gradient > .radial(#333; #000); +{% endhighlight %} +

    You can also specify the angle of a standard two-color, linear gradient:

    +{% highlight scss %} +#gradient > .directional(#333; #000; 45deg); +{% endhighlight %} +

    If you need a barber-stripe style gradient, that's easy, too. Just specify a single color and we'll overlay a translucent white stripe.

    +{% highlight scss %} +#gradient > .striped(#333; 45deg); +{% endhighlight %} +

    Up the ante and use three colors instead. Set the first color, the second color, the second color's color stop (a percentage value like 25%), and the third color with these mixins:

    +{% highlight scss %} +#gradient > .vertical-three-colors(#777; #333; 25%; #000); +#gradient > .horizontal-three-colors(#777; #333; 25%; #000); +{% endhighlight %} +

    Heads up! Should you ever need to remove a gradient, be sure to remove any IE-specific filter you may have added. You can do that by using the .reset-filter() mixin alongside background-image: none;.

    + + +

    Utility mixins

    +

    Utility mixins are mixins that combine otherwise unrelated CSS properties to achieve a specific goal or task.

    + +

    Clearfix

    +

    Forget adding class="clearfix" to any element and instead add the .clearfix() mixin where appropriate. Uses the micro clearfix from Nicolas Gallagher.

    +{% highlight scss %} +// Mixin +.clearfix() { + &:before, + &:after { + content: " "; + display: table; + } + &:after { + clear: both; + } +} + +// Usage +.container { + .clearfix(); +} +{% endhighlight %} + +

    Horizontal centering

    +

    Quickly center any element within its parent. Requires width or max-width to be set.

    +{% highlight scss %} +// Mixin +.center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} + +// Usage +.container { + width: 940px; + .center-block(); +} +{% endhighlight %} + +

    Sizing helpers

    +

    Specify the dimensions of an object more easily.

    +{% highlight scss %} +// Mixins +.size(@width; @height) { + width: @width; + height: @height; +} +.square(@size) { + .size(@size; @size); +} + +// Usage +.image { .size(400px; 300px); } +.avatar { .square(48px); } +{% endhighlight %} + +

    Resizable textareas

    +

    Easily configure the resize options for any textarea, or any other element. Defaults to normal browser behavior (both).

    +{% highlight scss %} +.resizable(@direction: both) { + // Options: horizontal, vertical, both + resize: @direction; + // Safari fix + overflow: auto; +} +{% endhighlight %} + +

    Truncating text

    +

    Easily truncate text with an ellipsis with a single mixin. Requires element to be block or inline-block level.

    +{% highlight scss %} +// Mixin +.text-overflow() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +// Usage +.branch-name { + display: inline-block; + max-width: 200px; + .text-overflow(); +} +{% endhighlight %} + +

    Retina images

    +

    Specify two image paths and the @1x image dimensions, and Bootstrap will provide an @2x media query. If you have many images to serve, consider writing your retina image CSS manually in a single media query.

    +{% highlight scss %} +.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { + background-image: url("@{file-1x}"); + + @media + only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and ( min--moz-device-pixel-ratio: 2), + only screen and ( -o-min-device-pixel-ratio: 2/1), + only screen and ( min-device-pixel-ratio: 2), + only screen and ( min-resolution: 192dpi), + only screen and ( min-resolution: 2dppx) { + background-image: url("@{file-2x}"); + background-size: @width-1x @height-1x; + } +} + +// Usage +.jumbotron { + .img-retina("/img/bg-1x.png", "/img/bg-2x.png", 100px, 100px); +} +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/css/overview.html b/vendor/bootstrap/docs/_includes/css/overview.html new file mode 100644 index 000000000..49dd4796d --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/overview.html @@ -0,0 +1,52 @@ +
    +

    Overview

    + +

    Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.

    + +

    HTML5 doctype

    +

    Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.

    +{% highlight html %} + + + ... + +{% endhighlight %} + +

    Mobile first

    +

    With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3, we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles, they're baked right into the core. In fact, Bootstrap is mobile first. Mobile first styles can be found throughout the entire library instead of in separate files.

    +

    To ensure proper rendering and touch zooming, add the viewport meta tag to your <head>.

    +{% highlight html %} + +{% endhighlight %} +

    You can disable zooming capabilities on mobile devices by adding user-scalable=no to the viewport meta tag. This disables zooming, meaning users are only able to scroll, and results in your site feeling a bit more like a native application. Overall, we don't recommend this on every site, so use caution!

    +{% highlight html %} + +{% endhighlight %} + + +

    Bootstrap sets basic global display, typography, and link styles. Specifically, we:

    +
      +
    • Set background-color: #fff; on the body
    • +
    • Use the @font-family-base, @font-size-base, and @line-height-base attributes as our typographic base
    • +
    • Set the global link color via @link-color and apply link underlines only on :hover
    • +
    +

    These styles can be found within scaffolding.less.

    + +

    Normalize.css

    +

    For improved cross-browser rendering, we use Normalize.css, a project by Nicolas Gallagher and Jonathan Neal.

    + +

    Containers

    +

    Bootstrap requires a containing element to wrap site contents and house our grid system. You may choose one of two containers to use in your projects. Note that, due to padding and more, neither container is nestable.

    +

    Use .container for a responsive fixed width container.

    +{% highlight html %} +
    + ... +
    +{% endhighlight %} +

    Use .container-fluid for a full width container, spanning the entire width of your viewport.

    +{% highlight html %} +
    + ... +
    +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/css/responsive-utilities.html b/vendor/bootstrap/docs/_includes/css/responsive-utilities.html new file mode 100644 index 000000000..ac73bf645 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/responsive-utilities.html @@ -0,0 +1,258 @@ +
    +

    Responsive utilities

    + +

    For faster mobile-friendly development, use these utility classes for showing and hiding content by device via media query. Also included are utility classes for toggling content when printed.

    +

    Try to use these on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation.

    + + +

    Available classes

    +

    Use a single or combination of the available classes for toggling content across viewport breakpoints.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Extra small devices + Phones (<768px) + + Small devices + Tablets (≥768px) + + Medium devices + Desktops (≥992px) + + Large devices + Desktops (≥1200px) +
    .visible-xs-*Visible
    .visible-sm-*Visible
    .visible-md-*Visible
    .visible-lg-*Visible
    .hidden-xsVisibleVisibleVisible
    .hidden-smVisibleVisibleVisible
    .hidden-mdVisibleVisibleVisible
    .hidden-lgVisibleVisibleVisible
    +
    + +

    As of v3.2.0, the .visible-*-* classes for each breakpoint come in three variations, one for each CSS display property value listed below.

    +
    + + + + + + + + + + + + + + + + + + + + + +
    Group of classesCSS display
    .visible-*-blockdisplay: block;
    .visible-*-inlinedisplay: inline;
    .visible-*-inline-blockdisplay: inline-block;
    +
    +

    So, for extra small (xs) screens for example, the available .visible-*-* classes are: .visible-xs-block, .visible-xs-inline, and .visible-xs-inline-block.

    +

    The classes .visible-xs, .visible-sm, .visible-md, and .visible-lg also exist, but are deprecated as of v3.2.0. They are approximately equivalent to .visible-*-block, except with additional special cases for toggling <table>-related elements.

    + +

    Print classes

    +

    Similar to the regular responsive classes, use these for toggling content for print.

    +
    + + + + + + + + + + + + + + + + + + + + +
    ClassesBrowserPrint
    + .visible-print-block
    + .visible-print-inline
    + .visible-print-inline-block +
    Visible
    .hidden-printVisible
    +
    +

    The class .visible-print also exists but is deprecated as of v3.2.0. It is approximately equivalent to .visible-print-block, except with additional special cases for <table>-related elements.

    + + +

    Test cases

    +

    Resize your browser or load on different devices to test the responsive utility classes.

    + +

    Visible on...

    +

    Green checkmarks indicate the element is visible in your current viewport.

    +
    +
    + + ✔ Visible on x-small +
    +
    + + ✔ Visible on small +
    +
    +
    + Medium + ✔ Visible on medium +
    +
    + + ✔ Visible on large +
    +
    +
    +
    + + ✔ Visible on x-small and small +
    +
    + + ✔ Visible on medium and large +
    +
    +
    + + ✔ Visible on x-small and medium +
    +
    + + ✔ Visible on small and large +
    +
    +
    + + ✔ Visible on x-small and large +
    +
    + + ✔ Visible on small and medium +
    +
    + +

    Hidden on...

    +

    Here, green checkmarks also indicate the element is hidden in your current viewport.

    +
    +
    + + ✔ Hidden on x-small +
    +
    + + ✔ Hidden on small +
    +
    +
    + Medium + ✔ Hidden on medium +
    +
    + + ✔ Hidden on large +
    +
    +
    +
    + + ✔ Hidden on x-small and small +
    +
    + + ✔ Hidden on medium and large +
    +
    +
    + + ✔ Hidden on x-small and medium +
    +
    + + ✔ Hidden on small and large +
    +
    +
    + + ✔ Hidden on x-small and large +
    +
    + + ✔ Hidden on small and medium +
    +
    +
    diff --git a/vendor/bootstrap/docs/_includes/css/sass.html b/vendor/bootstrap/docs/_includes/css/sass.html new file mode 100644 index 000000000..35739ddc6 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/sass.html @@ -0,0 +1,52 @@ +
    +

    Using Sass

    +

    While Bootstrap is built on Less, it also has an official Sass port. We maintain it in a separate GitHub repository and handle updates with a conversion script.

    + +

    What's included

    +

    Since the Sass port has a separate repo and serves a slightly different audience, the contents of the project differ greatly from the main Bootstrap project. This ensures the Sass port is as compatible with as many Sass-based systems as possible.

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PathDescription
    lib/Ruby gem code (Sass configuration, Rails and Compass integrations)
    tasks/Converter scripts (turning upstream Less to Sass)
    test/Compilation tests
    templates/Compass package manifest
    vendor/assets/Sass, JavaScript, and font files
    RakefileInternal tasks, such as rake and convert
    +
    +

    Visit the Sass port's GitHub repository to see these files in action.

    + + +

    Installation

    +

    For information on how to install and use Bootstrap for Sass, consult the GitHub repository readme. It's the most up to date source and includes information for use with Rails, Compass, and standard Sass projects.

    +

    + Bootstrap for Sass +

    +
    diff --git a/vendor/bootstrap/docs/_includes/css/tables.html b/vendor/bootstrap/docs/_includes/css/tables.html new file mode 100644 index 000000000..39c1c509a --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/tables.html @@ -0,0 +1,467 @@ +
    +

    Tables

    + +

    Basic example

    +

    For basic styling—light padding and only horizontal dividers—add the base class .table to any <table>. It may seem super redundant, but given the widespread use of tables for other plugins like calendars and date pickers, we've opted to isolate our custom table styles.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Optional table caption.
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Striped rows

    +

    Use .table-striped to add zebra-striping to any table row within the <tbody>.

    +
    +

    Cross-browser compatibility

    +

    Striped tables are styled via the :nth-child CSS selector, which is not available in Internet Explorer 8.

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Bordered table

    +

    Add .table-bordered for borders on all sides of the table and cells.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Hover rows

    +

    Add .table-hover to enable a hover state on table rows within a <tbody>.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Condensed table

    +

    Add .table-condensed to make tables more compact by cutting cell padding in half.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the Bird@twitter
    +
    +{% highlight html %} + + ... +
    +{% endhighlight %} + + +

    Contextual classes

    +

    Use contextual classes to color table rows or individual cells.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassDescription
    + .active + Applies the hover color to a particular row or cell
    + .success + Indicates a successful or positive action
    + .info + Indicates a neutral informative change or action
    + .warning + Indicates a warning that might need attention
    + .danger + Indicates a dangerous or potentially negative action
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #Column headingColumn headingColumn heading
    1Column contentColumn contentColumn content
    2Column contentColumn contentColumn content
    3Column contentColumn contentColumn content
    4Column contentColumn contentColumn content
    5Column contentColumn contentColumn content
    6Column contentColumn contentColumn content
    7Column contentColumn contentColumn content
    8Column contentColumn contentColumn content
    9Column contentColumn contentColumn content
    +
    +{% highlight html %} + +... +... +... +... +... + + + + ... + ... + ... + ... + ... + +{% endhighlight %} +
    +

    Conveying meaning to assistive technologies

    +

    Using color to add meaning to a table row or individual cell only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers. Ensure that information denoted by the color is either obvious from the content itself (the visible text in the relevant table row/cell), or is included through alternative means, such as additional text hidden with the .sr-only class.

    +
    + +

    Responsive tables

    +

    Create responsive tables by wrapping any .table in .table-responsive to make them scroll horizontally on small devices (under 768px). When viewing on anything larger than 768px wide, you will not see any difference in these tables.

    + +
    +

    Vertical clipping/truncation

    +

    Responsive tables make use of overflow-y: hidden, which clips off any content that goes beyond the bottom or top edges of the table. In particular, this can clip off dropdown menus and other third-party widgets.

    +
    +
    +

    Firefox and fieldsets

    +

    Firefox has some awkward fieldset styling involving width that interferes with the responsive table. This cannot be overridden without a Firefox-specific hack that we don't provide in Bootstrap:

    +{% highlight css %} +@-moz-document url-prefix() { + fieldset { display: table-cell; } +} +{% endhighlight %} +

    For more information, read this Stack Overflow answer.

    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #Table headingTable headingTable headingTable headingTable headingTable heading
    1Table cellTable cellTable cellTable cellTable cellTable cell
    2Table cellTable cellTable cellTable cellTable cellTable cell
    3Table cellTable cellTable cellTable cellTable cellTable cell
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #Table headingTable headingTable headingTable headingTable headingTable heading
    1Table cellTable cellTable cellTable cellTable cellTable cell
    2Table cellTable cellTable cellTable cellTable cellTable cell
    3Table cellTable cellTable cellTable cellTable cellTable cell
    +
    +
    +{% highlight html %} +
    + + ... +
    +
    +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/css/type.html b/vendor/bootstrap/docs/_includes/css/type.html new file mode 100644 index 000000000..839336e6d --- /dev/null +++ b/vendor/bootstrap/docs/_includes/css/type.html @@ -0,0 +1,461 @@ +
    +

    Typography

    + + +

    Headings

    +

    All HTML headings, <h1> through <h6>, are available. .h1 through .h6 classes are also available, for when you want to match the font styling of a heading but still want your text to be displayed inline.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    h1. Bootstrap heading

    Semibold 36px

    h2. Bootstrap heading

    Semibold 30px

    h3. Bootstrap heading

    Semibold 24px

    h4. Bootstrap heading

    Semibold 18px
    h5. Bootstrap heading
    Semibold 14px
    h6. Bootstrap heading
    Semibold 12px
    +
    +{% highlight html %} +

    h1. Bootstrap heading

    +

    h2. Bootstrap heading

    +

    h3. Bootstrap heading

    +

    h4. Bootstrap heading

    +
    h5. Bootstrap heading
    +
    h6. Bootstrap heading
    +{% endhighlight %} + +

    Create lighter, secondary text in any heading with a generic <small> tag or the .small class.

    +
    + + + + + + + + + + + + + + + + + + + + + +

    h1. Bootstrap heading Secondary text

    h2. Bootstrap heading Secondary text

    h3. Bootstrap heading Secondary text

    h4. Bootstrap heading Secondary text

    h5. Bootstrap heading Secondary text
    h6. Bootstrap heading Secondary text
    +
    +{% highlight html %} +

    h1. Bootstrap heading Secondary text

    +

    h2. Bootstrap heading Secondary text

    +

    h3. Bootstrap heading Secondary text

    +

    h4. Bootstrap heading Secondary text

    +
    h5. Bootstrap heading Secondary text
    +
    h6. Bootstrap heading Secondary text
    +{% endhighlight %} + + + +

    Body copy

    +

    Bootstrap's global default font-size is 14px, with a line-height of 1.428. This is applied to the <body> and all paragraphs. In addition, <p> (paragraphs) receive a bottom margin of half their computed line-height (10px by default).

    +
    +

    Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.

    +

    Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.

    +

    Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.

    +
    +{% highlight html %} +

    ...

    +{% endhighlight %} + + +

    Lead body copy

    +

    Make a paragraph stand out by adding .lead.

    +
    +

    Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.

    +
    +{% highlight html %} +

    ...

    +{% endhighlight %} + + +

    Built with Less

    +

    The typographic scale is based on two Less variables in variables.less: @font-size-base and @line-height-base. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.

    + + +

    Inline text elements

    +

    Marked text

    +

    For highlighting a run of text due to its relevance in another context, use the <mark> tag.

    +
    +

    You can use the mark tag to highlight text.

    +
    +{% highlight html %} +You can use the mark tag to highlight text. +{% endhighlight %} + + +

    Deleted text

    +

    For indicating blocks of text that have been deleted use the <del> tag.

    +
    +

    This line of text is meant to be treated as deleted text.

    +
    +{% highlight html %} +This line of text is meant to be treated as deleted text. +{% endhighlight %} + +

    Strikethrough text

    +

    For indicating blocks of text that are no longer relevant use the <s> tag.

    +
    +

    This line of text is meant to be treated as no longer accurate.

    +
    +{% highlight html %} +This line of text is meant to be treated as no longer accurate. +{% endhighlight %} + +

    Inserted text

    +

    For indicating additions to the document use the <ins> tag.

    +
    +

    This line of text is meant to be treated as an addition to the document.

    +
    +{% highlight html %} +This line of text is meant to be treated as an addition to the document. +{% endhighlight %} + +

    Underlined text

    +

    To underline text use the <u> tag.

    +
    +

    This line of text will render as underlined

    +
    +{% highlight html %} +This line of text will render as underlined +{% endhighlight %} + +

    Make use of HTML's default emphasis tags with lightweight styles.

    + +

    Small text

    +

    For de-emphasizing inline or blocks of text, use the <small> tag to set text at 85% the size of the parent. Heading elements receive their own font-size for nested <small> elements.

    +

    You may alternatively use an inline element with .small in place of any <small>.

    +
    +

    This line of text is meant to be treated as fine print.

    +
    +{% highlight html %} +This line of text is meant to be treated as fine print. +{% endhighlight %} + + +

    Bold

    +

    For emphasizing a snippet of text with a heavier font-weight.

    +
    +

    The following snippet of text is rendered as bold text.

    +
    +{% highlight html %} +rendered as bold text +{% endhighlight %} + +

    Italics

    +

    For emphasizing a snippet of text with italics.

    +
    +

    The following snippet of text is rendered as italicized text.

    +
    +{% highlight html %} +rendered as italicized text +{% endhighlight %} + +
    +

    Alternate elements

    +

    Feel free to use <b> and <i> in HTML5. <b> is meant to highlight words or phrases without conveying additional importance while <i> is mostly for voice, technical terms, etc.

    +
    + +

    Alignment classes

    +

    Easily realign text to components with text alignment classes.

    +
    +

    Left aligned text.

    +

    Center aligned text.

    +

    Right aligned text.

    +

    Justified text.

    +

    No wrap text.

    +
    +{% highlight html %} +

    Left aligned text.

    +

    Center aligned text.

    +

    Right aligned text.

    +

    Justified text.

    +

    No wrap text.

    +{% endhighlight %} + +

    Transformation classes

    +

    Transform text in components with text capitalization classes.

    +
    +

    Lowercased text.

    +

    Uppercased text.

    +

    Capitalized text.

    +
    +{% highlight html %} +

    Lowercased text.

    +

    Uppercased text.

    +

    Capitalized text.

    +{% endhighlight %} + + +

    Abbreviations

    +

    Stylized implementation of HTML's <abbr> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a title attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover and to users of assistive technologies.

    + +

    Basic abbreviation

    +
    +

    An abbreviation of the word attribute is attr.

    +
    +{% highlight html %} +attr +{% endhighlight %} + +

    Initialism

    +

    Add .initialism to an abbreviation for a slightly smaller font-size.

    +
    +

    HTML is the best thing since sliced bread.

    +
    +{% highlight html %} +HTML +{% endhighlight %} + + + +

    Addresses

    +

    Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <br>.

    +
    +
    + Twitter, Inc.
    + 1355 Market Street, Suite 900
    + San Francisco, CA 94103
    + P: (123) 456-7890 +
    +
    + Full Name
    + first.last@example.com +
    +
    +{% highlight html %} +
    + Twitter, Inc.
    + 1355 Market Street, Suite 900
    + San Francisco, CA 94103
    + P: (123) 456-7890 +
    + +
    + Full Name
    + first.last@example.com +
    +{% endhighlight %} + + + +

    Blockquotes

    +

    For quoting blocks of content from another source within your document.

    + +

    Default blockquote

    +

    Wrap <blockquote> around any HTML as the quote. For straight quotes, we recommend a <p>.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    +
    +{% highlight html %} +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    +{% endhighlight %} + +

    Blockquote options

    +

    Style and content changes for simple variations on a standard <blockquote>.

    + +

    Naming a source

    +

    Add a <footer> for identifying the source. Wrap the name of the source work in <cite>.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    Someone famous in Source Title
    +
    +
    +{% highlight html %} +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    Someone famous in Source Title
    +
    +{% endhighlight %} + +

    Alternate displays

    +

    Add .blockquote-reverse for a blockquote with right-aligned content.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    Someone famous in Source Title
    +
    +
    +{% highlight html %} +
    + ... +
    +{% endhighlight %} + + + +

    Lists

    + +

    Unordered

    +

    A list of items in which the order does not explicitly matter.

    +
    +
      +
    • Lorem ipsum dolor sit amet
    • +
    • Consectetur adipiscing elit
    • +
    • Integer molestie lorem at massa
    • +
    • Facilisis in pretium nisl aliquet
    • +
    • Nulla volutpat aliquam velit +
        +
      • Phasellus iaculis neque
      • +
      • Purus sodales ultricies
      • +
      • Vestibulum laoreet porttitor sem
      • +
      • Ac tristique libero volutpat at
      • +
      +
    • +
    • Faucibus porta lacus fringilla vel
    • +
    • Aenean sit amet erat nunc
    • +
    • Eget porttitor lorem
    • +
    +
    +{% highlight html %} +
      +
    • ...
    • +
    +{% endhighlight %} + +

    Ordered

    +

    A list of items in which the order does explicitly matter.

    +
    +
      +
    1. Lorem ipsum dolor sit amet
    2. +
    3. Consectetur adipiscing elit
    4. +
    5. Integer molestie lorem at massa
    6. +
    7. Facilisis in pretium nisl aliquet
    8. +
    9. Nulla volutpat aliquam velit
    10. +
    11. Faucibus porta lacus fringilla vel
    12. +
    13. Aenean sit amet erat nunc
    14. +
    15. Eget porttitor lorem
    16. +
    +
    +{% highlight html %} +
      +
    1. ...
    2. +
    +{% endhighlight %} + +

    Unstyled

    +

    Remove the default list-style and left margin on list items (immediate children only). This only applies to immediate children list items, meaning you will need to add the class for any nested lists as well.

    +
    +
      +
    • Lorem ipsum dolor sit amet
    • +
    • Consectetur adipiscing elit
    • +
    • Integer molestie lorem at massa
    • +
    • Facilisis in pretium nisl aliquet
    • +
    • Nulla volutpat aliquam velit +
        +
      • Phasellus iaculis neque
      • +
      • Purus sodales ultricies
      • +
      • Vestibulum laoreet porttitor sem
      • +
      • Ac tristique libero volutpat at
      • +
      +
    • +
    • Faucibus porta lacus fringilla vel
    • +
    • Aenean sit amet erat nunc
    • +
    • Eget porttitor lorem
    • +
    +
    +{% highlight html %} +
      +
    • ...
    • +
    +{% endhighlight %} + +

    Inline

    +

    Place all list items on a single line with display: inline-block; and some light padding.

    +
    +
      +
    • Lorem ipsum
    • +
    • Phasellus iaculis
    • +
    • Nulla volutpat
    • +
    +
    +{% highlight html %} +
      +
    • ...
    • +
    +{% endhighlight %} + +

    Description

    +

    A list of terms with their associated descriptions.

    +
    +
    +
    Description lists
    +
    A description list is perfect for defining terms.
    +
    Euismod
    +
    Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
    +
    Donec id elit non mi porta gravida at eget metus.
    +
    Malesuada porta
    +
    Etiam porta sem malesuada magna mollis euismod.
    +
    +
    +{% highlight html %} +
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +

    Horizontal description

    +

    Make terms and descriptions in <dl> line up side-by-side. Starts off stacked like default <dl>s, but when the navbar expands, so do these.

    +
    +
    +
    Description lists
    +
    A description list is perfect for defining terms.
    +
    Euismod
    +
    Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
    +
    Donec id elit non mi porta gravida at eget metus.
    +
    Malesuada porta
    +
    Etiam porta sem malesuada magna mollis euismod.
    +
    Felis euismod semper eget lacinia
    +
    Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
    +
    +
    +{% highlight html %} +
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +
    +

    Auto-truncating

    +

    Horizontal description lists will truncate terms that are too long to fit in the left column with text-overflow. In narrower viewports, they will change to the default stacked layout.

    +
    +
    diff --git a/vendor/bootstrap/docs/_includes/customizer-variables.html b/vendor/bootstrap/docs/_includes/customizer-variables.html new file mode 100644 index 000000000..3af692279 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/customizer-variables.html @@ -0,0 +1,1892 @@ + + +

    Colors

    +

    Gray and brand colors for use across Bootstrap.

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +

    Scaffolding

    +

    Settings for some of the most global styles.

    +
    +
    + + +

    Background color for <body>.

    +
    +
    + + +

    Global text color on <body>.

    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + +
    +
    +

    Typography

    +

    Font, line-height, and color for body text, headings, and more.

    +
    +
    + + +
    +
    + + +
    +
    + + +

    Default monospace fonts for <code>, <kbd>, and <pre>.

    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +

    Unit-less line-height for use in components like buttons.

    +
    +
    + + +

    Computed "line-height" (font-size * line-height) for use with margin, padding, etc.

    +
    +
    +
    + + +

    By default, this inherits from the <body>.

    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    Iconography

    +

    Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.

    +
    +
    + + +

    Load fonts from this directory.

    +
    +
    + + +

    File name for all font files.

    +
    +
    + + +

    Element ID within SVG icon file.

    +
    +
    +

    Components

    +

    Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +

    Global color for active items (e.g., navs or dropdowns).

    +
    +
    + + +

    Global background color for active items (e.g., navs or dropdowns).

    +
    +
    +
    + + +

    Width of the border for generating carets that indicate dropdowns.

    +
    +
    + + +

    Carets increase slightly in size for larger components.

    +
    +
    +

    Tables

    +

    Customizes the .table component with basic values, each used across all table variations.

    +
    +
    + + +

    Padding for <th>s and <td>s.

    +
    +
    + + +

    Padding for cells in .table-condensed.

    +
    +
    + + +

    Default background color used for all tables.

    +
    +
    +
    + + +

    Background color used for .table-striped.

    +
    +
    + + +

    Background color used for .table-hover.

    +
    +
    + + +
    +
    +
    + + +

    Border color for table and cell borders.

    +
    +
    +

    Buttons

    +

    For each of Bootstrap's buttons, define text, background and border color.

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +

    Forms

    +
    +
    + + +

    <input> background color

    +
    +
    + + +

    <input disabled> background color

    +
    +
    + + +

    Text color for <input>s

    +
    +
    +
    + + +

    <input> border color

    +
    +
    + + +

    Default .form-control border radius

    +
    +
    + + +

    Large .form-control border radius

    +
    +
    +
    + + +

    Small .form-control border radius

    +
    +
    + + +

    Border color for inputs on focus

    +
    +
    + + +

    Placeholder text color

    +
    +
    +
    + + +

    Default .form-control height

    +
    +
    + + +

    Large .form-control height

    +
    +
    + + +

    Small .form-control height

    +
    +
    +
    + + +

    .form-group margin

    +
    +
    + + +
    +
    + + +
    +
    +
    + + +

    Background color for textual input addons

    +
    +
    + + +

    Border color for textual input addons

    +
    +
    + + +

    Disabled cursor for form controls and buttons.

    +
    +
    + +

    Dropdown menu container and contents.

    +
    +
    + + +

    Background for the dropdown menu.

    +
    +
    + + +

    Dropdown menu border-color.

    +
    +
    + + +

    Dropdown menu border-color for IE8.

    +
    +
    +
    + + +

    Divider color for between dropdown items.

    +
    +
    + + + +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    + + + +
    +
    + + +

    Text color for headers within dropdown menus.

    +
    +
    + + +

    Deprecated @dropdown-caret-color as of v3.1.0

    +
    +
    +

    Media queries breakpoints

    +

    Define the breakpoints at which your layout will change, adapting to different screen sizes.

    +
    +
    + + +

    Deprecated @screen-xs as of v3.0.1

    +
    +
    + + +

    Deprecated @screen-xs-min as of v3.2.0

    +
    +
    + + +

    Deprecated @screen-phone as of v3.0.1

    +
    +
    +
    + + +

    Deprecated @screen-sm as of v3.0.1

    +
    +
    + + +
    +
    + + +

    Deprecated @screen-tablet as of v3.0.1

    +
    +
    +
    + + +

    Deprecated @screen-md as of v3.0.1

    +
    +
    + + +
    +
    + + +

    Deprecated @screen-desktop as of v3.0.1

    +
    +
    +
    + + +

    Deprecated @screen-lg as of v3.0.1

    +
    +
    + + +
    +
    + + +

    Deprecated @screen-lg-desktop as of v3.0.1

    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    Grid system

    +

    Define your custom responsive grid.

    +
    +
    + + +

    Number of columns in the grid.

    +
    +
    + + +

    Padding between columns. Gets divided in half for the left and right.

    +
    +
    + + +

    Point at which the navbar becomes uncollapsed.

    +
    +
    +
    + + +

    Point at which the navbar begins collapsing.

    +
    +
    +

    Container sizes

    +

    Define the maximum width of .container for different screen sizes.

    +
    +
    + + +
    +
    + + +

    For @screen-sm-min and up.

    +
    +
    + + +
    +
    +
    + + +

    For @screen-md-min and up.

    +
    +
    + + +
    +
    + + +

    For @screen-lg-min and up.

    +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    Inverted navbar

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + +

    Shared nav styles

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    Tabs

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    Pills

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    Pagination

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    Pager

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    Jumbotron

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    Form states and alerts

    +

    Define colors for form feedback states and, by default, alerts.

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    Tooltips

    +
    +
    + + +

    Tooltip max width

    +
    +
    + + +

    Tooltip text color

    +
    +
    + + +

    Tooltip background color

    +
    +
    +
    + + +
    +
    + + +

    Tooltip arrow width

    +
    +
    + + +

    Tooltip arrow color

    +
    +
    +

    Popovers

    +
    +
    + + +

    Popover body background color

    +
    +
    + + +

    Popover maximum width

    +
    +
    + + +

    Popover border color

    +
    +
    +
    + + +

    Popover fallback border color

    +
    +
    + + +

    Popover title background color

    +
    +
    + + +

    Popover arrow width

    +
    +
    +
    + + +

    Popover arrow color

    +
    +
    + + +

    Popover outer arrow width

    +
    +
    + + +

    Popover outer arrow color

    +
    +
    +
    + + +

    Popover outer arrow fallback color

    +
    +
    +

    Labels

    +
    +
    + + +

    Default label background color

    +
    +
    + + +

    Primary label background color

    +
    +
    + + +

    Success label background color

    +
    +
    +
    + + +

    Info label background color

    +
    +
    + + +

    Warning label background color

    +
    +
    + + +

    Danger label background color

    +
    +
    +
    + + +

    Default label text color

    +
    +
    + + + +
    +
    +

    Modals

    +
    +
    + + +

    Padding applied to the modal body

    +
    +
    + + +

    Padding applied to the modal title

    +
    +
    + + +

    Modal title line-height

    +
    +
    +
    + + +

    Background color of modal content area

    +
    +
    + + +

    Modal content border color

    +
    +
    + + +

    Modal content border color for IE8

    +
    +
    +
    + + +

    Modal backdrop background color

    +
    +
    + + +

    Modal backdrop opacity

    +
    +
    + + +

    Modal header border color

    +
    +
    +
    + + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    Alerts

    +

    Define alert colors, border radius, and padding.

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    Progress bars

    +
    +
    + + +

    Background color of the whole progress component

    +
    +
    + + +

    Progress bar text color

    +
    +
    + + +

    Variable for setting rounded corners on progress bar.

    +
    +
    +
    + + +

    Default progress bar color

    +
    +
    + + +

    Success progress bar color

    +
    +
    + + +

    Warning progress bar color

    +
    +
    +
    + + +

    Danger progress bar color

    +
    +
    + + +

    Info progress bar color

    +
    +
    +

    List group

    +
    +
    + + +

    Background color on .list-group-item

    +
    +
    + + +

    .list-group-item border color

    +
    +
    + + +

    List group border radius

    +
    +
    +
    + + +

    Background color of single list items on hover

    +
    +
    + + +

    Text color of active list items

    +
    +
    + + +

    Background color of active list items

    +
    +
    +
    + + +

    Border color of active list elements

    +
    +
    + + +

    Text color for content within active list items

    +
    +
    + + +

    Text color of disabled list items

    +
    +
    +
    + + +

    Background color of disabled list items

    +
    +
    + + +

    Text color for content within disabled list items

    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +

    Panels

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +

    Border color for elements within panels

    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    Thumbnails

    +
    +
    + + +

    Padding around the thumbnail image

    +
    +
    + + +

    Thumbnail background color

    +
    +
    + + +

    Thumbnail border color

    +
    +
    +
    + + +

    Thumbnail border radius

    +
    +
    + + +

    Custom text color for thumbnail captions

    +
    +
    + + +

    Padding around the thumbnail caption

    +
    +
    +

    Wells

    +
    +
    + + +
    +
    + + +
    +
    +

    Badges

    +
    +
    + + +
    +
    + + + +
    +
    + + +
    +
    +
    + + +

    Badge text color in active nav link

    +
    +
    + + +

    Badge background color in active nav link

    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +

    Breadcrumb background color

    +
    +
    +
    + + +

    Breadcrumb text color

    +
    +
    + + +

    Text color of current page in the breadcrumb

    +
    +
    + + +

    Textual separator for between breadcrumb elements

    +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +

    Close

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    Code

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +

    Type

    +
    +
    + + +

    Horizontal offset for forms and lists.

    +
    +
    + + +

    Text muted color

    +
    +
    + + +

    Abbreviations and acronyms border color

    +
    +
    +
    + + +

    Headings small color

    +
    +
    + + +

    Blockquote small color

    +
    +
    + + +

    Blockquote font size

    +
    +
    +
    + + +

    Blockquote border color

    +
    +
    + + +

    Page header border color

    +
    +
    + + +

    Width of horizontal description list titles

    +
    +
    +
    + + +

    Point at which .dl-horizontal becomes horizontal

    +
    +
    + + +

    Horizontal line color.

    +
    +
    + \ No newline at end of file diff --git a/vendor/bootstrap/docs/_includes/footer.html b/vendor/bootstrap/docs/_includes/footer.html new file mode 100644 index 000000000..de9af4fc6 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/footer.html @@ -0,0 +1,53 @@ + + + + + + + + +{% if site.github %} + +{% else %} + +{% endif %} + +{% if page.layout == "default" %} + +{% endif %} + +{% if site.github %} + +{% else %} + {% for file in site.data.configBridge.paths.docsJs %} + + {% endfor %} +{% endif %} + +{% if page.slug == "customize" %} + + {% if site.github %} + + {% else %} + {% for file in site.data.configBridge.paths.customizerJs %} + + {% endfor %} + {% endif %} +{% endif %} diff --git a/vendor/bootstrap/docs/_includes/getting-started/accessibility.html b/vendor/bootstrap/docs/_includes/getting-started/accessibility.html new file mode 100644 index 000000000..5910a1b9f --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/accessibility.html @@ -0,0 +1,37 @@ +
    +

    Accessibility

    +

    Bootstrap follows common web standards and—with minimal extra effort—can be used to create sites that are accessible to those using AT.

    + +

    Skip navigation

    +

    If your navigation contains many links and comes before the main content in the DOM, add a Skip to main content link before the navigation (for a simple explanation, see this A11Y Project article on skip navigation links). Using the .sr-only class will visually hide the skip link, and the .sr-only-focusable class will ensure that the link becomes visible once focused (for sighted keyboard users).

    + +{% highlight html %} + + Skip to main content + ... +
    + +
    + +{% endhighlight %} + +

    Nested headings

    +

    When nesting headings (<h1> - <h6>), your primary document header should be an <h1>. Subsequent headings should make logical use of <h2> - <h6> such that screen readers can construct a table of contents for your pages.

    +

    Learn more at HTML CodeSniffer and Penn State's AccessAbility.

    + +

    Color contrast

    +

    Currently, some of the default color combinations available in Bootstrap (such as the various styled button classes, some of the code highlighting colors used for basic code blocks, the .bg-primary contextual background helper class, and the default link color when used on a white background) have a low contrast ratio (below the recommended ratio of 4.5:1). This can cause problems to users with low vision or who are color blind. These default colors may need to be modified to increase their contrast and legibility.

    + +

    Additional resources

    + +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/browser-device-support.html b/vendor/bootstrap/docs/_includes/getting-started/browser-device-support.html new file mode 100644 index 000000000..bfcc00e2e --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/browser-device-support.html @@ -0,0 +1,237 @@ +
    +

    Browser and device support

    +

    Bootstrap is built to work best in the latest desktop and mobile browsers, meaning older browsers might display differently styled, though fully functional, renderings of certain components.

    + +

    Supported browsers

    +

    Specifically, we support the latest versions of the following browsers and platforms.

    + +

    Alternative browsers which use the latest version of WebKit, Blink, or Gecko, whether directly or via the platform's web view API, are not explicitly supported. However, Bootstrap should (in most cases) display and function correctly in these browsers as well. More specific support information is provided below.

    + +

    Mobile devices

    +

    Generally speaking, Bootstrap supports the latest versions of each major platform's default browsers. Note that proxy browsers (such as Opera Mini, Opera Mobile's Turbo mode, UC Browser Mini, Amazon Silk) are not supported.

    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    ChromeFirefoxSafari
    Android Supported SupportedN/A
    iOS Supported Supported Supported
    +
    + +

    Desktop browsers

    +

    Similarly, the latest versions of most desktop browsers are supported.

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ChromeFirefoxInternet ExplorerOperaSafari
    Mac Supported SupportedN/A Supported Supported
    Windows Supported Supported Supported Supported Not supported
    +
    + +

    On Windows, we support Internet Explorer 8-11.

    + +

    For Firefox, in addition to the latest normal stable release, we also support the latest Extended Support Release (ESR) version of Firefox.

    + +

    Unofficially, Bootstrap should look and behave well enough in Chromium and Chrome for Linux, Firefox for Linux, and Internet Explorer 7, as well as Microsoft Edge, though they are not officially supported.

    +

    For a list of some of the browser bugs that Bootstrap has to grapple with, see our Wall of browser bugs.

    + +

    Internet Explorer 8 and 9

    +

    Internet Explorer 8 and 9 are also supported, however, please be aware that some CSS3 properties and HTML5 elements are not fully supported by these browsers. In addition, Internet Explorer 8 requires the use of Respond.js to enable media query support.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FeatureInternet Explorer 8Internet Explorer 9
    border-radius Not supported Supported
    box-shadow Not supported Supported
    transform Not supported Supported, with -ms prefix
    transition Not supported
    placeholder Not supported
    +
    + +

    Visit Can I use... for details on browser support of CSS3 and HTML5 features.

    + +

    Internet Explorer 8 and Respond.js

    +

    Beware of the following caveats when using Respond.js in your development and production environments for Internet Explorer 8.

    +

    Respond.js and cross-domain CSS

    +

    Using Respond.js with CSS hosted on a different (sub)domain (for example, on a CDN) requires some additional setup. See the Respond.js docs for details.

    +

    Respond.js and file://

    +

    Due to browser security rules, Respond.js doesn't work with pages viewed via the file:// protocol (like when opening a local HTML file). To test responsive features in IE8, view your pages over HTTP(S). See the Respond.js docs for details.

    +

    Respond.js and @import

    +

    Respond.js doesn't work with CSS that's referenced via @import. In particular, some Drupal configurations are known to use @import. See the Respond.js docs for details.

    + +

    Internet Explorer 8 and box-sizing

    +

    IE8 does not fully support box-sizing: border-box; when combined with min-width, max-width, min-height, or max-height. For that reason, as of v3.0.1, we no longer use max-width on .containers.

    + +

    Internet Explorer 8 and @font-face

    +

    IE8 has some issues with @font-face when combined with :before. Bootstrap uses that combination with its Glyphicons. If a page is cached, and loaded without the mouse over the window (i.e. hit the refresh button or load something in an iframe) then the page gets rendered before the font loads. Hovering over the page (body) will show some of the icons and hovering over the remaining icons will show those as well. See issue #13863 for details.

    + +

    IE Compatibility modes

    +

    Bootstrap is not supported in the old Internet Explorer compatibility modes. To be sure you're using the latest rendering mode for IE, consider including the appropriate <meta> tag in your pages:

    +{% highlight html %} + +{% endhighlight %} +

    Confirm the document mode by opening the debugging tools: press F12 and check the "Document Mode".

    +

    This tag is included in all of Bootstrap's documentation and examples to ensure the best rendering possible in each supported version of Internet Explorer.

    +

    See this StackOverflow question for more information.

    + +

    Internet Explorer 10 in Windows 8 and Windows Phone 8

    +

    Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't properly apply the media queries in Bootstrap's CSS. Normally you'd just add a quick snippet of CSS to fix this:

    +{% highlight scss %} +@-ms-viewport { width: device-width; } +{% endhighlight %} +

    However, this doesn't work for devices running Windows Phone 8 versions older than Update 3 (a.k.a. GDR3), as it causes such devices to show a mostly desktop view instead of narrow "phone" view. To address this, you'll need to include the following CSS and JavaScript to work around the bug.

    +{% highlight scss %} +@-ms-viewport { width: device-width; } +@-o-viewport { width: device-width; } +@viewport { width: device-width; } +{% endhighlight %} + +{% highlight js %} +// Copyright 2014-2019 Twitter, Inc. +// Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) +if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode( + '@-ms-viewport{width:auto!important}' + ) + ) + document.querySelector('head').appendChild(msViewportStyle) +} +{% endhighlight %} +

    For more information and usage guidelines, read Windows Phone 8 and Device-Width.

    +

    As a heads up, we include this in all of Bootstrap's documentation and examples as a demonstration.

    + +

    Safari percent rounding

    +

    The rendering engine of versions of Safari prior to v7.1 for OS X and Safari for iOS v8.0 had some trouble with the number of decimal places used in our .col-*-1 grid classes. So if you had 12 individual grid columns, you'd notice that they came up short compared to other rows of columns. Besides upgrading Safari/iOS, you have some options for workarounds:

    +
      +
    • Add .pull-right to your last grid column to get the hard-right alignment
    • +
    • Tweak your percentages manually to get the perfect rounding for Safari (more difficult than the first option)
    • +
    + +

    Modals, navbars, and virtual keyboards

    +

    Overflow and scrolling

    +

    Support for overflow: hidden on the <body> element is quite limited in iOS and Android. To that end, when you scroll past the top or bottom of a modal in either of those devices' browsers, the <body> content will begin to scroll. See Chrome bug #175502 (fixed in Chrome v40) and WebKit bug #153852.

    +

    iOS text fields and scrolling

    +

    As of iOS 9.3, while a modal is open, if the initial touch of a scroll gesture is within the boundary of a textual <input> or a <textarea>, the <body> content underneath the modal will be scrolled instead of the modal itself. See WebKit bug #153856.

    +

    Virtual keyboards

    +

    Also, note that if you're using a fixed navbar or using inputs within a modal, iOS has a rendering bug that doesn't update the position of fixed elements when the virtual keyboard is triggered. A few workarounds for this include transforming your elements to position: absolute or invoking a timer on focus to try to correct the positioning manually. This is not handled by Bootstrap, so it is up to you to decide which solution is best for your application.

    +

    Navbar Dropdowns

    +

    The .dropdown-backdrop element isn't used on iOS in the nav because of the complexity of z-indexing. Thus, to close dropdowns in navbars, you must directly click the dropdown element (or any other element which will fire a click event in iOS).

    + +

    Browser zooming

    +

    Page zooming inevitably presents rendering artifacts in some components, both in Bootstrap and the rest of the web. Depending on the issue, we may be able to fix it (search first and then open an issue if need be). However, we tend to ignore these as they often have no direct solution other than hacky workarounds.

    + +

    Sticky :hover/:focus on mobile

    +

    Even though real hovering isn't possible on most touchscreens, most mobile browsers emulate hovering support and make :hover "sticky". In other words, :hover styles start applying after tapping an element and only stop applying after the user taps some other element. This can cause Bootstrap's :hover states to become undesirably "stuck" on such browsers. Some mobile browsers also make :focus similarly sticky. There is currently no simple workaround for these issues other than removing such styles entirely.

    + +

    Printing

    +

    Even in some modern browsers, printing can be quirky.

    +

    In particular, as of Chrome v32 and regardless of margin settings, Chrome uses a viewport width significantly narrower than the physical paper size when resolving media queries while printing a webpage. This can result in Bootstrap's extra-small grid being unexpectedly activated when printing. See issue #12078 and Chrome bug #273306 for some details. Suggested workarounds:

    +
      +
    • Embrace the extra-small grid and make sure your page looks acceptable under it.
    • +
    • Customize the values of the @screen-* Less variables so that your printer paper is considered larger than extra-small.
    • +
    • Add custom media queries to change the grid size breakpoints for print media only.
    • +
    +

    Also, as of Safari v8.0, fixed-width .containers can cause Safari to use an unusually small font size when printing. See #14868 and WebKit bug #138192 for more details. One potential workaround for this is adding the following CSS:

    +{% highlight css %} +@media print { + .container { + width: auto; + } +} +{% endhighlight %} + +

    Android stock browser

    +

    Out of the box, Android 4.1 (and even some newer releases apparently) ship with the Browser app as the default web browser of choice (as opposed to Chrome). Unfortunately, the Browser app has lots of bugs and inconsistencies with CSS in general.

    +

    Select menus

    +

    On <select> elements, the Android stock browser will not display the side controls if there is a border-radius and/or border applied. (See this StackOverflow question for details.) Use the snippet of code below to remove the offending CSS and render the <select> as an unstyled element on the Android stock browser. The user agent sniffing avoids interference with Chrome, Safari, and Mozilla browsers.

    +{% highlight html %} + +{% endhighlight %} +

    Want to see an example? Check out this JS Bin demo.

    + +

    Validators

    +

    In order to provide the best possible experience to old and buggy browsers, Bootstrap uses CSS browser hacks in several places to target special CSS to certain browser versions in order to work around bugs in the browsers themselves. These hacks understandably cause CSS validators to complain that they are invalid. In a couple places, we also use bleeding-edge CSS features that aren't yet fully standardized, but these are used purely for progressive enhancement.

    +

    These validation warnings don't matter in practice since the non-hacky portion of our CSS does fully validate and the hacky portions don't interfere with the proper functioning of the non-hacky portion, hence why we deliberately ignore these particular warnings.

    +

    Our HTML docs likewise have some trivial and inconsequential HTML validation warnings due to our inclusion of a workaround for a certain Firefox bug.

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/community.html b/vendor/bootstrap/docs/_includes/getting-started/community.html new file mode 100644 index 000000000..c832e948c --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/community.html @@ -0,0 +1,13 @@ +
    +

    Community

    + +

    Stay up to date on the development of Bootstrap and reach out to the community with these helpful resources.

    + +

    You can also follow @getbootstrap on Twitter for the latest gossip and awesome music videos.

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/disabling-responsiveness.html b/vendor/bootstrap/docs/_includes/getting-started/disabling-responsiveness.html new file mode 100644 index 000000000..883e63bb9 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/disabling-responsiveness.html @@ -0,0 +1,22 @@ +
    +

    Disabling responsiveness

    + +

    Bootstrap automatically adapts your pages for various screen sizes. + Here's how to disable this feature so your page works like this non-responsive example.

    + +

    Steps to disable page responsiveness

    +
      +
    1. Omit the viewport <meta> mentioned in the CSS docs
    2. +
    3. Override the width on the .container for each grid tier with a single width, for example width: 970px !important; Be sure that this comes after the default Bootstrap CSS. You can optionally avoid the !important with media queries or some selector-fu.
    4. +
    5. If using navbars, remove all navbar collapsing and expanding behavior.
    6. +
    7. For grid layouts, use .col-xs-* classes in addition to, or in place of, the medium/large ones. Don't worry, the extra-small device grid scales to all resolutions.
    8. +
    +

    You'll still need Respond.js for IE8 (since our media queries are still there and need to be processed). + This disables the "mobile site" aspects of Bootstrap.

    + +

    Bootstrap template with responsiveness disabled

    +

    We've applied these steps to an example. Read its source code to see the specific changes implemented.

    +

    + View non-responsive example +

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/download.html b/vendor/bootstrap/docs/_includes/getting-started/download.html new file mode 100644 index 000000000..f29cb85af --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/download.html @@ -0,0 +1,63 @@ +
    +

    Download

    + +

    Bootstrap (currently v{{ site.current_version }}) has a few easy ways to quickly get started, each one appealing to a different skill level and use case. Read through to see what suits your particular needs.

    + +
    +
    +

    Bootstrap

    +

    Compiled and minified CSS, JavaScript, and fonts. No docs or original source files are included.

    +

    + Download Bootstrap +

    +
    +
    +

    Source code

    +

    Source Less, JavaScript, and font files, along with our docs. Requires a Less compiler and some setup.

    +

    + Download source +

    +
    +
    +

    Sass

    +

    Bootstrap ported from Less to Sass for easy inclusion in Rails, Compass, or Sass-only projects.

    +

    + Download Sass +

    +
    +
    + +

    BootstrapCDN

    +

    The folks over at StackPath graciously provide CDN support for Bootstrap's CSS and JavaScript. Just use these BootstrapCDN links.

    +{% highlight html %} + + + + + + + + +{% endhighlight %} + +

    Install with Bower

    +

    You can also install and manage Bootstrap's Less, CSS, JavaScript, and fonts using Bower:

    + {% highlight bash %}bower install bootstrap{% endhighlight %} + +

    Install with npm

    +

    You can also install Bootstrap using npm:

    + {% highlight bash %}npm install bootstrap@3{% endhighlight %} +

    require('bootstrap') will load all of Bootstrap's jQuery plugins onto the jQuery object. The bootstrap module itself does not export anything. You can manually load Bootstrap's jQuery plugins individually by loading the /js/*.js files under the package's top-level directory.

    +

    Bootstrap's package.json contains some additional metadata under the following keys:

    +
      +
    • less - path to Bootstrap's main Less source file
    • +
    • style - path to Bootstrap's non-minified CSS that's been precompiled using the default settings (no customization)
    • +
    + +

    Install with Composer

    +

    You can also install and manage Bootstrap's Less, CSS, JavaScript, and fonts using Composer:

    + {% highlight bash %}composer require twbs/bootstrap{% endhighlight %} + +

    Autoprefixer required for Less/Sass

    +

    Bootstrap uses Autoprefixer to deal with CSS vendor prefixes. If you're compiling Bootstrap from its Less/Sass source and not using our Gruntfile, you'll need to integrate Autoprefixer into your build process yourself. If you're using precompiled Bootstrap or using our Gruntfile, you don't need to worry about this because Autoprefixer is already integrated into our Gruntfile.

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/examples.html b/vendor/bootstrap/docs/_includes/getting-started/examples.html new file mode 100644 index 000000000..a4470cd01 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/examples.html @@ -0,0 +1,161 @@ +
    +

    Examples

    + +

    Build on the basic template above with Bootstrap's many components. We encourage you to customize and adapt Bootstrap to suit your individual project's needs.

    + +

    Get the source code for every example below by downloading the Bootstrap repository. Examples can be found in the docs/examples/ directory.

    + +

    Using the framework

    +
    +
    + + Starter template example + +

    Starter template

    +

    Nothing but the basics: compiled CSS and JavaScript along with a container.

    +
    +
    + + Bootstrap theme example + +

    Bootstrap theme

    +

    Load the optional Bootstrap theme for a visually enhanced experience.

    +
    +
    + +
    + + Multiple grids example + +

    Grids

    +

    Multiple examples of grid layouts with all four tiers, nesting, and more.

    +
    +
    + + Jumbotron example + +

    Jumbotron

    +

    Build around the jumbotron with a navbar and some basic grid columns.

    +
    +
    + +
    + + Narrow jumbotron example + +

    Narrow jumbotron

    +

    Build a more custom page by narrowing the default container and jumbotron.

    +
    +
    + +

    Navbars in action

    +
    +
    + + Navbar example + +

    Navbar

    +

    Super basic template that includes the navbar along with some additional content.

    +
    +
    + + Static top navbar example + +

    Static top navbar

    +

    Super basic template with a static top navbar along with some additional content.

    +
    +
    + +
    + + Fixed navbar example + +

    Fixed navbar

    +

    Super basic template with a fixed top navbar along with some additional content.

    +
    +
    + +

    Custom components

    +
    +
    + + A one-page template example + +

    Cover

    +

    A one-page template for building simple and beautiful home pages.

    +
    +
    + + Carousel example + +

    Carousel

    +

    Customize the navbar and carousel, then add some new components.

    +
    +
    + +
    + + Blog layout example + +

    Blog

    +

    Simple two-column blog layout with custom navigation, header, and type.

    +
    +
    + + Dashboard example + +

    Dashboard

    +

    Basic structure for an admin dashboard with fixed sidebar and navbar.

    +
    +
    + +
    + + Sign-in page example + +

    Sign-in page

    +

    Custom form layout and design for a simple sign in form.

    +
    +
    + + Justified nav example + +

    Justified nav

    +

    Create a custom navbar with justified links. Heads up! Not too Safari friendly.

    +
    +
    + +
    + + Sticky footer example + +

    Sticky footer

    +

    Attach a footer to the bottom of the viewport when the content is shorter than it.

    +
    +
    + + Sticky footer with navbar example + +

    Sticky footer with navbar

    +

    Attach a footer to the bottom of the viewport with a fixed navbar at the top.

    +
    +
    + +

    Experiments

    +
    +
    + + Non-responsive example + +

    Non-responsive Bootstrap

    +

    Easily disable the responsiveness of Bootstrap per our docs.

    +
    +
    + + Off-canvas navigation example + +

    Off-canvas

    +

    Build a toggleable off-canvas navigation menu for use with Bootstrap.

    +
    +
    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/grunt.html b/vendor/bootstrap/docs/_includes/getting-started/grunt.html new file mode 100644 index 000000000..248442189 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/grunt.html @@ -0,0 +1,35 @@ +
    +

    Compiling CSS and JavaScript

    + +

    Bootstrap uses Grunt for its build system, with convenient methods for working with the framework. It's how we compile our code, run tests, and more.

    + +

    Installing Grunt

    +

    To install Grunt, you must first download and install node.js (which includes npm). npm stands for node packaged modules and is a way to manage development dependencies through node.js.

    + + Then, from the command line: +
      +
    1. Install grunt-cli globally with npm install -g grunt-cli.
    2. +
    3. Navigate to the root /bootstrap/ directory, then run npm install. npm will look at the package.json file and automatically install the necessary local dependencies listed there.
    4. +
    + +

    When completed, you'll be able to run the various Grunt commands provided from the command line.

    + +

    Available Grunt commands

    +

    grunt dist (Just compile CSS and JavaScript)

    +

    Regenerates the /dist/ directory with compiled and minified CSS and JavaScript files. As a Bootstrap user, this is normally the command you want.

    + +

    grunt watch (Watch)

    +

    Watches the Less source files and automatically recompiles them to CSS whenever you save a change.

    + +

    grunt test (Run tests)

    +

    Runs JSHint and runs the QUnit tests in real browsers thanks to Karma.

    + +

    grunt docs (Build & test the docs assets)

    +

    Builds and tests CSS, JavaScript, and other assets which are used when running the documentation locally via bundle exec jekyll serve.

    + +

    grunt (Build absolutely everything and run tests)

    +

    Compiles and minifies CSS and JavaScript, builds the documentation website, runs the HTML5 validator against the docs, regenerates the Customizer assets, and more. Requires Jekyll. Usually only necessary if you're hacking on Bootstrap itself.

    + +

    Troubleshooting

    +

    Should you encounter problems with installing dependencies or running Grunt commands, first delete the /node_modules/ directory generated by npm. Then, rerun npm install.

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/license.html b/vendor/bootstrap/docs/_includes/getting-started/license.html new file mode 100644 index 000000000..06ece5c70 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/license.html @@ -0,0 +1,34 @@ +
    +

    License FAQs

    +

    Bootstrap is released under the MIT license and is copyright {{ site.time | date: "%Y" }} Twitter. Boiled down to smaller chunks, it can be described with the following conditions.

    + +

    It requires you to:

    +
      +
    • Keep the license and copyright notice included in Bootstrap's CSS and JavaScript files when you use them in your works
    • +
    + +

    It permits you to:

    +
      +
    • Freely download and use Bootstrap, in whole or in part, for personal, private, company internal, or commercial purposes
    • +
    • Use Bootstrap in packages or distributions that you create
    • +
    • Modify the source code
    • +
    • Grant a sublicense to modify and distribute Bootstrap to third parties not included in the license
    • +
    + +

    It forbids you to:

    +
      +
    • Hold the authors and license owners liable for damages as Bootstrap is provided without warranty
    • +
    • Hold the creators or copyright holders of Bootstrap liable
    • +
    • Redistribute any piece of Bootstrap without proper attribution
    • +
    • Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your distribution
    • +
    • Use any marks owned by Twitter in any way that might state or imply that you created the Twitter software in question
    • +
    + +

    It does not require you to:

    +
      +
    • Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it
    • +
    • Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged)
    • +
    + +

    The full Bootstrap license is located in the project repository for more information.

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/template.html b/vendor/bootstrap/docs/_includes/getting-started/template.html new file mode 100644 index 000000000..b5497cf06 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/template.html @@ -0,0 +1,37 @@ +
    +

    Basic template

    + +

    Start with this basic HTML template, or modify these examples. We hope you'll customize our templates and examples, adapting them to suit your needs.

    + +

    Copy the HTML below to begin working with a minimal Bootstrap document.

    +{% highlight html %} + + + + + + + + Bootstrap 101 Template + + + + + + + + + +

    Hello, world!

    + + + + + + + +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/third-party-support.html b/vendor/bootstrap/docs/_includes/getting-started/third-party-support.html new file mode 100644 index 000000000..ef8992cd0 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/third-party-support.html @@ -0,0 +1,51 @@ +
    +

    Third party support

    +

    While we don't officially support any third party plugins or add-ons, we do offer some useful advice to help avoid potential issues in your projects.

    + +

    Box-sizing

    +

    Some third party software, including Google Maps and Google Custom Search Engine, conflict with Bootstrap due to * { box-sizing: border-box; }, a rule which makes it so padding does not affect the final computed width of an element. Learn more about box model and sizing at CSS Tricks.

    +

    Depending on the context, you may override as-needed (Option 1) or reset the box-sizing for entire regions (Option 2).

    +{% highlight scss %} +/* Box-sizing resets + * + * Reset individual elements or override regions to avoid conflicts due to + * global box model settings of Bootstrap. Two options, individual overrides and + * region resets, are available as plain CSS and uncompiled Less formats. + */ + +/* Option 1A: Override a single element's box model via CSS */ +.element { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* Option 1B: Override a single element's box model by using a Bootstrap Less mixin */ +.element { + .box-sizing(content-box); +} + +/* Option 2A: Reset an entire region via CSS */ +.reset-box-sizing, +.reset-box-sizing *, +.reset-box-sizing *:before, +.reset-box-sizing *:after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* Option 2B: Reset an entire region with a custom Less mixin */ +.reset-box-sizing { + &, + *, + *:before, + *:after { + .box-sizing(content-box); + } +} +.element { + .reset-box-sizing(); +} +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/tools.html b/vendor/bootstrap/docs/_includes/getting-started/tools.html new file mode 100644 index 000000000..826fe80fc --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/tools.html @@ -0,0 +1,6 @@ +
    +

    Tools

    + +

    Bootlint

    +

    Bootlint is the official Bootstrap HTML linter tool. It automatically checks for several common HTML mistakes in webpages that are using Bootstrap in a fairly "vanilla" way. Vanilla Bootstrap's components/widgets require their parts of the DOM to conform to certain structures. Bootlint checks that instances of Bootstrap components have correctly-structured HTML. Consider adding Bootlint to your Bootstrap web development toolchain so that none of the common mistakes slow down your project's development.

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/translations.html b/vendor/bootstrap/docs/_includes/getting-started/translations.html new file mode 100644 index 000000000..215f790de --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/translations.html @@ -0,0 +1,12 @@ +
    +

    Translations

    + +

    Community members have translated Bootstrap's documentation into various languages. None are officially supported and they may not always be up to date.

    + +

    We don't help organize or host translations, we just link to them.

    +

    Finished a new or better translation? Open a pull request to add it to our list.

    +
    diff --git a/vendor/bootstrap/docs/_includes/getting-started/whats-included.html b/vendor/bootstrap/docs/_includes/getting-started/whats-included.html new file mode 100644 index 000000000..a82c11889 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/getting-started/whats-included.html @@ -0,0 +1,55 @@ +
    +

    What's included

    + +

    Bootstrap is downloadable in two forms, within which you'll find the following directories and files, logically grouping common resources and providing both compiled and minified variations.

    + +
    +

    jQuery required

    +

    Please note that all JavaScript plugins require jQuery to be included, as shown in the starter template. Consult our bower.json to see which versions of jQuery are supported.

    +
    + +

    Precompiled Bootstrap

    +

    Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:

    + +{% highlight text %} +bootstrap/ +├── css/ +│ ├── bootstrap.css +│ ├── bootstrap.css.map +│ ├── bootstrap.min.css +│ ├── bootstrap.min.css.map +│ ├── bootstrap-theme.css +│ ├── bootstrap-theme.css.map +│ ├── bootstrap-theme.min.css +│ └── bootstrap-theme.min.css.map +├── js/ +│ ├── bootstrap.js +│ └── bootstrap.min.js +└── fonts/ + ├── glyphicons-halflings-regular.eot + ├── glyphicons-halflings-regular.svg + ├── glyphicons-halflings-regular.ttf + ├── glyphicons-halflings-regular.woff + └── glyphicons-halflings-regular.woff2 +{% endhighlight %} + +

    This is the most basic form of Bootstrap: precompiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (bootstrap.*), as well as compiled and minified CSS and JS (bootstrap.min.*). CSS source maps (bootstrap.*.map) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme.

    + +

    Bootstrap source code

    +

    The Bootstrap source code download includes the precompiled CSS, JavaScript, and font assets, along with source Less, JavaScript, and documentation. More specifically, it includes the following and more:

    +{% highlight text %} +bootstrap/ +├── less/ +├── js/ +├── fonts/ +├── dist/ +│ ├── css/ +│ ├── js/ +│ └── fonts/ +└── docs/ + └── examples/ +{% endhighlight %} +

    The less/, js/, and fonts/ are the source code for our CSS, JS, and icon fonts (respectively). The dist/ folder includes everything listed in the precompiled download section above. The docs/ folder includes the source code for our documentation, and examples/ of Bootstrap usage. Beyond that, any other included file provides support for packages, license information, and development.

    +
    diff --git a/vendor/bootstrap/docs/_includes/header.html b/vendor/bootstrap/docs/_includes/header.html new file mode 100644 index 000000000..8b0e175d1 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/header.html @@ -0,0 +1,60 @@ + + + + + + + + {% if page.layout == "home" %} + {{ page.title }} + {% else %} + {{ page.title }} · Bootstrap + {% endif %} + + + +{% if site.github %} + +{% else %} + +{% endif %} + +{% if page.slug == "css" or page.slug == "components" or page.slug == "js" %} + + {% if site.github %} + + {% else %} + + {% endif %} +{% endif %} + +{% if page.layout == "default" %} + +{% endif %} + + +{% if site.github %} + +{% else %} + +{% endif %} + + + + + + + + + + diff --git a/vendor/bootstrap/docs/_includes/js/affix.html b/vendor/bootstrap/docs/_includes/js/affix.html new file mode 100644 index 000000000..bdd896b82 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/affix.html @@ -0,0 +1,129 @@ +
    +

    Affix affix.js

    + +

    Example

    +

    The affix plugin toggles position: fixed; on and off, emulating the effect found with position: sticky;. The subnavigation on the right is a live demo of the affix plugin.

    + +
    + +

    Usage

    +

    Use the affix plugin via data attributes or manually with your own JavaScript. In both situations, you must provide CSS for the positioning and width of your affixed content.

    +

    Note: Do not use the affix plugin on an element contained in a relatively positioned element, such as a pulled or pushed column, due to a Safari rendering bug.

    + +

    Positioning via CSS

    +

    The affix plugin toggles between three classes, each representing a particular state: .affix, .affix-top, and .affix-bottom. You must provide the styles, with the exception of position: fixed; on .affix, for these classes yourself (independent of this plugin) to handle the actual positions.

    +

    Here's how the affix plugin works:

    +
      +
    1. To start, the plugin adds .affix-top to indicate the element is in its top-most position. At this point no CSS positioning is required.
    2. +
    3. Scrolling past the element you want affixed should trigger the actual affixing. This is where .affix replaces .affix-top and sets position: fixed; (provided by Bootstrap's CSS).
    4. +
    5. If a bottom offset is defined, scrolling past it should replace .affix with .affix-bottom. Since offsets are optional, setting one requires you to set the appropriate CSS. In this case, add position: absolute; when necessary. The plugin uses the data attribute or JavaScript option to determine where to position the element from there.
    6. +
    +

    Follow the above steps to set your CSS for either of the usage options below.

    + +

    Via data attributes

    +

    To easily add affix behavior to any element, just add data-spy="affix" to the element you want to spy on. Use offsets to define when to toggle the pinning of an element.

    + +{% highlight html %} +
    + ... +
    +{% endhighlight %} + +

    Via JavaScript

    +

    Call the affix plugin via JavaScript:

    +{% highlight js %} +$('#myAffix').affix({ + offset: { + top: 100, + bottom: function () { + return (this.bottom = $('.footer').outerHeight(true)) + } + } +}) +{% endhighlight %} + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-offset-top="200".

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    offsetnumber | function | object10Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and bottom directions. To provide a unique, bottom and top offset just provide an object offset: { top: 10 } or offset: { top: 10, bottom: 5 }. Use a function when you need to dynamically calculate an offset.
    targetselector | node | jQuery elementthe window objectSpecifies the target element of the affix.
    +
    + +

    Methods

    + +

    .affix(options)

    +

    Activates your content as affixed content. Accepts an optional options object.

    +{% highlight js %} +$('#myAffix').affix({ + offset: 15 +}) +{% endhighlight %} + +

    .affix('checkPosition')

    +

    Recalculates the state of the affix based on the dimensions, position, and scroll position of the relevant elements. The .affix, .affix-top, and .affix-bottom classes are added to or removed from the affixed content according to the new state. This method needs to be called whenever the dimensions of the affixed content or the target element are changed, to ensure correct positioning of the affixed content.

    + {% highlight js %}$('#myAffix').affix('checkPosition'){% endhighlight %} + +

    Events

    +

    Bootstrap's affix plugin exposes a few events for hooking into affix functionality.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    affix.bs.affixThis event fires immediately before the element has been affixed.
    affixed.bs.affixThis event is fired after the element has been affixed.
    affix-top.bs.affixThis event fires immediately before the element has been affixed-top.
    affixed-top.bs.affixThis event is fired after the element has been affixed-top.
    affix-bottom.bs.affixThis event fires immediately before the element has been affixed-bottom.
    affixed-bottom.bs.affixThis event is fired after the element has been affixed-bottom.
    +
    +
    diff --git a/vendor/bootstrap/docs/_includes/js/alerts.html b/vendor/bootstrap/docs/_includes/js/alerts.html new file mode 100644 index 000000000..711fd6c40 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/alerts.html @@ -0,0 +1,73 @@ +
    +

    Alert messages alert.js

    + +

    Example alerts

    +

    Add dismiss functionality to all alert messages with this plugin.

    +

    When using a .close button, it must be the first child of the .alert-dismissible and no text content may come before it in the markup.

    +
    + + + +
    + + +

    Usage

    + +

    Just add data-dismiss="alert" to your close button to automatically give an alert close functionality. Closing an alert removes it from the DOM.

    + +{% highlight html %} + +{% endhighlight %} + +

    To have your alerts use animation when closing, make sure they have the .fade and .in classes already applied to them.

    + +

    Methods

    + +

    $().alert()

    +

    Makes an alert listen for click events on descendant elements which have the data-dismiss="alert" attribute. (Not necessary when using the data-api's auto-initialization.)

    + +

    $().alert('close')

    +

    Closes an alert by removing it from the DOM. If the .fade and .in classes are present on the element, the alert will fade out before it is removed.

    + + +

    Events

    +

    Bootstrap's alert plugin exposes a few events for hooking into alert functionality.

    +
    + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    close.bs.alertThis event fires immediately when the close instance method is called.
    closed.bs.alertThis event is fired when the alert has been closed (will wait for CSS transitions to complete).
    +
    +{% highlight js %} +$('#myAlert').on('closed.bs.alert', function () { + // do something… +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/buttons.html b/vendor/bootstrap/docs/_includes/js/buttons.html new file mode 100644 index 000000000..e6ddba2db --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/buttons.html @@ -0,0 +1,139 @@ +
    +

    Buttons button.js

    + +

    Do more with buttons. Control button states or create groups of buttons for more components like toolbars.

    + +
    +

    Cross-browser compatibility

    +

    Firefox persists form control states (disabledness and checkedness) across page loads. A workaround for this is to use autocomplete="off". See Mozilla bug #654072.

    +
    + +

    Stateful

    +

    Add data-loading-text="Loading..." to use a loading state on a button.

    +

    This feature is deprecated since v3.3.5 and has been removed in v4.

    +
    +

    Use whichever state you like!

    +

    For the sake of this demonstration, we are using data-loading-text and $().button('loading'), but that's not the only state you can use. See more on this below in the $().button(string) documentation.

    +
    +
    + +
    +{% highlight html %} + + + +{% endhighlight %} + +

    Single toggle

    +

    Add data-toggle="button" to activate toggling on a single button.

    +
    +

    Pre-toggled buttons need .active and aria-pressed="true"

    +

    For pre-toggled buttons, you must add the .active class and the aria-pressed="true" attribute to the button yourself.

    +
    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Checkbox / Radio

    +

    Add data-toggle="buttons" to a .btn-group containing checkbox or radio inputs to enable toggling in their respective styles.

    +
    +

    Preselected options need .active

    +

    For preselected options, you must add the .active class to the input's label yourself.

    +
    +
    +

    Visual checked state only updated on click

    +

    If the checked state of a checkbox button is updated without firing a click event on the button (e.g. via <input type="reset"> or via setting the checked property of the input), you will need to toggle the .active class on the input's label yourself.

    +
    +
    +
    + + + +
    +
    +{% highlight html %} +
    + + + +
    +{% endhighlight %} + +
    +
    + + + +
    +
    +{% highlight html %} +
    + + + +
    +{% endhighlight %} + +

    Methods

    +

    $().button('toggle')

    +

    Toggles push state. Gives the button the appearance that it has been activated.

    + +

    $().button('reset')

    +

    Resets button state - swaps text to original text. This method is asynchronous and returns before the resetting has actually completed.

    + +

    $().button(string)

    +

    Swaps text to any data defined text state.

    + +{% highlight html %} + + + +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/carousel.html b/vendor/bootstrap/docs/_includes/js/carousel.html new file mode 100644 index 000000000..0c3a0f4d0 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/carousel.html @@ -0,0 +1,260 @@ +
    +

    Carousel carousel.js

    + +

    A slideshow component for cycling through elements, like a carousel. Nested carousels are not supported.

    + + +
    + +
    +{% highlight html %} + +{% endhighlight %} + + + + + + + + + +

    Optional captions

    +

    Add captions to your slides easily with the .carousel-caption element within any .item. Place just about any optional HTML within there and it will be automatically aligned and formatted.

    +
    + +
    +{% highlight html %} +
    + ... + +
    +{% endhighlight %} + + + +

    Multiple carousels

    +

    Carousels require the use of an id on the outermost container (the .carousel) for carousel controls to function properly. When adding multiple carousels, or when changing a carousel's id, be sure to update the relevant controls.

    + +

    Via data attributes

    +

    Use data attributes to easily control the position of the carousel. data-slide accepts the keywords prev or next, which alters the slide position relative to its current position. Alternatively, use data-slide-to to pass a raw slide index to the carousel data-slide-to="2", which shifts the slide position to a particular index beginning with 0.

    +

    The data-ride="carousel" attribute is used to mark a carousel as animating starting at page load. It cannot be used in combination with (redundant and unnecessary) explicit JavaScript initialization of the same carousel.

    + +

    Via JavaScript

    +

    Call carousel manually with:

    +{% highlight js %} +$('.carousel').carousel() +{% endhighlight %} + + +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-interval="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    intervalnumber5000The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.
    pausestring | null"hover"If set to "hover", pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave. If set to null, hovering over the carousel won't pause it.
    wrapbooleantrueWhether the carousel should cycle continuously or have hard stops.
    keyboardbooleantrueWhether the carousel should react to keyboard events.
    +
    + + + +

    .carousel(options)

    +

    Initializes the carousel with an optional options object and starts cycling through items.

    +{% highlight js %} +$('.carousel').carousel({ + interval: 2000 +}) +{% endhighlight %} + +

    .carousel('cycle')

    +

    Cycles through the carousel items from left to right.

    + +

    .carousel('pause')

    +

    Stops the carousel from cycling through items.

    + + +

    .carousel(number)

    +

    Cycles the carousel to a particular frame (0 based, similar to an array).

    + +

    .carousel('prev')

    +

    Cycles to the previous item.

    + +

    .carousel('next')

    +

    Cycles to the next item.

    + + +

    Bootstrap's carousel class exposes two events for hooking into carousel functionality.

    +

    Both events have the following additional properties:

    +
      +
    • direction: The direction in which the carousel is sliding (either "left" or "right").
    • +
    • relatedTarget: The DOM element that is being slid into place as the active item.
    • +
    +

    All carousel events are fired at the carousel itself (i.e. at the <div class="carousel">).

    +
    + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    slide.bs.carouselThis event fires immediately when the slide instance method is invoked.
    slid.bs.carouselThis event is fired when the carousel has completed its slide transition.
    +
    +{% highlight js %} +$('#myCarousel').on('slide.bs.carousel', function () { + // do something… +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/collapse.html b/vendor/bootstrap/docs/_includes/js/collapse.html new file mode 100644 index 000000000..686705d1e --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/collapse.html @@ -0,0 +1,277 @@ +
    +

    Collapse collapse.js

    + +

    Flexible plugin that utilizes a handful of classes for easy toggle behavior.

    + +
    +

    Plugin dependency

    +

    Collapse requires the transitions plugin to be included in your version of Bootstrap.

    +
    + +

    Example

    +

    Click the buttons below to show and hide another element via class changes:

    +
      +
    • .collapse hides content
    • +
    • .collapsing is applied during transitions
    • +
    • .collapse.in shows content
    • +
    +

    You can use a link with the href attribute, or a button with the data-target attribute. In both cases, the data-toggle="collapse" is required.

    + +
    +

    + + +

    +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. +
    +
    +
    +{% highlight html %} + + +
    +
    + ... +
    +
    +{% endhighlight %} + +

    Accordion example

    +

    Extend the default collapse behavior to create an accordion with the panel component.

    + +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    +
    +{% highlight html %} +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    +{% endhighlight %} + +

    It's also possible to swap out .panel-bodys with .list-groups.

    + +
    +
    + +
    +
      +
    • Bootply
    • +
    • One itmus ac facilin
    • +
    • Second eros
    • +
    + +
    +
    +
    + +
    +

    Make expand/collapse controls accessible

    +

    Be sure to add aria-expanded to the control element. This attribute explicitly defines the current state of the collapsible element to screen readers and similar assistive technologies. If the collapsible element is closed by default, it should have a value of aria-expanded="false". If you've set the collapsible element to be open by default using the in class, set aria-expanded="true" on the control instead. The plugin will automatically toggle this attribute based on whether or not the collapsible element has been opened or closed.

    +

    Additionally, if your control element is targeting a single collapsible element – i.e. the data-target attribute is pointing to an id selector – you may add an additional aria-controls attribute to the control element, containing the id of the collapsible element. Modern screen readers and similar assistive technologies make use of this attribute to provide users with additional shortcuts to navigate directly to the collapsible element itself.

    +
    + +

    Usage

    +

    The collapse plugin utilizes a few classes to handle the heavy lifting:

    +
      +
    • .collapse hides the content
    • +
    • .collapse.in shows the content
    • +
    • .collapsing is added when the transition starts, and removed when it finishes
    • +
    +

    These classes can be found in component-animations.less.

    + +

    Via data attributes

    +

    Just add data-toggle="collapse" and a data-target to the element to automatically assign control of a collapsible element. The data-target attribute accepts a CSS selector to apply the collapse to. Be sure to add the class collapse to the collapsible element. If you'd like it to default open, add the additional class in.

    +

    To add accordion-like group management to a collapsible control, add the data attribute data-parent="#selector". Refer to the demo to see this in action.

    + +

    Via JavaScript

    +

    Enable manually with:

    +{% highlight js %} +$('.collapse').collapse() +{% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-parent="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    parentselectorfalseIf a selector is provided, then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior - this is dependent on the panel class)
    togglebooleantrueToggles the collapsible element on invocation
    +
    + +

    Methods

    + +

    .collapse(options)

    +

    Activates your content as a collapsible element. Accepts an optional options object.

    +{% highlight js %} +$('#myCollapsible').collapse({ + toggle: false +}) +{% endhighlight %} + +

    .collapse('toggle')

    +

    Toggles a collapsible element to shown or hidden. Returns to the caller before the collapsible element has actually been shown or hidden (i.e. before the shown.bs.collapse or hidden.bs.collapse event occurs).

    + +

    .collapse('show')

    +

    Shows a collapsible element. Returns to the caller before the collapsible element has actually been shown (i.e. before the shown.bs.collapse event occurs).

    + +

    .collapse('hide')

    +

    Hides a collapsible element. Returns to the caller before the collapsible element has actually been hidden (i.e. before the hidden.bs.collapse event occurs).

    + +

    Events

    +

    Bootstrap's collapse class exposes a few events for hooking into collapse functionality.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.collapseThis event fires immediately when the show instance method is called.
    shown.bs.collapseThis event is fired when a collapse element has been made visible to the user (will wait for CSS transitions to complete).
    hide.bs.collapse + This event is fired immediately when the hide method has been called. +
    hidden.bs.collapseThis event is fired when a collapse element has been hidden from the user (will wait for CSS transitions to complete).
    +
    +{% highlight js %} +$('#myCollapsible').on('hidden.bs.collapse', function () { + // do something… +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/dropdowns.html b/vendor/bootstrap/docs/_includes/js/dropdowns.html new file mode 100644 index 000000000..37566954a --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/dropdowns.html @@ -0,0 +1,201 @@ +
    +

    Dropdowns dropdown.js

    + + +

    Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.

    + +

    Within a navbar

    + + +

    Within pills

    + + + + +

    Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the .open class on the parent list item.

    +

    On mobile devices, opening a dropdown adds a .dropdown-backdrop as a tap area for closing dropdown menus when tapping outside the menu, a requirement for proper iOS support. This means that switching from an open dropdown menu to a different dropdown menu requires an extra tap on mobile.

    +

    Note: The data-toggle="dropdown" attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it.

    + +

    Via data attributes

    +

    Add data-toggle="dropdown" to a link or button to toggle a dropdown.

    +{% highlight html %} + +{% endhighlight %} +

    To keep URLs intact with link buttons, use the data-target attribute instead of href="#".

    +{% highlight html %} + +{% endhighlight %} + +

    Via JavaScript

    +

    Call the dropdowns via JavaScript:

    +{% highlight js %} +$('.dropdown-toggle').dropdown() +{% endhighlight %} +
    +

    data-toggle="dropdown" still required

    +

    Regardless of whether you call your dropdown via JavaScript or instead use the data-api, data-toggle="dropdown" is always required to be present on the dropdown's trigger element.

    +
    + + +

    None

    + + +

    $().dropdown('toggle')

    +

    Toggles the dropdown menu of a given navbar or tabbed navigation.

    + + +

    All dropdown events are fired at the .dropdown-menu's parent element.

    +

    All dropdown events have a relatedTarget property, whose value is the toggling anchor element.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.dropdownThis event fires immediately when the show instance method is called.
    shown.bs.dropdownThis event is fired when the dropdown has been made visible to the user (will wait for CSS transitions, to complete).
    hide.bs.dropdownThis event is fired immediately when the hide instance method has been called.
    hidden.bs.dropdownThis event is fired when the dropdown has finished being hidden from the user (will wait for CSS transitions, to complete).
    +
    +{% highlight js %} +$('#myDropdown').on('show.bs.dropdown', function () { + // do something… +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/modal.html b/vendor/bootstrap/docs/_includes/js/modal.html new file mode 100644 index 000000000..3f68e6b08 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/modal.html @@ -0,0 +1,520 @@ +
    +

    Modals modal.js

    +

    Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.

    + +
    +

    Multiple open modals not supported

    +

    Be sure not to open a modal while another is still visible. Showing more than one modal at a time requires custom code.

    +
    +
    +

    Modal markup placement

    +

    Always try to place a modal's HTML code in a top-level position in your document to avoid other components affecting the modal's appearance and/or functionality.

    +
    +
    +

    Mobile device caveats

    +

    There are some caveats regarding using modals on mobile devices. See our browser support docs for details.

    +
    + +

    Due to how HTML5 defines its semantics, the autofocus HTML attribute has no effect in Bootstrap modals. To achieve the same effect, use some custom JavaScript:

    +{% highlight js %} +$('#myModal').on('shown.bs.modal', function () { + $('#myInput').focus() +}) +{% endhighlight %} + +

    Examples

    + +

    Static example

    +

    A rendered modal with header, body, and set of actions in the footer.

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Live demo

    +

    Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.

    + + + +
    + +
    +{% highlight html %} + + + + + +{% endhighlight %} + +
    +

    Make modals accessible

    +

    Be sure to add role="dialog" and aria-labelledby="...", referencing the modal title, to .modal, and role="document" to the .modal-dialog itself.

    +

    Additionally, you may give a description of your modal dialog with aria-describedby on .modal.

    +
    + +
    +

    Embedding YouTube videos

    +

    Embedding YouTube videos in modals requires additional JavaScript not in Bootstrap to automatically stop playback and more. See this helpful Stack Overflow post for more information.

    +
    + +

    Optional sizes

    +

    Modals have two optional sizes, available via modifier classes to be placed on a .modal-dialog.

    +
    + + +
    +{% highlight html %} + + + + + + + + + +{% endhighlight %} + + + + + +

    Remove animation

    +

    For modals that simply appear rather than fade in to view, remove the .fade class from your modal markup.

    +{% highlight html %} + +{% endhighlight %} + +

    Using the grid system

    +

    To take advantage of the Bootstrap grid system within a modal, just nest .rows within the .modal-body and then use the normal grid system classes.

    + + +
    + +
    +{% highlight html %} + + +{% endhighlight %} + + +

    Have a bunch of buttons that all trigger the same modal, just with slightly different contents? Use event.relatedTarget and HTML data-* attributes (possibly via jQuery) to vary the contents of the modal depending on which button was clicked. See the Modal Events docs for details on relatedTarget,

    +
    + + + + ...more buttons... + + +
    +{% highlight html %} + + + +...more buttons... + + +{% endhighlight %} +{% highlight js %} +$('#exampleModal').on('show.bs.modal', function (event) { + var button = $(event.relatedTarget) // Button that triggered the modal + var recipient = button.data('whatever') // Extract info from data-* attributes + // If necessary, you could initiate an AJAX request here (and then do the updating in a callback). + // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead. + var modal = $(this) + modal.find('.modal-title').text('New message to ' + recipient) + modal.find('.modal-body input').val(recipient) +}) +{% endhighlight %} + +

    Usage

    +

    The modal plugin toggles your hidden content on demand, via data attributes or JavaScript. It also adds .modal-open to the <body> to override default scrolling behavior and generates a .modal-backdrop to provide a click area for dismissing shown modals when clicking outside the modal.

    + +

    Via data attributes

    +

    Activate a modal without writing JavaScript. Set data-toggle="modal" on a controller element, like a button, along with a data-target="#foo" or href="#foo" to target a specific modal to toggle.

    +{% highlight html %} + +{% endhighlight %} + +

    Via JavaScript

    +

    Call a modal with id myModal with a single line of JavaScript:

    + {% highlight js %}$('#myModal').modal(options){% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-backdrop="".

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    backdropboolean or the string 'static'trueIncludes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn't close the modal on click.
    keyboardbooleantrueCloses the modal when escape key is pressed
    showbooleantrueShows the modal when initialized.
    remotepathfalse +

    This option is deprecated since v3.3.0 and has been removed in v4. We recommend instead using client-side templating or a data binding framework, or calling jQuery.load yourself.

    +

    If a remote URL is provided, content will be loaded one time via jQuery's load method and injected into the .modal-content div. If you're using the data-api, you may alternatively use the href attribute to specify the remote source. An example of this is shown below:

    +{% highlight html %} +Click me +{% endhighlight %} +
    +
    + +

    Methods

    + +

    .modal(options)

    +

    Activates your content as a modal. Accepts an optional options object.

    +{% highlight js %} +$('#myModal').modal({ + keyboard: false +}) +{% endhighlight %} + +

    .modal('toggle')

    +

    Manually toggles a modal. Returns to the caller before the modal has actually been shown or hidden (i.e. before the shown.bs.modal or hidden.bs.modal event occurs).

    + {% highlight js %}$('#myModal').modal('toggle'){% endhighlight %} + +

    .modal('show')

    +

    Manually opens a modal. Returns to the caller before the modal has actually been shown (i.e. before the shown.bs.modal event occurs).

    + {% highlight js %}$('#myModal').modal('show'){% endhighlight %} + +

    .modal('hide')

    +

    Manually hides a modal. Returns to the caller before the modal has actually been hidden (i.e. before the hidden.bs.modal event occurs).

    + {% highlight js %}$('#myModal').modal('hide'){% endhighlight %} + +

    .modal('handleUpdate')

    +

    Readjusts the modal's positioning to counter a scrollbar in case one should appear, which would make the modal jump to the left.

    +

    Only needed when the height of the modal changes while it is open.

    + {% highlight js %}$('#myModal').modal('handleUpdate'){% endhighlight %} + +

    Events

    +

    Bootstrap's modal class exposes a few events for hooking into modal functionality.

    +

    All modal events are fired at the modal itself (i.e. at the <div class="modal">).

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.modalThis event fires immediately when the show instance method is called. If caused by a click, the clicked element is available as the relatedTarget property of the event.
    shown.bs.modalThis event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete). If caused by a click, the clicked element is available as the relatedTarget property of the event.
    hide.bs.modalThis event is fired immediately when the hide instance method has been called.
    hidden.bs.modalThis event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete).
    loaded.bs.modalThis event is fired when the modal has loaded content using the remote option.
    +
    +{% highlight js %} +$('#myModal').on('hidden.bs.modal', function (e) { + // do something... +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/overview.html b/vendor/bootstrap/docs/_includes/js/overview.html new file mode 100644 index 000000000..911b59098 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/overview.html @@ -0,0 +1,161 @@ +
    +

    Overview

    + +

    Individual or compiled

    +

    Plugins can be included individually (using Bootstrap's individual *.js files), or all at once (using bootstrap.js or the minified bootstrap.min.js).

    + +
    +

    Using the compiled JavaScript

    +

    Both bootstrap.js and bootstrap.min.js contain all plugins in a single file. Include only one.

    +
    + +
    +

    Plugin dependencies

    +

    Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs. Also note that all plugins depend on jQuery (this means jQuery must be included before the plugin files). Consult our bower.json to see which versions of jQuery are supported.

    +
    + +

    Data attributes

    +

    You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first-class API and should be your first consideration when using a plugin.

    + +

    That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the document namespaced with data-api. This looks like this:

    +{% highlight js %} +$(document).off('.data-api') +{% endhighlight %} + +

    Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:

    +{% highlight js %} +$(document).off('.alert.data-api') +{% endhighlight %} + +
    +

    Only one plugin per element via data attributes

    +

    Don't use data attributes from multiple plugins on the same element. For example, a button cannot both have a tooltip and toggle a modal. To accomplish this, use a wrapping element.

    +
    + +

    Programmatic API

    +

    We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.

    +{% highlight js %} +$('.btn.danger').button('toggle').addClass('fat') +{% endhighlight %} + +

    All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):

    +{% highlight js %} +$('#myModal').modal() // initialized with defaults +$('#myModal').modal({ keyboard: false }) // initialized with no keyboard +$('#myModal').modal('show') // initializes and invokes show immediately +{% endhighlight %} + +

    Each plugin also exposes its raw constructor on a Constructor property: $.fn.popover.Constructor. If you'd like to get a particular plugin instance, retrieve it directly from an element: $('[rel="popover"]').data('popover').

    + +

    Default settings

    +

    You can change the default settings for a plugin by modifying the plugin's Constructor.DEFAULTS object:

    +{% highlight js %} +$.fn.modal.Constructor.DEFAULTS.keyboard = false // changes default for the modal plugin's `keyboard` option to false +{% endhighlight %} + +

    No conflict

    +

    Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call .noConflict on the plugin you wish to revert the value of.

    +{% highlight js %} +var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value +$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality +{% endhighlight %} + +

    Events

    +

    Bootstrap provides custom events for most plugins' unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. show) is triggered at the start of an event, and its past participle form (ex. shown) is triggered on the completion of an action.

    +

    As of 3.0.0, all Bootstrap events are namespaced.

    +

    All infinitive events provide preventDefault functionality. This provides the ability to stop the execution of an action before it starts.

    +{% highlight js %} +$('#myModal').on('show.bs.modal', function (e) { + if (!data) return e.preventDefault() // stops modal from being shown +}) +{% endhighlight %} + +

    Sanitizer

    + +

    Tooltips and Popovers use our built-in sanitizer to sanitize options which accept HTML.

    +

    The default whiteList value is the following:

    + +{% highlight js %} +var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i +var DefaultWhitelist = { + // Global attributes allowed on any supplied element below. + '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], + a: ['target', 'href', 'title', 'rel'], + area: [], + b: [], + br: [], + col: [], + code: [], + div: [], + em: [], + hr: [], + h1: [], + h2: [], + h3: [], + h4: [], + h5: [], + h6: [], + i: [], + img: ['src', 'alt', 'title', 'width', 'height'], + li: [], + ol: [], + p: [], + pre: [], + s: [], + small: [], + span: [], + sub: [], + sup: [], + strong: [], + u: [], + ul: [] +} +{% endhighlight %} + +

    If you want to add new values to this default whiteList you can do the following:

    + +{% highlight js %} +var myDefaultWhiteList = $.fn.tooltip.Constructor.DEFAULTS.whiteList + +// To allow table elements +myDefaultWhiteList.table = [] + +// To allow td elements and data-option attributes on td elements +myDefaultWhiteList.td = ['data-option'] + +// You can push your custom regex to validate your attributes. +// Be careful about your regular expressions being too lax +var myCustomRegex = /^data-my-app-[\w-]+/ +myDefaultWhiteList['*'].push(myCustomRegex) +{% endhighlight %} + +

    If you want to bypass our sanitizer because you prefer to use a dedicated library, for example DOMPurify, you should do the following:

    + +{% highlight js %} +$('#yourTooltip').tooltip({ + sanitizeFn: function (content) { + return DOMPurify.sanitize(content) + } +}) +{% endhighlight %} + +
    +

    Browsers without document.implementation.createHTMLDocument

    +

    In case of browsers that don't support document.implementation.createHTMLDocument, like Internet Explorer 8, the built-in sanitize function returns the HTML as is.

    +

    If you want to perform sanitization in this case, please specify sanitizeFn and use an external library like DOMPurify.

    +
    + +

    Version numbers

    +

    The version of each of Bootstrap's jQuery plugins can be accessed via the VERSION property of the plugin's constructor. For example, for the tooltip plugin:

    +{% highlight js %} +$.fn.tooltip.Constructor.VERSION // => "{{ site.current_version }}" +{% endhighlight %} + +

    No special fallbacks when JavaScript is disabled

    +

    Bootstrap's plugins don't fall back particularly gracefully when JavaScript is disabled. If you care about the user experience in this case, use <noscript> to explain the situation (and how to re-enable JavaScript) to your users, and/or add your own custom fallbacks.

    + +
    +

    Third-party libraries

    +

    Bootstrap does not officially support third-party JavaScript libraries like Prototype or jQuery UI. Despite .noConflict and namespaced events, there may be compatibility problems that you need to fix on your own.

    +
    +
    diff --git a/vendor/bootstrap/docs/_includes/js/popovers.html b/vendor/bootstrap/docs/_includes/js/popovers.html new file mode 100644 index 000000000..1d129c28a --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/popovers.html @@ -0,0 +1,332 @@ +
    +

    Popovers popover.js

    + +

    Add small overlays of content, like those on the iPad, to any element for housing secondary information.

    +

    Popovers whose both title and content are zero-length are never displayed.

    + +
    +

    Plugin dependency

    +

    Popovers require the tooltip plugin to be included in your version of Bootstrap.

    +
    +
    +

    Opt-in functionality

    +

    For performance reasons, the Tooltip and Popover data-apis are opt-in, meaning you must initialize them yourself.

    +

    One way to initialize all popovers on a page would be to select them by their data-toggle attribute:

    +{% highlight js %} +$(function () { + $('[data-toggle="popover"]').popover() +}) +{% endhighlight %} +
    +
    +

    Popovers in button groups, input groups, and tables require special setting

    +

    When using popovers on elements within a .btn-group or an .input-group, or on table-related elements (<td>, <th>, <tr>, <thead>, <tbody>, <tfoot>), you'll have to specify the option container: 'body' (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the popover is triggered).

    +
    +
    +

    Don't try to show popovers on hidden elements

    +

    Invoking $(...).popover('show') when the target element is display: none; will cause the popover to be incorrectly positioned.

    +
    +
    +

    Popovers on disabled elements require wrapper elements

    +

    To add a popover to a disabled or .disabled element, put the element inside of a <div> and apply the popover to that <div> instead.

    +
    +
    +

    Multiple-line links

    +

    Sometimes you want to add a popover to a hyperlink that wraps multiple lines. The default behavior of the popover plugin is to center it horizontally and vertically. Add white-space: nowrap; to your anchors to avoid this.

    +
    + +

    Examples

    +

    Static popover

    +

    Four options are available: top, right, bottom, and left aligned.

    +
    +
    +
    +

    Popover top

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover right

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover bottom

    + +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover left

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    + +

    Live demo

    +
    + +
    +{% highlight html %} + +{% endhighlight %} + +

    Four directions

    +
    +
    + + + + +
    +
    +{% highlight html %} + + + + + + + +{% endhighlight %} + +

    Dismiss on next click

    +

    Use the focus trigger to dismiss popovers on the next click that the user makes.

    +
    +

    Specific markup required for dismiss-on-next-click

    +

    For proper cross-browser and cross-platform behavior, you must use the <a> tag, not the <button> tag, and you also must include the role="button" and tabindex attributes.

    +
    + +{% highlight html %} +Dismissible popover +{% endhighlight %} + + +

    Usage

    +

    Enable popovers via JavaScript:

    + {% highlight js %}$('#example').popover(options){% endhighlight %} + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-animation="".

    + +
    +

    Note that for security reasons the sanitize, sanitizeFn and whiteList options cannot be supplied using data attributes.

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    animationbooleantrueApply a CSS fade transition to the popover
    containerstring | falsefalse +

    Appends the popover to a specific element. Example: container: 'body'. This option is particularly useful in that it allows you to position the popover in the flow of the document near the triggering element - which will prevent the popover from floating away from the triggering element during a window resize.

    +
    contentstring | function'' +

    Default content value if data-content attribute isn't present.

    +

    If a function is given, it will be called with its this reference set to the element that the popover is attached to.

    +
    delaynumber | object0 +

    Delay showing and hiding the popover (ms) - does not apply to manual trigger type

    +

    If a number is supplied, delay is applied to both hide/show

    +

    Object structure is: delay: { "show": 500, "hide": 100 }

    +
    htmlbooleanfalseInsert HTML into the popover. If false, jQuery's text method will be used to insert content into the DOM. Use text if you're worried about XSS attacks.
    placementstring | function'right' +

    How to position the popover - top | bottom | left | right | auto.
    When "auto" is specified, it will dynamically reorient the popover. For example, if placement is "auto left", the popover will display to the left when possible, otherwise it will display right.

    +

    When a function is used to determine the placement, it is called with the popover DOM node as its first argument and the triggering element DOM node as its second. The this context is set to the popover instance.

    +
    selectorstringfalseIf a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to enable dynamic HTML content to have popovers added. See this and an informative example.
    templatestring'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' +

    Base HTML to use when creating the popover.

    +

    The popover's title will be injected into the .popover-title.

    +

    The popover's content will be injected into the .popover-content.

    +

    .arrow will become the popover's arrow.

    +

    The outermost wrapper element should have the .popover class.

    +
    titlestring | function'' +

    Default title value if title attribute isn't present.

    +

    If a function is given, it will be called with its this reference set to the element that the popover is attached to.

    +
    triggerstring'click'How popover is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space. manual cannot be combined with any other trigger.
    viewportstring | object | function{ selector: 'body', padding: 0 } +

    Keeps the popover within the bounds of this element. Example: viewport: '#viewport' or { "selector": "#viewport", "padding": 0 }

    +

    If a function is given, it is called with the triggering element DOM node as its only argument. The this context is set to the popover instance.

    +
    sanitizebooleantrueEnable or disable the sanitization. If activated 'template', 'content' and 'title' options will be sanitized.
    whiteListobjectDefault valueObject which contains allowed attributes and tags
    sanitizeFnnull | functionnullHere you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization.
    +
    +
    +

    Data attributes for individual popovers

    +

    Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.

    +
    + +

    Methods

    +

    $().popover(options)

    +

    Initializes popovers for an element collection.

    + +

    .popover('show')

    +

    Reveals an element's popover. Returns to the caller before the popover has actually been shown (i.e. before the shown.bs.popover event occurs). This is considered a "manual" triggering of the popover. Popovers whose both title and content are zero-length are never displayed.

    + {% highlight js %}$('#element').popover('show'){% endhighlight %} + +

    .popover('hide')

    +

    Hides an element's popover. Returns to the caller before the popover has actually been hidden (i.e. before the hidden.bs.popover event occurs). This is considered a "manual" triggering of the popover.

    + {% highlight js %}$('#element').popover('hide'){% endhighlight %} + +

    .popover('toggle')

    +

    Toggles an element's popover. Returns to the caller before the popover has actually been shown or hidden (i.e. before the shown.bs.popover or hidden.bs.popover event occurs). This is considered a "manual" triggering of the popover.

    + {% highlight js %}$('#element').popover('toggle'){% endhighlight %} + +

    .popover('destroy')

    +

    Hides and destroys an element's popover. Popovers that use delegation (which are created using the selector option) cannot be individually destroyed on descendant trigger elements.

    + {% highlight js %}$('#element').popover('destroy'){% endhighlight %} + +

    Events

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.popoverThis event fires immediately when the show instance method is called.
    shown.bs.popoverThis event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete).
    hide.bs.popoverThis event is fired immediately when the hide instance method has been called.
    hidden.bs.popoverThis event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete).
    inserted.bs.popoverThis event is fired after the show.bs.popover event when the popover template has been added to the DOM.
    +
    +{% highlight js %} +$('#myPopover').on('hidden.bs.popover', function () { + // do something… +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/scrollspy.html b/vendor/bootstrap/docs/_includes/js/scrollspy.html new file mode 100644 index 000000000..03263477a --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/scrollspy.html @@ -0,0 +1,151 @@ +
    +

    ScrollSpy scrollspy.js

    + +

    Example in navbar

    +

    The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.

    +
    + +
    +

    @fat

    +

    Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

    +

    @mdo

    +

    Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.

    +

    one

    +

    Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.

    +

    two

    +

    In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.

    +

    three

    +

    Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

    +

    Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. +

    +
    +
    + + +

    Usage

    + +
    +

    Requires Bootstrap nav

    +

    Scrollspy currently requires the use of a Bootstrap nav component for proper highlighting of active links.

    +
    +
    +

    Resolvable ID targets required

    +

    Navbar links must have resolvable id targets. For example, a <a href="#home">home</a> must correspond to something in the DOM like <div id="home"></div>.

    +
    +
    +

    Non-:visible target elements ignored

    +

    Target elements that are not :visible according to jQuery will be ignored and their corresponding nav items will never be highlighted.

    +
    + +

    Requires relative positioning

    +

    No matter the implementation method, scrollspy requires the use of position: relative; on the element you're spying on. In most cases this is the <body>. When scrollspying on elements other than the <body>, be sure to have a height set and overflow-y: scroll; applied.

    + +

    Via data attributes

    +

    To easily add scrollspy behavior to your topbar navigation, add data-spy="scroll" to the element you want to spy on (most typically this would be the <body>). Then add the data-target attribute with the ID or class of the parent element of any Bootstrap .nav component.

    +{% highlight css %} +body { + position: relative; +} +{% endhighlight %} +{% highlight html %} + + ... + + ... + +{% endhighlight %} + +

    Via JavaScript

    +

    After adding position: relative; in your CSS, call the scrollspy via JavaScript:

    +{% highlight js %} +$('body').scrollspy({ target: '#navbar-example' }) +{% endhighlight %} + + +

    Methods

    +

    .scrollspy('refresh')

    +

    When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:

    +{% highlight js %} +$('[data-spy="scroll"]').each(function () { + var $spy = $(this).scrollspy('refresh') +}) +{% endhighlight %} + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-offset="".

    +
    + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    offsetnumber10Pixels to offset from top when calculating position of scroll.
    +
    + +

    Events

    +
    + + + + + + + + + + + + + +
    Event TypeDescription
    activate.bs.scrollspyThis event fires whenever a new item becomes activated by the scrollspy.
    +
    +{% highlight js %} +$('#myScrollspy').on('activate.bs.scrollspy', function () { + // do something… +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/tabs.html b/vendor/bootstrap/docs/_includes/js/tabs.html new file mode 100644 index 000000000..2abf2fd5a --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/tabs.html @@ -0,0 +1,147 @@ +
    +

    Togglable tabs tab.js

    + +

    Example tabs

    +

    Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus. Nested tabs are not supported.

    +
    + +
    +
    +

    Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.

    +
    +
    +

    Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.

    +
    + + +
    +
    + +
    +

    Extends tabbed navigation

    +

    This plugin extends the tabbed navigation component to add tabbable areas.

    +
    + + +

    Usage

    +

    Enable tabbable tabs via JavaScript (each tab needs to be activated individually):

    + +{% highlight js %} +$('#myTabs a').click(function (e) { + e.preventDefault() + $(this).tab('show') +}) +{% endhighlight %} + +

    You can activate individual tabs in several ways:

    + +{% highlight js %} +$('#myTabs a[href="#profile"]').tab('show') // Select tab by name +$('#myTabs a:first').tab('show') // Select first tab +$('#myTabs a:last').tab('show') // Select last tab +$('#myTabs li:eq(2) a').tab('show') // Select third tab (0-indexed) +{% endhighlight %} + +

    Markup

    +

    You can activate a tab or pill navigation without writing any JavaScript by simply specifying data-toggle="tab" or data-toggle="pill" on an element. Adding the nav and nav-tabs classes to the tab ul will apply the Bootstrap tab styling, while adding the nav and nav-pills classes will apply pill styling.

    +{% highlight html %} +
    + + + + + +
    +
    ...
    +
    ...
    +
    ...
    +
    ...
    +
    + +
    +{% endhighlight %} + +

    Fade effect

    +

    To make tabs fade in, add .fade to each .tab-pane. The first tab pane must also have .in to make the initial content visible.

    +{% highlight html %} +
    +
    ...
    +
    ...
    +
    ...
    +
    ...
    +
    +{% endhighlight %} + +

    Methods

    +

    $().tab

    +

    + Activates a tab element and content container. Tab should have either a data-target or an href targeting a container node in the DOM. In the above examples, the tabs are the <a>s with data-toggle="tab" attributes. +

    + +

    .tab('show')

    +

    Selects the given tab and shows its associated content. Any other tab that was previously selected becomes unselected and its associated content is hidden. Returns to the caller before the tab pane has actually been shown (i.e. before the shown.bs.tab event occurs).

    + {% highlight js %}$('#someTab').tab('show'){% endhighlight %} + +

    Events

    +

    When showing a new tab, the events fire in the following order:

    +
      +
    1. hide.bs.tab (on the current active tab)
    2. +
    3. show.bs.tab (on the to-be-shown tab)
    4. +
    5. hidden.bs.tab (on the previous active tab, the same one as for the hide.bs.tab event)
    6. +
    7. shown.bs.tab (on the newly-active just-shown tab, the same one as for the show.bs.tab event)
    8. +
    +

    If no tab was already active, then the hide.bs.tab and hidden.bs.tab events will not be fired.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.tabThis event fires on tab show, but before the new tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
    shown.bs.tabThis event fires on tab show after a tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
    hide.bs.tabThis event fires when a new tab is to be shown (and thus the previous active tab is to be hidden). Use event.target and event.relatedTarget to target the current active tab and the new soon-to-be-active tab, respectively.
    hidden.bs.tabThis event fires after a new tab is shown (and thus the previous active tab is hidden). Use event.target and event.relatedTarget to target the previous active tab and the new active tab, respectively.
    +
    +{% highlight js %} +$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { + e.target // newly activated tab + e.relatedTarget // previous active tab +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/tooltips.html b/vendor/bootstrap/docs/_includes/js/tooltips.html new file mode 100644 index 000000000..b1c8b1e8f --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/tooltips.html @@ -0,0 +1,299 @@ +
    +

    Tooltips tooltip.js

    +

    Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.

    +

    Tooltips with zero-length titles are never displayed.

    + +

    Examples

    +

    Hover over the links below to see tooltips:

    +
    +

    Tight pants next level keffiyeh you probably haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel have a terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan whatever keytar, scenester farm-to-table banksy Austin twitter handle freegan cred raw denim single-origin coffee viral.

    +
    + +

    Static tooltip

    +

    Four options are available: top, right, bottom, and left aligned.

    +
    + + + + +
    + +

    Four directions

    +
    +
    + + + + +
    +
    +{% highlight html %} + + + + + + + +{% endhighlight %} + +
    +

    Opt-in functionality

    +

    For performance reasons, the Tooltip and Popover data-apis are opt-in, meaning you must initialize them yourself.

    +

    One way to initialize all tooltips on a page would be to select them by their data-toggle attribute:

    +{% highlight js %} +$(function () { + $('[data-toggle="tooltip"]').tooltip() +}) +{% endhighlight %} + +
    + +

    Usage

    +

    The tooltip plugin generates content and markup on demand, and by default places tooltips after their trigger element.

    +

    Trigger the tooltip via JavaScript:

    +{% highlight js %} +$('#example').tooltip(options) +{% endhighlight %} + +

    Markup

    +

    The required markup for a tooltip is only a data attribute and title on the HTML element you wish to have a tooltip. The generated markup of a tooltip is rather simple, though it does require a position (by default, set to top by the plugin).

    + +{% highlight html %} + +Hover over me + + + +{% endhighlight %} + +
    +

    Multiple-line links

    +

    Sometimes you want to add a tooltip to a hyperlink that wraps multiple lines. The default behavior of the tooltip plugin is to center it horizontally and vertically. Add white-space: nowrap; to your anchors to avoid this.

    +
    +
    +

    Tooltips in button groups, input groups, and tables require special setting

    +

    When using tooltips on elements within a .btn-group or an .input-group, or on table-related elements (<td>, <th>, <tr>, <thead>, <tbody>, <tfoot>), you'll have to specify the option container: 'body' (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip is triggered).

    +
    +
    +

    Don't try to show tooltips on hidden elements

    +

    Invoking $(...).tooltip('show') when the target element is display: none; will cause the tooltip to be incorrectly positioned.

    +
    +
    +

    Accessible tooltips for keyboard and assistive technology users

    +

    For users navigating with a keyboard, and in particular users of assistive technologies, you should only add tooltips to keyboard-focusable elements such as links, form controls, or any arbitrary element with a tabindex="0" attribute.

    +
    +
    +

    Tooltips on disabled elements require wrapper elements

    +

    To add a tooltip to a disabled or .disabled element, put the element inside of a <div> and apply the tooltip to that <div> instead.

    +
    + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-animation="".

    + +
    +

    Note that for security reasons the sanitize, sanitizeFn and whiteList options cannot be supplied using data attributes.

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    animationbooleantrueApply a CSS fade transition to the tooltip
    containerstring | falsefalse +

    Appends the tooltip to a specific element. Example: container: 'body'. This option is particularly useful in that it allows you to position the tooltip in the flow of the document near the triggering element - which will prevent the tooltip from floating away from the triggering element during a window resize.

    +
    delaynumber | object0 +

    Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type

    +

    If a number is supplied, delay is applied to both hide/show

    +

    Object structure is: delay: { "show": 500, "hide": 100 }

    +
    htmlbooleanfalseInsert HTML into the tooltip. If false, jQuery's text method will be used to insert content into the DOM. Use text if you're worried about XSS attacks.
    placementstring | function'top' +

    How to position the tooltip - top | bottom | left | right | auto.
    When "auto" is specified, it will dynamically reorient the tooltip. For example, if placement is "auto left", the tooltip will display to the left when possible, otherwise it will display right.

    +

    When a function is used to determine the placement, it is called with the tooltip DOM node as its first argument and the triggering element DOM node as its second. The this context is set to the tooltip instance.

    +
    selectorstringfalseIf a selector is provided, tooltip objects will be delegated to the specified targets. In practice, this is used to also apply tooltips to dynamically added DOM elements (jQuery.on support). See this and an informative example.
    templatestring'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' +

    Base HTML to use when creating the tooltip.

    +

    The tooltip's title will be injected into the .tooltip-inner.

    +

    .tooltip-arrow will become the tooltip's arrow.

    +

    The outermost wrapper element should have the .tooltip class.

    +
    titlestring | function'' +

    Default title value if title attribute isn't present.

    +

    If a function is given, it will be called with its this reference set to the element that the tooltip is attached to.

    +
    triggerstring'hover focus'How tooltip is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space. manual cannot be combined with any other trigger.
    viewportstring | object | function{ selector: 'body', padding: 0 } +

    Keeps the tooltip within the bounds of this element. Example: viewport: '#viewport' or { "selector": "#viewport", "padding": 0 }

    +

    If a function is given, it is called with the triggering element DOM node as its only argument. The this context is set to the tooltip instance.

    +
    sanitizebooleantrueEnable or disable the sanitization. If activated 'template', 'content' and 'title' options will be sanitized.
    whiteListobjectDefault valueObject which contains allowed attributes and tags
    sanitizeFnnull | functionnullHere you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization.
    +
    +
    +

    Data attributes for individual tooltips

    +

    Options for individual tooltips can alternatively be specified through the use of data attributes, as explained above.

    +
    + +

    Methods

    + +

    $().tooltip(options)

    +

    Attaches a tooltip handler to an element collection.

    + +

    .tooltip('show')

    +

    Reveals an element's tooltip. Returns to the caller before the tooltip has actually been shown (i.e. before the shown.bs.tooltip event occurs). This is considered a "manual" triggering of the tooltip. Tooltips with zero-length titles are never displayed.

    + {% highlight js %}$('#element').tooltip('show'){% endhighlight %} + +

    .tooltip('hide')

    +

    Hides an element's tooltip. Returns to the caller before the tooltip has actually been hidden (i.e. before the hidden.bs.tooltip event occurs). This is considered a "manual" triggering of the tooltip.

    + {% highlight js %}$('#element').tooltip('hide'){% endhighlight %} + +

    .tooltip('toggle')

    +

    Toggles an element's tooltip. Returns to the caller before the tooltip has actually been shown or hidden (i.e. before the shown.bs.tooltip or hidden.bs.tooltip event occurs). This is considered a "manual" triggering of the tooltip.

    + {% highlight js %}$('#element').tooltip('toggle'){% endhighlight %} + +

    .tooltip('destroy')

    +

    Hides and destroys an element's tooltip. Tooltips that use delegation (which are created using the selector option) cannot be individually destroyed on descendant trigger elements.

    + {% highlight js %}$('#element').tooltip('destroy'){% endhighlight %} + +

    Events

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event TypeDescription
    show.bs.tooltipThis event fires immediately when the show instance method is called.
    shown.bs.tooltipThis event is fired when the tooltip has been made visible to the user (will wait for CSS transitions to complete).
    hide.bs.tooltipThis event is fired immediately when the hide instance method has been called.
    hidden.bs.tooltipThis event is fired when the tooltip has finished being hidden from the user (will wait for CSS transitions to complete).
    inserted.bs.tooltipThis event is fired after the show.bs.tooltip event when the tooltip template has been added to the DOM.
    +
    +{% highlight js %} +$('#myTooltip').on('hidden.bs.tooltip', function () { + // do something… +}) +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/js/transitions.html b/vendor/bootstrap/docs/_includes/js/transitions.html new file mode 100644 index 000000000..08d9c3ab8 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/js/transitions.html @@ -0,0 +1,15 @@ +
    +

    Transitions transition.js

    + +

    About transitions

    +

    For simple transition effects, include transition.js once alongside the other JS files. If you're using the compiled (or minified) bootstrap.js, there is no need to include this—it's already there.

    + +

    What's inside

    +

    Transition.js is a basic helper for transitionEnd events as well as a CSS transition emulator. It's used by the other plugins to check for CSS transition support and to catch hanging transitions.

    + +

    Disabling transitions

    +

    Transitions can be globally disabled using the following JavaScript snippet, which must come after transition.js (or bootstrap.js or bootstrap.min.js, as the case may be) has loaded:

    +{% highlight js %} +$.support.transition = false +{% endhighlight %} +
    diff --git a/vendor/bootstrap/docs/_includes/nav/about.html b/vendor/bootstrap/docs/_includes/nav/about.html new file mode 100644 index 000000000..bf6b684e9 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/about.html @@ -0,0 +1,9 @@ +
  • + History +
  • +
  • + Team +
  • +
  • + Brand guidelines +
  • diff --git a/vendor/bootstrap/docs/_includes/nav/components.html b/vendor/bootstrap/docs/_includes/nav/components.html new file mode 100644 index 000000000..58e10d3bb --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/components.html @@ -0,0 +1,146 @@ +
  • + Glyphicons + +
  • +
  • + Dropdowns + +
  • +
  • + Button groups + +
  • +
  • + Button dropdowns + +
  • +
  • + Input groups + +
  • +
  • + Navs + +
  • +
  • + Navbar + +
  • +
  • Breadcrumbs
  • +
  • + Pagination + +
  • +
  • Labels
  • +
  • Badges
  • +
  • Jumbotron
  • +
  • Page header
  • +
  • + Thumbnails + +
  • +
  • + Alerts + +
  • +
  • + Progress bars + +
  • +
  • + Media object + +
  • +
  • + List group + +
  • +
  • + Panels + +
  • +
  • Responsive embed
  • +
  • Wells
  • diff --git a/vendor/bootstrap/docs/_includes/nav/css.html b/vendor/bootstrap/docs/_includes/nav/css.html new file mode 100644 index 000000000..72dc82d88 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/css.html @@ -0,0 +1,137 @@ +
  • + Overview + +
  • +
  • + Grid system + +
  • +
  • + Typography + +
  • +
  • + Code + +
  • +
  • + Tables + +
  • +
  • + Forms + +
  • +
  • + Buttons + +
  • +
  • + Images + +
  • +
  • + Helper classes + +
  • +
  • + Responsive utilities + +
  • +
  • + Using Less + +
  • +
  • + Using Sass + +
  • diff --git a/vendor/bootstrap/docs/_includes/nav/customize.html b/vendor/bootstrap/docs/_includes/nav/customize.html new file mode 100644 index 000000000..bc4114973 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/customize.html @@ -0,0 +1,47 @@ + + +
  • Import
  • +
  • Less components
  • +
  • jQuery plugins
  • +
  • Less variables + +
  • +
  • Download
  • + \ No newline at end of file diff --git a/vendor/bootstrap/docs/_includes/nav/getting-started.html b/vendor/bootstrap/docs/_includes/nav/getting-started.html new file mode 100644 index 000000000..4a07fe79c --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/getting-started.html @@ -0,0 +1,76 @@ +
  • + Download +
  • +
  • + What's included + +
  • +
  • + Compiling CSS and JavaScript + +
  • +
  • + Basic template +
  • +
  • + Examples + +
  • +
  • + Tools + +
  • +
  • + Community +
  • +
  • + Disabling responsiveness +
  • +
  • + Migrating from 2.x to 3.0 +
  • +
  • + Browser and device support + +
  • +
  • + Third party support +
  • +
  • + Accessibility +
  • +
  • + License FAQs +
  • +
  • + Translations +
  • diff --git a/vendor/bootstrap/docs/_includes/nav/javascript.html b/vendor/bootstrap/docs/_includes/nav/javascript.html new file mode 100644 index 000000000..6cfc90abf --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/javascript.html @@ -0,0 +1,125 @@ +
  • + Overview + +
  • +
  • Transitions
  • +
  • + Modal + +
  • +
  • + Dropdown + +
  • +
  • + Scrollspy + +
  • +
  • + Tab + +
  • +
  • + Tooltip + +
  • +
  • + Popover + +
  • +
  • + Alert + +
  • +
  • + Button + +
  • +
  • + Collapse + +
  • +
  • + Carousel + +
  • +
  • + Affix + +
  • diff --git a/vendor/bootstrap/docs/_includes/nav/main.html b/vendor/bootstrap/docs/_includes/nav/main.html new file mode 100644 index 000000000..12bc4e9d4 --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/main.html @@ -0,0 +1,50 @@ + diff --git a/vendor/bootstrap/docs/_includes/nav/migration.html b/vendor/bootstrap/docs/_includes/nav/migration.html new file mode 100644 index 000000000..10128a87e --- /dev/null +++ b/vendor/bootstrap/docs/_includes/nav/migration.html @@ -0,0 +1,12 @@ +
  • + Major class changes +
  • +
  • + What's new +
  • +
  • + What's removed +
  • +
  • + Additional notes +
  • diff --git a/vendor/bootstrap/docs/_includes/skippy.html b/vendor/bootstrap/docs/_includes/skippy.html new file mode 100644 index 000000000..38505672a --- /dev/null +++ b/vendor/bootstrap/docs/_includes/skippy.html @@ -0,0 +1,5 @@ + +
    + Skip to main content +
    +
    diff --git a/vendor/bootstrap/docs/_includes/v4.html b/vendor/bootstrap/docs/_includes/v4.html new file mode 100644 index 000000000..ddc76ef9a --- /dev/null +++ b/vendor/bootstrap/docs/_includes/v4.html @@ -0,0 +1 @@ +Looking for Bootstrap 4? diff --git a/vendor/bootstrap/docs/_layouts/default.html b/vendor/bootstrap/docs/_layouts/default.html new file mode 100644 index 000000000..fbace75ce --- /dev/null +++ b/vendor/bootstrap/docs/_layouts/default.html @@ -0,0 +1,66 @@ + + + + {% include header.html %} + + + {% include skippy.html %} + {% include v4.html %} + + {% include nav/main.html %} + +
    +
    +

    {{ page.title }}

    +

    {{ page.lead }}

    + {% include ads.html %} +
    +
    + +
    + +
    +
    + {{ content }} +
    + {% unless page.fullwidth == true %} + + {% endunless %} +
    +
    + + {% include footer.html %} + + diff --git a/vendor/bootstrap/docs/_layouts/home.html b/vendor/bootstrap/docs/_layouts/home.html new file mode 100644 index 000000000..27aa91ac5 --- /dev/null +++ b/vendor/bootstrap/docs/_layouts/home.html @@ -0,0 +1,16 @@ + + + + {% include header.html %} + + + {% include skippy.html %} + {% include v4.html %} + + {% include nav/main.html %} + + {{ content }} + + {% include footer.html %} + + diff --git a/vendor/bootstrap/docs/_plugins/bridge.rb b/vendor/bootstrap/docs/_plugins/bridge.rb new file mode 100644 index 000000000..f2e606383 --- /dev/null +++ b/vendor/bootstrap/docs/_plugins/bridge.rb @@ -0,0 +1,9 @@ +require 'yaml' + +module Bridge + class Generator < Jekyll::Generator + def generate(site) + site.data["configBridge"] = YAML.load_file("./grunt/configBridge.json") + end + end +end diff --git a/vendor/bootstrap/docs/_plugins/bugify.rb b/vendor/bootstrap/docs/_plugins/bugify.rb new file mode 100644 index 000000000..0e0a81867 --- /dev/null +++ b/vendor/bootstrap/docs/_plugins/bugify.rb @@ -0,0 +1,26 @@ +module Jekyll + module BugFilter + def bugify(input) + upstream_map = { + "Bootstrap" => "https://github.com/twbs/bootstrap/issues/", + "Edge" => ["https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/", "Edge issue"], + "UserVoice" => ["https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/", "Edge UserVoice idea"], + "Mozilla" => ["https://bugzilla.mozilla.org/show_bug.cgi?id=", "Mozilla bug"], + "Chromium" => ["https://bugs.chromium.org/p/chromium/issues/detail?id=", "Chromium issue"], + "WebKit" => ["https://bugs.webkit.org/show_bug.cgi?id=", "WebKit bug"], + "Safari" => ["https://openradar.appspot.com/", "Apple Safari Radar"], + "Normalize" => ["https://github.com/necolas/normalize.css/issues/", "Normalize"] + } + + upstream_map.each do |key, data| + url = data.is_a?(Array) ? data[0] : data + label = data.is_a?(Array) ? "#{data[1]} " : "" + input = input.gsub(/#{key}#(\d+)/, "#{label}#\\1") + end + + return input + end + end +end + +Liquid::Template.register_filter(Jekyll::BugFilter) diff --git a/vendor/bootstrap/docs/_pug/customizer-nav.pug b/vendor/bootstrap/docs/_pug/customizer-nav.pug new file mode 100644 index 000000000..e1dd758e8 --- /dev/null +++ b/vendor/bootstrap/docs/_pug/customizer-nav.pug @@ -0,0 +1,17 @@ +// NOTE: DO NOT EDIT THE FOLLOWING SECTION DIRECTLY! It is autogenerated via the `build-customizer-html` Grunt task using the customizer-nav.pug template. +li + a(href='#import-drop-target') Import +li + a(href='#less') Less components +li + a(href='#plugins') jQuery plugins +li + a(href='#less-variables') Less variables + ul.nav + each section in sections + if section.customizable + li + a(href='#'+section.id)= section.heading +li + a(href='#download') Download +// NOTE: DO NOT EDIT THE PRECEDING SECTION DIRECTLY! It is autogenerated via the `build-customizer-html` Grunt task using the customizer-nav.pug template. diff --git a/vendor/bootstrap/docs/_pug/customizer-variables.pug b/vendor/bootstrap/docs/_pug/customizer-variables.pug new file mode 100644 index 000000000..85b086e3d --- /dev/null +++ b/vendor/bootstrap/docs/_pug/customizer-variables.pug @@ -0,0 +1,25 @@ +// NOTE: DO NOT EDIT THE FOLLOWING SECTION DIRECTLY! It is autogenerated via the `build-customizer-html` Grunt task using the customizer-variables.pug template. +each section in sections + if section.customizable + h2(id=section.id)= section.heading + if section.docstring + p!= section.docstring.html + each subsection in section.subsections + if subsection.heading + h3(id=subsection.id)= subsection.heading + div.row + each variable, index in subsection.variables + if index > 0 && index % 3 === 0 + div.clearfix + div.col-xs-4 + label(for="input-" + variable.name)= variable.name + - var helpId = "help-block-" + variable.name + input.form-control( + id="input-" + variable.name + type="text" + aria-describedby=variable.docstring ? helpId : undefined + value=variable.defaultValue + data-var=variable.name) + if variable.docstring + p.help-block(id=helpId)!= variable.docstring.html +// NOTE: DO NOT EDIT THE PRECEDING SECTION DIRECTLY! It is autogenerated via the `build-customizer-html` Grunt task using the customizer-variables.pug template. diff --git a/vendor/bootstrap/docs/about.html b/vendor/bootstrap/docs/about.html new file mode 100644 index 000000000..95b3e5738 --- /dev/null +++ b/vendor/bootstrap/docs/about.html @@ -0,0 +1,125 @@ +--- +layout: default +title: About +slug: about +lead: "Learn about the project's history, meet the maintaining teams, and find out how to use the Bootstrap brand." +--- + + + +
    +

    History

    + +

    Originally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world.

    +

    Bootstrap was created at Twitter in mid-2010 by @mdo and @fat. Prior to being an open-sourced framework, Bootstrap was known as Twitter Blueprint. A few months into development, Twitter held its first Hack Week and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.

    +

    Originally released on , we've since had over twenty releases, including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.

    +
    + + + +
    +

    Team

    + +

    Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community.

    + +

    Core team

    +
    + {% for member in site.data.team %} + + {% endfor %} +
    +

    Get involved with Bootstrap development by opening an issue or submitting a pull request. Read our contributing guidelines for information on how we develop.

    + +

    Sass team

    +
    + {% for member in site.data.sass-team %} + + {% endfor %} +
    +

    The official Sass port of Bootstrap was created and is maintained by this team. It became part of Bootstrap's organization with v3.1.0. Read the Sass contributing guidelines for information on how the Sass port is developed.

    +
    + + + +
    +

    Brand guidelines

    + +

    Have a need for Bootstrap's brand resources? Great! We have only a few guidelines we follow, and in turn ask you to follow as well. These guidelines were inspired by MailChimp's Brand Assets.

    + +

    Mark and logo

    +

    Use either the Bootstrap mark (a capital B) or the standard logo (just Bootstrap). It should always appear in Helvetica Neue Bold. Do not use the Twitter bird in association with Bootstrap.

    +
    +
    +
    B
    +
    +
    +
    B
    +
    +
    +
    +
    +

    Bootstrap

    +
    +
    +

    Bootstrap

    +
    +
    + +

    Download mark

    +

    Download the Bootstrap mark in one of three styles, each available as an SVG file. Right click, Save as.

    +
    +
    + Bootstrap +
    +
    + Bootstrap +
    +
    + Bootstrap +
    +
    + +

    Name

    +

    The project and framework should always be referred to as Bootstrap. No Twitter before it, no capital s, and no abbreviations except for one, a capital B.

    +
    +
    +

    Bootstrap

    + + (correct) +
    +
    +

    BootStrap

    + + (incorrect) +
    +
    +

    Twitter Bootstrap

    + + (incorrect) +
    +
    + +

    Colors

    +

    Our docs and branding use a handful of primary colors to differentiate what is Bootstrap from what is in Bootstrap. In other words, if it's purple, it's representative of Bootstrap.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/vendor/bootstrap/docs/apple-touch-icon.png b/vendor/bootstrap/docs/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b1e843bb9fe36a98988f0fdc02436abc95c396 GIT binary patch literal 6140 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 literal 0 HcmV?d00001 diff --git a/vendor/bootstrap/docs/assets/brand/bootstrap-outline.svg b/vendor/bootstrap/docs/assets/brand/bootstrap-outline.svg new file mode 100644 index 000000000..ed2f3bb52 --- /dev/null +++ b/vendor/bootstrap/docs/assets/brand/bootstrap-outline.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/bootstrap/docs/assets/brand/bootstrap-punchout.svg b/vendor/bootstrap/docs/assets/brand/bootstrap-punchout.svg new file mode 100644 index 000000000..efe42d528 --- /dev/null +++ b/vendor/bootstrap/docs/assets/brand/bootstrap-punchout.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/bootstrap/docs/assets/brand/bootstrap-solid.svg b/vendor/bootstrap/docs/assets/brand/bootstrap-solid.svg new file mode 100644 index 000000000..5d860a70e --- /dev/null +++ b/vendor/bootstrap/docs/assets/brand/bootstrap-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/bootstrap/docs/assets/css/docs.css b/vendor/bootstrap/docs/assets/css/docs.css new file mode 100644 index 000000000..b9c6e860f --- /dev/null +++ b/vendor/bootstrap/docs/assets/css/docs.css @@ -0,0 +1,1599 @@ +/*! + * Bootstrap Docs (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */ +.hll { + background-color: #ffc; +} +.c { + color: #999; +} +.err { + color: #a00; + background-color: #faa; +} +.k { + color: #069; +} +.o { + color: #555; +} +.cm { + color: #999; +} +.cp { + color: #099; +} +.c1 { + color: #999; +} +.cs { + color: #999; +} +.gd { + background-color: #fcc; + border: 1px solid #c00; +} +.ge { + font-style: italic; +} +.gr { + color: #f00; +} +.gh { + color: #030; +} +.gi { + background-color: #cfc; + border: 1px solid #0c0; +} +.go { + color: #aaa; +} +.gp { + color: #009; +} +.gu { + color: #030; +} +.gt { + color: #9c6; +} +.kc { + color: #069; +} +.kd { + color: #069; +} +.kn { + color: #069; +} +.kp { + color: #069; +} +.kr { + color: #069; +} +.kt { + color: #078; +} +.m { + color: #f60; +} +.s { + color: #d44950; +} +.na { + color: #4f9fcf; +} +.nb { + color: #366; +} +.nc { + color: #0a8; +} +.no { + color: #360; +} +.nd { + color: #99f; +} +.ni { + color: #999; +} +.ne { + color: #c00; +} +.nf { + color: #c0f; +} +.nl { + color: #99f; +} +.nn { + color: #0cf; +} +.nt { + color: #2f6f9f; +} +.nv { + color: #033; +} +.ow { + color: #000; +} +.w { + color: #bbb; +} +.mf { + color: #f60; +} +.mh { + color: #f60; +} +.mi { + color: #f60; +} +.mo { + color: #f60; +} +.sb { + color: #c30; +} +.sc { + color: #c30; +} +.sd { + font-style: italic; + color: #c30; +} +.s2 { + color: #c30; +} +.se { + color: #c30; +} +.sh { + color: #c30; +} +.si { + color: #a00; +} +.sx { + color: #c30; +} +.sr { + color: #3aa; +} +.s1 { + color: #c30; +} +.ss { + color: #fc3; +} +.bp { + color: #366; +} +.vc { + color: #033; +} +.vg { + color: #033; +} +.vi { + color: #033; +} +.il { + color: #f60; +} +.css .o, +.css .o + .nt, +.css .nt + .nt { + color: #999; +} +.highlight { + padding: 9px 14px; + margin-bottom: 14px; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + border-radius: 4px; +} +.highlight pre { + padding: 0; + margin-top: 0; + margin-bottom: 0; + word-break: normal; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.highlight pre code { + font-size: inherit; + color: #333; +} +.highlight pre code:first-child { + display: inline-block; + padding-right: 45px; +} +.language-bash:before { + color: #033; + content: "$ "; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +@-ms-viewport { + width: device-width; +} +@viewport { + width: device-width; +} +.btn-outline { + color: #563d7c; + background-color: transparent; + border-color: #563d7c; +} +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active { + color: #fff; + background-color: #563d7c; + border-color: #563d7c; +} +.btn-outline-inverse { + color: #fff; + background-color: transparent; + border-color: #cdbfe3; +} +.btn-outline-inverse:hover, +.btn-outline-inverse:focus, +.btn-outline-inverse:active { + color: #563d7c; + text-shadow: none; + background-color: #fff; + border-color: #fff; +} +.bs-docs-booticon { + display: block; + font-weight: 500; + color: #fff; + text-align: center; + cursor: default; + background-color: #563d7c; + border-radius: 15%; +} +.bs-docs-booticon-sm { + width: 30px; + height: 30px; + font-size: 20px; + line-height: 28px; +} +.bs-docs-booticon-lg { + width: 144px; + height: 144px; + font-size: 108px; + line-height: 140px; +} +.bs-docs-booticon-inverse { + color: #563d7c; + background-color: #fff; +} +.bs-docs-booticon-outline { + background-color: transparent; + border: 1px solid #cdbfe3; +} +#skippy { + display: block; + padding: 1em; + color: #fff; + background-color: #6f5499; + outline: 0; +} +#skippy .skiplink-text { + padding: 0.5em; + outline: 1px dotted; +} +#content:focus { + outline: none; +} +.bs-docs-nav { + margin-bottom: 0; + background-color: #fff; + border-bottom: 0; +} +.bs-docs-nav .bs-nav-b { + display: none; +} +.bs-docs-nav .navbar-brand, +.bs-docs-nav .navbar-nav > li > a { + font-weight: 500; + color: #563d7c; +} +.bs-docs-nav .navbar-nav > li > a { + padding-right: 10px; + padding-left: 10px; +} +.bs-docs-nav .navbar-nav > li > a:hover, +.bs-docs-nav .navbar-nav > .active > a, +.bs-docs-nav .navbar-nav > .active > a:hover { + color: #463265; + background-color: #f9f9f9; +} +.bs-docs-nav .navbar-toggle .icon-bar { + background-color: #563d7c; +} +.bs-docs-nav .navbar-header .navbar-toggle { + border-color: #fff; +} +.bs-docs-nav .navbar-header .navbar-toggle:hover, +.bs-docs-nav .navbar-header .navbar-toggle:focus { + background-color: #f9f9f9; + border-color: #f9f9f9; +} +@media (min-width: 768px) and (max-width: 992px) { + .bs-docs-nav .navbar-right { + display: none; + } +} +.bs-docs-footer { + padding-top: 50px; + padding-bottom: 50px; + margin-top: 100px; + color: #99979c; + text-align: center; + background-color: #2a2730; +} +.bs-docs-footer a { + color: #fff; +} +.bs-docs-footer-links { + padding-left: 0; + margin-bottom: 20px; +} +.bs-docs-footer-links li { + display: inline-block; +} +.bs-docs-footer-links li + li { + margin-left: 15px; +} +@media (min-width: 768px) { + .bs-docs-footer { + text-align: left; + } + .bs-docs-footer p { + margin-bottom: 0; + } +} +.bs-docs-masthead, +.bs-docs-header { + position: relative; + padding: 30px 0; + color: #cdbfe3; + text-align: center; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); + background-color: #6f5499; + background-image: -webkit-gradient(linear, left top, left bottom, from(#563d7c), to(#6f5499)); + background-image: -webkit-linear-gradient(top, #563d7c 0%, #6f5499 100%); + background-image: -o-linear-gradient(top, #563d7c 0%, #6f5499 100%); + background-image: linear-gradient(to bottom, #563d7c 0%, #6f5499 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#563d7c", endColorstr="#6F5499", GradientType=0); + background-repeat: repeat-x; +} +.bs-docs-masthead .bs-docs-booticon { + margin: 0 auto 30px; +} +.bs-docs-masthead h1 { + font-weight: 300; + line-height: 1; + color: #fff; +} +.bs-docs-masthead .lead { + margin: 0 auto 30px; + font-size: 20px; + color: #fff; +} +.bs-docs-masthead .version { + margin-top: -15px; + margin-bottom: 30px; + color: #9783b9; +} +.bs-docs-masthead .btn { + width: 100%; + padding: 15px 30px; + font-size: 20px; +} +@media (min-width: 480px) { + .bs-docs-masthead .btn { + width: auto; + } +} +@media (min-width: 768px) { + .bs-docs-masthead { + padding: 80px 0; + } + .bs-docs-masthead h1 { + font-size: 60px; + } + .bs-docs-masthead .lead { + font-size: 24px; + } +} +@media (min-width: 992px) { + .bs-docs-masthead .lead { + width: 80%; + font-size: 30px; + } +} +.bs-docs-header { + margin-bottom: 40px; + font-size: 20px; +} +.bs-docs-header h1 { + margin-top: 0; + color: #fff; +} +.bs-docs-header p { + margin-bottom: 0; + font-weight: 300; + line-height: 1.4; +} +.bs-docs-header .container { + position: relative; +} +@media (min-width: 768px) { + .bs-docs-header { + padding-top: 60px; + padding-bottom: 60px; + font-size: 24px; + text-align: left; + } + .bs-docs-header h1 { + font-size: 60px; + line-height: 1; + } +} +@media (min-width: 992px) { + .bs-docs-header h1, + .bs-docs-header p { + margin-right: 380px; + } +} +#carbonads { + display: block; + padding: 15px 15px 15px 160px; + margin: 50px -15px -30px; + overflow: hidden; + font-size: 13px; + line-height: 1.5; + text-align: left; + border: solid #866ab3; + border-width: 1px 0 0; +} +#carbonads a { + color: #fff; + text-decoration: none; +} +@media (min-width: 768px) { + #carbonads { + max-width: 330px; + margin: 50px auto 0; + border-width: 1px; + border-radius: 4px; + } +} +@media (min-width: 992px) { + #carbonads { + position: absolute; + top: 0; + right: 15px; + margin-top: 0; + } + .bs-docs-masthead #carbonads { + position: static; + } +} +.carbon-img { + float: left; + margin-left: -145px; +} +.carbon-poweredby { + display: block; + color: #cdbfe3 !important; +} +.bs-docs-featurette { + padding-top: 40px; + padding-bottom: 40px; + font-size: 16px; + line-height: 1.5; + color: #555; + text-align: center; + background-color: #fff; + border-bottom: 1px solid #e5e5e5; +} +.bs-docs-featurette + .bs-docs-footer { + margin-top: 0; + border-top: 0; +} +.bs-docs-featurette-title { + margin-bottom: 5px; + font-size: 30px; + font-weight: 400; + color: #333; +} +.half-rule { + width: 100px; + margin: 40px auto; +} +.bs-docs-featurette h3 { + margin-bottom: 5px; + font-weight: 400; + color: #333; +} +.bs-docs-featurette-img { + display: block; + margin-bottom: 20px; + color: #333; +} +.bs-docs-featurette-img:hover { + color: #337ab7; + text-decoration: none; +} +.bs-docs-featurette-img img { + display: block; + margin-bottom: 15px; +} +@media (min-width: 480px) { + .bs-docs-featurette .img-responsive { + margin-top: 30px; + } +} +@media (min-width: 768px) { + .bs-docs-featurette { + padding-top: 100px; + padding-bottom: 100px; + } + .bs-docs-featurette-title { + font-size: 40px; + } + .bs-docs-featurette .lead { + max-width: 80%; + margin-right: auto; + margin-left: auto; + } + .bs-docs-featurette .img-responsive { + margin-top: 0; + } +} +.bs-docs-featured-sites { + margin-right: -1px; + margin-left: -1px; +} +.bs-docs-featured-sites .col-xs-8 { + padding: 1px; +} +.bs-docs-featured-sites .img-responsive { + margin-top: 0; +} +@media (min-width: 768px) { + .bs-docs-featured-sites .col-sm-4:first-child img { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + } + .bs-docs-featured-sites .col-sm-4:last-child img { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } +} +.bs-examples .thumbnail { + margin-bottom: 10px; +} +.bs-examples h4 { + margin-bottom: 5px; +} +.bs-examples p { + margin-bottom: 20px; +} +@media (max-width: 480px) { + .bs-examples { + margin-right: -10px; + margin-left: -10px; + } + .bs-examples > [class^="col-"] { + padding-right: 10px; + padding-left: 10px; + } +} +.bs-docs-sidebar.affix { + position: static; +} +@media (min-width: 768px) { + .bs-docs-sidebar { + padding-left: 20px; + } +} +.bs-docs-search { + margin-bottom: 20px; + margin-left: 20px; +} +.bs-docs-sidenav { + margin-top: 20px; + margin-bottom: 20px; +} +.bs-docs-sidebar .nav > li > a { + display: block; + padding: 4px 20px; + font-size: 13px; + font-weight: 500; + color: #767676; +} +.bs-docs-sidebar .nav > li > a:hover, +.bs-docs-sidebar .nav > li > a:focus { + padding-left: 19px; + color: #563d7c; + text-decoration: none; + background-color: transparent; + border-left: 1px solid #563d7c; +} +.bs-docs-sidebar .nav > .active > a, +.bs-docs-sidebar .nav > .active:hover > a, +.bs-docs-sidebar .nav > .active:focus > a { + padding-left: 18px; + font-weight: 700; + color: #563d7c; + background-color: transparent; + border-left: 2px solid #563d7c; +} +.bs-docs-sidebar .nav .nav { + display: none; + padding-bottom: 10px; +} +.bs-docs-sidebar .nav .nav > li > a { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 30px; + font-size: 12px; + font-weight: 400; +} +.bs-docs-sidebar .nav .nav > li > a:hover, +.bs-docs-sidebar .nav .nav > li > a:focus { + padding-left: 29px; +} +.bs-docs-sidebar .nav .nav > .active > a, +.bs-docs-sidebar .nav .nav > .active:hover > a, +.bs-docs-sidebar .nav .nav > .active:focus > a { + padding-left: 28px; + font-weight: 500; +} +.back-to-top, +.bs-docs-theme-toggle { + display: none; + padding: 4px 10px; + margin-top: 10px; + margin-left: 10px; + font-size: 12px; + font-weight: 500; + color: #999; +} +.back-to-top:hover, +.bs-docs-theme-toggle:hover { + color: #563d7c; + text-decoration: none; +} +.bs-docs-theme-toggle { + margin-top: 0; +} +@media (min-width: 768px) { + .back-to-top, + .bs-docs-theme-toggle { + display: block; + } +} +@media (min-width: 992px) { + .bs-docs-sidebar .nav > .active > ul { + display: block; + } + .bs-docs-sidebar.affix, + .bs-docs-sidebar.affix-bottom { + width: 213px; + } + .bs-docs-sidebar.affix { + position: fixed; + top: 20px; + } + .bs-docs-sidebar.affix-bottom { + position: absolute; + } + .bs-docs-sidebar.affix-bottom .bs-docs-sidenav, + .bs-docs-sidebar.affix .bs-docs-sidenav { + margin-top: 0; + margin-bottom: 0; + } +} +@media (min-width: 1200px) { + .bs-docs-sidebar.affix-bottom, + .bs-docs-sidebar.affix { + width: 263px; + } +} +.show-grid { + margin-bottom: 15px; +} +.show-grid [class^="col-"] { + padding-top: 10px; + padding-bottom: 10px; + background-color: #eee; + background-color: rgba(86, 61, 124, 0.15); + border: 1px solid #ddd; + border: 1px solid rgba(86, 61, 124, 0.2); +} +.bs-example { + position: relative; + padding: 45px 15px 15px; + margin: 0 -15px 15px; + border-color: #e5e5e5 #eee #eee; + border-style: solid; + border-width: 1px 0; + -webkit-box-shadow: inset 0 3px 6px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 6px rgba(0, 0, 0, 0.05); +} +.bs-example:after { + position: absolute; + top: 15px; + left: 15px; + font-size: 12px; + font-weight: 700; + color: #959595; + text-transform: uppercase; + letter-spacing: 1px; + content: "Example"; +} +.bs-example-padded-bottom { + padding-bottom: 24px; +} +.bs-example + .highlight, +.bs-example + .bs-clipboard + .highlight { + margin: -15px -15px 15px; + border-width: 0 0 1px; + border-radius: 0; +} +@media (min-width: 768px) { + .bs-example { + margin-right: 0; + margin-left: 0; + background-color: #fff; + border-color: #ddd; + border-width: 1px; + border-radius: 4px 4px 0 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .bs-example + .highlight, + .bs-example + .bs-clipboard + .highlight { + margin-top: -16px; + margin-right: 0; + margin-left: 0; + border-width: 1px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + } + .bs-example + .bs-clipboard .btn-clipboard { + top: -15px; + border-top-right-radius: 0; + } + .bs-example-standalone { + border-radius: 4px; + } +} +.bs-example .container { + width: auto; +} +.bs-example > p:last-child, +.bs-example > ul:last-child, +.bs-example > ol:last-child, +.bs-example > blockquote:last-child, +.bs-example > .form-control:last-child, +.bs-example > .table:last-child, +.bs-example > .navbar:last-child, +.bs-example > .jumbotron:last-child, +.bs-example > .alert:last-child, +.bs-example > .panel:last-child, +.bs-example > .list-group:last-child, +.bs-example > .well:last-child, +.bs-example > .progress:last-child, +.bs-example > .table-responsive:last-child > .table { + margin-bottom: 0; +} +.bs-example > p > .close { + float: none; +} +.bs-example-type .table .type-info { + color: #767676; + vertical-align: middle; +} +.bs-example-type .table td { + padding: 15px 0; + border-color: #eee; +} +.bs-example-type .table tr:first-child td { + border-top: 0; +} +.bs-example-type h1, +.bs-example-type h2, +.bs-example-type h3, +.bs-example-type h4, +.bs-example-type h5, +.bs-example-type h6 { + margin: 0; +} +.bs-example-bg-classes p { + padding: 15px; +} +.bs-example > .img-circle, +.bs-example > .img-rounded, +.bs-example > .img-thumbnail { + margin: 5px; +} +.bs-example > .table-responsive > .table { + background-color: #fff; +} +.bs-example > .btn, +.bs-example > .btn-group { + margin-top: 5px; + margin-bottom: 5px; +} +.bs-example > .btn-toolbar + .btn-toolbar { + margin-top: 10px; +} +.bs-example-control-sizing select, +.bs-example-control-sizing input[type="text"] + input[type="text"] { + margin-top: 10px; +} +.bs-example-form .input-group { + margin-bottom: 10px; +} +.bs-example > textarea.form-control { + resize: vertical; +} +.bs-example > .list-group { + max-width: 400px; +} +.bs-example .navbar:last-child { + margin-bottom: 0; +} +.bs-navbar-top-example, +.bs-navbar-bottom-example { + z-index: 1; + padding: 0; + overflow: hidden; +} +.bs-navbar-top-example .navbar-header, +.bs-navbar-bottom-example .navbar-header { + margin-left: 0; +} +.bs-navbar-top-example .navbar-fixed-top, +.bs-navbar-bottom-example .navbar-fixed-bottom { + position: relative; + margin-right: 0; + margin-left: 0; +} +.bs-navbar-top-example { + padding-bottom: 45px; +} +.bs-navbar-top-example:after { + top: auto; + bottom: 15px; +} +.bs-navbar-top-example .navbar-fixed-top { + top: -1px; +} +.bs-navbar-bottom-example { + padding-top: 45px; +} +.bs-navbar-bottom-example .navbar-fixed-bottom { + bottom: -1px; +} +.bs-navbar-bottom-example .navbar { + margin-bottom: 0; +} +@media (min-width: 768px) { + .bs-navbar-top-example .navbar-fixed-top, + .bs-navbar-bottom-example .navbar-fixed-bottom { + position: absolute; + } +} +.bs-example .pagination { + margin-top: 10px; + margin-bottom: 10px; +} +.bs-example > .pager { + margin-top: 0; +} +.bs-example-modal { + background-color: #f5f5f5; +} +.bs-example-modal .modal { + position: relative; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 1; + display: block; +} +.bs-example-modal .modal-dialog { + left: auto; + margin-right: auto; + margin-left: auto; +} +.bs-example > .dropdown > .dropdown-toggle { + float: left; +} +.bs-example > .dropdown > .dropdown-menu { + position: static; + display: block; + margin-bottom: 5px; + clear: left; +} +.bs-example-tabs .nav-tabs { + margin-bottom: 15px; +} +.bs-example-tooltips { + text-align: center; +} +.bs-example-tooltips > .btn { + margin-top: 5px; + margin-bottom: 5px; +} +.bs-example-tooltip .tooltip { + position: relative; + display: inline-block; + margin: 10px 20px; + opacity: 1; +} +.bs-example-popover { + padding-bottom: 24px; + background-color: #f9f9f9; +} +.bs-example-popover .popover { + position: relative; + display: block; + float: left; + width: 260px; + margin: 20px; +} +.scrollspy-example { + position: relative; + height: 200px; + margin-top: 10px; + overflow: auto; +} +.bs-example > .nav-pills-stacked-example { + max-width: 300px; +} +#collapseExample .well { + margin-bottom: 0; +} +#focusedInput { + border-color: #cccccc; + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + -webkit-box-shadow: 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: 0 0 8px rgba(82, 168, 236, 0.6); +} +.bs-callout { + padding: 20px; + margin: 20px 0; + border: 1px solid #eee; + border-left-width: 5px; + border-radius: 3px; +} +.bs-callout h4 { + margin-top: 0; + margin-bottom: 5px; +} +.bs-callout p:last-child { + margin-bottom: 0; +} +.bs-callout code { + border-radius: 3px; +} +.bs-callout + .bs-callout { + margin-top: -5px; +} +.bs-callout-danger { + border-left-color: #ce4844; +} +.bs-callout-danger h4 { + color: #ce4844; +} +.bs-callout-warning { + border-left-color: #aa6708; +} +.bs-callout-warning h4 { + color: #aa6708; +} +.bs-callout-info { + border-left-color: #1b809e; +} +.bs-callout-info h4 { + color: #1b809e; +} +.color-swatches { + margin: 0 -5px; + overflow: hidden; + /* clearfix */ +} +.color-swatch { + float: left; + width: 60px; + height: 60px; + margin: 0 5px; + border-radius: 3px; +} +@media (min-width: 768px) { + .color-swatch { + width: 100px; + height: 100px; + } +} +.color-swatches .gray-darker { + background-color: #222; +} +.color-swatches .gray-dark { + background-color: #333; +} +.color-swatches .gray { + background-color: #555; +} +.color-swatches .gray-light { + background-color: #999; +} +.color-swatches .gray-lighter { + background-color: #eee; +} +.color-swatches .brand-primary { + background-color: #337ab7; +} +.color-swatches .brand-success { + background-color: #5cb85c; +} +.color-swatches .brand-warning { + background-color: #f0ad4e; +} +.color-swatches .brand-danger { + background-color: #d9534f; +} +.color-swatches .brand-info { + background-color: #5bc0de; +} +.color-swatches .bs-purple { + background-color: #563d7c; +} +.color-swatches .bs-purple-light { + background-color: #c7bfd3; +} +.color-swatches .bs-purple-lighter { + background-color: #e5e1ea; +} +.color-swatches .bs-gray { + background-color: #f9f9f9; +} +.bs-team .team-member { + line-height: 32px; + color: #555; +} +.bs-team .team-member:hover { + color: #333; + text-decoration: none; +} +.bs-team .github-btn { + float: right; + width: 180px; + height: 20px; + margin-top: 6px; + border: none; +} +.bs-team img { + float: left; + width: 32px; + margin-right: 10px; + border-radius: 4px; +} +.table-responsive .highlight pre { + white-space: normal; +} +.bs-table th small, +.responsive-utilities th small { + display: block; + font-weight: 400; + color: #999; +} +.responsive-utilities tbody th { + font-weight: 400; +} +.responsive-utilities td { + text-align: center; +} +.responsive-utilities td.is-visible { + color: #468847; + background-color: #dff0d8 !important; +} +.responsive-utilities td.is-hidden { + color: #ccc; + background-color: #f9f9f9 !important; +} +.responsive-utilities-test { + margin-top: 5px; +} +.responsive-utilities-test .col-xs-6 { + margin-bottom: 10px; +} +.responsive-utilities-test span { + display: block; + padding: 15px 10px; + font-size: 14px; + font-weight: 700; + line-height: 1.1; + text-align: center; + border-radius: 4px; +} +.visible-on .col-xs-6 .hidden-xs, +.visible-on .col-xs-6 .hidden-sm, +.visible-on .col-xs-6 .hidden-md, +.visible-on .col-xs-6 .hidden-lg, +.hidden-on .col-xs-6 .hidden-xs, +.hidden-on .col-xs-6 .hidden-sm, +.hidden-on .col-xs-6 .hidden-md, +.hidden-on .col-xs-6 .hidden-lg { + color: #999; + border: 1px solid #ddd; +} +.visible-on .col-xs-6 .visible-xs-block, +.visible-on .col-xs-6 .visible-sm-block, +.visible-on .col-xs-6 .visible-md-block, +.visible-on .col-xs-6 .visible-lg-block, +.hidden-on .col-xs-6 .visible-xs-block, +.hidden-on .col-xs-6 .visible-sm-block, +.hidden-on .col-xs-6 .visible-md-block, +.hidden-on .col-xs-6 .visible-lg-block { + color: #468847; + background-color: #dff0d8; + border: 1px solid #d6e9c6; +} +.bs-glyphicons { + margin: 0 -10px 20px; + overflow: hidden; +} +.bs-glyphicons-list { + padding-left: 0; + list-style: none; +} +.bs-glyphicons li { + float: left; + width: 25%; + height: 115px; + padding: 10px; + font-size: 10px; + line-height: 1.4; + text-align: center; + background-color: #f9f9f9; + border: 1px solid #fff; +} +.bs-glyphicons .glyphicon { + margin-top: 5px; + margin-bottom: 10px; + font-size: 24px; +} +.bs-glyphicons .glyphicon-class { + display: block; + text-align: center; + word-wrap: break-word; +} +.bs-glyphicons li:hover { + color: #fff; + background-color: #563d7c; +} +@media (min-width: 768px) { + .bs-glyphicons { + margin-right: 0; + margin-left: 0; + } + .bs-glyphicons li { + width: 12.5%; + font-size: 12px; + } +} +.bs-customizer .toggle { + float: right; + margin-top: 25px; +} +.bs-customizer label { + margin-top: 10px; + font-weight: 500; + color: #555; +} +.bs-customizer h2 { + padding-top: 30px; + margin-top: 0; + margin-bottom: 5px; +} +.bs-customizer h3 { + margin-bottom: 0; +} +.bs-customizer h4 { + margin-top: 15px; + margin-bottom: 0; +} +.bs-customizer .bs-callout h4 { + margin-top: 0; + margin-bottom: 5px; +} +.bs-customizer input[type="text"] { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + background-color: #fafafa; +} +.bs-customizer .help-block { + margin-bottom: 5px; + font-size: 12px; +} +#less-section label { + font-weight: 400; +} +.bs-customize-download .btn-outline { + padding: 20px; +} +.bs-customizer-alert { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; + padding: 15px 0; + color: #fff; + background-color: #d9534f; + border-bottom: 1px solid #b94441; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} +.bs-customizer-alert .close { + margin-top: -4px; + font-size: 24px; +} +.bs-customizer-alert p { + margin-bottom: 0; +} +.bs-customizer-alert .glyphicon { + margin-right: 5px; +} +.bs-customizer-alert pre { + margin: 10px 0 0; + color: #fff; + background-color: #a83c3a; + border-color: #973634; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); +} +.bs-dropzone { + position: relative; + padding: 20px; + margin-bottom: 20px; + color: #777; + text-align: center; + border: 2px dashed #eee; + border-radius: 4px; +} +.bs-dropzone .import-header { + margin-bottom: 5px; +} +.bs-dropzone .glyphicon-folder-open { + font-size: 40px; +} +.bs-dropzone hr { + width: 100px; +} +.bs-dropzone .lead { + margin-bottom: 10px; + font-weight: 400; + color: #333; +} +#import-manual-trigger { + cursor: pointer; +} +.bs-dropzone p:last-child { + margin-bottom: 0; +} +.bs-brand-logos { + display: table; + width: 100%; + margin-bottom: 15px; + overflow: hidden; + color: #563d7c; + background-color: #f9f9f9; + border-radius: 4px; +} +.bs-brand-item { + padding: 60px 0; + text-align: center; +} +.bs-brand-item + .bs-brand-item { + border-top: 1px solid #fff; +} +.bs-brand-logos .inverse { + color: #fff; + background-color: #563d7c; +} +.bs-brand-item h1, +.bs-brand-item h3 { + margin-top: 0; + margin-bottom: 0; +} +.bs-brand-item .bs-docs-booticon { + margin-right: auto; + margin-left: auto; +} +.bs-brand-item .glyphicon { + width: 30px; + height: 30px; + margin: 10px auto -10px; + line-height: 30px; + color: #fff; + border-radius: 50%; +} +.bs-brand-item .glyphicon-ok { + background-color: #5cb85c; +} +.bs-brand-item .glyphicon-remove { + background-color: #d9534f; +} +@media (min-width: 768px) { + .bs-brand-item { + display: table-cell; + width: 1%; + } + .bs-brand-item + .bs-brand-item { + border-top: 0; + border-left: 1px solid #fff; + } + .bs-brand-item h1 { + font-size: 60px; + } +} +.bs-clipboard { + position: relative; + display: none; + float: right; +} +.bs-clipboard + .highlight { + margin-top: 0; +} +.btn-clipboard { + position: absolute; + top: 0; + right: 0; + z-index: 10; + display: block; + padding: 4px 8px; + font-size: 12px; + color: #818a91; + cursor: pointer; + background-color: transparent; + border: 0; + border-top-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-clipboard:hover { + color: #fff; + background-color: #027de7; +} +@media (min-width: 768px) { + .bs-clipboard { + display: block; + } +} +.anchorjs-link { + color: inherit; +} +@media (max-width: 480px) { + .anchorjs-link { + display: none; + } +} +*:hover > .anchorjs-link { + opacity: 0.75; + -webkit-transition: color 0.16s linear; + -o-transition: color 0.16s linear; + transition: color 0.16s linear; +} +*:hover > .anchorjs-link:hover, +.anchorjs-link:focus { + text-decoration: none; + opacity: 1; +} +.algolia-autocomplete { + display: block !important; +} +.algolia-autocomplete .ds-dropdown-menu { + width: 100%; + min-width: 0 !important; + max-width: none !important; + padding: 10px 0 !important; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ddd; + border: 1px solid rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 0 8px 15px rgba(0, 0, 0, 0.175); + box-shadow: 0 8px 15px rgba(0, 0, 0, 0.175); +} +@media (min-width: 768px) { + .algolia-autocomplete .ds-dropdown-menu { + width: 175%; + } +} +.algolia-autocomplete .ds-dropdown-menu:before { + display: none !important; +} +.algolia-autocomplete .ds-dropdown-menu [class^="ds-dataset-"] { + padding: 0 !important; + overflow: visible !important; + background-color: transparent !important; + border: 0 !important; +} +.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { + margin-top: 0 !important; +} +.algolia-autocomplete .ds-dropdown-menu .ds-input { + -webkit-box-shadow: none; + box-shadow: none; +} +.algolia-autocomplete .algolia-docsearch-suggestion { + padding: 0 !important; + overflow: visible !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--category-header { + padding: 2px 15px !important; + margin-top: 0 !important; + font-size: 13px !important; + font-weight: 500 !important; + color: #7952b3 !important; + border-bottom: 0 !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { + float: none !important; + padding-top: 0 !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { + float: none !important; + width: auto !important; + padding: 0 !important; + text-align: left !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--content { + float: none !important; + width: auto !important; + padding: 0 !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--content:before { + display: none !important; +} +.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { + padding-top: 10px !important; + margin-top: 10px !important; + border-top: 1px solid #eee; +} +.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { + display: none !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--title { + display: block; + padding: 4px 15px !important; + margin-bottom: 0 !important; + font-size: 13px !important; + font-weight: 400 !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--text { + padding: 0 15px 8px !important; + margin-top: -4px; + font-size: 13px !important; + font-weight: 400; + line-height: 1.25 !important; +} +.algolia-autocomplete .algolia-docsearch-footer { + float: none !important; + width: auto !important; + height: auto !important; + padding: 10px 15px 0; + font-size: 10px !important; + line-height: 1 !important; + color: #767676 !important; + border-top: 1px solid #eee; +} +.algolia-autocomplete .algolia-docsearch-footer--logo { + display: inline !important; + overflow: visible !important; + color: inherit !important; + text-indent: 0 !important; + background: none !important; +} +.algolia-autocomplete .algolia-docsearch-suggestion--highlight { + color: #5f2dab; + background-color: #eee; +} +.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { + -webkit-box-shadow: inset 0 -2px 0 0 rgba(95, 45, 171, 0.5) !important; + box-shadow: inset 0 -2px 0 0 rgba(95, 45, 171, 0.5) !important; +} +.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { + background-color: #e5e5e5 !important; +} +body { + position: relative; +} +.table code { + font-size: 13px; + font-weight: 400; +} +h2 code, +h3 code, +h4 code { + background-color: inherit; +} +.bs-docs-section { + margin-bottom: 60px; +} +.bs-docs-section:last-child { + margin-bottom: 0; +} +h1[id] { + padding-top: 20px; + margin-top: 0; +} +.bs-docs-browser-bugs td p { + margin-bottom: 0; +} +.bs-docs-browser-bugs th:first-child { + width: 18%; +} +.bs-events-table > thead > tr > th:first-child, +.bs-events-table > tbody > tr > td:first-child { + white-space: nowrap; +} +.bs-events-table > thead > tr > th:first-child { + width: 150px; +} +.js-options-table > thead > tr > th:nth-child(1), +.js-options-table > thead > tr > th:nth-child(2) { + width: 100px; +} +.js-options-table > thead > tr > th:nth-child(3) { + width: 50px; +} +.v4-tease { + display: block; + padding: 15px 20px; + font-weight: 700; + color: #fff; + text-align: center; + background-color: #0275d8; +} +.v4-tease:focus, +.v4-tease:hover { + color: #fff; + text-decoration: none; + background-color: #0269c2; +} +/* Nullify ill-advised printing of hrefs; see #18711 */ +@media print { + a[href]:after { + content: "" !important; + } +} +/*# sourceMappingURL=docs.css.map */ \ No newline at end of file diff --git a/vendor/bootstrap/docs/assets/css/docs.css.map b/vendor/bootstrap/docs/assets/css/docs.css.map new file mode 100644 index 0000000000000000000000000000000000000000..8c1024f4b52e09cede8da7bbcc6194a571c59d66 GIT binary patch literal 81233 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 literal 0 HcmV?d00001 diff --git a/vendor/bootstrap/docs/assets/css/docs.min.css b/vendor/bootstrap/docs/assets/css/docs.min.css new file mode 100644 index 000000000..852d2cea4 --- /dev/null +++ b/vendor/bootstrap/docs/assets/css/docs.min.css @@ -0,0 +1,11 @@ +/*! + * Bootstrap Docs (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */.hll{background-color:#ffc}.c{color:#999}.err{color:#a00;background-color:#faa}.k{color:#069}.o{color:#555}.cm{color:#999}.cp{color:#099}.c1{color:#999}.cs{color:#999}.gd{background-color:#fcc;border:1px solid #c00}.ge{font-style:italic}.gr{color:red}.gh{color:#030}.gi{background-color:#cfc;border:1px solid #0c0}.go{color:#aaa}.gp{color:#009}.gu{color:#030}.gt{color:#9c6}.kc{color:#069}.kd{color:#069}.kn{color:#069}.kp{color:#069}.kr{color:#069}.kt{color:#078}.m{color:#f60}.s{color:#d44950}.na{color:#4f9fcf}.nb{color:#366}.nc{color:#0a8}.no{color:#360}.nd{color:#99f}.ni{color:#999}.ne{color:#c00}.nf{color:#c0f}.nl{color:#99f}.nn{color:#0cf}.nt{color:#2f6f9f}.nv{color:#033}.ow{color:#000}.w{color:#bbb}.mf{color:#f60}.mh{color:#f60}.mi{color:#f60}.mo{color:#f60}.sb{color:#c30}.sc{color:#c30}.sd{font-style:italic;color:#c30}.s2{color:#c30}.se{color:#c30}.sh{color:#c30}.si{color:#a00}.sx{color:#c30}.sr{color:#3aa}.s1{color:#c30}.ss{color:#fc3}.bp{color:#366}.vc{color:#033}.vg{color:#033}.vi{color:#033}.il{color:#f60}.css .nt+.nt,.css .o,.css .o+.nt{color:#999}.highlight{padding:9px 14px;margin-bottom:14px;background-color:#f7f7f9;border:1px solid #e1e1e8;border-radius:4px}.highlight pre{padding:0;margin-top:0;margin-bottom:0;word-break:normal;white-space:nowrap;background-color:transparent;border:0}.highlight pre code{font-size:inherit;color:#333}.highlight pre code:first-child{display:inline-block;padding-right:45px}.language-bash:before{color:#033;content:"$ ";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */@-ms-viewport{width:device-width}@viewport{width:device-width}.btn-outline{color:#563d7c;background-color:transparent;border-color:#563d7c}.btn-outline:active,.btn-outline:focus,.btn-outline:hover{color:#fff;background-color:#563d7c;border-color:#563d7c}.btn-outline-inverse{color:#fff;background-color:transparent;border-color:#cdbfe3}.btn-outline-inverse:active,.btn-outline-inverse:focus,.btn-outline-inverse:hover{color:#563d7c;text-shadow:none;background-color:#fff;border-color:#fff}.bs-docs-booticon{display:block;font-weight:500;color:#fff;text-align:center;cursor:default;background-color:#563d7c;border-radius:15%}.bs-docs-booticon-sm{width:30px;height:30px;font-size:20px;line-height:28px}.bs-docs-booticon-lg{width:144px;height:144px;font-size:108px;line-height:140px}.bs-docs-booticon-inverse{color:#563d7c;background-color:#fff}.bs-docs-booticon-outline{background-color:transparent;border:1px solid #cdbfe3}#skippy{display:block;padding:1em;color:#fff;background-color:#6f5499;outline:0}#skippy .skiplink-text{padding:.5em;outline:1px dotted}#content:focus{outline:0}.bs-docs-nav{margin-bottom:0;background-color:#fff;border-bottom:0}.bs-docs-nav .bs-nav-b{display:none}.bs-docs-nav .navbar-brand,.bs-docs-nav .navbar-nav>li>a{font-weight:500;color:#563d7c}.bs-docs-nav .navbar-nav>li>a{padding-right:10px;padding-left:10px}.bs-docs-nav .navbar-nav>.active>a,.bs-docs-nav .navbar-nav>.active>a:hover,.bs-docs-nav .navbar-nav>li>a:hover{color:#463265;background-color:#f9f9f9}.bs-docs-nav .navbar-toggle .icon-bar{background-color:#563d7c}.bs-docs-nav .navbar-header .navbar-toggle{border-color:#fff}.bs-docs-nav .navbar-header .navbar-toggle:focus,.bs-docs-nav .navbar-header .navbar-toggle:hover{background-color:#f9f9f9;border-color:#f9f9f9}@media (min-width:768px) and (max-width:992px){.bs-docs-nav .navbar-right{display:none}}.bs-docs-footer{padding-top:50px;padding-bottom:50px;margin-top:100px;color:#99979c;text-align:center;background-color:#2a2730}.bs-docs-footer a{color:#fff}.bs-docs-footer-links{padding-left:0;margin-bottom:20px}.bs-docs-footer-links li{display:inline-block}.bs-docs-footer-links li+li{margin-left:15px}@media (min-width:768px){.bs-docs-footer{text-align:left}.bs-docs-footer p{margin-bottom:0}}.bs-docs-header,.bs-docs-masthead{position:relative;padding:30px 0;color:#cdbfe3;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1);background-color:#6f5499;background-image:-webkit-gradient(linear,left top,left bottom,from(#563d7c),to(#6f5499));background-image:-webkit-linear-gradient(top,#563d7c 0,#6f5499 100%);background-image:-o-linear-gradient(top,#563d7c 0,#6f5499 100%);background-image:linear-gradient(to bottom,#563d7c 0,#6f5499 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#563d7c", endColorstr="#6F5499", GradientType=0);background-repeat:repeat-x}.bs-docs-masthead .bs-docs-booticon{margin:0 auto 30px}.bs-docs-masthead h1{font-weight:300;line-height:1;color:#fff}.bs-docs-masthead .lead{margin:0 auto 30px;font-size:20px;color:#fff}.bs-docs-masthead .version{margin-top:-15px;margin-bottom:30px;color:#9783b9}.bs-docs-masthead .btn{width:100%;padding:15px 30px;font-size:20px}@media (min-width:480px){.bs-docs-masthead .btn{width:auto}}@media (min-width:768px){.bs-docs-masthead{padding:80px 0}.bs-docs-masthead h1{font-size:60px}.bs-docs-masthead .lead{font-size:24px}}@media (min-width:992px){.bs-docs-masthead .lead{width:80%;font-size:30px}}.bs-docs-header{margin-bottom:40px;font-size:20px}.bs-docs-header h1{margin-top:0;color:#fff}.bs-docs-header p{margin-bottom:0;font-weight:300;line-height:1.4}.bs-docs-header .container{position:relative}@media (min-width:768px){.bs-docs-header{padding-top:60px;padding-bottom:60px;font-size:24px;text-align:left}.bs-docs-header h1{font-size:60px;line-height:1}}@media (min-width:992px){.bs-docs-header h1,.bs-docs-header p{margin-right:380px}}#carbonads{display:block;padding:15px 15px 15px 160px;margin:50px -15px -30px;overflow:hidden;font-size:13px;line-height:1.5;text-align:left;border:solid #866ab3;border-width:1px 0 0}#carbonads a{color:#fff;text-decoration:none}@media (min-width:768px){#carbonads{max-width:330px;margin:50px auto 0;border-width:1px;border-radius:4px}}@media (min-width:992px){#carbonads{position:absolute;top:0;right:15px;margin-top:0}.bs-docs-masthead #carbonads{position:static}}.carbon-img{float:left;margin-left:-145px}.carbon-poweredby{display:block;color:#cdbfe3!important}.bs-docs-featurette{padding-top:40px;padding-bottom:40px;font-size:16px;line-height:1.5;color:#555;text-align:center;background-color:#fff;border-bottom:1px solid #e5e5e5}.bs-docs-featurette+.bs-docs-footer{margin-top:0;border-top:0}.bs-docs-featurette-title{margin-bottom:5px;font-size:30px;font-weight:400;color:#333}.half-rule{width:100px;margin:40px auto}.bs-docs-featurette h3{margin-bottom:5px;font-weight:400;color:#333}.bs-docs-featurette-img{display:block;margin-bottom:20px;color:#333}.bs-docs-featurette-img:hover{color:#337ab7;text-decoration:none}.bs-docs-featurette-img img{display:block;margin-bottom:15px}@media (min-width:480px){.bs-docs-featurette .img-responsive{margin-top:30px}}@media (min-width:768px){.bs-docs-featurette{padding-top:100px;padding-bottom:100px}.bs-docs-featurette-title{font-size:40px}.bs-docs-featurette .lead{max-width:80%;margin-right:auto;margin-left:auto}.bs-docs-featurette .img-responsive{margin-top:0}}.bs-docs-featured-sites{margin-right:-1px;margin-left:-1px}.bs-docs-featured-sites .col-xs-8{padding:1px}.bs-docs-featured-sites .img-responsive{margin-top:0}@media (min-width:768px){.bs-docs-featured-sites .col-sm-4:first-child img{border-top-left-radius:4px;border-bottom-left-radius:4px}.bs-docs-featured-sites .col-sm-4:last-child img{border-top-right-radius:4px;border-bottom-right-radius:4px}}.bs-examples .thumbnail{margin-bottom:10px}.bs-examples h4{margin-bottom:5px}.bs-examples p{margin-bottom:20px}@media (max-width:480px){.bs-examples{margin-right:-10px;margin-left:-10px}.bs-examples>[class^=col-]{padding-right:10px;padding-left:10px}}.bs-docs-sidebar.affix{position:static}@media (min-width:768px){.bs-docs-sidebar{padding-left:20px}}.bs-docs-search{margin-bottom:20px;margin-left:20px}.bs-docs-sidenav{margin-top:20px;margin-bottom:20px}.bs-docs-sidebar .nav>li>a{display:block;padding:4px 20px;font-size:13px;font-weight:500;color:#767676}.bs-docs-sidebar .nav>li>a:focus,.bs-docs-sidebar .nav>li>a:hover{padding-left:19px;color:#563d7c;text-decoration:none;background-color:transparent;border-left:1px solid #563d7c}.bs-docs-sidebar .nav>.active:focus>a,.bs-docs-sidebar .nav>.active:hover>a,.bs-docs-sidebar .nav>.active>a{padding-left:18px;font-weight:700;color:#563d7c;background-color:transparent;border-left:2px solid #563d7c}.bs-docs-sidebar .nav .nav{display:none;padding-bottom:10px}.bs-docs-sidebar .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px;font-weight:400}.bs-docs-sidebar .nav .nav>li>a:focus,.bs-docs-sidebar .nav .nav>li>a:hover{padding-left:29px}.bs-docs-sidebar .nav .nav>.active:focus>a,.bs-docs-sidebar .nav .nav>.active:hover>a,.bs-docs-sidebar .nav .nav>.active>a{padding-left:28px;font-weight:500}.back-to-top,.bs-docs-theme-toggle{display:none;padding:4px 10px;margin-top:10px;margin-left:10px;font-size:12px;font-weight:500;color:#999}.back-to-top:hover,.bs-docs-theme-toggle:hover{color:#563d7c;text-decoration:none}.bs-docs-theme-toggle{margin-top:0}@media (min-width:768px){.back-to-top,.bs-docs-theme-toggle{display:block}}@media (min-width:992px){.bs-docs-sidebar .nav>.active>ul{display:block}.bs-docs-sidebar.affix,.bs-docs-sidebar.affix-bottom{width:213px}.bs-docs-sidebar.affix{position:fixed;top:20px}.bs-docs-sidebar.affix-bottom{position:absolute}.bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav{margin-top:0;margin-bottom:0}}@media (min-width:1200px){.bs-docs-sidebar.affix,.bs-docs-sidebar.affix-bottom{width:263px}}.show-grid{margin-bottom:15px}.show-grid [class^=col-]{padding-top:10px;padding-bottom:10px;background-color:#eee;background-color:rgba(86,61,124,.15);border:1px solid #ddd;border:1px solid rgba(86,61,124,.2)}.bs-example{position:relative;padding:45px 15px 15px;margin:0 -15px 15px;border-color:#e5e5e5 #eee #eee;border-style:solid;border-width:1px 0;-webkit-box-shadow:inset 0 3px 6px rgba(0,0,0,.05);box-shadow:inset 0 3px 6px rgba(0,0,0,.05)}.bs-example:after{position:absolute;top:15px;left:15px;font-size:12px;font-weight:700;color:#959595;text-transform:uppercase;letter-spacing:1px;content:"Example"}.bs-example-padded-bottom{padding-bottom:24px}.bs-example+.bs-clipboard+.highlight,.bs-example+.highlight{margin:-15px -15px 15px;border-width:0 0 1px;border-radius:0}@media (min-width:768px){.bs-example{margin-right:0;margin-left:0;background-color:#fff;border-color:#ddd;border-width:1px;border-radius:4px 4px 0 0;-webkit-box-shadow:none;box-shadow:none}.bs-example+.bs-clipboard+.highlight,.bs-example+.highlight{margin-top:-16px;margin-right:0;margin-left:0;border-width:1px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.bs-example+.bs-clipboard .btn-clipboard{top:-15px;border-top-right-radius:0}.bs-example-standalone{border-radius:4px}}.bs-example .container{width:auto}.bs-example>.alert:last-child,.bs-example>.form-control:last-child,.bs-example>.jumbotron:last-child,.bs-example>.list-group:last-child,.bs-example>.navbar:last-child,.bs-example>.panel:last-child,.bs-example>.progress:last-child,.bs-example>.table-responsive:last-child>.table,.bs-example>.table:last-child,.bs-example>.well:last-child,.bs-example>blockquote:last-child,.bs-example>ol:last-child,.bs-example>p:last-child,.bs-example>ul:last-child{margin-bottom:0}.bs-example>p>.close{float:none}.bs-example-type .table .type-info{color:#767676;vertical-align:middle}.bs-example-type .table td{padding:15px 0;border-color:#eee}.bs-example-type .table tr:first-child td{border-top:0}.bs-example-type h1,.bs-example-type h2,.bs-example-type h3,.bs-example-type h4,.bs-example-type h5,.bs-example-type h6{margin:0}.bs-example-bg-classes p{padding:15px}.bs-example>.img-circle,.bs-example>.img-rounded,.bs-example>.img-thumbnail{margin:5px}.bs-example>.table-responsive>.table{background-color:#fff}.bs-example>.btn,.bs-example>.btn-group{margin-top:5px;margin-bottom:5px}.bs-example>.btn-toolbar+.btn-toolbar{margin-top:10px}.bs-example-control-sizing input[type=text]+input[type=text],.bs-example-control-sizing select{margin-top:10px}.bs-example-form .input-group{margin-bottom:10px}.bs-example>textarea.form-control{resize:vertical}.bs-example>.list-group{max-width:400px}.bs-example .navbar:last-child{margin-bottom:0}.bs-navbar-bottom-example,.bs-navbar-top-example{z-index:1;padding:0;overflow:hidden}.bs-navbar-bottom-example .navbar-header,.bs-navbar-top-example .navbar-header{margin-left:0}.bs-navbar-bottom-example .navbar-fixed-bottom,.bs-navbar-top-example .navbar-fixed-top{position:relative;margin-right:0;margin-left:0}.bs-navbar-top-example{padding-bottom:45px}.bs-navbar-top-example:after{top:auto;bottom:15px}.bs-navbar-top-example .navbar-fixed-top{top:-1px}.bs-navbar-bottom-example{padding-top:45px}.bs-navbar-bottom-example .navbar-fixed-bottom{bottom:-1px}.bs-navbar-bottom-example .navbar{margin-bottom:0}@media (min-width:768px){.bs-navbar-bottom-example .navbar-fixed-bottom,.bs-navbar-top-example .navbar-fixed-top{position:absolute}}.bs-example .pagination{margin-top:10px;margin-bottom:10px}.bs-example>.pager{margin-top:0}.bs-example-modal{background-color:#f5f5f5}.bs-example-modal .modal{position:relative;top:auto;right:auto;bottom:auto;left:auto;z-index:1;display:block}.bs-example-modal .modal-dialog{left:auto;margin-right:auto;margin-left:auto}.bs-example>.dropdown>.dropdown-toggle{float:left}.bs-example>.dropdown>.dropdown-menu{position:static;display:block;margin-bottom:5px;clear:left}.bs-example-tabs .nav-tabs{margin-bottom:15px}.bs-example-tooltips{text-align:center}.bs-example-tooltips>.btn{margin-top:5px;margin-bottom:5px}.bs-example-tooltip .tooltip{position:relative;display:inline-block;margin:10px 20px;opacity:1}.bs-example-popover{padding-bottom:24px;background-color:#f9f9f9}.bs-example-popover .popover{position:relative;display:block;float:left;width:260px;margin:20px}.scrollspy-example{position:relative;height:200px;margin-top:10px;overflow:auto}.bs-example>.nav-pills-stacked-example{max-width:300px}#collapseExample .well{margin-bottom:0}#focusedInput{border-color:#ccc;border-color:rgba(82,168,236,.8);outline:0;outline:thin dotted\9;-webkit-box-shadow:0 0 8px rgba(82,168,236,.6);box-shadow:0 0 8px rgba(82,168,236,.6)}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-danger{border-left-color:#ce4844}.bs-callout-danger h4{color:#ce4844}.bs-callout-warning{border-left-color:#aa6708}.bs-callout-warning h4{color:#aa6708}.bs-callout-info{border-left-color:#1b809e}.bs-callout-info h4{color:#1b809e}.color-swatches{margin:0 -5px;overflow:hidden}.color-swatch{float:left;width:60px;height:60px;margin:0 5px;border-radius:3px}@media (min-width:768px){.color-swatch{width:100px;height:100px}}.color-swatches .gray-darker{background-color:#222}.color-swatches .gray-dark{background-color:#333}.color-swatches .gray{background-color:#555}.color-swatches .gray-light{background-color:#999}.color-swatches .gray-lighter{background-color:#eee}.color-swatches .brand-primary{background-color:#337ab7}.color-swatches .brand-success{background-color:#5cb85c}.color-swatches .brand-warning{background-color:#f0ad4e}.color-swatches .brand-danger{background-color:#d9534f}.color-swatches .brand-info{background-color:#5bc0de}.color-swatches .bs-purple{background-color:#563d7c}.color-swatches .bs-purple-light{background-color:#c7bfd3}.color-swatches .bs-purple-lighter{background-color:#e5e1ea}.color-swatches .bs-gray{background-color:#f9f9f9}.bs-team .team-member{line-height:32px;color:#555}.bs-team .team-member:hover{color:#333;text-decoration:none}.bs-team .github-btn{float:right;width:180px;height:20px;margin-top:6px;border:none}.bs-team img{float:left;width:32px;margin-right:10px;border-radius:4px}.table-responsive .highlight pre{white-space:normal}.bs-table th small,.responsive-utilities th small{display:block;font-weight:400;color:#999}.responsive-utilities tbody th{font-weight:400}.responsive-utilities td{text-align:center}.responsive-utilities td.is-visible{color:#468847;background-color:#dff0d8!important}.responsive-utilities td.is-hidden{color:#ccc;background-color:#f9f9f9!important}.responsive-utilities-test{margin-top:5px}.responsive-utilities-test .col-xs-6{margin-bottom:10px}.responsive-utilities-test span{display:block;padding:15px 10px;font-size:14px;font-weight:700;line-height:1.1;text-align:center;border-radius:4px}.hidden-on .col-xs-6 .hidden-lg,.hidden-on .col-xs-6 .hidden-md,.hidden-on .col-xs-6 .hidden-sm,.hidden-on .col-xs-6 .hidden-xs,.visible-on .col-xs-6 .hidden-lg,.visible-on .col-xs-6 .hidden-md,.visible-on .col-xs-6 .hidden-sm,.visible-on .col-xs-6 .hidden-xs{color:#999;border:1px solid #ddd}.hidden-on .col-xs-6 .visible-lg-block,.hidden-on .col-xs-6 .visible-md-block,.hidden-on .col-xs-6 .visible-sm-block,.hidden-on .col-xs-6 .visible-xs-block,.visible-on .col-xs-6 .visible-lg-block,.visible-on .col-xs-6 .visible-md-block,.visible-on .col-xs-6 .visible-sm-block,.visible-on .col-xs-6 .visible-xs-block{color:#468847;background-color:#dff0d8;border:1px solid #d6e9c6}.bs-glyphicons{margin:0 -10px 20px;overflow:hidden}.bs-glyphicons-list{padding-left:0;list-style:none}.bs-glyphicons li{float:left;width:25%;height:115px;padding:10px;font-size:10px;line-height:1.4;text-align:center;background-color:#f9f9f9;border:1px solid #fff}.bs-glyphicons .glyphicon{margin-top:5px;margin-bottom:10px;font-size:24px}.bs-glyphicons .glyphicon-class{display:block;text-align:center;word-wrap:break-word}.bs-glyphicons li:hover{color:#fff;background-color:#563d7c}@media (min-width:768px){.bs-glyphicons{margin-right:0;margin-left:0}.bs-glyphicons li{width:12.5%;font-size:12px}}.bs-customizer .toggle{float:right;margin-top:25px}.bs-customizer label{margin-top:10px;font-weight:500;color:#555}.bs-customizer h2{padding-top:30px;margin-top:0;margin-bottom:5px}.bs-customizer h3{margin-bottom:0}.bs-customizer h4{margin-top:15px;margin-bottom:0}.bs-customizer .bs-callout h4{margin-top:0;margin-bottom:5px}.bs-customizer input[type=text]{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;background-color:#fafafa}.bs-customizer .help-block{margin-bottom:5px;font-size:12px}#less-section label{font-weight:400}.bs-customize-download .btn-outline{padding:20px}.bs-customizer-alert{position:fixed;top:0;right:0;left:0;z-index:1030;padding:15px 0;color:#fff;background-color:#d9534f;border-bottom:1px solid #b94441;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25);box-shadow:inset 0 1px 0 rgba(255,255,255,.25)}.bs-customizer-alert .close{margin-top:-4px;font-size:24px}.bs-customizer-alert p{margin-bottom:0}.bs-customizer-alert .glyphicon{margin-right:5px}.bs-customizer-alert pre{margin:10px 0 0;color:#fff;background-color:#a83c3a;border-color:#973634;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 2px 4px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}.bs-dropzone{position:relative;padding:20px;margin-bottom:20px;color:#777;text-align:center;border:2px dashed #eee;border-radius:4px}.bs-dropzone .import-header{margin-bottom:5px}.bs-dropzone .glyphicon-folder-open{font-size:40px}.bs-dropzone hr{width:100px}.bs-dropzone .lead{margin-bottom:10px;font-weight:400;color:#333}#import-manual-trigger{cursor:pointer}.bs-dropzone p:last-child{margin-bottom:0}.bs-brand-logos{display:table;width:100%;margin-bottom:15px;overflow:hidden;color:#563d7c;background-color:#f9f9f9;border-radius:4px}.bs-brand-item{padding:60px 0;text-align:center}.bs-brand-item+.bs-brand-item{border-top:1px solid #fff}.bs-brand-logos .inverse{color:#fff;background-color:#563d7c}.bs-brand-item h1,.bs-brand-item h3{margin-top:0;margin-bottom:0}.bs-brand-item .bs-docs-booticon{margin-right:auto;margin-left:auto}.bs-brand-item .glyphicon{width:30px;height:30px;margin:10px auto -10px;line-height:30px;color:#fff;border-radius:50%}.bs-brand-item .glyphicon-ok{background-color:#5cb85c}.bs-brand-item .glyphicon-remove{background-color:#d9534f}@media (min-width:768px){.bs-brand-item{display:table-cell;width:1%}.bs-brand-item+.bs-brand-item{border-top:0;border-left:1px solid #fff}.bs-brand-item h1{font-size:60px}}.bs-clipboard{position:relative;display:none;float:right}.bs-clipboard+.highlight{margin-top:0}.btn-clipboard{position:absolute;top:0;right:0;z-index:10;display:block;padding:4px 8px;font-size:12px;color:#818a91;cursor:pointer;background-color:transparent;border:0;border-top-right-radius:4px;border-bottom-left-radius:4px}.btn-clipboard:hover{color:#fff;background-color:#027de7}@media (min-width:768px){.bs-clipboard{display:block}}.anchorjs-link{color:inherit}@media (max-width:480px){.anchorjs-link{display:none}}:hover>.anchorjs-link{opacity:.75;-webkit-transition:color .16s linear;-o-transition:color .16s linear;transition:color .16s linear}.anchorjs-link:focus,:hover>.anchorjs-link:hover{text-decoration:none;opacity:1}.algolia-autocomplete{display:block!important}.algolia-autocomplete .ds-dropdown-menu{width:100%;min-width:0!important;max-width:none!important;padding:10px 0!important;background-color:#fff;background-clip:padding-box;border:1px solid #ddd;border:1px solid rgba(0,0,0,.1);-webkit-box-shadow:0 8px 15px rgba(0,0,0,.175);box-shadow:0 8px 15px rgba(0,0,0,.175)}@media (min-width:768px){.algolia-autocomplete .ds-dropdown-menu{width:175%}}.algolia-autocomplete .ds-dropdown-menu:before{display:none!important}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{padding:0!important;overflow:visible!important;background-color:transparent!important;border:0!important}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0!important}.algolia-autocomplete .ds-dropdown-menu .ds-input{-webkit-box-shadow:none;box-shadow:none}.algolia-autocomplete .algolia-docsearch-suggestion{padding:0!important;overflow:visible!important}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{padding:2px 15px!important;margin-top:0!important;font-size:13px!important;font-weight:500!important;color:#7952b3!important;border-bottom:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{float:none!important;padding-top:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:none!important;width:auto!important;padding:0!important;text-align:left!important}.algolia-autocomplete .algolia-docsearch-suggestion--content{float:none!important;width:auto!important;padding:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{display:none!important}.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header{padding-top:10px!important;margin-top:10px!important;border-top:1px solid #eee}.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-autocomplete .algolia-docsearch-suggestion--title{display:block;padding:4px 15px!important;margin-bottom:0!important;font-size:13px!important;font-weight:400!important}.algolia-autocomplete .algolia-docsearch-suggestion--text{padding:0 15px 8px!important;margin-top:-4px;font-size:13px!important;font-weight:400;line-height:1.25!important}.algolia-autocomplete .algolia-docsearch-footer{float:none!important;width:auto!important;height:auto!important;padding:10px 15px 0;font-size:10px!important;line-height:1!important;color:#767676!important;border-top:1px solid #eee}.algolia-autocomplete .algolia-docsearch-footer--logo{display:inline!important;overflow:visible!important;color:inherit!important;text-indent:0!important;background:0 0!important}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#5f2dab;background-color:#eee}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{-webkit-box-shadow:inset 0 -2px 0 0 rgba(95,45,171,.5)!important;box-shadow:inset 0 -2px 0 0 rgba(95,45,171,.5)!important}.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content{background-color:#e5e5e5!important}body{position:relative}.table code{font-size:13px;font-weight:400}h2 code,h3 code,h4 code{background-color:inherit}.bs-docs-section{margin-bottom:60px}.bs-docs-section:last-child{margin-bottom:0}h1[id]{padding-top:20px;margin-top:0}.bs-docs-browser-bugs td p{margin-bottom:0}.bs-docs-browser-bugs th:first-child{width:18%}.bs-events-table>tbody>tr>td:first-child,.bs-events-table>thead>tr>th:first-child{white-space:nowrap}.bs-events-table>thead>tr>th:first-child{width:150px}.js-options-table>thead>tr>th:nth-child(1),.js-options-table>thead>tr>th:nth-child(2){width:100px}.js-options-table>thead>tr>th:nth-child(3){width:50px}.v4-tease{display:block;padding:15px 20px;font-weight:700;color:#fff;text-align:center;background-color:#0275d8}.v4-tease:focus,.v4-tease:hover{color:#fff;text-decoration:none;background-color:#0269c2}@media print{a[href]:after{content:""!important}} +/*# sourceMappingURL=docs.min.css.map */ \ No newline at end of file diff --git a/vendor/bootstrap/docs/assets/css/docs.min.css.map b/vendor/bootstrap/docs/assets/css/docs.min.css.map new file mode 100644 index 0000000000000000000000000000000000000000..c5387ce4129723e493a6e8f09ca9fe665423efbc GIT binary patch literal 111827 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%0At{ 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
    e=X9!b`OVq0Hk!Gk1EW_B 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%0DACBT^N{XQYfI?{;0$$(4NQfPIU} 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 literal 0 HcmV?d00001 diff --git a/vendor/bootstrap/docs/assets/img/components.png b/vendor/bootstrap/docs/assets/img/components.png new file mode 100644 index 0000000000000000000000000000000000000000..b544d43068ab07fd3bbe7bcb51a7691ea23d1748 GIT binary patch literal 2926 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

    2^ulB|xZH^NDm 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 XqLF!~DqQgfNF}e20;6(>3Z>>X2c!G2A&Y> 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%0Ds;mg-WQL~OpXYO;q0 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ξ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

    '),a(".btn-clipboard").tooltip().on("mouseleave",function(){a(this).tooltip("hide")})});var o=new ClipboardJS(".btn-clipboard",{target:function(e){return e.parentNode.nextElementSibling}});o.on("success",function(e){a(e.trigger).attr("title","Copied!").tooltip("fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("fixTitle"),e.clearSelection()}),o.on("error",function(e){var t="Press "+(/Mac/i.test(navigator.userAgent)?"⌘":"Ctrl-")+"C to copy";a(e.trigger).attr("title",t).tooltip("fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("fixTitle")})})}(jQuery),function(){"use strict";anchors.options.placement="left",anchors.add(".bs-docs-section > h1, .bs-docs-section > h2, .bs-docs-section > h3, .bs-docs-section > h4, .bs-docs-section > h5")}(),function(){"use strict";var e=document.getElementById("search-input");window.docsearch&&e&&window.docsearch({apiKey:"c8948afa20e6437a6e829f7e87b9ac11",indexName:"bootstrap-v3",inputSelector:"#search-input",transformData:function(e){return e.map(function(e){var t=function i(){var e=window.location,t=e.origin;if(!t){var n=e.port?":"+e.port:"";t=e.protocol+"//"+e.hostname+n}return t}(),n=/^https?:\/\/getbootstrap\.com/;return e.url=t.match(n)?e.url:e.url.replace(n,""),"content"===e.anchor&&(e.url=e.url.replace(/#content$/,""),e.anchor=null),e})},debug:!1})}(), +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +function(){"use strict";if(navigator.userAgent.match(/IEMobile\/10\.0/)){var e=document.createElement("style");e.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.querySelector("head").appendChild(e)}}(), +/*! + * Copyright 2014-2019 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */ +function(){"use strict";var e=window.navigator.userAgent;if(!(-1 -1 || ua.indexOf('Presto') > -1) { + return // Opera, which might pretend to be IE + } + var emulated = emulatedIEMajorVersion() + if (emulated === null) { + return // Not IE + } + var nonEmulated = actualNonEmulatedIEMajorVersion() + + if (emulated !== nonEmulated) { + window.alert('WARNING: You appear to be using IE' + nonEmulated + ' in IE' + emulated + ' emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON\'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!') + } +})(); diff --git a/vendor/bootstrap/docs/assets/js/ie10-viewport-bug-workaround.js b/vendor/bootstrap/docs/assets/js/ie10-viewport-bug-workaround.js new file mode 100644 index 000000000..673a71ad0 --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/ie10-viewport-bug-workaround.js @@ -0,0 +1,23 @@ +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// See the Getting Started docs for more information: +// https://getbootstrap.com/docs/3.4/getting-started/#support-ie10-width + +(function () { + 'use strict'; + + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode( + '@-ms-viewport{width:auto!important}' + ) + ) + document.querySelector('head').appendChild(msViewportStyle) + } + +})(); diff --git a/vendor/bootstrap/docs/assets/js/ie8-responsive-file-warning.js b/vendor/bootstrap/docs/assets/js/ie8-responsive-file-warning.js new file mode 100644 index 000000000..9e9bd587d --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/ie8-responsive-file-warning.js @@ -0,0 +1,13 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ +/*! + * Copyright 2011-2019 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */ +// Intended to prevent false-positive bug reports about responsive styling supposedly not working in IE8. +if (window.location.protocol == 'file:') { + window.alert('ERROR: Bootstrap\'s responsive CSS is disabled!\nSee getbootstrap.com/getting-started/#respond-file-proto for details.') +} diff --git a/vendor/bootstrap/docs/assets/js/raw-files.min.js b/vendor/bootstrap/docs/assets/js/raw-files.min.js new file mode 100644 index 000000000..54190d5e9 --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/raw-files.min.js @@ -0,0 +1,8 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under the MIT license + */ +var __js = {"affix.js":"/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // AFFIX CLASS DEFINITION\n // ======================\n\n var Affix = function (element, options) {\n this.options = $.extend({}, Affix.DEFAULTS, options)\n\n var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n this.$target = target\n .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))\n\n this.$element = $(element)\n this.affixed = null\n this.unpin = null\n this.pinnedOffset = null\n\n this.checkPosition()\n }\n\n Affix.VERSION = '3.4.1'\n\n Affix.RESET = 'affix affix-top affix-bottom'\n\n Affix.DEFAULTS = {\n offset: 0,\n target: window\n }\n\n Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n var targetHeight = this.$target.height()\n\n if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n if (this.affixed == 'bottom') {\n if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n }\n\n var initializing = this.affixed == null\n var colliderTop = initializing ? scrollTop : position.top\n var colliderHeight = initializing ? targetHeight : height\n\n if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n return false\n }\n\n Affix.prototype.getPinnedOffset = function () {\n if (this.pinnedOffset) return this.pinnedOffset\n this.$element.removeClass(Affix.RESET).addClass('affix')\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n return (this.pinnedOffset = position.top - scrollTop)\n }\n\n Affix.prototype.checkPositionWithEventLoop = function () {\n setTimeout($.proxy(this.checkPosition, this), 1)\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var height = this.$element.height()\n var offset = this.options.offset\n var offsetTop = offset.top\n var offsetBottom = offset.bottom\n var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n if (this.affixed != affix) {\n if (this.unpin != null) this.$element.css('top', '')\n\n var affixType = 'affix' + (affix ? '-' + affix : '')\n var e = $.Event(affixType + '.bs.affix')\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n this.$element\n .removeClass(Affix.RESET)\n .addClass(affixType)\n .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n }\n\n if (affix == 'bottom') {\n this.$element.offset({\n top: scrollHeight - height - offsetBottom\n })\n }\n }\n\n\n // AFFIX PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.affix')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.affix\n\n $.fn.affix = Plugin\n $.fn.affix.Constructor = Affix\n\n\n // AFFIX NO CONFLICT\n // =================\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n // AFFIX DATA-API\n // ==============\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n var data = $spy.data()\n\n data.offset = data.offset || {}\n\n if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n if (data.offsetTop != null) data.offset.top = data.offsetTop\n\n Plugin.call($spy, data)\n })\n })\n\n}(jQuery);\n","alert.js":"/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // ALERT CLASS DEFINITION\n // ======================\n\n var dismiss = '[data-dismiss=\"alert\"]'\n var Alert = function (el) {\n $(el).on('click', dismiss, this.close)\n }\n\n Alert.VERSION = '3.4.1'\n\n Alert.TRANSITION_DURATION = 150\n\n Alert.prototype.close = function (e) {\n var $this = $(this)\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n selector = selector === '#' ? [] : selector\n var $parent = $(document).find(selector)\n\n if (e) e.preventDefault()\n\n if (!$parent.length) {\n $parent = $this.closest('.alert')\n }\n\n $parent.trigger(e = $.Event('close.bs.alert'))\n\n if (e.isDefaultPrevented()) return\n\n $parent.removeClass('in')\n\n function removeElement() {\n // detach from parent, fire event then clean up data\n $parent.detach().trigger('closed.bs.alert').remove()\n }\n\n $.support.transition && $parent.hasClass('fade') ?\n $parent\n .one('bsTransitionEnd', removeElement)\n .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n removeElement()\n }\n\n\n // ALERT PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.alert')\n\n if (!data) $this.data('bs.alert', (data = new Alert(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.alert\n\n $.fn.alert = Plugin\n $.fn.alert.Constructor = Alert\n\n\n // ALERT NO CONFLICT\n // =================\n\n $.fn.alert.noConflict = function () {\n $.fn.alert = old\n return this\n }\n\n\n // ALERT DATA-API\n // ==============\n\n $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n","button.js":"/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // BUTTON PUBLIC CLASS DEFINITION\n // ==============================\n\n var Button = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Button.DEFAULTS, options)\n this.isLoading = false\n }\n\n Button.VERSION = '3.4.1'\n\n Button.DEFAULTS = {\n loadingText: 'loading...'\n }\n\n Button.prototype.setState = function (state) {\n var d = 'disabled'\n var $el = this.$element\n var val = $el.is('input') ? 'val' : 'html'\n var data = $el.data()\n\n state += 'Text'\n\n if (data.resetText == null) $el.data('resetText', $el[val]())\n\n // push to event loop to allow forms to submit\n setTimeout($.proxy(function () {\n $el[val](data[state] == null ? this.options[state] : data[state])\n\n if (state == 'loadingText') {\n this.isLoading = true\n $el.addClass(d).attr(d, d).prop(d, true)\n } else if (this.isLoading) {\n this.isLoading = false\n $el.removeClass(d).removeAttr(d).prop(d, false)\n }\n }, this), 0)\n }\n\n Button.prototype.toggle = function () {\n var changed = true\n var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n if ($parent.length) {\n var $input = this.$element.find('input')\n if ($input.prop('type') == 'radio') {\n if ($input.prop('checked')) changed = false\n $parent.find('.active').removeClass('active')\n this.$element.addClass('active')\n } else if ($input.prop('type') == 'checkbox') {\n if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n this.$element.toggleClass('active')\n }\n $input.prop('checked', this.$element.hasClass('active'))\n if (changed) $input.trigger('change')\n } else {\n this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n this.$element.toggleClass('active')\n }\n }\n\n\n // BUTTON PLUGIN DEFINITION\n // ========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.button')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n if (option == 'toggle') data.toggle()\n else if (option) data.setState(option)\n })\n }\n\n var old = $.fn.button\n\n $.fn.button = Plugin\n $.fn.button.Constructor = Button\n\n\n // BUTTON NO CONFLICT\n // ==================\n\n $.fn.button.noConflict = function () {\n $.fn.button = old\n return this\n }\n\n\n // BUTTON DATA-API\n // ===============\n\n $(document)\n .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n var $btn = $(e.target).closest('.btn')\n Plugin.call($btn, 'toggle')\n if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n e.preventDefault()\n // The target component still receive the focus\n if ($btn.is('input,button')) $btn.trigger('focus')\n else $btn.find('input:visible,button:visible').first().trigger('focus')\n }\n })\n .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n })\n\n}(jQuery);\n","carousel.js":"/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CAROUSEL CLASS DEFINITION\n // =========================\n\n var Carousel = function (element, options) {\n this.$element = $(element)\n this.$indicators = this.$element.find('.carousel-indicators')\n this.options = options\n this.paused = null\n this.sliding = null\n this.interval = null\n this.$active = null\n this.$items = null\n\n this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n }\n\n Carousel.VERSION = '3.4.1'\n\n Carousel.TRANSITION_DURATION = 600\n\n Carousel.DEFAULTS = {\n interval: 5000,\n pause: 'hover',\n wrap: true,\n keyboard: true\n }\n\n Carousel.prototype.keydown = function (e) {\n if (/input|textarea/i.test(e.target.tagName)) return\n switch (e.which) {\n case 37: this.prev(); break\n case 39: this.next(); break\n default: return\n }\n\n e.preventDefault()\n }\n\n Carousel.prototype.cycle = function (e) {\n e || (this.paused = false)\n\n this.interval && clearInterval(this.interval)\n\n this.options.interval\n && !this.paused\n && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n return this\n }\n\n Carousel.prototype.getItemIndex = function (item) {\n this.$items = item.parent().children('.item')\n return this.$items.index(item || this.$active)\n }\n\n Carousel.prototype.getItemForDirection = function (direction, active) {\n var activeIndex = this.getItemIndex(active)\n var willWrap = (direction == 'prev' && activeIndex === 0)\n || (direction == 'next' && activeIndex == (this.$items.length - 1))\n if (willWrap && !this.options.wrap) return active\n var delta = direction == 'prev' ? -1 : 1\n var itemIndex = (activeIndex + delta) % this.$items.length\n return this.$items.eq(itemIndex)\n }\n\n Carousel.prototype.to = function (pos) {\n var that = this\n var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n if (pos > (this.$items.length - 1) || pos < 0) return\n\n if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n if (activeIndex == pos) return this.pause().cycle()\n\n return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n }\n\n Carousel.prototype.pause = function (e) {\n e || (this.paused = true)\n\n if (this.$element.find('.next, .prev').length && $.support.transition) {\n this.$element.trigger($.support.transition.end)\n this.cycle(true)\n }\n\n this.interval = clearInterval(this.interval)\n\n return this\n }\n\n Carousel.prototype.next = function () {\n if (this.sliding) return\n return this.slide('next')\n }\n\n Carousel.prototype.prev = function () {\n if (this.sliding) return\n return this.slide('prev')\n }\n\n Carousel.prototype.slide = function (type, next) {\n var $active = this.$element.find('.item.active')\n var $next = next || this.getItemForDirection(type, $active)\n var isCycling = this.interval\n var direction = type == 'next' ? 'left' : 'right'\n var that = this\n\n if ($next.hasClass('active')) return (this.sliding = false)\n\n var relatedTarget = $next[0]\n var slideEvent = $.Event('slide.bs.carousel', {\n relatedTarget: relatedTarget,\n direction: direction\n })\n this.$element.trigger(slideEvent)\n if (slideEvent.isDefaultPrevented()) return\n\n this.sliding = true\n\n isCycling && this.pause()\n\n if (this.$indicators.length) {\n this.$indicators.find('.active').removeClass('active')\n var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n $nextIndicator && $nextIndicator.addClass('active')\n }\n\n var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n if ($.support.transition && this.$element.hasClass('slide')) {\n $next.addClass(type)\n if (typeof $next === 'object' && $next.length) {\n $next[0].offsetWidth // force reflow\n }\n $active.addClass(direction)\n $next.addClass(direction)\n $active\n .one('bsTransitionEnd', function () {\n $next.removeClass([type, direction].join(' ')).addClass('active')\n $active.removeClass(['active', direction].join(' '))\n that.sliding = false\n setTimeout(function () {\n that.$element.trigger(slidEvent)\n }, 0)\n })\n .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n } else {\n $active.removeClass('active')\n $next.addClass('active')\n this.sliding = false\n this.$element.trigger(slidEvent)\n }\n\n isCycling && this.cycle()\n\n return this\n }\n\n\n // CAROUSEL PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.carousel')\n var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n var action = typeof option == 'string' ? option : options.slide\n\n if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n if (typeof option == 'number') data.to(option)\n else if (action) data[action]()\n else if (options.interval) data.pause().cycle()\n })\n }\n\n var old = $.fn.carousel\n\n $.fn.carousel = Plugin\n $.fn.carousel.Constructor = Carousel\n\n\n // CAROUSEL NO CONFLICT\n // ====================\n\n $.fn.carousel.noConflict = function () {\n $.fn.carousel = old\n return this\n }\n\n\n // CAROUSEL DATA-API\n // =================\n\n var clickHandler = function (e) {\n var $this = $(this)\n var href = $this.attr('href')\n if (href) {\n href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n }\n\n var target = $this.attr('data-target') || href\n var $target = $(document).find(target)\n\n if (!$target.hasClass('carousel')) return\n\n var options = $.extend({}, $target.data(), $this.data())\n var slideIndex = $this.attr('data-slide-to')\n if (slideIndex) options.interval = false\n\n Plugin.call($target, options)\n\n if (slideIndex) {\n $target.data('bs.carousel').to(slideIndex)\n }\n\n e.preventDefault()\n }\n\n $(document)\n .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n $(window).on('load', function () {\n $('[data-ride=\"carousel\"]').each(function () {\n var $carousel = $(this)\n Plugin.call($carousel, $carousel.data())\n })\n })\n\n}(jQuery);\n","collapse.js":"/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n 'use strict';\n\n // COLLAPSE PUBLIC CLASS DEFINITION\n // ================================\n\n var Collapse = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Collapse.DEFAULTS, options)\n this.$trigger = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n this.transitioning = null\n\n if (this.options.parent) {\n this.$parent = this.getParent()\n } else {\n this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n }\n\n if (this.options.toggle) this.toggle()\n }\n\n Collapse.VERSION = '3.4.1'\n\n Collapse.TRANSITION_DURATION = 350\n\n Collapse.DEFAULTS = {\n toggle: true\n }\n\n Collapse.prototype.dimension = function () {\n var hasWidth = this.$element.hasClass('width')\n return hasWidth ? 'width' : 'height'\n }\n\n Collapse.prototype.show = function () {\n if (this.transitioning || this.$element.hasClass('in')) return\n\n var activesData\n var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n if (actives && actives.length) {\n activesData = actives.data('bs.collapse')\n if (activesData && activesData.transitioning) return\n }\n\n var startEvent = $.Event('show.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n if (actives && actives.length) {\n Plugin.call(actives, 'hide')\n activesData || actives.data('bs.collapse', null)\n }\n\n var dimension = this.dimension()\n\n this.$element\n .removeClass('collapse')\n .addClass('collapsing')[dimension](0)\n .attr('aria-expanded', true)\n\n this.$trigger\n .removeClass('collapsed')\n .attr('aria-expanded', true)\n\n this.transitioning = 1\n\n var complete = function () {\n this.$element\n .removeClass('collapsing')\n .addClass('collapse in')[dimension]('')\n this.transitioning = 0\n this.$element\n .trigger('shown.bs.collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n this.$element\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n }\n\n Collapse.prototype.hide = function () {\n if (this.transitioning || !this.$element.hasClass('in')) return\n\n var startEvent = $.Event('hide.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n var dimension = this.dimension()\n\n this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n this.$element\n .addClass('collapsing')\n .removeClass('collapse in')\n .attr('aria-expanded', false)\n\n this.$trigger\n .addClass('collapsed')\n .attr('aria-expanded', false)\n\n this.transitioning = 1\n\n var complete = function () {\n this.transitioning = 0\n this.$element\n .removeClass('collapsing')\n .addClass('collapse')\n .trigger('hidden.bs.collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n this.$element\n [dimension](0)\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n }\n\n Collapse.prototype.toggle = function () {\n this[this.$element.hasClass('in') ? 'hide' : 'show']()\n }\n\n Collapse.prototype.getParent = function () {\n return $(document).find(this.options.parent)\n .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n .each($.proxy(function (i, element) {\n var $element = $(element)\n this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n }, this))\n .end()\n }\n\n Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n var isOpen = $element.hasClass('in')\n\n $element.attr('aria-expanded', isOpen)\n $trigger\n .toggleClass('collapsed', !isOpen)\n .attr('aria-expanded', isOpen)\n }\n\n function getTargetFromTrigger($trigger) {\n var href\n var target = $trigger.attr('data-target')\n || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n return $(document).find(target)\n }\n\n\n // COLLAPSE PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.collapse')\n var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.collapse\n\n $.fn.collapse = Plugin\n $.fn.collapse.Constructor = Collapse\n\n\n // COLLAPSE NO CONFLICT\n // ====================\n\n $.fn.collapse.noConflict = function () {\n $.fn.collapse = old\n return this\n }\n\n\n // COLLAPSE DATA-API\n // =================\n\n $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n var $this = $(this)\n\n if (!$this.attr('data-target')) e.preventDefault()\n\n var $target = getTargetFromTrigger($this)\n var data = $target.data('bs.collapse')\n var option = data ? 'toggle' : $this.data()\n\n Plugin.call($target, option)\n })\n\n}(jQuery);\n","dropdown.js":"/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=\"dropdown\"]'\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.VERSION = '3.4.1'\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = selector !== '#' ? $(document).find(selector) : null\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return\n $(backdrop).remove()\n $(toggle).each(function () {\n var $this = $(this)\n var $parent = getParent($this)\n var relatedTarget = { relatedTarget: this }\n\n if (!$parent.hasClass('open')) return\n\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this.attr('aria-expanded', 'false')\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n })\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown-backdrop')\n .insertAfter($(this))\n .on('click', clearMenus)\n }\n\n var relatedTarget = { relatedTarget: this }\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true')\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus')\n return $this.trigger('click')\n }\n\n var desc = ' li:not(.disabled):visible a'\n var $items = $parent.find('.dropdown-menu' + desc)\n\n if (!$items.length) return\n\n var index = $items.index(e.target)\n\n if (e.which == 38 && index > 0) index-- // up\n if (e.which == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items.eq(index).trigger('focus')\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.dropdown')\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = Plugin\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","modal.js":"/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // MODAL CLASS DEFINITION\n // ======================\n\n var Modal = function (element, options) {\n this.options = options\n this.$body = $(document.body)\n this.$element = $(element)\n this.$dialog = this.$element.find('.modal-dialog')\n this.$backdrop = null\n this.isShown = null\n this.originalBodyPad = null\n this.scrollbarWidth = 0\n this.ignoreBackdropClick = false\n this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n if (this.options.remote) {\n this.$element\n .find('.modal-content')\n .load(this.options.remote, $.proxy(function () {\n this.$element.trigger('loaded.bs.modal')\n }, this))\n }\n }\n\n Modal.VERSION = '3.4.1'\n\n Modal.TRANSITION_DURATION = 300\n Modal.BACKDROP_TRANSITION_DURATION = 150\n\n Modal.DEFAULTS = {\n backdrop: true,\n keyboard: true,\n show: true\n }\n\n Modal.prototype.toggle = function (_relatedTarget) {\n return this.isShown ? this.hide() : this.show(_relatedTarget)\n }\n\n Modal.prototype.show = function (_relatedTarget) {\n var that = this\n var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.checkScrollbar()\n this.setScrollbar()\n this.$body.addClass('modal-open')\n\n this.escape()\n this.resize()\n\n this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n })\n })\n\n this.backdrop(function () {\n var transition = $.support.transition && that.$element.hasClass('fade')\n\n if (!that.$element.parent().length) {\n that.$element.appendTo(that.$body) // don't move modals dom position\n }\n\n that.$element\n .show()\n .scrollTop(0)\n\n that.adjustDialog()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element.addClass('in')\n\n that.enforceFocus()\n\n var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n transition ?\n that.$dialog // wait for modal to slide in\n .one('bsTransitionEnd', function () {\n that.$element.trigger('focus').trigger(e)\n })\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n that.$element.trigger('focus').trigger(e)\n })\n }\n\n Modal.prototype.hide = function (e) {\n if (e) e.preventDefault()\n\n e = $.Event('hide.bs.modal')\n\n this.$element.trigger(e)\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n this.resize()\n\n $(document).off('focusin.bs.modal')\n\n this.$element\n .removeClass('in')\n .off('click.dismiss.bs.modal')\n .off('mouseup.dismiss.bs.modal')\n\n this.$dialog.off('mousedown.dismiss.bs.modal')\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.$element\n .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n this.hideModal()\n }\n\n Modal.prototype.enforceFocus = function () {\n $(document)\n .off('focusin.bs.modal') // guard against infinite focus loop\n .on('focusin.bs.modal', $.proxy(function (e) {\n if (document !== e.target &&\n this.$element[0] !== e.target &&\n !this.$element.has(e.target).length) {\n this.$element.trigger('focus')\n }\n }, this))\n }\n\n Modal.prototype.escape = function () {\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n e.which == 27 && this.hide()\n }, this))\n } else if (!this.isShown) {\n this.$element.off('keydown.dismiss.bs.modal')\n }\n }\n\n Modal.prototype.resize = function () {\n if (this.isShown) {\n $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n } else {\n $(window).off('resize.bs.modal')\n }\n }\n\n Modal.prototype.hideModal = function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.$body.removeClass('modal-open')\n that.resetAdjustments()\n that.resetScrollbar()\n that.$element.trigger('hidden.bs.modal')\n })\n }\n\n Modal.prototype.removeBackdrop = function () {\n this.$backdrop && this.$backdrop.remove()\n this.$backdrop = null\n }\n\n Modal.prototype.backdrop = function (callback) {\n var that = this\n var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n if (this.isShown && this.options.backdrop) {\n var doAnimate = $.support.transition && animate\n\n this.$backdrop = $(document.createElement('div'))\n .addClass('modal-backdrop ' + animate)\n .appendTo(this.$body)\n\n this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n if (this.ignoreBackdropClick) {\n this.ignoreBackdropClick = false\n return\n }\n if (e.target !== e.currentTarget) return\n this.options.backdrop == 'static'\n ? this.$element[0].focus()\n : this.hide()\n }, this))\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n if (!callback) return\n\n doAnimate ?\n this.$backdrop\n .one('bsTransitionEnd', callback)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n var callbackRemove = function () {\n that.removeBackdrop()\n callback && callback()\n }\n $.support.transition && this.$element.hasClass('fade') ?\n this.$backdrop\n .one('bsTransitionEnd', callbackRemove)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callbackRemove()\n\n } else if (callback) {\n callback()\n }\n }\n\n // these following methods are used to handle overflowing modals\n\n Modal.prototype.handleUpdate = function () {\n this.adjustDialog()\n }\n\n Modal.prototype.adjustDialog = function () {\n var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n this.$element.css({\n paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n })\n }\n\n Modal.prototype.resetAdjustments = function () {\n this.$element.css({\n paddingLeft: '',\n paddingRight: ''\n })\n }\n\n Modal.prototype.checkScrollbar = function () {\n var fullWindowWidth = window.innerWidth\n if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n var documentElementRect = document.documentElement.getBoundingClientRect()\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n }\n this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n this.scrollbarWidth = this.measureScrollbar()\n }\n\n Modal.prototype.setScrollbar = function () {\n var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n this.originalBodyPad = document.body.style.paddingRight || ''\n var scrollbarWidth = this.scrollbarWidth\n if (this.bodyIsOverflowing) {\n this.$body.css('padding-right', bodyPad + scrollbarWidth)\n $(this.fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight\n var calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n })\n }\n }\n\n Modal.prototype.resetScrollbar = function () {\n this.$body.css('padding-right', this.originalBodyPad)\n $(this.fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n }\n\n Modal.prototype.measureScrollbar = function () { // thx walsh\n var scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.$body.append(scrollDiv)\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n this.$body[0].removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n\n // MODAL PLUGIN DEFINITION\n // =======================\n\n function Plugin(option, _relatedTarget) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.modal')\n var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n if (typeof option == 'string') data[option](_relatedTarget)\n else if (options.show) data.show(_relatedTarget)\n })\n }\n\n var old = $.fn.modal\n\n $.fn.modal = Plugin\n $.fn.modal.Constructor = Modal\n\n\n // MODAL NO CONFLICT\n // =================\n\n $.fn.modal.noConflict = function () {\n $.fn.modal = old\n return this\n }\n\n\n // MODAL DATA-API\n // ==============\n\n $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n var $this = $(this)\n var href = $this.attr('href')\n var target = $this.attr('data-target') ||\n (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n var $target = $(document).find(target)\n var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n if ($this.is('a')) e.preventDefault()\n\n $target.one('show.bs.modal', function (showEvent) {\n if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n $target.one('hidden.bs.modal', function () {\n $this.is(':visible') && $this.trigger('focus')\n })\n })\n Plugin.call($target, option, this)\n })\n\n}(jQuery);\n","popover.js":"/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.4.1'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '

    '\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n if (this.options.html) {\n var typeContent = typeof content\n\n if (this.options.sanitize) {\n title = this.sanitizeHtml(title)\n\n if (typeContent === 'string') {\n content = this.sanitizeHtml(content)\n }\n }\n\n $tip.find('.popover-title').html(title)\n $tip.find('.popover-content').children().detach().end()[\n typeContent === 'string' ? 'html' : 'append'\n ](content)\n } else {\n $tip.find('.popover-title').text(title)\n $tip.find('.popover-content').children().detach().end().text(content)\n }\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n}(jQuery);\n","scrollspy.js":"/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // SCROLLSPY CLASS DEFINITION\n // ==========================\n\n function ScrollSpy(element, options) {\n this.$body = $(document.body)\n this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n this.options = $.extend({}, ScrollSpy.DEFAULTS, options)\n this.selector = (this.options.target || '') + ' .nav li > a'\n this.offsets = []\n this.targets = []\n this.activeTarget = null\n this.scrollHeight = 0\n\n this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n this.refresh()\n this.process()\n }\n\n ScrollSpy.VERSION = '3.4.1'\n\n ScrollSpy.DEFAULTS = {\n offset: 10\n }\n\n ScrollSpy.prototype.getScrollHeight = function () {\n return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n }\n\n ScrollSpy.prototype.refresh = function () {\n var that = this\n var offsetMethod = 'offset'\n var offsetBase = 0\n\n this.offsets = []\n this.targets = []\n this.scrollHeight = this.getScrollHeight()\n\n if (!$.isWindow(this.$scrollElement[0])) {\n offsetMethod = 'position'\n offsetBase = this.$scrollElement.scrollTop()\n }\n\n this.$body\n .find(this.selector)\n .map(function () {\n var $el = $(this)\n var href = $el.data('target') || $el.attr('href')\n var $href = /^#./.test(href) && $(href)\n\n return ($href\n && $href.length\n && $href.is(':visible')\n && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n })\n .sort(function (a, b) { return a[0] - b[0] })\n .each(function () {\n that.offsets.push(this[0])\n that.targets.push(this[1])\n })\n }\n\n ScrollSpy.prototype.process = function () {\n var scrollTop = this.$scrollElement.scrollTop() + this.options.offset\n var scrollHeight = this.getScrollHeight()\n var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()\n var offsets = this.offsets\n var targets = this.targets\n var activeTarget = this.activeTarget\n var i\n\n if (this.scrollHeight != scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n }\n\n if (activeTarget && scrollTop < offsets[0]) {\n this.activeTarget = null\n return this.clear()\n }\n\n for (i = offsets.length; i--;) {\n activeTarget != targets[i]\n && scrollTop >= offsets[i]\n && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n && this.activate(targets[i])\n }\n }\n\n ScrollSpy.prototype.activate = function (target) {\n this.activeTarget = target\n\n this.clear()\n\n var selector = this.selector +\n '[data-target=\"' + target + '\"],' +\n this.selector + '[href=\"' + target + '\"]'\n\n var active = $(selector)\n .parents('li')\n .addClass('active')\n\n if (active.parent('.dropdown-menu').length) {\n active = active\n .closest('li.dropdown')\n .addClass('active')\n }\n\n active.trigger('activate.bs.scrollspy')\n }\n\n ScrollSpy.prototype.clear = function () {\n $(this.selector)\n .parentsUntil(this.options.target, '.active')\n .removeClass('active')\n }\n\n\n // SCROLLSPY PLUGIN DEFINITION\n // ===========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.scrollspy')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.scrollspy\n\n $.fn.scrollspy = Plugin\n $.fn.scrollspy.Constructor = ScrollSpy\n\n\n // SCROLLSPY NO CONFLICT\n // =====================\n\n $.fn.scrollspy.noConflict = function () {\n $.fn.scrollspy = old\n return this\n }\n\n\n // SCROLLSPY DATA-API\n // ==================\n\n $(window).on('load.bs.scrollspy.data-api', function () {\n $('[data-spy=\"scroll\"]').each(function () {\n var $spy = $(this)\n Plugin.call($spy, $spy.data())\n })\n })\n\n}(jQuery);\n","tab.js":"/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // TAB CLASS DEFINITION\n // ====================\n\n var Tab = function (element) {\n // jscs:disable requireDollarBeforejQueryAssignment\n this.element = $(element)\n // jscs:enable requireDollarBeforejQueryAssignment\n }\n\n Tab.VERSION = '3.4.1'\n\n Tab.TRANSITION_DURATION = 150\n\n Tab.prototype.show = function () {\n var $this = this.element\n var $ul = $this.closest('ul:not(.dropdown-menu)')\n var selector = $this.data('target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n if ($this.parent('li').hasClass('active')) return\n\n var $previous = $ul.find('.active:last a')\n var hideEvent = $.Event('hide.bs.tab', {\n relatedTarget: $this[0]\n })\n var showEvent = $.Event('show.bs.tab', {\n relatedTarget: $previous[0]\n })\n\n $previous.trigger(hideEvent)\n $this.trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n var $target = $(document).find(selector)\n\n this.activate($this.closest('li'), $ul)\n this.activate($target, $target.parent(), function () {\n $previous.trigger({\n type: 'hidden.bs.tab',\n relatedTarget: $this[0]\n })\n $this.trigger({\n type: 'shown.bs.tab',\n relatedTarget: $previous[0]\n })\n })\n }\n\n Tab.prototype.activate = function (element, container, callback) {\n var $active = container.find('> .active')\n var transition = callback\n && $.support.transition\n && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n function next() {\n $active\n .removeClass('active')\n .find('> .dropdown-menu > .active')\n .removeClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', false)\n\n element\n .addClass('active')\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n\n if (transition) {\n element[0].offsetWidth // reflow for transition\n element.addClass('in')\n } else {\n element.removeClass('fade')\n }\n\n if (element.parent('.dropdown-menu').length) {\n element\n .closest('li.dropdown')\n .addClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n }\n\n callback && callback()\n }\n\n $active.length && transition ?\n $active\n .one('bsTransitionEnd', next)\n .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n next()\n\n $active.removeClass('in')\n }\n\n\n // TAB PLUGIN DEFINITION\n // =====================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tab')\n\n if (!data) $this.data('bs.tab', (data = new Tab(this)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tab\n\n $.fn.tab = Plugin\n $.fn.tab.Constructor = Tab\n\n\n // TAB NO CONFLICT\n // ===============\n\n $.fn.tab.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n\n // TAB DATA-API\n // ============\n\n var clickHandler = function (e) {\n e.preventDefault()\n Plugin.call($(this), 'show')\n }\n\n $(document)\n .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n","tooltip.js":"/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n 'use strict';\n\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n var uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n ]\n\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n }\n\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase()\n\n if ($.inArray(attrName, allowedAttributeList) !== -1) {\n if ($.inArray(attrName, uriAttrs) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n var regExp = $(allowedAttributeList).filter(function (index, value) {\n return value instanceof RegExp\n })\n\n // Check if a regular expression validates the attribute.\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n // IE 8 and below don't support createHTMLDocument\n if (!document.implementation || !document.implementation.createHTMLDocument) {\n return unsafeHtml\n }\n\n var createdDocument = document.implementation.createHTMLDocument('sanitization')\n createdDocument.body.innerHTML = unsafeHtml\n\n var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n var elements = $(createdDocument.body).find('*')\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var el = elements[i]\n var elName = el.nodeName.toLowerCase()\n\n if ($.inArray(elName, whitelistKeys) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n var attributeList = $.map(el.attributes, function (el) { return el })\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n el.removeAttribute(attributeList[j].nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n }\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.4.1'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '
    ',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n },\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n var dataAttributes = this.$element.data()\n\n for (var dataAttr in dataAttributes) {\n if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n delete dataAttributes[dataAttr]\n }\n }\n\n options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n if (options.sanitize) {\n options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n if (this.options.html) {\n if (this.options.sanitize) {\n title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n }\n\n $tip.find('.tooltip-inner').html(title)\n } else {\n $tip.find('.tooltip-inner').text(title)\n }\n\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n }\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var isSvg = window.SVGElement && el instanceof window.SVGElement\n // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n // See https://github.com/twbs/bootstrap/issues/20280\n var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n that.$element = null\n })\n }\n\n Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n }\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n","transition.js":"/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n // https://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n\n if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n"} +var __less = {"alerts.less":"//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n color: inherit; // Specified for the h4 to prevent conflicts of changing @headings-color\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n// The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissable,\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","badges.less":"//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n line-height: @badge-line-height;\n color: @badge-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","bootstrap.less":"/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n// Core variables and mixins\n@import \"variables.less\";\n@import \"mixins.less\";\n\n// Reset and dependencies\n@import \"normalize.less\";\n@import \"print.less\";\n@import \"glyphicons.less\";\n\n// Core CSS\n@import \"scaffolding.less\";\n@import \"type.less\";\n@import \"code.less\";\n@import \"grid.less\";\n@import \"tables.less\";\n@import \"forms.less\";\n@import \"buttons.less\";\n\n// Components\n@import \"component-animations.less\";\n@import \"dropdowns.less\";\n@import \"button-groups.less\";\n@import \"input-groups.less\";\n@import \"navs.less\";\n@import \"navbar.less\";\n@import \"breadcrumbs.less\";\n@import \"pagination.less\";\n@import \"pager.less\";\n@import \"labels.less\";\n@import \"badges.less\";\n@import \"jumbotron.less\";\n@import \"thumbnails.less\";\n@import \"alerts.less\";\n@import \"progress-bars.less\";\n@import \"media.less\";\n@import \"list-group.less\";\n@import \"panels.less\";\n@import \"responsive-embed.less\";\n@import \"wells.less\";\n@import \"close.less\";\n\n// Components w/ JavaScript\n@import \"modals.less\";\n@import \"tooltip.less\";\n@import \"popovers.less\";\n@import \"carousel.less\";\n\n// Utility classes\n@import \"utilities.less\";\n@import \"responsive-utilities.less\";\n","breadcrumbs.less":"//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n padding: 0 5px;\n color: @breadcrumb-color;\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","button-groups.less":"// stylelint-disable selector-no-qualifying-type */\n\n//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n }\n}\n","buttons.less":"// stylelint-disable selector-no-qualifying-type\n\n//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n background-image: none;\n outline: 0;\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: 400;\n color: @link-color;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","carousel.less":"// stylelint-disable media-feature-name-no-unknown\n\n//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n\n > .item {\n position: relative;\n display: none;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~\"0.6s ease-in-out\");\n .backface-visibility(~\"hidden\");\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: @carousel-control-width;\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n .opacity(@carousel-control-opacity);\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0, 0, 0, .5); @end-color: rgba(0, 0, 0, .0001));\n }\n &.right {\n right: 0;\n left: auto;\n #gradient > .horizontal(@start-color: rgba(0, 0, 0, .0001); @end-color: rgba(0, 0, 0, .5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: @carousel-control-color;\n text-decoration: none;\n outline: 0;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n }\n\n .icon-prev {\n &:before {\n content: \"\\2039\";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: \"\\203a\";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0, 0, 0, 0); // IE9\n\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n }\n\n .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: (@carousel-control-font-size * 1.5);\n height: (@carousel-control-font-size * 1.5);\n margin-top: (@carousel-control-font-size / -2);\n font-size: (@carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: (@carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: (@carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","close.less":"// stylelint-disable property-no-vendor-prefix\n\n//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n }\n}\n","code.less":"//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n color: @pre-color;\n word-break: break-all;\n word-wrap: break-word;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","component-animations.less":"// stylelint-disable selector-no-qualifying-type\n\n//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","dropdowns.less":"//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: @dropdown-bg;\n background-clip: padding-box;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0, 0, 0, .175));\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n\n &:hover,\n &:focus {\n color: @dropdown-link-hover-color;\n text-decoration: none;\n background-color: @dropdown-link-hover-bg;\n }\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n background-color: @dropdown-link-active-bg;\n outline: 0;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n cursor: @cursor-disabled;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n right: 0;\n left: auto; // Reset the default from `.dropdown-menu`\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n content: \"\";\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","forms.less":"// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix\n\n//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: 700;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\ninput[type=\"search\"] {\n // Override content-box in Normalize (* isn't specific enough)\n .box-sizing(border-box);\n\n // Search inputs in iOS\n //\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n -webkit-appearance: none;\n appearance: none;\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n\n // Apply same disabled cursor tweak as for inputs\n // Some special care is needed because
    `.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * .85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * .85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//== Iconography\n//\n//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n//** Load fonts from this directory.\n@icon-font-path:          \"../fonts/\";\n//** File name for all font files.\n@icon-font-name:          \"glyphicons-halflings-regular\";\n//** Element ID within SVG icon file.\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicate dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n// Allows for customizing button radius independently from global border radius\n@btn-border-radius-base:         @border-radius-base;\n@btn-border-radius-large:        @border-radius-large;\n@btn-border-radius-small:        @border-radius-small;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n\n// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4\n//** Default `.form-control` border radius\n// This has no effect on ``s in CSS.\n@input-border-radius:            @border-radius-base;\n//** Large `.form-control` border radius\n@input-border-radius-large:      @border-radius-large;\n//** Small `.form-control` border radius\n@input-border-radius-small:      @border-radius-small;\n\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        #999;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n//** `.form-group` margin\n@form-group-margin-bottom:       15px;\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n//** Disabled cursor for form controls and buttons.\n@cursor-disabled:                not-allowed;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0, 0, 0, .15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n//** Deprecated `@dropdown-caret-color` as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1060;\n@zindex-tooltip:           1070;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n//** Deprecated `@screen-xs` as of v3.0.1\n@screen-xs:                  480px;\n//** Deprecated `@screen-xs-min` as of v3.2.0\n@screen-xs-min:              @screen-xs;\n//** Deprecated `@screen-phone` as of v3.0.1\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n//** Deprecated `@screen-sm` as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n//** Deprecated `@screen-tablet` as of v3.0.1\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n//** Deprecated `@screen-md` as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n//** Deprecated `@screen-desktop` as of v3.0.1\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n//** Deprecated `@screen-lg` as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n//** Deprecated `@screen-lg-desktop` as of v3.0.1\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             (720px + @grid-gutter-width);\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            (940px + @grid-gutter-width);\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      (1140px + @grid-gutter-width);\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n//=== Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      lighten(@gray-light, 15%);\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 lighten(@gray-light, 15%);\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n@jumbotron-heading-font-size:    ceil((@font-size-base * 4.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0, 0, 0, .2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 @popover-bg;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         15px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0, 0, 0, .2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n//** Variable for setting rounded corners on progress bar.\n@progress-border-radius:      @border-radius-base;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list items on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list items\n@list-group-active-color:       @component-active-color;\n//** Background color of active list items\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n//** Text color for content within active list items\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n//** Text color of disabled list items\n@list-group-disabled-color:      @gray-light;\n//** Background color of disabled list items\n@list-group-disabled-bg:         @gray-lighter;\n//** Text color for content within disabled list items\n@list-group-disabled-text-color: @list-group-disabled-color;\n\n@list-group-link-color:         #555;\n@list-group-link-hover-color:   @list-group-link-color;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-heading-padding:       10px 15px;\n@panel-footer-padding:        @panel-heading-padding;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0, 0, 0, .6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n//** Width of horizontal description list titles\n@dl-horizontal-offset:        @component-offset-horizontal;\n//** Point at which .dl-horizontal becomes horizontal\n@dl-horizontal-breakpoint:    @grid-float-breakpoint;\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n","wells.less":"//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid @well-border;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0, 0, 0, .15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n"}
    +var __fonts = {"glyphicons-halflings-regular.eot":"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","glyphicons-halflings-regular.svg":"PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+PC9tZXRhZGF0YT4KPGRlZnM+Cjxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMjAwIiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTI0MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KPGdseXBoIGhvcml6LWFkdi14PSIwIiAvPgo8Z2x5cGggaG9yaXotYWR2LXg9IjQwMCIgLz4KPGdseXBoIHVuaWNvZGU9IiAiIC8+CjxnbHlwaCB1bmljb2RlPSIqIiBkPSJNNjAwIDExMDBxMTUgMCAzNCAtMS41dDMwIC0zLjVsMTEgLTFxMTAgLTIgMTcuNSAtMTAuNXQ3LjUgLTE4LjV2LTIyNGwxNTggMTU4cTcgNyAxOCA4dDE5IC02bDEwNiAtMTA2cTcgLTggNiAtMTl0LTggLTE4bC0xNTggLTE1OGgyMjRxMTAgMCAxOC41IC03LjV0MTAuNSAtMTcuNXE2IC00MSA2IC03NXEwIC0xNSAtMS41IC0zNHQtMy41IC0zMGwtMSAtMTFxLTIgLTEwIC0xMC41IC0xNy41dC0xOC41IC03LjVoLTIyNGwxNTggLTE1OCBxNyAtNyA4IC0xOHQtNiAtMTlsLTEwNiAtMTA2cS04IC03IC0xOSAtNnQtMTggOGwtMTU4IDE1OHYtMjI0cTAgLTEwIC03LjUgLTE4LjV0LTE3LjUgLTEwLjVxLTQxIC02IC03NSAtNnEtMTUgMCAtMzQgMS41dC0zMCAzLjVsLTExIDFxLTEwIDIgLTE3LjUgMTAuNXQtNy41IDE4LjV2MjI0bC0xNTggLTE1OHEtNyAtNyAtMTggLTh0LTE5IDZsLTEwNiAxMDZxLTcgOCAtNiAxOXQ4IDE4bDE1OCAxNThoLTIyNHEtMTAgMCAtMTguNSA3LjUgdC0xMC41IDE3LjVxLTYgNDEgLTYgNzVxMCAxNSAxLjUgMzR0My41IDMwbDEgMTFxMiAxMCAxMC41IDE3LjV0MTguNSA3LjVoMjI0bC0xNTggMTU4cS03IDcgLTggMTh0NiAxOWwxMDYgMTA2cTggNyAxOSA2dDE4IC04bDE1OCAtMTU4djIyNHEwIDEwIDcuNSAxOC41dDE3LjUgMTAuNXE0MSA2IDc1IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzUwaDM1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zNTB2LTM1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzNTBoLTM1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNSBoMzUwdjM1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTA7IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTU7IiBkPSJNODI1IDExMDBoMjUwcTEwIDAgMTIuNSAtNXQtNS41IC0xM2wtMzY0IC0zNjRxLTYgLTYgLTExIC0xOGgyNjhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTEwMGgyNzVxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTE3NHEwIC0xMSAtNy41IC0xOC41dC0xOC41IC03LjVoLTE0OHEtMTEgMCAtMTguNSA3LjV0LTcuNSAxOC41djE3NCBoLTI3NXEtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTI1djEwMGgtMjc1cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMThxLTUgMTIgLTExIDE4bC0zNjQgMzY0cS04IDggLTUuNSAxM3QxMi41IDVoMjUwcTI1IDAgNDMgLTE4bDE2NCAtMTY0cTggLTggMTggLTh0MTggOGwxNjQgMTY0cTE4IDE4IDQzIDE4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNjUwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzAwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgaG9yaXotYWR2LXg9IjEzMDAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzMyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI1IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwNjsiIGhvcml6LWFkdi14PSIyMTYiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwOTsiIGhvcml6LWFkdi14PSIyNjAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDVmOyIgaG9yaXotYWR2LXg9IjMyNSIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNNzQ0IDExOThxMjQyIDAgMzU0IC0xODlxNjAgLTEwNCA2NiAtMjA5aC0xODFxMCA0NSAtMTcuNSA4Mi41dC00My41IDYxLjV0LTU4IDQwLjV0LTYwLjUgMjR0LTUxLjUgNy41cS0xOSAwIC00MC41IC01LjV0LTQ5LjUgLTIwLjV0LTUzIC0zOHQtNDkgLTYyLjV0LTM5IC04OS41aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNTAgLTYgLTEwMGg0MDZsLTEwMCAtMTAwaC0zMDBxOSAtNzQgMzMgLTEzMnQ1Mi41IC05MXQ2MS41IC01NC41dDU5IC0yOSB0NDcgLTcuNXEyMiAwIDUwLjUgNy41dDYwLjUgMjQuNXQ1OCA0MXQ0My41IDYxdDE3LjUgODBoMTc0cS0zMCAtMTcxIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDYgMCAtMzI0IDE1OHEtMzYgNDggLTY5IDEzM3QtNDUgMjA0aC0yMTdsMTAwIDEwMGgxMTJxMSA0NyA2IDEwMGgtMjE4bDEwMCAxMDBoMTM0cTIwIDg3IDUxIDE1My41dDYyIDEwMy41cTExNyAxNDEgMjk3IDE0MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMGJkOyIgZD0iTTQyOCAxMjAwaDM1MHE2NyAwIDEyMCAtMTN0ODYgLTMxdDU3IC00OS41dDM1IC01Ni41dDE3IC02NC41dDYuNSAtNjAuNXQwLjUgLTU3di0xNi41di0xNi41cTAgLTM2IC0wLjUgLTU3dC02LjUgLTYxdC0xNyAtNjV0LTM1IC01N3QtNTcgLTUwLjV0LTg2IC0zMS41dC0xMjAgLTEzaC0xNzhsLTIgLTEwMGgyODhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMzh2LTE3NXEwIC0xMSAtNS41IC0xOCB0LTE1LjUgLTdoLTE0OXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE3NWgtMjY3cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMTd2MTAwaC0yNjdxLTEwIDAgLTEzIDZ0MyAxNGwxMjAgMTYwcTYgOCAxOCAxNHQyMiA2aDExN3Y0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNjAwIDEwMDB2LTMwMGgyMDNxNjQgMCA4Ni41IDMzdDIyLjUgMTE5cTAgODQgLTIyLjUgMTE2dC04Ni41IDMyaC0yMDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yNTAgNzAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjMxYjsiIGQ9Ik0xMDAwIDEyMDB2LTE1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTEwMHEwIC05MSAtNDkuNSAtMTY1LjV0LTEzMC41IC0xMDkuNXE4MSAtMzUgMTMwLjUgLTEwOS41dDQ5LjUgLTE2NS41di0xNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtODAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MTUwcTAgOTEgNDkuNSAxNjUuNXQxMzAuNSAxMDkuNXEtODEgMzUgLTEzMC41IDEwOS41IHQtNDkuNSAxNjUuNXYxMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxNTBoODAwek00MDAgMTAwMHYtMTAwcTAgLTYwIDMyLjUgLTEwOS41dDg3LjUgLTczLjVxMjggLTEyIDQ0IC0zN3QxNiAtNTV0LTE2IC01NXQtNDQgLTM3cS01NSAtMjQgLTg3LjUgLTczLjV0LTMyLjUgLTEwOS41di0xNTBoNDAwdjE1MHEwIDYwIC0zMi41IDEwOS41dC04Ny41IDczLjVxLTI4IDEyIC00NCAzN3QtMTYgNTV0MTYgNTV0NDQgMzcgcTU1IDI0IDg3LjUgNzMuNXQzMi41IDEwOS41djEwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI1ZmM7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA2LjVxMCAtMTIxIC04NSAtMjA3LjV0LTIwNSAtODYuNWgtNzUwcS03OSAwIC0xMzUuNSA1N3QtNTYuNSAxMzdxMCA2OSA0Mi41IDEyMi41dDEwOC41IDY3LjVxLTIgMTIgLTIgMzdxMCAxNTMgMTA4IDI2MC41dDI2MCAxMDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyNmZhOyIgZD0iTTc3NCAxMTkzLjVxMTYgLTkuNSAyMC41IC0yN3QtNS41IC0zMy41bC0xMzYgLTE4N2w0NjcgLTc0NmgzMHEyMCAwIDM1IC0xOC41dDE1IC0zOS41di00MmgtMTIwMHY0MnEwIDIxIDE1IDM5LjV0MzUgMTguNWgzMGw0NjggNzQ2bC0xMzUgMTgzcS0xMCAxNiAtNS41IDM0dDIwLjUgMjh0MzQgNS41dDI4IC0yMC41bDExMSAtMTQ4bDExMiAxNTBxOSAxNiAyNyAyMC41dDM0IC01ek02MDAgMjAwaDM3N2wtMTgyIDExMmwtMTk1IDUzNHYtNjQ2eiAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTI1IDExMDBoMTE1MHExMCAwIDEyLjUgLTV0LTUuNSAtMTNsLTU2NCAtNTY3cS04IC04IC0xOCAtOHQtMTggOGwtNTY0IDU2N3EtOCA4IC01LjUgMTN0MTIuNSA1ek0xOCA4ODJsMjY0IC0yNjRxOCAtOCA4IC0xOHQtOCAtMThsLTI2NCAtMjY0cS04IC04IC0xMyAtNS41dC01IDEyLjV2NTUwcTAgMTAgNSAxMi41dDEzIC01LjV6TTkxOCA2MThsMjY0IDI2NHE4IDggMTMgNS41dDUgLTEyLjV2LTU1MHEwIC0xMCAtNSAtMTIuNXQtMTMgNS41IGwtMjY0IDI2NHEtOCA4IC04IDE4dDggMTh6TTgxOCA0ODJsMzY0IC0zNjRxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xMTUwcS0xMCAwIC0xMi41IDV0NS41IDEzbDM2NCAzNjRxOCA4IDE4IDh0MTggLThsMTY0IC0xNjRxOCAtOCAxOCAtOHQxOCA4bDE2NCAxNjRxOCA4IDE4IDh0MTggLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0xMDExIDEyMTBxMTkgMCAzMyAtMTNsMTUzIC0xNTNxMTMgLTE0IDEzIC0zM3QtMTMgLTMzbC05OSAtOTJsLTIxNCAyMTRsOTUgOTZxMTMgMTQgMzIgMTR6TTEwMTMgODAwbC02MTUgLTYxNGwtMjE0IDIxNGw2MTQgNjE0ek0zMTcgOTZsLTMzMyAtMTEybDExMCAzMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik03MDAgNjUwdi01NTBoMjUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtODAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2NTUwbC01MDAgNTUwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMjsiIGQ9Ik0zNjggMTAxN2w2NDUgMTYzcTM5IDE1IDYzIDB0MjQgLTQ5di04MzFxMCAtNTUgLTQxLjUgLTk1LjV0LTExMS41IC02My41cS03OSAtMjUgLTE0NyAtNC41dC04NiA3NXQyNS41IDExMS41dDEyMi41IDgycTcyIDI0IDEzOCA4djUyMWwtNjAwIC0xNTV2LTYwNnEwIC00MiAtNDQgLTkwdC0xMDkgLTY5cS03OSAtMjYgLTE0NyAtNS41dC04NiA3NS41dDI1LjUgMTExLjV0MTIyLjUgODIuNXE3MiAyNCAxMzggN3Y2MzlxMCAzOCAxNC41IDU5IHQ1My41IDM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNNTAwIDExOTFxMTAwIDAgMTkxIC0zOXQxNTYuNSAtMTA0LjV0MTA0LjUgLTE1Ni41dDM5IC0xOTFsLTEgLTJsMSAtNXEwIC0xNDEgLTc4IC0yNjJsMjc1IC0yNzRxMjMgLTI2IDIyLjUgLTQ0LjV0LTIyLjUgLTQyLjVsLTU5IC01OHEtMjYgLTIwIC00Ni41IC0yMHQtMzkuNSAyMGwtMjc1IDI3NHEtMTE5IC03NyAtMjYxIC03N2wtNSAxbC0yIC0xcS0xMDAgMCAtMTkxIDM5dC0xNTYuNSAxMDQuNXQtMTA0LjUgMTU2LjV0LTM5IDE5MSB0MzkgMTkxdDEwNC41IDE1Ni41dDE1Ni41IDEwNC41dDE5MSAzOXpNNTAwIDEwMjJxLTg4IDAgLTE2MiAtNDN0LTExNyAtMTE3dC00MyAtMTYydDQzIC0xNjJ0MTE3IC0xMTd0MTYyIC00M3QxNjIgNDN0MTE3IDExN3Q0MyAxNjJ0LTQzIDE2MnQtMTE3IDExN3QtMTYyIDQzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik00MDcgODAwbDEzMSAzNTNxNyAxOSAxNy41IDE5dDE3LjUgLTE5bDEyOSAtMzUzaDQyMXEyMSAwIDI0IC04LjV0LTE0IC0yMC41bC0zNDIgLTI0OWwxMzAgLTQwMXE3IC0yMCAtMC41IC0yNS41dC0yNC41IDYuNWwtMzQzIDI0NmwtMzQyIC0yNDdxLTE3IC0xMiAtMjQuNSAtNi41dC0wLjUgMjUuNWwxMzAgNDAwbC0zNDcgMjUxcS0xNyAxMiAtMTQgMjAuNXQyMyA4LjVoNDI5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNNDA3IDgwMGwxMzEgMzUzcTcgMTkgMTcuNSAxOXQxNy41IC0xOWwxMjkgLTM1M2g0MjFxMjEgMCAyNCAtOC41dC0xNCAtMjAuNWwtMzQyIC0yNDlsMTMwIC00MDFxNyAtMjAgLTAuNSAtMjUuNXQtMjQuNSA2LjVsLTM0MyAyNDZsLTM0MiAtMjQ3cS0xNyAtMTIgLTI0LjUgLTYuNXQtMC41IDI1LjVsMTMwIDQwMGwtMzQ3IDI1MXEtMTcgMTIgLTE0IDIwLjV0MjMgOC41aDQyOXpNNDc3IDcwMGgtMjQwbDE5NyAtMTQybC03NCAtMjI2IGwxOTMgMTM5bDE5NSAtMTQwbC03NCAyMjlsMTkyIDE0MGgtMjM0bC03OCAyMTF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik02MDAgMTIwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTI1MHEwIC00NiAtMzEgLTk4dC02OSAtNTJ2LTc1cTAgLTEwIDYgLTIxLjV0MTUgLTE3LjVsMzU4IC0yMzBxOSAtNSAxNSAtMTYuNXQ2IC0yMS41di05M3EwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5M3EwIDEwIDYgMjEuNXQxNSAxNi41bDM1OCAyMzBxOSA2IDE1IDE3LjV0NiAyMS41djc1cS0zOCAwIC02OSA1MiB0LTMxIDk4djI1MHEwIDEyNCA4OCAyMTJ0MjEyIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDk7IiBkPSJNMjUgMTEwMGgxMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTA1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMDUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwMCAxMDAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgMTAwMGgtNTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMzUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNTUwIHExMCAwIDE3LjUgNy41dDcuNSAxNy41djM1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTEwMDAgMTAwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwIDgwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA4MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgNTAwaC01NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0zNTBxMCAtMTAgNy41IC0xNy41IHQxNy41IC03LjVoNTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MzUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMTAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCAyMDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCA1MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMTsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDcwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAzMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41IHQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMjsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNDUwIDcwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMzsiIGQ9Ik00NjUgNDc3bDU3MSA1NzFxOCA4IDE4IDh0MTcgLThsMTc3IC0xNzdxOCAtNyA4IC0xN3QtOCAtMThsLTc4MyAtNzg0cS03IC04IC0xNy41IC04dC0xNy41IDhsLTM4NCAzODRxLTggOCAtOCAxOHQ4IDE3bDE3NyAxNzdxNyA4IDE3IDh0MTggLThsMTcxIC0xNzFxNyAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTQ7IiBkPSJNOTA0IDEwODNsMTc4IC0xNzlxOCAtOCA4IC0xOC41dC04IC0xNy41bC0yNjcgLTI2OGwyNjcgLTI2OHE4IC03IDggLTE3LjV0LTggLTE4LjVsLTE3OCAtMTc4cS04IC04IC0xOC41IC04dC0xNy41IDhsLTI2OCAyNjdsLTI2OCAtMjY3cS03IC04IC0xNy41IC04dC0xOC41IDhsLTE3OCAxNzhxLTggOCAtOCAxOC41dDggMTcuNWwyNjcgMjY4bC0yNjcgMjY4cS04IDcgLTggMTcuNXQ4IDE4LjVsMTc4IDE3OHE4IDggMTguNSA4dDE3LjUgLTggbDI2OCAtMjY3bDI2OCAyNjhxNyA3IDE3LjUgN3QxOC41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNNDI1IDkwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWg3NXExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41IHQtMTcuNSAtNy41aC03NXYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtNzVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3NXY3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTY7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNMzI1IDgwMGgzNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNzsiIGQ9Ik01NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04MDAgOTc1djE2NnExNjcgLTYyIDI3MiAtMjA5LjV0MTA1IC0zMzEuNXEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNSB0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHEwIDE4NCAxMDUgMzMxLjV0MjcyIDIwOS41di0xNjZxLTEwMyAtNTUgLTE2NSAtMTU1dC02MiAtMjIwcTAgLTExNiA1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTExNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTcyNSA4MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgNTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTQ1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djQ1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0xMjUgMzAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41IHYyNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDE5OyIgZD0iTTYwMCAxMTc0cTMzIDAgNzQgLTVsMzggLTE1Mmw1IC0xcTQ5IC0xNCA5NCAtMzlsNSAtMmwxMzQgODBxNjEgLTQ4IDEwNCAtMTA1bC04MCAtMTM0bDMgLTVxMjUgLTQ0IDM5IC05M2wxIC02bDE1MiAtMzhxNSAtNDMgNSAtNzNxMCAtMzQgLTUgLTc0bC0xNTIgLTM4bC0xIC02cS0xNSAtNDkgLTM5IC05M2wtMyAtNWw4MCAtMTM0cS00OCAtNjEgLTEwNCAtMTA1bC0xMzQgODFsLTUgLTNxLTQ0IC0yNSAtOTQgLTM5bC01IC0ybC0zOCAtMTUxIHEtNDMgLTUgLTc0IC01cS0zMyAwIC03NCA1bC0zOCAxNTFsLTUgMnEtNDkgMTQgLTk0IDM5bC01IDNsLTEzNCAtODFxLTYwIDQ4IC0xMDQgMTA1bDgwIDEzNGwtMyA1cS0yNSA0NSAtMzggOTNsLTIgNmwtMTUxIDM4cS02IDQyIC02IDc0cTAgMzMgNiA3M2wxNTEgMzhsMiA2cTEzIDQ4IDM4IDkzbDMgNWwtODAgMTM0cTQ3IDYxIDEwNSAxMDVsMTMzIC04MGw1IDJxNDUgMjUgOTQgMzlsNSAxbDM4IDE1MnE0MyA1IDc0IDV6TTYwMCA4MTUgcS04OSAwIC0xNTIgLTYzdC02MyAtMTUxLjV0NjMgLTE1MS41dDE1MiAtNjN0MTUyIDYzdDYzIDE1MS41dC02MyAxNTEuNXQtMTUyIDYzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNNTAwIDEzMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoLTExMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNTAwIDEyMDB2LTEwMGgzMDB2MTAwaC0zMDB6TTExMDAgOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTcwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjUgdjgwMGg5MDB6TTMwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTUwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTcwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTkwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xOCA2MThsNjIwIDYwOHE4IDcgMTguNSA3dDE3LjUgLTdsNjA4IC02MDhxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xNzV2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWgtMzAwdi0zNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NzVoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDIyOyIgZD0iTTYwMCAxMjAwdi00MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHYtNjUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djExMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHpNMTAwMCA4MDBoLTI1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTUyNSA5MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNzVoMTc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI0OyIgZD0iTTEzMDAgMGgtNTM4bC00MSA0MDBoLTI0MmwtNDEgLTQwMGgtNTM4bDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDh6TTUxNSA4MDBsLTI3IC0zMDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDUwaDE5MXEyMCAwIDI1LjUgLTExLjV0LTcuNSAtMjcuNWwtMzI3IC00MDBxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMzI3IDQwMHEtMTMgMTYgLTcuNSAyNy41dDI1LjUgMTEuNWgxOTF2NDUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEyNSA0MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0zNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41IGgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTc1aDkwMHYxNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01MjUgOTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI3NWgxMzdxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtMjIzIC0yNzVxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMjIzIDI3NXEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDEzN3YyNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNjMyIDkxNGwyMjMgLTI3NXExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTEzN3YtMjc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2Mjc1aC0xMzdxLTIxIDAgLTI2IDExLjV0OCAyNy41bDIyMyAyNzVxMTMgMTYgMzIgMTYgdDMyIC0xNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTIyNSAxMjAwaDc1MHExMCAwIDE5LjUgLTd0MTIuNSAtMTdsMTg2IC02NTJxNyAtMjQgNyAtNDl2LTQyNXEwIC0xMiAtNCAtMjd0LTkgLTE3cS0xMiAtNiAtMzcgLTZoLTExMDBxLTEyIDAgLTI3IDR0LTE3IDhxLTYgMTMgLTYgMzhsMSA0MjVxMCAyNSA3IDQ5bDE4NSA2NTJxMyAxMCAxMi41IDE3dDE5LjUgN3pNODc4IDEwMDBoLTU1NnEtMTAgMCAtMTkgLTd0LTExIC0xOGwtODcgLTQ1MHEtMiAtMTEgNCAtMTh0MTYgLTdoMTUwIHExMCAwIDE5LjUgLTd0MTEuNSAtMTdsMzggLTE1MnEyIC0xMCAxMS41IC0xN3QxOS41IC03aDI1MHExMCAwIDE5LjUgN3QxMS41IDE3bDM4IDE1MnEyIDEwIDExLjUgMTd0MTkuNSA3aDE1MHExMCAwIDE2IDd0NCAxOGwtODcgNDUwcS0yIDExIC0xMSAxOHQtMTkgN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01NDAgODIwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMDsiIGQ9Ik05NDcgMTA2MGwxMzUgMTM1cTcgNyAxMi41IDV0NS41IC0xM3YtMzYycTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMzYycS0xMSAwIC0xMyA1LjV0NSAxMi41bDEzMyAxMzNxLTEwOSA3NiAtMjM4IDc2cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNWgxNTBxMCAtMTE3IC00NS41IC0yMjQgdC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTk0NyAxMDYwbDEzNSAxMzVxNyA3IDEyLjUgNXQ1LjUgLTEzdi0zNjFxMCAtMTEgLTcuNSAtMTguNXQtMTguNSAtNy41aC0zNjFxLTExIDAgLTEzIDUuNXQ1IDEyLjVsMTM0IDEzNHEtMTEwIDc1IC0yMzkgNzVxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41aC0xNTBxMCAxMTcgNDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3pNMTAyNyA2MDBoMTUwIHEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41cS0xOTIgMCAtMzQ4IDExOGwtMTM0IC0xMzRxLTcgLTggLTEyLjUgLTUuNXQtNS41IDEyLjV2MzYwcTAgMTEgNy41IDE4LjV0MTguNSA3LjVoMzYwcTEwIDAgMTIuNSAtNS41dC01LjUgLTEyLjVsLTEzMyAtMTMzcTExMCAtNzYgMjQwIC03NnExMTYgMCAyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDMyOyIgZD0iTTEyNSAxMjAwaDEwNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djExNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDAwaC04NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di04NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg4NTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY4NTAgcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMzI1IDkwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgOTAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTMyNSA3MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNTI1IDcwMGg0NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTQ1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0zMjUgNTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTUyNSA1MDBoNDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC00NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMzI1IDMwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgMzAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik05MDAgODAwdjIwMHEwIDgzIC01OC41IDE0MS41dC0xNDEuNSA1OC41aC0zMDBxLTgyIDAgLTE0MSAtNTl0LTU5IC0xNDF2LTIwMGgtMTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDkwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDB6TTQwMCA4MDB2MTUwcTAgMjEgMTUgMzUuNXQzNSAxNC41aDIwMCBxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtMTUwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMjUgMTEwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwNzVoLTEwMHYxMDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwNzUgMTA1MnE0IDAgOSAtMnExNiAtNiAxNiAtMjN2LTQyMXEwIC02IC0zIC0xMnEtMzMgLTU5IC02Ni41IC05OXQtNjUuNSAtNTh0LTU2LjUgLTI0LjV0LTUyLjUgLTYuNXEtMjYgMCAtNTcuNSA2LjV0LTUyLjUgMTMuNXQtNjAgMjFxLTQxIDE1IC02MyAyMi41dC01Ny41IDE1dC02NS41IDcuNSBxLTg1IDAgLTE2MCAtNTdxLTcgLTUgLTE1IC01cS02IDAgLTExIDNxLTE0IDcgLTE0IDIydjQzOHEyMiA1NSA4MiA5OC41dDExOSA0Ni41cTIzIDIgNDMgMC41dDQzIC03dDMyLjUgLTguNXQzOCAtMTN0MzIuNSAtMTFxNDEgLTE0IDYzLjUgLTIxdDU3IC0xNHQ2My41IC03cTEwMyAwIDE4MyA4N3E3IDggMTggOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTYwMCAxMTc1cTExNiAwIDIyNyAtNDkuNXQxOTIuNSAtMTMxdDEzMSAtMTkyLjV0NDkuNSAtMjI3di0zMDBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djMwMHEwIDEyNyAtNzAuNSAyMzEuNXQtMTg0LjUgMTYxLjV0LTI0NSA1N3QtMjQ1IC01N3QtMTg0LjUgLTE2MS41dC03MC41IC0yMzEuNXYtMzAwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTAgcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzAwcTAgMTE2IDQ5LjUgMjI3dDEzMSAxOTIuNXQxOTIuNSAxMzF0MjI3IDQ5LjV6TTIyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwcTAgOCA2IDE0dDE0IDZ6TTgyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwIHEwIDggNiAxNHQxNCA2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzY7IiBkPSJNMzIxIDgxNGwyNTggMTcycTkgNiAxNSAyLjV0NiAtMTMuNXYtNzUwcTAgLTEwIC02IC0xMy41dC0xNSAyLjVsLTI1OCAxNzJxLTIxIDE0IC00NiAxNGgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjUwcTI1IDAgNDYgMTR6TTkwMCA2NjhsMTIwIDEyMHE3IDcgMTcgN3QxNyAtN2wzNCAtMzRxNyAtNyA3IC0xN3QtNyAtMTdsLTEyMCAtMTIwbDEyMCAtMTIwcTcgLTcgNyAtMTcgdC03IC0xN2wtMzQgLTM0cS03IC03IC0xNyAtN3QtMTcgN2wtMTIwIDExOWwtMTIwIC0xMTlxLTcgLTcgLTE3IC03dC0xNyA3bC0zNCAzNHEtNyA3IC03IDE3dDcgMTdsMTE5IDEyMGwtMTE5IDEyMHEtNyA3IC03IDE3dDcgMTdsMzQgMzRxNyA4IDE3IDh0MTcgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0zMjEgODE0bDI1OCAxNzJxOSA2IDE1IDIuNXQ2IC0xMy41di03NTBxMCAtMTAgLTYgLTEzLjV0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNiBsLTI5IDIzcS03IDcgLTguNSAxNi41dDQuNSAxNy41cTcyIDEwMyA3MiAyMjlxMCAxMzIgLTc4IDIzOHEtNiA4IC00LjUgMTh0OS41IDE3bDI5IDIycTcgNSAxNSA1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzg7IiBkPSJNOTY3IDEwMDRoM3ExMSAtMSAxNyAtMTBxMTM1IC0xNzkgMTM1IC0zOTZxMCAtMTA1IC0zNCAtMjA2LjV0LTk4IC0xODUuNXEtNyAtOSAtMTcgLTEwaC0zcS05IDAgLTE2IDZsLTQyIDM0cS04IDYgLTkgMTZ0NSAxOHExMTEgMTUwIDExMSAzMjhxMCA5MCAtMjkuNSAxNzZ0LTg0LjUgMTU3cS02IDkgLTUgMTl0MTAgMTZsNDIgMzNxNyA1IDE1IDV6TTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNSB0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNmwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4IHEtNiA4IC00LjUgMTguNXQ5LjUgMTYuNWwyOSAyMnE3IDUgMTUgNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTUwMCA5MDBoMTAwdi0xMDBoLTEwMHYtMTAwaC00MDB2LTEwMGgtMTAwdjYwMGg1MDB2LTMwMHpNMTIwMCA3MDBoLTIwMHYtMTAwaDIwMHYtMjAwaC0zMDB2MzAwaC0yMDB2MzAwaC0xMDB2MjAwaDYwMHYtNTAwek0xMDAgMTEwMHYtMzAwaDMwMHYzMDBoLTMwMHpNODAwIDExMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTMwMCA5MDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEwMDAgOTAwaC0xMDB2MTAwaDEwMHYtMTAwek0zMDAgNTAwaDIwMHYtNTAwIGgtNTAwdjUwMGgyMDB2MTAwaDEwMHYtMTAwek04MDAgMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB2MTAwaDMwMHYtMzAwek0xMDAgNDAwdi0zMDBoMzAwdjMwMGgtMzAwek0zMDAgMjAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMjAwIDIwMGgtMTAwdjEwMGgxMDB2LTEwMHpNNzAwIDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEyMDAgMGgtMzAwdjEwMGgzMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTEwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMzAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek03MDAgMjAwaC0yMDB2MTAwMGgyMDB2LTEwMDB6TTkwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMTIwMCAyMDBoLTIwMHYxMDAwaDIwMHYtMTAwMHpNNDAwIDBoLTMwMHYxMDBoMzAwdi0xMDB6TTYwMCAwaC0xMDB2OTFoMTAwdi05MXpNODAwIDBoLTEwMHY5MWgxMDB2LTkxek0xMTAwIDBoLTIwMHY5MWgyMDB2LTkxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNNTAwIDEyMDBsNjgyIC02ODJxOCAtOCA4IC0xOHQtOCAtMThsLTQ2NCAtNDY0cS04IC04IC0xOCAtOHQtMTggOGwtNjgyIDY4MmwxIDQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41dC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTUwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTY4MiA2ODJsMSA0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg0NzR6TTgwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTU2IDU2bDQyNCA0MjZsLTcwMCA3MDBoMTUwek0zMTkuNSAxMDI0LjVxLTI5LjUgMjkuNSAtNzEgMjkuNXQtNzEgLTI5LjUgdC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTMwMCAxMjAwaDgyNXE3NSAwIDc1IC03NXYtOTAwcTAgLTI1IC0xOCAtNDNsLTY0IC02NHEtOCAtOCAtMTMgLTUuNXQtNSAxMi41djk1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjVoLTcwMHEtMjUgMCAtNDMgLTE4bC02NCAtNjRxLTggLTggLTUuNSAtMTN0MTIuNSAtNWg3MDBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di05NTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC04NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NzUgcTAgMjUgMTggNDNsMTM5IDEzOXExOCAxOCA0MyAxOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTI1MCAxMjAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTE1MGwtNDUwIDQ0NGwtNDUwIC00NDV2MTE1MXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik04MjIgMTIwMGgtNDQ0cS0xMSAwIC0xOSAtNy41dC05IC0xNy41bC03OCAtMzAxcS03IC0yNCA3IC00NWw1NyAtMTA4cTYgLTkgMTcuNSAtMTV0MjEuNSAtNmg0NTBxMTAgMCAyMS41IDZ0MTcuNSAxNWw2MiAxMDhxMTQgMjEgNyA0NWwtODMgMzAxcS0xIDEwIC05IDE3LjV0LTE5IDcuNXpNMTE3NSA4MDBoLTE1MHEtMTAgMCAtMjEgLTYuNXQtMTUgLTE1LjVsLTc4IC0xNTZxLTQgLTkgLTE1IC0xNS41dC0yMSAtNi41aC01NTAgcS0xMCAwIC0yMSA2LjV0LTE1IDE1LjVsLTc4IDE1NnEtNCA5IC0xNSAxNS41dC0yMSA2LjVoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTY1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDc1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41IHQ3LjUgMTcuNXY2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41ek04NTAgMjAwaC01MDBxLTEwIDAgLTE5LjUgLTd0LTExLjUgLTE3bC0zOCAtMTUycS0yIC0xMCAzLjUgLTE3dDE1LjUgLTdoNjAwcTEwIDAgMTUuNSA3dDMuNSAxN2wtMzggMTUycS0yIDEwIC0xMS41IDE3dC0xOS41IDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik01MDAgMTEwMGgyMDBxNTYgMCAxMDIuNSAtMjAuNXQ3Mi41IC01MHQ0NCAtNTl0MjUgLTUwLjVsNiAtMjBoMTUwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTUwcTIgOCA2LjUgMjEuNXQyNCA0OHQ0NSA2MXQ3MiA0OHQxMDIuNSAyMS41ek05MDAgODAwdi0xMDAgaDEwMHYxMDBoLTEwMHpNNjAwIDczMHEtOTUgMCAtMTYyLjUgLTY3LjV0LTY3LjUgLTE2Mi41dDY3LjUgLTE2Mi41dDE2Mi41IC02Ny41dDE2Mi41IDY3LjV0NjcuNSAxNjIuNXQtNjcuNSAxNjIuNXQtMTYyLjUgNjcuNXpNNjAwIDYwM3E0MyAwIDczIC0zMHQzMCAtNzN0LTMwIC03M3QtNzMgLTMwdC03MyAzMHQtMzAgNzN0MzAgNzN0NzMgMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik02ODEgMTE5OWwzODUgLTk5OHEyMCAtNTAgNjAgLTkycTE4IC0xOSAzNi41IC0yOS41dDI3LjUgLTExLjVsMTAgLTJ2LTY2aC00MTd2NjZxNTMgMCA3NSA0My41dDUgODguNWwtODIgMjIyaC0zOTFxLTU4IC0xNDUgLTkyIC0yMzRxLTExIC0zNCAtNi41IC01N3QyNS41IC0zN3Q0NiAtMjB0NTUgLTZ2LTY2aC0zNjV2NjZxNTYgMjQgODQgNTJxMTIgMTIgMjUgMzAuNXQyMCAzMS41bDcgMTNsMzk5IDEwMDZoOTN6TTQxNiA1MjFoMzQwIGwtMTYyIDQ1N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ4OyIgZD0iTTc1MyA2NDFxNSAtMSAxNC41IC00LjV0MzYgLTE1LjV0NTAuNSAtMjYuNXQ1My41IC00MHQ1MC41IC01NC41dDM1LjUgLTcwdDE0LjUgLTg3cTAgLTY3IC0yNy41IC0xMjUuNXQtNzEuNSAtOTcuNXQtOTguNSAtNjYuNXQtMTA4LjUgLTQwLjV0LTEwMiAtMTNoLTUwMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjQgLTAuNSAzNHQtMy41IDI0dC04LjUgMTkuNXQtMTcgMTMuNXQtMjggMTIuNXQtNDIuNSAxMS41djcxIGw0NzEgLTFxNTcgMCAxMTUuNSAtMjAuNXQxMDggLTU3dDgwLjUgLTk0dDMxIC0xMjQuNXEwIC01MSAtMTUuNSAtOTYuNXQtMzggLTc0LjV0LTQ1IC01MC41dC0zOC41IC0zMC41ek00MDAgNzAwaDEzOXE3OCAwIDEzMC41IDQ4LjV0NTIuNSAxMjIuNXEwIDQxIC04LjUgNzAuNXQtMjkuNSA1NS41dC02Mi41IDM5LjV0LTEwMy41IDEzLjVoLTExOHYtMzUwek00MDAgMjAwaDIxNnE4MCAwIDEyMSA1MC41dDQxIDEzMC41cTAgOTAgLTYyLjUgMTU0LjUgdC0xNTYuNSA2NC41aC0xNTl2LTQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTg3NyAxMjAwbDIgLTU3cS04MyAtMTkgLTExNiAtNDUuNXQtNDAgLTY2LjVsLTEzMiAtODM5cS05IC00OSAxMyAtNjl0OTYgLTI2di05N2gtNTAwdjk3cTE4NiAxNiAyMDAgOThsMTczIDgzMnEzIDE3IDMgMzB0LTEuNSAyMi41dC05IDE3LjV0LTEzLjUgMTIuNXQtMjEuNSAxMHQtMjYgOC41dC0zMy41IDEwcS0xMyAzIC0xOSA1djU3aDQyNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTTEzMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTE3NSAxMDAwaC03NXYtODAwaDc1bC0xMjUgLTE2N2wtMTI1IDE2N2g3NXY4MDBoLTc1bDEyNSAxNjd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0xMTAwIDkwMGgtNTBxMCAyMSAtNCAzN3QtOS41IDI2LjV0LTE4IDE3LjV0LTIyIDExdC0yOC41IDUuNXQtMzEgMnQtMzcgMC41aC0yMDB2LTY1MHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtMTAwaC00MDB2MTAwcTQgMCAxMSAwLjV0MjQgM3QzMCA3dDI0IDE1dDExIDI0LjV2NjUwaC0yMDBxLTI1IDAgLTM3IC0wLjV0LTMxIC0ydC0yOC41IC01LjV0LTIyIC0xMXQtMTggLTE3LjV0LTkuNSAtMjYuNXQtNCAtMzdoLTUwdjMwMCBoMTAwMHYtMzAwek0xMTY3IDUwbC0xNjcgLTEyNXY3NWgtODAwdi03NWwtMTY3IDEyNWwxNjcgMTI1di03NWg4MDB2NzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MjsiIGQ9Ik01MCAxMTAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDgwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0yNTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjUwIDUwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDU0OyIgZD0iTTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTUwIDExMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCAxMTAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzUwIDgwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zNTAgMjAwaDgwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNNDAwIDBoLTEwMHYxMTAwaDEwMHYtMTEwMHpNNTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjY3IDU1MGwtMTY3IC0xMjV2NzVoLTIwMHYxMDBoMjAwdjc1ek01NTAgNTAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTU1MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAwaC0xMDB2MTEwMGgxMDB2LTExMDB6TTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEwMCA2MDBoMjAwdi0xMDBoLTIwMHYtNzVsLTE2NyAxMjVsMTY3IDEyNXYtNzV6TTUwIDUwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik03NSAxMDAwaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzdjY1MHEwIDMxIDIyIDUzdDUzIDIyek0xMjAwIDMwMGwtMzAwIDMwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik00NCAxMTAwaDExMTJxMTggMCAzMSAtMTN0MTMgLTMxdi0xMDEycTAgLTE4IC0xMyAtMzF0LTMxIC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxdjEwMTJxMCAxOCAxMyAzMXQzMSAxM3pNMTAwIDEwMDB2LTczN2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB6TTM0MiA4ODRxNTYgMCA5NSAtMzl0MzkgLTk0LjV0LTM5IC05NXQtOTUgLTM5LjV0LTk1IDM5LjV0LTM5IDk1dDM5IDk0LjUgdDk1IDM5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNNjQ4IDExNjlxMTE3IDAgMjE2IC02MHQxNTYuNSAtMTYxdDU3LjUgLTIxOHEwIC0xMTUgLTcwIC0yNThxLTY5IC0xMDkgLTE1OCAtMjI1LjV0LTE0MyAtMTc5LjVsLTU0IC02MnEtOSA4IC0yNS41IDI0LjV0LTYzLjUgNjcuNXQtOTEgMTAzdC05OC41IDEyOHQtOTUuNSAxNDhxLTYwIDEzMiAtNjAgMjQ5cTAgODggMzQgMTY5LjV0OTEuNSAxNDJ0MTM3IDk2LjV0MTY2LjUgMzZ6TTY1Mi41IDk3NHEtOTEuNSAwIC0xNTYuNSAtNjUgdC02NSAtMTU3dDY1IC0xNTYuNXQxNTYuNSAtNjQuNXQxNTYuNSA2NC41dDY1IDE1Ni41dC02NSAxNTd0LTE1Ni41IDY1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxNzN2ODU0cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik01NTQgMTI5NXEyMSAtNzIgNTcuNSAtMTQzLjV0NzYgLTEzMHQ4MyAtMTE4dDgyLjUgLTExN3Q3MCAtMTE2dDQ5LjUgLTEyNnQxOC41IC0xMzYuNXEwIC03MSAtMjUuNSAtMTM1dC02OC41IC0xMTF0LTk5IC04MnQtMTE4LjUgLTU0dC0xMjUuNSAtMjNxLTg0IDUgLTE2MS41IDM0dC0xMzkuNSA3OC41dC05OSAxMjV0LTM3IDE2NC41cTAgNjkgMTggMTM2LjV0NDkuNSAxMjYuNXQ2OS41IDExNi41dDgxLjUgMTE3LjV0ODMuNSAxMTkgdDc2LjUgMTMxdDU4LjUgMTQzek0zNDQgNzEwcS0yMyAtMzMgLTQzLjUgLTcwLjV0LTQwLjUgLTEwMi41dC0xNyAtMTIzcTEgLTM3IDE0LjUgLTY5LjV0MzAgLTUydDQxIC0zN3QzOC41IC0yNC41dDMzIC0xNXEyMSAtNyAzMiAtMXQxMyAyMmw2IDM0cTIgMTAgLTIuNSAyMnQtMTMuNSAxOXEtNSA0IC0xNCAxMnQtMjkuNSA0MC41dC0zMi41IDczLjVxLTI2IDg5IDYgMjcxcTIgMTEgLTYgMTFxLTggMSAtMTUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMTAwMCAxMDEzbDEwOCAxMTVxMiAxIDUgMnQxMyAydDIwLjUgLTF0MjUgLTkuNXQyOC41IC0yMS41cTIyIC0yMiAyNyAtNDN0MCAtMzJsLTYgLTEwbC0xMDggLTExNXpNMzUwIDExMDBoNDAwcTUwIDAgMTA1IC0xM2wtMTg3IC0xODdoLTM2OHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djE4MmwyMDAgMjAwdi0zMzIgcTAgLTE2NSAtOTMuNSAtMjU3LjV0LTI1Ni41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTEwMDkgODAzbC0zNjIgLTM2MmwtMTYxIC01MGw1NSAxNzBsMzU1IDM1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTM1MCAxMTAwaDM2MXEtMTY0IC0xNDYgLTIxNiAtMjAwaC0xOTVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi0xMDNxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTgyNCAxMDczbDMzOSAtMzAxcTggLTcgOCAtMTcuNXQtOCAtMTcuNWwtMzQwIC0zMDZxLTcgLTYgLTEyLjUgLTR0LTYuNSAxMXYyMDNxLTI2IDEgLTU0LjUgMHQtNzguNSAtNy41dC05MiAtMTcuNXQtODYgLTM1dC03MCAtNTdxMTAgNTkgMzMgMTA4dDUxLjUgODEuNXQ2NSA1OC41dDY4LjUgNDAuNXQ2NyAyNC41dDU2IDEzLjV0NDAgNC41djIxMHExIDEwIDYuNSAxMi41dDEzLjUgLTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTM1MCAxMTAwaDM1MHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0yMTlxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTY0MyA2MzlsMzk1IDM5NXE3IDcgMTcuNSA3dDE3LjUgLTdsMTAxIC0xMDFxNyAtNyA3IC0xNy41dC03IC0xNy41bC01MzEgLTUzMnEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC0yNDggMjQ4cS03IDcgLTcgMTcuNXQ3IDE3LjVsMTAxIDEwMXE3IDcgMTcuNSA3dDE3LjUgLTdsMTExIC0xMTFxOCAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMzE4IDkxOGwyNjQgMjY0cTggOCAxOCA4dDE4IC04bDI2MCAtMjY0cTcgLTggNC41IC0xM3QtMTIuNSAtNWgtMTcwdi0yMDBoMjAwdjE3M3EwIDEwIDUgMTJ0MTMgLTVsMjY0IC0yNjBxOCAtNyA4IC0xNy41dC04IC0xNy41bC0yNjQgLTI2NXEtOCAtNyAtMTMgLTV0LTUgMTJ2MTczaC0yMDB2LTIwMGgxNzBxMTAgMCAxMi41IC01dC00LjUgLTEzbC0yNjAgLTI2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTI2NCAyNjRxLTggOCAtNS41IDEzIHQxMi41IDVoMTc1djIwMGgtMjAwdi0xNzNxMCAtMTAgLTUgLTEydC0xMyA1bC0yNjQgMjY1cS04IDcgLTggMTcuNXQ4IDE3LjVsMjY0IDI2MHE4IDcgMTMgNXQ1IC0xMnYtMTczaDIwMHYyMDBoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY5OyIgZD0iTTI1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di0xMDAwcTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEyMDAgMTA1MHYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ5MiA0ODBxLTE1IDE0IC0xNSAzNXQxNSAzNWw0OTIgNDgwcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV2LTQzOGw0NjQgNDUzcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yNDMgMTA3NGw4MTQgLTQ5OHExOCAtMTEgMTggLTI2dC0xOCAtMjZsLTgxNCAtNDk4cS0xOCAtMTEgLTMwLjUgLTR0LTEyLjUgMjh2MTAwMHEwIDIxIDEyLjUgMjh0MzAuNSAtNHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTI1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMTEwMCA5NTB2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTUwMCA2MTJ2NDM4cTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0OTIgLTQ4MHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTQ5MiAtNDgwcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djQzOGwtNDY0IC00NTNxLTE1IC0xNCAtMjUuNSAtMTB0LTEwLjUgMjV2MTAwMHEwIDIxIDEwLjUgMjV0MjUuNSAtMTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0xMDQ4IDExMDJsMTAwIDFxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNWw1IC0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41bC0xMDAgLTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41bC0yIDQzN2wtNDYzIC00NTRxLTE0IC0xNSAtMjQuNSAtMTAuNXQtMTAuNSAyNS41bC0yIDQzN2wtNDYyIC00NTVxLTE1IC0xNCAtMjUuNSAtOS41dC0xMC41IDI0LjVsLTUgMTAwMHEwIDIxIDEwLjUgMjUuNXQyNS41IC0xMC41bDQ2NiAtNDUwIGwtMiA0MzhxMCAyMCAxMC41IDI0LjV0MjUuNSAtOS41bDQ2NiAtNDUxbC0yIDQzOHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik04NTAgMTEwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC00NjQgLTQ1M3EtMTUgLTE0IC0yNS41IC0xMHQtMTAuNSAyNXYxMDAwcTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0NjQgLTQ1M3Y0MzhxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNNjg2IDEwODFsNTAxIC01NDBxMTUgLTE1IDEwLjUgLTI2dC0yNi41IC0xMWgtMTA0MnEtMjIgMCAtMjYuNSAxMXQxMC41IDI2bDUwMSA1NDBxMTUgMTUgMzYgMTV0MzYgLTE1ek0xNTAgNDAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTg4NSA5MDBsLTM1MiAtMzUzbDM1MiAtMzUzbC0xOTcgLTE5OGwtNTUyIDU1Mmw1NTIgNTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODA7IiBkPSJNMTA2NCA1NDdsLTU1MSAtNTUxbC0xOTggMTk4bDM1MyAzNTNsLTM1MyAzNTNsMTk4IDE5OHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NTAgOTAwaC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MGgtMTUwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxNTB2LTE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxNTBoMTUwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNODUwIDcwMGgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDgzOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03NDEuNSA5MTNxLTEyLjUgMCAtMjEuNSAtOWwtMTIwIC0xMjBsLTEyMCAxMjBxLTkgOSAtMjEuNSA5IHQtMjEuNSAtOWwtMTQxIC0xNDFxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxMjAgLTEyMGwtMTIwIC0xMjBxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxNDEgLTE0MXE5IC05IDIxLjUgLTl0MjEuNSA5bDEyMCAxMjBsMTIwIC0xMjBxOSAtOSAyMS41IC05dDIxLjUgOWwxNDEgMTQxcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTIwIDEyMGwxMjAgMTIwcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTQxIDE0MXEtOSA5IC0yMS41IDl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNTQ2IDYyM2wtODQgODVxLTcgNyAtMTcuNSA3dC0xOC41IC03bC0xMzkgLTEzOXEtNyAtOCAtNyAtMTh0NyAtMTggbDI0MiAtMjQxcTcgLTggMTcuNSAtOHQxNy41IDhsMzc1IDM3NXE3IDcgNyAxNy41dC03IDE4LjVsLTEzOSAxMzlxLTcgNyAtMTcuNSA3dC0xNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTU4OCA5NDFxLTI5IDAgLTU5IC01LjV0LTYzIC0yMC41dC01OCAtMzguNXQtNDEuNSAtNjN0LTE2LjUgLTg5LjUgcTAgLTI1IDIwIC0yNWgxMzFxMzAgLTUgMzUgMTFxNiAyMCAyMC41IDI4dDQ1LjUgOHEyMCAwIDMxLjUgLTEwLjV0MTEuNSAtMjguNXEwIC0yMyAtNyAtMzR0LTI2IC0xOHEtMSAwIC0xMy41IC00dC0xOS41IC03LjV0LTIwIC0xMC41dC0yMiAtMTd0LTE4LjUgLTI0dC0xNS41IC0zNXQtOCAtNDZxLTEgLTggNS41IC0xNi41dDIwLjUgLTguNWgxNzNxNyAwIDIyIDh0MzUgMjh0MzcuNSA0OHQyOS41IDc0dDEyIDEwMHEwIDQ3IC0xNyA4MyB0LTQyLjUgNTd0LTU5LjUgMzQuNXQtNjQgMTh0LTU5IDQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NzUgMTAwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNSB0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTY3NSA3MDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNzV2LTIwMGgtNzVxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di01MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDM1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djUwcTAgMTAgLTcuNSAxNy41IHQtMTcuNSA3LjVoLTc1djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NzsiIGQ9Ik01MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xOTRxMTAzIC0yNyAxNzguNSAtMTAyLjV0MTAyLjUgLTE3OC41aDE5NHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NHEtMjcgLTEwMyAtMTAyLjUgLTE3OC41dC0xNzguNSAtMTAyLjV2LTE5NHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE5NCBxLTEwMyAyNyAtMTc4LjUgMTAyLjV0LTEwMi41IDE3OC41aC0xOTRxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxOTRxMjcgMTAzIDEwMi41IDE3OC41dDE3OC41IDEwMi41djE5NHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MDAgODkzdi0xNjhxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNjhxLTY4IC0yMyAtMTE5IC03NCB0LTc0IC0xMTloMTY4cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTY4cTIzIC02OCA3NCAtMTE5dDExOSAtNzR2MTY4cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTY4cTY4IDIzIDExOSA3NHQ3NCAxMTloLTE2OHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDE2OCBxLTIzIDY4IC03NCAxMTl0LTExOSA3NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek03NTkgODIzbDY0IC02NHE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTEyNCAtMTI0bDEyNCAtMTI0cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNjQgLTY0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTEyNCAxMjRsLTEyNCAtMTI0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTY0IDY0IHEtNyA3IC03IDE3LjV0NyAxNy41bDEyNCAxMjRsLTEyNCAxMjRxLTcgNyAtNyAxNy41dDcgMTcuNWw2NCA2NHE3IDcgMTcuNSA3dDE3LjUgLTdsMTI0IC0xMjRsMTI0IDEyNHE3IDcgMTcuNSA3dDE3LjUgLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNzgyIDc4OGwxMDYgLTEwNnE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTMyMCAtMzIxcS04IC03IC0xOCAtN3QtMTggN2wtMjAyIDIwM3EtOCA3IC04IDE3LjV0OCAxNy41bDEwNiAxMDZxNyA4IDE3LjUgOHQxNy41IC04bDc5IC03OWwxOTcgMTk3cTcgNyAxNy41IDd0MTcuNSAtN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVxMCAtMTIwIDY1IC0yMjUgbDU4NyA1ODdxLTEwNSA2NSAtMjI1IDY1ek05NjUgODE5bC01ODQgLTU4NHExMDQgLTYyIDIxOSAtNjJxMTE2IDAgMjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVxMCAxMTUgLTYyIDIxOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTM5IDU4Mmw1MjIgNDI3cTE2IDEzIDI3LjUgOHQxMS41IC0yNnYtMjkxaDU1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01NTB2LTI5MXEwIC0yMSAtMTEuNSAtMjZ0LTI3LjUgOGwtNTIyIDQyN3EtMTYgMTMgLTE2IDMydDE2IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNNjM5IDEwMDlsNTIyIC00MjdxMTYgLTEzIDE2IC0zMnQtMTYgLTMybC01MjIgLTQyN3EtMTYgLTEzIC0yNy41IC04dC0xMS41IDI2djI5MWgtNTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDU1MHYyOTFxMCAyMSAxMS41IDI2dDI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik02ODIgMTE2MWw0MjcgLTUyMnExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTI5MXYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgtMjkxcS0yMSAwIC0yNiAxMS41dDggMjcuNWw0MjcgNTIycTEzIDE2IDMyIDE2dDMyIC0xNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk0OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUwaDI5MXEyMSAwIDI2IC0xMS41dC04IC0yNy41bC00MjcgLTUyMnEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC00MjcgNTIycS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMjkxdjU1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik02MzkgMTEwOWw1MjIgLTQyN3ExNiAtMTMgMTYgLTMydC0xNiAtMzJsLTUyMiAtNDI3cS0xNiAtMTMgLTI3LjUgLTh0LTExLjUgMjZ2MjkxcS05NCAtMiAtMTgyIC0yMHQtMTcwLjUgLTUydC0xNDcgLTkyLjV0LTEwMC41IC0xMzUuNXE1IDEwNSAyNyAxOTMuNXQ2Ny41IDE2N3QxMTMgMTM1dDE2NyA5MS41dDIyNS41IDQydjI2MnEwIDIxIDExLjUgMjZ0MjcuNSAtOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTRsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTM1MCAwaC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDkgcTggNyAxOCA3dDE4IC03bDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0yNDkgLTI0OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTEwMTQgMTEyMGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMjQ5IC0yNDlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMjQ5IDI0OXE4IDcgMTggN3QxOCAtN3pNMjUwIDYwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMjQ5IC0yNDlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwyNDkgMjQ5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTAxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03MDQgOTAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNSB0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNXQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzIgMTQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTI2MCAxMjAwcTkgMCAxOSAtMnQxNSAtNGw1IC0ycTIyIC0xMCA0NCAtMjNsMTk2IC0xMThxMjEgLTEzIDM2IC0yNHEyOSAtMjEgMzcgLTEycTExIDEzIDQ5IDM1bDE5NiAxMThxMjIgMTMgNDUgMjNxMTcgNyAzOCA3cTIzIDAgNDcgLTE2LjV0MzcgLTMzLjVsMTMgLTE2cTE0IC0yMSAxOCAtNDVsMjUgLTEyM2w4IC00NHExIC05IDguNSAtMTQuNXQxNy41IC01LjVoNjFxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MCBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE3NWgtNDAwdjMwMGgtMjAwdi0zMDBoLTQwMHYxNzVxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNjFxMTEgMCAxOCAzdDcgOHEwIDQgOSA1MmwyNSAxMjhxNSAyNSAxOSA0NXEyIDMgNSA3dDEzLjUgMTV0MjEuNSAxOS41dDI2LjUgMTUuNSB0MjkuNSA3ek05MTUgMTA3OWwtMTY2IC0xNjJxLTcgLTcgLTUgLTEydDEyIC01aDIxOXExMCAwIDE1IDd0MiAxN2wtNTEgMTQ5cS0zIDEwIC0xMSAxMnQtMTUgLTZ6TTQ2MyA5MTdsLTE3NyAxNTdxLTggNyAtMTYgNXQtMTEgLTEybC01MSAtMTQzcS0zIC0xMCAyIC0xN3QxNSAtN2gyMzFxMTEgMCAxMi41IDV0LTUuNSAxMnpNNTAwIDBoLTM3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWg0MDB2LTQwMHpNMTEwMCA0MDB2LTM3NSBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NDAwaDQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTExNjUgMTE5MHE4IDMgMjEgLTYuNXQxMyAtMTcuNXEtMiAtMTc4IC0yNC41IC0zMjMuNXQtNTUuNSAtMjQ1LjV0LTg3IC0xNzQuNXQtMTAyLjUgLTExOC41dC0xMTggLTY4LjV0LTExOC41IC0zM3QtMTIwIC00LjV0LTEwNSA5LjV0LTkwIDE2LjVxLTYxIDEyIC03OCAxMXEtNCAxIC0xMi41IDB0LTM0IC0xNC41dC01Mi41IC00MC41bC0xNTMgLTE1M3EtMjYgLTI0IC0zNyAtMTQuNXQtMTEgNDMuNXEwIDY0IDQyIDEwMnE4IDggNTAuNSA0NSB0NjYuNSA1OHExOSAxNyAzNSA0N3QxMyA2MXEtOSA1NSAtMTAgMTAyLjV0NyAxMTF0MzcgMTMwdDc4IDEyOS41cTM5IDUxIDgwIDg4dDg5LjUgNjMuNXQ5NC41IDQ1dDExMy41IDM2dDEyOSAzMXQxNTcuNSAzN3QxODIgNDcuNXpNMTExNiAxMDk4cS04IDkgLTIyLjUgLTN0LTQ1LjUgLTUwcS0zOCAtNDcgLTExOSAtMTAzLjV0LTE0MiAtODkuNWwtNjIgLTMzcS01NiAtMzAgLTEwMiAtNTd0LTEwNCAtNjh0LTEwMi41IC04MC41dC04NS41IC05MSB0LTY0IC0xMDQuNXEtMjQgLTU2IC0zMSAtODZ0MiAtMzJ0MzEuNSAxNy41dDU1LjUgNTkuNXEyNSAzMCA5NCA3NS41dDEyNS41IDc3LjV0MTQ3LjUgODFxNzAgMzcgMTE4LjUgNjl0MTAyIDc5LjV0OTkgMTExdDg2LjUgMTQ4LjVxMjIgNTAgMjQgNjB0LTYgMTl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik02NTMgMTIzMXEtMzkgLTY3IC01NC41IC0xMzF0LTEwLjUgLTExNC41dDI0LjUgLTk2LjV0NDcuNSAtODB0NjMuNSAtNjIuNXQ2OC41IC00Ni41dDY1IC0zMHEtNCA3IC0xNy41IDM1dC0xOC41IDM5LjV0LTE3IDM5LjV0LTE3IDQzdC0xMyA0MnQtOS41IDQ0LjV0LTIgNDJ0NCA0M3QxMy41IDM5dDIzIDM4LjVxOTYgLTQyIDE2NSAtMTA3LjV0MTA1IC0xMzh0NTIgLTE1NnQxMyAtMTU5dC0xOSAtMTQ5LjVxLTEzIC01NSAtNDQgLTEwNi41IHQtNjggLTg3dC03OC41IC02NC41dC03Mi41IC00NXQtNTMgLTIycS03MiAtMjIgLTEyNyAtMTFxLTMxIDYgLTEzIDE5cTYgMyAxNyA3cTEzIDUgMzIuNSAyMXQ0MSA0NHQzOC41IDYzLjV0MjEuNSA4MS41dC02LjUgOTQuNXQtNTAgMTA3dC0xMDQgMTE1LjVxMTAgLTEwNCAtMC41IC0xODl0LTM3IC0xNDAuNXQtNjUgLTkzdC04NCAtNTJ0LTkzLjUgLTExdC05NSAyNC41cS04MCAzNiAtMTMxLjUgMTE0dC01My41IDE3MXEtMiAyMyAwIDQ5LjUgdDQuNSA1Mi41dDEzLjUgNTZ0MjcuNSA2MHQ0NiA2NC41dDY5LjUgNjguNXEtOCAtNTMgLTUgLTEwMi41dDE3LjUgLTkwdDM0IC02OC41dDQ0LjUgLTM5dDQ5IC0ycTMxIDEzIDM4LjUgMzZ0LTQuNSA1NXQtMjkgNjQuNXQtMzYgNzV0LTI2IDc1LjVxLTE1IDg1IDIgMTYxLjV0NTMuNSAxMjguNXQ4NS41IDkyLjV0OTMuNSA2MXQ4MS41IDI1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik02MDAgMTA5NHE4MiAwIDE2MC41IC0yMi41dDE0MCAtNTl0MTE2LjUgLTgyLjV0OTQuNSAtOTV0NjggLTk1dDQyLjUgLTgyLjV0MTQgLTU3LjV0LTE0IC01Ny41dC00MyAtODIuNXQtNjguNSAtOTV0LTk0LjUgLTk1dC0xMTYuNSAtODIuNXQtMTQwIC01OXQtMTU5LjUgLTIyLjV0LTE1OS41IDIyLjV0LTE0MCA1OXQtMTE2LjUgODIuNXQtOTQuNSA5NXQtNjguNSA5NXQtNDMgODIuNXQtMTQgNTcuNXQxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NSB0OTQuNSA5NXQxMTYuNSA4Mi41dDE0MCA1OXQxNjAuNSAyMi41ek04ODggODI5cS0xNSAxNSAtMTggMTJ0NSAtMjJxMjUgLTU3IDI1IC0xMTlxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4dC0yMTIgODh0LTg4IDIxMnEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMnQtMTcuNSAtMTJxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXEyMiAtMzYgNDcgLTcxdDcwIC04MnQ5Mi41IC04MXQxMTMgLTU4LjV0MTMzLjUgLTI0LjUgdDEzMy41IDI0dDExMyA1OC41dDkyLjUgODEuNXQ3MCA4MS41dDQ3IDcwLjVxMTEgMTggOSA0Mi41dC0xNCA0MS41cS05MCAxMTcgLTE2MyAxODl6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wzNSAzNHExNCAxNSAxMi41IDMzLjV0LTE2LjUgMzMuNXEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNjsiIGQ9Ik01OTIgMGgtMTQ4bDMxIDEyMHEtOTEgMjAgLTE3NS41IDY4LjV0LTE0My41IDEwNi41dC0xMDMuNSAxMTl0LTY2LjUgMTEwdC0yMiA3NnEwIDIxIDE0IDU3LjV0NDIuNSA4Mi41dDY4IDk1dDk0LjUgOTV0MTE2LjUgODIuNXQxNDAgNTl0MTYwLjUgMjIuNXE2MSAwIDEyNiAtMTVsMzIgMTIxaDE0OHpNOTQ0IDc3MGw0NyAxODFxMTA4IC04NSAxNzYuNSAtMTkydDY4LjUgLTE1OXEwIC0yNiAtMTkuNSAtNzF0LTU5LjUgLTEwMnQtOTMgLTExMiB0LTEyOSAtMTA0LjV0LTE1OCAtNzUuNWw0NiAxNzNxNzcgNDkgMTM2IDExN3Q5NyAxMzFxMTEgMTggOSA0Mi41dC0xNCA0MS41cS01NCA3MCAtMTA3IDEzMHpNMzEwIDgyNHEtNzAgLTY5IC0xNjAgLTE4NHEtMTMgLTE2IC0xNSAtNDAuNXQ5IC00Mi41cTE4IC0zMCAzOSAtNjB0NTcgLTcwLjV0NzQgLTczdDkwIC02MXQxMDUgLTQxLjVsNDEgMTU0cS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41cTAgNTkgMjMgMTE0cTggMTkgNC41IDIyIHQtMTcuNSAtMTJ6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wxMiAxMWwyMiA4NmwtMyA0cS00NCA0NCAtODkgMTE3cS0xMSAxOCAtMjggMjB0LTMyIC0xMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05MCAxMDBsNjQyIDEwNjZxMjAgMzEgNDggMjguNXQ0OCAtMzUuNWw2NDIgLTEwNTZxMjEgLTMyIDcuNSAtNjcuNXQtNTAuNSAtMzUuNWgtMTI5NHEtMzcgMCAtNTAuNSAzNHQ3LjUgNjZ6TTE1NSAyMDBoMzQ1djc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoMzQ1bC00NDUgNzIzek00OTYgNzAwaDIwOHEyMCAwIDMyIC0xNC41dDggLTM0LjVsLTU4IC0yNTIgcS00IC0yMCAtMjEuNSAtMzQuNXQtMzcuNSAtMTQuNWgtNTRxLTIwIDAgLTM3LjUgMTQuNXQtMjEuNSAzNC41bC01OCAyNTJxLTQgMjAgOCAzNC41dDMyIDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik02NTAgMTIwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkzIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC0yMDUgMTI4bC0yMDUgLTEyOHEtMTkgLTkgLTMyIC0xdC0xMyAyOXY2NHEwIDIwIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41djQxIHEwIDIwIDExIDQ0LjV0MjYgMzguNWwzNjMgMzI1djMzOXEwIDYyIDQ0IDEwNnQxMDYgNDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwOTsiIGQ9Ik04NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTExMDB2MTUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDgwMHYtNzUwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NzUwaDExMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTcwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTkwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA0MDAgdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTA7IiBkPSJNMTEzNSAxMTY1bDI0OSAtMjMwcTE1IC0xNCAxNSAtMzV0LTE1IC0zNWwtMjQ5IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC0xNTlsLTYwMCAtNjAwaC0yOTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjA5bDYwMCA2MDBoMjQxdjE1MHEwIDIxIDEwLjUgMjV0MjQuNSAtMTB6TTUyMiA4MTlsLTE0MSAtMTQxbC0xMjIgMTIyaC0yMDlxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI5MXpNMTEzNSA1NjVsMjQ5IC0yMzBxMTUgLTE0IDE1IC0zNXQtMTUgLTM1bC0yNDkgLTIzMHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYxNTBoLTI0MWwtMTgxIDE4MWwxNDEgMTQxbDEyMiAtMTIyaDE1OXYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMTAwIDExMDBoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTI7IiBkPSJNMTUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTMwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMzAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTExMDAgODAwdi0zMDBxMCAtNDEgLTMgLTc3LjV0LTE1IC04OS41dC0zMiAtOTZ0LTU4IC04OXQtODkgLTc3dC0xMjkgLTUxdC0xNzQgLTIwdC0xNzQgMjAgdC0xMjkgNTF0LTg5IDc3dC01OCA4OXQtMzIgOTZ0LTE1IDg5LjV0LTMgNzcuNXYzMDBoMzAwdi0yNTB2LTI3di00Mi41dDEuNSAtNDF0NSAtMzh0MTAgLTM1dDE2LjUgLTMwdDI1LjUgLTI0LjV0MzUgLTE5dDQ2LjUgLTEydDYwIC00dDYwIDQuNXQ0Ni41IDEyLjV0MzUgMTkuNXQyNSAyNS41dDE3IDMwLjV0MTAgMzV0NSAzOHQyIDQwLjV0LTAuNSA0MnYyNXYyNTBoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNMTEwMCA0MTFsLTE5OCAtMTk5bC0zNTMgMzUzbC0zNTMgLTM1M2wtMTk3IDE5OWw1NTEgNTUxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNMTEwMSA3ODlsLTU1MCAtNTUxbC01NTEgNTUxbDE5OCAxOTlsMzUzIC0zNTNsMzUzIDM1M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTTQwNCAxMDAwaDc0NnEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUxaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtMjMwIC0yNDlxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI0OXEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNWgxNTB2NDAxaC0zODF6TTEzNSA5ODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi00MDBoMzg1bDIxNSAtMjAwaC03NTBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXY1NTBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTY7IiBkPSJNNTYgMTIwMGg5NHExNyAwIDMxIC0xMXQxOCAtMjdsMzggLTE2Mmg4OTZxMjQgMCAzOSAtMTguNXQxMCAtNDIuNWwtMTAwIC00NzVxLTUgLTIxIC0yNyAtNDIuNXQtNTUgLTIxLjVoLTYzM2w0OCAtMjAwaDUzNXEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgtMzAwdi01MCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaC0zMXEtMTggMCAtMzIuNSAxMHQtMjAuNSAxOWwtNSAxMGwtMjAxIDk2MWgtNTRxLTIwIDAgLTM1IDE0LjV0LTE1IDM1LjV0MTUgMzUuNXQzNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMTIwMCAxMDAwdi0xMDBoLTEyMDB2MTAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHpNMCA4MDBoMTIwMHYtODAwaC0xMjAwdjgwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTE4OyIgZD0iTTIwMCA4MDBsLTIwMCAtNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MiAwIDcxIC0yOS41dDI5IC03MC41aDUwMHYtMjAwaC0xMDAwek0xNTAwIDcwMGwtMzAwIC03MDBoLTEyMDBsMzAwIDcwMGgxMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTk7IiBkPSJNNjM1IDExODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi02MDFoMTUwcTIxIDAgMjUgLTEwLjV0LTEwIC0yNC41bC0yMzAgLTI0OXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjQ5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41aDE1MHY2MDFoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNOTM2IDg2NGwyNDkgLTIyOXExNCAtMTUgMTQgLTM1LjV0LTE0IC0zNS41bC0yNDkgLTIyOXEtMTUgLTE1IC0yNS41IC0xMC41dC0xMC41IDI0LjV2MTUxaC02MDB2LTE1MXEwIC0yMCAtMTAuNSAtMjQuNXQtMjUuNSAxMC41bC0yNDkgMjI5cS0xNCAxNSAtMTQgMzUuNXQxNCAzNS41bDI0OSAyMjlxMTUgMTUgMjUuNSAxMC41dDEwLjUgLTI1LjV2LTE0OWg2MDB2MTQ5cTAgMjEgMTAuNSAyNS41dDI1LjUgLTEwLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMTsiIGQ9Ik0xMTY5IDQwMGwtMTcyIDczMnEtNSAyMyAtMjMgNDUuNXQtMzggMjIuNWgtNjcycS0yMCAwIC0zOCAtMjB0LTIzIC00MWwtMTcyIC03MzloMTEzOHpNMTEwMCAzMDBoLTEwMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTEwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek04MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwIHpNMTAwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0xMTUwIDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTg1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTAwMCAyMDBsLTY3NSAyMDBoLTM4bDQ3IC0yNzZxMyAtMTYgLTUuNSAtMjB0LTI5LjUgLTRoLTdoLTg0cS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NSAzMzcgLTU1IDM1MXYyNTB2NnEwIDE2IDEgMjMuNXQ2LjUgMTQgdDE3LjUgNi41aDIwMGw2NzUgMjUwdi04NTB6TTAgNzUwdi0yNTBxLTQgMCAtMTEgMC41dC0yNCA2dC0zMCAxNXQtMjQgMzB0LTExIDQ4LjV2NTBxMCAyNiAxMC41IDQ2dDI1IDMwdDI5IDE2dDI1LjUgN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTU1MyAxMjAwaDk0cTIwIDAgMjkgLTEwLjV0MyAtMjkuNWwtMTggLTM3cTgzIC0xOSAxNDQgLTgyLjV0NzYgLTE0MC41bDYzIC0zMjdsMTE4IC0xNzNoMTdxMTkgMCAzMyAtMTQuNXQxNCAtMzV0LTEzIC00MC41dC0zMSAtMjdxLTggLTQgLTIzIC05LjV0LTY1IC0xOS41dC0xMDMgLTI1dC0xMzIuNSAtMjB0LTE1OC41IC05cS01NyAwIC0xMTUgNXQtMTA0IDEydC04OC41IDE1LjV0LTczLjUgMTcuNXQtNTQuNSAxNnQtMzUuNSAxMmwtMTEgNCBxLTE4IDggLTMxIDI4dC0xMyA0MC41dDE0IDM1dDMzIDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMy41IDMydDI4LjUgMTN6TTQ5OCAxMTBxNTAgLTYgMTAyIC02cTUzIDAgMTAyIDZxLTEyIC00OSAtMzkuNSAtNzkuNXQtNjIuNSAtMzAuNXQtNjMgMzAuNXQtMzkgNzkuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTI0OyIgZD0iTTgwMCA5NDZsMjI0IDc4bC03OCAtMjI0bDIzNCAtNDVsLTE4MCAtMTU1bDE4MCAtMTU1bC0yMzQgLTQ1bDc4IC0yMjRsLTIyNCA3OGwtNDUgLTIzNGwtMTU1IDE4MGwtMTU1IC0xODBsLTQ1IDIzNGwtMjI0IC03OGw3OCAyMjRsLTIzNCA0NWwxODAgMTU1bC0xODAgMTU1bDIzNCA0NWwtNzggMjI0bDIyNCAtNzhsNDUgMjM0bDE1NSAtMTgwbDE1NSAxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik02NTAgMTIwMGg1MHE0MCAwIDcwIC00MC41dDMwIC04NC41di0xNTBsLTI4IC0xMjVoMzI4cTQwIDAgNzAgLTQwLjV0MzAgLTg0LjV2LTEwMHEwIC00NSAtMjkgLTc0bC0yMzggLTM0NHEtMTYgLTI0IC0zOCAtNDAuNXQtNDUgLTE2LjVoLTI1MHEtNyAwIC00MiAyNXQtNjYgNTBsLTMxIDI1aC02MXEtNDUgMCAtNzIuNSAxOHQtMjcuNSA1N3Y0MDBxMCAzNiAyMCA2M2wxNDUgMTk2bDk2IDE5OHExMyAyOCAzNy41IDQ4dDUxLjUgMjB6IE02NTAgMTEwMGwtMTAwIC0yMTJsLTE1MCAtMjEzdi0zNzVoMTAwbDEzNiAtMTAwaDIxNGwyNTAgMzc1djEyNWgtNDUwbDUwIDIyNXYxNzVoLTUwek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTYwMCAxMTAwaDI1MHEyMyAwIDQ1IC0xNi41dDM4IC00MC41bDIzOCAtMzQ0cTI5IC0yOSAyOSAtNzR2LTEwMHEwIC00NCAtMzAgLTg0LjV0LTcwIC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwIC04NC41dC03MCAtNDAuNWgtNTBxLTI3IDAgLTUxLjUgMjB0LTM3LjUgNDhsLTk2IDE5OGwtMTQ1IDE5NnEtMjAgMjcgLTIwIDYzdjQwMHEwIDM5IDI3LjUgNTd0NzIuNSAxOGg2MXExMjQgMTAwIDEzOSAxMDB6IE01MCAxMDAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTYzNiAxMDAwbC0xMzYgLTEwMGgtMTAwdi0zNzVsMTUwIC0yMTNsMTAwIC0yMTJoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNMzU2IDg3M2wzNjMgMjMwcTMxIDE2IDUzIC02bDExMCAtMTEycTEzIC0xMyAxMy41IC0zMnQtMTEuNSAtMzRsLTg0IC0xMjFoMzAycTg0IDAgMTM4IC0zOHQ1NCAtMTEwdC01NSAtMTExdC0xMzkgLTM5aC0xMDZsLTEzMSAtMzM5cS02IC0yMSAtMTkuNSAtNDF0LTI4LjUgLTIwaC0zNDJxLTcgMCAtOTAgODF0LTgzIDk0djUyNXEwIDE3IDE0IDM1LjV0MjggMjguNXpNNDAwIDc5MnYtNTAzbDEwMCAtODloMjkzbDEzMSAzMzkgcTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3EyMSAwIDMwLjUgMjV0MC41IDUwdC0zMSAyNWgtNDU2aC03aC02aC01LjV0LTYgMC41dC01IDEuNXQtNSAydC00IDIuNXQtNCA0dC0yLjUgNC41cS0xMiAyNSA1IDQ3bDE0NiAxODNsLTg2IDgzek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyODsiIGQ9Ik00NzUgMTEwM2wzNjYgLTIzMHEyIC0xIDYgLTMuNXQxNCAtMTAuNXQxOCAtMTYuNXQxNC41IC0yMHQ2LjUgLTIyLjV2LTUyNXEwIC0xMyAtODYgLTk0dC05MyAtODFoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NSAwIC0xMzkuNSAzOXQtNTQuNSAxMTF0NTQgMTEwdDEzOCAzOGgzMDJsLTg1IDEyMXEtMTEgMTUgLTEwLjUgMzR0MTMuNSAzMmwxMTAgMTEycTIyIDIyIDUzIDZ6TTM3MCA5NDVsMTQ2IC0xODMgcTE3IC0yMiA1IC00N3EtMiAtMiAtMy41IC00LjV0LTQgLTR0LTQgLTIuNXQtNSAtMnQtNSAtMS41dC02IC0wLjVoLTZoLTYuNWgtNmgtNDc1di0xMDBoMjIxcTE1IDAgMjkgLTIwdDIwIC00MWwxMzAgLTMzOWgyOTRsMTA2IDg5djUwM2wtMzQyIDIzNnpNMTA1MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjUgdjUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik01NTAgMTI5NHE3MiAwIDExMSAtNTV0MzkgLTEzOXYtMTA2bDMzOSAtMTMxcTIxIC02IDQxIC0xOS41dDIwIC0yOC41di0zNDJxMCAtNyAtODEgLTkwdC05NCAtODNoLTUyNXEtMTcgMCAtMzUuNSAxNHQtMjguNSAyOGwtOSAxNGwtMjMwIDM2M3EtMTYgMzEgNiA1M2wxMTIgMTEwcTEzIDEzIDMyIDEzLjV0MzQgLTExLjVsMTIxIC04NHYzMDJxMCA4NCAzOCAxMzh0MTEwIDU0ek02MDAgOTcydjIwM3EwIDIxIC0yNSAzMC41dC01MCAwLjUgdC0yNSAtMzF2LTQ1NnYtN3YtNnYtNS41dC0wLjUgLTZ0LTEuNSAtNXQtMiAtNXQtMi41IC00dC00IC00dC00LjUgLTIuNXEtMjUgLTEyIC00NyA1bC0xODMgMTQ2bC04MyAtODZsMjM2IC0zMzloNTAzbDg5IDEwMHYyOTNsLTMzOSAxMzFxLTIxIDYgLTQxIDE5LjV0LTIwIDI4LjV6TTQ1MCAyMDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0zNTAgMTEwMGg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41ek02MDAgMzA2di0xMDZxMCAtODQgLTM5IC0xMzl0LTExMSAtNTV0LTExMCA1NHQtMzggMTM4djMwMmwtMTIxIC04NHEtMTUgLTEyIC0zNCAtMTEuNXQtMzIgMTMuNWwtMTEyIDExMCBxLTIyIDIyIC02IDUzbDIzMCAzNjNxMSAyIDMuNSA2dDEwLjUgMTMuNXQxNi41IDE3dDIwIDEzLjV0MjIuNSA2aDUyNXExMyAwIDk0IC04M3Q4MSAtOTB2LTM0MnEwIC0xNSAtMjAgLTI4LjV0LTQxIC0xOS41ek0zMDggOTAwbC0yMzYgLTMzOWw4MyAtODZsMTgzIDE0NnEyMiAxNyA0NyA1cTIgLTEgNC41IC0yLjV0NCAtNHQyLjUgLTR0MiAtNXQxLjUgLTV0MC41IC02di01LjV2LTZ2LTd2LTQ1NnEwIC0yMiAyNSAtMzF0NTAgMC41dDI1IDMwLjUgdjIwM3EwIDE1IDIwIDI4LjV0NDEgMTkuNWwzMzkgMTMxdjI5M2wtODkgMTAwaC01MDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMTsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNOTE0IDYzMmwtMjc1IDIyM3EtMTYgMTMgLTI3LjUgOHQtMTEuNSAtMjZ2LTEzN2gtMjc1IHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDI3NXYtMTM3cTAgLTIxIDExLjUgLTI2dDI3LjUgOGwyNzUgMjIzcTE2IDEzIDE2IDMydC0xNiAzMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek01NjEgODU1bC0yNzUgLTIyM3EtMTYgLTEzIC0xNiAtMzJ0MTYgLTMybDI3NSAtMjIzcTE2IC0xMyAyNy41IC04IHQxMS41IDI2djEzN2gyNzVxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC0yNzV2MTM3cTAgMjEgLTExLjUgMjZ0LTI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNODU1IDYzOWwtMjIzIDI3NXEtMTMgMTYgLTMyIDE2dC0zMiAtMTZsLTIyMyAtMjc1cS0xMyAtMTYgLTggLTI3LjUgdDI2IC0xMS41aDEzN3YtMjc1cTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2Mjc1aDEzN3EyMSAwIDI2IDExLjV0LTggMjcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek02NzUgOTAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0yNzVoLTEzN3EtMjEgMCAtMjYgLTExLjUgdDggLTI3LjVsMjIzIC0yNzVxMTMgLTE2IDMyIC0xNnQzMiAxNmwyMjMgMjc1cTEzIDE2IDggMjcuNXQtMjYgMTEuNWgtMTM3djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNTsiIGQ9Ik02MDAgMTE3NnExMTYgMCAyMjIuNSAtNDZ0MTg0IC0xMjMuNXQxMjMuNSAtMTg0dDQ2IC0yMjIuNXQtNDYgLTIyMi41dC0xMjMuNSAtMTg0dC0xODQgLTEyMy41dC0yMjIuNSAtNDZ0LTIyMi41IDQ2dC0xODQgMTIzLjV0LTEyMy41IDE4NHQtNDYgMjIyLjV0NDYgMjIyLjV0MTIzLjUgMTg0dDE4NCAxMjMuNXQyMjIuNSA0NnpNNjI3IDExMDFxLTE1IC0xMiAtMzYuNSAtMjAuNXQtMzUuNSAtMTJ0LTQzIC04dC0zOSAtNi41IHEtMTUgLTMgLTQ1LjUgMHQtNDUuNSAtMnEtMjAgLTcgLTUxLjUgLTI2LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzlxLTkgLTM0IDUgLTkzdDggLTg3cTAgLTkgMTcgLTQ0LjV0MTYgLTU5LjVxMTIgMCAyMyAtNXQyMy41IC0xNXQxOS41IC0xNHExNiAtOCAzMyAtMTV0NDAuNSAtMTV0MzQuNSAtMTJxMjEgLTkgNTIuNSAtMzJ0NjAgLTM4dDU3LjUgLTExIHE3IC0xNSAtMyAtMzR0LTIyLjUgLTQwdC05LjUgLTM4cTEzIC0yMSAyMyAtMzQuNXQyNy41IC0yNy41dDM2LjUgLTE4cTAgLTcgLTMuNSAtMTZ0LTMuNSAtMTR0NSAtMTdxMTA0IC0yIDIyMSAxMTJxMzAgMjkgNDYuNSA0N3QzNC41IDQ5dDIxIDYzcS0xMyA4IC0zNyA4LjV0LTM2IDcuNXEtMTUgNyAtNDkuNSAxNXQtNTEuNSAxOXEtMTggMCAtNDEgLTAuNXQtNDMgLTEuNXQtNDIgLTYuNXQtMzggLTE2LjVxLTUxIC0zNSAtNjYgLTEyIHEtNCAxIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxNy41dC0yNC41IDYuNXExIDE1IC0wLjUgMzAuNXQtNyAyOHQtMTguNSAxMS41dC0zMSAtMjFxLTIzIC0yNSAtNDIgNHEtMTkgMjggLTggNThxNiAxNiAyMiAyMnE2IC0xIDI2IC0xLjV0MzMuNSAtNHQxOS41IC0xMy41cTcgLTEyIDE4IC0yNHQyMS41IC0yMC41dDIwIC0xNXQxNS41IC0xMC41bDUgLTNxMiAxMiA3LjUgMzAuNXQ4IDM0LjV0LTAuNSAzMnEtMyAxOCAzLjUgMjkgdDE4IDIyLjV0MTUuNSAyNC41cTYgMTQgMTAuNSAzNXQ4IDMxdDE1LjUgMjIuNXQzNCAyMi41cS02IDE4IDEwIDM2cTggMCAyNCAtMS41dDI0LjUgLTEuNXQyMCA0LjV0MjAuNSAxNS41cS0xMCAyMyAtMzEgNDIuNXQtMzcuNSAyOS41dC00OSAyN3QtNDMuNSAyM3EwIDEgMiA4dDMgMTEuNXQxLjUgMTAuNXQtMSA5LjV0LTQuNSA0LjVxMzEgLTEzIDU4LjUgLTE0LjV0MzguNSAyLjVsMTIgNXE1IDI4IC05LjUgNDZ0LTM2LjUgMjR0LTUwIDE1IHQtNDEgMjBxLTE4IC00IC0zNyAwek02MTMgOTk0cTAgLTE3IDggLTQydDE3IC00NXQ5IC0yM3EtOCAxIC0zOS41IDUuNXQtNTIuNSAxMHQtMzcgMTYuNXEzIDExIDE2IDI5LjV0MTYgMjUuNXExMCAtMTAgMTkgLTEwdDE0IDZ0MTMuNSAxNC41dDE2LjUgMTIuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTc1NiAxMTU3cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxNiAtODkgLTM0IC0xNTYuNXQtMTE3IC0xMTAuNXEtNjAgLTM0IC0xMjcgLTM5LjV0LTEyNiAxNi41bC01OTYgLTU5NnEtMTUgLTE2IC0zNi41IC0xNnQtMzYuNSAxNmwtMTExIDExMHEtMTUgMTUgLTE1IDM2LjV0MTUgMzcuNWw2MDAgNTk5cS0zNCAxMDEgNS41IDIwMS41dDEzNS41IDE1NC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzc7IiBob3Jpei1hZHYteD0iMTIyMCIgZD0iTTEwMCAxMTk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAxMDk2aC0yMDB2LTEwMGgyMDB2MTAwek0xMDAgNzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTExMDAgNjk2aC01MDB2LTEwMGg1MDB2MTAwek0xMDAgMzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAyOTZoLTMwMHYtMTAwaDMwMHYxMDB6ICIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTUwIDEyMDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA1MDB2LTMwMGwtMjAwIC0yMDB2NTAwbC0zNTAgNTAwaDkwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTM5OyIgZD0iTTUwMCAxMjAwaDIwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNDAwaC01MDB2MTAwaC0yMDB2LTEwMGgtNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTUwMCAxMTAwdi0xMDBoMjAwdjEwMGgtMjAwek0xMjAwIDQwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MjAwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik01MCAxMjAwaDMwMHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtOTQgLTk0bDE5OSAtMTk5cTcgLTggNyAtMTh0LTcgLTE4bC0xMDYgLTEwNnEtOCAtNyAtMTggLTd0LTE4IDdsLTE5OSAxOTlsLTk0IC05NHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMTk5IC0xOTlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwxOTkgMTk5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNMzY0IDQ3MGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMTk5IC0xOTlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMTk5IDE5OSBxOCA3IDE4IDd0MTggLTd6TTEwNzEgMjcxbDk0IDk0cTE0IDE0IDI0LjUgMTB0MTAuNSAtMjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0yNSAxMC41dDEwIDI0LjVsOTQgOTRsLTE5OSAxOTlxLTcgOCAtNyAxOHQ3IDE4bDEwNiAxMDZxOCA3IDE4IDd0MTggLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik01OTYgMTE5MnExMjEgMCAyMzEuNSAtNDcuNXQxOTAgLTEyN3QxMjcgLTE5MHQ0Ny41IC0yMzEuNXQtNDcuNSAtMjMxLjV0LTEyNyAtMTkwLjV0LTE5MCAtMTI3dC0yMzEuNSAtNDd0LTIzMS41IDQ3dC0xOTAuNSAxMjd0LTEyNyAxOTAuNXQtNDcgMjMxLjV0NDcgMjMxLjV0MTI3IDE5MHQxOTAuNSAxMjd0MjMxLjUgNDcuNXpNNTk2IDEwMTBxLTExMiAwIC0yMDcuNSAtNTUuNXQtMTUxIC0xNTF0LTU1LjUgLTIwNy41dDU1LjUgLTIwNy41IHQxNTEgLTE1MXQyMDcuNSAtNTUuNXQyMDcuNSA1NS41dDE1MSAxNTF0NTUuNSAyMDcuNXQtNTUuNSAyMDcuNXQtMTUxIDE1MXQtMjA3LjUgNTUuNXpNNDU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOC41IC0xNi41dC0zOC41IDE2LjV0LTE2IDM5dDE2IDM4LjV0MzguNSAxNnpNNzU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOCAtMTYuNXEtMTQgMCAtMjkgMTBsLTU1IC0xNDUgcTE3IC0yMyAxNyAtNTFxMCAtMzYgLTI1LjUgLTYxLjV0LTYxLjUgLTI1LjV0LTYxLjUgMjUuNXQtMjUuNSA2MS41cTAgMzIgMjAuNSA1Ni41dDUxLjUgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIzIDE2IDM5dDM4LjUgMTZ6TTM0NS41IDcwOXEyMi41IDAgMzguNSAtMTZ0MTYgLTM4LjV0LTE2IC0zOC41dC0zOC41IC0xNnQtMzguNSAxNnQtMTYgMzguNXQxNiAzOC41dDM4LjUgMTZ6TTg1NC41IDcwOXEyMi41IDAgMzguNSAtMTYgdDE2IC0zOC41dC0xNiAtMzguNXQtMzguNSAtMTZ0LTM4LjUgMTZ0LTE2IDM4LjV0MTYgMzguNXQzOC41IDE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNNTQ2IDE3M2w0NjkgNDcwcTkxIDkxIDk5IDE5MnE3IDk4IC01MiAxNzUuNXQtMTU0IDk0LjVxLTIyIDQgLTQ3IDRxLTM0IDAgLTY2LjUgLTEwdC01Ni41IC0yM3QtNTUuNSAtMzh0LTQ4IC00MS41dC00OC41IC00Ny41cS0zNzYgLTM3NSAtMzkxIC0zOTBxLTMwIC0yNyAtNDUgLTQxLjV0LTM3LjUgLTQxdC0zMiAtNDYuNXQtMTYgLTQ3LjV0LTEuNSAtNTYuNXE5IC02MiA1My41IC05NXQ5OS41IC0zM3E3NCAwIDEyNSA1MWw1NDggNTQ4IHEzNiAzNiAyMCA3NXEtNyAxNiAtMjEuNSAyNnQtMzIuNSAxMHEtMjYgMCAtNTAgLTIzcS0xMyAtMTIgLTM5IC0zOGwtMzQxIC0zMzhxLTE1IC0xNSAtMzUuNSAtMTUuNXQtMzQuNSAxMy41dC0xNCAzNC41dDE0IDM0LjVxMzI3IDMzMyAzNjEgMzY3cTM1IDM1IDY3LjUgNTEuNXQ3OC41IDE2LjVxMTQgMCAyOSAtMXE0NCAtOCA3NC41IC0zNS41dDQzLjUgLTY4LjVxMTQgLTQ3IDIgLTk2LjV0LTQ3IC04NC41cS0xMiAtMTEgLTMyIC0zMiB0LTc5LjUgLTgxdC0xMTQuNSAtMTE1dC0xMjQuNSAtMTIzLjV0LTEyMyAtMTE5LjV0LTk2LjUgLTg5dC01NyAtNDVxLTU2IC0yNyAtMTIwIC0yN3EtNzAgMCAtMTI5IDMydC05MyA4OXEtNDggNzggLTM1IDE3M3Q4MSAxNjNsNTExIDUxMXE3MSA3MiAxMTEgOTZxOTEgNTUgMTk4IDU1cTgwIDAgMTUyIC0zM3E3OCAtMzYgMTI5LjUgLTEwM3Q2Ni41IC0xNTRxMTcgLTkzIC0xMSAtMTgzLjV0LTk0IC0xNTYuNWwtNDgyIC00NzYgcS0xNSAtMTUgLTM2IC0xNnQtMzcgMTR0LTE3LjUgMzR0MTQuNSAzNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTY0OSA5NDlxNDggNjggMTA5LjUgMTA0dDEyMS41IDM4LjV0MTE4LjUgLTIwdDEwMi41IC02NHQ3MSAtMTAwLjV0MjcgLTEyM3EwIC01NyAtMzMuNSAtMTE3LjV0LTk0IC0xMjQuNXQtMTI2LjUgLTEyNy41dC0xNTAgLTE1Mi41dC0xNDYgLTE3NHEtNjIgODUgLTE0NS41IDE3NHQtMTUwIDE1Mi41dC0xMjYuNSAxMjcuNXQtOTMuNSAxMjQuNXQtMzMuNSAxMTcuNXEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQgNjR0MTE5IDIwIHQxMjAuNSAtMzguNXQxMDQuNSAtMTA0ek04OTYgOTcycS0zMyAwIC02NC41IC0xOXQtNTYuNSAtNDZ0LTQ3LjUgLTUzLjV0LTQzLjUgLTQ1LjV0LTM3LjUgLTE5dC0zNiAxOXQtNDAgNDUuNXQtNDMgNTMuNXQtNTQgNDZ0LTY1LjUgMTlxLTY3IDAgLTEyMi41IC01NS41dC01NS41IC0xMzIuNXEwIC0yMyAxMy41IC01MXQ0NiAtNjV0NTcuNSAtNjN0NzYgLTc1bDIyIC0yMnExNSAtMTQgNDQgLTQ0dDUwLjUgLTUxdDQ2IC00NHQ0MSAtMzV0MjMgLTEyIHQyMy41IDEydDQyLjUgMzZ0NDYgNDR0NTIuNSA1MnQ0NCA0M3E0IDQgMTIgMTNxNDMgNDEgNjMuNSA2MnQ1MiA1NXQ0NiA1NXQyNiA0NnQxMS41IDQ0cTAgNzkgLTUzIDEzMy41dC0xMjAgNTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTQ0OyIgZD0iTTc3Ni41IDEyMTRxOTMuNSAwIDE1OS41IC02NmwxNDEgLTE0MXE2NiAtNjYgNjYgLTE2MHEwIC00MiAtMjggLTk1LjV0LTYyIC04Ny41bC0yOSAtMjlxLTMxIDUzIC03NyA5OWwtMTggMThsOTUgOTVsLTI0NyAyNDhsLTM4OSAtMzg5bDIxMiAtMjEybC0xMDUgLTEwNmwtMTkgMThsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTl0NjYgMTU5bDI4MyAyODNxNjUgNjYgMTU4LjUgNjZ6TTYwMCA3MDZsMTA1IDEwNXExMCAtOCAxOSAtMTdsMTQxIC0xNDEgcTY2IC02NiA2NiAtMTU5dC02NiAtMTU5bC0yODMgLTI4M3EtNjYgLTY2IC0xNTkgLTY2dC0xNTkgNjZsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTkuNXQ2NiAxNTkuNWw1NSA1NXEyOSAtNTUgNzUgLTEwMmwxOCAtMTdsLTk1IC05NWwyNDcgLTI0OGwzODkgMzg5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDU7IiBkPSJNNjAzIDEyMDBxODUgMCAxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djk1M3EwIDIxIDMwIDQ2LjV0ODEgNDh0MTI5IDM3LjV0MTYzIDE1ek0zMDAgMTAwMHYtNzAwaDYwMHY3MDBoLTYwMHpNNjAwIDI1NHEtNDMgMCAtNzMuNSAtMzAuNXQtMzAuNSAtNzMuNXQzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41IHQzMC41IDczLjV0LTMwLjUgNzMuNXQtNzMuNSAzMC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNOTAyIDExODVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0zMDggLTMwN2wtMjgwIC0yMDNsMjAzIDI4MGwzMDcgMzA4bC0yMTAgMjEyaDMwMGwyNjcgMjc5bC0zNSAzNnEtMTUgMTQgLTE1IDM1dDE0LjUgMzUuNXQzNS41IDE0LjV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNNzAwIDEyNDh2LTc4cTM4IC01IDcyLjUgLTE0LjV0NzUuNSAtMzEuNXQ3MSAtNTMuNXQ1MiAtODR0MjQgLTExOC41aC0xNTlxLTQgMzYgLTEwLjUgNTl0LTIxIDQ1dC00MCAzNS41dC02NC41IDIwLjV2LTMwN2w2NCAtMTNxMzQgLTcgNjQgLTE2LjV0NzAgLTMydDY3LjUgLTUyLjV0NDcuNSAtODB0MjAgLTExMnEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTd2LTc3aC0xMDB2NzlxLTE1MCAxNiAtMjM3IDEwM3EtNDAgNDAgLTUyLjUgOTMuNSB0LTE1LjUgMTM5LjVoMTM5cTUgLTc3IDQ4LjUgLTEyNnQxMTcuNSAtNjV2MzM1bC0yNyA4cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYzIDUydC00MCA3Mi41dC0xNiA5OHEwIDcwIDI1IDEyNnQ2Ny41IDkydDk0LjUgNTd0MTEwIDI3djc3aDEwMHpNNjAwIDc1NHYyNzRxLTI5IC00IC01MCAtMTF0LTQyIC0yMS41dC0zMS41IC00MS41dC0xMC41IC02NXEwIC0yOSA3IC01MC41dDE2LjUgLTM0dDI4LjUgLTIyLjV0MzEuNSAtMTR0MzcuNSAtMTAgcTkgLTMgMTMgLTR6TTcwMCA1NDd2LTMxMHEyMiAyIDQyLjUgNi41dDQ1IDE1LjV0NDEuNSAyN3QyOSA0MnQxMiA1OS41dC0xMi41IDU5LjV0LTM4IDQ0LjV0LTUzIDMxdC02Ni41IDI0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik01NjEgMTE5N3E4NCAwIDE2MC41IC00MHQxMjMuNSAtMTA5LjV0NDcgLTE0Ny41aC0xNTNxMCA0MCAtMTkuNSA3MS41dC00OS41IDQ4LjV0LTU5LjUgMjZ0LTU1LjUgOXEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMjYgMTMuNSAtNjN0MjYuNSAtNjF0MzcgLTY2cTYgLTkgOSAtMTRoMjQxdi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk1cS00NSAtNjIgLTk5IC0xMTIgcTM0IDEwIDgzIDE3LjV0NzEgNy41cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTgzIDAgMTM2IDMwbDUwIC0xNDdxLTMxIC0xOSAtNTggLTMwLjV0LTU1IC0xNS41dC00MiAtNC41dC00NiAtMC41cS0yMyAwIC03NiAxN3QtMTExIDMyLjV0LTk2IDExLjVxLTM5IC0zIC04MiAtMTZ0LTY3IC0yNWwtMjMgLTExbC01NSAxNDVxNCAzIDE2IDExdDE1LjUgMTAuNXQxMyA5dDE1LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjUgdC0zMCAxNDIuNWgtMjIxdjEwMGgxNjZxLTIzIDQ3IC00NCAxMDRxLTcgMjAgLTEyIDQxLjV0LTYgNTUuNXQ2IDY2LjV0MjkuNSA3MC41dDU4LjUgNzFxOTcgODggMjYzIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkzNSAxMTg0bDIzMCAtMjQ5cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTE1MHYtOTAwaC0yMDB2OTAwaC0xNTBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWwyMzAgMjQ5cTE0IDE1IDM1IDE1dDM1IC0xNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTEwMDAgNzAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTgwMSAxMTAwdi0yMDBoMTAwdjIwMGgtMTAwek0xMDAwIDM1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNMTAwMCAxMDUwbC0yMDAgLTI1MGgyMDB2LTEwMGgtMzAwdjE1MGwyMDAgMjUwaC0yMDB2MTAwaDMwMHYtMTUwek0xMDAwIDBoLTEwMHYxMDBoLTEwMHYtMTAwaC0xMDB2NTAwaDMwMHYtNTAwek04MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTQwMCAzMDBoMTUwcTIxIDAgMjUgLTExdC0xMCAtMjVsLTIzMCAtMjUwcS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNTBxLTE0IDE0IC0xMCAyNXQyNSAxMWgxNTB2OTAwaDIwMHYtOTAwek0xMDAwIDcwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMTEwMCAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTExMDAgNzAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgMTEwMHYtMjAwaDEwMHYyMDBoLTEwMHpNMTAwMCAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkwMCAxMDAwaC0yMDB2MjAwaDIwMHYtMjAwek0xMDAwIDcwMGgtMzAwdjIwMGgzMDB2LTIwMHpNMTEwMCA0MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEyMDAgMTAwaC01MDB2MjAwaDUwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEyMDAgMTAwMGgtNTAwdjIwMGg1MDB2LTIwMHpNMTEwMCA3MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEwMDAgNDAwaC0zMDB2MjAwaDMwMHYtMjAwek05MDAgMTAwaC0yMDB2MjAwaDIwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMzUwIDExMDBoNDAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTQwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMzUwIDExMDBoNDAwcTE2NSAwIDI1Ny41IC05Mi41dDkyLjUgLTI1Ny41di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTYzIDAgLTI1Ni41IDkyLjV0LTkzLjUgMjU3LjV2NDAwcTAgMTYzIDk0IDI1Ni41dDI1NiA5My41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek00NDAgNzcwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1OTsiIGQ9Ik0zNTAgMTEwMGg0MDBxMTYzIDAgMjU2LjUgLTk0dDkzLjUgLTI1NnYtNDAwcTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2MyA5Mi41IDI1Ni41dDI1Ny41IDkzLjV6TTgwMCA5MDBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41IHY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTM1MCA3MDBoNDAwcTIxIDAgMjYuNSAtMTJ0LTYuNSAtMjhsLTE5MCAtMjUzcS0xMiAtMTcgLTMwIC0xN3QtMzAgMTdsLTE5MCAyNTNxLTEyIDE2IC02LjUgMjh0MjYuNSAxMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2MyAtOTIuNSAtMjU2LjV0LTI1Ny41IC05My41aC00MDBxLTE2MyAwIC0yNTYuNSA5NHQtOTMuNSAyNTZ2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNTgwIDY5M2wxOTAgLTI1M3ExMiAtMTYgNi41IC0yOHQtMjYuNSAtMTJoLTQwMHEtMjEgMCAtMjYuNSAxMnQ2LjUgMjhsMTkwIDI1M3ExMiAxNyAzMCAxN3QzMCAtMTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik01NTAgMTEwMGg0MDBxMTY1IDAgMjU3LjUgLTkyLjV0OTIuNSAtMjU3LjV2LTQwMHEwIC0xNjUgLTkyLjUgLTI1Ny41dC0yNTcuNSAtOTIuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC00NTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMzggODY3bDMyNCAtMjg0cTE2IC0xNCAxNiAtMzN0LTE2IC0zM2wtMzI0IC0yODRxLTE2IC0xNCAtMjcgLTl0LTExIDI2djE1MGgtMjUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI1MHYxNTBxMCAyMSAxMSAyNnQyNyAtOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTYyOyIgZD0iTTc5MyAxMTgybDkgLTlxOCAtMTAgNSAtMjdxLTMgLTExIC03OSAtMjI1LjV0LTc4IC0yMjEuNWwzMDAgMXEyNCAwIDMyLjUgLTE3LjV0LTUuNSAtMzUuNXEtMSAwIC0xMzMuNSAtMTU1dC0yNjcgLTMxMi41dC0xMzguNSAtMTYyLjVxLTEyIC0xNSAtMjYgLTE1aC05bC05IDhxLTkgMTEgLTQgMzJxMiA5IDQyIDEyMy41dDc5IDIyNC41bDM5IDExMGgtMzAycS0yMyAwIC0zMSAxOXEtMTAgMjEgNiA0MXE3NSA4NiAyMDkuNSAyMzcuNSB0MjI4IDI1N3Q5OC41IDExMS41cTkgMTYgMjUgMTZoOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTM1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00NTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwIHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTkzOCA4NjdsMzI0IC0yODRxMTYgLTE0IDE2IC0zM3QtMTYgLTMzbC0zMjQgLTI4NHEtMTYgLTE0IC0yNyAtOXQtMTEgMjZ2MTUwaC0yNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjUwdjE1MHEwIDIxIDExIDI2dDI3IC05eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjQ7IiBkPSJNNzUwIDEyMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTEwLjUgLTI1dC0yNC41IDEwbC0xMDkgMTA5bC0zMTIgLTMxMnEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtMTQxIDE0MXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWwzMTIgMzEybC0xMDkgMTA5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41ek00NTYgOTAwaC0xNTZxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMCBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTQ4bDIwMCAyMDB2LTI5OHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41aDMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTYwMCAxMTg2cTExOSAwIDIyNy41IC00Ni41dDE4NyAtMTI1dDEyNSAtMTg3dDQ2LjUgLTIyNy41dC00Ni41IC0yMjcuNXQtMTI1IC0xODd0LTE4NyAtMTI1dC0yMjcuNSAtNDYuNXQtMjI3LjUgNDYuNXQtMTg3IDEyNXQtMTI1IDE4N3QtNDYuNSAyMjcuNXQ0Ni41IDIyNy41dDEyNSAxODd0MTg3IDEyNXQyMjcuNSA0Ni41ek02MDAgMTAyMnEtMTE1IDAgLTIxMiAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTJ0NTYuNSAtMjEyIHQxNTMuNSAtMTUzLjV0MjEyIC01Ni41dDIxMiA1Ni41dDE1My41IDE1My41dDU2LjUgMjEydC01Ni41IDIxMnQtMTUzLjUgMTUzLjV0LTIxMiA1Ni41ek02MDAgNzk0cTgwIDAgMTM3IC01N3Q1NyAtMTM3dC01NyAtMTM3dC0xMzcgLTU3dC0xMzcgNTd0LTU3IDEzN3Q1NyAxMzd0MTM3IDU3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNNDUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMjQ1cTIwIDAgMjUgLTExdC05IC0yNmwtMzgzIC00MjZxLTE0IC0xNSAtMzMuNSAtMTV0LTMyLjUgMTVsLTM3OSA0MjZxLTEzIDE1IC04LjUgMjZ0MjUuNSAxMWgyNTB2MzUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMTEwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiBNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NzsiIGQ9Ik01ODMgMTE4MmwzNzggLTQzNXExNCAtMTUgOSAtMzF0LTI2IC0xNmgtMjQ0di0yNTBxMCAtMjAgLTE3IC0zNXQtMzkgLTE1aC0yMDBxLTIwIDAgLTMyIDE0LjV0LTEyIDM1LjV2MjUwaC0yNTBxLTIwIDAgLTI1LjUgMTYuNXQ4LjUgMzEuNWwzODMgNDMxcTE0IDE2IDMzLjUgMTd0MzMuNSAtMTR6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXogTTkwMCAyMDB2LTUwaDEwMHY1MGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjg7IiBkPSJNMzk2IDcyM2wzNjkgMzY5cTcgNyAxNy41IDd0MTcuNSAtN2wxMzkgLTEzOXE3IC04IDcgLTE4LjV0LTcgLTE3LjVsLTUyNSAtNTI1cS03IC04IC0xNy41IC04dC0xNy41IDhsLTI5MiAyOTFxLTcgOCAtNyAxOHQ3IDE4bDEzOSAxMzlxOCA3IDE4LjUgN3QxNy41IC03ek01MCAzMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAyMDB2LTUwaDEwMHY1MCBoLTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTY5OyIgZD0iTTEzNSAxMDIzbDE0MiAxNDJxMTQgMTQgMzUgMTR0MzUgLTE0bDc3IC03N2wtMjEyIC0yMTJsLTc3IDc2cS0xNCAxNSAtMTQgMzZ0MTQgMzV6TTY1NSA4NTVsMjEwIDIxMHExNCAxNCAyNC41IDEwdDEwLjUgLTI1bC0yIC01OTlxLTEgLTIwIC0xNS41IC0zNXQtMzUuNSAtMTVsLTU5NyAtMXEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIwOCAyMDhsLTE1NCAxNTVsMjEyIDIxMnpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0zNTAgMTIwMGw1OTkgLTJxMjAgLTEgMzUgLTE1LjV0MTUgLTM1LjVsMSAtNTk3cTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtMjA4IDIwOGwtMTU1IC0xNTRsLTIxMiAyMTJsMTU1IDE1NGwtMjEwIDIxMHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNNTI0IDUxMmwtNzYgLTc3cS0xNSAtMTQgLTM2IC0xNHQtMzUgMTRsLTE0MiAxNDJxLTE0IDE0IC0xNCAzNXQxNCAzNWw3NyA3N3pNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41IHQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0xMjAwIDEwM2wtNDgzIDI3NmwtMzE0IC0zOTl2NDIzaC0zOTlsMTE5NiA3OTZ2LTEwOTZ6TTQ4MyA0MjR2LTIzMGw2ODMgOTUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMTEwMCAxMDAwdi04NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzM7IiBkPSJNMTEwMCAxMDAwbC0yIC0xNDlsLTI5OSAtMjk5bC05NSA5NXEtOSA5IC0yMS41IDl0LTIxLjUgLTlsLTE0OSAtMTQ3aC0zMTJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTEzMiA2MzhsMTA2IC0xMDZxNyAtNyA3IC0xNy41dC03IC0xNy41bC00MjAgLTQyMXEtOCAtNyAtMTggLTcgdC0xOCA3bC0yMDIgMjAzcS04IDcgLTggMTcuNXQ4IDE3LjVsMTA2IDEwNnE3IDggMTcuNSA4dDE3LjUgLThsNzkgLTc5bDI5NyAyOTdxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMTEwMCAxMDAwdi0yNjlsLTEwMyAtMTAzbC0xMzQgMTM0cS0xNSAxNSAtMzMuNSAxNi41dC0zNC41IC0xMi41bC0yNjYgLTI2NmgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTEyMDIgNTcybDcwIC03MHExNSAtMTUgMTUgLTM1LjV0LTE1IC0zNS41bC0xMzEgLTEzMSBsMTMxIC0xMzFxMTUgLTE1IDE1IC0zNS41dC0xNSAtMzUuNWwtNzAgLTcwcS0xNSAtMTUgLTM1LjUgLTE1dC0zNS41IDE1bC0xMzEgMTMxbC0xMzEgLTEzMXEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtNzAgNzBxLTE1IDE1IC0xNSAzNS41dDE1IDM1LjVsMTMxIDEzMWwtMTMxIDEzMXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWw3MCA3MHExNSAxNSAzNS41IDE1dDM1LjUgLTE1bDEzMSAtMTMxbDEzMSAxMzFxMTUgMTUgMzUuNSAxNSB0MzUuNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0xMTAwIDEwMDB2LTMwMGgtMzUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTBoLTUwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAwek04NTAgNjAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNSBsLTIzMCAtMjMwcS0xNCAtMTQgLTM1IC0xNHQtMzUgMTRsLTIzMCAyMzBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0xMTAwIDEwMDB2LTQwMGwtMTY1IDE2NXEtMTQgMTUgLTM1IDE1dC0zNSAtMTVsLTI2MyAtMjY1aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNOTM1IDU2NWwyMzAgLTIyOXExNCAtMTUgMTAgLTI1LjV0LTI1IC0xMC41aC0xNTB2LTI1MHEwIC0yMCAtMTQuNSAtMzUgdC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1djI1MGgtMTUwcS0yMSAwIC0yNSAxMC41dDEwIDI1LjVsMjMwIDIyOXExNCAxNSAzNSAxNXQzNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NzsiIGQ9Ik01MCAxMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtMTIwMHYxNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjAwIDgwMHYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1NTBoMTIwMHpNMTAwIDUwMHYtMjAwaDQwMHYyMDBoLTQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTkzNSAxMTY1bDI0OCAtMjMwcTE0IC0xNCAxNCAtMzV0LTE0IC0zNWwtMjQ4IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC00MDB2MjAwaDQwMHYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEwek0yMDAgODAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHYtMjAwek00MDAgODAwaC0xMDB2MjAwaDEwMHYtMjAwek0xOCA0MzVsMjQ3IDIzMCBxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMTUwaDQwMHYtMjAwaC00MDB2LTE1MHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTI0NyAyMzBxLTE1IDE0IC0xNSAzNXQxNSAzNXpNOTAwIDMwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTAwMCA1MDBoNTFxMjAgMCAzNC41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzQuNSAtMTQuNWgtNTF2MjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNODYyIDEwNzNsMjc2IDExNnEyNSAxOCA0My41IDh0MTguNSAtNDF2LTExMDZxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2Mzk3cS00IDEgLTExIDV0LTI0IDE3LjV0LTMwIDI5dC0yNCA0MnQtMTEgNTYuNXYzNTlxMCAzMSAxOC41IDY1dDQzLjUgNTJ6TTU1MCAxMjAwcTIyIDAgMzQuNSAtMTIuNXQxNC41IC0yNC41bDEgLTEzdi00NTBxMCAtMjggLTEwLjUgLTU5LjUgdC0yNSAtNTZ0LTI5IC00NXQtMjUuNSAtMzEuNWwtMTAgLTExdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3cS00IDQgLTExIDExLjV0LTI0IDMwLjV0LTMwIDQ2dC0yNCA1NXQtMTEgNjB2NDUwcTAgMiAwLjUgNS41dDQgMTJ0OC41IDE1dDE0LjUgMTJ0MjIuNSA1LjVxMjAgMCAzMi41IC0xMi41dDE0LjUgLTI0LjVsMyAtMTN2LTM1MGgxMDB2MzUwdjUuNXQyLjUgMTIgdDcgMTV0MTUgMTJ0MjUuNSA1LjVxMjMgMCAzNS41IC0xMi41dDEzLjUgLTI0LjVsMSAtMTN2LTM1MGgxMDB2MzUwcTAgMiAwLjUgNS41dDMgMTJ0NyAxNXQxNSAxMnQyNC41IDUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEyMDAgMTEwMHYtNTZxLTQgMCAtMTEgLTAuNXQtMjQgLTN0LTMwIC03LjV0LTI0IC0xNXQtMTEgLTI0di04ODhxMCAtMjIgMjUgLTM0LjV0NTAgLTEzLjVsMjUgLTJ2LTU2aC00MDB2NTZxNzUgMCA4Ny41IDYuNXQxMi41IDQzLjV2Mzk0aC01MDB2LTM5NHEwIC0zNyAxMi41IC00My41dDg3LjUgLTYuNXYtNTZoLTQwMHY1NnE0IDAgMTEgMC41dDI0IDN0MzAgNy41dDI0IDE1dDExIDI0djg4OHEwIDIyIC0yNSAzNC41dC01MCAxMy41IGwtMjUgMnY1Nmg0MDB2LTU2cS03NSAwIC04Ny41IC02LjV0LTEyLjUgLTQzLjV2LTM5NGg1MDB2Mzk0cTAgMzcgLTEyLjUgNDMuNXQtODcuNSA2LjV2NTZoNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNNjc1IDEwMDBoMzc1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTEwNWwtMjk1IC05OHY5OGwtMjAwIDIwMGgtNDAwbDEwMCAxMDBoMzc1ek0xMDAgOTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0zMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTEwMCA4MDB2LTIwMGgzMDB2MjAwIGgtMzAwek0xMTAwIDUzNWwtNDAwIC0xMzN2MTYzbDQwMCAxMzN2LTE2M3pNMTAwIDUwMHYtMjAwaDMwMHYyMDBoLTMwMHpNMTEwMCAzOTh2LTI0OHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzc1bC0xMDAgLTEwMGgtMzc1bC0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTgyOyIgZD0iTTE3IDEwMDdsMTYyIDE2MnExNyAxNyA0MCAxNHQzNyAtMjJsMTM5IC0xOTRxMTQgLTIwIDExIC00NC41dC0yMCAtNDEuNWwtMTE5IC0xMThxMTAyIC0xNDIgMjI4IC0yNjh0MjY3IC0yMjdsMTE5IDExOHExNyAxNyA0Mi41IDE5dDQ0LjUgLTEybDE5MiAtMTM2cTE5IC0xNCAyMi41IC0zNy41dC0xMy41IC00MC41bC0xNjMgLTE2MnEtMyAtMSAtOS41IC0xdC0yOS41IDJ0LTQ3LjUgNnQtNjIuNSAxNC41dC03Ny41IDI2LjV0LTkwIDQyLjUgdC0xMDEuNSA2MHQtMTExIDgzdC0xMTkgMTA4LjVxLTc0IDc0IC0xMzMuNSAxNTAuNXQtOTQuNSAxMzguNXQtNjAgMTE5LjV0LTM0LjUgMTAwdC0xNSA3NC41dC00LjUgNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MzsiIGQ9Ik02MDAgMTEwMHE5MiAwIDE3NSAtMTAuNXQxNDEuNSAtMjd0MTA4LjUgLTM2LjV0ODEuNSAtNDB0NTMuNSAtMzd0MzEgLTI3bDkgLTEwdi0yMDBxMCAtMjEgLTE0LjUgLTMzdC0zNC41IC05bC0yMDIgMzRxLTIwIDMgLTM0LjUgMjB0LTE0LjUgMzh2MTQ2cS0xNDEgMjQgLTMwMCAyNHQtMzAwIC0yNHYtMTQ2cTAgLTIxIC0xNC41IC0zOHQtMzQuNSAtMjBsLTIwMiAtMzRxLTIwIC0zIC0zNC41IDl0LTE0LjUgMzN2MjAwcTMgNCA5LjUgMTAuNSB0MzEgMjZ0NTQgMzcuNXQ4MC41IDM5LjV0MTA5IDM3LjV0MTQxIDI2LjV0MTc1IDEwLjV6TTYwMCA3OTVxNTYgMCA5NyAtOS41dDYwIC0yMy41dDMwIC0yOHQxMiAtMjRsMSAtMTB2LTUwbDM2NSAtMzAzcTE0IC0xNSAyNC41IC00MHQxMC41IC00NXYtMjEycTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMTJxMCAyMCAxMC41IDQ1dDI0LjUgNDBsMzY1IDMwM3Y1MCBxMCA0IDEgMTAuNXQxMiAyM3QzMCAyOXQ2MCAyMi41dDk3IDEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTEwMCA3MDBsLTIwMCAtMjAwaC02MDBsLTIwMCAyMDB2NTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdi0yMDBoMjAwdjIwMGgyMDB2LTUwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODU7IiBkPSJNNzAwIDExMDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtMTAwMGgzMDB2MTAwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMTEwMCA4MDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNzAwaDMwMHY3MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTQwMCAwaC0zMDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDcwMHYtMzAwbC0xMDAgLTEwMGgtMjAwdjUwMGgyMDB6IE03MDAgNzAwdi0zMDBoMTAwdjMwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODc7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCAzMDBoLTEwMHYyMDBoLTEwMHYtMjAwaC0xMDB2NTAwaDEwMHYtMjAwaDEwMHYyMDBoMTAwdi01MDB6TTkwMCA3MDB2LTMwMGwtMTAwIC0xMDBoLTIwMHY1MDBoMjAweiBNNzAwIDcwMHYtMzAwaDEwMHYzMDBoLTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNzAwaC0yMDB2LTMwMGgyMDB2LTEwMGgtMzAwdjUwMGgzMDB2LTEwMHpNOTAwIDcwMGgtMjAwdi0zMDBoMjAwdi0xMDBoLTMwMHY1MDBoMzAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDQwMGwtMzAwIDE1MGwzMDAgMTUwdi0zMDB6TTkwMCA1NTBsLTMwMCAtMTUwdjMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek05MDAgMzAwaC03MDB2NTAwaDcwMHYtNTAwek04MDAgNzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh0MjcgLTEwN3Q2OCAtNDJoMTMwdjMwMHpNMzAwIDcwMHYtMzAwIGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNMzAwIDcwMGgyMDB2LTQwMGgtMzAwdjUwMGgxMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMzAwIDYwMHYtMjAwaDEwMHYyMDBoLTEwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDUwMGwtMTk5IC0yMDBoLTEwMHY1MGwxOTkgMjAwdjE1MGgtMjAwdjEwMGgzMDB2LTMwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNNzAxIDMwMGgtMTAwIHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik02MDAgMTE5MXExMjAgMCAyMjkuNSAtNDd0MTg4LjUgLTEyNnQxMjYgLTE4OC41dDQ3IC0yMjkuNXQtNDcgLTIyOS41dC0xMjYgLTE4OC41dC0xODguNSAtMTI2dC0yMjkuNSAtNDd0LTIyOS41IDQ3dC0xODguNSAxMjZ0LTEyNiAxODguNXQtNDcgMjI5LjV0NDcgMjI5LjV0MTI2IDE4OC41dDE4OC41IDEyNnQyMjkuNSA0N3pNNjAwIDEwMjFxLTExNCAwIC0yMTEgLTU2LjV0LTE1My41IC0xNTMuNXQtNTYuNSAtMjExdDU2LjUgLTIxMSB0MTUzLjUgLTE1My41dDIxMSAtNTYuNXQyMTEgNTYuNXQxNTMuNSAxNTMuNXQ1Ni41IDIxMXQtNTYuNSAyMTF0LTE1My41IDE1My41dC0yMTEgNTYuNXpNODAwIDcwMGgtMzAwdi0yMDBoMzAwdi0xMDBoLTMwMGwtMTAwIDEwMHYyMDBsMTAwIDEwMGgzMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTYwMCAxMTkxcTEyMCAwIDIyOS41IC00N3QxODguNSAtMTI2dDEyNiAtMTg4LjV0NDcgLTIyOS41dC00NyAtMjI5LjV0LTEyNiAtMTg4LjV0LTE4OC41IC0xMjZ0LTIyOS41IC00N3QtMjI5LjUgNDd0LTE4OC41IDEyNnQtMTI2IDE4OC41dC00NyAyMjkuNXQ0NyAyMjkuNXQxMjYgMTg4LjV0MTg4LjUgMTI2dDIyOS41IDQ3ek02MDAgMTAyMXEtMTE0IDAgLTIxMSAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTF0NTYuNSAtMjExIHQxNTMuNSAtMTUzLjV0MjExIC01Ni41dDIxMSA1Ni41dDE1My41IDE1My41dDU2LjUgMjExdC01Ni41IDIxMXQtMTUzLjUgMTUzLjV0LTIxMSA1Ni41ek04MDAgNzAwdi0xMDBsLTUwIC01MGwxMDAgLTEwMHYtNTBoLTEwMGwtMTAwIDEwMGgtMTUwdi0xMDBoLTEwMHY0MDBoMzAwek01MDAgNzAwdi0xMDBoMjAwdjEwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTc7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA3dC04NSAtMjA3dC0yMDUgLTg2LjVoLTEyOHYyNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMjUwaC0yMjJxLTgwIDAgLTEzNiA1Ny41dC01NiAxMzYuNXEwIDY5IDQzIDEyMi41dDEwOCA2Ny41cS0yIDE5IC0yIDM3cTAgMTAwIDQ5IDE4NSB0MTM0IDEzNHQxODUgNDl6TTUyNSA1MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMjc1aDEzN3EyMSAwIDI2IC0xMS41dC04IC0yNy41bC0yMjMgLTI0NHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0yMjMgMjQ0cS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMTM3djI3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNNTAyIDEwODlxMTEwIDAgMjAxIC01OS41dDEzNSAtMTU2LjVxNDMgMTUgODkgMTVxMTIxIDAgMjA2IC04Ni41dDg2IC0yMDYuNXEwIC05OSAtNjAgLTE4MXQtMTUwIC0xMTBsLTM3OCAzNjBxLTEzIDE2IC0zMS41IDE2dC0zMS41IC0xNmwtMzgxIC0zNjVoLTlxLTc5IDAgLTEzNS41IDU3LjV0LTU2LjUgMTM2LjVxMCA2OSA0MyAxMjIuNXQxMDggNjcuNXEtMiAxOSAtMiAzOHEwIDEwMCA0OSAxODQuNXQxMzMuNSAxMzR0MTg0LjUgNDkuNXogTTYzMiA0NjdsMjIzIC0yMjhxMTMgLTE2IDggLTI3LjV0LTI2IC0xMS41aC0xMzd2LTI3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI3NWgtMTM3cS0yMSAwIC0yNiAxMS41dDggMjcuNXExOTkgMjA0IDIyMyAyMjhxMTkgMTkgMzEuNSAxOXQzMi41IC0xOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTcwMCAxMDB2MTAwaDQwMGwtMjcwIDMwMGgxNzBsLTI3MCAzMDBoMTcwbC0zMDAgMzMzbC0zMDAgLTMzM2gxNzBsLTI3MCAtMzAwaDE3MGwtMjcwIC0zMDBoNDAwdi0xMDBoLTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di01MGg0MDB2NTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNNjAwIDExNzlxOTQgMCAxNjcuNSAtNTYuNXQ5OS41IC0xNDUuNXE4OSAtNiAxNTAuNSAtNzEuNXQ2MS41IC0xNTUuNXEwIC02MSAtMjkuNSAtMTEyLjV0LTc5LjUgLTgyLjVxOSAtMjkgOSAtNTVxMCAtNzQgLTUyLjUgLTEyNi41dC0xMjYuNSAtNTIuNXEtNTUgMCAtMTAwIDMwdi0yNTFxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0zMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41djI1MXEtNDUgLTMwIC0xMDAgLTMwIHEtNzQgMCAtMTI2LjUgNTIuNXQtNTIuNSAxMjYuNXEwIDE4IDQgMzhxLTQ3IDIxIC03NS41IDY1dC0yOC41IDk3cTAgNzQgNTIuNSAxMjYuNXQxMjYuNSA1Mi41cTUgMCAyMyAtMnEwIDIgLTEgMTB0LTEgMTNxMCAxMTYgODEuNSAxOTcuNXQxOTcuNSA4MS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDE7IiBkPSJNMTAxMCAxMDEwcTExMSAtMTExIDE1MC41IC0yNjAuNXQwIC0yOTl0LTE1MC41IC0yNjAuNXEtODMgLTgzIC0xOTEuNSAtMTI2LjV0LTIxOC41IC00My41dC0yMTguNSA0My41dC0xOTEuNSAxMjYuNXEtMTExIDExMSAtMTUwLjUgMjYwLjV0MCAyOTl0MTUwLjUgMjYwLjVxODMgODMgMTkxLjUgMTI2LjV0MjE4LjUgNDMuNXQyMTguNSAtNDMuNXQxOTEuNSAtMTI2LjV6TTQ3NiAxMDY1cS00IDAgLTggLTFxLTEyMSAtMzQgLTIwOS41IC0xMjIuNSB0LTEyMi41IC0yMDkuNXEtNCAtMTIgMi41IC0yM3QxOC41IC0xNGwzNiAtOXEzIC0xIDcgLTFxMjMgMCAyOSAyMnEyNyA5NiA5OCAxNjZxNzAgNzEgMTY2IDk4cTExIDMgMTcuNSAxMy41dDMuNSAyMi41bC05IDM1cS0zIDEzIC0xNCAxOXEtNyA0IC0xNSA0ek01MTIgOTIwcS00IDAgLTkgLTJxLTgwIC0yNCAtMTM4LjUgLTgyLjV0LTgyLjUgLTEzOC41cS00IC0xMyAyIC0yNHQxOSAtMTRsMzQgLTlxNCAtMSA4IC0xcTIyIDAgMjggMjEgcTE4IDU4IDU4LjUgOTguNXQ5Ny41IDU4LjVxMTIgMyAxOCAxMy41dDMgMjEuNWwtOSAzNXEtMyAxMiAtMTQgMTlxLTcgNCAtMTUgNHpNNzE5LjUgNzE5LjVxLTQ5LjUgNDkuNSAtMTE5LjUgNDkuNXQtMTE5LjUgLTQ5LjV0LTQ5LjUgLTExOS41dDQ5LjUgLTExOS41dDExOS41IC00OS41dDExOS41IDQ5LjV0NDkuNSAxMTkuNXQtNDkuNSAxMTkuNXpNODU1IDU1MXEtMjIgMCAtMjggLTIxcS0xOCAtNTggLTU4LjUgLTk4LjV0LTk4LjUgLTU3LjUgcS0xMSAtNCAtMTcgLTE0LjV0LTMgLTIxLjVsOSAtMzVxMyAtMTIgMTQgLTE5cTcgLTQgMTUgLTRxNCAwIDkgMnE4MCAyNCAxMzguNSA4Mi41dDgyLjUgMTM4LjVxNCAxMyAtMi41IDI0dC0xOC41IDE0bC0zNCA5cS00IDEgLTggMXpNMTAwMCA1MTVxLTIzIDAgLTI5IC0yMnEtMjcgLTk2IC05OCAtMTY2cS03MCAtNzEgLTE2NiAtOThxLTExIC0zIC0xNy41IC0xMy41dC0zLjUgLTIyLjVsOSAtMzVxMyAtMTMgMTQgLTE5cTcgLTQgMTUgLTQgcTQgMCA4IDFxMTIxIDM0IDIwOS41IDEyMi41dDEyMi41IDIwOS41cTQgMTIgLTIuNSAyM3QtMTguNSAxNGwtMzYgOXEtMyAxIC03IDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMjsiIGQ9Ik03MDAgODAwaDMwMHYtMzgwaC0xODB2MjAwaC0zNDB2LTIwMGgtMzgwdjc1NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDU3NXYtNDAwek0xMDAwIDkwMGgtMjAwdjIwMHpNNzAwIDMwMGgxNjJsLTIxMiAtMjEybC0yMTIgMjEyaDE2MnYyMDBoMTAwdi0yMDB6TTUyMCAwaC0zOTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzOTV6TTEwMDAgMjIwdi0xOTVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xOTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMzsiIGQ9Ik03MDAgODAwaDMwMHYtNTIwbC0zNTAgMzUwbC01NTAgLTU1MHYxMDk1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek04NjIgMjAwaC0xNjJ2LTIwMGgtMTAwdjIwMGgtMTYybDIxMiAyMTJ6TTQ4MCAwaC0zNTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NWgzODB2LTgwek0xMDAwIDgwdi01NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1NXY4MGgxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwNDsiIGQ9Ik0xMTYyIDgwMGgtMTYydi0yMDBoMTAwbDEwMCAtMTAwaC0zMDB2MzAwaC0xNjJsMjEyIDIxMnpNMjAwIDgwMGgyMDBxMjcgMCA0MCAtMnQyOS41IC0xMC41dDIzLjUgLTMwdDcgLTU3LjVoMzAwdi0xMDBoLTYwMGwtMjAwIC0zNTB2NDUwaDEwMHEwIDM2IDcgNTcuNXQyMy41IDMwdDI5LjUgMTAuNXQ0MCAyek04MDAgNDAwaDI0MGwtMjQwIC00MDBoLTgwMGwzMDAgNTAwaDUwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDU7IiBkPSJNNjUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMDAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTgwMCBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTYwMHEtMSAwIC0yMCA0bDI0NiAyNDZsLTMyNiAzMjZ2MzI0cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXYtMTUwcTAgLTYyIDQ0IC0xMDZ0MTA2IC00NGgzMDBxNjIgMCAxMDYgNDR0NDQgMTA2ek00MTIgMjUwbC0yMTIgLTIxMnYxNjJoLTIwMHYxMDBoMjAwdjE2MnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjA2OyIgZD0iTTQ1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTUwMCBoLTIwMHYtMzAwaDIwMHEwIC0zNiAtNyAtNTcuNXQtMjMuNSAtMzB0LTI5LjUgLTEwLjV0LTQwIC0yaC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djgwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV2LTE1MHEwIC02MiA0NCAtMTA2dDEwNiAtNDRoMzAwcTYyIDAgMTA2IDQ0dDQ0IDEwNnpNMTIxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDk7IiBkPSJNNjU4IDExOTdsNjM3IC0xMTA0cTIzIC0zOCA3IC02NS41dC02MCAtMjcuNWgtMTI3NnEtNDQgMCAtNjAgMjcuNXQ3IDY1LjVsNjM3IDExMDRxMjIgMzkgNTQgMzl0NTQgLTM5ek03MDQgODAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41dDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMiAxNC41ek01MDAgMzAwdi0xMDBoMjAwIHYxMDBoLTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjEwOyIgZD0iTTQyNSAxMTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgODAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41IHQxNy41IDcuNXpNODI1IDgwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNODI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNSB2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTgyNSAyMDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMTsiIGQ9Ik03MDAgMTIwMGgxMDB2LTIwMGgtMTAwdi0xMDBoMzUwcTYyIDAgODYuNSAtMzkuNXQtMy41IC05NC41bC02NiAtMTMycS00MSAtODMgLTgxIC0xMzRoLTc3MnEtNDAgNTEgLTgxIDEzNGwtNjYgMTMycS0yOCA1NSAtMy41IDk0LjV0ODYuNSAzOS41aDM1MHYxMDBoLTEwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwIGgtOTUwbDEzOCAxMDBoLTEzcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTI7IiBkPSJNNjAwIDEzMDBxNDAgMCA2OC41IC0yOS41dDI4LjUgLTcwLjVoLTE5NHEwIDQxIDI4LjUgNzAuNXQ2OC41IDI5LjV6TTQ0MyAxMTAwaDMxNHExOCAtMzcgMTggLTc1cTAgLTggLTMgLTI1aDMyOHE0MSAwIDQ0LjUgLTE2LjV0LTMwLjUgLTM4LjVsLTE3NSAtMTQ1aC02NzhsLTE3OCAxNDVxLTM0IDIyIC0yOSAzOC41dDQ2IDE2LjVoMzI4cS0zIDE3IC0zIDI1cTAgMzggMTggNzV6TTI1MCA3MDBoNzAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTUwdi0yMDBsMjc1IC0yMDBoLTk1MGwyNzUgMjAwdjIwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTM7IiBkPSJNNjAwIDExODFxNzUgMCAxMjggLTUzdDUzIC0xMjh0LTUzIC0xMjh0LTEyOCAtNTN0LTEyOCA1M3QtNTMgMTI4dDUzIDEyOHQxMjggNTN6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTMgbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNDsiIGQ9Ik02MDAgMTMwMHE0NyAwIDkyLjUgLTUzLjV0NzEgLTEyM3QyNS41IC0xMjMuNXEwIC03OCAtNTUuNSAtMTMzLjV0LTEzMy41IC01NS41dC0xMzMuNSA1NS41dC01NS41IDEzMy41cTAgNjIgMzQgMTQzbDE0NCAtMTQzbDExMSAxMTFsLTE2MyAxNjNxMzQgMjYgNjMgMjZ6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1IHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNTsiIGQ9Ik02MDAgMTIwMGwzMDAgLTE2MXYtMTM5aC0zMDBxMCAtNTcgMTguNSAtMTA4dDUwIC05MS41dDYzIC03MnQ3MCAtNjcuNXQ1Ny41IC02MWgtNTMwcS02MCA4MyAtOTAuNSAxNzcuNXQtMzAuNSAxNzguNXQzMyAxNjQuNXQ4Ny41IDEzOS41dDEyNiA5Ni41dDE0NS41IDQxLjV2LTk4ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTNsMTM4IC0xMDBoLTk1MGwxMzcgMTAwIGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNjsiIGQ9Ik02MDAgMTMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNzhxNDYgLTI2IDczIC03MnQyNyAtMTAwdi01MGgtNDAwdjUwcTAgNTQgMjcgMTAwdDczIDcydjc4cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNDAwIDgwMGg0MDBxNTQgMCAxMDAgLTI3dDcyIC03M2gtMTcydi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgyMDBxMCAtODMgLTU4LjUgLTE0MS41dC0xNDEuNSAtNTguNWgtNDAwIHEtODMgMCAtMTQxLjUgNTguNXQtNTguNSAxNDEuNXY0MDBxMCA4MyA1OC41IDE0MS41dDE0MS41IDU4LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxODsiIGQ9Ik0xNTAgMTEwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjUgNDAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjgzbDIyNCAtMjI0cTEzIC0xMyAxMyAtMzEuNXQtMTMgLTMyIHQtMzEuNSAtMTMuNXQtMzEuNSAxM2wtODggODhoLTUyNGwtODcgLTg4cS0xMyAtMTMgLTMyIC0xM3QtMzIgMTMuNXQtMTMgMzJ0MTMgMzEuNWwyMjQgMjI0aC0yODlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01NDEgMzAwbC0xMDAgLTEwMGgzMjRsLTEwMCAxMDBoLTEyNHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjE5OyIgZD0iTTIwMCAxMTAwaDgwMHE4MyAwIDE0MS41IC01OC41dDU4LjUgLTE0MS41di0yMDBoLTEwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMjUwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41aC0xMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTI1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNWgtMTAwdjIwMHEwIDgzIDU4LjUgMTQxLjV0MTQxLjUgNTguNXpNMTAwIDYwMGgxMDAwcTQxIDAgNzAuNSAtMjkuNSB0MjkuNSAtNzAuNXYtMzAwaC0xMjAwdjMwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTMwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHpNMTEwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjIxOyIgZD0iTTQ4MCAxMTY1bDY4MiAtNjgzcTMxIC0zMSAzMSAtNzUuNXQtMzEgLTc1LjVsLTEzMSAtMTMxaC00ODFsLTUxNyA1MThxLTMyIDMxIC0zMiA3NS41dDMyIDc1LjVsMjk1IDI5NnEzMSAzMSA3NS41IDMxdDc2LjUgLTMxek0xMDggNzk0bDM0MiAtMzQybDMwMyAzMDRsLTM0MSAzNDF6TTI1MCAxMDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtOTAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjIzOyIgZD0iTTEwNTcgNjQ3bC0xODkgNTA2cS04IDE5IC0yNy41IDMzdC00MC41IDE0aC00MDBxLTIxIDAgLTQwLjUgLTE0dC0yNy41IC0zM2wtMTg5IC01MDZxLTggLTE5IDEuNSAtMzN0MzAuNSAtMTRoNjI1di0xNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41dDM1LjUgMTQuNXQxNC41IDM1LjV2MTUwaDEyNXEyMSAwIDMwLjUgMTR0MS41IDMzek04OTcgMGgtNTk1djUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ4djMwMGgyMDB2LTMwMGg0N3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjQ7IiBkPSJNOTAwIDgwMGgzMDB2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM3NXY1OTFsLTMwMCAzMDB2ODRxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNMTIwMCA5MDBoLTIwMHYyMDB6TTQwMCA2MDBoMzAwdi01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC02NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNNzAwIDcwMGgtMjAwdjIwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIyNTsiIGQ9Ik00ODQgMTA5NWgxOTVxNzUgMCAxNDYgLTMyLjV0MTI0IC04NnQ4OS41IC0xMjIuNXQ0OC41IC0xNDJxMTggLTE0IDM1IC0yMHEzMSAtMTAgNjQuNSA2LjV0NDMuNSA0OC41cTEwIDM0IC0xNSA3MXEtMTkgMjcgLTkgNDNxNSA4IDEyLjUgMTF0MTkgLTF0MjMuNSAtMTZxNDEgLTQ0IDM5IC0xMDVxLTMgLTYzIC00NiAtMTA2LjV0LTEwNCAtNDMuNWgtNjJxLTcgLTU1IC0zNSAtMTE3dC01NiAtMTAwbC0zOSAtMjM0cS0zIC0yMCAtMjAgLTM0LjUgdC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMTIgNzBxLTQ5IC0xNCAtOTEgLTE0aC0xOTVxLTI0IDAgLTY1IDhsLTExIC02NHEtMyAtMjAgLTIwIC0zNC41dC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMjYgMTU3cS04NCA3NCAtMTI4IDE3NWwtMTU5IDUzcS0xOSA3IC0zMyAyNnQtMTQgNDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEyNHExMSA4NyA1NiAxNjZsLTExMSA5NSBxLTE2IDE0IC0xMi41IDIzLjV0MjQuNSA5LjVoMjAzcTExNiAxMDEgMjUwIDEwMXpNNjc1IDEwMDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMjUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjY7IiBkPSJNNjQxIDkwMGw0MjMgMjQ3cTE5IDggNDIgMi41dDM3IC0yMS41bDMyIC0zOHExNCAtMTUgMTIuNSAtMzZ0LTE3LjUgLTM0bC0xMzkgLTEyMGgtMzkwek01MCAxMTAwaDEwNnE2NyAwIDEwMyAtMTd0NjYgLTcxbDEwMiAtMjEyaDgyM3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBxMCAtMjEgLTE0IC00MHQtMzMgLTI2bC03MzcgLTEzMnEtMjMgLTQgLTQwIDZ0LTI2IDI1cS00MiA2NyAtMTAwIDY3aC0zMDBxLTYyIDAgLTEwNiA0NCB0LTQ0IDEwNnYyMDBxMCA2MiA0NCAxMDZ0MTA2IDQ0ek0xNzMgOTI4aC04MHEtMTkgMCAtMjggLTE0dC05IC0zNXYtNTZxMCAtNTEgNDIgLTUxaDEzNHExNiAwIDIxLjUgOHQ1LjUgMjRxMCAxMSAtMTYgNDV0LTI3IDUxcS0xOCAyOCAtNDMgMjh6TTU1MCA3MjdxLTMyIDAgLTU0LjUgLTIyLjV0LTIyLjUgLTU0LjV0MjIuNSAtNTQuNXQ1NC41IC0yMi41dDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41ek0xMzAgMzg5IGwxNTIgMTMwcTE4IDE5IDM0IDI0dDMxIC0zLjV0MjQuNSAtMTcuNXQyNS41IC0yOHEyOCAtMzUgNTAuNSAtNTF0NDguNSAtMTNsNjMgNWw0OCAtMTc5cTEzIC02MSAtMy41IC05Ny41dC02Ny41IC03OS41bC04MCAtNjlxLTQ3IC00MCAtMTA5IC0zNS41dC0xMDMgNTEuNWwtMTMwIDE1MXEtNDAgNDcgLTM1LjUgMTA5LjV0NTEuNSAxMDIuNXpNMzgwIDM3N2wtMTAyIC04OHEtMzEgLTI3IDIgLTY1bDM3IC00M3ExMyAtMTUgMjcuNSAtMTkuNSB0MzEuNSA2LjVsNjEgNTNxMTkgMTYgMTQgNDlxLTIgMjAgLTEyIDU2dC0xNyA0NXEtMTEgMTIgLTE5IDE0dC0yMyAtOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjI3OyIgZD0iTTYyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwOXE3OSAtMzMgMTMxIC04Ny41dDUzIC0xMjguNXExIC00NiAtMTUgLTg0LjV0LTM5IC02MXQtNDYgLTM4dC0zOSAtMjEuNWwtMTcgLTZxNiAwIDE1IC0xLjV0MzUgLTl0NTAgLTE3LjV0NTMgLTMwdDUwIC00NXQzNS41IC02NHQxNC41IC04NHEwIC01OSAtMTEuNSAtMTA1LjV0LTI4LjUgLTc2LjV0LTQ0IC01MXQtNDkuNSAtMzEuNXQtNTQuNSAtMTZ0LTQ5LjUgLTYuNSB0LTQzLjUgLTF2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTEwMHYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtMTc1cS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNzV2NjAwaC03NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNzV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWgxMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDAwIDkwMHYtMjAwaDI2M3EyOCAwIDQ4LjUgMTAuNXQzMCAyNXQxNSAyOXQ1LjUgMjUuNWwxIDEwcTAgNCAtMC41IDExdC02IDI0dC0xNSAzMHQtMzAgMjR0LTQ4LjUgMTFoLTI2M3pNNDAwIDUwMHYtMjAwaDM2M3EyOCAwIDQ4LjUgMTAuNSB0MzAgMjV0MTUgMjl0NS41IDI1LjVsMSAxMHEwIDQgLTAuNSAxMXQtNiAyNHQtMTUgMzB0LTMwIDI0dC00OC41IDExaC0zNjN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMDsiIGQ9Ik0yMTIgMTE5OGg3ODBxODYgMCAxNDcgLTYxdDYxIC0xNDd2LTQxNnEwIC01MSAtMTggLTE0Mi41dC0zNiAtMTU3LjVsLTE4IC02NnEtMjkgLTg3IC05My41IC0xNDYuNXQtMTQ2LjUgLTU5LjVoLTU3MnEtODIgMCAtMTQ3IDU5dC05MyAxNDdxLTggMjggLTIwIDczdC0zMiAxNDMuNXQtMjAgMTQ5LjV2NDE2cTAgODYgNjEgMTQ3dDE0NyA2MXpNNjAwIDEwNDVxLTcwIDAgLTEzMi41IC0xMS41dC0xMDUuNSAtMzAuNXQtNzguNSAtNDEuNSB0LTU3IC00NXQtMzYgLTQxdC0yMC41IC0zMC41bC02IC0xMmwxNTYgLTI0M2g1NjBsMTU2IDI0M3EtMiA1IC02IDEyLjV0LTIwIDI5LjV0LTM2LjUgNDJ0LTU3IDQ0LjV0LTc5IDQydC0xMDUgMjkuNXQtMTMyLjUgMTJ6TTc2MiA3MDNoLTE1N2wxOTUgMjYxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzE7IiBkPSJNNDc1IDEzMDBoMTUwcTEwMyAwIDE4OSAtODZ0ODYgLTE4OXYtNTAwcTAgLTQxIC00MiAtODN0LTgzIC00MmgtNDUwcS00MSAwIC04MyA0MnQtNDIgODN2NTAwcTAgMTAzIDg2IDE4OXQxODkgODZ6TTcwMCAzMDB2LTIyNXEwIC0yMSAtMjcgLTQ4dC00OCAtMjdoLTE1MHEtMjEgMCAtNDggMjd0LTI3IDQ4djIyNWgzMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMjsiIGQ9Ik00NzUgMTMwMGg5NnEwIC0xNTAgODkuNSAtMjM5LjV0MjM5LjUgLTg5LjV2LTQ0NnEwIC00MSAtNDIgLTgzdC04MyAtNDJoLTQ1MHEtNDEgMCAtODMgNDJ0LTQyIDgzdjUwMHEwIDEwMyA4NiAxODl0MTg5IDg2ek03MDAgMzAwdi0yMjVxMCAtMjEgLTI3IC00OHQtNDggLTI3aC0xNTBxLTIxIDAgLTQ4IDI3dC0yNyA0OHYyMjVoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzM7IiBkPSJNMTI5NCA3NjdsLTYzOCAtMjgzbC0zNzggMTcwbC03OCAtNjB2LTIyNGwxMDAgLTE1MHYtMTk5bC0xNTAgMTQ4bC0xNTAgLTE0OXYyMDBsMTAwIDE1MHYyNTBxMCA0IC0wLjUgMTAuNXQwIDkuNXQxIDh0MyA4dDYuNSA2bDQ3IDQwbC0xNDcgNjVsNjQyIDI4M3pNMTAwMCAzODBsLTM1MCAtMTY2bC0zNTAgMTY2djE0N2wzNTAgLTE2NWwzNTAgMTY1di0xNDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNDsiIGQ9Ik0yNTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek02NTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek0xMDUwIDgwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjM1OyIgZD0iTTU1MCAxMTAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgNzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgMzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzY7IiBkPSJNMTI1IDExMDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEyNSA3MDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjUgdDE3LjUgNy41ek0xMjUgMzAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTk1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzc7IiBkPSJNMzUwIDEyMDBoNTAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTUwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNTAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY1MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek05MDAgMTAwMGgtNjAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDYwMHE0MSAwIDcwLjUgMjkuNSB0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDkwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgODAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzg7IiBkPSJNMTUwIDExMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNSB0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MjAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNWg1MHYyMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41aDUwdjIwMGgtNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzOTsiIGQ9Ik02NTAgMTE4N3E4NyAtNjcgMTE4LjUgLTE1NnQwIC0xNzh0LTExOC41IC0xNTVxLTg3IDY2IC0xMTguNSAxNTV0MCAxNzh0MTE4LjUgMTU2ek0zMDAgODAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAwIDgwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhxMCAxMjQgODggMjEydDIxMiA4OHpNMzAwIDUwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnogTTEwMDAgNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek03MDAgMTk5di0xNDRxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djE0MnE0MCAtNCA0MyAtNHExNyAwIDU3IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MDsiIGQ9Ik03NDUgODc4bDY5IDE5cTI1IDYgNDUgLTEybDI5OCAtMjk1cTExIC0xMSAxNSAtMjYuNXQtMiAtMzAuNXEtNSAtMTQgLTE4IC0yMy41dC0yOCAtOS41aC04cTEgMCAxIC0xM3EwIC0yOSAtMiAtNTZ0LTguNSAtNjJ0LTIwIC02M3QtMzMgLTUzdC01MSAtMzl0LTcyLjUgLTE0aC0xNDZxLTE4NCAwIC0xODQgMjg4cTAgMjQgMTAgNDdxLTIwIDQgLTYyIDR0LTYzIC00cTExIC0yNCAxMSAtNDdxMCAtMjg4IC0xODQgLTI4OGgtMTQyIHEtNDggMCAtODQuNSAyMXQtNTYgNTF0LTMyIDcxLjV0LTE2IDc1dC0zLjUgNjguNXEwIDEzIDIgMTNoLTdxLTE1IDAgLTI3LjUgOS41dC0xOC41IDIzLjVxLTYgMTUgLTIgMzAuNXQxNSAyNS41bDI5OCAyOTZxMjAgMTggNDYgMTFsNzYgLTE5cTIwIC01IDMwLjUgLTIyLjV0NS41IC0zNy41dC0yMi41IC0zMXQtMzcuNSAtNWwtNTEgMTJsLTE4MiAtMTkzaDg5MWwtMTgyIDE5M2wtNDQgLTEycS0yMCAtNSAtMzcuNSA2dC0yMi41IDMxdDYgMzcuNSB0MzEgMjIuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQxOyIgZD0iTTEyMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTUwMCA0NTBoLTI1cTAgMTUgLTQgMjQuNXQtOSAxNC41dC0xNyA3LjV0LTIwIDN0LTI1IDAuNWgtMTAwdi00MjVxMCAtMTEgMTIuNSAtMTcuNXQyNS41IC03LjVoMTJ2LTUwaC0yMDB2NTBxNTAgMCA1MCAyNXY0MjVoLTEwMHEtMTcgMCAtMjUgLTAuNXQtMjAgLTN0LTE3IC03LjV0LTkgLTE0LjV0LTQgLTI0LjVoLTI1djE1MGg1MDB2LTE1MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQyOyIgZD0iTTEwMDAgMzAwdjUwcS0yNSAwIC01NSAzMnEtMTQgMTQgLTI1IDMxdC0xNiAyN2wtNCAxMWwtMjg5IDc0N2gtNjlsLTMwMCAtNzU0cS0xOCAtMzUgLTM5IC01NnEtOSAtOSAtMjQuNSAtMTguNXQtMjYuNSAtMTQuNWwtMTEgLTV2LTUwaDI3M3Y1MHEtNDkgMCAtNzguNSAyMS41dC0xMS41IDY3LjVsNjkgMTc2aDI5M2w2MSAtMTY2cTEzIC0zNCAtMy41IC02Ni41dC01NS41IC0zMi41di01MGgzMTJ6TTQxMiA2OTFsMTM0IDM0MmwxMjEgLTM0MiBoLTI1NXpNMTEwMCAxNTB2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDM7IiBkPSJNNTAgMTIwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjExIDExMThoLTcwcS0xMyAwIC0xOCAtMTJsLTI5OSAtNzUzcS0xNyAtMzIgLTM1IC01MXEtMTggLTE4IC01NiAtMzRxLTEyIC01IC0xMiAtMTh2LTUwcTAgLTggNS41IC0xNHQxNC41IC02IGgyNzNxOCAwIDE0IDZ0NiAxNHY1MHEwIDggLTYgMTR0LTE0IDZxLTU1IDAgLTcxIDIzcS0xMCAxNCAwIDM5bDYzIDE2M2gyNjZsNTcgLTE1M3ExMSAtMzEgLTYgLTU1cS0xMiAtMTcgLTM2IC0xN3EtOCAwIC0xNCAtNnQtNiAtMTR2LTUwcTAgLTggNiAtMTR0MTQgLTZoMzEzcTggMCAxNCA2dDYgMTR2NTBxMCA3IC01LjUgMTN0LTEzLjUgN3EtMTcgMCAtNDIgMjVxLTI1IDI3IC00MCA2M2gtMWwtMjg4IDc0OHEtNSAxMiAtMTkgMTJ6TTYzOSA2MTEgaC0xOTdsMTAzIDI2NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQ0OyIgZD0iTTEyMDAgMTEwMGgtMTIwMHYxMDBoMTIwMHYtMTAwek01MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtOTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djkwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgOTAwdi0zMDBoMzAwdjMwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDU7IiBkPSJNNTAgMTIwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTkwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY5MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgNzAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgNjAwdi0zMDBoMzAwdjMwMGgtMzAwek0xMjAwIDBoLTEyMDB2MTAwaDEyMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQ2OyIgZD0iTTUwIDEwMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoMTAwdi0xMDBoLTEwMHYtMTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djE1MGgtMTAwdi0zNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA3MDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NzsiIGQ9Ik0xMDAgMGgtMTAwdjEyMDBoMTAwdi0xMjAwek0yNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMDAgMTAwMHYtMzAwaDMwMHYzMDBoLTMwMHpNMjUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQ4OyIgZD0iTTYwMCAxMTAwaDE1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTEwMGg0NTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDM1MHYxMDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41IHQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTUwdjEwMGgxMDB2LTEwMHpNNDAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0OTsiIGQ9Ik0xMjAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNNTUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjUwOyIgZD0iTTg2NSA1NjVsLTQ5NCAtNDk0cS0yMyAtMjMgLTQxIC0yM3EtMTQgMCAtMjIgMTMuNXQtOCAzOC41djEwMDBxMCAyNSA4IDM4LjV0MjIgMTMuNXExOCAwIDQxIC0yM2w0OTQgLTQ5NHExNCAtMTQgMTQgLTM1dC0xNCAtMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MTsiIGQ9Ik0zMzUgNjM1bDQ5NCA0OTRxMjkgMjkgNTAgMjAuNXQyMSAtNDkuNXYtMTAwMHEwIC00MSAtMjEgLTQ5LjV0LTUwIDIwLjVsLTQ5NCA0OTRxLTE0IDE0IC0xNCAzNXQxNCAzNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjUyOyIgZD0iTTEwMCA5MDBoMTAwMHE0MSAwIDQ5LjUgLTIxdC0yMC41IC01MGwtNDk0IC00OTRxLTE0IC0xNCAtMzUgLTE0dC0zNSAxNGwtNDk0IDQ5NHEtMjkgMjkgLTIwLjUgNTB0NDkuNSAyMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjUzOyIgZD0iTTYzNSA4NjVsNDk0IC00OTRxMjkgLTI5IDIwLjUgLTUwdC00OS41IC0yMWgtMTAwMHEtNDEgMCAtNDkuNSAyMXQyMC41IDUwbDQ5NCA0OTRxMTQgMTQgMzUgMTR0MzUgLTE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTQ7IiBkPSJNNzAwIDc0MXYtMTgybC02OTIgLTMyM3YyMjFsNDEzIDE5M2wtNDEzIDE5M3YyMjF6TTEyMDAgMGgtODAwdjIwMGg4MDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU1OyIgZD0iTTEyMDAgOTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMzAwdjMwMGgyMDB2MTAwaC0yMDB2MTAwaDMwMHYtMzAwek0wIDcwMGg1MHEwIDIxIDQgMzd0OS41IDI2LjV0MTggMTcuNXQyMiAxMXQyOC41IDUuNXQzMSAydDM3IDAuNWgxMDB2LTU1MHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtMTAwaDQwMHYxMDBxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY1NTBoMTAwcTI1IDAgMzcgLTAuNXQzMSAtMiB0MjguNSAtNS41dDIyIC0xMXQxOCAtMTcuNXQ5LjUgLTI2LjV0NCAtMzdoNTB2MzAwaC04MDB2LTMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU2OyIgZD0iTTgwMCA3MDBoLTUwcTAgMjEgLTQgMzd0LTkuNSAyNi41dC0xOCAxNy41dC0yMiAxMXQtMjguNSA1LjV0LTMxIDJ0LTM3IDAuNWgtMTAwdi01NTBxMCAtMjIgMjUgLTM0LjV0NTAgLTE0LjVsMjUgLTF2LTEwMGgtNDAwdjEwMHE0IDAgMTEgMC41dDI0IDN0MzAgN3QyNCAxNXQxMSAyNC41djU1MGgtMTAwcS0yNSAwIC0zNyAtMC41dC0zMSAtMnQtMjguNSAtNS41dC0yMiAtMTF0LTE4IC0xNy41dC05LjUgLTI2LjV0LTQgLTM3aC01MHYzMDAgaDgwMHYtMzAwek0xMTAwIDIwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTMwMHYzMDBoMjAwdjEwMGgtMjAwdjEwMGgzMDB2LTMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU3OyIgZD0iTTcwMSAxMDk4aDE2MHExNiAwIDIxIC0xMXQtNyAtMjNsLTQ2NCAtNDY0bDQ2NCAtNDY0cTEyIC0xMiA3IC0yM3QtMjEgLTExaC0xNjBxLTEzIDAgLTIzIDlsLTQ3MSA0NzFxLTcgOCAtNyAxOHQ3IDE4bDQ3MSA0NzFxMTAgOSAyMyA5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTg7IiBkPSJNMzM5IDEwOThoMTYwcTEzIDAgMjMgLTlsNDcxIC00NzFxNyAtOCA3IC0xOHQtNyAtMThsLTQ3MSAtNDcxcS0xMCAtOSAtMjMgLTloLTE2MHEtMTYgMCAtMjEgMTF0NyAyM2w0NjQgNDY0bC00NjQgNDY0cS0xMiAxMiAtNyAyM3QyMSAxMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU5OyIgZD0iTTEwODcgODgycTExIC01IDExIC0yMXYtMTYwcTAgLTEzIC05IC0yM2wtNDcxIC00NzFxLTggLTcgLTE4IC03dC0xOCA3bC00NzEgNDcxcS05IDEwIC05IDIzdjE2MHEwIDE2IDExIDIxdDIzIC03bDQ2NCAtNDY0bDQ2NCA0NjRxMTIgMTIgMjMgN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjYwOyIgZD0iTTYxOCA5OTNsNDcxIC00NzFxOSAtMTAgOSAtMjN2LTE2MHEwIC0xNiAtMTEgLTIxdC0yMyA3bC00NjQgNDY0bC00NjQgLTQ2NHEtMTIgLTEyIC0yMyAtN3QtMTEgMjF2MTYwcTAgMTMgOSAyM2w0NzEgNDcxcTggNyAxOCA3dDE4IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGY4ZmY7IiBkPSJNMTAwMCAxMjAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek00NTAgMTAwMGgxMDBxMjEgMCA0MCAtMTR0MjYgLTMzbDc5IC0xOTRxNSAxIDE2IDNxMzQgNiA1NCA5LjV0NjAgN3Q2NS41IDF0NjEgLTEwdDU2LjUgLTIzdDQyLjUgLTQydDI5IC02NHQ1IC05MnQtMTkuNSAtMTIxLjVxLTEgLTcgLTMgLTE5LjV0LTExIC01MHQtMjAuNSAtNzN0LTMyLjUgLTgxLjV0LTQ2LjUgLTgzdC02NCAtNzAgdC04Mi41IC01MHEtMTMgLTUgLTQyIC01dC02NS41IDIuNXQtNDcuNSAyLjVxLTE0IDAgLTQ5LjUgLTMuNXQtNjMgLTMuNXQtNDMuNSA3cS01NyAyNSAtMTA0LjUgNzguNXQtNzUgMTExLjV0LTQ2LjUgMTEydC0yNiA5MGwtNyAzNXEtMTUgNjMgLTE4IDExNXQ0LjUgODguNXQyNiA2NHQzOS41IDQzLjV0NTIgMjUuNXQ1OC41IDEzdDYyLjUgMnQ1OS41IC00LjV0NTUuNSAtOGwtMTQ3IDE5MnEtMTIgMTggLTUuNSAzMHQyNy41IDEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNTExOyIgZD0iTTI1MCAxMjAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTUwMGwtMjU1IC0xNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjUwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQwMCAxMTAwdi0xMDBoMzAwdjEwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNmFhOyIgZD0iTTI1MCAxMjAwaDc1MHEzOSAwIDY5LjUgLTQwLjV0MzAuNSAtODQuNXYtOTMzbC03MDAgLTExN3Y5NTBsNjAwIDEyNWgtNzAwdi0xMDAwaC0xMDB2MTAyNXEwIDIzIDE1LjUgNDl0MzQuNSAyNnpNNTAwIDUyNXYtMTAwbDEwMCAyMHYxMDB6IiAvPgo8L2ZvbnQ+CjwvZGVmcz48L3N2Zz4g","glyphicons-halflings-regular.ttf":"AAEAAAAPAIAAAwBwRkZUTW0ql9wAAAD8AAAAHEdERUYBRAAEAAABGAAAACBPUy8yZ7lriQAAATgAAABgY21hcNqt44EAAAGYAAAGcmN2dCAAKAL4AAAIDAAAAARnYXNw//8AAwAACBAAAAAIZ2x5Zn1dwm8AAAgYAACUpGhlYWQFTS/YAACcvAAAADZoaGVhCkQEEQAAnPQAAAAkaG10eNLHIGAAAJ0YAAADdGxvY2Fv+5XOAACgjAAAAjBtYXhwAWoA2AAAorwAAAAgbmFtZbMsoJsAAKLcAAADonBvc3S6o+U1AACmgAAACtF3ZWJmwxhUUAAAsVQAAAAGAAAAAQAAAADMPaLPAAAAANB2gXUAAAAA0HZzlwABAAAADgAAABgAAAAAAAIAAQABARYAAQAEAAAAAgAAAAMEiwGQAAUABAMMAtAAAABaAwwC0AAAAaQAMgK4AAAAAAUAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAFVLV04AQAAg//8DwP8QAAAFFAB7AAAAAQAAAAAAAAAAAAAAIAABAAAABQAAAAMAAAAsAAAACgAAAdwAAQAAAAAEaAADAAEAAAAsAAMACgAAAdwABAGwAAAAaABAAAUAKAAgACsAoAClIAogLyBfIKwgvSISIxsl/CYBJvonCScP4APgCeAZ4CngOeBJ4FngYOBp4HngieCX4QnhGeEp4TnhRuFJ4VnhaeF54YnhleGZ4gbiCeIW4hniIeIn4jniSeJZ4mD4////AAAAIAAqAKAApSAAIC8gXyCsIL0iEiMbJfwmASb6JwknD+AB4AXgEOAg4DDgQOBQ4GDgYuBw4IDgkOEB4RDhIOEw4UDhSOFQ4WDhcOGA4ZDhl+IA4gniEOIY4iHiI+Iw4kDiUOJg+P/////j/9r/Zv9i4Ajf5N+132nfWd4F3P3aHdoZ2SHZE9kOIB0gHCAWIBAgCiAEH/4f+B/3H/Ef6x/lH3wfdh9wH2ofZB9jH10fVx9RH0sfRR9EHt4e3B7WHtUezh7NHsUevx65HrMIFQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAACjAAAAAAAAAA1AAAAIAAAACAAAAADAAAAKgAAACsAAAAEAAAAoAAAAKAAAAAGAAAApQAAAKUAAAAHAAAgAAAAIAoAAAAIAAAgLwAAIC8AAAATAAAgXwAAIF8AAAAUAAAgrAAAIKwAAAAVAAAgvQAAIL0AAAAWAAAiEgAAIhIAAAAXAAAjGwAAIxsAAAAYAAAl/AAAJfwAAAAZAAAmAQAAJgEAAAAaAAAm+gAAJvoAAAAbAAAnCQAAJwkAAAAcAAAnDwAAJw8AAAAdAADgAQAA4AMAAAAeAADgBQAA4AkAAAAhAADgEAAA4BkAAAAmAADgIAAA4CkAAAAwAADgMAAA4DkAAAA6AADgQAAA4EkAAABEAADgUAAA4FkAAABOAADgYAAA4GAAAABYAADgYgAA4GkAAABZAADgcAAA4HkAAABhAADggAAA4IkAAABrAADgkAAA4JcAAAB1AADhAQAA4QkAAAB9AADhEAAA4RkAAACGAADhIAAA4SkAAACQAADhMAAA4TkAAACaAADhQAAA4UYAAACkAADhSAAA4UkAAACrAADhUAAA4VkAAACtAADhYAAA4WkAAAC3AADhcAAA4XkAAADBAADhgAAA4YkAAADLAADhkAAA4ZUAAADVAADhlwAA4ZkAAADbAADiAAAA4gYAAADeAADiCQAA4gkAAADlAADiEAAA4hYAAADmAADiGAAA4hkAAADtAADiIQAA4iEAAADvAADiIwAA4icAAADwAADiMAAA4jkAAAD1AADiQAAA4kkAAAD/AADiUAAA4lkAAAEJAADiYAAA4mAAAAETAAD4/wAA+P8AAAEUAAH1EQAB9REAAAEVAAH2qgAB9qoAAAEWAAYCCgAAAAABAAABAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAL4AAAAAf//AAIAAgAoAAABaAMgAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIRElMxEjKAFA/ujw8AMg/OAoAtAAAQBkAGQETARMAFsAAAEyFh8BHgEdATc+AR8BFgYPATMyFhcWFRQGDwEOASsBFx4BDwEGJi8BFRQGBwYjIiYvAS4BPQEHDgEvASY2PwEjIiYnJjU0Nj8BPgE7AScuAT8BNhYfATU0Njc2AlgPJgsLCg+eBxYIagcCB57gChECBgMCAQIRCuCeBwIHaggWB54PCikiDyYLCwoPngcWCGoHAgee4AoRAgYDAgECEQrgngcCB2oIFgeeDwopBEwDAgECEQrgngcCB2oIFgeeDwopIg8mCwsKD54HFghqBwIHnuAKEQIGAwIBAhEK4J4HAgdqCBYHng8KKSIPJgsLCg+eBxYIagcCB57gChECBgAAAAABAAAAAARMBEwAIwAAATMyFhURITIWHQEUBiMhERQGKwEiJjURISImPQE0NjMhETQ2AcLIFR0BXhUdHRX+oh0VyBUd/qIVHR0VAV4dBEwdFf6iHRXIFR3+ohUdHRUBXh0VyBUdAV4VHQAAAAABAHAAAARABEwARQAAATMyFgcBBgchMhYPAQ4BKwEVITIWDwEOASsBFRQGKwEiJj0BISImPwE+ATsBNSEiJj8BPgE7ASYnASY2OwEyHwEWMj8BNgM5+goFCP6UBgUBDAoGBngGGAp9ARMKBgZ4BhgKfQ8LlAsP/u0KBgZ4BhgKff7tCgYGeAYYCnYFBv6UCAUK+hkSpAgUCKQSBEwKCP6UBgwMCKAIDGQMCKAIDK4LDw8LrgwIoAgMZAwIoAgMDAYBbAgKEqQICKQSAAABAGQABQSMBK4AOwAAATIXFhcjNC4DIyIOAwchByEGFSEHIR4EMzI+AzUzBgcGIyInLgEnIzczNjcjNzM+ATc2AujycDwGtSM0QDkXEys4MjAPAXtk/tQGAZZk/tQJMDlCNBUWOUA0I64eYmunznYkQgzZZHABBdpkhhQ+H3UErr1oaS1LMCEPCx4uTzJkMjJkSnRCKw8PIjBKK6trdZ4wqndkLzVkV4UljQAAAgB7AAAETASwAD4ARwAAASEyHgUVHAEVFA4FKwEHITIWDwEOASsBFRQGKwEiJj0BISImPwE+ATsBNSEiJj8BPgE7ARE0NhcRMzI2NTQmIwGsAV5DakIwFgwBAQwWMEJqQ7ICASAKBgZ4BhgKigsKlQoP/vUKBgZ4BhgKdf71CgYGeAYYCnUPtstALS1ABLAaJD8yTyokCwsLJCpQMkAlGmQMCKAIDK8LDg8KrwwIoAgMZAwIoAgMAdsKD8j+1EJWVEAAAAEAyAGQBEwCvAAPAAATITIWHQEUBiMhIiY9ATQ2+gMgFR0dFfzgFR0dArwdFcgVHR0VyBUdAAAAAgDIAAAD6ASwACUAQQAAARUUBisBFRQGBx4BHQEzMhYdASE1NDY7ATU0NjcuAT0BIyImPQEXFRQWFx4BFAYHDgEdASE1NCYnLgE0Njc+AT0BA+gdFTJjUVFjMhUd/OAdFTJjUVFjMhUdyEE3HCAgHDdBAZBBNxwgIBw3QQSwlhUdZFuVIyOVW5YdFZaWFR2WW5UjI5VbZB0VlshkPGMYDDI8MgwYYzyWljxjGAwyPDIMGGM8ZAAAAAEAAAAAAAAAAAAAAAAxAAAB//IBLATCBEEAFgAAATIWFzYzMhYVFAYjISImNTQ2NyY1NDYB9261LCwueKqqeP0ST3FVQgLYBEF3YQ6teHmtclBFaw4MGZnXAAAAAgAAAGQEsASvABoAHgAAAB4BDwEBMzIWHQEhNTQ2OwEBJyY+ARYfATc2AyEnAwL2IAkKiAHTHhQe+1AeFB4B1IcKCSAkCm9wCXoBebbDBLMTIxC7/RYlFSoqFSUC6rcQJBQJEJSWEPwecAIWAAAAAAQAAABkBLAETAALABcAIwA3AAATITIWBwEGIicBJjYXARYUBwEGJjURNDYJATYWFREUBicBJjQHARYGIyEiJjcBNjIfARYyPwE2MhkEfgoFCP3MCBQI/cwIBQMBCAgI/vgICgoDjAEICAoKCP74CFwBbAgFCvuCCgUIAWwIFAikCBQIpAgUBEwKCP3JCAgCNwgK2v74CBQI/vgIBQoCJgoF/vABCAgFCv3aCgUIAQgIFID+lAgKCggBbAgIpAgIpAgAAAAD//D/8AS6BLoACQANABAAAAAyHwEWFA8BJzcTAScJAQUTA+AmDpkNDWPWXyL9mdYCZv4f/rNuBLoNmQ4mDlzWYP50/ZrWAmb8anABTwAAAAEAAAAABLAEsAAPAAABETMyFh0BITU0NjsBEQEhArz6FR384B0V+v4MBLACiv3aHRUyMhUdAiYCJgAAAAEADgAIBEwEnAAfAAABJTYWFREUBgcGLgE2NzYXEQURFAYHBi4BNjc2FxE0NgFwAoUnMFNGT4gkV09IQv2oWEFPiCRXT0hCHQP5ow8eIvzBN1EXGSltchkYEAIJm/2iKmAVGilucRoYEQJ/JioAAAACAAn/+AS7BKcAHQApAAAAMh4CFQcXFAcBFgYPAQYiJwEGIycHIi4CND4BBCIOARQeATI+ATQmAZDItoNOAQFOARMXARY7GikT/u13jgUCZLaDTk6DAXKwlFZWlLCUVlYEp06DtmQCBY15/u4aJRg6FBQBEk0BAU6Dtsi2g1tWlLCUVlaUsJQAAQBkAFgErwREABkAAAE+Ah4CFRQOAwcuBDU0PgIeAQKJMHt4dVg2Q3mEqD4+p4V4Qzhadnh5A7VESAUtU3ZAOXmAf7JVVbJ/gHk5QHZTLQVIAAAAAf/TAF4EewSUABgAAAETNjIXEyEyFgcFExYGJyUFBiY3EyUmNjMBl4MHFQeBAaUVBhH+qoIHDxH+qf6qEQ8Hgv6lEQYUAyABYRMT/p8RDPn+bxQLDPb3DAsUAZD7DBEAAv/TAF4EewSUABgAIgAAARM2MhcTITIWBwUTFgYnJQUGJjcTJSY2MwUjFwc3Fyc3IycBl4MHFQeBAaUVBhH+qoIHDxH+qf6qEQ8Hgv6lEQYUAfPwxUrBw0rA6k4DIAFhExP+nxEM+f5vFAsM9vcMCxQBkPsMEWSO4ouM5YzTAAABAAAAAASwBLAAJgAAATIWHQEUBiMVFBYXBR4BHQEUBiMhIiY9ATQ2NyU+AT0BIiY9ATQ2Alh8sD4mDAkBZgkMDwr7ggoPDAkBZgkMJj6wBLCwfPouaEsKFwbmBRcKXQoPDwpdChcF5gYXCktoLvp8sAAAAA0AAAAABLAETAAPABMAIwAnACsALwAzADcARwBLAE8AUwBXAAATITIWFREUBiMhIiY1ETQ2FxUzNSkBIgYVERQWMyEyNjURNCYzFTM1BRUzNSEVMzUFFTM1IRUzNQchIgYVERQWMyEyNjURNCYFFTM1IRUzNQUVMzUhFTM1GQR+Cg8PCvuCCg8PVWQCo/3aCg8PCgImCg8Pc2T8GGQDIGT8GGQDIGTh/doKDw8KAiYKDw/872QDIGT8GGQDIGQETA8K++YKDw8KBBoKD2RkZA8K/qIKDw8KAV4KD2RkyGRkZGTIZGRkZGQPCv6iCg8PCgFeCg9kZGRkZMhkZGRkAAAEAAAAAARMBEwADwAfAC8APwAAEyEyFhURFAYjISImNRE0NikBMhYVERQGIyEiJjURNDYBITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NjIBkBUdHRX+cBUdHQJtAZAVHR0V/nAVHR39vQGQFR0dFf5wFR0dAm0BkBUdHRX+cBUdHQRMHRX+cBUdHRUBkBUdHRX+cBUdHRUBkBUd/agdFf5wFR0dFQGQFR0dFf5wFR0dFQGQFR0AAAkAAAAABEwETAAPAB8ALwA/AE8AXwBvAH8AjwAAEzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2MsgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR0ETB0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHf5wHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUd/nAdFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0ABgAAAAAEsARMAA8AHwAvAD8ATwBfAAATMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYyyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHQRMHRXIFR0dFcgVHR0VyBUdHRXIFR3+cB0VyBUdHRXIFR0dFcgVHR0VyBUd/nAdFcgVHR0VyBUdHRXIFR0dFcgVHQAAAAABACYALAToBCAAFwAACQE2Mh8BFhQHAQYiJwEmND8BNjIfARYyAdECOwgUB7EICPzxBxUH/oAICLEHFAirBxYB3QI7CAixBxQI/PAICAGACBQHsQgIqwcAAQBuAG4EQgRCACMAAAEXFhQHCQEWFA8BBiInCQEGIi8BJjQ3CQEmND8BNjIXCQE2MgOIsggI/vUBCwgIsggVB/70/vQHFQiyCAgBC/71CAiyCBUHAQwBDAcVBDuzCBUH/vT+9AcVCLIICAEL/vUICLIIFQcBDAEMBxUIsggI/vUBDAcAAwAX/+sExQSZABkAJQBJAAAAMh4CFRQHARYUDwEGIicBBiMiLgI0PgEEIg4BFB4BMj4BNCYFMzIWHQEzMhYdARQGKwEVFAYrASImPQEjIiY9ATQ2OwE1NDYBmcSzgk1OASwICG0HFQj+1HeOYrSBTU2BAW+zmFhYmLOZWFj+vJYKD0sKDw8KSw8KlgoPSwoPDwpLDwSZTYKzYo15/tUIFQhsCAgBK01NgbTEs4JNWJmzmFhYmLOZIw8KSw8KlgoPSwoPDwpLDwqWCg9LCg8AAAMAF//rBMUEmQAZACUANQAAADIeAhUUBwEWFA8BBiInAQYjIi4CND4BBCIOARQeATI+ATQmBSEyFh0BFAYjISImPQE0NgGZxLOCTU4BLAgIbQcVCP7Ud45itIFNTYEBb7OYWFiYs5lYWP5YAV4KDw8K/qIKDw8EmU2Cs2KNef7VCBUIbAgIAStNTYG0xLOCTViZs5hYWJizmYcPCpYKDw8KlgoPAAAAAAIAFwAXBJkEsAAPAC0AAAEzMhYVERQGKwEiJjURNDYFNRYSFRQOAiIuAjU0EjcVDgEVFB4BMj4BNTQmAiZkFR0dFWQVHR0BD6fSW5vW6tabW9KnZ3xyxejFcnwEsB0V/nAVHR0VAZAVHeGmPv7ZuHXWm1tbm9Z1uAEnPqY3yHh0xXJyxXR4yAAEAGQAAASwBLAADwAfAC8APwAAATMyFhURFAYrASImNRE0NgEzMhYVERQGKwEiJjURNDYBMzIWFREUBisBIiY1ETQ2BTMyFh0BFAYrASImPQE0NgQBlgoPDwqWCg8P/t6WCg8PCpYKDw/+3pYKDw8KlgoPD/7elgoPDwqWCg8PBLAPCvuCCg8PCgR+Cg/+cA8K/RIKDw8KAu4KD/7UDwr+PgoPDwoBwgoPyA8K+goPDwr6Cg8AAAAAAgAaABsElgSWAEcATwAAATIfAhYfATcWFwcXFh8CFhUUDwIGDwEXBgcnBwYPAgYjIi8CJi8BByYnNycmLwImNTQ/AjY/ASc2Nxc3Nj8CNhIiBhQWMjY0AlghKSYFMS0Fhj0rUAMZDgGYBQWYAQ8YA1AwOIYFLDIFJisfISkmBTEtBYY8LFADGQ0ClwYGlwINGQNQLzqFBS0xBSYreLJ+frJ+BJYFmAEOGQJQMDmGBSwxBiYrHiIoJgYxLAWGPSxRAxkOApcFBZcCDhkDUTA5hgUtMAYmKiAhKCYGMC0Fhj0sUAIZDgGYBf6ZfrF+frEABwBkAAAEsAUUABMAFwAhACUAKQAtADEAAAEhMhYdASEyFh0BITU0NjMhNTQ2FxUhNQERFAYjISImNREXETMRMxEzETMRMxEzETMRAfQBLCk7ARMKD/u0DwoBEzspASwBLDsp/UQpO2RkZGRkZGRkBRQ7KWQPCktLCg9kKTtkZGT+1PzgKTs7KQMgZP1EArz9RAK8/UQCvP1EArwAAQAMAAAFCATRAB8AABMBNjIXARYGKwERFAYrASImNREhERQGKwEiJjURIyImEgJsCBUHAmAIBQqvDwr6Cg/+1A8K+goPrwoFAmoCYAcH/aAICv3BCg8PCgF3/okKDw8KAj8KAAIAZAAAA+gEsAARABcAAAERFBYzIREUBiMhIiY1ETQ2MwEjIiY9AQJYOykBLB0V/OAVHR0VA1L6FR0EsP5wKTv9dhUdHRUETBUd/nAdFfoAAwAXABcEmQSZAA8AGwAwAAAAMh4CFA4CIi4CND4BBCIOARQeATI+ATQmBTMyFhURMzIWHQEUBisBIiY1ETQ2AePq1ptbW5vW6tabW1ubAb/oxXJyxejFcnL+fDIKD68KDw8K+goPDwSZW5vW6tabW1ub1urWmztyxejFcnLF6MUNDwr+7Q8KMgoPDwoBXgoPAAAAAAL/nAAABRQEsAALAA8AACkBAyMDIQEzAzMDMwEDMwMFFP3mKfIp/eYBr9EVohTQ/p4b4BsBkP5wBLD+1AEs/nD+1AEsAAAAAAIAZAAABLAEsAAVAC8AAAEzMhYVETMyFgcBBiInASY2OwERNDYBMzIWFREUBiMhIiY1ETQ2OwEyFh0BITU0NgImyBUdvxQLDf65DSYN/rkNCxS/HQJUMgoPDwr75goPDwoyCg8DhA8EsB0V/j4XEP5wEBABkBAXAcIVHfzgDwr+ogoPDwoBXgoPDwqvrwoPAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ+AQQiDgEUHgEyPgE0JgUzMhYVETMyFgcDBiInAyY2OwERNDYB4+rWm1tbm9bq1ptbW5sBv+jFcnLF6MVycv58lgoPiRUKDd8NJg3fDQoViQ8EmVub1urWm1tbm9bq1ps7csXoxXJyxejFDQ8K/u0XEP7tEBABExAXARMKDwAAAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ+AQQiDgEUHgEyPgE0JiUTFgYrAREUBisBIiY1ESMiJjcTNjIB4+rWm1tbm9bq1ptbW5sBv+jFcnLF6MVycv7n3w0KFYkPCpYKD4kVCg3fDSYEmVub1urWm1tbm9bq1ps7csXoxXJyxejFAf7tEBf+7QoPDwoBExcQARMQAAAAAAIAAAAABLAEsAAZADkAABMhMhYXExYVERQGBwYjISImJyY1EzQ3Ez4BBSEiBgcDBhY7ATIWHwEeATsBMjY/AT4BOwEyNicDLgHhAu4KEwO6BwgFDBn7tAweAgYBB7kDEwKX/dQKEgJXAgwKlgoTAiYCEwr6ChMCJgITCpYKDAJXAhIEsA4K/XQYGf5XDB4CBggEDRkBqRkYAowKDsgOC/4+Cw4OCpgKDg4KmAoODgsBwgsOAAMAFwAXBJkEmQAPABsAJwAAADIeAhQOAiIuAjQ+AQQiDgEUHgEyPgE0JgUXFhQPAQYmNRE0NgHj6tabW1ub1urWm1tbmwG/6MVycsXoxXJy/ov9ERH9EBgYBJlbm9bq1ptbW5vW6tabO3LF6MVycsXoxV2+DCQMvgwLFQGQFQsAAQAXABcEmQSwACgAAAE3NhYVERQGIyEiJj8BJiMiDgEUHgEyPgE1MxQOAiIuAjQ+AjMyA7OHBwsPCv6WCwQHhW2BdMVycsXoxXKWW5vW6tabW1ub1nXABCSHBwQL/pYKDwsHhUxyxejFcnLFdHXWm1tbm9bq1ptbAAAAAAIAFwABBJkEsAAaADUAAAE3NhYVERQGIyEiJj8BJiMiDgEVIzQ+AjMyEzMUDgIjIicHBiY1ETQ2MyEyFg8BFjMyPgEDs4cHCw8L/pcLBAeGboF0xXKWW5vWdcDrllub1nXAnIYHCw8LAWgKBQiFboJ0xXIEJIcHBAv+lwsPCweGS3LFdHXWm1v9v3XWm1t2hggFCgFoCw8LB4VMcsUAAAAKAGQAAASwBLAADwAfAC8APwBPAF8AbwB/AI8AnwAAEyEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0NgczMhYdARQGKwEiJj0BNDYzITIWHQEUBiMhIiY9ATQ2BzMyFh0BFAYrASImPQE0NjMhMhYdARQGIyEiJj0BNDYHMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0Nn0EGgoPDwr75goPDwPA/K4KDw8KA1IKDw/9CDIKDw8KMgoPD9IBwgoPDwr+PgoPD74yCg8PCjIKDw/SAcIKDw8K/j4KDw++MgoPDwoyCg8P0gHCCg8PCv4+Cg8PvjIKDw8KMgoPD9IBwgoPDwr+PgoPDwSwDwr7ggoPDwoEfgoPyA8K/K4KDw8KA1IKD2QPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKDwAAAAACAAAAAARMBLAAGQAjAAABNTQmIyEiBh0BIyIGFREUFjMhMjY1ETQmIyE1NDY7ATIWHQEDhHVT/tRSdmQpOzspA4QpOzsp/ageFMgUHgMgyFN1dlLIOyn9qCk7OykCWCk7lhUdHRWWAAIAZAAABEwETAAJADcAABMzMhYVESMRNDYFMhcWFREUBw4DIyIuAScuAiMiBwYjIicmNRE+ATc2HgMXHgIzMjc2fTIKD2QPA8AEBRADIUNAMRwaPyonKSxHHlVLBwgGBQ4WeDsXKC4TOQQpLUUdZ1AHBEwPCvvNBDMKDzACBhH+WwYGO1AkDQ0ODg8PDzkFAwcPAbY3VwMCAwsGFAEODg5XCAAAAwAAAAAEsASXACEAMQBBAAAAMh4CFREUBisBIiY1ETQuASAOARURFAYrASImNRE0PgEDMzIWFREUBisBIiY1ETQ2ITMyFhURFAYrASImNRE0NgHk6N6jYw8KMgoPjeT++uSNDwoyCg9joyqgCAwMCKAIDAwCYKAIDAwIoAgMDASXY6PedP7UCg8PCgEsf9FyctF//tQKDw8KASx03qP9wAwI/jQIDAwIAcwIDAwI/jQIDAwIAcwIDAAAAAACAAAA0wRHA90AFQA5AAABJTYWFREUBiclJisBIiY1ETQ2OwEyBTc2Mh8BFhQPARcWFA8BBiIvAQcGIi8BJjQ/AScmND8BNjIXAUEBAgkMDAn+/hUZ+goPDwr6GQJYeAcUByIHB3h4BwciBxQHeHgHFAciBwd3dwcHIgcUBwMurAYHCv0SCgcGrA4PCgFeCg+EeAcHIgcUB3h4BxQHIgcHd3cHByIHFAd4eAcUByIICAAAAAACAAAA0wNyA90AFQAvAAABJTYWFREUBiclJisBIiY1ETQ2OwEyJTMWFxYVFAcGDwEiLwEuATc2NTQnJjY/ATYBQQECCQwMCf7+FRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcDLqwGBwr9EgoHBqwODwoBXgoPZAEJgaGafwkBAQYXBxMIZ36EaggUBxYFAAAAAAMAAADEBGID7AAbADEASwAAATMWFxYVFAYHBgcjIi8BLgE3NjU0JicmNj8BNgUlNhYVERQGJyUmKwEiJjURNDY7ATIlMxYXFhUUBwYPASIvAS4BNzY1NCcmNj8BNgPHAwsGh0RABwoDCQcqCAIGbzs3BgIJKgf9ggECCQwMCf7+FRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcD7AEJs9lpy1QJAQYiBhQIlrJarEcJFAYhBb6sBgcK/RIKBwasDg8KAV4KD2QBCYGhmn8JAQEGFwcTCGd+hGoIFQYWBQAAAAANAAAAAASwBLAACQAVABkAHQAhACUALQA7AD8AQwBHAEsATwAAATMVIxUhFSMRIQEjFTMVIREjESM1IQURIREhESERBSM1MwUjNTMBMxEhETM1MwEzFSMVIzUjNTM1IzUhBREhEQcjNTMFIzUzASM1MwUhNSEB9GRk/nBkAfQCvMjI/tTIZAJY+7QBLAGQASz84GRkArxkZP1EyP4MyGQB9MhkyGRkyAEs/UQBLGRkZAOEZGT+DGRkAfT+1AEsA4RkZGQCWP4MZMgBLAEsyGT+1AEs/tQBLMhkZGT+DP4MAfRk/tRkZGRkyGTI/tQBLMhkZGT+1GRkZAAAAAAJAAAAAASwBLAAAwAHAAsADwATABcAGwAfACMAADcjETMTIxEzASMRMxMjETMBIxEzASE1IRcjNTMXIzUzBSM1M2RkZMhkZAGQyMjIZGQBLMjI/OD+1AEsyGRkyGRkASzIyMgD6PwYA+j8GAPo/BgD6PwYA+j7UGRkW1tbW1sAAAIAAAAKBKYEsAANABUAAAkBFhQHAQYiJwETNDYzBCYiBhQWMjYB9AKqCAj+MAgUCP1WAQ8KAUM7Uzs7UzsEsP1WCBQI/jAICAKqAdsKD807O1Q7OwAAAAADAAAACgXSBLAADQAZACEAAAkBFhQHAQYiJwETNDYzIQEWFAcBBiIvAQkBBCYiBhQWMjYB9AKqCAj+MAgUCP1WAQ8KAwYCqggI/jAIFAg4Aaj9RP7TO1M7O1M7BLD9VggUCP4wCAgCqgHbCg/9VggUCP4wCAg4AaoCvM07O1Q7OwAAAAABAGQAAASwBLAAJgAAASEyFREUDwEGJjURNCYjISIPAQYWMyEyFhURFAYjISImNRE0PwE2ASwDOUsSQAgKDwr9RBkSQAgFCgK8Cg8PCvyuCg8SixIEsEv8fBkSQAgFCgO2Cg8SQAgKDwr8SgoPDwoDzxkSixIAAAABAMj//wRMBLAACgAAEyEyFhURCQERNDb6AyAVHf4+/j4dBLAdFfuCAbz+QwR/FR0AAAAAAwAAAAAEsASwABUARQBVAAABISIGBwMGHwEeATMhMjY/ATYnAy4BASMiBg8BDgEjISImLwEuASsBIgYVERQWOwEyNj0BNDYzITIWHQEUFjsBMjY1ETQmASEiBg8BBhYzITI2LwEuAQM2/kQLEAFOBw45BhcKAcIKFwY+DgdTARABVpYKFgROBBYK/doKFgROBBYKlgoPDwqWCg8PCgLuCg8PCpYKDw/+sf4MChMCJgILCgJYCgsCJgITBLAPCv7TGBVsCQwMCWwVGAEtCg/+cA0JnAkNDQmcCQ0PCv12Cg8PCpYKDw8KlgoPDwoCigoP/agOCpgKDg4KmAoOAAAAAAQAAABkBLAETAAdACEAKQAxAAABMzIeAh8BMzIWFREUBiMhIiY1ETQ2OwE+BAEVMzUEIgYUFjI2NCQyFhQGIiY0AfTIOF00JAcGlik7Oyn8GCk7OymWAgknM10ByGT+z76Hh76H/u9WPDxWPARMKTs7FRQ7Kf2oKTs7KQJYKTsIG0U1K/7UZGRGh76Hh74IPFY8PFYAAAAAAgA1AAAEsASvACAAIwAACQEWFx4BHwEVITUyNi8BIQYHBh4CMxUhNTY3PgE/AQEDIQMCqQGBFCgSJQkK/l81LBFS/nk6IgsJKjIe/pM4HAwaBwcBj6wBVKIEr/waMioTFQECQkJXLd6RWSIuHAxCQhgcDCUNDQPu/VoByQAAAAADAGQAAAPwBLAAJwAyADsAAAEeBhUUDgMjITU+ATURNC4EJzUFMh4CFRQOAgclMzI2NTQuAisBETMyNjU0JisBAvEFEzUwOyodN1htbDD+DCk7AQYLFyEaAdc5dWM+Hy0tEP6Pi05pESpTPnbYUFJ9Xp8CgQEHGB0zOlIuQ3VONxpZBzMoAzsYFBwLEAkHRwEpSXNDM1s6KwkxYUopOzQb/K5lUFqBAAABAMgAAANvBLAAGQAAARcOAQcDBhYXFSE1NjcTNjQuBCcmJzUDbQJTQgeECSxK/gy6Dq0DAw8MHxUXDQYEsDkTNSj8uTEoBmFhEFIDQBEaExAJCwYHAwI5AAAAAAL/tQAABRQEsAAlAC8AAAEjNC4FKwERFBYfARUhNTI+AzURIyIOBRUjESEFIxEzByczESM3BRQyCAsZEyYYGcgyGRn+cAQOIhoWyBkYJhMZCwgyA+j7m0tLfX1LS30DhBUgFQ4IAwH8rhYZAQJkZAEFCRUOA1IBAwgOFSAVASzI/OCnpwMgpwACACH/tQSPBLAAJQAvAAABIzQuBSsBERQWHwEVITUyPgM1ESMiDgUVIxEhEwc1IRUnNxUhNQRMMggLGRMmGBnIMhkZ/nAEDiIaFsgZGCYTGQsIMgPoQ6f84KenAyADhBUgFQ4IAwH9dhYZAQJkZAEFCRUOAooBAwgOFSAVASz7gn1LS319S0sABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyAlgVHR0V/agVHR0VA+gVHR0V/BgVHR0VAyAVHR0V/OAVHR0VBEwVHR0V+7QVHR0ETB0VZBUdHRVkFR3+1B0VZBUdHRVkFR3+1B0VZBUdHRVkFR3+1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYDITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NgMhMhYdARQGIyEiJj0BNDb6ArwVHR0V/UQVHR2zBEwVHR0V+7QVHR3dArwVHR0V/UQVHR2zBEwVHR0V+7QVHR0ETB0VZBUdHRVkFR3+1B0VZBUdHRVkFR3+1B0VZBUdHRVkFR3+1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AAAE1NDYzITIWHQEUBiMhIiYBNTQ2MyEyFh0BFAYjISImEzU0NjMhMhYdARQGIyEiJgE1NDYzITIWHQEUBiMhIiYB9B0VAlgVHR0V/agVHf5wHRUD6BUdHRX8GBUdyB0VAyAVHR0V/OAVHf7UHRUETBUdHRX7tBUdA7ZkFR0dFWQVHR3+6WQVHR0VZBUdHf7pZBUdHRVkFR0d/ulkFR0dFWQVHR0AAAQAAAAABLAETAAPAB8ALwA/AAATITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2MgRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dBEwdFWQVHR0VZBUd/tQdFWQVHR0VZBUd/tQdFWQVHR0VZBUd/tQdFWQVHR0VZBUdAAgAAAAABLAETAAPAB8ALwA/AE8AXwBvAH8AABMzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2MmQVHR0VZBUdHQFBAyAVHR0V/OAVHR3+6WQVHR0VZBUdHQFBAyAVHR0V/OAVHR3+6WQVHR0VZBUdHQFBAyAVHR0V/OAVHR3+6WQVHR0VZBUdHQFBAyAVHR0V/OAVHR0ETB0VZBUdHRVkFR0dFWQVHR0VZBUd/tQdFWQVHR0VZBUdHRVkFR0dFWQVHf7UHRVkFR0dFWQVHR0VZBUdHRVkFR3+1B0VZBUdHRVkFR0dFWQVHR0VZBUdAAAG/5wAAASwBEwAAwATACMAKgA6AEoAACEjETsCMhYdARQGKwEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2BQc1IzUzNQUhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2AZBkZJZkFR0dFWQVHR0VAfQVHR0V/gwVHR3++qfIyAHCASwVHR0V/tQVHR0VAlgVHR0V/agVHR0ETB0VZBUdHRVkFR3+1B0VZBUdHRVkFR36fUtkS68dFWQVHR0VZBUd/tQdFWQVHR0VZBUdAAAABgAAAAAFFARMAA8AEwAjACoAOgBKAAATMzIWHQEUBisBIiY9ATQ2ASMRMwEhMhYdARQGIyEiJj0BNDYFMxUjFSc3BSEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyZBUdHRVkFR0dA2dkZPyuAfQVHR0V/gwVHR0EL8jIp6f75gEsFR0dFf7UFR0dFQJYFR0dFf2oFR0dBEwdFWQVHR0VZBUd+7QETP7UHRVkFR0dFWQVHchkS319rx0VZBUdHRVkFR3+1B0VZBUdHRVkFR0AAAAAAgAAAMgEsAPoAA8AEgAAEyEyFhURFAYjISImNRE0NgkCSwLuHywsH/0SHywsBIT+1AEsA+gsH/12HywsHwKKHyz9RAEsASwAAwAAAAAEsARMAA8AFwAfAAATITIWFREUBiMhIiY1ETQ2FxE3BScBExEEMhYUBiImNCwEWBIaGhL7qBIaGkr3ASpKASXs/NJwTk5wTgRMGhL8DBIaGhID9BIaZP0ftoOcAT7+4AH0dE5vT09vAAAAAAIA2wAFBDYEkQAWAB4AAAEyHgEVFAcOAQ8BLgQnJjU0PgIWIgYUFjI2NAKIdcZzRkWyNjYJIV5YbSk8RHOft7eCgreCBJF4ynVzj23pPz4IIWZomEiEdVijeUjDgriBgbgAAAACABcAFwSZBJkADwAXAAAAMh4CFA4CIi4CND4BAREiDgEUHgEB4+rWm1tbm9bq1ptbW5sBS3TFcnLFBJlbm9bq1ptbW5vW6tab/G8DVnLF6MVyAAACAHUAAwPfBQ8AGgA1AAABHgYVFA4DBy4DNTQ+BQMOAhceBBcWNj8BNiYnLgInJjc2IyYCKhVJT1dOPiUzVnB9P1SbfEokP0xXUEm8FykoAwEbITEcExUWAgYCCQkFEikMGiACCAgFD0iPdXdzdYdFR4BeRiYEBTpjl1lFh3ZzeHaQ/f4hS4I6JUEnIw4IBwwQIgoYBwQQQSlZtgsBAAAAAwAAAAAEywRsAAwAKgAvAAABNz4CHgEXHgEPAiUhMhcHISIGFREUFjMhMjY9ATcRFAYjISImNRE0NgkBBzcBA+hsAgYUFR0OFgoFBmz9BQGQMje7/pApOzspAfQpO8i7o/5wpbm5Azj+lqE3AWMD9XMBAgIEDw4WKgsKc8gNuzsp/gwpOzsptsj+tKW5uaUBkKW5/tf+ljKqAWMAAgAAAAAEkwRMABsANgAAASEGByMiBhURFBYzITI2NTcVFAYjISImNRE0NgUBFhQHAQYmJzUmDgMHPgY3NT4BAV4BaaQ0wyk7OykB9Ck7yLml/nClubkCfwFTCAj+rAcLARo5ZFRYGgouOUlARioTAQsETJI2Oyn+DCk7OymZZ6W5uaUBkKW5G/7TBxUH/s4GBAnLAQINFjAhO2JBNB0UBwHSCgUAAAAAAgAAAAAEnQRMAB0ANQAAASEyFwchIgYVERQWMyEyNj0BNxUUBiMhIiY1ETQ2CQE2Mh8BFhQHAQYiLwEmND8BNjIfARYyAV4BXjxDsv6jKTs7KQH0KTvIuaX+cKW5uQHKAYsHFQdlBwf97QcVB/gHB2UHFQdvCBQETBexOyn+DCk7OylFyNulubmlAZCluf4zAYsHB2UHFQf97AcH+AcVB2UHB28HAAAAAQAKAAoEpgSmADsAAAkBNjIXARYGKwEVMzU0NhcBFhQHAQYmPQEjFTMyFgcBBiInASY2OwE1IxUUBicBJjQ3ATYWHQEzNSMiJgE+AQgIFAgBBAcFCqrICggBCAgI/vgICsiqCgUH/vwIFAj++AgFCq/ICgj++AgIAQgICsivCgUDlgEICAj++AgKyK0KBAf+/AcVB/73BwQKrcgKCP74CAgBCAgKyK0KBAcBCQcVBwEEBwQKrcgKAAEAyAAAA4QETAAZAAATMzIWFREBNhYVERQGJwERFAYrASImNRE0NvpkFR0B0A8VFQ/+MB0VZBUdHQRMHRX+SgHFDggV/BgVCA4Bxf5KFR0dFQPoFR0AAAABAAAAAASwBEwAIwAAEzMyFhURATYWFREBNhYVERQGJwERFAYnAREUBisBIiY1ETQ2MmQVHQHQDxUB0A8VFQ/+MBUP/jAdFWQVHR0ETB0V/koBxQ4IFf5KAcUOCBX8GBUIDgHF/koVCA4Bxf5KFR0dFQPoFR0AAAABAJ0AGQSwBDMAFQAAAREUBicBERQGJwEmNDcBNhYVEQE2FgSwFQ/+MBUP/hQPDwHsDxUB0A8VBBr8GBUIDgHF/koVCA4B4A4qDgHgDggV/koBxQ4IAAAAAQDIABYEMwQ2AAsAABMBFhQHAQYmNRE0NvMDLhIS/NISGRkEMv4OCx4L/g4LDhUD6BUOAAIAyABkA4QD6AAPAB8AABMzMhYVERQGKwEiJjURNDYhMzIWFREUBisBIiY1ETQ2+sgVHR0VyBUdHQGlyBUdHRXIFR0dA+gdFfzgFR0dFQMgFR0dFfzgFR0dFQMgFR0AAAEAyABkBEwD6AAPAAABERQGIyEiJjURNDYzITIWBEwdFfzgFR0dFQMgFR0DtvzgFR0dFQMgFR0dAAAAAAEAAAAZBBMEMwAVAAABETQ2FwEWFAcBBiY1EQEGJjURNDYXAfQVDwHsDw/+FA8V/jAPFRUPAmQBthUIDv4gDioO/iAOCBUBtv47DggVA+gVCA4AAAH//gACBLMETwAjAAABNzIWFRMUBiMHIiY1AwEGJjUDAQYmNQM0NhcBAzQ2FwEDNDYEGGQUHgUdFWQVHQL+MQ4VAv4yDxUFFQ8B0gIVDwHSAh0ETgEdFfwYFR0BHRUBtf46DwkVAbX+OQ4JFAPoFQkP/j4BthQJDv49AbYVHQAAAQEsAAAD6ARMABkAAAEzMhYVERQGKwEiJjURAQYmNRE0NhcBETQ2A1JkFR0dFWQVHf4wDxUVDwHQHQRMHRX8GBUdHRUBtv47DggVA+gVCA7+OwG2FR0AAAIAZADIBLAESAALABsAAAkBFgYjISImNwE2MgEhMhYdARQGIyEiJj0BNDYCrgH1DwkW++4WCQ8B9Q8q/fcD6BUdHRX8GBUdHQQ5/eQPFhYPAhwP/UgdFWQVHR0VZBUdAAEAiP/8A3UESgAFAAAJAgcJAQN1/qABYMX92AIoA4T+n/6fxgIoAiYAAAAAAQE7//wEKARKAAUAAAkBJwkBNwQo/dnGAWH+n8YCI/3ZxgFhAWHGAAIAFwAXBJkEmQAPADMAAAAyHgIUDgIiLgI0PgEFIyIGHQEjIgYdARQWOwEVFBY7ATI2PQEzMjY9ATQmKwE1NCYB4+rWm1tbm9bq1ptbW5sBfWQVHZYVHR0Vlh0VZBUdlhUdHRWWHQSZW5vW6tabW1ub1urWm7odFZYdFWQVHZYVHR0Vlh0VZBUdlhUdAAAAAAIAFwAXBJkEmQAPAB8AAAAyHgIUDgIiLgI0PgEBISIGHQEUFjMhMjY9ATQmAePq1ptbW5vW6tabW1ubAkX+DBUdHRUB9BUdHQSZW5vW6tabW1ub1urWm/5+HRVkFR0dFWQVHQACABcAFwSZBJkADwAzAAAAMh4CFA4CIi4CND4BBCIPAScmIg8BBhQfAQcGFB8BFjI/ARcWMj8BNjQvATc2NC8BAePq1ptbW5vW6tabW1ubAeUZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0JCXh4CQmNBJlbm9bq1ptbW5vW6tabrQl4eAkJjQkZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0AAgAXABcEmQSZAA8AJAAAADIeAhQOAiIuAjQ+AQEnJiIPAQYUHwEWMjcBNjQvASYiBwHj6tabW1ub1urWm1tbmwEVVAcVCIsHB/IHFQcBdwcHiwcVBwSZW5vW6tabW1ub1urWm/4xVQcHiwgUCPEICAF3BxUIiwcHAAAAAAMAFwAXBJkEmQAPADsASwAAADIeAhQOAiIuAjQ+AQUiDgMVFDsBFjc+ATMyFhUUBgciDgUHBhY7ATI+AzU0LgMTIyIGHQEUFjsBMjY9ATQmAePq1ptbW5vW6tabW1ubAT8dPEIyIRSDHgUGHR8UFw4TARkOGhITDAIBDQ6tBx4oIxgiM0Q8OpYKDw8KlgoPDwSZW5vW6tabW1ub1urWm5ELHi9PMhkFEBQQFRIXFgcIBw4UHCoZCBEQKDhcNi9IKhsJ/eMPCpYKDw8KlgoPAAADABcAFwSZBJkADwAfAD4AAAAyHgIUDgIiLgI0PgEFIyIGHQEUFjsBMjY9ATQmAyMiBh0BFBY7ARUjIgYdARQWMyEyNj0BNCYrARE0JgHj6tabW1ub1urWm1tbmwGWlgoPDwqWCg8PCvoKDw8KS0sKDw8KAV4KDw8KSw8EmVub1urWm1tbm9bq1ptWDwqWCg8PCpYKD/7UDwoyCg/IDwoyCg8PCjIKDwETCg8AAgAAAAAEsASwAC8AXwAAATMyFh0BHgEXMzIWHQEUBisBDgEHFRQGKwEiJj0BLgEnIyImPQE0NjsBPgE3NTQ2ExUUBisBIiY9AQ4BBzMyFh0BFAYrAR4BFzU0NjsBMhYdAT4BNyMiJj0BNDY7AS4BAg2WCg9nlxvCCg8PCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw+5DwqWCg9EZheoCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmBLAPCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw8KlgoPZ5cbwgoP/s2oCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmRA8KlgoPRGYAAwAXABcEmQSZAA8AGwA/AAAAMh4CFA4CIi4CND4BBCIOARQeATI+ATQmBxcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyAePq1ptbW5vW6tabW1ubAb/oxXJyxejFcnKaQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwdABxUHfHwHFQSZW5vW6tabW1ub1urWmztyxejFcnLF6MVaQAcVB3x8BxUHQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwAAAAMAFwAXBJkEmQAPABsAMAAAADIeAhQOAiIuAjQ+AQQiDgEUHgEyPgE0JgcXFhQHAQYiLwEmND8BNjIfATc2MgHj6tabW1ub1urWm1tbmwG/6MVycsXoxXJyg2oHB/7ACBQIyggIagcVB0/FBxUEmVub1urWm1tbm9bq1ps7csXoxXJyxejFfWoHFQf+vwcHywcVB2oICE/FBwAAAAMAFwAXBJkEmQAPABgAIQAAADIeAhQOAiIuAjQ+AQUiDgEVFBcBJhcBFjMyPgE1NAHj6tabW1ub1urWm1tbmwFLdMVyQQJLafX9uGhzdMVyBJlbm9bq1ptbW5vW6tabO3LFdHhpAktB0P24PnLFdHMAAAAAAQAXAFMEsAP5ABUAABMBNhYVESEyFh0BFAYjIREUBicBJjQnAgoQFwImFR0dFf3aFxD99hACRgGrDQoV/t0dFcgVHf7dFQoNAasNJgAAAAABAAAAUwSZA/kAFQAACQEWFAcBBiY1ESEiJj0BNDYzIRE0NgJ/AgoQEP32EBf92hUdHRUCJhcD8f5VDSYN/lUNChUBIx0VyBUdASMVCgAAAAEAtwAABF0EmQAVAAAJARYGIyERFAYrASImNREhIiY3ATYyAqoBqw0KFf7dHRXIFR3+3RUKDQGrDSYEif32EBf92hUdHRUCJhcQAgoQAAAAAQC3ABcEXQSwABUAAAEzMhYVESEyFgcBBiInASY2MyERNDYCJsgVHQEjFQoN/lUNJg3+VQ0KFQEjHQSwHRX92hcQ/fYQEAIKEBcCJhUdAAABAAAAtwSZBF0AFwAACQEWFAcBBiY1EQ4DBz4ENxE0NgJ/AgoQEP32EBdesKWBJAUsW4fHfhcEVf5VDSYN/lUNChUBIwIkRHVNabGdcUYHAQYVCgACAAAAAASwBLAAFQArAAABITIWFREUBi8BBwYiLwEmND8BJyY2ASEiJjURNDYfATc2Mh8BFhQPARcWBgNSASwVHRUOXvkIFAhqBwf5Xg4I/iH+1BUdFQ5e+QgUCGoHB/leDggEsB0V/tQVCA5e+QcHaggUCPleDhX7UB0VASwVCA5e+QcHaggUCPleDhUAAAACAEkASQRnBGcAFQArAAABFxYUDwEXFgYjISImNRE0Nh8BNzYyASEyFhURFAYvAQcGIi8BJjQ/AScmNgP2agcH+V4OCBX+1BUdFQ5e+QgU/QwBLBUdFQ5e+QgUCGoHB/leDggEYGoIFAj5Xg4VHRUBLBUIDl75B/3xHRX+1BUIDl75BwdqCBQI+V4OFQAAAAADABcAFwSZBJkADwAfAC8AAAAyHgIUDgIiLgI0PgEFIyIGFxMeATsBMjY3EzYmAyMiBh0BFBY7ATI2PQE0JgHj6tabW1ub1urWm1tbmwGz0BQYBDoEIxQ2FCMEOgQYMZYKDw8KlgoPDwSZW5vW6tabW1ub1urWm7odFP7SFB0dFAEuFB3+DA8KlgoPDwqWCg8AAAAABQAAAAAEsASwAEkAVQBhAGgAbwAAATIWHwEWHwEWFxY3Nj8BNjc2MzIWHwEWHwIeATsBMhYdARQGKwEiBh0BIREjESE1NCYrASImPQE0NjsBMjY1ND8BNjc+BAUHBhY7ATI2LwEuAQUnJgYPAQYWOwEyNhMhIiY1ESkBERQGIyERAQQJFAUFFhbEFQ8dCAsmxBYXERUXMA0NDgQZCAEPCj0KDw8KMgoP/nDI/nAPCjIKDw8KPQsOCRkFDgIGFRYfAp2mBwQK2woKAzMDEP41sQgQAzMDCgrnCwMe/okKDwGQAlgPCv6JBLAEAgIKDXYNCxUJDRZ2DQoHIREQFRh7LAkLDwoyCg8PCq8BLP7UrwoPDwoyCg8GBQQwgBkUAwgWEQ55ogcKDgqVCgSqnQcECo8KDgr8cg8KAXf+iQoPAZAAAAAAAgAAAAwErwSmACsASQAAATYWFQYCDgQuAScmByYOAQ8BBiY1NDc+ATc+AScuAT4BNz4GFyYGBw4BDwEOBAcOARY2Nz4CNz4DNz4BBI0IGgItQmxhi2KORDg9EQQRMxuZGhYqCFUYEyADCQIQOjEnUmFch3vAJQgdHyaiPT44XHRZUhcYDhItIRmKcVtGYWtbKRYEBKYDEwiy/t3IlVgxEQgLCwwBAQIbG5kYEyJAJghKFRE8Hzdff4U/M0o1JSMbL0QJGCYvcSEhHjZST2c1ODwEJygeW0AxJUBff1UyFAABAF0AHgRyBM8ATwAAAQ4BHgQXLgc+ATceAwYHDgQHBicmNzY3PgQuAScWDgMmJy4BJyY+BDcGHgM3PgEuAicmPgMCjScfCic4R0IgBBsKGAoQAwEJEg5gikggBhANPkpTPhZINx8SBgsNJysiCRZOQQoVNU1bYC9QZwICBAUWITsoCAYdJzIYHw8YIiYHDyJJYlkEz0OAZVxEOSQMBzgXOB42IzElKRIqg5Gnl0o3Z0c6IAYWCwYNAwQFIDhHXGF1OWiqb0sdBxUknF0XNTQ8PEUiNWNROBYJDS5AQVUhVZloUSkAAAAAA//cAGoE1ARGABsAPwBRAAAAMh4FFA4FIi4FND4EBSYGFxYVFAYiJjU0NzYmBwYHDgEXHgQyPgM3NiYnJgUHDgEXFhcWNj8BNiYnJicuAQIGpJ17bk85HBw6T257naKde25POhwcOU9uewIPDwYIGbD4sBcIBw5GWg0ECxYyWl+DiINfWjIWCwQMWv3/Iw8JCSU4EC0OIw4DDywtCyIERi1JXGJcSSpJXGJcSS0tSVxiXEkqSVxiXEncDwYTOT58sLB8OzcTBg9FcxAxEiRGXkQxMEVeRSQSMRF1HiQPLxJEMA0EDyIPJQ8sSRIEAAAABP/cAAAE1ASwABQAJwA7AEwAACEjNy4ENTQ+BTMyFzczEzceARUUDgMHNz4BNzYmJyYlBgcOARceBBc3LgE1NDc2JhcHDgEXFhcWNj8CJyYnLgECUJQfW6l2WSwcOU9ue51SPUEglCYvbIknUGqYUi5NdiYLBAw2/VFGWg0ECxIqSExoNSlrjxcIB3wjDwkJJTgQLQ4MFgMsLQsieBRhdHpiGxVJXGJcSS0Pef5StVXWNBpacm5jGq0xiD8SMRFGckVzEDESHjxRQTkNmhKnbjs3EwZwJA8vEkQwDQQPC1YELEkSBAAAAAP/ngAABRIEqwALABgAKAAAJwE2FhcBFgYjISImJSE1NDY7ATIWHQEhAQczMhYPAQ4BKwEiJi8BJjZaAoIUOBQCghUbJfryJRsBCgFZDwqWCg8BWf5DaNAUGAQ6BCMUNhQjBDoEGGQEKh8FIfvgIEdEhEsKDw8KSwLT3x0U/BQdHRT8FB0AAAABAGQAFQSwBLAAKAAAADIWFREBHgEdARQGJyURFh0BFAYvAQcGJj0BNDcRBQYmPQE0NjcBETQCTHxYAWsPFhgR/plkGhPNzRMaZP6ZERgWDwFrBLBYPv6t/rsOMRQpFA0M+f75XRRAFRAJgIAJEBVAFF0BB/kMDRQpFDEOAUUBUz4AAAARAAAAAARMBLAAHQAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAAABMzIWHQEzMhYdASE1NDY7ATU0NjsBMhYdASE1NDYBERQGIyEiJjURFxUzNTMVMzUzFTM1MxUzNTMVMzUFFTM1MxUzNTMVMzUzFTM1MxUzNQUVMzUzFTM1MxUzNTMVMzUzFTM1A1JkFR0yFR37tB0VMh0VZBUdAfQdAQ8dFfwYFR1kZGRkZGRkZGRk/HxkZGRkZGRkZGT8fGRkZGRkZGRkZASwHRUyHRWWlhUdMhUdHRUyMhUd/nD9EhUdHRUC7shkZGRkZGRkZGRkyGRkZGRkZGRkZGTIZGRkZGRkZGRkZAAAAAMAAAAZBXcElwAZACUANwAAARcWFA8BBiY9ASMBISImPQE0NjsBATM1NDYBBycjIiY9ATQ2MyEBFxYUDwEGJj0BIyc3FzM1NDYEb/kPD/kOFZ/9qP7dFR0dFdECWPEV/amNetEVHR0VASMDGvkPD/kOFfG1jXqfFQSN5g4qDuYOCBWW/agdFWQVHQJYlhUI/piNeh0VZBUd/k3mDioO5g4IFZa1jXqWFQgAAAABAAAAAASwBEwAEgAAEyEyFhURFAYjIQERIyImNRE0NmQD6Ck7Oyn9rP7QZCk7OwRMOyn9qCk7/tQBLDspAlgpOwAAAAMAZAAABEwEsAAJABMAPwAAEzMyFh0BITU0NiEzMhYdASE1NDYBERQOBSIuBTURIRUUFRwBHgYyPgYmNTQ9AZbIFR3+1B0C0cgVHf7UHQEPBhgoTGacwJxmTCgYBgEsAwcNFB8nNkI2Jx8TDwUFAQSwHRX6+hUdHRX6+hUd/nD+1ClJalZcPigoPlxWakkpASz6CRIVKyclIRsWEAgJEBccISUnKhURCPoAAAAB//8A1ARMA8IABQAAAQcJAScBBEzG/p/+n8UCJwGbxwFh/p/HAicAAQAAAO4ETQPcAAUAAAkCNwkBBE392v3ZxgFhAWEDFf3ZAifH/p8BYQAAAAAC/1EAZAVfA+gAFAApAAABITIWFREzMhYPAQYiLwEmNjsBESElFxYGKwERIRchIiY1ESMiJj8BNjIBlALqFR2WFQgO5g4qDuYOCBWW/oP+HOYOCBWWAYHX/RIVHZYVCA7mDioD6B0V/dkVDvkPD/kOFQGRuPkOFf5wyB0VAiYVDvkPAAABAAYAAASeBLAAMAAAEzMyFh8BITIWBwMOASMhFyEyFhQGKwEVFAYiJj0BIRUUBiImPQEjIiYvAQMjIiY0NjheERwEJgOAGB4FZAUsIf2HMAIXFR0dFTIdKh3+1B0qHR8SHQYFyTYUHh4EsBYQoiUY/iUVK8gdKh0yFR0dFTIyFR0dFTIUCQoDwR0qHQAAAAACAAAAAASwBEwACwAPAAABFSE1MzQ2MyEyFhUFIREhBLD7UMg7KQEsKTv9RASw+1AD6GRkKTs7Kcj84AACAAAAAAXcBEwADAAQAAATAxEzNDYzITIWFSEVBQEhAcjIyDspASwqOgH0ASz+1PtQASwDIP5wAlgpOzspyGT9RAK8AAEBRQAAA2sErwAbAAABFxYGKwERMzIWDwEGIi8BJjY7AREjIiY/ATYyAnvmDggVlpYVCA7mDioO5g4IFZaWFQgO5g4qBKD5DhX9pxUO+Q8P+Q4VAlkVDvkPAAAAAQABAUQErwNrABsAAAEXFhQPAQYmPQEhFRQGLwEmND8BNhYdASE1NDYDqPkODvkPFf2oFQ/5Dg75DxUCWBUDYOUPKQ/lDwkUl5cUCQ/lDykP5Q8JFZWVFQkAAAAEAAAAAASwBLAACQAZAB0AIQAAAQMuASMhIgYHAwUhIgYdARQWMyEyNj0BNCYFNTMVMzUzFQSRrAUkFP1gFCQFrAQt/BgpOzspA+gpOzv+q2RkZAGQAtwXLSgV/R1kOylkKTs7KWQpO8hkZGRkAAAAA/+cAGQEsARMAAsAIwAxAAAAMhYVERQGIiY1ETQDJSMTFgYjIisBIiYnAj0BNDU0PgE7ASUBFSIuAz0BND4CNwRpKh0dKh1k/V0mLwMRFQUCVBQdBDcCCwzIAqP8GAQOIhoWFR0dCwRMHRX8rhUdHRUDUhX8mcj+7BAIHBUBUQ76AgQQDw36/tT6AQsTKRwyGigUDAEAAAACAEoAAARmBLAALAA1AAABMzIWDwEeARcTFzMyFhQGBw4EIyIuBC8BLgE0NjsBNxM+ATcnJjYDFjMyNw4BIiYCKV4UEgYSU3oPP3YRExwaEggeZGqfTzl0XFU+LwwLEhocExF2Pw96UxIGEyQyNDUxDDdGOASwFRMlE39N/rmtHSkoBwQLHBYSCg4REg4FBAgoKR2tAUdNfhQgExr7vgYGMT09AAEAFAAUBJwEnAAXAAABNwcXBxcHFycHJwcnBzcnNyc3Jxc3FzcDIOBO6rS06k7gLZubLeBO6rS06k7gLZubA7JO4C2bmy3gTuq0tOpO4C2bmy3gTuq0tAADAAAAZASwBLAAIQAtAD0AAAEzMhYdAQchMhYdARQHAw4BKwEiJi8BIyImNRE0PwI+ARcPAREzFzMTNSE3NQEzMhYVERQGKwEiJjURNDYCijIoPBwBSCg8He4QLBf6B0YfHz0tNxSRYA0xG2SWZIjW+v4+Mv12ZBUdHRVkFR0dBLBRLJZ9USxkLR3+qBghMhkZJCcBkCQbxMYcKGTU1f6JZAF3feGv/tQdFf4MFR0dFQH0FR0AAAAAAwAAAAAEsARMACAAMAA8AAABMzIWFxMWHQEUBiMhFh0BFAYrASImLwImNRE0NjsBNgUzMhYVERQGKwEiJjURNDYhByMRHwEzNSchNQMCWPoXLBDuHTwo/rgcPCgyGzENYJEUNy09fP3pZBUdHRVkFR0dAl+IZJZkMjIBwvoETCEY/qgdLWQsUXYHlixRKBzGxBskAZAnJGRkHRX+DBUdHRUB9BUdZP6J1dSv4X0BdwADAAAAZAUOBE8AGwA3AEcAAAElNh8BHgEPASEyFhQGKwEDDgEjISImNRE0NjcXERchEz4BOwEyNiYjISoDLgQnJj8BJwUzMhYVERQGKwEiJjURNDYBZAFrHxZuDQEMVAEuVGxuVGqDBhsP/qoHphwOOmQBJYMGGw/LFRMSFv44AgoCCQMHAwUDAQwRklb9T2QVHR0VZBUdHQNp5hAWcA0mD3lMkE7+rRUoog0CDRElCkj+CVkBUxUoMjIBAgIDBQIZFrdT5B0V/gwVHR0VAfQVHQAAAAP/nABkBLAETwAdADYARgAAAQUeBBURFAYjISImJwMjIiY0NjMhJyY2PwE2BxcWBw4FKgIjIRUzMhYXEyE3ESUFMzIWFREUBisBIiY1ETQ2AdsBbgIIFBANrAf+qg8bBoNqVW1sVAEuVQsBDW4WSpIRDAIDBQMHAwkDCgH+Jd0PHAaCASZq/qoCUGQVHR0VZBUdHQRP5gEFEBEXC/3zDaIoFQFTTpBMeQ8mDXAWrrcWGQIFAwICAWQoFf6tWQH37OQdFf4MFR0dFQH0FR0AAAADAGEAAARMBQ4AGwA3AEcAAAAyFh0BBR4BFREUBiMhIiYvAQMmPwE+AR8BETQXNTQmBhURHAMOBAcGLwEHEyE3ESUuAQMhMhYdARQGIyEiJj0BNDYB3pBOAVMVKKIN/fMRJQoJ5hAWcA0mD3nGMjIBAgIDBQIZFrdT7AH3Wf6tFSiWAfQVHR0V/gwVHR0FDm5UaoMGGw/+qgemHA4OAWsfFm4NAQxUAS5U1ssVExIW/jgCCgIJAwcDBQMBDBGSVv6tZAElgwYb/QsdFWQVHR0VZBUdAAP//QAGA+gFFAAPAC0ASQAAASEyNj0BNCYjISIGHQEUFgEVFAYiJjURBwYmLwEmNxM+BDMhMhYVERQGBwEDFzc2Fx4FHAIVERQWNj0BNDY3JREnAV4B9BUdHRX+DBUdHQEPTpBMeQ8mDXAWEOYBBRARFwsCDQ2iKBX9iexTtxYZAgUDAgIBMjIoFQFTWQRMHRVkFR0dFWQVHfzmalRubFQBLlQMAQ1uFh8BawIIEw8Mpgf+qg8bBgHP/q1WkhEMAQMFAwcDCQIKAv44FhITFcsPGwaDASVkAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBJSYGHQEhIgYdARQWMyEVFBY3JTY0AeLs1ptbW5vW7NabW1ubAob+7RAX/u0KDw8KARMXEAETEASaW5vW7NabW1ub1uzWm/453w0KFYkPCpYKD4kVCg3fDSYAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgENAQYUFwUWNj0BITI2PQE0JiMhNTQmAeLs1ptbW5vW7NabW1ubASX+7RAQARMQFwETCg8PCv7tFwSaW5vW7NabW1ub1uzWm+jfDSYN3w0KFYkPCpYKD4kVCgAAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBAyYiBwMGFjsBERQWOwEyNjURMzI2AeLs1ptbW5vW7NabW1ubAkvfDSYN3w0KFYkPCpYKD4kVCgSaW5vW7NabW1ub1uzWm/5AARMQEP7tEBf+7QoPDwoBExcAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEFIyIGFREjIgYXExYyNxM2JisBETQmAeLs1ptbW5vW7NabW1ubAZeWCg+JFQoN3w0mDd8NChWJDwSaW5vW7NabW1ub1uzWm7sPCv7tFxD+7RAQARMQFwETCg8AAAMAGAAYBJgEmAAPAJYApgAAADIeAhQOAiIuAjQ+ASUOAwcGJgcOAQcGFgcOAQcGFgcUFgcyHgEXHgIXHgI3Fg4BFx4CFxQGFBcWNz4CNy4BJy4BJyIOAgcGJyY2NS4BJzYuAQYHBicmNzY3HgIXHgMfAT4CJyY+ATc+AzcmNzIWMjY3LgMnND4CJiceAT8BNi4CJwYHFB4BFS4CJz4BNxYyPgEB5OjVm1xcm9Xo1ZtcXJsBZA8rHDoKDz0PFD8DAxMBAzEFCRwGIgEMFhkHECIvCxU/OR0HFBkDDRQjEwcFaHUeISQDDTAMD0UREi4oLBAzDwQBBikEAQMLGhIXExMLBhAGKBsGBxYVEwYFAgsFAwMNFwQGCQcYFgYQCCARFwkKKiFBCwQCAQMDHzcLDAUdLDgNEiEQEgg/KhADGgMKEgoRBJhcm9Xo1ZtcXJvV6NWbEQwRBwkCAwYFBycPCxcHInIWInYcCUcYChQECA4QBAkuHgQPJioRFRscBAcSCgwCch0kPiAIAQcHEAsBAgsLIxcBMQENCQIPHxkCFBkdHB4QBgEBBwoMGBENBAMMJSAQEhYXDQ4qFBkKEhIDCQsXJxQiBgEOCQwHAQ0DBAUcJAwSCwRnETIoAwEJCwsLJQcKDBEAAAAAAQAAAAIErwSFABYAAAE2FwUXNxYGBw4BJwEGIi8BJjQ3ASY2AvSkjv79kfsGUE08hjv9rA8rD28PDwJYIk8EhVxliuh+WYcrIgsW/awQEG4PKxACV2XJAAYAAABgBLAErAAPABMAIwAnADcAOwAAEyEyFh0BFAYjISImPQE0NgUjFTMFITIWHQEUBiMhIiY9ATQ2BSEVIQUhMhYdARQGIyEiJj0BNDYFIRUhZAPoKTs7KfwYKTs7BBHIyPwYA+gpOzsp/BgpOzsEEf4MAfT8GAPoKTs7KfwYKTs7BBH+1AEsBKw7KWQpOzspZCk7ZGTIOylkKTs7KWQpO2RkyDspZCk7OylkKTtkZAAAAAIAZAAABEwEsAALABEAABMhMhYUBiMhIiY0NgERBxEBIZYDhBUdHRX8fBUdHQI7yP6iA4QEsB0qHR0qHf1E/tTIAfQB9AAAAAMAAABkBLAEsAAXABsAJQAAATMyFh0BITIWFREhNSMVIRE0NjMhNTQ2FxUzNQEVFAYjISImPQEB9MgpOwEsKTv+DMj+DDspASw7KcgB9Dsp/BgpOwSwOylkOyn+cGRkAZApO2QpO2RkZP1EyCk7OynIAAAABAAAAAAEsASwABUAKwBBAFcAABMhMhYPARcWFA8BBiIvAQcGJjURNDYpATIWFREUBi8BBwYiLwEmND8BJyY2ARcWFA8BFxYGIyEiJjURNDYfATc2MgU3NhYVERQGIyEiJj8BJyY0PwE2MhcyASwVCA5exwcHaggUCMdeDhUdAzUBLBUdFQ5exwgUCGoHB8deDgj+L2oHB8deDggV/tQVHRUOXscIFALLXg4VHRX+1BUIDl7HBwdqCBQIBLAVDl7HCBQIagcHx14OCBUBLBUdHRX+1BUIDl7HBwdqCBQIx14OFf0maggUCMdeDhUdFQEsFQgOXscHzl4OCBX+1BUdFQ5exwgUCGoHBwAAAAYAAAAABKgEqAAPABsAIwA7AEMASwAAADIeAhQOAiIuAjQ+AQQiDgEUHgEyPgE0JiQyFhQGIiY0JDIWFAYjIicHFhUUBiImNTQ2PwImNTQEMhYUBiImNCQyFhQGIiY0Advy3Z9fX5/d8t2gXl6gAcbgv29vv+C/b2/+LS0gIC0gAUwtICAWDg83ETNIMykfegEJ/octICAtIAIdLSAgLSAEqF+f3fLdoF5eoN3y3Z9Xb7/gv29vv+C/BiAtISEtICAtIQqRFxwkMzMkIDEFfgEODhekIC0gIC0gIC0gIC0AAf/YAFoEuQS8AFsAACUBNjc2JicmIyIOAwcABw4EFx4BMzI3ATYnLgEjIgcGBwEOASY0NwA3PgEzMhceARcWBgcOBgcGIyImJyY2NwE2NzYzMhceARcWBgcBDgEnLgECIgHVWwgHdl8WGSJBMD8hIP6IDx4eLRMNBQlZN0ozAiQkEAcdEhoYDRr+qw8pHA4BRyIjQS4ODyw9DQ4YIwwod26La1YOOEBGdiIwGkQB/0coW2tQSE5nDxE4Qv4eDyoQEAOtAdZbZWKbEQQUGjIhH/6JDxsdNSg3HT5CMwIkJCcQFBcMGv6uDwEcKQ4BTSIjIQEINykvYyMLKnhuiWZMBxtAOU6+RAH/SBg3ISSGV121Qv4kDwIPDyYAAAACAGQAWASvBEQAGQBEAAABPgIeAhUUDgMHLgQ1ND4CHgEFIg4DIi4DIyIGFRQeAhcWFx4EMj4DNzY3PgQ1NCYCiTB7eHVYNkN5hKg+PqeFeEM4WnZ4eQEjIT8yLSohJyktPyJDbxtBMjMPBw86KzEhDSIzKUAMBAgrKT8dF2oDtURIBS1TdkA5eYB/slVVsn+AeTlAdlMtBUgtJjY1JiY1NiZvTRc4SjQxDwcOPCouGBgwKEALBAkpKkQqMhNPbQACADn/8gR3BL4AFwAuAAAAMh8BFhUUBg8BJi8BNycBFwcvASY0NwEDNxYfARYUBwEGIi8BJjQ/ARYfAQcXAQKru0KNQjgiHR8uEl/3/nvUaRONQkIBGxJpCgmNQkL+5UK6Qo1CQjcdLhJf9wGFBL5CjUJeKmsiHTUuEl/4/nvUahKNQrpCARv+RmkICY1CukL+5UJCjUK7Qjc3LxFf+AGFAAAAAAMAyAAAA+gEsAARABUAHQAAADIeAhURFAYjISImNRE0PgEHESERACIGFBYyNjQCBqqaZDo7Kf2oKTs8Zj4CWP7/Vj09Vj0EsB4uMhX8Ryk7OykDuRUzLar9RAK8/RY9Vj09VgABAAAAAASwBLAAFgAACQEWFAYiLwEBEScBBRMBJyEBJyY0NjIDhgEbDx0qDiT+6dT+zP7oywEz0gEsAQsjDx0qBKH+5g8qHQ8j/vX+1NL+zcsBGAE01AEXJA4qHQAAAAADAScAEQQJBOAAMgBAAEsAAAEVHgQXIy4DJxEXHgQVFAYHFSM1JicuASczHgEXEScuBDU0PgI3NRkBDgMVFB4DFxYXET4ENC4CArwmRVI8LAKfBA0dMydAIjxQNyiym2SWVygZA4sFV0obLkJOMCAyVWg6HSoqFQ4TJhkZCWgWKTEiGBkzNwTgTgUTLD9pQiQuLBsH/s0NBxMtPGQ+i6oMTU8QVyhrVk1iEAFPCA4ZLzlYNkZwSCoGTf4SARIEDh02Jh0rGRQIBgPQ/soCCRYgNEM0JRkAAAABAGQAZgOUBK0ASgAAATIeARUjNC4CIyIGBwYVFB4BFxYXMxUjFgYHBgc+ATM2FjMyNxcOAyMiLgEHDgEPASc+BTc+AScjNTMmJy4CPgE3NgIxVJlemSc8OxolVBQpGxoYBgPxxQgVFS02ImIWIIwiUzUyHzY4HCAXanQmJ1YYFzcEGAcTDBEJMAwk3aYXFQcKAg4tJGEErVCLTig/IhIdFSw5GkowKgkFZDKCHj4yCg8BIh6TExcIASIfBAMaDAuRAxAFDQsRCjePR2QvORQrREFMIVgAAAACABn//wSXBLAADwAfAAABMzIWDwEGIi8BJjY7AREzBRcWBisBESMRIyImPwE2MgGQlhUIDuYOKg7mDggVlsgCF+YOCBWWyJYVCA7mDioBLBYO+g8P+g4WA4QQ+Q4V/HwDhBUO+Q8AAAQAGf//A+gEsAAHABcAGwAlAAABIzUjFSMRIQEzMhYPAQYiLwEmNjsBETMFFTM1EwczFSE1NyM1IQPoZGRkASz9qJYVCA7mDioO5g4IFZbIAZFkY8jI/tTIyAEsArxkZAH0/HwWDvoPD/oOFgOEZMjI/RL6ZJb6ZAAAAAAEABn//wPoBLAADwAZACEAJQAAATMyFg8BBiIvASY2OwERMwUHMxUhNTcjNSERIzUjFSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAljIyP7UyMgBLGRkZAEsx2QBLBYO+g8P+g4WA4SW+mSW+mT7UGRkAfRkyMgAAAAEABn//wRMBLAADwAVABsAHwAAATMyFg8BBiIvASY2OwERMwEjESM1MxMjNSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAlhkZMhkZMgBLMdkASwWDvoPD/oOFgOE/gwBkGT7UGQBkGTIyAAAAAAEABn//wRMBLAADwAVABkAHwAAATMyFg8BBiIvASY2OwERMwEjNSMRIQcVMzUDIxEjNTMBkJYVCA7mDioO5g4IFZbIArxkyAEsx2QBZGTIASwWDvoPD/oOFgOE/gxkAZBkyMj7tAGQZAAAAAAFABn//wSwBLAADwATABcAGwAfAAABMzIWDwEGIi8BJjY7AREzBSM1MxMhNSETITUhEyE1IQGQlhUIDuYOKg7mDggVlsgB9MjIZP7UASxk/nABkGT+DAH0ASwWDvoPD/oOFgOEyMj+DMj+DMj+DMgABQAZ//8EsASwAA8AEwAXABsAHwAAATMyFg8BBiIvASY2OwERMwUhNSEDITUhAyE1IQMjNTMBkJYVCA7mDioO5g4IFZbIAyD+DAH0ZP5wAZBk/tQBLGTIyAEsFg76Dw/6DhYDhMjI/gzI/gzI/gzIAAIAAAAABEwETAAPAB8AAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmAV4BkKK8u6P+cKW5uQJn/gwpOzspAfQpOzsETLuj/nClubmlAZClucg7Kf4MKTs7KQH0KTsAAAAAAwAAAAAETARMAA8AHwArAAABITIWFREUBiMhIiY1ETQ2BSEiBhURFBYzITI2NRE0JgUXFhQPAQYmNRE0NgFeAZClubml/nCju7wCZP4MKTs7KQH0KTs7/m/9ERH9EBgYBEy5pf5wpbm5pQGQo7vIOyn+DCk7OykB9Ck7gr4MJAy+DAsVAZAVCwAAAAADAAAAAARMBEwADwAfACsAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFg8BBiIvASY2AV4BkKO7uaX+cKW5uQJn/gwpOzspAfQpOzv+FQGQFQsMvgwkDL4MCwRMvKL+cKW5uaUBkKO7yDsp/gwpOzspAfQpO8gYEP0REf0QGAAAAAMAAAAABEwETAAPAB8AKwAAASEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFFxYGIyEiJj8BNjIBXgGQpbm5pf5wo7u5Amf+DCk7OykB9Ck7O/77vgwLFf5wFQsMvgwkBEy5pf5wo7u8ogGQpbnIOyn+DCk7OykB9Ck7z/0QGBgQ/REAAAAAAgAAAAAFFARMAB8ANQAAASEyFhURFAYjISImPQE0NjMhMjY1ETQmIyEiJj0BNDYHARYUBwEGJj0BIyImPQE0NjsBNTQ2AiYBkKW5uaX+cBUdHRUBwik7Oyn+PhUdHb8BRBAQ/rwQFvoVHR0V+hYETLml/nCluR0VZBUdOykB9Ck7HRVkFR3p/uQOJg7+5A4KFZYdFcgVHZYVCgAAAQDZAAID1wSeACMAAAEXFgcGAgclMhYHIggBBwYrAScmNz4BPwEhIicmNzYANjc2MwMZCQgDA5gCASwYEQ4B/vf+8wQMDgkJCQUCUCcn/tIXCAoQSwENuwUJEASeCQoRC/5TBwEjEv7K/sUFDwgLFQnlbm4TFRRWAS/TBhAAAAACAAAAAAT+BEwAHwA1AAABITIWHQEUBiMhIgYVERQWMyEyFh0BFAYjISImNRE0NgUBFhQHAQYmPQEjIiY9ATQ2OwE1NDYBXgGQFR0dFf4+KTs7KQHCFR0dFf5wpbm5AvEBRBAQ/rwQFvoVHR0V+hYETB0VZBUdOyn+DCk7HRVkFR25pQGQpbnp/uQOJg7+5A4KFZYdFcgVHZYVCgACAAAAAASwBLAAFQAxAAABITIWFREUBi8BAQYiLwEmNDcBJyY2ASMiBhURFBYzITI2PQE3ERQGIyEiJjURNDYzIQLuAZAVHRUObf7IDykPjQ8PAThtDgj+75wpOzspAfQpO8i7o/5wpbm5pQEsBLAdFf5wFQgObf7IDw+NDykPAThtDhX+1Dsp/gwpOzsplMj+1qW5uaUBkKW5AAADAA4ADgSiBKIADwAbACMAAAAyHgIUDgIiLgI0PgEEIg4BFB4BMj4BNCYEMhYUBiImNAHh7tmdXV2d2e7ZnV1dnQHD5sJxccLmwnFx/nugcnKgcgSiXZ3Z7tmdXV2d2e7ZnUdxwubCcXHC5sJzcqBycqAAAAMAAAAABEwEsAAVAB8AIwAAATMyFhURMzIWBwEGIicBJjY7ARE0NgEhMhYdASE1NDYFFTM1AcLIFR31FAoO/oEOJw3+hQ0JFfod/oUD6BUd+7QdA2dkBLAdFf6iFg/+Vg8PAaoPFgFeFR38fB0V+voVHWQyMgAAAAMAAAAABEwErAAVAB8AIwAACQEWBisBFRQGKwEiJj0BIyImNwE+AQEhMhYdASE1NDYFFTM1AkcBeg4KFfQiFsgUGPoUCw4Bfw4n/fkD6BUd+7QdA2dkBJ7+TQ8g+hQeHRX6IQ8BrxAC/H8dFfr6FR1kMjIAAwAAAAAETARLABQAHgAiAAAJATYyHwEWFAcBBiInASY0PwE2MhcDITIWHQEhNTQ2BRUzNQGMAXEHFQeLBwf98wcVB/7cBweLCBUH1APoFR37tB0DZ2QC0wFxBweLCBUH/fMICAEjCBQIiwcH/dIdFfr6FR1kMjIABAAAAAAETASbAAkAGQAjACcAABM3NjIfAQcnJjQFNzYWFQMOASMFIiY/ASc3ASEyFh0BITU0NgUVMzWHjg4qDk3UTQ4CFtIOFQIBHRX9qxUIDtCa1P49A+gVHfu0HQNnZAP/jg4OTdRMDyqa0g4IFf2pFB4BFQ7Qm9T9Oh0V+voVHWQyMgAAAAQAAAAABEwEsAAPABkAIwAnAAABBR4BFRMUBi8BByc3JyY2EwcGIi8BJjQ/AQEhMhYdASE1NDYFFTM1AV4CVxQeARUO0JvUm9IOCMNMDyoOjg4OTf76A+gVHfu0HQNnZASwAgEdFf2rFQgO0JrUmtIOFf1QTQ4Ojg4qDk3+WB0V+voVHWQyMgACAAT/7ASwBK8ABQAIAAAlCQERIQkBFQEEsP4d/sb+cQSs/TMCq2cBFP5xAacDHPz55gO5AAAAAAIAAABkBEwEsAAVABkAAAERFAYrAREhESMiJjURNDY7AREhETMHIzUzBEwdFZb9RJYVHR0V+gH0ZMhkZAPo/K4VHQGQ/nAdFQPoFB7+1AEsyMgAAAMAAABFBN0EsAAWABoALwAAAQcBJyYiDwEhESMiJjURNDY7AREhETMHIzUzARcWFAcBBiIvASY0PwE2Mh8BATYyBEwC/tVfCRkJlf7IlhUdHRX6AfRkyGRkAbBqBwf+XAgUCMoICGoHFQdPASkHFQPolf7VXwkJk/5wHRUD6BQe/tQBLMjI/c5qBxUH/lsHB8sHFQdqCAhPASkHAAMAAAANBQcEsAAWABoAPgAAAREHJy4BBwEhESMiJjURNDY7AREhETMHIzUzARcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyBExnhg8lEP72/reWFR0dFfoB9GTIZGQB9kYPD4ODDw9GDykPg4MPKQ9GDw+Dgw8PRg8pD4ODDykD6P7zZ4YPAw7+9v5wHRUD6BQe/tQBLMjI/YxGDykPg4MPKQ9GDw+Dgw8PRg8pD4ODDykPRg8Pg4MPAAADAAAAFQSXBLAAFQAZAC8AAAERISIGHQEhESMiJjURNDY7AREhETMHIzUzEzMyFh0BMzIWDwEGIi8BJjY7ATU0NgRM/qIVHf4MlhUdHRX6AfRkyGRklmQVHZYVCA7mDioO5g4IFZYdA+j+1B0Vlv5wHRUD6BQe/tQBLMjI/agdFfoVDuYODuYOFfoVHQAAAAADAAAAAASXBLAAFQAZAC8AAAERJyYiBwEhESMiJjURNDY7AREhETMHIzUzExcWBisBFRQGKwEiJj0BIyImPwE2MgRMpQ4qDv75/m6WFR0dFfoB9GTIZGTr5g4IFZYdFWQVHZYVCA7mDioD6P5wpQ8P/vf+cB0VA+gUHv7UASzIyP2F5Q8V+hQeHhT6FQ/lDwADAAAAyASwBEwACQATABcAABMhMhYdASE1NDYBERQGIyEiJjURExUhNTIETBUd+1AdBJMdFfu0FR1kAZAETB0VlpYVHf7U/doVHR0VAib+1MjIAAAGAAMAfQStBJcADwAZAB0ALQAxADsAAAEXFhQPAQYmPQEhNSE1NDYBIyImPQE0NjsBFyM1MwE3NhYdASEVIRUUBi8BJjQFIzU7AjIWHQEUBisBA6f4Dg74DhX+cAGQFf0vMhUdHRUyyGRk/oL3DhUBkP5wFQ73DwOBZGRkMxQdHRQzBI3mDioO5g4IFZbIlhUI/oUdFWQVHcjI/cvmDggVlsiWFQgO5g4qecgdFWQVHQAAAAACAGQAAASwBLAAFgBRAAABJTYWFREUBisBIiY1ES4ENRE0NiUyFh8BERQOAg8BERQGKwEiJjURLgQ1ETQ+AzMyFh8BETMRPAE+AjMyFh8BETMRND4DA14BFBklHRXIFR0EDiIaFiX+4RYZAgEVHR0LCh0VyBUdBA4iGhYBBwoTDRQZAgNkBQkVDxcZAQFkAQUJFQQxdBIUH/uuFR0dFQGNAQgbHzUeAWcfRJEZDA3+Phw/MSkLC/5BFR0dFQG/BA8uLkAcAcICBxENCxkMDf6iAV4CBxENCxkMDf6iAV4CBxENCwABAGQAAASwBEwAMwAAARUiDgMVERQWHwEVITUyNjURIREUFjMVITUyPgM1ETQmLwE1IRUiBhURIRE0JiM1BLAEDiIaFjIZGf5wSxn+DBlL/nAEDiIaFjIZGQGQSxkB9BlLBEw4AQUKFA78iBYZAQI4OA0lAYr+diUNODgBBQoUDgN4FhkBAjg4DSX+dgGKJQ04AAAABgAAAAAETARMAAwAHAAgACQAKAA0AAABITIWHQEjBTUnITchBSEyFhURFAYjISImNRE0NhcVITUBBTUlBRUhNQUVFAYjIQchJyE3MwKjAXcVHWn+2cj+cGQBd/4lASwpOzsp/tQpOzspASwCvP5wAZD8GAEsArwdFf6JZP6JZAGQyGkD6B0VlmJiyGTIOyn+DCk7OykB9Ck7ZMjI/veFo4XGyMhm+BUdZGTIAAEAEAAQBJ8EnwAmAAATNzYWHwEWBg8BHgEXNz4BHwEeAQ8BBiIuBicuBTcRohEuDosOBhF3ZvyNdxEzE8ATBxGjAw0uMUxPZWZ4O0p3RjITCwED76IRBhPCFDERdo78ZXYRBA6IDi8RogEECBUgNUNjO0qZfHNVQBAAAAACAAAAAASwBEwAIwBBAAAAMh4EHwEVFAYvAS4BPQEmIAcVFAYPAQYmPQE+BRIyHgIfARUBHgEdARQGIyEiJj0BNDY3ATU0PgIB/LimdWQ/LAkJHRTKFB2N/sKNHRTKFB0DDTE7ZnTKcFImFgEBAW0OFR0V+7QVHRUOAW0CFiYETBUhKCgiCgrIFRgDIgMiFZIYGJIVIgMiAxgVyAQNJyQrIP7kExwcCgoy/tEPMhTUFR0dFdQUMg8BLzIEDSEZAAADAAAAAASwBLAADQAdACcAAAEHIScRMxUzNTMVMzUzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYETMj9qMjIyMjIyPyuArwVHR0VDIn8SokMFR0dswRMFR37UB0CvMjIAfTIyMjI/OAdKh1kZB0qHf7UHRUyMhUdAAAAAwBkAAAEsARMAAkAEwAdAAABIyIGFREhETQmASMiBhURIRE0JgEhETQ2OwEyFhUCvGQpOwEsOwFnZCk7ASw7/Rv+1DspZCk7BEw7KfwYA+gpO/7UOyn9RAK8KTv84AGQKTs7KQAAAAAF/5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQURByMRMwcRMxHIArx8sLB8/UR8sLAYA4T+DMjI/tTIyAEsAZBkyMhkZARMsHz+DHywsHwB9HywyP1EArzIZP7UZGQBLGT+1GQB9GT+1AEsAAAABf+cAAAEsARMAA8AEwAfACUAKQAAEyEyFhURFAYjISImNRE0NhcRIREBIzUjFSMRMxUzNTMFEQcjETMHETMRyAK8fLCwfP1EfLCwGAOE/gxkZGRkZGQBkGTIyGRkBEywfP4MfLCwfAH0fLDI/UQCvP2oyMgB9MjIZP7UZAH0ZP7UASwABP+cAAAEsARMAA8AEwAbACMAABMhMhYVERQGIyEiJjURNDYXESERBSMRMxUhESEFIxEzFSERIcgCvHywsHz9RHywsBgDhP4MyMj+1AEsAZDIyP7UASwETLB8/gx8sLB8AfR8sMj9RAK8yP7UZAH0ZP7UZAH0AAAABP+cAAAEsARMAA8AEwAWABkAABMhMhYVERQGIyEiJjURNDYXESERAS0BDQERyAK8fLCwfP1EfLCwGAOE/gz+1AEsAZD+1ARMsHz+DHywsHwB9HywyP1EArz+DJaWlpYBLAAAAAX/nAAABLAETAAPABMAFwAgACkAABMhMhYVERQGIyEiJjURNDYXESERAyERIQcjIgYVFBY7AQERMzI2NTQmI8gCvHywsHz9RHywsBgDhGT9RAK8ZIImOTYpgv4Mgik2OSYETLB8/gx8sLB8AfR8sMj9RAK8/agB9GRWQUFUASz+1FRBQVYAAAAF/5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQEjESM1MwMjNTPIArx8sLB8/UR8sLAYA4T+DMjI/tTIyAEsAZBkZMjIZGQETLB8/gx8sLB8AfR8sMj9RAK8yGT+1GRkASz+DAGQZP4MZAAG/5wAAASwBEwADwATABkAHwAjACcAABMhMhYVERQGIyEiJjURNDYXESERBTMRIREzASMRIzUzBRUzNQEjNTPIArx8sLB8/UR8sLAYA4T9RMj+1GQCWGRkyP2oZAEsZGQETLB8/gx8sLB8AfR8sMj9RAK8yP5wAfT+DAGQZMjIyP7UZAAF/5wAAASwBEwADwATABwAIgAmAAATITIWFREUBiMhIiY1ETQ2FxEhEQEHIzU3NSM1IQEjESM1MwMjNTPIArx8sLB8/UR8sLAYA4T+DMdkx8gBLAGQZGTIx2RkBEywfP4MfLCwfAH0fLDI/UQCvP5wyDLIlmT+DAGQZP4MZAAAAAMACQAJBKcEpwAPABsAJQAAADIeAhQOAiIuAjQ+AQQiDgEUHgEyPgE0JgchFSEVISc1NyEB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWz+1AEs/tRkZAEsBKdentvw255eXp7b8NueTHHC5MJxccLkwtDIZGTIZAAAAAAEAAkACQSnBKcADwAbACcAKwAAADIeAhQOAiIuAjQ+AQQiDgEUHgEyPgE0JgcVBxcVIycjFSMRIQcVMzUB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWwyZGRklmQBLMjIBKdentvw255eXp7b8NueTHHC5MJxccLkwtBkMmQyZGQBkGRkZAAAAv/y/50EwgRBACAANgAAATIWFzYzMhYUBisBNTQmIyEiBh0BIyImNTQ2NyY1ND4BEzMyFhURMzIWDwEGIi8BJjY7ARE0NgH3brUsLC54qqp4gB0V/tQVHd5QcFZBAmKqepYKD4kVCg3fDSYN3w0KFYkPBEF3YQ6t8a36FR0dFfpzT0VrDhMSZKpi/bMPCv7tFxD0EBD0EBcBEwoPAAAAAAL/8v+cBMMEQQAcADMAAAEyFhc2MzIWFxQGBwEmIgcBIyImNTQ2NyY1ND4BExcWBisBERQGKwEiJjURIyImNzY3NjIB9m62LCsueaoBeFr+hg0lDf6DCU9xVkECYqnm3w0KFYkPCpYKD4kVCg3HGBMZBEF3YQ+teGOkHAFoEBD+k3NPRWsOExNkqWP9kuQQF/7tCg8PCgETFxDMGBMAAAABAGQAAARMBG0AGAAAJTUhATMBMwkBMwEzASEVIyIGHQEhNTQmIwK8AZD+8qr+8qr+1P7Uqv7yqv7yAZAyFR0BkB0VZGQBLAEsAU3+s/7U/tRkHRUyMhUdAAAAAAEAeQAABDcEmwAvAAABMhYXHgEVFAYHFhUUBiMiJxUyFh0BITU0NjM1BiMiJjU0Ny4BNTQ2MzIXNCY1NDYCWF6TGll7OzIJaUo3LRUd/tQdFS03SmkELzlpSgUSAqMEm3FZBoNaPWcfHRpKaR77HRUyMhUd+x5pShIUFVg1SmkCAhAFdKMAAAAGACcAFASJBJwAEQAqAEIASgBiAHsAAAEWEgIHDgEiJicmAhI3PgEyFgUiBw4BBwYWHwEWMzI3Njc2Nz4BLwEmJyYXIgcOAQcGFh8BFjMyNz4BNz4BLwEmJyYWJiIGFBYyNjciBw4BBw4BHwEWFxYzMjc+ATc2Ji8BJhciBwYHBgcOAR8BFhcWMzI3PgE3NiYvASYD8m9PT29T2dzZU29PT29T2dzZ/j0EBHmxIgQNDCQDBBcGG0dGYAsNAwkDCwccBAVQdRgEDA0iBAQWBhJROQwMAwkDCwf5Y4xjY4xjVhYGElE6CwwDCQMLBwgEBVB1GAQNDCIEjRcGG0dGYAsNAwkDCwcIBAR5sSIEDQwkAwPyb/7V/tVvU1dXU28BKwErb1NXVxwBIrF5DBYDCQEWYEZHGwMVDCMNBgSRAhh1UA0WAwkBFTpREgMVCyMMBwT6Y2OMY2MVFTpREQQVCyMMBwQCGHVQDRYDCQEkFmBGRxsDFQwjDQYEASKxeQwWAwkBAAAABQBkAAAD6ASwAAwADwAWABwAIgAAASERIzUhFSERNDYzIQEjNQMzByczNTMDISImNREFFRQGKwECvAEstP6s/oQPCgI/ASzIZKLU1KJktP51Cg8DhA8KwwMg/oTIyALzCg/+1Mj84NTUyP4MDwoBi8jDCg8AAAAABQBkAAAD6ASwAAkADAATABoAIQAAASERCQERNDYzIQEjNRMjFSM1IzcDISImPQEpARUUBisBNQK8ASz+ov3aDwoCPwEsyD6iZKLUqv6dCg8BfAIIDwqbAyD9+AFe/doERwoP/tTI/HzIyNT+ZA8KNzcKD1AAAAAAAwAAAAAEsAP0AAgAGQAfAAABIxUzFyERIzcFMzIeAhUhFSEDETM0PgIBMwMhASEEiqJkZP7UotT9EsgbGiEOASz9qMhkDiEaAnPw8PzgASwB9AMgyGQBLNTUBBErJGT+ogHCJCsRBP5w/nAB9AAAAAMAAAAABEwETAAZADIAOQAAATMyFh0BMzIWHQEUBiMhIiY9ATQ2OwE1NDYFNTIWFREUBiMhIic3ARE0NjMVFBYzITI2AQc1IzUzNQKKZBUdMhUdHRX+1BUdHRUyHQFzKTs7Kf2oARP2/ro7KVg+ASw+WP201MjIBEwdFTIdFWQVHR0VZBUdMhUd+pY7KfzgKTsE9gFGAUQpO5Y+WFj95tSiZKIAAwBkAAAEvARMABkANgA9AAABMzIWHQEzMhYdARQGIyEiJj0BNDY7ATU0NgU1MhYVESMRMxQOAiMhIiY1ETQ2MxUUFjMhMjYBBzUjNTM1AcJkFR0yFR0dFf7UFR0dFTIdAXMpO8jIDiEaG/2oKTs7KVg+ASw+WAGc1MjIBEwdFTIdFWQVHR0VZBUdMhUd+pY7Kf4M/tQkKxEEOykDICk7lj5YWP3m1KJkogAAAAP/ogAABRYE1AALABsAHwAACQEWBiMhIiY3ATYyEyMiBhcTHgE7ATI2NxM2JgMVMzUCkgJ9FyAs+wQsIBcCfRZARNAUGAQ6BCMUNhQjBDoEGODIBK37sCY3NyYEUCf+TB0U/tIUHR0UAS4UHf4MZGQAAAAACQAAAAAETARMAA8AHwAvAD8ATwBfAG8AfwCPAAABMzIWHQEUBisBIiY9ATQ2EzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBqfoKDw8K+goPDwr6Cg8PCvoKDw8BmvoKDw8K+goPD/zq+goPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K+goPD/zq+goPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K+goPDwRMDwqWCg8PCpYKD/7UDwqWCg8PCpYKDw8KlgoPDwqWCg/+1A8KlgoPDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKD/7UDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKDw8KlgoPAAAAAwAAAAAEsAUUABkAKQAzAAABMxUjFSEyFg8BBgchJi8BJjYzITUjNTM1MwEhMhYUBisBFyE3IyImNDYDITIWHQEhNTQ2ArxkZAFePjEcQiko/PwoKUIcMT4BXmRkyP4+ArwVHR0VDIn8SooNFR0dswRMFR37UB0EsMhkTzeEUzMzU4Q3T2TIZPx8HSodZGQdKh3+1B0VMjIVHQAABAAAAAAEsAUUAAUAGQArADUAAAAyFhUjNAchFhUUByEyFg8BIScmNjMhJjU0AyEyFhQGKwEVBSElNSMiJjQ2AyEyFh0BITU0NgIwUDnCPAE6EgMBSCkHIq/9WrIiCikBSAOvArwVHR0VlgET/EoBE5YVHR2zBEwVHftQHQUUOykpjSUmCBEhFpGRFiERCCb+lR0qHcjIyMgdKh39qB0VMjIVHQAEAAAAAASwBJ0ABwAUACQALgAAADIWFAYiJjQTMzIWFRQXITY1NDYzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYCDZZqapZqty4iKyf+vCcrI/7NArwVHR0VDYr8SokMFR0dswRMFR37UB0EnWqWamqW/us5Okxra0w6Of5yHSodZGQdKh3+1B0VMjIVHQAEAAAAAASwBRQADwAcACwANgAAATIeARUUBiImNTQ3FzcnNhMzMhYVFBchNjU0NjMBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYL1szb5xvIpBvoyIfLiIrJ/68Jysj/s0CvBUdHRUNivxKiQwVHR2zBEwVHftQHQUUa4s2Tm9vTj5Rj2+jGv4KOTpMa2tMOjn+ch0qHWRkHSod/tQdFTIyFR0AAAADAAAAAASwBRIAEgAiACwAAAEFFSEUHgMXIS4BNTQ+AjcBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYASz+1CU/P00T/e48PUJtj0r+ogK8FR0dFQ2K/EqJDBUdHbMETBUd+1AdBLChizlmUT9IGVO9VFShdksE/H4dKh1kZB0qHf7UHRUyMhUdAAIAyAAAA+gFFAAPACkAAAAyFh0BHgEdASE1NDY3NTQDITIWFyMVMxUjFTMVIxUzFAYjISImNRE0NgIvUjsuNv5wNi5kAZA2XBqsyMjIyMh1U/5wU3V1BRQ7KU4aXDYyMjZcGk4p/kc2LmRkZGRkU3V1UwGQU3UAAAMAZP//BEwETAAPAC8AMwAAEyEyFhURFAYjISImNRE0NgMhMhYdARQGIyEXFhQGIi8BIQcGIiY0PwEhIiY9ATQ2BQchJ5YDhBUdHRX8fBUdHQQDtgoPDwr+5eANGiUNWP30Vw0mGg3g/t8KDw8BqmQBRGQETB0V/gwVHR0VAfQVHf1EDwoyCg/gDSUbDVhYDRslDeAPCjIKD2RkZAAAAAAEAAAAAASwBEwAGQAjAC0ANwAAEyEyFh0BIzQmKwEiBhUjNCYrASIGFSM1NDYDITIWFREhETQ2ExUUBisBIiY9ASEVFAYrASImPQHIAyBTdWQ7KfopO2Q7KfopO2R1EQPoKTv7UDvxHRVkFR0D6B0VZBUdBEx1U8gpOzspKTs7KchTdf4MOyn+1AEsKTv+DDIVHR0VMjIVHR0VMgADAAEAAASpBKwADQARABsAAAkBFhQPASEBJjQ3ATYyCQMDITIWHQEhNTQ2AeACqh8fg/4f/fsgIAEnH1n+rAFWAS/+q6IDIBUd/HwdBI39VR9ZH4MCBh9ZHwEoH/5u/qoBMAFV/BsdFTIyFR0AAAAAAgCPAAAEIQSwABcALwAAAQMuASMhIgYHAwYWMyEVFBYyNj0BMzI2AyE1NDY7ATU0NjsBETMRMzIWHQEzMhYVBCG9CCcV/nAVJwi9CBMVAnEdKh19FROo/a0dFTIdFTDILxUdMhUdAocB+hMcHBP+BhMclhUdHRWWHP2MMhUdMhUdASz+1B0VMh0VAAAEAAAAAASwBLAADQAQAB8AIgAAASERFAYjIREBNTQ2MyEBIzUBIREUBiMhIiY1ETQ2MyEBIzUDhAEsDwr+if7UDwoBdwEsyP2oASwPCv12Cg8PCgF3ASzIAyD9wQoPAk8BLFQKD/7UyP4M/cEKDw8KA7YKD/7UyAAC/5wAZAUUBEcARgBWAAABMzIeAhcWFxY2NzYnJjc+ARYXFgcOASsBDgEPAQ4BKwEiJj8BBisBIicHDgErASImPwEmLwEuAT0BNDY7ATY3JyY2OwE2BSMiBh0BFBY7ATI2PQE0JgHkw0uOakkMEhEfQwoKGRMKBQ8XDCkCA1Y9Pgc4HCcDIhVkFRgDDDEqwxgpCwMiFWQVGAMaVCyfExwdFXwLLW8QBxXLdAFF+goPDwr6Cg8PBEdBa4pJDgYKISAiJRsQCAYIDCw9P1c3fCbqFB0dFEYOCEAUHR0UnUplNQcmFTIVHVdPXw4TZV8PCjIKDw8KMgoPAAb/nP/mBRQEfgAJACQANAA8AFIAYgAAASU2Fh8BFgYPASUzMhYfASEyFh0BFAYHBQYmJyYjISImPQE0NhcjIgYdARQ7ATI2NTQmJyYEIgYUFjI2NAE3PgEeARceAT8BFxYGDwEGJi8BJjYlBwYfAR4BPwE2Jy4BJy4BAoEBpxMuDiAOAxCL/CtqQ0geZgM3FR0cE/0fFyIJKjr+1D5YWLlQExIqhhALIAsSAYBALS1ALf4PmBIgHhMQHC0aPzANITNQL3wpgigJASlmHyElDR0RPRMFAhQHCxADhPcICxAmDyoNeMgiNtQdFTIVJgeEBBQPQ1g+yD5YrBwVODMQEAtEERzJLUAtLUD+24ITChESEyMgAwWzPUkrRSgJL5cvfRxYGyYrDwkLNRAhFEgJDAQAAAAAAwBkAAAEOQSwAFEAYABvAAABMzIWHQEeARcWDgIPATIeBRUUDgUjFRQGKwEiJj0BIxUUBisBIiY9ASMiJj0BNDY7AREjIiY9ATQ2OwE1NDY7ATIWHQEzNTQ2AxUhMj4CNTc0LgMjARUhMj4CNTc0LgMjAnGWCg9PaAEBIC4uEBEGEjQwOiodFyI2LUAjGg8KlgoPZA8KlgoPrwoPDwpLSwoPDwqvDwqWCg9kD9cBBxwpEwsBAQsTKRz++QFrHCkTCwEBCxMpHASwDwptIW1KLk0tHwYGAw8UKDJOLTtdPCoVCwJLCg8PCktLCg8PCksPCpYKDwJYDwqWCg9LCg8PCktLCg/+1MgVHR0LCgQOIhoW/nDIFR0dCwoEDiIaFgAAAwAEAAIEsASuABcAKQAsAAATITIWFREUBg8BDgEjISImJy4CNRE0NgQiDgQPARchNy4FAyMT1AMMVnokEhIdgVL9xFKCHAgYKHoCIIx9VkcrHQYGnAIwnAIIIClJVSGdwwSuelb+YDO3QkJXd3ZYHFrFMwGgVnqZFyYtLSUMDPPzBQ8sKDEj/sIBBQACAMgAAAOEBRQADwAZAAABMzIWFREUBiMhIiY1ETQ2ARUUBisBIiY9AQHblmesVCn+PilUrAFINhWWFTYFFKxn/gwpVFQpAfRnrPwY4RU2NhXhAAACAMgAAAOEBRQADwAZAAABMxQWMxEUBiMhIiY1ETQ2ARUUBisBIiY9AQHbYLOWVCn+PilUrAFINhWWFTYFFJaz/kIpVFQpAfRnrPwY4RU2NhXhAAACAAAAFAUOBBoAFAAaAAAJASUHFRcVJwc1NzU0Jj4CPwEnCQEFJTUFJQUO/YL+hk5klpZkAQEBBQQvkwKCAVz+ov6iAV4BXgL//uWqPOCWx5SVyJb6BA0GCgYDKEEBG/1ipqaTpaUAAAMAZAH0BLADIAAHAA8AFwAAEjIWFAYiJjQkMhYUBiImNCQyFhQGIiY0vHxYWHxYAeh8WFh8WAHofFhYfFgDIFh8WFh8WFh8WFh8WFh8WFh8AAAAAAMBkAAAArwETAAHAA8AFwAAADIWFAYiJjQSMhYUBiImNBIyFhQGIiY0Aeh8WFh8WFh8WFh8WFh8WFh8WARMWHxYWHz+yFh8WFh8/shYfFhYfAAAAAMAZABkBEwETAAPAB8ALwAAEyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2fQO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PBEwPCpYKDw8KlgoP/nAPCpYKDw8KlgoP/nAPCpYKDw8KlgoPAAAABAAAAAAEsASwAA8AHwAvADMAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFhURFAYjISImNRE0NhcVITUBXgH0ory7o/4Mpbm5Asv9qCk7OykCWCk7O/2xAfQVHR0V/gwVHR1HAZAEsLuj/gylubmlAfSlucg7Kf2oKTs7KQJYKTtkHRX+1BUdHRUBLBUdZMjIAAAAAAEAZABkBLAETAA7AAATITIWFAYrARUzMhYUBisBFTMyFhQGKwEVMzIWFAYjISImNDY7ATUjIiY0NjsBNSMiJjQ2OwE1IyImNDaWA+gVHR0VMjIVHR0VMjIVHR0VMjIVHR0V/BgVHR0VMjIVHR0VMjIVHR0VMjIVHR0ETB0qHcgdKh3IHSodyB0qHR0qHcgdKh3IHSodyB0qHQAAAAYBLAAFA+gEowAHAA0AEwAZAB8AKgAAAR4BBgcuATYBMhYVIiYlFAYjNDYBMhYVIiYlFAYjNDYDFRQGIiY9ARYzMgKKVz8/V1c/P/75fLB8sAK8sHyw/cB8sHywArywfLCwHSodKAMRBKNDsrJCQrKy/sCwfLB8fLB8sP7UsHywfHywfLD+05AVHR0VjgQAAAH/tQDIBJQDgQBCAAABNzYXAR4BBw4BKwEyFRQOBCsBIhE0NyYiBxYVECsBIi4DNTQzIyImJyY2NwE2HwEeAQ4BLwEHIScHBi4BNgLpRRkUASoLCAYFGg8IAQQNGyc/KZK4ChRUFQu4jjBJJxkHAgcPGQYGCAsBKhQaTBQVCiMUM7YDe7YsFCMKFgNuEwYS/tkLHw8OEw0dNkY4MhwBIBgXBAQYF/7gKjxTQyMNEw4PHwoBKBIHEwUjKBYGDMHBDAUWKCMAAAAAAgAAAAAEsASwACUAQwAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjNC4DKwERFBYXMxUjNTI1ESMiDgMVIzUhBLAyCAsZEyYYGcgyGRn+cAQOIhoWyBkYJhMZCwgyA+j9RBkIChgQEWQZDQzIMmQREBgKCBkB9AOEFSAVDggDAfyuFhkBAmRkAQUJFQ4DUgEDCA4VIBUBLP0SDxMKBQH+VwsNATIyGQGpAQUKEw+WAAAAAAMAAAAABEwErgAdACAAMAAAATUiJy4BLwEBIwEGBw4BDwEVITUiJj8BIRcWBiMVARsBARUUBiMhIiY9ATQ2MyEyFgPoGR4OFgUE/t9F/tQSFQkfCwsBETE7EkUBJT0NISf+7IZ5AbEdFfwYFR0dFQPoFR0BLDIgDiIKCwLr/Q4jFQkTBQUyMisusKYiQTIBhwFW/qr942QVHR0VZBUdHQADAAAAAASwBLAADwBHAEoAABMhMhYVERQGIyEiJjURNDYFIyIHAQYHBgcGHQEUFjMhMjY9ATQmIyInJj8BIRcWBwYjIgYdARQWMyEyNj0BNCYnIicmJyMBJhMjEzIETBUdHRX7tBUdHQJGRg0F/tUREhImDAsJAREIDAwINxAKCj8BCjkLEQwYCAwMCAE5CAwLCBEZGQ8B/uAFDsVnBLAdFfu0FR0dFQRMFR1SDP0PIBMSEAUNMggMDAgyCAwXDhmjmR8YEQwIMggMDAgyBwwBGRskAuwM/gUBCAAABAAAAAAEsASwAAMAEwAjACcAAAEhNSEFITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NhcRIREEsPtQBLD7ggGQFR0dFf5wFR0dAm0BkBUdHRX+cBUdHUcBLARMZMgdFfx8FR0dFQOEFR0dFf5wFR0dFQGQFR1k/tQBLAAEAAAAAASwBLAADwAfACMAJwAAEyEyFhURFAYjISImNRE0NgEhMhYVERQGIyEiJjURNDYXESEREyE1ITIBkBUdHRX+cBUdHQJtAZAVHR0V/nAVHR1HASzI+1AEsASwHRX8fBUdHRUDhBUd/gwdFf5wFR0dFQGQFR1k/tQBLP2oZAAAAAACAAAAZASwA+gAJwArAAATITIWFREzNTQ2MyEyFh0BMxUjFRQGIyEiJj0BIxEUBiMhIiY1ETQ2AREhETIBkBUdZB0VAZAVHWRkHRX+cBUdZB0V/nAVHR0CnwEsA+gdFf6ilhUdHRWWZJYVHR0Vlv6iFR0dFQMgFR3+1P7UASwAAAQAAAAABLAEsAADABMAFwAnAAAzIxEzFyEyFhURFAYjISImNRE0NhcRIREBITIWFREUBiMhIiY1ETQ2ZGRklgGQFR0dFf5wFR0dRwEs/qIDhBUdHRX8fBUdHQSwZB0V/nAVHR0VAZAVHWT+1AEs/gwdFf5wFR0dFQGQFR0AAAAAAgBkAAAETASwACcAKwAAATMyFhURFAYrARUhMhYVERQGIyEiJjURNDYzITUjIiY1ETQ2OwE1MwcRIRECWJYVHR0VlgHCFR0dFfx8FR0dFQFelhUdHRWWZMgBLARMHRX+cBUdZB0V/nAVHR0VAZAVHWQdFQGQFR1kyP7UASwAAAAEAAAAAASwBLAAAwATABcAJwAAISMRMwUhMhYVERQGIyEiJjURNDYXESERASEyFhURFAYjISImNRE0NgSwZGT9dgGQFR0dFf5wFR0dRwEs/K4DhBUdHRX8fBUdHQSwZB0V/nAVHR0VAZAVHWT+1AEs/gwdFf5wFR0dFQGQFR0AAAEBLAAwA28EgAAPAAAJAQYjIiY1ETQ2MzIXARYUA2H+EhcSDhAQDhIXAe4OAjX+EhcbGQPoGRsX/hIOKgAAAAABAUEAMgOEBH4ACwAACQE2FhURFAYnASY0AU8B7h0qKh3+Eg4CewHuHREp/BgpER0B7g4qAAAAAAEAMgFBBH4DhAALAAATITIWBwEGIicBJjZkA+gpER3+Eg4qDv4SHREDhCod/hIODgHuHSoAAAAAAQAyASwEfgNvAAsAAAkBFgYjISImNwE2MgJ7Ae4dESn8GCkRHQHuDioDYf4SHSoqHQHuDgAAAAACAAgAAASwBCgABgAKAAABFQE1LQE1ASE1IQK8/UwBnf5jBKj84AMgAuW2/r3dwcHd+9jIAAAAAAIAAABkBLAEsAALADEAAAEjFTMVIREzNSM1IQEzND4FOwERFAYPARUhNSIuAzURMzIeBRUzESEEsMjI/tTIyAEs+1AyCAsZEyYYGWQyGRkBkAQOIhoWZBkYJhMZCwgy/OADhGRkASxkZP4MFSAVDggDAf3aFhkBAmRkAQUJFQ4CJgEDCA4VIBUBLAAAAgAAAAAETAPoACUAMQAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjFTMVIREzNSM1IQMgMggLGRMmGBlkMhkZ/nAEDiIaFmQZGCYTGQsIMgMgASzIyP7UyMgBLAK8FSAVDggDAf3aFhkCAWRkAQUJFQ4CJgEDCA4VIBUBLPzgZGQBLGRkAAABAMgAZgNyBEoAEgAAATMyFgcJARYGKwEiJwEmNDcBNgK9oBAKDP4wAdAMChCgDQr+KQcHAdcKBEoWDP4w/jAMFgkB1wgUCAHXCQAAAQE+AGYD6ARKABIAAAEzMhcBFhQHAQYrASImNwkBJjYBU6ANCgHXBwf+KQoNoBAKDAHQ/jAMCgRKCf4pCBQI/ikJFgwB0AHQDBYAAAEAZgDIBEoDcgASAAAAFh0BFAcBBiInASY9ATQ2FwkBBDQWCf4pCBQI/ikJFgwB0AHQA3cKEKANCv4pBwcB1woNoBAKDP4wAdAAAAABAGYBPgRKA+gAEgAACQEWHQEUBicJAQYmPQE0NwE2MgJqAdcJFgz+MP4wDBYJAdcIFAPh/ikKDaAQCgwB0P4wDAoQoA0KAdcHAAAAAgDZ//kEPQSwAAUAOgAAARQGIzQ2BTMyFh8BNjc+Ah4EBgcOBgcGIiYjIgYiJy4DLwEuAT4EHgEXJyY2A+iwfLD+VmQVJgdPBQsiKFAzRyorDwURAQQSFyozTSwNOkkLDkc3EDlfNyYHBw8GDyUqPjdGMR+TDA0EsHywfLDIHBPCAQIGBwcFDx81S21DBxlLR1xKQhEFBQcHGWt0bCQjP2hJNyATBwMGBcASGAAAAAACAMgAFQOEBLAAFgAaAAATITIWFREUBisBEQcGJjURIyImNRE0NhcVITX6AlgVHR0Vlv8TGpYVHR2rASwEsB0V/nAVHf4MsgkQFQKKHRUBkBUdZGRkAAAAAgDIABkETASwAA4AEgAAEyEyFhURBRElIREjETQ2ARU3NfoC7ic9/UQCWP1EZB8BDWQEsFEs/Ft1A7Z9/BgEARc0/V1kFGQAAQAAAAECTW/DBF9fDzz1AB8EsAAAAADQdnOXAAAAANB2c5f/Uf+cBdwFFAAAAAgAAgAAAAAAAAABAAAFFP+FAAAFFP9R/tQF3AABAAAAAAAAAAAAAAAAAAAAowG4ACgAAAAAAZAAAASwAAAEsABkBLAAAASwAAAEsABwAooAAAUUAAACigAABRQAAAGxAAABRQAAANgAAADYAAAAogAAAQQAAABIAAABBAAAAUUAAASwAGQEsAB7BLAAyASwAMgB9AAABLD/8gSwAAAEsAAABLD/8ASwAAAEsAAOBLAACQSwAGQEsP/TBLD/0wSwAAAEsAAABLAAAASwAAAEsAAABLAAJgSwAG4EsAAXBLAAFwSwABcEsABkBLAAGgSwAGQEsAAMBLAAZASwABcEsP+cBLAAZASwABcEsAAXBLAAAASwABcEsAAXBLAAFwSwAGQEsAAABLAAZASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAZASwAMgEsAAABLAAAASwADUEsABkBLAAyASw/7UEsAAhBLAAAASwAAAEsAAABLAAAASwAAAEsP+cBLAAAASwAAAEsAAABLAA2wSwABcEsAB1BLAAAASwAAAEsAAABLAACgSwAMgEsAAABLAAnQSwAMgEsADIBLAAyASwAAAEsP/+BLABLASwAGQEsACIBLABOwSwABcEsAAXBLAAFwSwABcEsAAXBLAAFwSwAAAEsAAXBLAAFwSwABcEsAAXBLAAAASwALcEsAC3BLAAAASwAAAEsABJBLAAFwSwAAAEsAAABLAAXQSw/9wEsP/cBLD/nwSwAGQEsAAABLAAAASwAAAEsABkBLD//wSwAAAEsP9RBLAABgSwAAAEsAAABLABRQSwAAEEsAAABLD/nASwAEoEsAAUBLAAAASwAAAEsAAABLD/nASwAGEEsP/9BLAAFgSwABYEsAAWBLAAFgSwABgEsAAABMQAAASwAGQAAAAAAAD/2ABkADkAyAAAAScAZAAZABkAGQAZABkAGQAZAAAAAAAAAAAAAADZAAAAAAAOAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAMAZABkAAAAEAAAAAAAZP+c/5z/nP+c/5z/nP+c/5wACQAJ//L/8gBkAHkAJwBkAGQAAAAAAGT/ogAAAAAAAAAAAAAAAADIAGQAAAABAI8AAP+c/5wAZAAEAMgAyAAAAGQBkABkAAAAZAEs/7UAAAAAAAAAAAAAAAAAAABkAAABLAFBADIAMgAIAAAAAADIAT4AZgBmANkAyADIAAAAKgAqACoAKgCyAOgA6AFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BpAIGAiICfgKGAqwC5ANGA24DjAPEBAgEMgRiBKIE3AVcBboGcgb0ByAHYgfKCB4IYgi+CTYJhAm2Cd4KKApMCpQK4gswC4oLygwIDFgNKg1eDbAODg5oDrQPKA+mD+YQEhBUEJAQqhEqEXYRthIKEjgSfBLAExoTdBPQFCoU1BU8FagVzBYEFjYWYBawFv4XUhemGAIYLhhqGJYYsBjgGP4ZKBloGZQZxBnaGe4aNhpoGrga9hteG7QcMhyUHOIdHB1EHWwdlB28HeYeLh52HsAfYh/SIEYgviEyIXYhuCJAIpYiuCMOIyIjOCN6I8Ij4CQCJDAkXiSWJOIlNCVgJbwmFCZ+JuYnUCe8J/goNChwKKwpoCnMKiYqSiqEKworeiwILGgsuizsLRwtiC30LiguZi6iLtgvDi9GL34vsi/4MD4whDDSMRIxYDGuMegyJDJeMpoy3jMiMz4zaDO2NBg0YDSoNNI1LDWeNeg2PjZ8Ntw3GjdON5I31DgQOEI4hjjIOQo5SjmIOcw6HDpsOpo63jugO9w8GDxQPKI8+D0yPew+Oj6MPtQ/KD9uP6o/+kBIQIBAxkECQX5CGEKoQu5DGENCQ3ZDoEPKRBBEYESuRPZFWkW2RgZGdEa0RvZHNkd2R7ZH9kgWSDJITkhqSIZIzEkSSThJXkmESapKAkouSlIAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAAAAABAAxgABAAAAAAATABIAAAADAAEECQAAAGoAEgADAAEECQABACgAfAADAAEECQACAA4ApAADAAEECQADAEwAsgADAAEECQAEADgA/gADAAEECQAFAHgBNgADAAEECQAGADYBrgADAAEECQAIABYB5AADAAEECQAJABYB+gADAAEECQALACQCEAADAAEECQAMACQCNAADAAEECQATACQCWAADAAEECQDIABYCfAADAAEECQDJADACkgADAAEECdkDABoCwnd3dy5nbHlwaGljb25zLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQA0ACAAYgB5ACAASgBhAG4AIABLAG8AdgBhAHIAaQBrAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAFIAZQBnAHUAbABhAHIAMQAuADAAMAA5ADsAVQBLAFcATgA7AEcATABZAFAASABJAEMATwBOAFMASABhAGwAZgBsAGkAbgBnAHMALQBSAGUAZwB1AGwAYQByAEcATABZAFAASABJAEMATwBOAFMAIABIAGEAbABmAGwAaQBuAGcAcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAOQA7AFAAUwAgADAAMAAxAC4AMAAwADkAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADkARwBMAFkAUABIAEkAQwBPAE4AUwBIAGEAbABmAGwAaQBuAGcAcwAtAFIAZQBnAHUAbABhAHIASgBhAG4AIABLAG8AdgBhAHIAaQBrAEoAYQBuACAASwBvAHYAYQByAGkAawB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQBXAGUAYgBmAG8AbgB0ACAAMQAuADAAVwBlAGQAIABPAGMAdAAgADIAOQAgADAANgA6ADMANgA6ADAANwAgADIAMAAxADQARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAAAAAIAAAAAAAD/tQAyAAAAAAAAAAAAAAAAAAAAAAAAAAABFwAAAQIBAwADAA0ADgEEAJYBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMA7wEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgZnbHlwaDEGZ2x5cGgyB3VuaTAwQTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMkYHdW5pMjA1RgRFdXJvB3VuaTIwQkQHdW5pMjMxQgd1bmkyNUZDB3VuaTI2MDEHdW5pMjZGQQd1bmkyNzA5B3VuaTI3MEYHdW5pRTAwMQd1bmlFMDAyB3VuaUUwMDMHdW5pRTAwNQd1bmlFMDA2B3VuaUUwMDcHdW5pRTAwOAd1bmlFMDA5B3VuaUUwMTAHdW5pRTAxMQd1bmlFMDEyB3VuaUUwMTMHdW5pRTAxNAd1bmlFMDE1B3VuaUUwMTYHdW5pRTAxNwd1bmlFMDE4B3VuaUUwMTkHdW5pRTAyMAd1bmlFMDIxB3VuaUUwMjIHdW5pRTAyMwd1bmlFMDI0B3VuaUUwMjUHdW5pRTAyNgd1bmlFMDI3B3VuaUUwMjgHdW5pRTAyOQd1bmlFMDMwB3VuaUUwMzEHdW5pRTAzMgd1bmlFMDMzB3VuaUUwMzQHdW5pRTAzNQd1bmlFMDM2B3VuaUUwMzcHdW5pRTAzOAd1bmlFMDM5B3VuaUUwNDAHdW5pRTA0MQd1bmlFMDQyB3VuaUUwNDMHdW5pRTA0NAd1bmlFMDQ1B3VuaUUwNDYHdW5pRTA0Nwd1bmlFMDQ4B3VuaUUwNDkHdW5pRTA1MAd1bmlFMDUxB3VuaUUwNTIHdW5pRTA1Mwd1bmlFMDU0B3VuaUUwNTUHdW5pRTA1Ngd1bmlFMDU3B3VuaUUwNTgHdW5pRTA1OQd1bmlFMDYwB3VuaUUwNjIHdW5pRTA2Mwd1bmlFMDY0B3VuaUUwNjUHdW5pRTA2Ngd1bmlFMDY3B3VuaUUwNjgHdW5pRTA2OQd1bmlFMDcwB3VuaUUwNzEHdW5pRTA3Mgd1bmlFMDczB3VuaUUwNzQHdW5pRTA3NQd1bmlFMDc2B3VuaUUwNzcHdW5pRTA3OAd1bmlFMDc5B3VuaUUwODAHdW5pRTA4MQd1bmlFMDgyB3VuaUUwODMHdW5pRTA4NAd1bmlFMDg1B3VuaUUwODYHdW5pRTA4Nwd1bmlFMDg4B3VuaUUwODkHdW5pRTA5MAd1bmlFMDkxB3VuaUUwOTIHdW5pRTA5Mwd1bmlFMDk0B3VuaUUwOTUHdW5pRTA5Ngd1bmlFMDk3B3VuaUUxMDEHdW5pRTEwMgd1bmlFMTAzB3VuaUUxMDQHdW5pRTEwNQd1bmlFMTA2B3VuaUUxMDcHdW5pRTEwOAd1bmlFMTA5B3VuaUUxMTAHdW5pRTExMQd1bmlFMTEyB3VuaUUxMTMHdW5pRTExNAd1bmlFMTE1B3VuaUUxMTYHdW5pRTExNwd1bmlFMTE4B3VuaUUxMTkHdW5pRTEyMAd1bmlFMTIxB3VuaUUxMjIHdW5pRTEyMwd1bmlFMTI0B3VuaUUxMjUHdW5pRTEyNgd1bmlFMTI3B3VuaUUxMjgHdW5pRTEyOQd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMTMzB3VuaUUxMzQHdW5pRTEzNQd1bmlFMTM2B3VuaUUxMzcHdW5pRTEzOAd1bmlFMTM5B3VuaUUxNDAHdW5pRTE0MQd1bmlFMTQyB3VuaUUxNDMHdW5pRTE0NAd1bmlFMTQ1B3VuaUUxNDYHdW5pRTE0OAd1bmlFMTQ5B3VuaUUxNTAHdW5pRTE1MQd1bmlFMTUyB3VuaUUxNTMHdW5pRTE1NAd1bmlFMTU1B3VuaUUxNTYHdW5pRTE1Nwd1bmlFMTU4B3VuaUUxNTkHdW5pRTE2MAd1bmlFMTYxB3VuaUUxNjIHdW5pRTE2Mwd1bmlFMTY0B3VuaUUxNjUHdW5pRTE2Ngd1bmlFMTY3B3VuaUUxNjgHdW5pRTE2OQd1bmlFMTcwB3VuaUUxNzEHdW5pRTE3Mgd1bmlFMTczB3VuaUUxNzQHdW5pRTE3NQd1bmlFMTc2B3VuaUUxNzcHdW5pRTE3OAd1bmlFMTc5B3VuaUUxODAHdW5pRTE4MQd1bmlFMTgyB3VuaUUxODMHdW5pRTE4NAd1bmlFMTg1B3VuaUUxODYHdW5pRTE4Nwd1bmlFMTg4B3VuaUUxODkHdW5pRTE5MAd1bmlFMTkxB3VuaUUxOTIHdW5pRTE5Mwd1bmlFMTk0B3VuaUUxOTUHdW5pRTE5Nwd1bmlFMTk4B3VuaUUxOTkHdW5pRTIwMAd1bmlFMjAxB3VuaUUyMDIHdW5pRTIwMwd1bmlFMjA0B3VuaUUyMDUHdW5pRTIwNgd1bmlFMjA5B3VuaUUyMTAHdW5pRTIxMQd1bmlFMjEyB3VuaUUyMTMHdW5pRTIxNAd1bmlFMjE1B3VuaUUyMTYHdW5pRTIxOAd1bmlFMjE5B3VuaUUyMjEHdW5pRTIyMwd1bmlFMjI0B3VuaUUyMjUHdW5pRTIyNgd1bmlFMjI3B3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTIzNAd1bmlFMjM1B3VuaUUyMzYHdW5pRTIzNwd1bmlFMjM4B3VuaUUyMzkHdW5pRTI0MAd1bmlFMjQxB3VuaUUyNDIHdW5pRTI0Mwd1bmlFMjQ0B3VuaUUyNDUHdW5pRTI0Ngd1bmlFMjQ3B3VuaUUyNDgHdW5pRTI0OQd1bmlFMjUwB3VuaUUyNTEHdW5pRTI1Mgd1bmlFMjUzB3VuaUUyNTQHdW5pRTI1NQd1bmlFMjU2B3VuaUUyNTcHdW5pRTI1OAd1bmlFMjU5B3VuaUUyNjAHdW5pRjhGRgZ1MUY1MTEGdTFGNkFBAAAAAAFUUMMXAAA=","glyphicons-halflings-regular.woff":"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","glyphicons-halflings-regular.woff2":"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"}
    diff --git a/vendor/bootstrap/docs/assets/js/src/application.js b/vendor/bootstrap/docs/assets/js/src/application.js
    new file mode 100644
    index 000000000..7b2bf0ed9
    --- /dev/null
    +++ b/vendor/bootstrap/docs/assets/js/src/application.js
    @@ -0,0 +1,180 @@
    +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
    +// IT'S ALL JUST JUNK FOR OUR DOCS!
    +// ++++++++++++++++++++++++++++++++++++++++++
    +
    +/*!
    + * JavaScript for Bootstrap's docs (https://getbootstrap.com/)
    + * Copyright 2011-2019 Twitter, Inc.
    + * Licensed under the Creative Commons Attribution 3.0 Unported License. For
    + * details, see https://creativecommons.org/licenses/by/3.0/.
    + */
    +
    +/* global ClipboardJS: false, anchors: false */
    +
    +!function ($) {
    +  'use strict';
    +
    +  $(function () {
    +
    +    // Scrollspy
    +    var $window = $(window)
    +    var $body   = $(document.body)
    +
    +    $body.scrollspy({
    +      target: '.bs-docs-sidebar'
    +    })
    +    $window.on('load', function () {
    +      $body.scrollspy('refresh')
    +    })
    +
    +    // Kill links
    +    $('.bs-docs-container [href="#"]').click(function (e) {
    +      e.preventDefault()
    +    })
    +
    +    // Sidenav affixing
    +    setTimeout(function () {
    +      var $sideBar = $('.bs-docs-sidebar')
    +
    +      $sideBar.affix({
    +        offset: {
    +          top: function () {
    +            var offsetTop      = $sideBar.offset().top
    +            var sideBarMargin  = parseInt($sideBar.children(0).css('margin-top'), 10)
    +            var navOuterHeight = $('.bs-docs-nav').height()
    +
    +            return (this.top = offsetTop - navOuterHeight - sideBarMargin)
    +          },
    +          bottom: function () {
    +            return (this.bottom = $('.bs-docs-footer').outerHeight(true))
    +          }
    +        }
    +      })
    +    }, 100)
    +
    +    setTimeout(function () {
    +      $('.bs-top').affix()
    +    }, 100)
    +
    +    // Theme toggler
    +    ;(function () {
    +      var $stylesheetLink = $('#bs-theme-stylesheet')
    +      var $themeBtn = $('.bs-docs-theme-toggle')
    +
    +      var activateTheme = function () {
    +        $stylesheetLink.attr('href', $stylesheetLink.attr('data-href'))
    +        $themeBtn.text('Disable theme preview')
    +        localStorage.setItem('previewTheme', true)
    +      }
    +
    +      if (localStorage.getItem('previewTheme')) {
    +        activateTheme()
    +      }
    +
    +      $themeBtn.click(function () {
    +        var href = $stylesheetLink.attr('href')
    +        if (!href || href.indexOf('data') === 0) {
    +          activateTheme()
    +        } else {
    +          $stylesheetLink.attr('href', '')
    +          $themeBtn.text('Preview theme')
    +          localStorage.removeItem('previewTheme')
    +        }
    +      })
    +    })();
    +
    +    // Tooltip and popover demos
    +    $('.tooltip-demo').tooltip({
    +      selector: '[data-toggle="tooltip"]',
    +      container: 'body'
    +    })
    +    $('.popover-demo').popover({
    +      selector: '[data-toggle="popover"]',
    +      container: 'body'
    +    })
    +
    +    // Demos within modals
    +    $('.tooltip-test').tooltip()
    +    $('.popover-test').popover()
    +
    +    // Popover demos
    +    $('.bs-docs-popover').popover()
    +
    +    // Button state demo
    +    $('#loading-example-btn').on('click', function () {
    +      var $btn = $(this)
    +      $btn.button('loading')
    +      setTimeout(function () {
    +        $btn.button('reset')
    +      }, 3000)
    +    })
    +
    +    // Modal relatedTarget demo
    +    $('#exampleModal').on('show.bs.modal', function (event) {
    +      var $button = $(event.relatedTarget)      // Button that triggered the modal
    +      var recipient = $button.data('whatever')  // Extract info from data-* attributes
    +      // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
    +      // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
    +      var $modal = $(this)
    +      $modal.find('.modal-title').text('New message to ' + recipient)
    +      $modal.find('.modal-body input').val(recipient)
    +    })
    +
    +    // Activate animated progress bar
    +    $('.bs-docs-activate-animated-progressbar').on('click', function () {
    +      $(this).siblings('.progress').find('.progress-bar-striped').toggleClass('active')
    +    })
    +
    +    // Insert copy to clipboard button before .highlight
    +    $('figure.highlight, div.highlight').each(function () {
    +      var btnHtml = '
    ' + $(this).before(btnHtml) + $('.btn-clipboard') + .tooltip() + .on('mouseleave', function () { + // Explicitly hide tooltip, since after clicking it remains + // focused (as it's a button), so tooltip would otherwise + // remain visible until focus is moved away + $(this).tooltip('hide') + }) + }) + + var clipboard = new ClipboardJS('.btn-clipboard', { + target: function (trigger) { + return trigger.parentNode.nextElementSibling + } + }) + + clipboard.on('success', function (e) { + $(e.trigger) + .attr('title', 'Copied!') + .tooltip('fixTitle') + .tooltip('show') + .attr('title', 'Copy to clipboard') + .tooltip('fixTitle') + + e.clearSelection() + }) + + clipboard.on('error', function (e) { + var modifierKey = /Mac/i.test(navigator.userAgent) ? '\u2318' : 'Ctrl-' + var fallbackMsg = 'Press ' + modifierKey + 'C to copy' + + $(e.trigger) + .attr('title', fallbackMsg) + .tooltip('fixTitle') + .tooltip('show') + .attr('title', 'Copy to clipboard') + .tooltip('fixTitle') + }) + + }) + +}(jQuery) + +;(function () { + 'use strict'; + + anchors.options.placement = 'left'; + anchors.add('.bs-docs-section > h1, .bs-docs-section > h2, .bs-docs-section > h3, .bs-docs-section > h4, .bs-docs-section > h5') +})(); diff --git a/vendor/bootstrap/docs/assets/js/src/customizer.js b/vendor/bootstrap/docs/assets/js/src/customizer.js new file mode 100644 index 000000000..0eb3307eb --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/src/customizer.js @@ -0,0 +1,414 @@ +/*! + * Bootstrap Customizer (https://getbootstrap.com/customize/) + * Copyright 2011-2019 Twitter, Inc. + * + * Licensed under the Creative Commons Attribution 3.0 Unported License. For + * details, see https://creativecommons.org/licenses/by/3.0/. + */ + +/* global JSON, JSZip, less, autoprefixer, saveAs, UglifyJS, __configBridge, __js, __less, __fonts */ + +window.onload = function () { // wait for load in a dumb way because B-0 + 'use strict'; + + var cw = '/*!\n' + + ' * Bootstrap v3.4.1 (https://getbootstrap.com/)\n' + + ' * Copyright 2011-' + new Date().getFullYear() + ' Twitter, Inc.\n' + + ' * Licensed under the MIT license\n' + + ' */\n\n' + + var $importDropTarget = $('#import-drop-target') + + function showError(msg, err) { + $('
    ' + + '
    ' + + '' + + '

    Warning:' + msg + '

    ' + + (err.message ? $('

    ').text('Error: ' + err.message)[0].outerHTML : '') + + (err.extract ? $('
    ').text(err.extract.join('\n'))[0].outerHTML : '') +
    +        '
    ' + + '
    ').appendTo('body').alert() + throw err + } + + function showAlert(type, msg, insertAfter) { + $('
    ' + msg + '
    ') + .insertAfter(insertAfter) + } + + function getQueryParam(key) { + key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, '\\$&') // escape RegEx meta chars + var match = location.search.match(new RegExp('[?&]' + key + '=([^&]+)(&|$)')) + return match && decodeURIComponent(match[1].replace(/\+/g, ' ')) + } + + function getCustomizerData() { + var vars = {} + + $('#less-variables-section input') + .each(function () { + $(this).val() && (vars[$(this).prev().text()] = $(this).val()) + }) + + var data = { + vars: vars, + css: $('#less-section input:checked') .map(function () { return this.value }).toArray(), + js: $('#plugin-section input:checked').map(function () { return this.value }).toArray() + } + + if ($.isEmptyObject(data.vars) && !data.css.length && !data.js.length) return null + + return data + } + + function updateCustomizerFromJson(data) { + if (data.js) { + $('#plugin-section input').each(function () { + $(this).prop('checked', ~$.inArray(this.value, data.js)) + }) + } + if (data.css) { + $('#less-section input').each(function () { + $(this).prop('checked', ~$.inArray(this.value, data.css)) + }) + } + if (data.vars) { + for (var i in data.vars) { + $('input[data-var="' + i + '"]').val(data.vars[i]) + } + } + } + + function parseUrl() { + var id = getQueryParam('id') + + if (!id) return + + $.ajax({ + url: 'https://api.github.com/gists/' + id, + type: 'GET', + dataType: 'json' + }) + .success(function (result) { + var data = JSON.parse(result.files['config.json'].content) + updateCustomizerFromJson(data) + }) + .error(function (err) { + showError('Error fetching bootstrap config file', err) + }) + } + + function generateZip(css, js, fonts, config, complete) { + if (!css && !js) return showError('Ruh roh! No Bootstrap files selected.', new Error('no Bootstrap')) + + var zip = new JSZip() + + if (css) { + var cssFolder = zip.folder('css') + for (var fileName in css) { + cssFolder.file(fileName, css[fileName]) + } + } + + if (js) { + var jsFolder = zip.folder('js') + for (var jsFileName in js) { + jsFolder.file(jsFileName, js[jsFileName]) + } + } + + if (fonts) { + var fontsFolder = zip.folder('fonts') + for (var fontsFileName in fonts) { + fontsFolder.file(fontsFileName, fonts[fontsFileName], { base64: true }) + } + } + + if (config) { + zip.file('config.json', config) + } + + var content = zip.generate({ type: 'blob' }) + + complete(content) + } + + function generateCustomLess(vars) { + var result = '' + + for (var key in vars) { + result += key + ': ' + vars[key] + ';\n' + } + + return result + '\n\n' + } + + function generateFonts() { + var $glyphicons = $('#less-section [value="glyphicons.less"]:checked') + if ($glyphicons.length) { + return __fonts + } + } + + // Returns an Array of @import'd filenames in the order + // in which they appear in the file. + function includedLessFilenames(lessFilename) { + var IMPORT_REGEX = /^@import \"(.*?)\";$/ + var lessLines = __less[lessFilename].split('\n') + + var imports = [] + $.each(lessLines, function (index, lessLine) { + var match = IMPORT_REGEX.exec(lessLine) + if (match) { + var importee = match[1] + var transitiveImports = includedLessFilenames(importee) + $.each(transitiveImports, function (index, transitiveImportee) { + if ($.inArray(transitiveImportee, imports) === -1) { + imports.push(transitiveImportee) + } + }) + imports.push(importee) + } + }) + + return imports + } + + function generateLESS(lessFilename, lessFileIncludes, vars) { + var lessSource = __less[lessFilename] + + var lessFilenames = includedLessFilenames(lessFilename) + $.each(lessFilenames, function (index, filename) { + var fileInclude = lessFileIncludes[filename] + + // Files not explicitly unchecked are compiled into the final stylesheet. + // Core stylesheets like 'normalize.less' are not included in the form + // since disabling them would wreck everything, and so their 'fileInclude' + // will be 'undefined'. + if (fileInclude || fileInclude == null) lessSource += __less[filename] + + // Custom variables are added after Bootstrap variables so the custom + // ones take precedence. + if (filename === 'variables.less' && vars) lessSource += generateCustomLess(vars) + }) + + lessSource = lessSource.replace(/@import[^\n]*/gi, '') // strip any imports + return lessSource + } + + function compileLESS(lessSource, baseFilename, intoResult) { + var promise = $.Deferred() + var parser = new less.Parser({ + paths: ['variables.less', 'mixins.less'], + optimization: 0, + filename: baseFilename + '.css' + }) + + parser.parse(lessSource, function (parseErr, tree) { + if (parseErr) { + return promise.reject(parseErr) + } + try { + intoResult[baseFilename + '.css'] = tree.toCSS() + intoResult[baseFilename + '.min.css'] = tree.toCSS({ compress: true }) + } catch (compileErr) { + return promise.reject(compileErr) + } + promise.resolve() + }) + + return promise.promise() + } + + function generateCSS(preamble) { + var promise = $.Deferred() + var oneChecked = false + var lessFileIncludes = {} + $('#less-section input').each(function () { + var $this = $(this) + var checked = $this.is(':checked') + lessFileIncludes[$this.val()] = checked + + oneChecked = oneChecked || checked + }) + + if (!oneChecked) return false + + var result = {} + var vars = {} + + $('#less-variables-section input') + .each(function () { + $(this).val() && (vars[$(this).prev().text()] = $(this).val()) + }) + + var bsLessSource = preamble + generateLESS('bootstrap.less', lessFileIncludes, vars) + var themeLessSource = preamble + generateLESS('theme.less', lessFileIncludes, vars) + + var prefixer = autoprefixer(__configBridge.autoprefixer) + + $.when( + compileLESS(bsLessSource, 'bootstrap', result), + compileLESS(themeLessSource, 'bootstrap-theme', result) + ).done(function () { + for (var key in result) { + result[key] = prefixer.process(result[key]).css + } + promise.resolve(result) + }).fail(function (err) { + showError('Ruh roh! Problem parsing or compiling Less files.', err) + promise.reject() + }) + + return promise.promise() + } + + function uglify(js) { + var ast = UglifyJS.parse(js) + ast.figure_out_scope() + + var compressor = UglifyJS.Compressor() + var compressedAst = ast.transform(compressor) + + compressedAst.figure_out_scope() + compressedAst.compute_char_frequency() + compressedAst.mangle_names() + + var stream = UglifyJS.OutputStream() + compressedAst.print(stream) + + return stream.toString() + } + + function generateJS(preamble) { + var $checked = $('#plugin-section input:checked') + var jqueryCheck = __configBridge.jqueryCheck.join('\n') + var jqueryVersionCheck = __configBridge.jqueryVersionCheck.join('\n') + + if (!$checked.length) return false + + var js = $checked + .map(function () { return __js[this.value] }) + .toArray() + .join('\n') + + preamble = preamble + cw + js = jqueryCheck + jqueryVersionCheck + js + + return { + 'bootstrap.js': preamble + js, + 'bootstrap.min.js': preamble + uglify(js) + } + } + + function removeImportAlerts() { + $importDropTarget.nextAll('.alert').remove() + } + + function handleConfigFileSelect(e) { + e.stopPropagation() + e.preventDefault() + + var file = e.originalEvent.target.files[0] + var reader = new FileReader() + + reader.onload = function (e) { + var text = e.target.result + + try { + var json = JSON.parse(text) + + if (!$.isPlainObject(json)) { + throw new Error('JSON data from config file is not an object.') + } + + updateCustomizerFromJson(json) + showAlert('success', 'Woohoo! Your configuration was successfully uploaded. Tweak your settings, then hit Download.', $importDropTarget) + } catch (err) { + return showAlert('danger', 'Shucks. We can only read valid .json files. Please try again.', $importDropTarget) + } + } + + reader.readAsText(file, 'utf-8') + } + + $('#import-file-select').on('change', handleConfigFileSelect) + $('#import-manual-trigger').on('click', removeImportAlerts) + + var $inputsComponent = $('#less-section input') + var $inputsPlugin = $('#plugin-section input') + var $inputsVariables = $('#less-variables-section input') + + $('#less-section .toggle').on('click', function (e) { + e.preventDefault() + $inputsComponent.prop('checked', !$inputsComponent.is(':checked')) + }) + + $('#plugin-section .toggle').on('click', function (e) { + e.preventDefault() + $inputsPlugin.prop('checked', !$inputsPlugin.is(':checked')) + }) + + $('#less-variables-section .toggle').on('click', function (e) { + e.preventDefault() + $inputsVariables.val('') + }) + + $('[data-dependencies]').on('click', function () { + if (!$(this).is(':checked')) return + var dependencies = this.getAttribute('data-dependencies') + if (!dependencies) return + dependencies = dependencies.split(',') + for (var i = 0, len = dependencies.length; i < len; i++) { + var $dependency = $('[value="' + dependencies[i] + '"]') + $dependency && $dependency.prop('checked', true) + } + }) + + $('[data-dependents]').on('click', function () { + if ($(this).is(':checked')) return + var dependents = this.getAttribute('data-dependents') + if (!dependents) return + dependents = dependents.split(',') + for (var i = 0, len = dependents.length; i < len; i++) { + var $dependent = $('[value="' + dependents[i] + '"]') + $dependent && $dependent.prop('checked', false) + } + }) + + var $compileBtn = $('#btn-compile') + + $compileBtn.on('click', function (e) { + e.preventDefault() + + $compileBtn.attr('disabled', 'disabled') + + function generate() { + var configData = getCustomizerData() + var configJson = JSON.stringify(configData, null, 2) + var origin = window.location.protocol + '//' + window.location.host + var customizerUrl = origin + window.location.pathname + + var preamble = '/*!\n' + + ' * Generated using the Bootstrap Customizer (' + customizerUrl + ')\n' + + ' */\n\n' + + $.when( + generateCSS(preamble), + generateJS(preamble), + generateFonts() + ).done(function (css, js, fonts) { + generateZip(css, js, fonts, configJson, function (blob) { + $compileBtn.removeAttr('disabled') + setTimeout(function () { + saveAs(blob, 'bootstrap.zip') + }, 0) + }) + }) + } + + generate() + }); + + parseUrl() +} diff --git a/vendor/bootstrap/docs/assets/js/src/search.js b/vendor/bootstrap/docs/assets/js/src/search.js new file mode 100644 index 000000000..72b1ec71a --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/src/search.js @@ -0,0 +1,51 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S ALL JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ + +(function () { + 'use strict' + + var inputElement = document.getElementById('search-input') + + if (!window.docsearch || !inputElement) { + return + } + + function getOrigin() { + var location = window.location + var origin = location.origin + + if (!origin) { + var port = location.port ? ':' + location.port : '' + + origin = location.protocol + '//' + location.hostname + port + } + + return origin + } + + window.docsearch({ + apiKey: 'c8948afa20e6437a6e829f7e87b9ac11', + indexName: 'bootstrap-v3', + inputSelector: '#search-input', + transformData: function (hits) { + return hits.map(function (hit) { + var siteurl = getOrigin() + var urlRE = /^https?:\/\/getbootstrap\.com/ + + // When in production, return the result as is, + // otherwise remove our url from it. + hit.url = siteurl.match(urlRE) ? hit.url : hit.url.replace(urlRE, '') + + // Prevent jumping to first header + if (hit.anchor === 'content') { + hit.url = hit.url.replace(/#content$/, '') + hit.anchor = null + } + + return hit + }) + }, + debug: false // Set debug to true if you want to inspect the dropdown + }) +}()) diff --git a/vendor/bootstrap/docs/assets/js/vendor/Blob.js b/vendor/bootstrap/docs/assets/js/vendor/Blob.js new file mode 100644 index 000000000..2e41b8a2b --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/vendor/Blob.js @@ -0,0 +1,211 @@ +/* Blob.js + * A Blob implementation. + * 2014-07-24 + * + * By Eli Grey, http://eligrey.com + * By Devin Samarin, https://github.com/dsamarin + * License: X11/MIT + * See https://github.com/eligrey/Blob.js/blob/master/LICENSE.md + */ + +/*global self, unescape */ +/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, + plusplus: true */ + +/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ + +(function (view) { + "use strict"; + + view.URL = view.URL || view.webkitURL; + + if (view.Blob && view.URL) { + try { + new Blob; + return; + } catch (e) {} + } + + // Internally we use a BlobBuilder implementation to base Blob off of + // in order to support older browsers that only have BlobBuilder + var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) { + var + get_class = function(object) { + return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; + } + , FakeBlobBuilder = function BlobBuilder() { + this.data = []; + } + , FakeBlob = function Blob(data, type, encoding) { + this.data = data; + this.size = data.length; + this.type = type; + this.encoding = encoding; + } + , FBB_proto = FakeBlobBuilder.prototype + , FB_proto = FakeBlob.prototype + , FileReaderSync = view.FileReaderSync + , FileException = function(type) { + this.code = this[this.name = type]; + } + , file_ex_codes = ( + "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " + + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR" + ).split(" ") + , file_ex_code = file_ex_codes.length + , real_URL = view.URL || view.webkitURL || view + , real_create_object_URL = real_URL.createObjectURL + , real_revoke_object_URL = real_URL.revokeObjectURL + , URL = real_URL + , btoa = view.btoa + , atob = view.atob + + , ArrayBuffer = view.ArrayBuffer + , Uint8Array = view.Uint8Array + + , origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/ + ; + FakeBlob.fake = FB_proto.fake = true; + while (file_ex_code--) { + FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1; + } + // Polyfill URL + if (!real_URL.createObjectURL) { + URL = view.URL = function(uri) { + var + uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a") + , uri_origin + ; + uri_info.href = uri; + if (!("origin" in uri_info)) { + if (uri_info.protocol.toLowerCase() === "data:") { + uri_info.origin = null; + } else { + uri_origin = uri.match(origin); + uri_info.origin = uri_origin && uri_origin[1]; + } + } + return uri_info; + }; + } + URL.createObjectURL = function(blob) { + var + type = blob.type + , data_URI_header + ; + if (type === null) { + type = "application/octet-stream"; + } + if (blob instanceof FakeBlob) { + data_URI_header = "data:" + type; + if (blob.encoding === "base64") { + return data_URI_header + ";base64," + blob.data; + } else if (blob.encoding === "URI") { + return data_URI_header + "," + decodeURIComponent(blob.data); + } if (btoa) { + return data_URI_header + ";base64," + btoa(blob.data); + } else { + return data_URI_header + "," + encodeURIComponent(blob.data); + } + } else if (real_create_object_URL) { + return real_create_object_URL.call(real_URL, blob); + } + }; + URL.revokeObjectURL = function(object_URL) { + if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) { + real_revoke_object_URL.call(real_URL, object_URL); + } + }; + FBB_proto.append = function(data/*, endings*/) { + var bb = this.data; + // decode data to a binary string + if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) { + var + str = "" + , buf = new Uint8Array(data) + , i = 0 + , buf_len = buf.length + ; + for (; i < buf_len; i++) { + str += String.fromCharCode(buf[i]); + } + bb.push(str); + } else if (get_class(data) === "Blob" || get_class(data) === "File") { + if (FileReaderSync) { + var fr = new FileReaderSync; + bb.push(fr.readAsBinaryString(data)); + } else { + // async FileReader won't work as BlobBuilder is sync + throw new FileException("NOT_READABLE_ERR"); + } + } else if (data instanceof FakeBlob) { + if (data.encoding === "base64" && atob) { + bb.push(atob(data.data)); + } else if (data.encoding === "URI") { + bb.push(decodeURIComponent(data.data)); + } else if (data.encoding === "raw") { + bb.push(data.data); + } + } else { + if (typeof data !== "string") { + data += ""; // convert unsupported types to strings + } + // decode UTF-16 to binary string + bb.push(unescape(encodeURIComponent(data))); + } + }; + FBB_proto.getBlob = function(type) { + if (!arguments.length) { + type = null; + } + return new FakeBlob(this.data.join(""), type, "raw"); + }; + FBB_proto.toString = function() { + return "[object BlobBuilder]"; + }; + FB_proto.slice = function(start, end, type) { + var args = arguments.length; + if (args < 3) { + type = null; + } + return new FakeBlob( + this.data.slice(start, args > 1 ? end : this.data.length) + , type + , this.encoding + ); + }; + FB_proto.toString = function() { + return "[object Blob]"; + }; + FB_proto.close = function() { + this.size = 0; + delete this.data; + }; + return FakeBlobBuilder; + }(view)); + + view.Blob = function(blobParts, options) { + var type = options ? (options.type || "") : ""; + var builder = new BlobBuilder(); + if (blobParts) { + for (var i = 0, len = blobParts.length; i < len; i++) { + if (Uint8Array && blobParts[i] instanceof Uint8Array) { + builder.append(blobParts[i].buffer); + } + else { + builder.append(blobParts[i]); + } + } + } + var blob = builder.getBlob(type); + if (!blob.slice && blob.webkitSlice) { + blob.slice = blob.webkitSlice; + } + return blob; + }; + + var getPrototypeOf = Object.getPrototypeOf || function(object) { + return object.__proto__; + }; + view.Blob.prototype = getPrototypeOf(new view.Blob()); +}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this)); diff --git a/vendor/bootstrap/docs/assets/js/vendor/FileSaver.js b/vendor/bootstrap/docs/assets/js/vendor/FileSaver.js new file mode 100644 index 000000000..c8f36fb4b --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/vendor/FileSaver.js @@ -0,0 +1,248 @@ +/* FileSaver.js + * A saveAs() FileSaver implementation. + * 2015-03-04 + * + * By Eli Grey, http://eligrey.com + * License: X11/MIT + * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md + */ + +/*global self */ +/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ + +/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ + +var saveAs = saveAs + // IE 10+ (native saveAs) + || (typeof navigator !== "undefined" && + navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator)) + // Everyone else + || (function(view) { + "use strict"; + // IE <10 is explicitly unsupported + if (typeof navigator !== "undefined" && + /MSIE [1-9]\./.test(navigator.userAgent)) { + return; + } + var + doc = view.document + // only get URL when necessary in case Blob.js hasn't overridden it yet + , get_URL = function() { + return view.URL || view.webkitURL || view; + } + , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") + , can_use_save_link = "download" in save_link + , click = function(node) { + var event = doc.createEvent("MouseEvents"); + event.initMouseEvent( + "click", true, false, view, 0, 0, 0, 0, 0 + , false, false, false, false, 0, null + ); + node.dispatchEvent(event); + } + , webkit_req_fs = view.webkitRequestFileSystem + , req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem + , throw_outside = function(ex) { + (view.setImmediate || view.setTimeout)(function() { + throw ex; + }, 0); + } + , force_saveable_type = "application/octet-stream" + , fs_min_size = 0 + // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and + // https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047 + // for the reasoning behind the timeout and revocation flow + , arbitrary_revoke_timeout = 500 // in ms + , revoke = function(file) { + var revoker = function() { + if (typeof file === "string") { // file is an object URL + get_URL().revokeObjectURL(file); + } else { // file is a File + file.remove(); + } + }; + if (view.chrome) { + revoker(); + } else { + setTimeout(revoker, arbitrary_revoke_timeout); + } + } + , dispatch = function(filesaver, event_types, event) { + event_types = [].concat(event_types); + var i = event_types.length; + while (i--) { + var listener = filesaver["on" + event_types[i]]; + if (typeof listener === "function") { + try { + listener.call(filesaver, event || filesaver); + } catch (ex) { + throw_outside(ex); + } + } + } + } + , FileSaver = function(blob, name) { + // First try a.download, then web filesystem, then object URLs + var + filesaver = this + , type = blob.type + , blob_changed = false + , object_url + , target_view + , dispatch_all = function() { + dispatch(filesaver, "writestart progress write writeend".split(" ")); + } + // on any filesys errors revert to saving with object URLs + , fs_error = function() { + // don't create more object URLs than needed + if (blob_changed || !object_url) { + object_url = get_URL().createObjectURL(blob); + } + if (target_view) { + target_view.location.href = object_url; + } else { + var new_tab = view.open(object_url, "_blank"); + if (new_tab == undefined && typeof safari !== "undefined") { + //Apple do not allow window.open, see http://bit.ly/1kZffRI + view.location.href = object_url + } + } + filesaver.readyState = filesaver.DONE; + dispatch_all(); + revoke(object_url); + } + , abortable = function(func) { + return function() { + if (filesaver.readyState !== filesaver.DONE) { + return func.apply(this, arguments); + } + }; + } + , create_if_not_found = {create: true, exclusive: false} + , slice + ; + filesaver.readyState = filesaver.INIT; + if (!name) { + name = "download"; + } + if (can_use_save_link) { + object_url = get_URL().createObjectURL(blob); + save_link.href = object_url; + save_link.download = name; + click(save_link); + filesaver.readyState = filesaver.DONE; + dispatch_all(); + revoke(object_url); + return; + } + // prepend BOM for UTF-8 XML and text/plain types + if (/^\s*(?:text\/(?:plain|xml)|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + blob = new Blob(["\ufeff", blob], {type: blob.type}); + } + // Object and web filesystem URLs have a problem saving in Google Chrome when + // viewed in a tab, so I force save with application/octet-stream + // http://code.google.com/p/chromium/issues/detail?id=91158 + // Update: Google errantly closed 91158, I submitted it again: + // https://code.google.com/p/chromium/issues/detail?id=389642 + if (view.chrome && type && type !== force_saveable_type) { + slice = blob.slice || blob.webkitSlice; + blob = slice.call(blob, 0, blob.size, force_saveable_type); + blob_changed = true; + } + // Since I can't be sure that the guessed media type will trigger a download + // in WebKit, I append .download to the filename. + // https://bugs.webkit.org/show_bug.cgi?id=65440 + if (webkit_req_fs && name !== "download") { + name += ".download"; + } + if (type === force_saveable_type || webkit_req_fs) { + target_view = view; + } + if (!req_fs) { + fs_error(); + return; + } + fs_min_size += blob.size; + req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) { + fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) { + var save = function() { + dir.getFile(name, create_if_not_found, abortable(function(file) { + file.createWriter(abortable(function(writer) { + writer.onwriteend = function(event) { + target_view.location.href = file.toURL(); + filesaver.readyState = filesaver.DONE; + dispatch(filesaver, "writeend", event); + revoke(file); + }; + writer.onerror = function() { + var error = writer.error; + if (error.code !== error.ABORT_ERR) { + fs_error(); + } + }; + "writestart progress write abort".split(" ").forEach(function(event) { + writer["on" + event] = filesaver["on" + event]; + }); + writer.write(blob); + filesaver.abort = function() { + writer.abort(); + filesaver.readyState = filesaver.DONE; + }; + filesaver.readyState = filesaver.WRITING; + }), fs_error); + }), fs_error); + }; + dir.getFile(name, {create: false}, abortable(function(file) { + // delete file if it already exists + file.remove(); + save(); + }), abortable(function(ex) { + if (ex.code === ex.NOT_FOUND_ERR) { + save(); + } else { + fs_error(); + } + })); + }), fs_error); + }), fs_error); + } + , FS_proto = FileSaver.prototype + , saveAs = function(blob, name) { + return new FileSaver(blob, name); + } + ; + FS_proto.abort = function() { + var filesaver = this; + filesaver.readyState = filesaver.DONE; + dispatch(filesaver, "abort"); + }; + FS_proto.readyState = FS_proto.INIT = 0; + FS_proto.WRITING = 1; + FS_proto.DONE = 2; + + FS_proto.error = + FS_proto.onwritestart = + FS_proto.onprogress = + FS_proto.onwrite = + FS_proto.onabort = + FS_proto.onerror = + FS_proto.onwriteend = + null; + + return saveAs; +}( + typeof self !== "undefined" && self + || typeof window !== "undefined" && window + || this.content +)); +// `self` is undefined in Firefox for Android content script context +// while `this` is nsIContentFrameMessageManager +// with an attribute `content` that corresponds to the window + +if (typeof module !== "undefined" && module.exports) { + module.exports.saveAs = saveAs; +} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) { + define([], function() { + return saveAs; + }); +} diff --git a/vendor/bootstrap/docs/assets/js/vendor/anchor.min.js b/vendor/bootstrap/docs/assets/js/vendor/anchor.min.js new file mode 100644 index 000000000..7f34489fb --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/vendor/anchor.min.js @@ -0,0 +1,6 @@ +/** + * AnchorJS - v3.2.2 - 2016-10-05 + * https://github.com/bryanbraun/anchorjs + * Copyright (c) 2016 Bryan Braun; Licensed MIT + */ +!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";function A(A){function e(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.class=A.hasOwnProperty("class")?A.class:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64}function t(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}function n(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style"),t=" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",n=" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",i=' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',o=" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }";e.className="anchorjs",e.appendChild(document.createTextNode("")),A=document.head.querySelector('[rel="stylesheet"], style'),void 0===A?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(t,e.sheet.cssRules.length),e.sheet.insertRule(n,e.sheet.cssRules.length),e.sheet.insertRule(o,e.sheet.cssRules.length),e.sheet.insertRule(i,e.sheet.cssRules.length)}}this.options=A||{},this.elements=[],e(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var i,o,s,c,r,a,h,l,u,d,f,p,w=[];if(e(this.options),p=this.options.visible,"touch"===p&&(p=this.isTouchDevice()?"always":"hover"),A||(A="h1, h2, h3, h4, h5, h6"),i=t(A),0===i.length)return!1;for(n(),o=document.querySelectorAll("[id]"),s=[].map.call(o,function(A){return A.id}),r=0;r-1,t=A.lastChild&&(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ")>-1;return e||t||!1}}return A}); diff --git a/vendor/bootstrap/docs/assets/js/vendor/autoprefixer.js b/vendor/bootstrap/docs/assets/js/vendor/autoprefixer.js new file mode 100644 index 000000000..2fabe8bfa --- /dev/null +++ b/vendor/bootstrap/docs/assets/js/vendor/autoprefixer.js @@ -0,0 +1,21114 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.autoprefixer = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b[0]) { + return 1; + } else if (a[0] < b[0]) { + return -1; + } else { + d = parseFloat(a[1]) - parseFloat(b[1]); + if (d > 0) { + return 1; + } else if (d < 0) { + return -1; + } else { + return 0; + } + } + }); + }; + + feature = function(data, opts, callback) { + var browser, match, need, ref, ref1, support, version, versions; + if (!callback) { + ref = [opts, {}], callback = ref[0], opts = ref[1]; + } + match = opts.match || /\sx($|\s)/; + need = []; + ref1 = data.stats; + for (browser in ref1) { + versions = ref1[browser]; + for (version in versions) { + support = versions[version]; + if (support.match(match)) { + need.push(browser + ' ' + version); + } + } + } + return callback(sort(need)); + }; + + result = {}; + + prefix = function() { + var data, i, j, k, len, name, names, results; + names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++]; + results = []; + for (k = 0, len = names.length; k < len; k++) { + name = names[k]; + result[name] = {}; + results.push((function() { + var results1; + results1 = []; + for (i in data) { + results1.push(result[name][i] = data[i]); + } + return results1; + })()); + } + return results; + }; + + add = function() { + var data, j, k, len, name, names, results; + names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++]; + results = []; + for (k = 0, len = names.length; k < len; k++) { + name = names[k]; + results.push(result[name].browsers = sort(result[name].browsers.concat(data.browsers))); + } + return results; + }; + + module.exports = result; + + feature(require('caniuse-db/features-json/border-radius'), function(browsers) { + return prefix('border-radius', 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius', { + mistakes: ['-ms-', '-o-'], + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-boxshadow'), function(browsers) { + return prefix('box-shadow', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-animation'), function(browsers) { + return prefix('animation', 'animation-name', 'animation-duration', 'animation-delay', 'animation-direction', 'animation-fill-mode', 'animation-iteration-count', 'animation-play-state', 'animation-timing-function', '@keyframes', { + mistakes: ['-ms-'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-transitions'), function(browsers) { + return prefix('transition', 'transition-property', 'transition-duration', 'transition-delay', 'transition-timing-function', { + mistakes: ['-ms-'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/transforms2d'), function(browsers) { + return prefix('transform', 'transform-origin', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/transforms3d'), function(browsers) { + prefix('perspective', 'perspective-origin', { + transition: true, + browsers: browsers + }); + return prefix('transform-style', 'backface-visibility', { + browsers: browsers + }); + }); + + gradients = require('caniuse-db/features-json/css-gradients'); + + feature(gradients, { + match: /y\sx/ + }, function(browsers) { + return prefix('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', { + props: ['background', 'background-image', 'border-image', 'list-style', 'list-style-image', 'content', 'mask-image', 'mask'], + mistakes: ['-ms-'], + browsers: browsers + }); + }); + + feature(gradients, { + match: /a\sx/ + }, function(browsers) { + browsers = browsers.map(function(i) { + if (/op/.test(i)) { + return i; + } else { + return i + " old"; + } + }); + return add('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css3-boxsizing'), function(browsers) { + return prefix('box-sizing', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-filters'), function(browsers) { + return prefix('filter', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/multicolumn'), function(browsers) { + prefix('columns', 'column-width', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', { + transition: true, + browsers: browsers + }); + return prefix('column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/user-select-none'), function(browsers) { + return prefix('user-select', { + browsers: browsers + }); + }); + + flexbox = require('caniuse-db/features-json/flexbox'); + + feature(flexbox, { + match: /a\sx/ + }, function(browsers) { + browsers = browsers.map(function(i) { + if (/ie|firefox/.test(i)) { + return i; + } else { + return i + " 2009"; + } + }); + prefix('display-flex', 'inline-flex', { + props: ['display'], + browsers: browsers + }); + prefix('flex', 'flex-grow', 'flex-shrink', 'flex-basis', { + transition: true, + browsers: browsers + }); + return prefix('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', { + browsers: browsers + }); + }); + + feature(flexbox, { + match: /y\sx/ + }, function(browsers) { + add('display-flex', 'inline-flex', { + browsers: browsers + }); + add('flex', 'flex-grow', 'flex-shrink', 'flex-basis', { + browsers: browsers + }); + return add('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/calc'), function(browsers) { + return prefix('calc', { + props: ['*'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/background-img-opts'), function(browsers) { + return prefix('background-clip', 'background-origin', 'background-size', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/font-feature'), function(browsers) { + return prefix('font-feature-settings', 'font-variant-ligatures', 'font-language-override', 'font-kerning', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/border-image'), function(browsers) { + return prefix('border-image', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-selection'), function(browsers) { + return prefix('::selection', { + selector: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-placeholder'), function(browsers) { + browsers = browsers.map(function(i) { + var name, ref, version; + ref = i.split(' '), name = ref[0], version = ref[1]; + if (name === 'firefox' && parseFloat(version) <= 18) { + return i + ' old'; + } else { + return i; + } + }); + return prefix(':placeholder-shown', '::placeholder', { + selector: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-hyphens'), function(browsers) { + return prefix('hyphens', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/fullscreen'), function(browsers) { + return prefix(':fullscreen', { + selector: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css3-tabsize'), function(browsers) { + return prefix('tab-size', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/intrinsic-width'), function(browsers) { + return prefix('max-content', 'min-content', 'fit-content', 'fill-available', { + props: ['width', 'min-width', 'max-width', 'height', 'min-height', 'max-height'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css3-cursors-newer'), function(browsers) { + prefix('zoom-in', 'zoom-out', { + props: ['cursor'], + browsers: browsers.concat(['chrome 3']) + }); + return prefix('grab', 'grabbing', { + props: ['cursor'], + browsers: browsers.concat(['firefox 24', 'firefox 25', 'firefox 26']) + }); + }); + + feature(require('caniuse-db/features-json/css-sticky'), function(browsers) { + return prefix('sticky', { + props: ['position'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/pointer'), function(browsers) { + return prefix('touch-action', { + browsers: browsers + }); + }); + + textDecoration = require('caniuse-db/features-json/text-decoration'); + + feature(textDecoration, function(browsers) { + return prefix('text-decoration-style', { + browsers: browsers + }); + }); + + feature(textDecoration, { + match: /y\sx($|\s)/ + }, function(browsers) { + return prefix('text-decoration-line', 'text-decoration-color', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-size-adjust'), function(browsers) { + return prefix('text-size-adjust', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-masks'), function(browsers) { + prefix('mask-clip', 'mask-composite', 'mask-image', 'mask-origin', 'mask-repeat', { + browsers: browsers + }); + return prefix('clip-path', 'mask', 'mask-position', 'mask-size', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-boxdecorationbreak'), function(brwsrs) { + return prefix('box-decoration-break', { + browsers: brwsrs + }); + }); + + feature(require('caniuse-db/features-json/object-fit'), function(browsers) { + return prefix('object-fit', 'object-position', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-shapes'), function(browsers) { + return prefix('shape-margin', 'shape-outside', 'shape-image-threshold', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-overflow'), function(browsers) { + return prefix('text-overflow', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-emphasis'), function(browsers) { + return prefix('text-emphasis', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-deviceadaptation'), function(browsers) { + return prefix('@viewport', { + browsers: browsers + }); + }); + + resolution = require('caniuse-db/features-json/css-media-resolution'); + + feature(resolution, { + match: /( x($| )|a #3)/ + }, function(browsers) { + return prefix('@resolution', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-text-align-last'), function(browsers) { + return prefix('text-align-last', { + browsers: browsers + }); + }); + + crispedges = require('caniuse-db/features-json/css-crisp-edges'); + + feature(crispedges, { + match: /y x/ + }, function(browsers) { + return prefix('crisp-edges', { + props: ['image-rendering'], + browsers: browsers + }); + }); + + feature(crispedges, { + match: /a x #2/ + }, function(browsers) { + return prefix('image-rendering', { + browsers: browsers + }); + }); + + logicalProps = require('caniuse-db/features-json/css-logical-props'); + + feature(logicalProps, function(browsers) { + return prefix('border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', { + transition: true, + browsers: browsers + }); + }); + + feature(logicalProps, { + match: /x\s#2/ + }, function(browsers) { + return prefix('border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', { + transition: true, + browsers: browsers + }); + }); + +}).call(this); + +},{"caniuse-db/features-json/background-img-opts":57,"caniuse-db/features-json/border-image":58,"caniuse-db/features-json/border-radius":59,"caniuse-db/features-json/calc":60,"caniuse-db/features-json/css-animation":61,"caniuse-db/features-json/css-boxdecorationbreak":62,"caniuse-db/features-json/css-boxshadow":63,"caniuse-db/features-json/css-crisp-edges":64,"caniuse-db/features-json/css-deviceadaptation":65,"caniuse-db/features-json/css-filters":66,"caniuse-db/features-json/css-gradients":67,"caniuse-db/features-json/css-hyphens":68,"caniuse-db/features-json/css-logical-props":69,"caniuse-db/features-json/css-masks":70,"caniuse-db/features-json/css-media-resolution":71,"caniuse-db/features-json/css-placeholder":72,"caniuse-db/features-json/css-selection":73,"caniuse-db/features-json/css-shapes":74,"caniuse-db/features-json/css-sticky":75,"caniuse-db/features-json/css-text-align-last":76,"caniuse-db/features-json/css-transitions":77,"caniuse-db/features-json/css3-boxsizing":78,"caniuse-db/features-json/css3-cursors-newer":79,"caniuse-db/features-json/css3-tabsize":80,"caniuse-db/features-json/flexbox":81,"caniuse-db/features-json/font-feature":82,"caniuse-db/features-json/fullscreen":83,"caniuse-db/features-json/intrinsic-width":84,"caniuse-db/features-json/multicolumn":85,"caniuse-db/features-json/object-fit":86,"caniuse-db/features-json/pointer":87,"caniuse-db/features-json/text-decoration":88,"caniuse-db/features-json/text-emphasis":89,"caniuse-db/features-json/text-overflow":90,"caniuse-db/features-json/text-size-adjust":91,"caniuse-db/features-json/transforms2d":92,"caniuse-db/features-json/transforms3d":93,"caniuse-db/features-json/user-select-none":94}],3:[function(require,module,exports){ +(function() { + var AtRule, Prefixer, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + AtRule = (function(superClass) { + extend(AtRule, superClass); + + function AtRule() { + return AtRule.__super__.constructor.apply(this, arguments); + } + + AtRule.prototype.add = function(rule, prefix) { + var already, cloned, prefixed; + prefixed = prefix + rule.name; + already = rule.parent.some(function(i) { + return i.name === prefixed && i.params === rule.params; + }); + if (already) { + return; + } + cloned = this.clone(rule, { + name: prefixed + }); + return rule.parent.insertBefore(rule, cloned); + }; + + AtRule.prototype.process = function(node) { + var j, len, parent, prefix, ref, results; + parent = this.parentPrefix(node); + ref = this.prefixes; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + prefix = ref[j]; + if (parent && parent !== prefix) { + continue; + } + results.push(this.add(node, prefix)); + } + return results; + }; + + return AtRule; + + })(Prefixer); + + module.exports = AtRule; + +}).call(this); + +},{"./prefixer":40}],4:[function(require,module,exports){ +(function() { + var Browsers, browserslist, utils; + + browserslist = require('browserslist'); + + utils = require('./utils'); + + Browsers = (function() { + Browsers.prefixes = function() { + var data, i, name; + if (this.prefixesCache) { + return this.prefixesCache; + } + data = require('caniuse-db/data').agents; + return this.prefixesCache = utils.uniq((function() { + var results; + results = []; + for (name in data) { + i = data[name]; + results.push("-" + i.prefix + "-"); + } + return results; + })()).sort(function(a, b) { + return b.length - a.length; + }); + }; + + Browsers.withPrefix = function(value) { + if (!this.prefixesRegexp) { + this.prefixesRegexp = RegExp("" + (this.prefixes().join('|'))); + } + return this.prefixesRegexp.test(value); + }; + + function Browsers(data1, requirements, options) { + this.data = data1; + this.options = options; + this.selected = this.parse(requirements); + } + + Browsers.prototype.parse = function(requirements) { + var ref; + return browserslist(requirements, { + path: (ref = this.options) != null ? ref.from : void 0 + }); + }; + + Browsers.prototype.browsers = function(criteria) { + var browser, data, ref, selected, versions; + selected = []; + ref = this.data; + for (browser in ref) { + data = ref[browser]; + versions = criteria(data).map(function(version) { + return browser + " " + version; + }); + selected = selected.concat(versions); + } + return selected; + }; + + Browsers.prototype.prefix = function(browser) { + var data, name, prefix, ref, version; + ref = browser.split(' '), name = ref[0], version = ref[1]; + data = this.data[name]; + if (data.prefix_exceptions) { + prefix = data.prefix_exceptions[version]; + } + prefix || (prefix = data.prefix); + return '-' + prefix + '-'; + }; + + Browsers.prototype.isSelected = function(browser) { + return this.selected.indexOf(browser) !== -1; + }; + + return Browsers; + + })(); + + module.exports = Browsers; + +}).call(this); + +},{"./utils":46,"browserslist":55,"caniuse-db/data":56}],5:[function(require,module,exports){ +(function() { + var Browsers, Declaration, Prefixer, utils, vendor, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + Browsers = require('./browsers'); + + vendor = require('postcss/lib/vendor'); + + utils = require('./utils'); + + Declaration = (function(superClass) { + extend(Declaration, superClass); + + function Declaration() { + return Declaration.__super__.constructor.apply(this, arguments); + } + + Declaration.prototype.check = function(decl) { + return true; + }; + + Declaration.prototype.prefixed = function(prop, prefix) { + return prefix + prop; + }; + + Declaration.prototype.normalize = function(prop) { + return prop; + }; + + Declaration.prototype.otherPrefixes = function(value, prefix) { + var j, len, other, ref; + ref = Browsers.prefixes(); + for (j = 0, len = ref.length; j < len; j++) { + other = ref[j]; + if (other === prefix) { + continue; + } + if (value.indexOf(other) !== -1) { + return true; + } + } + return false; + }; + + Declaration.prototype.set = function(decl, prefix) { + decl.prop = this.prefixed(decl.prop, prefix); + return decl; + }; + + Declaration.prototype.needCascade = function(decl) { + return decl._autoprefixerCascade || (decl._autoprefixerCascade = this.all.options.cascade !== false && decl.style('before').indexOf('\n') !== -1); + }; + + Declaration.prototype.maxPrefixed = function(prefixes, decl) { + var j, len, max, prefix; + if (decl._autoprefixerMax) { + return decl._autoprefixerMax; + } + max = 0; + for (j = 0, len = prefixes.length; j < len; j++) { + prefix = prefixes[j]; + prefix = utils.removeNote(prefix); + if (prefix.length > max) { + max = prefix.length; + } + } + return decl._autoprefixerMax = max; + }; + + Declaration.prototype.calcBefore = function(prefixes, decl, prefix) { + var before, diff, i, j, max, ref; + if (prefix == null) { + prefix = ''; + } + before = decl.style('before'); + max = this.maxPrefixed(prefixes, decl); + diff = max - utils.removeNote(prefix).length; + for (i = j = 0, ref = diff; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { + before += ' '; + } + return before; + }; + + Declaration.prototype.restoreBefore = function(decl) { + var lines, min; + lines = decl.style('before').split("\n"); + min = lines[lines.length - 1]; + this.all.group(decl).up(function(prefixed) { + var array, last; + array = prefixed.style('before').split("\n"); + last = array[array.length - 1]; + if (last.length < min.length) { + return min = last; + } + }); + lines[lines.length - 1] = min; + return decl.before = lines.join("\n"); + }; + + Declaration.prototype.insert = function(decl, prefix, prefixes) { + var cloned; + cloned = this.set(this.clone(decl), prefix); + if (!cloned) { + return; + } + if (this.needCascade(decl)) { + cloned.before = this.calcBefore(prefixes, decl, prefix); + } + return decl.parent.insertBefore(decl, cloned); + }; + + Declaration.prototype.add = function(decl, prefix, prefixes) { + var already, prefixed; + prefixed = this.prefixed(decl.prop, prefix); + already = this.all.group(decl).up(function(i) { + return i.prop === prefixed; + }); + already || (already = this.all.group(decl).down(function(i) { + return i.prop === prefixed; + })); + if (already || this.otherPrefixes(decl.value, prefix)) { + return; + } + return this.insert(decl, prefix, prefixes); + }; + + Declaration.prototype.process = function(decl) { + var prefixes; + if (this.needCascade(decl)) { + prefixes = Declaration.__super__.process.apply(this, arguments); + if (prefixes != null ? prefixes.length : void 0) { + this.restoreBefore(decl); + return decl.before = this.calcBefore(prefixes, decl); + } + } else { + return Declaration.__super__.process.apply(this, arguments); + } + }; + + Declaration.prototype.old = function(prop, prefix) { + return [this.prefixed(prop, prefix)]; + }; + + return Declaration; + + })(Prefixer); + + module.exports = Declaration; + +}).call(this); + +},{"./browsers":4,"./prefixer":40,"./utils":46,"postcss/lib/vendor":113}],6:[function(require,module,exports){ +(function() { + var AlignContent, Declaration, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignContent = (function(superClass) { + extend(AlignContent, superClass); + + function AlignContent() { + return AlignContent.__super__.constructor.apply(this, arguments); + } + + AlignContent.names = ['align-content', 'flex-line-pack']; + + AlignContent.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start', + 'space-between': 'justify', + 'space-around': 'distribute' + }; + + AlignContent.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-line-pack'; + } else { + return AlignContent.__super__.prefixed.apply(this, arguments); + } + }; + + AlignContent.prototype.normalize = function(prop) { + return 'align-content'; + }; + + AlignContent.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2012) { + decl.value = AlignContent.oldValues[decl.value] || decl.value; + return AlignContent.__super__.set.call(this, decl, prefix); + } else if (spec === 'final') { + return AlignContent.__super__.set.apply(this, arguments); + } + }; + + return AlignContent; + + })(Declaration); + + module.exports = AlignContent; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],7:[function(require,module,exports){ +(function() { + var AlignItems, Declaration, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignItems = (function(superClass) { + extend(AlignItems, superClass); + + function AlignItems() { + return AlignItems.__super__.constructor.apply(this, arguments); + } + + AlignItems.names = ['align-items', 'flex-align', 'box-align']; + + AlignItems.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start' + }; + + AlignItems.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-align'; + } else if (spec === 2012) { + return prefix + 'flex-align'; + } else { + return AlignItems.__super__.prefixed.apply(this, arguments); + } + }; + + AlignItems.prototype.normalize = function(prop) { + return 'align-items'; + }; + + AlignItems.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009 || spec === 2012) { + decl.value = AlignItems.oldValues[decl.value] || decl.value; + return AlignItems.__super__.set.call(this, decl, prefix); + } else { + return AlignItems.__super__.set.apply(this, arguments); + } + }; + + return AlignItems; + + })(Declaration); + + module.exports = AlignItems; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],8:[function(require,module,exports){ +(function() { + var AlignSelf, Declaration, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignSelf = (function(superClass) { + extend(AlignSelf, superClass); + + function AlignSelf() { + return AlignSelf.__super__.constructor.apply(this, arguments); + } + + AlignSelf.names = ['align-self', 'flex-item-align']; + + AlignSelf.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start' + }; + + AlignSelf.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-item-align'; + } else { + return AlignSelf.__super__.prefixed.apply(this, arguments); + } + }; + + AlignSelf.prototype.normalize = function(prop) { + return 'align-self'; + }; + + AlignSelf.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2012) { + decl.value = AlignSelf.oldValues[decl.value] || decl.value; + return AlignSelf.__super__.set.call(this, decl, prefix); + } else if (spec === 'final') { + return AlignSelf.__super__.set.apply(this, arguments); + } + }; + + return AlignSelf; + + })(Declaration); + + module.exports = AlignSelf; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],9:[function(require,module,exports){ +(function() { + var BackgroundSize, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BackgroundSize = (function(superClass) { + extend(BackgroundSize, superClass); + + function BackgroundSize() { + return BackgroundSize.__super__.constructor.apply(this, arguments); + } + + BackgroundSize.names = ['background-size']; + + BackgroundSize.prototype.set = function(decl, prefix) { + var value; + value = decl.value.toLowerCase(); + if (prefix === '-webkit-' && value.indexOf(' ') === -1 && value !== 'contain' && value !== 'cover') { + decl.value = decl.value + ' ' + decl.value; + } + return BackgroundSize.__super__.set.call(this, decl, prefix); + }; + + return BackgroundSize; + + })(Declaration); + + module.exports = BackgroundSize; + +}).call(this); + +},{"../declaration":5}],10:[function(require,module,exports){ +(function() { + var BlockLogical, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BlockLogical = (function(superClass) { + extend(BlockLogical, superClass); + + function BlockLogical() { + return BlockLogical.__super__.constructor.apply(this, arguments); + } + + BlockLogical.names = ['border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', 'border-before', 'border-after', 'margin-before', 'margin-after', 'padding-before', 'padding-after']; + + BlockLogical.prototype.prefixed = function(prop, prefix) { + return prefix + (prop.indexOf('-start') !== -1 ? prop.replace('-block-start', '-before') : prop.replace('-block-end', '-after')); + }; + + BlockLogical.prototype.normalize = function(prop) { + if (prop.indexOf('-before') !== -1) { + return prop.replace('-before', '-block-start'); + } else { + return prop.replace('-after', '-block-end'); + } + }; + + return BlockLogical; + + })(Declaration); + + module.exports = BlockLogical; + +}).call(this); + +},{"../declaration":5}],11:[function(require,module,exports){ +(function() { + var BorderImage, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BorderImage = (function(superClass) { + extend(BorderImage, superClass); + + function BorderImage() { + return BorderImage.__super__.constructor.apply(this, arguments); + } + + BorderImage.names = ['border-image']; + + BorderImage.prototype.set = function(decl, prefix) { + decl.value = decl.value.replace(/\s+fill(\s)/, '$1'); + return BorderImage.__super__.set.call(this, decl, prefix); + }; + + return BorderImage; + + })(Declaration); + + module.exports = BorderImage; + +}).call(this); + +},{"../declaration":5}],12:[function(require,module,exports){ +(function() { + var BorderRadius, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BorderRadius = (function(superClass) { + var hor, i, j, len, len1, mozilla, normal, ref, ref1, ver; + + extend(BorderRadius, superClass); + + function BorderRadius() { + return BorderRadius.__super__.constructor.apply(this, arguments); + } + + BorderRadius.names = ['border-radius']; + + BorderRadius.toMozilla = {}; + + BorderRadius.toNormal = {}; + + ref = ['top', 'bottom']; + for (i = 0, len = ref.length; i < len; i++) { + ver = ref[i]; + ref1 = ['left', 'right']; + for (j = 0, len1 = ref1.length; j < len1; j++) { + hor = ref1[j]; + normal = "border-" + ver + "-" + hor + "-radius"; + mozilla = "border-radius-" + ver + hor; + BorderRadius.names.push(normal); + BorderRadius.names.push(mozilla); + BorderRadius.toMozilla[normal] = mozilla; + BorderRadius.toNormal[mozilla] = normal; + } + } + + BorderRadius.prototype.prefixed = function(prop, prefix) { + if (prefix === '-moz-') { + return prefix + (BorderRadius.toMozilla[prop] || prop); + } else { + return BorderRadius.__super__.prefixed.apply(this, arguments); + } + }; + + BorderRadius.prototype.normalize = function(prop) { + return BorderRadius.toNormal[prop] || prop; + }; + + return BorderRadius; + + })(Declaration); + + module.exports = BorderRadius; + +}).call(this); + +},{"../declaration":5}],13:[function(require,module,exports){ +(function() { + var BreakInside, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BreakInside = (function(superClass) { + extend(BreakInside, superClass); + + function BreakInside() { + return BreakInside.__super__.constructor.apply(this, arguments); + } + + BreakInside.names = ['break-inside', 'page-break-inside', 'column-break-inside']; + + BreakInside.prototype.prefixed = function(prop, prefix) { + if (prefix === '-webkit-') { + return prefix + 'column-break-inside'; + } else if (prefix === '-moz-') { + return 'page-break-inside'; + } else { + return BreakInside.__super__.prefixed.apply(this, arguments); + } + }; + + BreakInside.prototype.normalize = function() { + return 'break-inside'; + }; + + BreakInside.prototype.set = function(decl, prefix) { + if (decl.value === 'avoid-column' || decl.value === 'avoid-page') { + decl.value = 'avoid'; + } + return BreakInside.__super__.set.apply(this, arguments); + }; + + BreakInside.prototype.insert = function(decl, prefix, prefixes) { + if (decl.value === 'avoid-region') { + + } else if (decl.value === 'avoid-page' && prefix === '-webkit-') { + + } else { + return BreakInside.__super__.insert.apply(this, arguments); + } + }; + + return BreakInside; + + })(Declaration); + + module.exports = BreakInside; + +}).call(this); + +},{"../declaration":5}],14:[function(require,module,exports){ +(function() { + var CrispEdges, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Value = require('../value'); + + CrispEdges = (function(superClass) { + extend(CrispEdges, superClass); + + function CrispEdges() { + return CrispEdges.__super__.constructor.apply(this, arguments); + } + + CrispEdges.names = ['crisp-edges']; + + CrispEdges.prototype.replace = function(string, prefix) { + if (prefix === '-webkit-') { + return string.replace(this.regexp(), '$1-webkit-optimize-contrast'); + } else { + return CrispEdges.__super__.replace.apply(this, arguments); + } + }; + + return CrispEdges; + + })(Value); + + module.exports = CrispEdges; + +}).call(this); + +},{"../value":47}],15:[function(require,module,exports){ +(function() { + var DisplayFlex, OldDisplayFlex, OldValue, Value, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + OldValue = require('../old-value'); + + Value = require('../value'); + + OldDisplayFlex = (function(superClass) { + extend(OldDisplayFlex, superClass); + + function OldDisplayFlex(unprefixed, prefixed1) { + this.unprefixed = unprefixed; + this.prefixed = prefixed1; + } + + OldDisplayFlex.prototype.check = function(value) { + return value === this.name; + }; + + return OldDisplayFlex; + + })(OldValue); + + DisplayFlex = (function(superClass) { + extend(DisplayFlex, superClass); + + DisplayFlex.names = ['display-flex', 'inline-flex']; + + function DisplayFlex(name, prefixes) { + DisplayFlex.__super__.constructor.apply(this, arguments); + if (name === 'display-flex') { + this.name = 'flex'; + } + } + + DisplayFlex.prototype.check = function(decl) { + return decl.value === this.name; + }; + + DisplayFlex.prototype.prefixed = function(prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + return prefix + (spec === 2009 ? this.name === 'flex' ? 'box' : 'inline-box' : spec === 2012 ? this.name === 'flex' ? 'flexbox' : 'inline-flexbox' : spec === 'final' ? this.name : void 0); + }; + + DisplayFlex.prototype.replace = function(string, prefix) { + return this.prefixed(prefix); + }; + + DisplayFlex.prototype.old = function(prefix) { + var prefixed; + prefixed = this.prefixed(prefix); + if (prefixed) { + return new OldValue(this.name, prefixed); + } + }; + + return DisplayFlex; + + })(Value); + + module.exports = DisplayFlex; + +}).call(this); + +},{"../old-value":39,"../value":47,"./flex-spec":24}],16:[function(require,module,exports){ +(function() { + var FillAvailable, OldValue, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + FillAvailable = (function(superClass) { + extend(FillAvailable, superClass); + + function FillAvailable() { + return FillAvailable.__super__.constructor.apply(this, arguments); + } + + FillAvailable.names = ['fill-available']; + + FillAvailable.prototype.replace = function(string, prefix) { + if (prefix === '-moz-') { + return string.replace(this.regexp(), '$1-moz-available$3'); + } else { + return FillAvailable.__super__.replace.apply(this, arguments); + } + }; + + FillAvailable.prototype.old = function(prefix) { + if (prefix === '-moz-') { + return new OldValue(this.name, '-moz-available'); + } else { + return FillAvailable.__super__.old.apply(this, arguments); + } + }; + + return FillAvailable; + + })(Value); + + module.exports = FillAvailable; + +}).call(this); + +},{"../old-value":39,"../value":47}],17:[function(require,module,exports){ +(function() { + var FilterValue, OldFilterValue, OldValue, Value, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + utils = require('../utils'); + + OldFilterValue = (function(superClass) { + extend(OldFilterValue, superClass); + + function OldFilterValue() { + return OldFilterValue.__super__.constructor.apply(this, arguments); + } + + OldFilterValue.prototype.clean = function(decl) { + return decl.value = utils.editList(decl.value, (function(_this) { + return function(props) { + if (props.every(function(i) { + return i.indexOf(_this.unprefixed) !== 0; + })) { + return props; + } + return props.filter(function(i) { + return i.indexOf(_this.prefixed) === -1; + }); + }; + })(this)); + }; + + return OldFilterValue; + + })(OldValue); + + FilterValue = (function(superClass) { + extend(FilterValue, superClass); + + function FilterValue() { + return FilterValue.__super__.constructor.apply(this, arguments); + } + + FilterValue.names = ['filter']; + + FilterValue.prototype.replace = function(value, prefix) { + if (prefix === '-webkit-') { + if (value.indexOf('-webkit-filter') === -1) { + return FilterValue.__super__.replace.apply(this, arguments) + ', ' + value; + } else { + return value; + } + } else { + return FilterValue.__super__.replace.apply(this, arguments); + } + }; + + FilterValue.prototype.old = function(prefix) { + return new OldFilterValue(this.name, prefix + this.name); + }; + + return FilterValue; + + })(Value); + + module.exports = FilterValue; + +}).call(this); + +},{"../old-value":39,"../utils":46,"../value":47}],18:[function(require,module,exports){ +(function() { + var Declaration, Filter, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + Filter = (function(superClass) { + extend(Filter, superClass); + + function Filter() { + return Filter.__super__.constructor.apply(this, arguments); + } + + Filter.names = ['filter']; + + Filter.prototype.check = function(decl) { + var v; + v = decl.value; + return v.toLowerCase().indexOf('alpha(') === -1 && v.indexOf('DXImageTransform.Microsoft') === -1 && v.indexOf('data:image/svg+xml') === -1; + }; + + return Filter; + + })(Declaration); + + module.exports = Filter; + +}).call(this); + +},{"../declaration":5}],19:[function(require,module,exports){ +(function() { + var Declaration, FlexBasis, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexBasis = (function(superClass) { + extend(FlexBasis, superClass); + + function FlexBasis() { + return FlexBasis.__super__.constructor.apply(this, arguments); + } + + FlexBasis.names = ['flex-basis', 'flex-preferred-size']; + + FlexBasis.prototype.normalize = function() { + return 'flex-basis'; + }; + + FlexBasis.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-preferred-size'; + } else { + return FlexBasis.__super__.prefixed.apply(this, arguments); + } + }; + + FlexBasis.prototype.set = function(decl, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012 || spec === 'final') { + return FlexBasis.__super__.set.apply(this, arguments); + } + }; + + return FlexBasis; + + })(Declaration); + + module.exports = FlexBasis; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],20:[function(require,module,exports){ +(function() { + var Declaration, FlexDirection, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexDirection = (function(superClass) { + extend(FlexDirection, superClass); + + function FlexDirection() { + return FlexDirection.__super__.constructor.apply(this, arguments); + } + + FlexDirection.names = ['flex-direction', 'box-direction', 'box-orient']; + + FlexDirection.prototype.normalize = function(prop) { + return 'flex-direction'; + }; + + FlexDirection.prototype.insert = function(decl, prefix, prefixes) { + var already, cloned, dir, orient, ref, spec, value; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + already = decl.parent.some(function(i) { + return i.prop === prefix + 'box-orient' || i.prop === prefix + 'box-direction'; + }); + if (already) { + return; + } + value = decl.value; + orient = value.indexOf('row') !== -1 ? 'horizontal' : 'vertical'; + dir = value.indexOf('reverse') !== -1 ? 'reverse' : 'normal'; + cloned = this.clone(decl); + cloned.prop = prefix + 'box-orient'; + cloned.value = orient; + if (this.needCascade(decl)) { + cloned.before = this.calcBefore(prefixes, decl, prefix); + } + decl.parent.insertBefore(decl, cloned); + cloned = this.clone(decl); + cloned.prop = prefix + 'box-direction'; + cloned.value = dir; + if (this.needCascade(decl)) { + cloned.before = this.calcBefore(prefixes, decl, prefix); + } + return decl.parent.insertBefore(decl, cloned); + } else { + return FlexDirection.__super__.insert.apply(this, arguments); + } + }; + + FlexDirection.prototype.old = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return [prefix + 'box-orient', prefix + 'box-direction']; + } else { + return FlexDirection.__super__.old.apply(this, arguments); + } + }; + + return FlexDirection; + + })(Declaration); + + module.exports = FlexDirection; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],21:[function(require,module,exports){ +(function() { + var Declaration, FlexFlow, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexFlow = (function(superClass) { + extend(FlexFlow, superClass); + + function FlexFlow() { + return FlexFlow.__super__.constructor.apply(this, arguments); + } + + FlexFlow.names = ['flex-flow']; + + FlexFlow.prototype.set = function(decl, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return FlexFlow.__super__.set.apply(this, arguments); + } else if (spec === 'final') { + return FlexFlow.__super__.set.apply(this, arguments); + } + }; + + return FlexFlow; + + })(Declaration); + + module.exports = FlexFlow; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],22:[function(require,module,exports){ +(function() { + var Declaration, Flex, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + Flex = (function(superClass) { + extend(Flex, superClass); + + function Flex() { + return Flex.__super__.constructor.apply(this, arguments); + } + + Flex.names = ['flex-grow', 'flex-positive']; + + Flex.prototype.normalize = function() { + return 'flex'; + }; + + Flex.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-flex'; + } else if (spec === 2012) { + return prefix + 'flex-positive'; + } else { + return Flex.__super__.prefixed.apply(this, arguments); + } + }; + + return Flex; + + })(Declaration); + + module.exports = Flex; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],23:[function(require,module,exports){ +(function() { + var Declaration, FlexShrink, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexShrink = (function(superClass) { + extend(FlexShrink, superClass); + + function FlexShrink() { + return FlexShrink.__super__.constructor.apply(this, arguments); + } + + FlexShrink.names = ['flex-shrink', 'flex-negative']; + + FlexShrink.prototype.normalize = function() { + return 'flex-shrink'; + }; + + FlexShrink.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-negative'; + } else { + return FlexShrink.__super__.prefixed.apply(this, arguments); + } + }; + + FlexShrink.prototype.set = function(decl, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012 || spec === 'final') { + return FlexShrink.__super__.set.apply(this, arguments); + } + }; + + return FlexShrink; + + })(Declaration); + + module.exports = FlexShrink; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],24:[function(require,module,exports){ +(function() { + module.exports = function(prefix) { + var spec; + spec = prefix === '-webkit- 2009' || prefix === '-moz-' ? 2009 : prefix === '-ms-' ? 2012 : prefix === '-webkit-' ? 'final' : void 0; + if (prefix === '-webkit- 2009') { + prefix = '-webkit-'; + } + return [spec, prefix]; + }; + +}).call(this); + +},{}],25:[function(require,module,exports){ +(function() { + var FlexValues, OldValue, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + FlexValues = (function(superClass) { + extend(FlexValues, superClass); + + function FlexValues() { + return FlexValues.__super__.constructor.apply(this, arguments); + } + + FlexValues.names = ['flex', 'flex-grow', 'flex-shrink', 'flex-basis']; + + FlexValues.prototype.prefixed = function(prefix) { + return this.all.prefixed(this.name, prefix); + }; + + FlexValues.prototype.replace = function(string, prefix) { + return string.replace(this.regexp(), '$1' + this.prefixed(prefix) + '$3'); + }; + + FlexValues.prototype.old = function(prefix) { + return new OldValue(this.name, this.prefixed(prefix)); + }; + + return FlexValues; + + })(Value); + + module.exports = FlexValues; + +}).call(this); + +},{"../old-value":39,"../value":47}],26:[function(require,module,exports){ +(function() { + var Declaration, FlexWrap, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexWrap = (function(superClass) { + extend(FlexWrap, superClass); + + function FlexWrap() { + return FlexWrap.__super__.constructor.apply(this, arguments); + } + + FlexWrap.names = ['flex-wrap']; + + FlexWrap.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec !== 2009) { + return FlexWrap.__super__.set.apply(this, arguments); + } + }; + + return FlexWrap; + + })(Declaration); + + module.exports = FlexWrap; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],27:[function(require,module,exports){ +(function() { + var Declaration, Flex, flexSpec, list, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + list = require('postcss/lib/list'); + + Flex = (function(superClass) { + extend(Flex, superClass); + + function Flex() { + return Flex.__super__.constructor.apply(this, arguments); + } + + Flex.names = ['flex', 'box-flex']; + + Flex.oldValues = { + 'auto': '1', + 'none': '0' + }; + + Flex.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-flex'; + } else { + return Flex.__super__.prefixed.apply(this, arguments); + } + }; + + Flex.prototype.normalize = function() { + return 'flex'; + }; + + Flex.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009) { + decl.value = list.space(decl.value)[0]; + decl.value = Flex.oldValues[decl.value] || decl.value; + return Flex.__super__.set.call(this, decl, prefix); + } else { + return Flex.__super__.set.apply(this, arguments); + } + }; + + return Flex; + + })(Declaration); + + module.exports = Flex; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24,"postcss/lib/list":102}],28:[function(require,module,exports){ +(function() { + var Fullscreen, Selector, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Selector = require('../selector'); + + Fullscreen = (function(superClass) { + extend(Fullscreen, superClass); + + function Fullscreen() { + return Fullscreen.__super__.constructor.apply(this, arguments); + } + + Fullscreen.names = [':fullscreen']; + + Fullscreen.prototype.prefixed = function(prefix) { + if ('-webkit-' === prefix) { + return ':-webkit-full-screen'; + } else if ('-moz-' === prefix) { + return ':-moz-full-screen'; + } else { + return ":" + prefix + "fullscreen"; + } + }; + + return Fullscreen; + + })(Selector); + + module.exports = Fullscreen; + +}).call(this); + +},{"../selector":44}],29:[function(require,module,exports){ +(function() { + var Gradient, OldValue, Value, isDirection, list, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + utils = require('../utils'); + + list = require('postcss/lib/list'); + + isDirection = /top|left|right|bottom/gi; + + Gradient = (function(superClass) { + extend(Gradient, superClass); + + function Gradient() { + return Gradient.__super__.constructor.apply(this, arguments); + } + + Gradient.names = ['linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient']; + + Gradient.prototype.replace = function(string, prefix) { + return list.space(string).map((function(_this) { + return function(value) { + var after, args, close, params; + if (value.slice(0, +_this.name.length + 1 || 9e9) !== _this.name + '(') { + return value; + } + close = value.lastIndexOf(')'); + after = value.slice(close + 1); + args = value.slice(_this.name.length + 1, +(close - 1) + 1 || 9e9); + params = list.comma(args); + params = _this.newDirection(params); + if (prefix === '-webkit- old') { + return _this.oldWebkit(value, args, params, after); + } else { + _this.convertDirection(params); + return prefix + _this.name + '(' + params.join(', ') + ')' + after; + } + }; + })(this)).join(' '); + }; + + Gradient.prototype.directions = { + top: 'bottom', + left: 'right', + bottom: 'top', + right: 'left' + }; + + Gradient.prototype.oldDirections = { + 'top': 'left bottom, left top', + 'left': 'right top, left top', + 'bottom': 'left top, left bottom', + 'right': 'left top, right top', + 'top right': 'left bottom, right top', + 'top left': 'right bottom, left top', + 'right top': 'left bottom, right top', + 'right bottom': 'left top, right bottom', + 'bottom right': 'left top, right bottom', + 'bottom left': 'right top, left bottom', + 'left top': 'right bottom, left top', + 'left bottom': 'right top, left bottom' + }; + + Gradient.prototype.newDirection = function(params) { + var first, value; + first = params[0]; + if (first.indexOf('to ') === -1 && isDirection.test(first)) { + first = first.split(' '); + first = (function() { + var j, len, results; + results = []; + for (j = 0, len = first.length; j < len; j++) { + value = first[j]; + results.push(this.directions[value.toLowerCase()] || value); + } + return results; + }).call(this); + params[0] = 'to ' + first.join(' '); + } + return params; + }; + + Gradient.prototype.oldWebkit = function(value, args, params, after) { + if (args.indexOf('px') !== -1) { + return value; + } + if (this.name !== 'linear-gradient') { + return value; + } + if (params[0] && params[0].indexOf('deg') !== -1) { + return value; + } + if (args.indexOf('-corner') !== -1) { + return value; + } + if (args.indexOf('-side') !== -1) { + return value; + } + params = this.oldDirection(params); + params = this.colorStops(params); + return '-webkit-gradient(linear, ' + params.join(', ') + ')' + after; + }; + + Gradient.prototype.convertDirection = function(params) { + if (params.length > 0) { + if (params[0].slice(0, 3) === 'to ') { + return params[0] = this.fixDirection(params[0]); + } else if (params[0].indexOf('deg') !== -1) { + return params[0] = this.fixAngle(params[0]); + } else if (params[0].indexOf(' at ') !== -1) { + return this.fixRadial(params); + } + } + }; + + Gradient.prototype.fixDirection = function(param) { + var value; + param = param.split(' '); + param.splice(0, 1); + param = (function() { + var j, len, results; + results = []; + for (j = 0, len = param.length; j < len; j++) { + value = param[j]; + results.push(this.directions[value.toLowerCase()] || value); + } + return results; + }).call(this); + return param.join(' '); + }; + + Gradient.prototype.roundFloat = function(float, digits) { + return parseFloat(float.toFixed(digits)); + }; + + Gradient.prototype.fixAngle = function(param) { + param = parseFloat(param); + param = Math.abs(450 - param) % 360; + param = this.roundFloat(param, 3); + return param + "deg"; + }; + + Gradient.prototype.oldDirection = function(params) { + var direction; + if (params.length === 0) { + params; + } + if (params[0].indexOf('to ') !== -1) { + direction = params[0].replace(/^to\s+/, ''); + direction = this.oldDirections[direction]; + params[0] = direction; + return params; + } else { + direction = this.oldDirections.bottom; + return [direction].concat(params); + } + }; + + Gradient.prototype.colorStops = function(params) { + return params.map(function(param, i) { + var color, match, position, ref; + if (i === 0) { + return param; + } + ref = list.space(param), color = ref[0], position = ref[1]; + if (position == null) { + match = param.match(/^(.*\))(\d.*)$/); + if (match) { + color = match[1]; + position = match[2]; + } + } + if (position && position.indexOf(')') !== -1) { + color += ' ' + position; + position = void 0; + } + if (i === 1 && (position === void 0 || position === '0%')) { + return "from(" + color + ")"; + } else if (i === params.length - 1 && (position === void 0 || position === '100%')) { + return "to(" + color + ")"; + } else if (position) { + return "color-stop(" + position + ", " + color + ")"; + } else { + return "color-stop(" + color + ")"; + } + }); + }; + + Gradient.prototype.fixRadial = function(params) { + var first; + first = params[0].split(/\s+at\s+/); + return params.splice(0, 1, first[1], first[0]); + }; + + Gradient.prototype.old = function(prefix) { + var regexp, string, type; + if (prefix === '-webkit-') { + type = this.name === 'linear-gradient' ? 'linear' : 'radial'; + string = '-gradient'; + regexp = utils.regexp("-webkit-(" + type + "-gradient|gradient\\(\\s*" + type + ")", false); + return new OldValue(this.name, prefix + this.name, string, regexp); + } else { + return Gradient.__super__.old.apply(this, arguments); + } + }; + + Gradient.prototype.add = function(decl, prefix) { + var p; + p = decl.prop; + if (p.indexOf('mask') !== -1) { + if (prefix === '-webkit-' || prefix === '-webkit- old') { + return Gradient.__super__.add.apply(this, arguments); + } + } else if (p === 'list-style' || p === 'list-style-image' || p === 'content') { + if (prefix === '-webkit-' || prefix === '-webkit- old') { + return Gradient.__super__.add.apply(this, arguments); + } + } else { + return Gradient.__super__.add.apply(this, arguments); + } + }; + + return Gradient; + + })(Value); + + module.exports = Gradient; + +}).call(this); + +},{"../old-value":39,"../utils":46,"../value":47,"postcss/lib/list":102}],30:[function(require,module,exports){ +(function() { + var Declaration, ImageRendering, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + ImageRendering = (function(superClass) { + extend(ImageRendering, superClass); + + function ImageRendering() { + return ImageRendering.__super__.constructor.apply(this, arguments); + } + + ImageRendering.names = ['image-rendering', 'interpolation-mode']; + + ImageRendering.prototype.check = function(decl) { + return decl.value === 'crisp-edges'; + }; + + ImageRendering.prototype.prefixed = function(prop, prefix) { + if (prefix === '-ms-') { + return '-ms-interpolation-mode'; + } else { + return ImageRendering.__super__.prefixed.apply(this, arguments); + } + }; + + ImageRendering.prototype.set = function(decl, prefix) { + if (prefix === '-ms-') { + decl.prop = '-ms-interpolation-mode'; + decl.value = 'nearest-neighbor'; + return decl; + } else { + return ImageRendering.__super__.set.apply(this, arguments); + } + }; + + ImageRendering.prototype.normalize = function(prop) { + return 'image-rendering'; + }; + + return ImageRendering; + + })(Declaration); + + module.exports = ImageRendering; + +}).call(this); + +},{"../declaration":5}],31:[function(require,module,exports){ +(function() { + var Declaration, InlineLogical, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + InlineLogical = (function(superClass) { + extend(InlineLogical, superClass); + + function InlineLogical() { + return InlineLogical.__super__.constructor.apply(this, arguments); + } + + InlineLogical.names = ['border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', 'border-start', 'border-end', 'margin-start', 'margin-end', 'padding-start', 'padding-end']; + + InlineLogical.prototype.prefixed = function(prop, prefix) { + return prefix + prop.replace('-inline', ''); + }; + + InlineLogical.prototype.normalize = function(prop) { + return prop.replace(/(margin|padding|border)-(start|end)/, '$1-inline-$2'); + }; + + return InlineLogical; + + })(Declaration); + + module.exports = InlineLogical; + +}).call(this); + +},{"../declaration":5}],32:[function(require,module,exports){ +(function() { + var Declaration, JustifyContent, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + JustifyContent = (function(superClass) { + extend(JustifyContent, superClass); + + function JustifyContent() { + return JustifyContent.__super__.constructor.apply(this, arguments); + } + + JustifyContent.names = ['justify-content', 'flex-pack', 'box-pack']; + + JustifyContent.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start', + 'space-between': 'justify', + 'space-around': 'distribute' + }; + + JustifyContent.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-pack'; + } else if (spec === 2012) { + return prefix + 'flex-pack'; + } else { + return JustifyContent.__super__.prefixed.apply(this, arguments); + } + }; + + JustifyContent.prototype.normalize = function(prop) { + return 'justify-content'; + }; + + JustifyContent.prototype.set = function(decl, prefix) { + var spec, value; + spec = flexSpec(prefix)[0]; + if (spec === 2009 || spec === 2012) { + value = JustifyContent.oldValues[decl.value] || decl.value; + decl.value = value; + if (spec !== 2009 || value !== 'distribute') { + return JustifyContent.__super__.set.call(this, decl, prefix); + } + } else if (spec === 'final') { + return JustifyContent.__super__.set.apply(this, arguments); + } + }; + + return JustifyContent; + + })(Declaration); + + module.exports = JustifyContent; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],33:[function(require,module,exports){ +(function() { + var Declaration, Order, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + Order = (function(superClass) { + extend(Order, superClass); + + function Order() { + return Order.__super__.constructor.apply(this, arguments); + } + + Order.names = ['order', 'flex-order', 'box-ordinal-group']; + + Order.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-ordinal-group'; + } else if (spec === 2012) { + return prefix + 'flex-order'; + } else { + return Order.__super__.prefixed.apply(this, arguments); + } + }; + + Order.prototype.normalize = function(prop) { + return 'order'; + }; + + Order.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009) { + decl.value = (parseInt(decl.value) + 1).toString(); + return Order.__super__.set.call(this, decl, prefix); + } else { + return Order.__super__.set.apply(this, arguments); + } + }; + + return Order; + + })(Declaration); + + module.exports = Order; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],34:[function(require,module,exports){ +(function() { + var Placeholder, Selector, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Selector = require('../selector'); + + Placeholder = (function(superClass) { + extend(Placeholder, superClass); + + function Placeholder() { + return Placeholder.__super__.constructor.apply(this, arguments); + } + + Placeholder.names = [':placeholder-shown', '::placeholder']; + + Placeholder.prototype.possible = function() { + return Placeholder.__super__.possible.apply(this, arguments).concat('-moz- old'); + }; + + Placeholder.prototype.prefixed = function(prefix) { + if ('-webkit-' === prefix) { + return '::-webkit-input-placeholder'; + } else if ('-ms-' === prefix) { + return ':-ms-input-placeholder'; + } else if ('-moz- old' === prefix) { + return ':-moz-placeholder'; + } else { + return "::" + prefix + "placeholder"; + } + }; + + return Placeholder; + + })(Selector); + + module.exports = Placeholder; + +}).call(this); + +},{"../selector":44}],35:[function(require,module,exports){ +(function() { + var Declaration, TransformDecl, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + TransformDecl = (function(superClass) { + extend(TransformDecl, superClass); + + function TransformDecl() { + return TransformDecl.__super__.constructor.apply(this, arguments); + } + + TransformDecl.names = ['transform', 'transform-origin']; + + TransformDecl.functions3d = ['matrix3d', 'translate3d', 'translateZ', 'scale3d', 'scaleZ', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'perspective']; + + TransformDecl.prototype.keykrameParents = function(decl) { + var parent; + parent = decl.parent; + while (parent) { + if (parent.type === 'atrule' && parent.name === 'keyframes') { + return true; + } + parent = parent.parent; + } + return false; + }; + + TransformDecl.prototype.contain3d = function(decl) { + var func, i, len, ref; + if (decl.prop === 'transform-origin') { + return false; + } + ref = TransformDecl.functions3d; + for (i = 0, len = ref.length; i < len; i++) { + func = ref[i]; + if (decl.value.indexOf(func + "(") !== -1) { + return true; + } + } + return false; + }; + + TransformDecl.prototype.insert = function(decl, prefix, prefixes) { + if (prefix === '-ms-') { + if (!this.contain3d(decl) && !this.keykrameParents(decl)) { + return TransformDecl.__super__.insert.apply(this, arguments); + } + } else if (prefix === '-o-') { + if (!this.contain3d(decl)) { + return TransformDecl.__super__.insert.apply(this, arguments); + } + } else { + return TransformDecl.__super__.insert.apply(this, arguments); + } + }; + + return TransformDecl; + + })(Declaration); + + module.exports = TransformDecl; + +}).call(this); + +},{"../declaration":5}],36:[function(require,module,exports){ +(function() { + var TransformValue, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Value = require('../value'); + + TransformValue = (function(superClass) { + extend(TransformValue, superClass); + + function TransformValue() { + return TransformValue.__super__.constructor.apply(this, arguments); + } + + TransformValue.names = ['transform']; + + TransformValue.prototype.replace = function(value, prefix) { + if (prefix === '-ms-') { + return value; + } else { + return TransformValue.__super__.replace.apply(this, arguments); + } + }; + + return TransformValue; + + })(Value); + + module.exports = TransformValue; + +}).call(this); + +},{"../value":47}],37:[function(require,module,exports){ +(function() { + var capitalize, names, prefix; + + capitalize = function(str) { + return str.slice(0, 1).toUpperCase() + str.slice(1); + }; + + names = { + ie: 'IE', + ie_mob: 'IE Mobile', + ios_saf: 'iOS', + op_mini: 'Opera Mini', + op_mob: 'Opera Mobile', + and_chr: 'Chrome for Android', + and_ff: 'Firefox for Android', + and_uc: 'UC for Android' + }; + + prefix = function(name, transition, prefixes) { + var out; + out = ' ' + name + (transition ? '*' : '') + ': '; + out += prefixes.map(function(i) { + return i.replace(/^-(.*)-$/g, '$1'); + }).join(', '); + out += "\n"; + return out; + }; + + module.exports = function(prefixes) { + var atrules, browser, data, j, k, l, len, len1, len2, list, name, needTransition, out, props, ref, ref1, ref2, ref3, ref4, ref5, ref6, selector, selectors, string, transitionProp, useTransition, value, values, version, versions; + if (prefixes.browsers.selected.length === 0) { + return "No browsers selected"; + } + versions = []; + ref = prefixes.browsers.selected; + for (j = 0, len = ref.length; j < len; j++) { + browser = ref[j]; + ref1 = browser.split(' '), name = ref1[0], version = ref1[1]; + name = names[name] || capitalize(name); + if (versions[name]) { + versions[name].push(version); + } else { + versions[name] = [version]; + } + } + out = "Browsers:\n"; + for (browser in versions) { + list = versions[browser]; + list = list.sort(function(a, b) { + return parseFloat(b) - parseFloat(a); + }); + out += ' ' + browser + ': ' + list.join(', ') + "\n"; + } + atrules = ''; + ref2 = prefixes.add; + for (name in ref2) { + data = ref2[name]; + if (name[0] === '@' && data.prefixes) { + atrules += prefix(name, false, data.prefixes); + } + } + if (atrules !== '') { + out += "\nAt-Rules:\n" + atrules; + } + selectors = ''; + ref3 = prefixes.add.selectors; + for (k = 0, len1 = ref3.length; k < len1; k++) { + selector = ref3[k]; + if (selector.prefixes) { + selectors += prefix(selector.name, false, selector.prefixes); + } + } + if (selectors !== '') { + out += "\nSelectors:\n" + selectors; + } + values = ''; + props = ''; + useTransition = false; + needTransition = (ref4 = prefixes.add.transition) != null ? ref4.prefixes : void 0; + ref5 = prefixes.add; + for (name in ref5) { + data = ref5[name]; + if (name[0] !== '@' && data.prefixes) { + transitionProp = needTransition && prefixes.data[name].transition; + if (transitionProp) { + useTransition = true; + } + props += prefix(name, transitionProp, data.prefixes); + } + if (!data.values) { + continue; + } + if (prefixes.transitionProps.some(function(i) { + return i === name; + })) { + continue; + } + ref6 = data.values; + for (l = 0, len2 = ref6.length; l < len2; l++) { + value = ref6[l]; + string = prefix(value.name, false, value.prefixes); + if (values.indexOf(string) === -1) { + values += string; + } + } + } + if (useTransition) { + props += " * - can be used in transition\n"; + } + if (props !== '') { + out += "\nProperties:\n" + props; + } + if (values !== '') { + out += "\nValues:\n" + values; + } + if (atrules === '' && selectors === '' && props === '' && values === '') { + out += '\nAwesome! Your browsers don\'t require any vendor prefixes.' + '\nNow you can remove Autoprefixer from build steps.'; + } + return out; + }; + +}).call(this); + +},{}],38:[function(require,module,exports){ +(function() { + var OldSelector; + + OldSelector = (function() { + function OldSelector(selector, prefix1) { + var i, len, prefix, ref; + this.prefix = prefix1; + this.prefixed = selector.prefixed(this.prefix); + this.regexp = selector.regexp(this.prefix); + this.prefixeds = []; + ref = selector.possible(); + for (i = 0, len = ref.length; i < len; i++) { + prefix = ref[i]; + this.prefixeds.push([selector.prefixed(prefix), selector.regexp(prefix)]); + } + this.unprefixed = selector.name; + this.nameRegexp = selector.regexp(); + } + + OldSelector.prototype.isHack = function(rule) { + var before, i, index, len, ref, ref1, regexp, rules, some, string; + index = rule.parent.index(rule) + 1; + rules = rule.parent.nodes; + while (index < rules.length) { + before = rules[index].selector; + if (!before) { + return true; + } + if (before.indexOf(this.unprefixed) !== -1 && before.match(this.nameRegexp)) { + return false; + } + some = false; + ref = this.prefixeds; + for (i = 0, len = ref.length; i < len; i++) { + ref1 = ref[i], string = ref1[0], regexp = ref1[1]; + if (before.indexOf(string) !== -1 && before.match(regexp)) { + some = true; + break; + } + } + if (!some) { + return true; + } + index += 1; + } + return true; + }; + + OldSelector.prototype.check = function(rule) { + if (rule.selector.indexOf(this.prefixed) === -1) { + return false; + } + if (!rule.selector.match(this.regexp)) { + return false; + } + if (this.isHack(rule)) { + return false; + } + return true; + }; + + return OldSelector; + + })(); + + module.exports = OldSelector; + +}).call(this); + +},{}],39:[function(require,module,exports){ +(function() { + var OldValue, utils; + + utils = require('./utils'); + + OldValue = (function() { + function OldValue(unprefixed, prefixed, string, regexp) { + this.unprefixed = unprefixed; + this.prefixed = prefixed; + this.string = string; + this.regexp = regexp; + this.regexp || (this.regexp = utils.regexp(this.prefixed)); + this.string || (this.string = this.prefixed); + } + + OldValue.prototype.check = function(value) { + if (value.indexOf(this.string) !== -1) { + return !!value.match(this.regexp); + } else { + return false; + } + }; + + return OldValue; + + })(); + + module.exports = OldValue; + +}).call(this); + +},{"./utils":46}],40:[function(require,module,exports){ +(function() { + var Browsers, Prefixer, clone, utils, vendor, + hasProp = {}.hasOwnProperty; + + Browsers = require('./browsers'); + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + clone = function(obj, parent) { + var cloned, i, value; + if (typeof obj !== 'object') { + return obj; + } + cloned = new obj.constructor(); + for (i in obj) { + if (!hasProp.call(obj, i)) continue; + value = obj[i]; + if (i === 'parent' && typeof value === 'object') { + if (parent) { + cloned[i] = parent; + } + } else if (i === 'source') { + cloned[i] = value; + } else if (value instanceof Array) { + cloned[i] = value.map(function(i) { + return clone(i, cloned); + }); + } else if (i !== '_autoprefixerPrefix' && i !== '_autoprefixerValues') { + cloned[i] = clone(value, cloned); + } + } + return cloned; + }; + + Prefixer = (function() { + Prefixer.hack = function(klass) { + var j, len, name, ref, results; + this.hacks || (this.hacks = {}); + ref = klass.names; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + name = ref[j]; + results.push(this.hacks[name] = klass); + } + return results; + }; + + Prefixer.load = function(name, prefixes, all) { + var klass, ref; + klass = (ref = this.hacks) != null ? ref[name] : void 0; + if (klass) { + return new klass(name, prefixes, all); + } else { + return new this(name, prefixes, all); + } + }; + + Prefixer.clone = function(node, overrides) { + var cloned, name; + cloned = clone(node); + for (name in overrides) { + cloned[name] = overrides[name]; + } + return cloned; + }; + + function Prefixer(name1, prefixes1, all1) { + this.name = name1; + this.prefixes = prefixes1; + this.all = all1; + } + + Prefixer.prototype.parentPrefix = function(node) { + var prefix; + prefix = node._autoprefixerPrefix != null ? node._autoprefixerPrefix : node.type === 'decl' && node.prop[0] === '-' ? vendor.prefix(node.prop) : node.type === 'root' ? false : node.type === 'rule' && node.selector.indexOf(':-') !== -1 ? node.selector.match(/:(-\w+-)/)[1] : node.type === 'atrule' && node.name[0] === '-' ? vendor.prefix(node.name) : this.parentPrefix(node.parent); + if (Browsers.prefixes().indexOf(prefix) === -1) { + prefix = false; + } + return node._autoprefixerPrefix = prefix; + }; + + Prefixer.prototype.process = function(node) { + var added, j, k, len, len1, parent, prefix, prefixes, ref; + if (!this.check(node)) { + return; + } + parent = this.parentPrefix(node); + prefixes = []; + ref = this.prefixes; + for (j = 0, len = ref.length; j < len; j++) { + prefix = ref[j]; + if (parent && parent !== utils.removeNote(prefix)) { + continue; + } + prefixes.push(prefix); + } + added = []; + for (k = 0, len1 = prefixes.length; k < len1; k++) { + prefix = prefixes[k]; + if (this.add(node, prefix, added.concat([prefix]))) { + added.push(prefix); + } + } + return added; + }; + + Prefixer.prototype.clone = function(node, overrides) { + return Prefixer.clone(node, overrides); + }; + + return Prefixer; + + })(); + + module.exports = Prefixer; + +}).call(this); + +},{"./browsers":4,"./utils":46,"postcss/lib/vendor":113}],41:[function(require,module,exports){ +(function() { + var AtRule, Browsers, Declaration, Prefixes, Processor, Resolution, Selector, Supports, Value, declsCache, utils, vendor; + + Declaration = require('./declaration'); + + Resolution = require('./resolution'); + + Processor = require('./processor'); + + Supports = require('./supports'); + + Browsers = require('./browsers'); + + Selector = require('./selector'); + + AtRule = require('./at-rule'); + + Value = require('./value'); + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + Selector.hack(require('./hacks/fullscreen')); + + Selector.hack(require('./hacks/placeholder')); + + Declaration.hack(require('./hacks/flex')); + + Declaration.hack(require('./hacks/order')); + + Declaration.hack(require('./hacks/filter')); + + Declaration.hack(require('./hacks/flex-flow')); + + Declaration.hack(require('./hacks/flex-grow')); + + Declaration.hack(require('./hacks/flex-wrap')); + + Declaration.hack(require('./hacks/align-self')); + + Declaration.hack(require('./hacks/flex-basis')); + + Declaration.hack(require('./hacks/align-items')); + + Declaration.hack(require('./hacks/flex-shrink')); + + Declaration.hack(require('./hacks/break-inside')); + + Declaration.hack(require('./hacks/border-image')); + + Declaration.hack(require('./hacks/align-content')); + + Declaration.hack(require('./hacks/border-radius')); + + Declaration.hack(require('./hacks/block-logical')); + + Declaration.hack(require('./hacks/inline-logical')); + + Declaration.hack(require('./hacks/transform-decl')); + + Declaration.hack(require('./hacks/flex-direction')); + + Declaration.hack(require('./hacks/image-rendering')); + + Declaration.hack(require('./hacks/justify-content')); + + Declaration.hack(require('./hacks/background-size')); + + Value.hack(require('./hacks/gradient')); + + Value.hack(require('./hacks/crisp-edges')); + + Value.hack(require('./hacks/flex-values')); + + Value.hack(require('./hacks/display-flex')); + + Value.hack(require('./hacks/filter-value')); + + Value.hack(require('./hacks/fill-available')); + + Value.hack(require('./hacks/transform-value')); + + declsCache = {}; + + Prefixes = (function() { + function Prefixes(data1, browsers, options) { + var ref; + this.data = data1; + this.browsers = browsers; + this.options = options != null ? options : {}; + ref = this.preprocess(this.select(this.data)), this.add = ref[0], this.remove = ref[1]; + this.processor = new Processor(this); + } + + Prefixes.prototype.transitionProps = ['transition', 'transition-property']; + + Prefixes.prototype.cleaner = function() { + var empty; + if (!this.cleanerCache) { + if (this.browsers.selected.length) { + empty = new Browsers(this.browsers.data, []); + this.cleanerCache = new Prefixes(this.data, empty, this.options); + } else { + return this; + } + } + return this.cleanerCache; + }; + + Prefixes.prototype.select = function(list) { + var add, all, data, name, notes, selected; + selected = { + add: {}, + remove: {} + }; + for (name in list) { + data = list[name]; + add = data.browsers.map(function(i) { + var params; + params = i.split(' '); + return { + browser: params[0] + ' ' + params[1], + note: params[2] + }; + }); + notes = add.filter(function(i) { + return i.note; + }).map((function(_this) { + return function(i) { + return _this.browsers.prefix(i.browser) + ' ' + i.note; + }; + })(this)); + notes = utils.uniq(notes); + add = add.filter((function(_this) { + return function(i) { + return _this.browsers.isSelected(i.browser); + }; + })(this)).map((function(_this) { + return function(i) { + var prefix; + prefix = _this.browsers.prefix(i.browser); + if (i.note) { + return prefix + ' ' + i.note; + } else { + return prefix; + } + }; + })(this)); + add = this.sort(utils.uniq(add)); + all = data.browsers.map((function(_this) { + return function(i) { + return _this.browsers.prefix(i); + }; + })(this)); + if (data.mistakes) { + all = all.concat(data.mistakes); + } + all = all.concat(notes); + all = utils.uniq(all); + if (add.length) { + selected.add[name] = add; + if (add.length < all.length) { + selected.remove[name] = all.filter(function(i) { + return add.indexOf(i) === -1; + }); + } + } else { + selected.remove[name] = all; + } + } + return selected; + }; + + Prefixes.prototype.sort = function(prefixes) { + return prefixes.sort(function(a, b) { + var aLength, bLength; + aLength = utils.removeNote(a).length; + bLength = utils.removeNote(b).length; + if (aLength === bLength) { + return b.length - a.length; + } else { + return bLength - aLength; + } + }); + }; + + Prefixes.prototype.preprocess = function(selected) { + var add, j, k, l, len, len1, len2, len3, len4, len5, len6, m, n, name, o, old, olds, p, prefix, prefixed, prefixes, prop, props, ref, ref1, ref2, remove, selector, value, values; + add = { + selectors: [], + '@supports': new Supports(this) + }; + ref = selected.add; + for (name in ref) { + prefixes = ref[name]; + if (name === '@keyframes' || name === '@viewport') { + add[name] = new AtRule(name, prefixes, this); + } else if (name === '@resolution') { + add[name] = new Resolution(name, prefixes, this); + } else if (this.data[name].selector) { + add.selectors.push(Selector.load(name, prefixes, this)); + } else { + props = this.data[name].transition ? this.transitionProps : this.data[name].props; + if (props) { + value = Value.load(name, prefixes, this); + for (j = 0, len = props.length; j < len; j++) { + prop = props[j]; + if (!add[prop]) { + add[prop] = { + values: [] + }; + } + add[prop].values.push(value); + } + } + if (!this.data[name].props) { + values = ((ref1 = add[name]) != null ? ref1.values : void 0) || []; + add[name] = Declaration.load(name, prefixes, this); + add[name].values = values; + } + } + } + remove = { + selectors: [] + }; + ref2 = selected.remove; + for (name in ref2) { + prefixes = ref2[name]; + if (this.data[name].selector) { + selector = Selector.load(name, prefixes); + for (k = 0, len1 = prefixes.length; k < len1; k++) { + prefix = prefixes[k]; + remove.selectors.push(selector.old(prefix)); + } + } else if (name === '@keyframes' || name === '@viewport') { + for (l = 0, len2 = prefixes.length; l < len2; l++) { + prefix = prefixes[l]; + prefixed = '@' + prefix + name.slice(1); + remove[prefixed] = { + remove: true + }; + } + } else if (name === '@resolution') { + remove[name] = new Resolution(name, prefixes, this); + } else { + props = this.data[name].transition ? this.transitionProps : this.data[name].props; + if (props) { + value = Value.load(name, [], this); + for (m = 0, len3 = prefixes.length; m < len3; m++) { + prefix = prefixes[m]; + old = value.old(prefix); + if (old) { + for (n = 0, len4 = props.length; n < len4; n++) { + prop = props[n]; + if (!remove[prop]) { + remove[prop] = {}; + } + if (!remove[prop].values) { + remove[prop].values = []; + } + remove[prop].values.push(old); + } + } + } + } + if (!this.data[name].props) { + for (o = 0, len5 = prefixes.length; o < len5; o++) { + prefix = prefixes[o]; + prop = vendor.unprefixed(name); + olds = this.decl(name).old(name, prefix); + for (p = 0, len6 = olds.length; p < len6; p++) { + prefixed = olds[p]; + if (!remove[prefixed]) { + remove[prefixed] = {}; + } + remove[prefixed].remove = true; + } + } + } + } + } + return [add, remove]; + }; + + Prefixes.prototype.decl = function(prop) { + var decl; + decl = declsCache[prop]; + if (decl) { + return decl; + } else { + return declsCache[prop] = Declaration.load(prop); + } + }; + + Prefixes.prototype.unprefixed = function(prop) { + prop = vendor.unprefixed(prop); + return this.decl(prop).normalize(prop); + }; + + Prefixes.prototype.prefixed = function(prop, prefix) { + prop = vendor.unprefixed(prop); + return this.decl(prop).prefixed(prop, prefix); + }; + + Prefixes.prototype.values = function(type, prop) { + var data, global, ref, ref1, values; + data = this[type]; + global = (ref = data['*']) != null ? ref.values : void 0; + values = (ref1 = data[prop]) != null ? ref1.values : void 0; + if (global && values) { + return utils.uniq(global.concat(values)); + } else { + return global || values || []; + } + }; + + Prefixes.prototype.group = function(decl) { + var checker, index, length, rule, unprefixed; + rule = decl.parent; + index = rule.index(decl); + length = rule.nodes.length; + unprefixed = this.unprefixed(decl.prop); + checker = (function(_this) { + return function(step, callback) { + var other; + index += step; + while (index >= 0 && index < length) { + other = rule.nodes[index]; + if (other.type === 'decl') { + if (step === -1 && other.prop === unprefixed) { + if (!Browsers.withPrefix(other.value)) { + break; + } + } + if (_this.unprefixed(other.prop) !== unprefixed) { + break; + } else if (callback(other) === true) { + return true; + } + if (step === +1 && other.prop === unprefixed) { + if (!Browsers.withPrefix(other.value)) { + break; + } + } + } + index += step; + } + return false; + }; + })(this); + return { + up: function(callback) { + return checker(-1, callback); + }, + down: function(callback) { + return checker(+1, callback); + } + }; + }; + + return Prefixes; + + })(); + + module.exports = Prefixes; + +}).call(this); + +},{"./at-rule":3,"./browsers":4,"./declaration":5,"./hacks/align-content":6,"./hacks/align-items":7,"./hacks/align-self":8,"./hacks/background-size":9,"./hacks/block-logical":10,"./hacks/border-image":11,"./hacks/border-radius":12,"./hacks/break-inside":13,"./hacks/crisp-edges":14,"./hacks/display-flex":15,"./hacks/fill-available":16,"./hacks/filter":18,"./hacks/filter-value":17,"./hacks/flex":27,"./hacks/flex-basis":19,"./hacks/flex-direction":20,"./hacks/flex-flow":21,"./hacks/flex-grow":22,"./hacks/flex-shrink":23,"./hacks/flex-values":25,"./hacks/flex-wrap":26,"./hacks/fullscreen":28,"./hacks/gradient":29,"./hacks/image-rendering":30,"./hacks/inline-logical":31,"./hacks/justify-content":32,"./hacks/order":33,"./hacks/placeholder":34,"./hacks/transform-decl":35,"./hacks/transform-value":36,"./processor":42,"./resolution":43,"./selector":44,"./supports":45,"./utils":46,"./value":47,"postcss/lib/vendor":113}],42:[function(require,module,exports){ +(function() { + var Processor, Value, utils, vendor; + + vendor = require('postcss/lib/vendor'); + + Value = require('./value'); + + utils = require('./utils'); + + Processor = (function() { + function Processor(prefixes) { + this.prefixes = prefixes; + } + + Processor.prototype.add = function(css) { + var keyframes, resolution, supports, viewport; + resolution = this.prefixes.add['@resolution']; + keyframes = this.prefixes.add['@keyframes']; + viewport = this.prefixes.add['@viewport']; + supports = this.prefixes.add['@supports']; + css.eachAtRule((function(_this) { + return function(rule) { + if (rule.name === 'keyframes') { + if (!_this.disabled(rule)) { + return keyframes != null ? keyframes.process(rule) : void 0; + } + } else if (rule.name === 'viewport') { + if (!_this.disabled(rule)) { + return viewport != null ? viewport.process(rule) : void 0; + } + } else if (rule.name === 'supports') { + if (!_this.disabled(rule)) { + return supports.process(rule); + } + } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) { + if (!_this.disabled(rule)) { + return resolution != null ? resolution.process(rule) : void 0; + } + } + }; + })(this)); + css.eachRule((function(_this) { + return function(rule) { + var j, len, ref, results, selector; + if (_this.disabled(rule)) { + return; + } + ref = _this.prefixes.add.selectors; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + selector = ref[j]; + results.push(selector.process(rule)); + } + return results; + }; + })(this)); + css.eachDecl((function(_this) { + return function(decl) { + var prefix; + prefix = _this.prefixes.add[decl.prop]; + if (prefix && prefix.prefixes) { + if (!_this.disabled(decl)) { + return prefix.process(decl); + } + } + }; + })(this)); + return css.eachDecl((function(_this) { + return function(decl) { + var j, len, ref, unprefixed, value; + if (_this.disabled(decl)) { + return; + } + unprefixed = _this.prefixes.unprefixed(decl.prop); + ref = _this.prefixes.values('add', unprefixed); + for (j = 0, len = ref.length; j < len; j++) { + value = ref[j]; + value.process(decl); + } + return Value.save(_this.prefixes, decl); + }; + })(this)); + }; + + Processor.prototype.remove = function(css) { + var checker, j, len, ref, resolution; + resolution = this.prefixes.remove['@resolution']; + css.eachAtRule((function(_this) { + return function(rule, i) { + if (_this.prefixes.remove['@' + rule.name]) { + if (!_this.disabled(rule)) { + return rule.parent.remove(i); + } + } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) { + return resolution != null ? resolution.clean(rule) : void 0; + } + }; + })(this)); + ref = this.prefixes.remove.selectors; + for (j = 0, len = ref.length; j < len; j++) { + checker = ref[j]; + css.eachRule((function(_this) { + return function(rule, i) { + if (checker.check(rule)) { + if (!_this.disabled(rule)) { + return rule.parent.remove(i); + } + } + }; + })(this)); + } + return css.eachDecl((function(_this) { + return function(decl, i) { + var k, len1, notHack, ref1, ref2, rule, unprefixed; + if (_this.disabled(decl)) { + return; + } + rule = decl.parent; + unprefixed = _this.prefixes.unprefixed(decl.prop); + if ((ref1 = _this.prefixes.remove[decl.prop]) != null ? ref1.remove : void 0) { + notHack = _this.prefixes.group(decl).down(function(other) { + return other.prop === unprefixed; + }); + if (notHack && !_this.withHackValue(decl)) { + if (decl.style('before').indexOf("\n") > -1) { + _this.reduceSpaces(decl); + } + rule.remove(i); + return; + } + } + ref2 = _this.prefixes.values('remove', unprefixed); + for (k = 0, len1 = ref2.length; k < len1; k++) { + checker = ref2[k]; + if (checker.check(decl.value)) { + unprefixed = checker.unprefixed; + notHack = _this.prefixes.group(decl).down(function(other) { + return other.value.indexOf(unprefixed) !== -1; + }); + if (notHack) { + rule.remove(i); + return; + } else if (checker.clean) { + checker.clean(decl); + return; + } + } + } + }; + })(this)); + }; + + Processor.prototype.withHackValue = function(decl) { + return decl.prop === '-webkit-background-clip' && decl.value === 'text'; + }; + + Processor.prototype.disabled = function(node) { + var status; + if (node._autoprefixerDisabled != null) { + return node._autoprefixerDisabled; + } else if (node.nodes) { + status = void 0; + node.each(function(i) { + if (i.type !== 'comment') { + return; + } + if (i.text === 'autoprefixer: off') { + status = false; + return false; + } else if (i.text === 'autoprefixer: on') { + status = true; + return false; + } + }); + return node._autoprefixerDisabled = status != null ? !status : node.parent ? this.disabled(node.parent) : false; + } else { + return node._autoprefixerDisabled = this.disabled(node.parent); + } + }; + + Processor.prototype.reduceSpaces = function(decl) { + var diff, parts, prevMin, stop; + stop = false; + this.prefixes.group(decl).up(function(other) { + return stop = true; + }); + if (stop) { + return; + } + parts = decl.style('before').split("\n"); + prevMin = parts[parts.length - 1].length; + diff = false; + return this.prefixes.group(decl).down(function(other) { + var last; + parts = other.style('before').split("\n"); + last = parts.length - 1; + if (parts[last].length > prevMin) { + if (diff === false) { + diff = parts[last].length - prevMin; + } + parts[last] = parts[last].slice(0, -diff); + return other.before = parts.join("\n"); + } + }); + }; + + return Processor; + + })(); + + module.exports = Processor; + +}).call(this); + +},{"./utils":46,"./value":47,"postcss/lib/vendor":113}],43:[function(require,module,exports){ +(function() { + var Prefixer, Resolution, n2f, regexp, split, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + utils = require('./utils'); + + n2f = require('num2fraction'); + + regexp = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpi)/gi; + + split = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpi)/i; + + Resolution = (function(superClass) { + extend(Resolution, superClass); + + function Resolution() { + return Resolution.__super__.constructor.apply(this, arguments); + } + + Resolution.prototype.prefixName = function(prefix, name) { + return name = prefix === '-moz-' ? name + '--moz-device-pixel-ratio' : prefix + name + '-device-pixel-ratio'; + }; + + Resolution.prototype.prefixQuery = function(prefix, name, colon, value, units) { + if (units === 'dpi') { + value = Number(value / 96); + } + if (prefix === '-o-') { + value = n2f(value); + } + return this.prefixName(prefix, name) + colon + value; + }; + + Resolution.prototype.clean = function(rule) { + var j, len, prefix, ref; + if (!this.bad) { + this.bad = []; + ref = this.prefixes; + for (j = 0, len = ref.length; j < len; j++) { + prefix = ref[j]; + this.bad.push(this.prefixName(prefix, 'min')); + this.bad.push(this.prefixName(prefix, 'max')); + } + } + return rule.params = utils.editList(rule.params, (function(_this) { + return function(queries) { + return queries.filter(function(query) { + return _this.bad.every(function(i) { + return query.indexOf(i) === -1; + }); + }); + }; + })(this)); + }; + + Resolution.prototype.process = function(rule) { + var parent, prefixes; + parent = this.parentPrefix(rule); + prefixes = parent ? [parent] : this.prefixes; + return rule.params = utils.editList(rule.params, (function(_this) { + return function(origin, prefixed) { + var j, k, len, len1, prefix, processed, query; + for (j = 0, len = origin.length; j < len; j++) { + query = origin[j]; + if (query.indexOf('min-resolution') === -1 && query.indexOf('max-resolution') === -1) { + prefixed.push(query); + continue; + } + for (k = 0, len1 = prefixes.length; k < len1; k++) { + prefix = prefixes[k]; + if (prefix === '-moz-' && rule.params.indexOf('dpi') !== -1) { + continue; + } else { + processed = query.replace(regexp, function(str) { + var parts; + parts = str.match(split); + return _this.prefixQuery(prefix, parts[1], parts[2], parts[3], parts[4]); + }); + prefixed.push(processed); + } + } + prefixed.push(query); + } + return utils.uniq(prefixed); + }; + })(this)); + }; + + return Resolution; + + })(Prefixer); + + module.exports = Resolution; + +}).call(this); + +},{"./prefixer":40,"./utils":46,"num2fraction":95}],44:[function(require,module,exports){ +(function() { + var Browsers, OldSelector, Prefixer, Selector, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldSelector = require('./old-selector'); + + Prefixer = require('./prefixer'); + + Browsers = require('./browsers'); + + utils = require('./utils'); + + Selector = (function(superClass) { + extend(Selector, superClass); + + function Selector(name1, prefixes, all) { + this.name = name1; + this.prefixes = prefixes; + this.all = all; + this.regexpCache = {}; + } + + Selector.prototype.check = function(rule) { + if (rule.selector.indexOf(this.name) !== -1) { + return !!rule.selector.match(this.regexp()); + } else { + return false; + } + }; + + Selector.prototype.prefixed = function(prefix) { + return this.name.replace(/^([^\w]*)/, '$1' + prefix); + }; + + Selector.prototype.regexp = function(prefix) { + var name; + if (this.regexpCache[prefix]) { + return this.regexpCache[prefix]; + } + name = prefix ? this.prefixed(prefix) : this.name; + return this.regexpCache[prefix] = RegExp("(^|[^:\"'=])" + (utils.escapeRegexp(name)), "gi"); + }; + + Selector.prototype.possible = function() { + return Browsers.prefixes(); + }; + + Selector.prototype.prefixeds = function(rule) { + var i, len, prefix, prefixeds, ref; + if (rule._autoprefixerPrefixeds) { + return rule._autoprefixerPrefixeds; + } + prefixeds = {}; + ref = this.possible(); + for (i = 0, len = ref.length; i < len; i++) { + prefix = ref[i]; + prefixeds[prefix] = this.replace(rule.selector, prefix); + } + return rule._autoprefixerPrefixeds = prefixeds; + }; + + Selector.prototype.already = function(rule, prefixeds, prefix) { + var before, index, key, prefixed, some; + index = rule.parent.index(rule) - 1; + while (index >= 0) { + before = rule.parent.nodes[index]; + if (before.type !== 'rule') { + return false; + } + some = false; + for (key in prefixeds) { + prefixed = prefixeds[key]; + if (before.selector === prefixed) { + if (prefix === key) { + return true; + } else { + some = true; + break; + } + } + } + if (!some) { + return false; + } + index -= 1; + } + return false; + }; + + Selector.prototype.replace = function(selector, prefix) { + return selector.replace(this.regexp(), '$1' + this.prefixed(prefix)); + }; + + Selector.prototype.add = function(rule, prefix) { + var cloned, prefixeds; + prefixeds = this.prefixeds(rule); + if (this.already(rule, prefixeds, prefix)) { + return; + } + cloned = this.clone(rule, { + selector: prefixeds[prefix] + }); + return rule.parent.insertBefore(rule, cloned); + }; + + Selector.prototype.old = function(prefix) { + return new OldSelector(this, prefix); + }; + + return Selector; + + })(Prefixer); + + module.exports = Selector; + +}).call(this); + +},{"./browsers":4,"./old-selector":38,"./prefixer":40,"./utils":46}],45:[function(require,module,exports){ +(function() { + var Prefixes, Supports, Value, findCondition, findDecl, list, postcss, split, utils; + + Prefixes = require('./prefixes'); + + Value = require('./value'); + + utils = require('./utils'); + + postcss = require('postcss'); + + list = require('postcss/lib/list'); + + split = /\(\s*([^\(\):]+)\s*:([^\)]+)/; + + findDecl = /\(\s*([^\(\):]+)\s*:\s*(.+)\s*\)/g; + + findCondition = /(not\s*)?\(\s*([^\(\):]+)\s*:\s*(.+?(?!\s*or\s*).+?)\s*\)*\s*\)\s*or\s*/gi; + + Supports = (function() { + function Supports(all1) { + this.all = all1; + } + + Supports.prototype.virtual = function(prop, value) { + var rule; + rule = postcss.parse('a{}').first; + rule.append({ + prop: prop, + value: value, + before: '' + }); + return rule; + }; + + Supports.prototype.prefixed = function(prop, value) { + var decl, j, k, len, len1, prefixer, ref, ref1, rule; + rule = this.virtual(prop, value); + prefixer = this.all.add[prop]; + if (prefixer != null) { + if (typeof prefixer.process === "function") { + prefixer.process(rule.first); + } + } + ref = rule.nodes; + for (j = 0, len = ref.length; j < len; j++) { + decl = ref[j]; + ref1 = this.all.values('add', prop); + for (k = 0, len1 = ref1.length; k < len1; k++) { + value = ref1[k]; + value.process(decl); + } + Value.save(this.all, decl); + } + return rule.nodes; + }; + + Supports.prototype.clean = function(params) { + return params.replace(findCondition, (function(_this) { + return function(all) { + var _, check, checker, j, len, prop, ref, ref1, ref2, unprefixed, value; + if (all.slice(0, 3).toLowerCase() === 'not') { + return all; + } + ref = all.match(split), _ = ref[0], prop = ref[1], value = ref[2]; + unprefixed = _this.all.unprefixed(prop); + if ((ref1 = _this.all.cleaner().remove[prop]) != null ? ref1.remove : void 0) { + check = new RegExp('(\\(|\\s)' + utils.escapeRegexp(unprefixed) + ':'); + if (check.test(params)) { + return ''; + } + } + ref2 = _this.all.cleaner().values('remove', unprefixed); + for (j = 0, len = ref2.length; j < len; j++) { + checker = ref2[j]; + if (checker.check(value)) { + return ''; + } + } + return all; + }; + })(this)).replace(/\(\s*\((.*)\)\s*\)/g, '($1)'); + }; + + Supports.prototype.process = function(rule) { + rule.params = this.clean(rule.params); + return rule.params = rule.params.replace(findDecl, (function(_this) { + return function(all, prop, value) { + var i, stringed; + stringed = (function() { + var j, len, ref, results; + ref = this.prefixed(prop, value); + results = []; + for (j = 0, len = ref.length; j < len; j++) { + i = ref[j]; + results.push("(" + i.prop + ": " + i.value + ")"); + } + return results; + }).call(_this); + if (stringed.length === 1) { + return stringed[0]; + } else { + return '(' + stringed.join(' or ') + ')'; + } + }; + })(this)); + }; + + return Supports; + + })(); + + module.exports = Supports; + +}).call(this); + +},{"./prefixes":41,"./utils":46,"./value":47,"postcss":107,"postcss/lib/list":102}],46:[function(require,module,exports){ +(function() { + var list; + + list = require('postcss/lib/list'); + + module.exports = { + error: function(text) { + var err; + err = new Error(text); + err.autoprefixer = true; + throw err; + }, + uniq: function(array) { + var filtered, i, j, len; + filtered = []; + for (j = 0, len = array.length; j < len; j++) { + i = array[j]; + if (filtered.indexOf(i) === -1) { + filtered.push(i); + } + } + return filtered; + }, + removeNote: function(string) { + if (string.indexOf(' ') === -1) { + return string; + } else { + return string.split(' ')[0]; + } + }, + escapeRegexp: function(string) { + return string.replace(/[.?*+\^\$\[\]\\(){}|\-]/g, '\\$&'); + }, + regexp: function(word, escape) { + if (escape == null) { + escape = true; + } + if (escape) { + word = this.escapeRegexp(word); + } + return RegExp("(^|[\\s,(])(" + word + "($|[\\s(,]))", "gi"); + }, + editList: function(value, callback) { + var changed, join, origin; + origin = list.comma(value); + changed = callback(origin, []); + if (origin === changed) { + return value; + } else { + join = value.match(/,\s*/); + join = join ? join[0] : ', '; + return changed.join(join); + } + } + }; + +}).call(this); + +},{"postcss/lib/list":102}],47:[function(require,module,exports){ +(function() { + var OldValue, Prefixer, Value, utils, vendor, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + OldValue = require('./old-value'); + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + Value = (function(superClass) { + extend(Value, superClass); + + function Value() { + return Value.__super__.constructor.apply(this, arguments); + } + + Value.save = function(prefixes, decl) { + var already, cloned, prefix, prefixed, propPrefix, ref, results, rule, trimmed, value; + ref = decl._autoprefixerValues; + results = []; + for (prefix in ref) { + value = ref[prefix]; + if (value === decl.value) { + continue; + } + propPrefix = vendor.prefix(decl.prop); + if (propPrefix === prefix) { + results.push(decl.value = value); + } else if (propPrefix === '-pie-') { + continue; + } else { + prefixed = prefixes.prefixed(decl.prop, prefix); + rule = decl.parent; + if (rule.every(function(i) { + return i.prop !== prefixed; + })) { + trimmed = value.replace(/\s+/, ' '); + already = rule.some(function(i) { + return i.prop === decl.prop && i.value.replace(/\s+/, ' ') === trimmed; + }); + if (!already) { + if (value.indexOf('-webkit-filter') !== -1 && (decl.prop === 'transition' || decl.prop === 'trasition-property')) { + results.push(decl.value = value); + } else { + cloned = this.clone(decl, { + value: value + }); + results.push(decl.parent.insertBefore(decl, cloned)); + } + } else { + results.push(void 0); + } + } else { + results.push(void 0); + } + } + } + return results; + }; + + Value.prototype.check = function(decl) { + var value; + value = decl.value; + if (value.indexOf(this.name) !== -1) { + return !!value.match(this.regexp()); + } else { + return false; + } + }; + + Value.prototype.regexp = function() { + return this.regexpCache || (this.regexpCache = utils.regexp(this.name)); + }; + + Value.prototype.replace = function(string, prefix) { + return string.replace(this.regexp(), '$1' + prefix + '$2'); + }; + + Value.prototype.add = function(decl, prefix) { + var ref, value; + decl._autoprefixerValues || (decl._autoprefixerValues = {}); + value = decl._autoprefixerValues[prefix] || ((ref = decl._value) != null ? ref.raw : void 0) || decl.value; + value = this.replace(value, prefix); + if (value) { + return decl._autoprefixerValues[prefix] = value; + } + }; + + Value.prototype.old = function(prefix) { + return new OldValue(this.name, prefix + this.name); + }; + + return Value; + + })(Prefixer); + + module.exports = Value; + +}).call(this); + +},{"./old-value":39,"./prefixer":40,"./utils":46,"postcss/lib/vendor":113}],48:[function(require,module,exports){ + +},{}],49:[function(require,module,exports){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var isArray = require('is-array') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 // not used by this implementation + +var kMaxLength = 0x3fffffff +var rootParent = {} + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Note: + * + * - Implementation must support adding new properties to `Uint8Array` instances. + * Firefox 4-29 lacked support, fixed in Firefox 30+. + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + * + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will + * get the Object implementation, which is slower but will work correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = (function () { + try { + var buf = new ArrayBuffer(0) + var arr = new Uint8Array(buf) + arr.foo = function () { return 42 } + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +})() + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (subject, encoding) { + var self = this + if (!(self instanceof Buffer)) return new Buffer(subject, encoding) + + var type = typeof subject + var length + + if (type === 'number') { + length = +subject + } else if (type === 'string') { + length = Buffer.byteLength(subject, encoding) + } else if (type === 'object' && subject !== null) { + // assume object is array-like + if (subject.type === 'Buffer' && isArray(subject.data)) subject = subject.data + length = +subject.length + } else { + throw new TypeError('must start with number, buffer, array or string') + } + + if (length > kMaxLength) { + throw new RangeError('Attempt to allocate Buffer larger than maximum size: 0x' + + kMaxLength.toString(16) + ' bytes') + } + + if (length < 0) length = 0 + else length >>>= 0 // coerce to uint32 + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Preferred: Return an augmented `Uint8Array` instance for best performance + self = Buffer._augment(new Uint8Array(length)) // eslint-disable-line consistent-this + } else { + // Fallback: Return THIS instance of Buffer (created by `new`) + self.length = length + self._isBuffer = true + } + + var i + if (Buffer.TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') { + // Speed optimization -- use set if we're copying from a typed array + self._set(subject) + } else if (isArrayish(subject)) { + // Treat array-ish objects as a byte array + if (Buffer.isBuffer(subject)) { + for (i = 0; i < length; i++) { + self[i] = subject.readUInt8(i) + } + } else { + for (i = 0; i < length; i++) { + self[i] = ((subject[i] % 256) + 256) % 256 + } + } + } else if (type === 'string') { + self.write(subject, 0, encoding) + } else if (type === 'number' && !Buffer.TYPED_ARRAY_SUPPORT) { + for (i = 0; i < length; i++) { + self[i] = 0 + } + } + + if (length > 0 && length <= Buffer.poolSize) self.parent = rootParent + + return self +} + +function SlowBuffer (subject, encoding) { + if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) + + var buf = new Buffer(subject, encoding) + delete buf.parent + return buf +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {} + if (i !== len) { + x = a[i] + y = b[i] + } + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, totalLength) { + if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') + + if (list.length === 0) { + return new Buffer(0) + } else if (list.length === 1) { + return list[0] + } + + var i + if (totalLength === undefined) { + totalLength = 0 + for (i = 0; i < list.length; i++) { + totalLength += list[i].length + } + } + + var buf = new Buffer(totalLength) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf +} + +Buffer.byteLength = function byteLength (str, encoding) { + var ret + str = str + '' + switch (encoding || 'utf8') { + case 'ascii': + case 'binary': + case 'raw': + ret = str.length + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = str.length * 2 + break + case 'hex': + ret = str.length >>> 1 + break + case 'utf8': + case 'utf-8': + ret = utf8ToBytes(str).length + break + case 'base64': + ret = base64ToBytes(str).length + break + default: + ret = str.length + } + return ret +} + +// pre-set for values that may exist in the future +Buffer.prototype.length = undefined +Buffer.prototype.parent = undefined + +// toString(encoding, start=0, end=buffer.length) +Buffer.prototype.toString = function toString (encoding, start, end) { + var loweredCase = false + + start = start >>> 0 + end = end === undefined || end === Infinity ? this.length : end >>> 0 + + if (!encoding) encoding = 'utf8' + if (start < 0) start = 0 + if (end > this.length) end = this.length + if (end <= start) return '' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'binary': + return binarySlice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return 0 + return Buffer.compare(this, b) +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset) { + if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff + else if (byteOffset < -0x80000000) byteOffset = -0x80000000 + byteOffset >>= 0 + + if (this.length === 0) return -1 + if (byteOffset >= this.length) return -1 + + // Negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) + + if (typeof val === 'string') { + if (val.length === 0) return -1 // special case: looking for empty string always fails + return String.prototype.indexOf.call(this, val, byteOffset) + } + if (Buffer.isBuffer(val)) { + return arrayIndexOf(this, val, byteOffset) + } + if (typeof val === 'number') { + if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { + return Uint8Array.prototype.indexOf.call(this, val, byteOffset) + } + return arrayIndexOf(this, [ val ], byteOffset) + } + + function arrayIndexOf (arr, val, byteOffset) { + var foundIndex = -1 + for (var i = 0; byteOffset + i < arr.length; i++) { + if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex + } else { + foundIndex = -1 + } + } + return -1 + } + + throw new TypeError('val must be string, number or Buffer') +} + +// `get` will be removed in Node 0.13+ +Buffer.prototype.get = function get (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} + +// `set` will be removed in Node 0.13+ +Buffer.prototype.set = function set (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new Error('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) throw new Error('Invalid hex string') + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + var charsWritten = blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +function asciiWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) + return charsWritten +} + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) + return charsWritten +} + +function utf16leWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length + length = undefined + } + } else { // legacy + var swap = encoding + encoding = offset + offset = length + length = swap + } + + offset = Number(offset) || 0 + + if (length < 0 || offset < 0 || offset > this.length) { + throw new RangeError('attempt to write outside buffer bounds') + } + + var remaining = this.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + encoding = String(encoding || 'utf8').toLowerCase() + + var ret + switch (encoding) { + case 'hex': + ret = hexWrite(this, string, offset, length) + break + case 'utf8': + case 'utf-8': + ret = utf8Write(this, string, offset, length) + break + case 'ascii': + ret = asciiWrite(this, string, offset, length) + break + case 'binary': + ret = binaryWrite(this, string, offset, length) + break + case 'base64': + ret = base64Write(this, string, offset, length) + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = utf16leWrite(this, string, offset, length) + break + default: + throw new TypeError('Unknown encoding: ' + encoding) + } + return ret +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + var res = '' + var tmp = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + if (buf[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) + tmp = '' + } else { + tmp += '%' + buf[i].toString(16) + } + } + + return res + decodeUtf8Char(tmp) +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function binarySlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } + } + + if (newBuf.length) newBuf.parent = this.parent || this + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = value + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = value + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = value + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, target_start, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (target_start >= target.length) target_start = target.length + if (!target_start) target_start = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (target_start < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - target_start < end - start) { + end = target.length - target_start + start + } + + var len = end - start + + if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < len; i++) { + target[i + target_start] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), target_start) + } + + return len +} + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length + + if (end < start) throw new RangeError('end < start') + + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return + + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') + + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } + + return this +} + +/** + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. + */ +Buffer.prototype.toArrayBuffer = function toArrayBuffer () { + if (typeof Uint8Array !== 'undefined') { + if (Buffer.TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new TypeError('Buffer.toArrayBuffer not supported in this browser') + } +} + +// HELPER FUNCTIONS +// ================ + +var BP = Buffer.prototype + +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function _augment (arr) { + arr.constructor = Buffer + arr._isBuffer = true + + // save reference to original Uint8Array set method before overwriting + arr._set = arr.set + + // deprecated, will be removed in node 0.13+ + arr.get = BP.get + arr.set = BP.set + + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.indexOf = BP.indexOf + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer + + return arr +} + +var INVALID_BASE64_RE = /[^+\/0-9A-z\-]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function isArrayish (subject) { + return isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number' +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + var i = 0 + + for (; i < length; i++) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (leadSurrogate) { + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } else { + // valid surrogate pair + codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 + leadSurrogate = null + } + } else { + // no lead yet + + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else { + // valid lead + leadSurrogate = codePoint + continue + } + } + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = null + } + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x200000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +function decodeUtf8Char (str) { + try { + return decodeURIComponent(str) + } catch (err) { + return String.fromCharCode(0xFFFD) // UTF 8 invalid char + } +} + +},{"base64-js":50,"ieee754":51,"is-array":52}],50:[function(require,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],51:[function(require,module,exports){ +exports.read = function(buffer, offset, isLE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isLE ? (nBytes - 1) : 0, + d = isLE ? -1 : 1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isLE ? 0 : (nBytes - 1), + d = isLE ? 1 : -1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],52:[function(require,module,exports){ + +/** + * isArray + */ + +var isArray = Array.isArray; + +/** + * toString + */ + +var str = Object.prototype.toString; + +/** + * Whether or not the given `val` + * is an array. + * + * example: + * + * isArray([]); + * // > true + * isArray(arguments); + * // > false + * isArray(''); + * // > false + * + * @param {mixed} val + * @return {bool} + */ + +module.exports = isArray || function (val) { + return !! val && '[object Array]' == str.call(val); +}; + +},{}],53:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":54}],54:[function(require,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; +var queue = []; +var draining = false; + +function drainQueue() { + if (draining) { + return; + } + draining = true; + var currentQueue; + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + var i = -1; + while (++i < len) { + currentQueue[i](); + } + len = queue.length; + } + draining = false; +} +process.nextTick = function (fun) { + queue.push(fun); + if (!draining) { + setTimeout(drainQueue, 0); + } +}; + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],55:[function(require,module,exports){ +var caniuse = require('caniuse-db/data').agents; +var path = require('path'); +var fs = require('fs'); + +var uniq = function (array) { + var filtered = []; + for ( var i = 0; i < array.length; i++ ) { + if ( filtered.indexOf(array[i]) == -1 ) filtered.push(array[i]); + } + return filtered; +}; + +normalizeVersion = function (data, version) { + if ( data.versions.indexOf(version) != -1 ) { + return version; + } else { + var alias = browserslist.versionAliases[data.name][version]; + if ( alias ) return alias; + } +}; + +// Return array of browsers by selection queries: +// +// browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8'] +var browserslist = function (selections, opts) { + if ( typeof(opts) == 'undefined' ) opts = { }; + + if ( typeof(selections) == 'undefined' || selections === null ) { + var config = browserslist.readConfig(opts.path); + if ( config === false ) { + selections = browserslist.defaults; + } else { + selections = config; + } + } + + if ( typeof(selections) == 'string' ) { + selections = selections.split(/,\s*/); + } + + var result = []; + + var query, match, array, used; + selections.forEach(function (selection) { + if ( selection.trim() === '' ) return; + used = false; + + for ( var i in browserslist.queries ) { + query = browserslist.queries[i]; + match = selection.match(query.regexp); + if ( match ) { + array = query.select.apply(browserslist, match.slice(1)); + result = result.concat(array); + used = true; + break; + } + } + + if ( !used ) { + throw 'Unknown browser query `' + selection + '`'; + } + }); + + return uniq(result).sort(function (name1, name2) { + name1 = name1.split(' '); + name2 = name2.split(' '); + if ( name1[0] == name2[0] ) { + return parseFloat(name2[1]) - parseFloat(name1[1]); + } else { + return name1[0].localeCompare(name2[0]); + } + }); +}; + +// Will be filled by Can I Use data below +browserslist.data = { }; +browserslist.usage = { + global: { } +}; + +// Default browsers query +browserslist.defaults = [ + '> 1%', + 'last 2 versions', + 'Firefox ESR', + 'Opera 12.1' +]; + +// What browsers will be used in `last n version` query +browserslist.major = ['safari', 'opera', 'ios_saf', 'ie_mob', 'ie', + 'firefox', 'chrome']; + +// Browser names aliases +browserslist.aliases = { + fx: 'firefox', + ff: 'firefox', + ios: 'ios_saf', + explorer: 'ie', + blackberry: 'bb', + explorermobile: 'ie_mob', + operamini: 'op_mini', + operamobile: 'op_mob', + chromeandroid: 'and_chr', + firefoxandroid: 'and_ff' +}; + +// Aliases ot work with joined versions like `ios_saf 7.0-7.1` +browserslist.versionAliases = { }; + +// Get browser data by alias or case insensitive name +browserslist.byName = function (name) { + name = name.toLowerCase(); + name = browserslist.aliases[name] || name; + + var data = browserslist.data[name]; + if ( !data ) throw 'Unknown browser ' + name; + return data; +}; + +// Find config, read file and parse it +browserslist.readConfig = function (from) { + if ( from === false ) return false; + if ( !fs.readFileSync ) return false; + if ( typeof(from) == 'undefined' ) from = '.'; + + var dirs = path.resolve(from).split(path.sep); + var config, stat; + while ( dirs.length ) { + config = dirs.concat(['browserslist']).join(path.sep); + + if ( fs.existsSync(config) && fs.lstatSync(config).isFile() ) { + return browserslist.parseConfig( fs.readFileSync(config) ); + } + + dirs.pop(); + } + + return false; +}; + +// Return array of queries from config content +browserslist.parseConfig = function (string) { + return string.toString() + .replace(/#[^\n]*/g, '') + .split(/\n/) + .map(function (i) { + return i.trim(); + }) + .filter(function (i) { + return i !== ''; + }); +}; + +browserslist.queries = { + + lastVersions: { + regexp: /^last (\d+) versions?$/i, + select: function (versions) { + var selected = []; + browserslist.major.forEach(function (name) { + var data = browserslist.byName(name); + var array = data.released.slice(-versions); + + array = array.map(function (v) { + return data.name + ' ' + v; + }); + selected = selected.concat(array); + }); + return selected; + } + }, + + lastByBrowser: { + regexp: /^last (\d+) (\w+) versions?$/i, + select: function (versions, name) { + var data = browserslist.byName(name); + return data.released.slice(-versions).map(function (v) { + return data.name + ' ' + v; + }); + } + }, + + globalStatistics: { + regexp: /^> (\d+\.?\d*)%$/, + select: function (popularity) { + popularity = parseFloat(popularity); + var result = []; + + for ( var version in browserslist.usage.global ) { + if ( browserslist.usage.global[version] > popularity ) { + result.push(version); + } + } + + return result; + } + }, + + countryStatistics: { + regexp: /^> (\d+\.?\d*)% in (\w\w)$/, + select: function (popularity, country) { + popularity = parseFloat(popularity); + country = country.toUpperCase(); + var result = []; + + var usage = browserslist.usage[country]; + if ( !usage ) { + usage = { }; + var data = require('caniuse-db/region-usage-json/' + country); + for ( var i in data.data ) { + fillUsage(usage, i, data.data[i]); + } + browserslist.usage[country] = usage; + } + + for ( var version in usage ) { + if ( usage[version] > popularity ) { + result.push(version); + } + } + + return result; + } + }, + + versions: { + regexp: /^(\w+) (>=?|<=?)\s*([\d\.]+)/, + select: function (name, sign, version) { + var data = browserslist.byName(name); + version = parseFloat(version); + + var filter; + if ( sign == '>' ) { + filter = function (v) { + return parseFloat(v) > version; + }; + } else if ( sign == '>=' ) { + filter = function (v) { + return parseFloat(v) >= version; + }; + } else if ( sign == '<' ) { + filter = function (v) { + return parseFloat(v) < version; + }; + } else if ( sign == '<=' ) { + filter = function (v) { + return parseFloat(v) <= version; + }; + } + + return data.released.filter(filter).map(function (v) { + return data.name + ' ' + v; + }); + } + }, + + esr: { + regexp: /^(firefox|ff|fx) esr$/i, + select: function (versions) { + return ['firefox 31']; + } + }, + + direct: { + regexp: /^(\w+) ([\d\.]+)$/, + select: function (name, version) { + var data = browserslist.byName(name); + var alias = normalizeVersion(data, version); + if ( alias ) { + version = alias; + } else { + if ( version.indexOf('.') == -1 ) { + alias = version + '.0'; + } else if ( /\.0$/.test(version) ) { + alias = version.replace(/\.0$/, ''); + } + alias = normalizeVersion(data, alias); + if ( alias ) { + version = alias; + } else { + throw 'Unknown version ' + version + ' of ' + name; + } + } + + return [data.name + ' ' + version]; + } + } + +}; + +// Get and convert Can I Use data + +var normalize = function (versions) { + return versions.filter(function (version) { + return typeof(version) == 'string'; + }); +}; + +var fillUsage = function (result, name, data) { + for ( var i in data ) { + result[name + ' ' + i] = data[i]; + } +}; + +for ( var name in caniuse ) { + browserslist.data[name] = { + name: name, + versions: normalize(caniuse[name].versions), + released: normalize(caniuse[name].versions.slice(0, -3)) + }; + fillUsage(browserslist.usage.global, name, caniuse[name].usage_global); + + browserslist.versionAliases[name] = { }; + for ( var i = 0; i < caniuse[name].versions.length; i++ ) { + if ( !caniuse[name].versions[i] ) continue; + var full = caniuse[name].versions[i]; + + if ( full.indexOf('-') != -1 ) { + var interval = full.split('-'); + for ( var j = 0; j < interval.length; j++ ) { + browserslist.versionAliases[name][ interval[j] ] = full; + } + } + } +} + +module.exports = browserslist; + +},{"caniuse-db/data":56,"fs":48,"path":53}],56:[function(require,module,exports){ +module.exports={"eras":{"e-37":"37 versions back","e-36":"36 versions back","e-35":"35 versions back","e-34":"34 versions back","e-33":"33 versions back","e-32":"32 versions back","e-31":"31 versions back","e-30":"30 versions back","e-29":"29 versions back","e-28":"28 versions back","e-27":"27 versions back","e-26":"26 versions back","e-25":"25 versions back","e-24":"24 versions back","e-23":"23 versions back","e-22":"22 versions back","e-21":"21 versions back","e-20":"20 versions back","e-19":"19 versions back","e-18":"18 versions back","e-17":"17 versions back","e-16":"16 versions back","e-15":"15 versions back","e-14":"14 versions back","e-13":"13 versions back","e-12":"12 versions back","e-11":"11 versions back","e-10":"10 versions back","e-9":"9 versions back","e-8":"8 versions back","e-7":"7 versions back","e-6":"6 versions back","e-5":"5 versions back","e-4":"4 versions back","e-3":"3 versions back","e-2":"2 versions back","e-1":"Previous version","e0":"Current","e1":"Near future","e2":"Farther future","e3":"3 versions ahead"},"agents":{"ie":{"browser":"IE","abbr":"IE","prefix":"ms","type":"desktop","usage_global":{"5.5":0.009298,"6":0.0894521,"7":0.0894521,"8":2.33264,"9":1.63766,"10":1.29362,"11":7.98188,"TP":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.5","6","7","8","9","10","11","TP",null,null]},"firefox":{"browser":"Firefox","abbr":"FF","prefix":"moz","type":"desktop","usage_global":{"2":0.019968,"3":0.039936,"3.5":0.013312,"3.6":0.079872,"4":0.019968,"5":0.013312,"6":0.019968,"7":0.006656,"8":0.03328,"9":0.013312,"10":0.026624,"11":0.026624,"12":0.046592,"13":0.019968,"14":0.019968,"15":0.03328,"16":0.046592,"17":0.03328,"18":0.03328,"19":0.03328,"20":0.03328,"21":0.079872,"22":0.026624,"23":0.046592,"24":0.059904,"25":0.059904,"26":0.046592,"27":0.139776,"28":0.039936,"29":0.06656,"30":0.086528,"31":0.69888,"32":0.425984,"33":0.139776,"34":0.206336,"35":1.53088,"36":7.70099,"37":0.279552,"38":0.013312,"39":0.006656,"40":0},"versions":["2","3","3.5","3.6","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40"]},"chrome":{"browser":"Chrome","abbr":"Chr.","prefix":"webkit","type":"desktop","usage_global":{"4":0.013312,"5":0.013312,"6":0.013312,"7":0.006656,"8":0.006656,"9":0.006656,"10":0.026624,"11":0.073216,"12":0.026624,"13":0.019968,"14":0.013312,"15":0.019968,"16":0.013312,"17":0.013312,"18":0.026624,"19":0.019968,"20":0.013312,"21":0.073216,"22":0.079872,"23":0.026624,"24":0.073216,"25":0.026624,"26":0.046592,"27":0.059904,"28":0.053248,"29":0.06656,"30":0.119808,"31":0.772096,"32":0.06656,"33":0.19968,"34":0.212992,"35":0.43264,"36":0.851968,"37":1.03168,"38":0.539136,"39":1.21805,"40":10.4832,"41":17.3056,"42":0.146432,"43":0.126464,"44":0},"versions":["4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44"]},"safari":{"browser":"Safari","abbr":"Saf.","prefix":"webkit","type":"desktop","usage_global":{"3.1":0,"3.2":0.008692,"4":0.053248,"5":0.119808,"5.1":0.339456,"6":0.06656,"6.1":0.339456,"7":0.672256,"7.1":0.79872,"8":1.45101},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.1","3.2","4","5","5.1","6","6.1","7","7.1","8",null,null,null]},"opera":{"browser":"Opera","abbr":"Op.","prefix":"webkit","type":"desktop","usage_global":{"9":0.0082,"9.5-9.6":0.00685,"10.0-10.1":0.019968,"10.5":0.008392,"10.6":0.007296,"11":0.014996,"11.1":0.006656,"11.5":0.019968,"11.6":0.013312,"12":0.019968,"12.1":0.212992,"15":0.00685,"16":0.00685,"17":0.00685,"18":0.006656,"19":0.006597,"20":0.013312,"21":0.006597,"22":0.006597,"23":0.013434,"24":0.006702,"25":0.013312,"26":0.019968,"27":0.246272,"28":0.472576,"29":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9","9.5-9.6","10.0-10.1","10.5","10.6","11","11.1","11.5","11.6","12","12.1","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29",null],"prefix_exceptions":{"9":"o","9.5-9.6":"o","10.0-10.1":"o","10.5":"o","10.6":"o","11":"o","11.1":"o","11.5":"o","11.6":"o","12":"o","12.1":"o"}},"ios_saf":{"browser":"iOS Safari","abbr":"iOS","prefix":"webkit","type":"mobile","usage_global":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0312766,"6.0-6.1":0.0789023,"7.0-7.1":1.24751,"8":0.250213,"8.1-8.3":5.46132},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.2","4.0-4.1","4.2-4.3","5.0-5.1","6.0-6.1","7.0-7.1","8","8.1-8.3",null,null,null]},"op_mini":{"browser":"Opera Mini","abbr":"O.Mini","prefix":"o","type":"mobile","usage_global":{"5.0-8.0":2.79094},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.0-8.0",null,null,null]},"android":{"browser":"Android Browser","abbr":"And.","prefix":"webkit","type":"mobile","usage_global":{"2.1":0,"2.2":0,"2.3":0.106746,"3":0,"4":0.236609,"4.1":0.817933,"4.2-4.3":1.41761,"4.4":2.42932,"4.4.3-4.4.4":1.17149,"40":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2.1","2.2","2.3","3","4","4.1","4.2-4.3","4.4","4.4.3-4.4.4","40",null,null,null]},"op_mob":{"browser":"Opera Mobile","abbr":"O.Mob","prefix":"o","type":"mobile","usage_global":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000711976,"12.1":0.0028479,"24":0.0177994},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11","11.1","11.5","12","12.1","24",null,null,null],"prefix_exceptions":{"24":"webkit"}},"bb":{"browser":"Blackberry Browser","abbr":"BB","prefix":"webkit","type":"mobile","usage_global":{"7":0.082764,"10":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"7","10",null,null,null]},"and_chr":{"browser":"Chrome for Android","abbr":"Chr/And.","prefix":"webkit","type":"mobile","usage_global":{"41":10.9596},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"41",null,null,null]},"and_ff":{"browser":"Firefox for Android","abbr":"FF/And.","prefix":"moz","type":"mobile","usage_global":{"36":0.13376},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"36",null,null,null]},"ie_mob":{"browser":"IE Mobile","abbr":"IE.Mob","prefix":"ms","type":"mobile","usage_global":{"10":0.202602,"11":0.50967},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11",null,null,null]},"and_uc":{"browser":"UC Browser for Android","abbr":"UC","prefix":"webkit","type":"mobile","usage_global":{"9.9":4.25022},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9.9",null,null,null],"prefix_exceptions":{"9.9":"webkit"}}},"statuses":{"rec":"W3C Recommendation","pr":"W3C Proposed Recommendation","cr":"W3C Candidate Recommendation","wd":"W3C Working Draft","ls":"WHATWG Living Standard","other":"Other","unoff":"Unofficial / Note"},"cats":{"CSS":["CSS","CSS2","CSS3"],"HTML5":["Canvas","HTML5"],"JS API":["JS API"],"Other":["PNG","Other","DOM"],"SVG":["SVG"]},"updated":1429298471,"data":{"png-alpha":{"title":"PNG alpha transparency","description":"Semi-transparent areas in PNG files","spec":"http://www.w3.org/TR/PNG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Portable_Network_Graphics","title":"Wikipedia"},{"url":"http://dillerdesign.com/experiment/DD_belatedPNG/","title":"Workaround for IE6"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1-8.3":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","40":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs.","notes_by_num":{},"usage_perc_y":97.16,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"apng":{"title":"Animated PNG (APNG)","description":"Like animated GIFs, but allowing 24-bit colors and alpha transparency","spec":"https://wiki.mozilla.org/APNG_Specification","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/APNG","title":"Wikipedia"},{"url":"https://github.com/davidmz/apng-canvas","title":"Polyfill using canvas"},{"url":"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp","title":"Chrome extension providing support"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1-8.3":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","40":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Where support for APNG is missing, only the first frame is displayed","notes_by_num":{},"usage_perc_y":19.88,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"video":{"title":"Video element","description":"Method of playing videos on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://webmproject.org","title":"WebM format information"},{"url":"http://camendesign.co.uk/code/video_for_everybody","title":"Video for Everybody"},{"url":"http://diveintohtml5.info/video.html","title":"Video on the Web - includes info on Android support"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/video","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1-8.3":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","40":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Different browsers have support for different video formats, see sub-features for details. \r\n\r\nThe Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.","notes_by_num":{},"usage_perc_y":91.84,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"