From 311367372e07d95c03cd3c3b32f390bcdf8dc1e9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 15 Mar 2022 15:14:57 -0700 Subject: [PATCH 001/156] [admin] main -> prod (#611) * [Word] Map snippet for Word.Style enum (#607) * moves GAed samples out of preview section of PPT Co-authored-by: Rick Kirkham Co-authored-by: Rick Kirkham --- playlists-prod/powerpoint.yaml | 38 +++++++++--------- playlists/powerpoint.yaml | 36 ++++++++--------- .../add-slides.yaml | 4 +- .../{preview-apis => tags}/tags.yaml | 6 +-- .../content-control-ondeleted-event.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 14458 -> 14548 bytes snippet-extractor-output/snippets.yaml | 34 +++++++++++----- view-prod/powerpoint.json | 6 +-- view/powerpoint.json | 6 +-- 9 files changed, 74 insertions(+), 58 deletions(-) rename samples/powerpoint/{preview-apis => slide-management}/add-slides.yaml (97%) rename samples/powerpoint/{preview-apis => tags}/tags.yaml (98%) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index a00a6ac58..5c4757787 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -44,15 +44,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-svg.yaml group: Basics api_set: {} -- id: powerpoint-add-slides - name: Add slides to a presentation - fileName: add-slides.yaml - description: Adds a slide and optionally specifies the slide master and layout. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/add-slides.yaml - group: Preview APIs - api_set: - PowerPointApi: '1.3' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml @@ -61,15 +52,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml group: Preview APIs api_set: PowerPointApi '1.3' -- id: powerpoint-tags - name: Work with tags - fileName: tags.yaml - description: Use tags to process subsets of slides. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml - group: Preview APIs - api_set: - PowerPointApi: '1.2' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml @@ -78,6 +60,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios api_set: {} +- id: powerpoint-add-slides + name: Add slides to a presentation + fileName: add-slides.yaml + description: Adds a slide and optionally specifies the slide master and layout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + group: Slide Management + api_set: + PowerPointApi: '1.3' - id: powerpoint-insert-slides name: Insert slides from other presentation fileName: insert-slides.yaml @@ -86,4 +77,13 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml group: Slide Management api_set: - PowerPointApi: '1.2' \ No newline at end of file + PowerPointApi: '1.2' +- id: powerpoint-tags + name: Work with tags + fileName: tags.yaml + description: Use tags to process subsets of slides. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + group: Tags + api_set: + PowerPointApi: '1.3' \ No newline at end of file diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index ef975ac32..8354690e4 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -44,15 +44,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-svg.yaml group: Basics api_set: {} -- id: powerpoint-add-slides - name: Add slides to a presentation - fileName: add-slides.yaml - description: Adds a slide and optionally specifies the slide master and layout. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/add-slides.yaml - group: Preview APIs - api_set: - PowerPointApi: '1.3' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml @@ -61,15 +52,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/shapes.yaml group: Preview APIs api_set: PowerPointApi '1.3' -- id: powerpoint-tags - name: Work with tags - fileName: tags.yaml - description: Use tags to process subsets of slides. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/tags.yaml - group: Preview APIs - api_set: - PowerPointApi: '1.2' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml @@ -78,6 +60,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios api_set: {} +- id: powerpoint-add-slides + name: Add slides to a presentation + fileName: add-slides.yaml + description: Adds a slide and optionally specifies the slide master and layout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/add-slides.yaml + group: Slide Management + api_set: + PowerPointApi: '1.3' - id: powerpoint-insert-slides name: Insert slides from other presentation fileName: insert-slides.yaml @@ -87,3 +78,12 @@ group: Slide Management api_set: PowerPointApi: '1.2' +- id: powerpoint-tags + name: Work with tags + fileName: tags.yaml + description: Use tags to process subsets of slides. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/tags/tags.yaml + group: Tags + api_set: + PowerPointApi: '1.3' diff --git a/samples/powerpoint/preview-apis/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml similarity index 97% rename from samples/powerpoint/preview-apis/add-slides.yaml rename to samples/powerpoint/slide-management/add-slides.yaml index 34ce0bacd..4e36e55a6 100644 --- a/samples/powerpoint/preview-apis/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -96,8 +96,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/preview-apis/tags.yaml b/samples/powerpoint/tags/tags.yaml similarity index 98% rename from samples/powerpoint/preview-apis/tags.yaml rename to samples/powerpoint/tags/tags.yaml index aa2c89f9b..07ebe97ec 100644 --- a/samples/powerpoint/preview-apis/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -3,7 +3,7 @@ name: Work with tags description: Use tags to process subsets of slides. host: POWERPOINT api_set: - PowerPointApi: '1.2' + PowerPointApi: '1.3' script: content: | $("#add-selected-slide-tag").click(() => tryCatch(addTagToSelectedSlide)); @@ -206,8 +206,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css diff --git a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml index ef9f6c580..75eb6901b 100644 --- a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml +++ b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml @@ -58,7 +58,7 @@ script: async function contentControlDeleted(event: Word.ContentControlEventArgs) { await Word.run(async (context) => { // Display the deleted content control's ID. - console.log(`Event detected: ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`Event detected. ID of content control that was deleted: ${event.contentControl.id}`); }); } diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 44ecbb444f528df827dee38755043cb08ce97518..b09a1d416fec9eebe93db9a8bac757fd9fc55707 100644 GIT binary patch delta 6686 zcmZ9RWl$VQw6+I#7+eNta0u=mg1ZFQBm}o0!H2;!ID^X&Tml3S!CiwB+&xH;;CgrW z`>J;DJyqR5x}UD##<^JvqoTh~!I!f+o-~Ofk#SXLY5?0Ig-ySH;@(dc z7HkX4Qq^QDh%vjl8;V-n)qyGwVm1Rl4L{ z*qMC7TF+F*zAYjdF2pA*j|RU;WHOl=yu(h-nf_P)rltLTu&JBJ>XKq8)cNS;M~P(cQ@N7cu3ITGHE! zM-lab;BEa5d2hGnt!#@=T93I=m15P`?5Ix<#~c1w%Dej4Y|NWJ()U#bjlj&sj|;f; z8ln@`cs;`dJ1&&m$h~upb&6R+EAZJ+&Zw{3Az0tXf_d|}>S0qeMA4Jh!ZuF5yLpEw zA&0~iEbkP}h9gjvd!xePDoTU*p*nNY!NwvIHiqXdx&|q{Zr3g5SvFRMOos|QdT&C{ z??SQ0iP>s%nm>f0PEQ0en0V-Axp-4?L+Q`Xz`aasebGoBj|@QSJCuX52Ql+%H$F>s z?hNh(=itd_I~026?)>&TlT^yNU5h{OP#$kej5K`lVB+Yg0Spz0hPhm-XLPs@E(u&h z2)|Ain;989(Czqi0t*0$6otFuazm6cx#+t&fZB!!edS9%4el&fgac*Hn&y`)65hc@ zFHQ1NFuk)gT%RCL@pJ^WV2KIEQjR?97I`dvvz>es=8J)A1xMLWH5J3gWgN=;gt&p( z0Z)RfoNauL0JQ||jIgT8N+mg~8!E7X^K1EVOY9=%x|?!CXqiy;GV2h36hu5Hh(4p# zPM+eIKSenkYNYyEW!SJV5RbX8bge?cc}#HVq)Vk(WU09?rGl`Aq^Menpy<{40C^}=xU8QHKv<{a`3x@#K(81 zS5J9zVmzP{M`nb03NNSK1WzIb(_g&9GaC*PN^P`SMjKs-w(beG@t=Hk0WZ;+r^h~C={LuUTdT;+`_euR~`oe9H-7EQYu*K0p_$mvAEJFNZ}n&#`Kq0$f`Ig1Un zkjPGXx8+>=`9cXeA7qMk%O~YQQ%G=+*iDl8;&&P>QJQi zr%N_HcG(uj4M?$~`&_dfe@R=5)Vvy)K#w+-7Zx>r7p92DYgT@;{4QMV|rOuKbTRBur-=s<_xf}O!wrMrSi~**(DNjM8Tzx5fk4@5i4pc`%qIA^gKAEqe(8E9v zjfNk#{Ku-FO1$xAvgU@;kq1G=^CoMh%$-E#6w;+g75TJjv>VfqrV{&>2Zk;%Trw2X zKaCq(@_Tf>c4A^Un5R9;xJpRFORB~J7#<&qUEVvdiCL97id|RXH@)fTdOV^Z={P5Q z$$r}4f8b>`&K32>>+NoIY5TO(Pa^E=g~3ej;(G7+5{F1iGdjN7_4hh1CBF5lp|LNi zmLX+{2cab|dDf+++M_#&w2&ZKFS;fxJ(E*#3k zsmSHF1g=xVvu1LV#wKEY1?Y^cO&ILa0uj#K3!{rIA2_$htA);{q>Plt3urfycTI_J zE7Q$`K(AIZL}_ms-dER_C>cO{(E@t4x&}?<&h)N##9=~EdWR^=ipFxKz~0xg6RILn z9Nv1o4BhTa)UQo4g^?_%27zmpN?G7)%rtN+-$mERt~->(WcYKP(_6OmF2<*)3V~ z@IPA?YrN5i&R)_2`Y?!IodKzQNUNdx5&KA#4s}LZGX**(M^{V=$rO2s2VxS82j3rb zzppFKrWk^(x48gs&a}4OXEuIiK?PxGdARhZc6LEmHkFRlWriDBIv>nJQLV zVRPEdupKt;F4$dvq_s}!RH`7cX0%LsF9Y65vs50&Fc>z)Wr~J)(hB`Or>&04ep^R3 zteQyQ=`be%F+WM9r%?qCf+&09>YZ-L)K{ReBY*+yh}SPMN68C(s#8H?4_ISxqPUbt zEfQd)9rw<59~{% zTAlW2gZGx1GM@35wy4#CzBosIq~UU@n4*qgtz!~RHT~h*{3We(QYXgQ2!(jV5rRBQ zQHxSW)o+nnQR+mBgBdC&vmm8If1_ZHREA2*2SGj|tiz~!5z9314^~5_(>C)$JFY=p zP{@SQrR3+Uuh*p?L3O~>r>^IccSTB%$U6GqxFaa32#35UKqTxam{?FVPig34UIr-$ z6Dw9fr!QVr`wzY4m@PpJLq!GA^#`OoJe@;MPal$HglE6iR8I?A?7%DX#crJe=@|{KCTdYF?MSaL1=NV=8Q&M z@oh6ysR>*?$l8gshId)3V)|fbDger;jv#2%S-z;nc{F?0-I1wFCuPBe6u7LByP^O9 zM>qfg-d|6jj}woFr>~QZ#|s~4r)7f?mnCuF3i-YaaGBGu_k**%E}@J*iCriTn7ql< zB%dTd0FxwVnEUR823A{HuaR|FoaOiSgEB25V}n}byqTDKMQ??lS&!NRl|sk3G-*h@ z?|F516}Mm(XiQWE);NP88gIO=&K0IIrAkCTCR3pTYcVN9Z| zNd&S?_0C-&7A`ip%8~`SIc797Ni30dKp}k?WzxgTFXSR3&5fsmUS5ZVGWQ0hlE64) zaSQPo=S;zbGsi}RV~v>$&ZLAfCpluZ5z08tv`1yh{UQ4}>;Zr3i~>3=5Z(7joG61cU9Qw!=i4oG4A1KR;frmG-aZ z$3Q;}B_$=AsB}C3CSZ*~>Lg441L7oqeoau_f<2To814%(Ev5(?XwU2c`rye&?y-(lv!Nn1Zh4weAWQ*D_$0K$UzKVV+`iw8F_L*a4=HQ!k zIQK5HLD`qCDnCh*$y|4ItAPbSFt2<%eR>DxbkvRjQ+$#y{<%lV){yI=A8Vuj-XrTz z^pji5<#AVt=-gSmU7os<$*C+>oKS4VyONtlzrl@rp&91I-xMP1PqJu$x+BeIqEJ95 zb$y3nsw-Om6(i^CZc^9MLaN`@NmFz;rdq})^veCh3T@bQOaw`$Q?R3^?@}*{Zv=z1 z)EbGk>3gam^KJZ6uV7kRAFtp*O=o(0+tr5CjYtTjewwQXmiU!~tm zW}+LqQ~2E40R7sx^DJo0gJ1k>cgx5De&|jSPOf-a~2DI|3YmaR+7)Ij8 zRwjV)(w};vtt|T7 zF_T3kUX;g;*pr`Pnp1c)3Z)xnu>Z-%YVKK_B=c6UT`ehHEH6AgofC6i!P- zdi0>Hca<_zUA(s5rK@oBF3-RW9Nx2^N~(neyKwxyzOpoEZpwGzQWi>1pnKD=YanBN zSOTr8IT!Vif9re&Ihj}&iu)mw85kmDa?brxw*qRK=s8@c|9xG!(*3$^Dfes)%TuWc;>f4_Dc(QTpqJP-lg-FRa{WBC+Z@%I&&{FT5-SDkRV!$apdU3IZ4>|Ye(@qmm zh06BoV2C~w;`f~I<)|UlY*rY_!EQ(05R4?bU69H4>SVx(lalOwl6oV(w%NR4C{(8} z;&{Vo>HG(X4C@{1MSh-_v9|Y*qj^n}NY|L0pErXeV(;^Cj~3pbr$Kxi^AN{cASbwKe!TTCFoF>Y|dS@IPAway59=0Eo;=Vqy?IehX-kIdB`>~y>M)3Ns+7-R#Hf0bUEhCHvb0i%_I zFG$iE7{eXDBw@uP+M*0-eji3R+oDQ?lO|V)Q3ra)q0DmhOR-S(^EU-cRB(Idg8m5`Z3-1i5r_PN|O1Ru4vu# z(Hwd+GIRT^7`VtnY(D@K%Wxg@az)o>@*7JV*@+xDR;wc@p)>_+_aUHRm zt+ig$D|1XBIi$bOV*K5)LkmeXza9f8F+5j`rdZ;|4-yD4^O@l9s8^@VLWP7@HY$vy z4!32M65nXeg?>teCT@@#N-JR}?AlIPzeAo9kNF`x70Hm2hl;6331h1#D9j;rK#zJK za{i10ZLzJ!syze1wQ)(&7yPCyjhOg`H?bS-qeyD4=QQ1%aS0cQ)VGf?0Kd1R0 z9<)OxaVxgUciIfzP|}9styNldG zLRyJ5vFnw`VQ%tteZb<$&LV6r%;>yZ@&sts*A_xSKZ@`0_}aAJZoSx{dB#qNWMO!@ zO_NC1D!8NTdKc}69#l}d+6*Ef`*my}ycw<-#>CV$DoajqZaab4X zOiUku6^zbYMjXuc#VDm8wQ?)hy1uz#vB`fRM--)xm1dxj>#EIu>p9zs3_`i!$^B9C zDuk7){55CJH``gWyVSM_JF*&aw3LG&5jK#ZU&%5*n0B3FUGFiTZfF6hY>Y_8g*Hd2 z1zY#a#_3_YrR-srl)eX!Mob`WgPhHPd5)~3oyc`r zRW;(Jk$Z+0FO3NzYo&~v5uPZQX?+BZ)Z2I%D(JEbaRe#{m;hL8@UUaBJBQ2Jh|~L{ zis!^u>p?r>XGN|4Cn!D(bCW*~#WthcYn!-~k&rkJ76lA&N!WYo4ZFb6I4`wxI=_f% zPA`>4YG#xFdXscYk!zcL<+R-7ko)b_y4gOiPhxU-CE?b8%GHQF_VRo7l=pH& z*%hLLP2+w)hB~}M@-ayhl7m0`)Apr7$KPIF_r$@3gr?cW$E8`v!o`9FvD6CXCFxt! zc)%|_(Z;^FMd8w^V@*qsn!GVsYQYPis?Tv+TSW%dzB{YDMoe3dx7pW9>K9$3ERr;+ z6JovGhHf{oZ3`=Wy&blsA2(t_<8;Jg7Y~seIl5xmfSsH4)K!t%nFgOxt56NUhI!9& zz-l%mO4G5j<;C6g4q?U+!vk)E7)TxWIvcKS6Y>aZ9qu<-OT1T}FR`WRe_Eu`$hzS& z>(f_uf$49?9pwyn55hGm#lCdYreysh`S^pZl^o-`izKwhKJ)XZ7K#@#T_=YnX)gL5 z3CC5UpScLLGavWJ-LjZ{%$fw|I-M&0t=X0p)!rX1azpfjn`Fcvl~uJ)UE*kwyFG^N zWCo0Vqv>e>kPhc3{0MycV3(xC7rX1(d}CK0dK|BZL%?%;4KXEUf=m zPyI_R(fmhU!D|FbK>s__`;Ca>(&4a03=*_@FS5`k%=77qR?TWBo4)C}V}Y zv9iNyM1a))L_K5xpcw7%%<;b_&IW&CC4*ava3HI2!f`o4@L~}l=pWZX0stKTT0{6> c9N+|>6p=OOU9esp!8?wN7BajnzA#7Md9e_oF;#H0qaTyppbg9@4+gYPtY z(Lu7zx>)6Us4f)PB{X5G1m;mZ=>`g)W?Eigy3v*n9=DaqOD*7jwa5T|8`g`neuBX2GjWAjn zrpmG>Hx)mtDJOUC7+rhSr#OX~9lG02j^9~7X`cfCctsS1hz)wLhR)cC>Y*mYxe$22VEy1g;l#^A?NNF7VyV2fDzo&v z^wE354)lfjh?+Xuj0ci~&(3v{M{*fS-(wVIB%(S2m-t#$x_C)qN(JR{Le+^=2Ie;^ z4HFlry%+qr9-n$z6pNL`2epaEeuL?z7<+8_4JVB_ylra zUGt}@f;3<4(xA!Tgi;y5)R1TM8r0UN(O6d^sIgxE$cs9dXpCW@fIKQqxlDlH7*<%dk)L?;q~23-|WwjDykqlh}#?3j=J1r6ta%(&FsXCTV|=S4%MuG;r9IR?s08`Oe(V zuBTmV&jzYcxn$+61ln6#G{Sn0gq5rpDnXbUZz+PMgbPQNoqPx z^d&bmksR2)7Voe0bC19j(!DpW`BB;-IpFz_w!NaezpH zCnm6Mn~Ae*@jKR*O+ftJlrL{duk9a#iI=GU9>T2Y+-8O7&Zu$nsUJ_z+E;AXho>|$n|&YS{W-0JRdmA6xip`KhF zJslq(uf4sUyItBEH0w4EG9g$$I=Q>OzxBA8YkfF6dHDxemF~JfKDYhns?y)u<<*oQfVEWzv{&)beQ5|Wo_W@gEjcAL%`9{w0S zhI8+_KxBg{p&n!;uNkmCijq%)_ zxb1guys)R^G3($4YgMO@y+oXo*M|XwQYeAQ6d-nHGbr%atY$B9UTn*U49Na!EAef@ zXJ-|i2M4bj_i8ULbIWL2XAV^PMC;0@tWYI>KYXoXp^9&`LUgRFWmf8CbB7n6P63)( z#|Kl)i?5+J?BJ>IL>5SUb(PJp?S8F-aN{3 zK+1>X40pA-_Zx$9;4SFdeNcxj#T%wEReJ@s+uT*hsS z%5v-cO6|bEW;3fT3aYlEk0y5C{Pn~c+wYhJxi)d~qI%_^yf9=|JmQHkforKn*m1dF zV_T(Un$Se{+;AmcVXvV5?UNzv49lh5uAJ*mEY^X zZp3%i2KCiIm=c5q)xt38<<>|v9ZKr{u+M|P)(TUIeX@^rp=a zXp;O(=9lJfP6%J4KBWjpNTB5w)ho(?iff5FweI2(!;3j;2%*eQHD*@AYuOknjagz|X&Vc+%6%Mw3gVHs^d(du`` zW|0?ju0*P+PP6o=f}U-3oZBMM$<|Z82t-QxEJ*Mq$*Df`Om)J=5Hu)}XfIKCMI1uH z5zjU&YAt;u+(A)!Cl+fu4ed?p!a7XxXHx0F0<}LMfBj)aAW}hnwiO7~f^3a4&7hu* zHYvw*Oti0p3a?~B*=XcIwP<=tBZQK4P$x16grAT~+)7YMG%=$PT+&8SUNXaMXI9=c z+X3p|Ok&@$RWvZ|zZL9H|DEgXczizVvWQFtQHw)GKydAxWsf%&C+wb3b~`?L z@MH+bB5_RVGEXt+FP|(4I8QBVA+hE@F4-2KD^q*j6eONV{O{Arlh*X2m|n^uJ?xZex`WZyVyVLq@wokv`7;6vfp5G4c&-(bt>jC9ckPNL~3w%{KhDr)E+2c zl61mH=3mmJrS#+$?B%l&-WAsc>x9Nqgj@pA3n2ZB0ir$06y^|bHlFs-3xm)-hJ^k^ z6)i26BSW=|9<~&_D^XvX`zd5l2pb2n;zds^RT{l`FqNEF518`91oDmFUIB`9csQ(L zY(tT`%r}YmcO&LNl3E}1&!m84*A{9lmL2_M6-8RnlumL4Uu_t%W5TZHVX^@DlLrQN z{h@mbf{66Fpuut~Rrm%4CC4+Uavt9Og8z&v+G*i1`J5;osKY%FTmnAHVtapiyYu=9$BT} zB8Qu@t&1lGzSJ8xI5=c9HJ|F>$Iv3lSGlD!gT(M z@dl0Kj-2Hjiy2A=)z4`q?5opc(!hAWl(JFd@3Wh9co>RY3wxLFd&8?B<7K$)BF=YB zFlX9SC`IPZq6?L}^1>oC^j3>dEl@V|3%&(?tQjhiJTNb8S|ks}T@o1k+BNuDi6kzg zStr}^h35WeFuNwX#@lf5z>g)ZK^}?b5qi}XUoqBhDk=8aTzR ztmpWpMnR0wv2drQNT8T12eWz{b~A#dKSO3F()?JqB2l1KHEG>KKfS47;`zEcxW0fn zVnc-yR30{TPNt0h7NQs4SZ(cPtbo4hZ}YCIX#Aq?C0}%>@J)J@<>^sA5VkYF>zA`3 zL2y&Bb^JTyJiloTdozH<0I(S%E|Y;af3+aR+sp|B5v9_Rk%J9xwhxRDffW7SL4~@x zX(EX8it(kjYnH{IyPP$z-?N6Z63ZKPEnCCS9g9cshE^3`WCzO8wJgdUB3OXIF{%65Wl< z=?z3b_Q$*nYm|r-kjlDvKq0CYq=*}A=*8;WUkJ*C;_P8uXxdyLKEatyjzd){*6}N= z9(o@AM*J{k1umQ>M3I(1i%wIU7$DBh@8Z~{63nJk_R(jC>vp+2wBJW59oyZFcn!GP zgOnks6%mKDcgQ?z_J>b~QaQDvzCXW(Zhg%$nVQcT9Bn2CUh0jWix*&O)!hjA72WmT zmH?U|Cw;@kTSu{zVU3{cT?BVOG6wl019gJNqd;+bjRPOV+l?#dBET%@BGMV(DS?kX z_iR}H;w!O1Q*iwbe8=a>%b+S{O2NWrbCOgEjU3QZB31*|!hxZ1z^~fc4D}z?2tv_R z1)-CmAk;9i!01t9ZFA@-C`5>OdM;o))|`!+JZ8G^Ns3VP3aNiddE=Kf2H}+0-NztB z6?fv}H;3#)fyYvS_sQP$xQcpyuejZrmDj@oS57b)OGf+0uU*wH3k3^bd}};v;v+{L z33zUW9?vtfJc2^o7hhSIUY-wb&%_XO9IR$h3c0ro=q+z{w`8_2qK&@-uWy*4okq>YyU#)i7RlslcZ9 z`BEX-5=YpP0-W5tly?GV_GX`d=wEub!kOXKrG?!yyTsz9Mcnznp;J%i6kdM|p&g;$ z?$R=y#SZN-??k_Rb#t=&i9c}4BwksBPHYa%lgt#RwLSmq4B*tBeO{0uF|?PqJLI)^NDuxT$>Q!NG1^yUmwC zB_`w&s}D5+xyJ&lygvklen#AXa1%}GgS$Ons{x%BCeke>K-<`Lk?uQTH{H}(yxl3)f!a2nZqc) z8o9Q63KGYO3pm$dHekq5IjTHZa4j;)U{T)CicQK5d%2BFV zo#S;FiCt?&`w}$K)RnB#oN>wSsqX!uu(FD1hku!07-oLfrFDL-^j?(I6;FJc5jWHm zqfe#`)(V&8>Epc=9_s56uQ6J6U`}6`oj>Z^+0Stpr1c}ZnjYcl8*6hTQfS%!(zBmN z6LDhJvWN>TU+bSzEKFjpE^1(jo@wD)P~w?X9EI0WWCN(rK3=y_$s(hYA=h;N+xUuA zd=%OJzqITG%Z(!apYExjUmx-=Ru!Y3 zp@nudir#JTEM1L2dW~hKUQ<5UIbzq7Do_CMi=p^c1psgkVB}`J3t;S~XA2Mwh5)dq%q^9OAEvYq@xE;4;Cn?HBQ+AO&oGB|g33 zjZi`z)}saL58F;NfvjV3p8Uhw0r>_t=wYJMxi8M)hn!yqpGd2h@v^#E?<2oY z85E4NI}N_du@}8luv=8L`N?*-wapv4T{~UWb|XKuBl=H}BZfr@8*MnBqGAjjxsA4$Xyj7R9Oe-6ucb-AUGk$h?_J(3@<-CK2YnwYXy9y;whzT-!_v|Z)~ zytqv9tk>5)0u7`$j}gYaCJ82M<~nDA*7gg0f`+^`Q8oQeDd33`M|OR#%R$Lv4;p{( z-1CvxaZPzqVDgRau1OzX%WIt2r6EWY`CPNsGH^ZR=-SsW`UB;?n?xTrb;h#WGHRbS zQ!yhvmS|y5?K`NXM>7O%pNoa47cj+yEyR)gS#9W)LWF|eTQ0L3$I4Q#_#3|)XmLV{ zY+GL4p?BBjo8D;k!M!_(gHLp@t-TA(=uGlA?AFIWqj)zz3$H(-s{Z(vv-|EX_~c>j zToFf-{pQ6Jtf3xO%RXw>EpA^Qu5`8!{8>@q;b-p)!AK7;|I10M7ac#CpHuE!9d*mA z^ofBtePzL_)?E3-FN5hXuMdX+)PG04k35D?{`a%ul`tHY2~j7^P4%DAFA569-yY~c zOCND1tbodokP=~``v0BMe^7M@K!lF^|5O|?3JS@8oPTfp^oV47GDL(hA!1#G5>*^= zCn7@iZ&Lj0T>iUR{|l~zP!|=a{x{vBp`g6S`2TbptO%s24B8O~VoQ{h>fb>5t10dO gVu}8X=P80yObRsvVJ{|$s*5NSV|n5!^bg>F0Mq|toB#j- diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index dc67572d5..b86c10bf9 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10446,7 +10446,7 @@ 'PowerPoint.SlideCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/add-slides.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml const chosenMaster = $("#master-id").val() as string; @@ -10463,7 +10463,7 @@ 'PowerPoint.TagCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml await PowerPoint.run(async function(context) { const slide = context.presentation.slides.getItemAt(0); @@ -10484,7 +10484,7 @@ 'PowerPoint.SlideCollection#getItemAt:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml await PowerPoint.run(async function(context) { let selectedSlideIndex = await getSelectedSlideIndex(); @@ -10507,7 +10507,7 @@ 'PowerPoint.TagCollection#getItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml await PowerPoint.run(async function(context) { let selectedSlideIndex = await getSelectedSlideIndex(); @@ -10530,7 +10530,7 @@ 'PowerPoint.Slide#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml await PowerPoint.run(async function(context) { const slides = context.presentation.slides; @@ -10553,7 +10553,7 @@ 'PowerPoint.ShapeCollection#getItemAt:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml await PowerPoint.run(async function(context) { const slide = context.presentation.slides.getItemAt(0); @@ -10572,7 +10572,7 @@ 'PowerPoint.TagCollection#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml await PowerPoint.run(async function (context) { let presentationTags = context.presentation.tags; @@ -11037,7 +11037,7 @@ async function contentControlDeleted(event: Word.ContentControlEventArgs) { await Word.run(async (context) => { // Display the deleted content control's ID. - console.log(`Event detected: ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`Event detected. ID of content control that was deleted: ${event.contentControl.id}`); }); } 'Word.ContentControl#tag:member': @@ -11150,7 +11150,7 @@ async function contentControlDeleted(event: Word.ContentControlEventArgs) { await Word.run(async (context) => { // Display the deleted content control's ID. - console.log(`Event detected: ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`Event detected. ID of content control that was deleted: ${event.contentControl.id}`); }); } 'Word.CustomPropertyCollection#add:member(1)': @@ -11660,6 +11660,22 @@ context.document.sections.getFirst().getFooter("Primary") .insertParagraph("This is a footer", "End"); + await context.sync(); + }); +'Word.Style:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml + + await Word.run(async (context) => { + let sentence = context.document.body.insertParagraph( + "To be or not to be", + "End" + ); + + // Use styleBuiltIn to use an enumeration of existing styles. If your style is custom make sure to use: range.style = "name of your style"; + sentence.styleBuiltIn = Word.Style.intenseReference; + await context.sync(); }); 'Word.Table#getCell:member(1)': diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 6ff15a8ea..65de72119 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -4,9 +4,9 @@ "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/get-slide-metadata.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-svg.yaml", - "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/add-slides.yaml", "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml", - "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", - "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml" + "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml", + "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", + "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index 8ec9da8d2..c609a71d7 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -4,9 +4,9 @@ "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/get-slide-metadata.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-svg.yaml", - "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/add-slides.yaml", "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/shapes.yaml", - "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/tags.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", - "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml" + "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/add-slides.yaml", + "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", + "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/tags/tags.yaml" } \ No newline at end of file From 64e68b635fad872460597ea67db3c3e123b36704 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 19 May 2023 12:17:32 -0700 Subject: [PATCH 002/156] [Word] (fields) Remove Addin code (#792) (#793) --- samples/word/50-document/manage-fields.yaml | 67 ------------------- snippet-extractor-metadata/word.xlsx | Bin 20008 -> 19972 bytes snippet-extractor-output/snippets.yaml | 70 +++----------------- 3 files changed, 9 insertions(+), 128 deletions(-) diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index b3ec9f956..bb4b15b8f 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -8,12 +8,10 @@ api_set: script: content: | $("#insert-date-field").click(() => tryCatch(rangeInsertDateField)); - $("#insert-addin-field").click(() => tryCatch(rangeInsertAddinField)); $("#get-first").click(() => tryCatch(getFirstField)); $("#get-parent-body").click(() => tryCatch(getParentBodyOfFirstField)); $("#get-all").click(() => tryCatch(getAllFields)); $("#get-selected-field-and-update").click(() => tryCatch(getSelectedFieldAndUpdate)); - $("#get-first-addin-field-and-set-data").click(() => tryCatch(getFirstAddinFieldAndSetData)); $("#get-selected-field-and-lock-or-unlock").click(() => tryCatch(getFieldAndLockOrUnlock)); $("#delete-first-field").click(() => tryCatch(deleteFirstField)); $("#setup").click(() => tryCatch(setup)); @@ -37,24 +35,6 @@ script: }); } - async function rangeInsertAddinField() { - // Inserts an Addin field before selection. - await Word.run(async (context) => { - var range = context.document.getSelection().getRange(); - - const field = range.insertField(Word.InsertLocation.before, Word.FieldType.addin); - field.load("result,code"); - await context.sync(); - - if (field.isNullObject) { - console.log("There are no fields in this document."); - } else { - console.log("Code of the field: " + field.code); - console.log("Result of the field: " + JSON.stringify(field.result)); - } - }); - } - async function getFirstField() { // Gets the first field in the document. await Word.run(async (context) => { @@ -142,40 +122,6 @@ script: }); } - async function getFirstAddinFieldAndSetData() { - // Gets the first Addin field in the document and sets its data. - await Word.run(async (context) => { - var myFieldTypes = new Array(); - myFieldTypes[0] = Word.FieldType.addin; - - const addinFields = context.document.body.fields.getByTypes(myFieldTypes); - let fields = addinFields.load("items"); - await context.sync(); - - if (fields.items.length === 0) { - console.log("No Addin fields in this document."); - } else { - fields.load(); - await context.sync(); - - const firstAddinField = fields.items[0]; - firstAddinField.load("code,result,data"); - await context.sync(); - - console.log("The data of the Addin field before being set:"); - console.log(firstAddinField.data); - - const data = $("#input-reference").val(); - firstAddinField.data = data; - firstAddinField.load("data"); - await context.sync(); - - console.log("The data of the Addin field after being set:"); - console.log(firstAddinField.data); - } - }); - } - async function getFieldAndLockOrUnlock() { // Gets the first field in the selection and toggles between setting it to locked or unlocked. await Word.run(async (context) => { @@ -261,12 +207,6 @@ template: Insert Date field

-

-

Insert an Addin field before the selection.
- -

Get and update fields

-

- - - -


Toggle the first field of the selection between locked and unlocked.
diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 39a08c0d15510aa902b220078e0f6cb4897ba569..ae40237c6877145b8b3850bd1e4118ba5fbb7c9b 100644 GIT binary patch delta 10250 zcmY*F${yPgxdfSQcuXE*2nc;*&qz0E-r8;`)_`Brvz>Iru@N9w!`- zstZ+aR$11qHn}%wTLW+eC%q>ssCW+iT~u`VSI0XhGVXM6H|O3zXzFco)&ecw5BeMOg(YUZ-U?s4UQ-q$|-$EAGEe~4L>&56kBRCwJsALc;V)No&fzDz%(gu z%L<~*WTTpKN~sT6(=1QKM}&X50Lu<|65%9%(XO9iKi88|aV1CC#VkL&nggEssY0d? zoS4Gb0*T_lZMXITT|`XXk|{O)Uv{u6ol8`9=Qa`xN(s( z&rA|_4-^3x^Yi6TInVL`eab^j0Q2TfHI{cDTFBJ<@daSq%@*NTy7kQkH6E6of5T%a zIrxVgmhV2w0q&C?Lw$FQz6SXkF$F_#&N%zvJ%eL}-k*3uG*}F)*;p@N%7xpOnL1yg z?4qcf&%9W9Y1nZQQ;vpYYMG*g4fuFlxgS&c@R_{bux~<*(VbjdUp?Z(*F{Mhxp4W> za3hGO1;(jRP%Jv&PI!=iDZIc#5`M~ZENRfiV#WxC$jGZsu^$&0UAw=}BCd-zG?#SVnyFWv(7+g*VRG?l!a3ecrU>1r1j7A4bAL%Vru z1+-L==fd_1+3!_*G3SiJDJ}EfqrJW*^QLQ^I&s{uB7~|tMMV{6i+o!fIAd@AnIk!s z4nz7tmDzEDkok@(oL#loBL7B1=DlcSc(ftH^>qO+%a^U+Ym76CCj4tEuOkhjRQ?ox z(xJcIvM}NJsYiMz5yrc@m4_r>=ND^sKd%*0?rr9)XaXlcYMeXWTfvU_gP1$7V5H2k zf%p>z%RMjH19FRCJi?6yFPv{Q3uetDMC{Edf63Bc%-F^fE zU0fS^vRAoJT;WJMk*{QEzOCN!0x81T5pbJ~VnnX`GR_^BxvObxluac|S+H>r7nJE3 z)r772Ju#gdyOeFeBjiUZ=C}E6gV~Sa(<{<%EwGx#TS+HiXORxVCTvcr&fOgx=I#}U z19F7MC#Ts8r_5(&-^3S)ha(!f_xUirXOE8_4PL*uwc%(gEtN;)&CdYKPKWIw)7Y^; zIsMA+?}FF;P$$y_o$KGd9qxhAW0+bu(a-k|cCsE}Dn^lGZmzTDTVo7y-IK0~eqx4s z30r6$P_#P0;zN)Fk)4cDGe?pT)_G~3E6_!f%|5GFir_+_mVOix0Z#p{op^;oaUZ%B z&{)_-VPz&Zz<+V2a_chnjD~{p{EYJ7l45e)z{uh9F_ropB`5r8B}0_Z=UVub*Ik_O z-s$*Hrop1CYaS~u+neC0>>0+29`i}@j6Vs`$6UT`S3$) zc6Z?8?`v1H=ZfOzDYylY0%iucRPWfEVrFmenbhE*3BlsP6KJ_2Yqelo=Nz)?%Qf5rtRAm*zo8{+ zW#`C%IjfN&dt9n_FEhKch1-03@aC2=W7mQz|7tehr;lKvja$4DcJfH{Rrwuuqna(kX2p3CrxIme|Kodt`(xGK`irhe@4;1yp@QU=i(VQ!sdm5}tU@OMp9= zOE5_6ljoNvpq(XU-n1ba#@3aJPpUXPpHbU4BFjtUmlu#W8@-NBUYzd~DPtyKja2{X zo?FpU92di*JX9ns55iLbjuc$v3x8(CCtv24N1jvc$fe_f19W>Dm0x|rJeDkp8@)D+!G ze6%J!PR*@glaOP(MaXRzrWPxJONbN8!>IAVfD6Q7GUxtYR~=8%pityRb8ea~n4LJW z8uSx;uY9Q6H%(w#jl}oV^n-;Njpp3V9+U%h1XCM^FO96S+u?L5`ogL(d$&PRrFTA= z#IwWDKv7oAIV7PpjH&iB5=YT$T?LnC_#HjgkSaT3O7r*kP?W+00V1RZ`)Is=^dtpSQ^;wyJ@uEU)fX(}h1JG+v z;WXHXMX5KY`gcJx0(#g}vTA&O{|t#gXkKY}T@fCX8C*fAC1Bur0ZPRKmorCeI$HWg zEoAE#H~kPzZNNzQ$auqN?Ovw<20BGq*~M`xFv%agB-R>vM8uIq8>!@D?#6-UHE=RBE0R~^Ha zx{3&b0B?v>p-4l^x_AuuD!I2%f;IZn7l3Jl&kvHr^sB8vEo}Lh+x&6d$43@?lwy-Q zWS`OsZc0A!H1OFMT2q@L=KD4OxukCPaVnlzo6@YCjKqrde5xo5S5Q_8(011Uw|xRg-nVmvR6p6s(xaw3rZWAeLCK6_={sD9nWz>{%6=G;8njCa7t~oPT+hpoqxz&pSlKb&W^6mi~S5{TGXK>?CK-doFN=PS1>j zdr%5;7drlWh;U5v8^EqNit%H_LXh8n8o><5btT=UDXXi6@M7E(`R>NT{a##aFD`Q#K{h3>7TRUlpk1* z->+xTT<2OFu_7kRv#cQ8hV!dGii;yFGI&E>{fV0$M`G{MT`|EnMVY&^!daM*0{k~7 zLWuP2;*)}pJi-ogljl2`FQHIPUo~=I%vBD%tgFNWUp&#Per|E8P&NaQ2<$COsUz=V zCUMAINEyjphLn6R6Kmnzq!3uKl$5sUgQ;%v(+c&TR_@d*bu-6T>rM5RZTdh5j(~;i%Vn z_Kzmh`4a99y*kySWYw-O|I~mh^m}Gp>2T=&#n^mnRXXBsk$W@MFL3PDrMTK@d*20x zQm&fctI3-AuWx5K<`ZxaW+P;QfEoOXzmuOLc1?aDJKt3;aSAOnyqURwSCKKSDPta} zOUJACyW8K-6cf0ok;DY+#?$JyyqlXj5X2UzOj^}<@j$&C;TP!+5hK~K`0x#xm>y$S zJ;4*et<~Se-SxzG^cP^|efu?HpY+VR)d~`LawIPW;(brCa5a33R^?V1wxXB6h~zY0 z?Z0&yM!3z{K?DFvMcya>f9L#Bp?JFTi9P7~k zz=2s;Ftb6=8&yzyWSTjIg3<@n3`mx-#KGiKTK_4F`@+u=r;lce2(O6N;@BNQGz^Sl zq8R>z?sb0FkM?w~O83mXIWV*iz<9c>;8K5x41C%J5<#CJM3uCn!~?)U9C{3$_TbLEB&EmSw?=px*X01M1amJnKTddV0jTAF*I}+bF&0> z{%3wjbVtPNe;Uvs3YTn`;s=U;W`v5afd$p;ZCuYsK@hHM=3GiKIz z;&6%FlTJvwzDo|t9)LMcq%mb=^B9+NPMIUALWQ0tLDWiAeSaoz&Jx?vU^!RV8#l7D z5Z1nC^#Af{02z@6ako6Af=5K`*qqsGLAWHFP~HDzHw#vMe@hT85dJ%8-%N_m+YaI+ z_@}@B4A*Y~BQh5_%R-`=yC3xJ2kimzF1Y0$lgO%|yencuJh6X0Y(lC`0_RfV60KI{ zz?iNQLpOKiwHO!(TpWX~X@6s}29dJFs+$p1z}uzwstY>F7q6FvNYFq^Cw=mNs2FV zf5Lj~9M&0X+f!BLP;w)0y>AHlqx*wV3YeEr9}paYDZz9&O%B7}wp_lP!rV*w)NDeE zxO})8voEoN91^sZMqHAfHSH1$X8SC4RTQ~Q%>+@t44}aNnk{q&9{O^+zaBs-c5oNA zy>Bv7`?n{E1oq7=Jer}o`_iwTW_%;p4ac1EZhU*Y>Z%MEvUP}E-9K()l}4p=~|31&iom`=A# zX6Inz==l~|$w};{&u`iO$$W4oHC1q(XeCm7>!fXClmXI&W?``ay{!qoTL)Llx2n~= zJ(K{d`U87E)cF0S*sJmF($jigCicJtcj;AoZXC#R0bo|9n*M+5z9&w7>M|R>Gshry+h8}_mq~!EMO$M=rK*LxVScbXG3nS`{(D`q0`CAw*qVwaX1otI4*(be{x<9&AbQt-vZxU;a~{rB`Z(eo%cX1<$CuR$lkt*;gd)A_H?gj-&T9dT#r zWd-34R>7o|zI2stbdEKQ_gb&9^l9zHje;d8G{TTcC(<+@wuq&}$)Qahl2d%x@DNN3 z))@%6ghGQuH!0r$2(>U4uPp&L6fXR|xhek&?2x*Wu;)RRkc!3fW<}N}c)jSO{3OBG zI7WnwN6~MYW4Y27{gxYUg%Ln-T;C^4)9*0I0UOrRZtNF`I611}-Q6rj(x})&_i^xS zt^mM5yi(GqVJ+T+!)c$C3|XAY0VnfA)krS6Dygy(?|o|_f4{Bp9Dbaluk{@S&c^CT z4Pm6%>5O_(x{P|}tml0Jz9gPFQ8~3E2y;D8A zU?7kYHbt7f0-sHPsTBu(@@SlR@D0AOOI2L72(OSp3+0w3NO(U~1Y9wvq z0aJWgqf|5XLmM;_FZm)^e8j*S(+nJJNFPl9et|&=MB$>lVyYIV6`$Ka5neViKrNl3 z<#K2C>w&4}*p3!;o?#zbX&>U&(wROD%aMzXx{_<3zvAj*B}Pe{Lb+ws24~X9Y0Lby zndC3JnrYpS@@m{R5zyYjhKw>uBhoKR^AiVx*12ZU2P07EKV6_*Fkg^^ zTCXJfj&}j|OmAE0`u7(0^i*_|Ng~#la!M7AQ18bf-i;nU8mWSATq2d8M??oJ%qm0) zT$JtYaAjAOTpIsE7$d~$FI_~ephGl$J}tKVCk$=>TCq7KK?1#36@6xi*pDywCgp_F z@yGRcNsNk<`d;19Aa4N!Gn{O`r=t^TN6civI_e4<8ecj_jT+8=%TpBPFb-%BpRpg+ znT|t~y=B8zD*5+uSoI0o6%9iQjOJY?32wlaT}>20Sp6j4@I>Ul7grEH8e$8X;H@bp zsHu8^AufRKE>S?4SSqbBb=)~#pZ~pC#H03Bh$=wlMFkgG}Db4Yn z;Whe5I1MnLF*ZXzofOecOJz~&vxKem5J?C^nE0?*@dzXPL>w}R;9-Q&^g{~9Ak44{REvt_uoHuXJ&iEqF$R5)D4r26 z?a|$KVxrQCvE%=NV0#)g33?LJ`lJ6qVeQe<_H@MxJmtHkJ+AWK*$CO?AAQ@`Cn{P= z4KbFvLxa4s(i63i_1n2y$m%`%XPiVL1tAkp-J_+V<>9i}#LSt$(MelnkS=Jr3$;PqV{BIna(jVCp@Mp+^COD(mD=5Ql~DdnwMhYB4u- zFv?cknuKg;Em_Ki8~%N9eD>jUG!YoR(}}0~ArXs+GJ`%%Vt7M}>2@H1MG4Q@9!CZc z#gzD?*LHET!P09P<#7FqI9a_PuORJ#38ZB~JLRV0=-n~wvS;uUDVykoFttZGA(=Ttzb8$ebB&h@RL%}B;%`*c_W#Qzwu$k z126`>&n=J-6m&cWExYbkiRSz?EAy)gHS^=W)7!e^Y!V9Zk{Q{hWg)9azsQcQwh1`7I3ktDn1={pw!5{bx7s@2kdv_)LK>26lZbrxg4V*L{=WkY$5#Lzc|hk_3# z2)+k@YTn@>yn{c63X!x#n;aJ2u~v*}a|nBka5t>nF{Z@6VENK0M|bvul*zg0ip-ME zyhzJT&nNPa^g@2;L%n%9T9dD>K4084_!%hYg|?H%uK zu@_57!6XeMGoDj8dqqN5Q|^!gz`W4SULYAC72=eL`{8V_dNj!hYF zH6mj^=Vg%o*^$9k`-Wi6CRLKZkoy+Rk)*7zlOi>p1L6RY)T1ez5M3JWbxPLLK@H@a z&}1{8Zj!aFZ(|^t>KUYy)D-JFu_@QUrG6vQ&HK1lz!7Vpm^7hP-Wz_)fs&|=IrAjJ4!3m@XfEcWh6C~_xzsxF7eqtuUCi7P3w>nio($E?DAsqr0tjiILrs2$#Ke~U z0$&>)~{tbEv8q zsKEQQl2{i{vk-O`@R|WpWva9~8Dst5R|;uEfFHu4mhG@BW2Q~zYX9VhfnKE)dEKT| zZ~1Ib+a$u(r0r~1-)BDgz*x4Vai(D_is233nhRzNwr(7Ghqq=Jvw=lD&NGdC{vkZL zBkp|)>@Dci^xRCs!*@!}BznyA8aiS+n7@(Y(V|tfcr#3vw^34Xl!t?vEXU-ewQF|QiXaSc%OFUUFSzX< zU&4xum`Og9b6FcIy7pMaFbVg%XBJeQ9E@5J*{2Z&rt-@>*qC8>v&LL=7uij{B_FX3 zwGu=(q+Lk;$!ODWoWB4d?eHW>HMc?7A8Bka0rp@=3|4|8K13b-$Yj4%FX))nwGKO6 zN^2Zj97*qV#`u}qA}VRt7ZiT->w$xzm116p3Z7y}b*C!U`*a&i6?9vW_3=D;%Fx18 z-y>P85vI2E5`ckQQftD)_qW+BPLJ#|awG6I??VS#yXw3$nza0|l(v@QSV4!ds_UC@slznCt6cQ9TP>l>$WTfiKAV}23 zUH2?K>2N)n1m_H8tfL*Kq9$A;=hS5WP}IQ|MfrMORp-h+C@@;S#X4y)?X@rtbIhP+ z=b=;X^WWmsLVcI2$pg!WV?n!3Lj7i!Fe8&#Nr_cm$#}&%-dUb<(ryaZHri*8+X+~f z@u7m7-h2#lq3vXMWMB^Fw8D2EchVY~UHtl`=UJ(ty0e{-)6o~t-=ibGc6O3#M$8C5 z-NQH!^3B|?XCJWzR%ADR?&s9giC;tMyL#_(I>s`s=W;Zcwr>Zx!v;l9=GrsGsFu}p zT4|OW(@F(iFtx{b`19+#{CpPe?C2!qE5yxuxNQqCJ@;eX9{j=#GYPPCOm%NuD)y@L z`j({OmHffI%{_Ecv#*-Y^l8mo;p8UWxq2~MHB*wWUoYJI(93FYd2%I`11oJO)ADlz zWSt)haJv}0ao#XMr)ezpt-{nVNW1mgZyiB!4yqK#By%sn(|#z{`Y65HD^{A8IC7@Z zAi_`c-DRa=DX%UFHpuzBF4@|_>=xGwe0Bp%+L)HX)fmaK$ zmY7*YHVe+g2Ygu`S8>ed)iWB4|u6XS?tr^;}Y6EYy{jsQBGMGq7@g zNMw1(@qF%&MB{iNf&Z_jl%^nPtZNf94Ul4nx|d!Nd{v^3@n&`%c>_NeV21r>AM(PD0953tiE-RiBksw55<%LXT7a#+Ned%r~0l_BvQ57%AMPkZmXR zwP!m#&=rHmee*z6z7wl1F{LMhYmEi*4iYhmYqO6o^QxaVIkQ5R3^%qp9M`U;f4fzC z+;7ORmVck8n?Td{U3@I3E`%*wdJx8c%arCtd<3rfy%EEa^9qtP#>q_tZeaH{9mrJt zJYqSk&VIJDTkHiFkrWJ#MPkV zXpj3jar(0&lE+&{c$*GRn5zqdwdg7}V!l@^#h=posBM>@NG&HyrY}j|=<56)|7~sb zp=BqUGQV2T4TF}=)y$e~opnB^DK5~=74csFA|i~>Qaofw=yGYrtrbcaHHvtc$txcFL~tH+c4mGNg}Gr2a&> z)Tn#y#@z%EMzzPVS}SwF1B|$9l$WXNZ$)gdgdC9y7psZiEU8!eEfzN{bVa%?kZbtk zU@jZ(i6ByfJ??@F-wc(o3p(aCaF^HrNe!=-tBKFO+fF%_!>?=gnhx0j9^3TeNxgLs zxnrgL7#4sX%h>M#5Mjje55IHKML*j0!x?4z>efTls;zc{qS_vt0`t2%IZw^KJYA+s%g4`Xcn%9zb}z;?t^rH`Adhnurn( z-9PHkYS41HY1v0DE9nb*)d^yD-Z7vs+aKCYp$?Wu0pNa<10!dad*X~t`o~>7%9uja zgeFfVL$?zy&2rX-V2^)fd2t0pu+321pT|bm{O%Z0hd*3^FYmtE){6&R!T#6^B1ujp zXe#MTLeVD>TQdrLVXyFAqnqdz1vOrY3|u-e=LYl%0Fqgb`_~8TH!vSU??%N#U~fAfh#S{MyHPRndqgW2 z;KkycSYpRuilh`J_#bh4m^xL|v*7szo~z{19oMaGmg_MO)(vLJ0A8F)bN@Nb!+n`K z4iVi&-E=nXIL%QU7Tw9y!{+O~(qD|oi?v;I;yxkOH>=KSwU2SMKSAA9)ra1ZwI{-t zh5P~Af0b>m0H~zEE7#_K#G~b>C*)>norhO>ZNX4a9>Gkt>T+zlH z^msembUemh%;npOE7*PiP*8$+JnhPW9tF9q$2U_22@KzF0n}BF9p>*m0-v(1e_|98 z*=Q*%o9Aew3BRQrkeO?+4coxD#hLEdw8vh2f8Wazw@hF`U?4}MutOm!1cJwyh!_Sl z{U~C8F-$JkL!*r;JjUPJ6Q-+^l7bV^vIckQIbtM=vaYkpKiO9b{ zvAy_7Zo^3`1 z7FJzn_X+N0HHUqtgy)s*xP2T(&`6GA`uemwOV$WOjTbuF(Qm^|Z-v^v(SQYanrQVk z3ZgPhV{;|(H)a3$BL6Jp=pDMZOAz#aXmtD*NXXsY`ij27TY?7bx=!-VQDG4A7az`6 z9|5F7?4tOix0qMFDWk_V9ehocw6Ri(0Tu9F<*L7NTKY9AT6+>4S5^cy8ZIw8!s`o# zT6i?7=zLk48o4O^>EY9@z96`TT!%#|Qw_lr$MvigHgV!+2$6t2&)nzu4f6k?Aia?@ z#Qfj{?8c=R1_4)f7BJi v|EuReAqx&umq3NWyVS)2s|qM6aHt|NnU*RB=6@jY-#kM{L3vXCZ}-0dn+lTg delta 10267 zcmZ8{RZtwj5-q#IgG+E&T!XtV&f<$}u*DM~xGxUD0xTXvaCZnE+zArgHYB(N4X!Wu zzK{Fr&BxSKb@%j~nLblp)g6%oD9ZuV>0zL1Xf@{}j4){6rmmlONrJyLJ%>DK*7ruC zrs+XczN#Yis?G0>+J2#Oh9vW~l^wv>`Plc{JN1wZ)|(!uK3yJC-Anq#jfCxK6`BNM z{Ud~4CGN(xL>Gt0Gc@$2LYtQuTKLBAT_M`ksvM?nTJFd9d-`Szdm#jeA1%wab?g}QjSWAnP=lM; z+5mU&=s$UbD;qxc=$qAc3{B|GqYNOpikGkRM#>v*ob)*-zNoqdC}%d#o<^LqlD~r2 zp;i#1WwTUxqIP|)QG9q=JS50q%=l+WEWi#ciX^HG5g@LAagR+^fI*;dr3yzFEs0t zeo@^{fx*h!SK_iH)DqC3-40oKx3$rSgdu_8$2RY0X9`cA1)A0QYn`{NEoDoEjR8qs zHO*M=SOedeyJcJgw!^<`0IYBW(dRvqf{5MqQQ$Tkx||VzOzp7zbEn9u8U@|iY3{k1 z>(obcTBWJb8rdlt9mJ0){NUOLyBOMsKBdPV!KULSgy`Ab87sW<0S8MaKMcj{-}v

QPsO3j297)xUih^M9)QaCIm;zI zB|+EbIVhhw^s9*6hPv*Nk0*cjk7NzDD4GZ>CLQ+oAu>3{tKk`(jpSe z#-hK`0mD~T@q`o3u0C0{2c+sE78dVc@!lWRBoTZ3jBYH9^J=`8D|RT{x6=&AuF+UB zb86O2u*3A{1mX|=x2#t{*0l--%CVfuzEKYK;koXtcB%{Wo}ZmY#N!JewE-<5#&W7F zFWU_c%Dp;=t5LFWD?_R2sHhwN)>qu(6q|$ftss}l zE?+tshO5mREb>2l9fQcqZkO3(R>03@kK>n+(J`qE3=M3y<(dYIxhLY7iRRZLSJrQB z0`OS}-(y8>z5pBltQ&OKr+)$eKys4=jfG*@Ul-JwnlZm2hxNag8>Nglzohvk5zYYj zl(y13AQu&c4}$}&2i~L%6kf=Hj2go8j_Au6HI!{~nA6Xd{3X4T9kllAQ$&DDK`1NI zptd)ETJe=uG4Rjuz9HGyg&uiOP*9$q|2w6cn;zyq-? zg70sqPM&YFp62Gf=iyC zA78IcTEL<WY(Xjn$qP5El64@NU+@Z0{fW=6&8P=BeHV7nG@Z1%lFPM7OV>Zf0y~ z$G~4Ou@>bm@@JRxb%)Z0X&s_6eY+~I)G}G?x=12QksVvB=>~meXH~d&_sv@9U zVIJXBa-HVHabTubdeg*&eKZr_D0$EH2i(C05fD$nD4gNWbl>Vf;Mr`NAd@qiK9cpZs946Ww^fF}xAMucB(ZdfQE|r^1vh@`9tCRX_);9dmJ70F z!>{PMl&A7f?s9InuT{BZR(PWKI(D>BiE%Z_B~dxTl^^SQhMtx(5T^t<@cQWy^oyi| zy1rOU%=rUHsBguGZN@kUmP3`d6cJwImb1hbdYg}|lu_Q<0xOijKP)GH$m{X@7G<+Zvs*t9ef=_BvgXK0ht-8+OkI^V z+;6h6WXu=`g+Mz#ZM6*Y&D*Vtvy*&HmBXE+kWyy}SJq&Ug{ncRn;KcLN=;%-%8E&x zT9F0O^RQDDHE2BCBz7YYS*9ae!RTzdIn@u_SUO>dgVI1H_K=}f2?rx9QP*7lOKRvJ zO_WJ6gseJYM~UnU$yZxJ+L(&3w*?ZCy{~w)aA+Oa<7CyKfwQvY#uQD^h6F;dtJ8mI z9B0Wanl=^mqDVn$GY*k4g1y$P7HlT3cj#Gn`NT#Co#3W%*$n8`0um7%2_!oOHl&wQ zcNs_iA@S;Ma=L2u?5O#K3T_7lG`99cHtkN=P&CL4jO(vGeg^w5M^rp1fwJNl#r$-p zq6iag3UdP8=7Q*v5Ez}%~$TxgzMpGN^QfbJ6O@h#z3Y|$30yvih|18x6@Pou`xG)}7DFmmhcoGbcVrsOK-j&FI+Q6cx%r=)yEeeJb1CGsGA~SsG=Df?DyvP6^!Nk?zx~lIdCrNwE#>EJ#t^dtHj=0JU0K&LU{A8hiRm;p)B7nD;l=tEPY3KXgBnFW&sI*V#}t$ym>y;`O-?& z41W*+QhH2b7g8n>mmzfo2PqT06byz+JiO6Mp*_L%ESuWPF5&r_?Y3f6zg8LDM0)zR zlb8TX_e~Q@=K~jkMBja%MLlrM6S|bTIBIwAj1IB(QSf@{pbMG4yWhmS%zBBfiRKC_ z@2cN!_un%GXqkTD6Zo3j9m6zp*HQHE3f61#r2Q*5=5^NP*K4Tyv(@22n6V-neq~G! zkLEM^((fI64XVdpRlB}hs-dkg?3rCq?o*z#2W8&=L-2Gp?#udS-CZLHf3~BBR|Wb?Lk-!JVx_u!Y|U+8pcD-UIr1Ap!nsM?z_*nWS@2 z)Q?>y%94beyYael;`sS(SK1Q8p2q#e&p?_RBA@(G=V~jbi<=dN*Qy~6QLS!(tGX4oqRZ&V*#9*TqQbfb@QJPi|C(_ z(6HMt(-NTdI#iuEkC`0PE{aCsb!btNQCKLBj_=>3K47j%7_V{@>I+9@qX6o!sOR$5 zSm^wdC`ieNx{&9anc?nH$@=%A068@fo0G*(hg718H6n@fF(z>DwAVfj1dc*H?^wnD z*S%%|J)B(Sgm`5$(Uv$UtcZ>`Nl4AVb>khQ6(Sf6E|U&pK=obu_pU8Yh#`BBjZz)X%#%1eidNms@d`8|JlXxC(Gw+0N*?gfgN5>5hPS%M>4c1lKRe3~)+J z6lk))1N*jfb+(K?hK>-o7d%uR-w~~1cWNnP3@d*u>Ute!DK}TzLRB`Aa7o6uM*p@4 zynsRKga7W|4j5pi7@81Kip%SYldC5AfDM_5Q`c&ij&4G(j({?2fYw*#S1~KZbZ|x| z{Nw(+za_Ucg?OKV-lE>|86A@-)_0utZn9l|FMpQ^hfi%PEWS&hI>Xbto zy|}PhxV-Gp`O_&u7cdvs8GVLx0bUu_UQ4~o^SI9+beA1s$<9bVu6A`=*NH=01yf9K zPLLj(15eORR`iBuU=vm2sTreP{th8Xz`W^~Kfv}~If%I3*GjffAZo>+ih7@A!nWYq z>Q@-1V7BG>$A^|y$FN6No?wcO5-8g)wSMF{M=)>}9km3WAsF(!K22%|!gDFZM4zS! zFk`heT>le>F`M|WWj6+pN9gCO^!O727pAT`=N|RaZE?aNypG1JD18Vrb}@M0p82s{ z;)QW(FD-4~8y5Pbz4UmW-j_o1;4b3VzWj3SdC%JAYEA7UzaF*UZ*vPw zc~mdu)2)PLTK{V}(|6o^NdWRIYo+Qz8mpD@(s{E}kddy1+6Y()yt{AZ^N*>2BU(ex zJE%?^{5=1lou1F_UN>@^K~;ErvCSo=*0{r!rD)47c5RpX{I>nvYfhxk)@s@v$i?Rw zJ>*{yc-sqgMXyO22Ku2!7=XCc?`_ugwPlbtUon05zdFH@r@X27toZ$_(~VtPP@kYH zA7w9_=NreZZ5Uf;VdGx0f0pA5{N_GZxd0;HLC!ztoAZDXH>f@R z%wq%U{AYrUYsFkiPacwsPJGZ&oEzzPZZ)G&H^IyoA7hoZ_9vScBt8fTy-R`cK&oqiFC!`XF~sw-%*(rz0E<|2+=t#yKN0OnW#_hI+;JQeGOJ z22EP~Gij1dN){sIds|;WUBBa?*oZb1G0+rs%v4Lbw^{n*=ZAcTeXIz1lMKx$M6{yI z-fjE`n1E7{;~KYGReppS5sPdqQ$0{Vi)^7|3D#B(cR~w`MHV}(mN4k)xkg^i*6|RK z?89G@*qZbXvi`li{VOqu#c@z+V3A)CL7Hx4Te&oqaCe1}5A3e5<8Hb_-tf5mWz8@~ zq@vuRpBG8HE61c$gPL1l3`RpQ&Oy$>7uzVA%mB8TtxS4vkY+CeFDHs)>=#aT(|VlM z0mc=R^A~;Y2MbLU7MBxyDc~(rJt`JTKm6NFz8%Bf)$*{G&1IG^V>*%Qd5G8LaMz&5 zN)scfI2`4U8{(iuZGZ4=+%^}4 zmQaDl7-i?!U(V>Mn0;_7{1dw2LGPiwLDG{8qh`Wl_UOGMCl8>CYwD*ecl=|T24{Rx z;YXr?64xYn4i=DA)CAY%Zn~xa$y3oq#hRfpNYVzn?Bn4Mno?$!crOLfGWbgm67Ll= zF40P;>oC5ZvGWFD;dsWCM#$W^faY+xw8ErC++y}rlD=Mb5HS~x-$hSe>eOU0cw(fZ z$*!~4sqv==Gi(5U0@GD`83t+;;Mi6vko?rCi4YuIydOs?TmpG9$C7SdWJyIYkvI%N z@ij#+tx~-HtML$@X@zkn8_EzvG2#(F-ZmSVThm6Lk3m?fvEu0h&PDgr_kkF=f(h?_ zo$t~Y{H@Q%`eDXB2*Hc?%p~(k78L@2tFeLYbc8Y5x;8!;I`dw@YFw2fd+>3iC?Z%8C)^+zANy_5?Ff zE&Pzm+b5z#GCvWYLXz%DaHwR2ExAZST+o=?+8?%61IEkiQik|gu-xT z<&%0meV+1j)tysX>6aW8gEXZ+TMP&!>_A=`UL}DVf(g1*X5#Ybg%?;Ch=N`~{j`_8 z-6Zlbw{S1bQC;iU5S+s*nM@Sy+fGyezWlkrsNCV{wGp2}M?jllXld2BshlS&BYVG5 zLm%+qxS`}X2IZ0t(=^jrF(lbVbYiBa4u*Hh7aG0Ta1dJ)nrbY54wnzf2}wj^pNQnW zMBL@Rm1a6Ox7et1ik%BD86}Vpxq9TWjkn7%E#KNww+Gaw3#>P^_>euLh10hqE z9ZA~~hcxx;tb1X;PZ?oqdSLu4fuUKzPe2fXUf^N*nv{I4D{gSEst|_`9H3W-tknL(9J7jFWVlZN!uBE zBkEFrMil;H?B-Bg3iW{6fZ)&eT#i>auSU*YKMoxF3FNk|Bp3HSPF!S+FJ;eH@x zJQ>FK;pUbT0u8gDr;6c8SNo}ao_AB{J57!3|nrs-^Z zoYN&1jhEHlMJVQ&L!dxNfE=|3s$vybCqsb-7IdQZXBfRQCf9-Er+9-oe=OHETFP>S zF(4@RJN6!aygyHBRb63X7dRy^>4r;o`N`L?A+;{`b!0xnT0(tc#PB9wVEeX2zAox$ zR3A=X--i1-Xwk^d=M^2i_S0uLY)eMhQ1z8LNT~SHB zVy?c9A1v!vvjvUx@M6V!y)4T7AvyeO>=RKsQ7Lb#rbkA6oxouK=5+8u4A4aY^PuAI zHtkGDVf;?S{<%1}tvVK}qIyUtk9VBurL+Nbp$D{9fB!w7*2jgv{WsiZ$iv)GS5E1p z@Mj?n2wfz7I!IdeYm3UuVZ04pmUHEq*O((YbY{6D#Z~N~c`e<=KcADm=<UtP^7OP-!^hDFB}VQ*iY!VG045{^ zo4z^8;Mr`rnL#0gAbbSNjw?R+~3COI$=&@N;tq6Y2&=4nC+li?r1rg~< z_TKts;YG#=p1ptR=sdbt#aqj%3o%mF@6*n+JU9sZk^CcAz{GftG4^`<$MMgakYk;c z6tFfShzLqD$2akNxrS?-jTQT9o3MGT`}yJiBVG5;b$HP8RbvMW5C{9+A>#EVCJG8W zD`J?R5uWr6+Dn!46okAAXR4zap`;@GMaHGYA~u6e9l-hYhnYPf)#8hF@@r#QeK8Yj zKdj!U$|tD0@k@7;`$b;@smbS$-H$s+-vRwXPJ>g!rY^%W z7J-*v1e}qWlNc{hKX#l9k=YxV<+R0R!4`5g)&`dccp?T(j~Cjr zB*~E)v~ASL`t(x4m(1;n9ex6aE)(!CKYyCN%z~n6K0TO8Rr^V%o?B}mxTW~Nj%hg0+L0=(;-lYM*F<}dSbr~E|Etr8Gx|KJH7^`Z7JsM9wBqb<_iC@-aB*<$O?#pC zSG``&IO+5Q0Z{bLHcB~h6FMH)?zskYO1CbaQ5?;1sbPE4Ve85}vCP#~ z8-e+<8h@t1dn4j%?4oVd4NLESraR_V{|r|ZF?O-+nRLfksQ(o2Z&}6AUey5GP{9?lHjS1>Q3GqYbolH5 z?brAV_Sa*KkzNwBH*i(@%o8xZ;BjL2PZBNUyB>Q*n%Tft^u3k$$c7B`VPnx3ZH)ut zhI2h9;WfWawyy>wwRQX&WpdF9j+^gw7nR^GgIf&Lt^(oKWw*3FXC=NwF?$a&%|z1l zbOVGDj`NXvpUh*FSbFthm;o9F@MKUDSp@apo%l zxOzf6RTUq0%ElBWY&R?}I|*lG$3*?BGODzAy6!9!_rb>VjXYFMPTsBuT2ZfXzw5%G zQpyDGK2+uyL0qtz*k1HtfV4^CrMoX(ceUT5CbB%SSYHX`baTrIS~ZEC?5a?0TY!YZ83y% zXl#tCf8m0T{mpHqgBkj%f5;y|CvGlWJxZh~0`#IosawYbcyI;ne&w}DjFSkJBCL)H z&hSJO==hMGq{(;s8fM1f?^W-52?S=9l23yoIqrlw&Y4Jrfzw_h!8Bl%%sVWL;U3Hz zIBQ^R&uJZxQA7lHf4fK~3Uc%P8K5$o#~DJ}~aj^>MRTZ)X_opb&OSctFpaf>TPkm&CM1 zanJ$9t^2ac%$D)C51{r-iLdPi*FL`vd}FzG>U5_HWb*tpp7%1FFX8^qs#1BsY%+$; z$FrZNXQ}JTK&+zlS6pqRYxF}Qp~6TltFEm!FyFpxZ|sPRN@RId2ArLU|NXHqzxsN~vo%{%xJG96iyxLn{ubXh$U|$OoHBeMX!^kZkElq%7I#d26 zaa2rn$#L?GIh<9OzKn3hWYSuR?*A|q8|=v;MER(&F-JLQV?tP=Nv9fWr{LaqAO|m9 zvU**AIjEp6-#W0129sQhGj|Ds+ff74d*()1(x}MF`;>L=Fa8|9UD)Bur_eG!>582e zU<&VRV|JB2Dq8bKi`jXVA~edKibe$O$74caPcjpOgvS-vlGFA@{UX3FFToD3{T-NH zvi718J1>nk9%byK`3u962r4r)a5nfdMA`;NV|G_kkWdL{F{Dj;{nN)W0pgO3Z@s@q zOJ68xfJS(GYTmEU5MEdDZ_Gd#z7m^<3w`EQHHv_vHU zjWM17VHpu3#f2e$L`$Ab0zouNF~AcjKRk>4or-sn`E$p8YnS7C#H;lKSDjcu(0d+l z>hHz6GTNBnnJhjha=G{W?6&ajO)U} zrTBpIbG*0GM9-I=S@T7|iAYXYe*jqYUacNU} z{oIKy(U@CGJwd_|Cx|7yHwlL~uhR)%1^jvc=ai+nua!Kd>Awo$sY5~4K^J8dGXlkPva61vN|~NQL@X{FKj7`7<8SarG;PiP( zwv)`jiatpOY%JA25Xj4zp)V0ga5^WDE~haGH?;&%@hW=P7yxV58}tR`K4DU;{n$%eY(uzfl}!Cl`l)K8HUQ@dD? zX@N)&hbW2Im3G);vHMTOO})$Sp-RrjNFbKHt6_Vt}o`#X2krHN09LU#3 z1tkFO|F=j%%&5x(J|jppxTyXEOA~;C;`C3G@PC{BTlFAJHKYNGh-?ih;0tBMvIa9c JgX(`Y{tr%wcq#w@ diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 493aa94b7..1bc686dad 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15342,43 +15342,6 @@ console.log("Kind of the first field: " + field.kind); } }); -'Word.Field#data:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - - // Gets the first Addin field in the document and sets its data. - - await Word.run(async (context) => { - var myFieldTypes = new Array(); - myFieldTypes[0] = Word.FieldType.addin; - - const addinFields = context.document.body.fields.getByTypes(myFieldTypes); - let fields = addinFields.load("items"); - await context.sync(); - - if (fields.items.length === 0) { - console.log("No Addin fields in this document."); - } else { - fields.load(); - await context.sync(); - - const firstAddinField = fields.items[0]; - firstAddinField.load("code,result,data"); - await context.sync(); - - console.log("The data of the Addin field before being set:"); - console.log(firstAddinField.data); - - const data = $("#input-reference").val(); - firstAddinField.data = data; - firstAddinField.load("data"); - await context.sync(); - - console.log("The data of the Addin field after being set:"); - console.log(firstAddinField.data); - } - }); 'Word.Field#kind:member': - >- // Link to full sample: @@ -15543,36 +15506,21 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Gets the first Addin field in the document and sets its data. + // Inserts a Date field before selection. await Word.run(async (context) => { - var myFieldTypes = new Array(); - myFieldTypes[0] = Word.FieldType.addin; + var range = context.document.getSelection().getRange(); + + const field = range.insertField(Word.InsertLocation.before, Word.FieldType.date, '\\@ "M/d/yyyy h:mm am/pm"', true); - const addinFields = context.document.body.fields.getByTypes(myFieldTypes); - let fields = addinFields.load("items"); + field.load("result,code"); await context.sync(); - if (fields.items.length === 0) { - console.log("No Addin fields in this document."); + if (field.isNullObject) { + console.log("There are no fields in this document."); } else { - fields.load(); - await context.sync(); - - const firstAddinField = fields.items[0]; - firstAddinField.load("code,result,data"); - await context.sync(); - - console.log("The data of the Addin field before being set:"); - console.log(firstAddinField.data); - - const data = $("#input-reference").val(); - firstAddinField.data = data; - firstAddinField.load("data"); - await context.sync(); - - console.log("The data of the Addin field after being set:"); - console.log(firstAddinField.data); + console.log("Code of the field: " + field.code); + console.log("Result of the field: " + JSON.stringify(field.result)); } }); 'Word.HeaderFooterType:enum': From ccf9d9ce5e593ad46f9f5c6004aa3f6fb0f88b5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jun 2023 20:33:07 +0000 Subject: [PATCH 003/156] Bump minimatch from 3.0.4 to 3.1.2 Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2. - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2) --- updated-dependencies: - dependency-name: minimatch dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 44cdeb503..b7063e682 100644 --- a/yarn.lock +++ b/yarn.lock @@ -643,9 +643,9 @@ lodash@^4.17.21: integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" From f7e62452a4619c172bd77c9ec3c9f9c32f8f5b72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jun 2023 20:35:32 +0000 Subject: [PATCH 004/156] Bump jszip from 3.7.1 to 3.10.1 Bumps [jszip](https://github.com/Stuk/jszip) from 3.7.1 to 3.10.1. - [Changelog](https://github.com/Stuk/jszip/blob/main/CHANGES.md) - [Commits](https://github.com/Stuk/jszip/compare/v3.7.1...v3.10.1) --- updated-dependencies: - dependency-name: jszip dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 44cdeb503..18ec9d9f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -544,14 +544,14 @@ jsonfile@^3.0.0: graceful-fs "^4.1.6" jszip@^3.5.0: - version "3.7.1" - resolved "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz" - integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: lie "~3.3.0" pako "~1.0.2" readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" + setimmediate "^1.0.5" lazystream@^1.0.0: version "1.0.0" @@ -801,12 +801,7 @@ semver@^5.3.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -setimmediate@~1.0.4: +setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= From b1e06e3f65c6444d60ce7fa686d75a3181877022 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 10 Jul 2023 14:41:00 -0700 Subject: [PATCH 005/156] [Outlook] (internet headers) Correct snippets (#801) --- playlists-prod/outlook.yaml | 7 +++++-- playlists/outlook.yaml | 7 +++++-- .../get-internet-headers-message-read.yaml | 11 ++++++----- ...-custom-internet-headers-message-compose.yaml | 12 ++++++------ snippet-extractor-output/snippets.yaml | 16 ++++++++-------- 5 files changed, 30 insertions(+), 23 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 9164cfb85..8f0b422b5 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -424,11 +424,14 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml group: Mime Headers - api_set: {} + api_set: + Mailbox: '1.8' - id: outlook-mime-headers-manage-custom-internet-headers-message-compose name: Work with custom internet headers fileName: manage-custom-internet-headers-message-compose.yaml - description: 'Set, get, and remove custom internet headers on a message in Compose mode.' + description: >- + Sets, gets, and removes custom internet headers on a message in Compose + mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml group: Mime Headers diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 9d85d789b..51d8ab448 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -424,11 +424,14 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml group: Mime Headers - api_set: {} + api_set: + Mailbox: '1.8' - id: outlook-mime-headers-manage-custom-internet-headers-message-compose name: Work with custom internet headers fileName: manage-custom-internet-headers-message-compose.yaml - description: 'Set, get, and remove custom internet headers on a message in Compose mode.' + description: >- + Sets, gets, and removes custom internet headers on a message in Compose + mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml group: Mime Headers diff --git a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml index abd3744ce..20f9f0f0b 100644 --- a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml +++ b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -2,7 +2,8 @@ id: outlook-mime-headers-get-internet-headers-message-read name: Get internet headers description: Gets internet headers on a message in Read mode. host: OUTLOOK -api_set: {} +api_set: + Mailbox: '1.8' script: content: | $("#run").click(run); @@ -11,14 +12,14 @@ script: Office.context.mailbox.item.getAllInternetHeadersAsync(function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Internet headers received successfully"); - if (asyncResult.value.match(/x-preferred-fruit:.*/gim)) { - console.log("Sender's preferred fruit: " + asyncResult.value.match(/x-preferred-fruit:.*/gim)[0].slice(19)); + if (asyncResult.value.match(/preferred-fruit:.*/gim)) { + console.log("Sender's preferred fruit: " + asyncResult.value.match(/preferred-fruit:.*/gim)[0].slice(17)); } else { console.log("Didn't receive header with sender's preferred fruit"); } - if (asyncResult.value.match(/x-preferred-vegetable:.*/gim)) { + if (asyncResult.value.match(/preferred-vegetable:.*/gim)) { console.log( - "Sender's preferred vegetable: " + asyncResult.value.match(/x-preferred-vegetable:.*/gim)[0].slice(23) + "Sender's preferred vegetable: " + asyncResult.value.match(/preferred-vegetable:.*/gim)[0].slice(21) ); } else { console.log("Didn't receive header with sender's preferred vegetable"); diff --git a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml index f1690ebef..945d95b6b 100644 --- a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml +++ b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -1,6 +1,6 @@ id: outlook-mime-headers-manage-custom-internet-headers-message-compose name: Work with custom internet headers -description: 'Set, get, and remove custom internet headers on a message in Compose mode.' +description: 'Sets, gets, and removes custom internet headers on a message in Compose mode.' host: OUTLOOK api_set: Mailbox: '1.8' @@ -13,7 +13,7 @@ script: // Set custom internet headers. function setCustomHeaders() { Office.context.mailbox.item.internetHeaders.setAsync( - { "x-preferred-fruit": "orange", "x-preferred-vegetable": "broccoli", "x-best-vegetable": "spinach" }, + { "preferred-fruit": "orange", "preferred-vegetable": "broccoli", "best-vegetable": "spinach" }, function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Successfully set headers"); @@ -28,7 +28,7 @@ script: // Get custom internet headers. function getSelectedCustomHeaders() { Office.context.mailbox.item.internetHeaders.getAsync( - ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], + ["preferred-fruit", "preferred-vegetable", "best-vegetable", "nonexistent-header"], function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Selected headers: " + JSON.stringify(asyncResult.value)); @@ -42,7 +42,7 @@ script: // Remove custom internet headers. function removeSelectedCustomHeaders() { Office.context.mailbox.item.internetHeaders.removeAsync( - ["x-best-vegetable", "x-nonexistent-header"], + ["best-vegetable", "nonexistent-header"], function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Successfully removed selected headers"); @@ -55,9 +55,9 @@ script: /* Sample output: Successfully set headers - Selected headers: {"x-best-vegetable":"spinach","x-preferred-fruit":"orange","x-preferred-vegetable":"broccoli"} + Selected headers: {"best-vegetable":"spinach","preferred-fruit":"orange","preferred-vegetable":"broccoli"} Successfully removed selected headers - Selected headers: {"x-preferred-fruit":"orange","x-preferred-vegetable":"broccoli"} + Selected headers: {"preferred-fruit":"orange","preferred-vegetable":"broccoli"} */ language: typescript template: diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 63f063afd..ef1d5b203 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9818,7 +9818,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml Office.context.mailbox.item.internetHeaders.getAsync( - ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], + ["preferred-fruit", "preferred-vegetable", "best-vegetable", "nonexistent-header"], function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Selected headers: " + JSON.stringify(asyncResult.value)); @@ -9833,7 +9833,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml Office.context.mailbox.item.internetHeaders.removeAsync( - ["x-best-vegetable", "x-nonexistent-header"], + ["best-vegetable", "nonexistent-header"], function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Successfully removed selected headers"); @@ -9848,7 +9848,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml Office.context.mailbox.item.internetHeaders.setAsync( - { "x-preferred-fruit": "orange", "x-preferred-vegetable": "broccoli", "x-best-vegetable": "spinach" }, + { "preferred-fruit": "orange", "preferred-vegetable": "broccoli", "best-vegetable": "spinach" }, function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Successfully set headers"); @@ -11510,7 +11510,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml Office.context.mailbox.item.internetHeaders.getAsync( - ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], + ["preferred-fruit", "preferred-vegetable", "best-vegetable", "nonexistent-header"], function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Selected headers: " + JSON.stringify(asyncResult.value)); @@ -11989,14 +11989,14 @@ (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Internet headers received successfully"); - if (asyncResult.value.match(/x-preferred-fruit:.*/gim)) { - console.log("Sender's preferred fruit: " + asyncResult.value.match(/x-preferred-fruit:.*/gim)[0].slice(19)); + if (asyncResult.value.match(/preferred-fruit:.*/gim)) { + console.log("Sender's preferred fruit: " + asyncResult.value.match(/preferred-fruit:.*/gim)[0].slice(17)); } else { console.log("Didn't receive header with sender's preferred fruit"); } - if (asyncResult.value.match(/x-preferred-vegetable:.*/gim)) { + if (asyncResult.value.match(/preferred-vegetable:.*/gim)) { console.log( - "Sender's preferred vegetable: " + asyncResult.value.match(/x-preferred-vegetable:.*/gim)[0].slice(23) + "Sender's preferred vegetable: " + asyncResult.value.match(/preferred-vegetable:.*/gim)[0].slice(21) ); } else { console.log("Didn't receive header with sender's preferred vegetable"); From 7efdd3a45b3e68e3af7bfc229646b4b2c5222030 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 13 Jul 2023 15:11:09 -0700 Subject: [PATCH 006/156] [Word] (Setting) Map to key and value props (#806) --- snippet-extractor-metadata/word.xlsx | Bin 19972 -> 20070 bytes snippet-extractor-output/snippets.yaml | 62 +++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index ae40237c6877145b8b3850bd1e4118ba5fbb7c9b..9b0bd554d9d3e7cce261e47cf1ced9998d6ca1f6 100644 GIT binary patch delta 12157 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 E1^3kkR{#J2 delta 12052 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ef1d5b203..e97287e1c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -16959,6 +16959,68 @@ await context.sync(); }); +'Word.Setting#key:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Adds a new custom setting or + + // edits the value of an existing one. + + await Word.run(async (context) => { + const key = $("#key") + .val() + .toString(); + + if (key == "") { + console.error("Key shouldn't be empty"); + return; + } + + const value = $("#value") + .val() + .toString(); + + const settings = context.document.settings; + const setting = settings.add(key, value); + setting.load(); + await context.sync(); + + console.log("Setting added or edited:"); + console.log(setting); + }); +'Word.Setting#value:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Adds a new custom setting or + + // edits the value of an existing one. + + await Word.run(async (context) => { + const key = $("#key") + .val() + .toString(); + + if (key == "") { + console.error("Key shouldn't be empty"); + return; + } + + const value = $("#value") + .val() + .toString(); + + const settings = context.document.settings; + const setting = settings.add(key, value); + setting.load(); + await context.sync(); + + console.log("Setting added or edited:"); + console.log(setting); + }); 'Word.SettingCollection:class': - >- // Link to full sample: From 2626b5f7b9b07f8cfc60d0b160bbb2a0681e55b9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 13 Jul 2023 15:46:03 -0700 Subject: [PATCH 007/156] [Word] (list) Log list properties (#805) * [Word] (list) Log list properties * map --- samples/word/20-lists/organize-list.yaml | 35 +++++++- snippet-extractor-metadata/word.xlsx | Bin 20070 -> 20091 bytes snippet-extractor-output/snippets.yaml | 97 +++++++++++------------ 3 files changed, 81 insertions(+), 51 deletions(-) diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 00113c034..9c17b9344 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -9,6 +9,7 @@ api_set: script: content: | $("#insert-list").click(() => tryCatch(insertOrganizeList)); + $("#get-list-props").click(() => tryCatch(getListProps)); $("#setup").click(() => tryCatch(setup)); async function insertOrganizeList() { @@ -41,12 +42,39 @@ script: list.load("levelTypes"); await context.sync(); + }); + } + + async function getListProps() { + // Gets information about the first list in the document. + await Word.run(async (context) => { + const lists = context.document.body.lists; + lists.load("items"); + + await context.sync(); + + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); + + await context.sync(); const levelTypes = list.levelTypes; - console.log("Level types of this list:"); + console.log("Level types of the first list:"); for (let i = 0; i < levelTypes.length; i++) { console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); } + + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } }); } @@ -87,8 +115,11 @@ template:

Try it out

+
language: html style: diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 9b0bd554d9d3e7cce261e47cf1ced9998d6ca1f6..fe09e6436752c198c78b6e6fdde7dbb8938a4749 100644 GIT binary patch delta 11001 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 Q>Lv<(qDOL5`Y+>u0r4cnK>z>% delta 10926 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index e97287e1c..a3430ed45 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15862,12 +15862,6 @@ list.load("levelTypes"); await context.sync(); - - const levelTypes = list.levelTypes; - console.log("Level types of this list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } }); 'Word.List#setLevelNumbering:member(1)': - >- @@ -15905,55 +15899,78 @@ list.load("levelTypes"); await context.sync(); - - const levelTypes = list.levelTypes; - console.log("Level types of this list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } }); -'Word.List#levelTypes:member': +'Word.List#levelExistences:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Inserts a list starting with the first paragraph then set numbering and - bullet types of the list items. + // Gets information about the first list in the document. await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); + const lists = context.document.body.lists; + lists.load("items"); await context.sync(); - // Use the first paragraph to start a new list. - const list = paragraphs.items[0].startNewList(); - list.load("$none"); + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); await context.sync(); - // To add new items to the list, use Start or End on the insertLocation parameter. - list.insertParagraph("New list item at the start of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } - // Set numbering for list level 1. - list.setLevelNumbering(0, Word.ListNumbering.arabic); + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } + }); +'Word.List#levelTypes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Set bullet type for list level 5. - list.setLevelBullet(4, Word.ListBullet.arrow); + // Gets information about the first list in the document. - // Set list level for the last item in this list. - paragraph.listItem.level = 4; + await Word.run(async (context) => { + const lists = context.document.body.lists; + lists.load("items"); - list.load("levelTypes"); + await context.sync(); + + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); await context.sync(); const levelTypes = list.levelTypes; - console.log("Level types of this list:"); + console.log("Level types of the first list:"); for (let i = 0; i < levelTypes.length; i++) { console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); } + + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } }); 'Word.ListItem#level:member': - >- @@ -16022,12 +16039,6 @@ list.load("levelTypes"); await context.sync(); - - const levelTypes = list.levelTypes; - console.log("Level types of this list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } }); 'Word.ListLevelType:enum': - >- @@ -16065,12 +16076,6 @@ list.load("levelTypes"); await context.sync(); - - const levelTypes = list.levelTypes; - console.log("Level types of this list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } }); 'Word.ListNumbering:enum': - >- @@ -16108,12 +16113,6 @@ list.load("levelTypes"); await context.sync(); - - const levelTypes = list.levelTypes; - console.log("Level types of this list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } }); 'Word.LocationRelation:enum': - >- From e6e02e8f920d7206d90168fb46c649bb7e7fd903 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 14 Jul 2023 09:10:47 -0700 Subject: [PATCH 008/156] [Word] (range) Compare with cursor location (#804) * [Word] (range) Compare with cursor location * Minor updates --- samples/word/35-ranges/compare-location.yaml | 32 +++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml index 5b2f78808..e52848e22 100644 --- a/samples/word/35-ranges/compare-location.yaml +++ b/samples/word/35-ranges/compare-location.yaml @@ -9,6 +9,7 @@ api_set: script: content: | $("#compare").click(() => tryCatch(compareLocations)); + $("#compare-to-selection").click(() => tryCatch(compareWithSelection)); $("#setup").click(() => tryCatch(setup)); async function compareLocations() { @@ -30,6 +31,27 @@ script: }); } + async function compareWithSelection() { + // Compares the location of the second paragraph in relation to the cursor's location. + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("items"); + + await context.sync(); + + const secondParagraphAsRange = paragraphs.items[1].getRange(); + const selection = context.document.getSelection(); + + const comparedLocation = secondParagraphAsRange.compareLocationWith(selection); + + await context.sync(); + + console.log( + `Location of the second paragraph in relation to the cursor's location: ${comparedLocation.value}` + ); + }); + } + async function setup() { await Word.run(async (context) => { const body = context.document.body; @@ -71,9 +93,17 @@ template:

Try it out

+

Compare location of first paragraph with location of second paragraph

+ +

Compare location of second paragraph with cursor's location

+

+

Move cursor or select text in the document.
+ +

language: html style: From 6dd8ff795861e2bcb7391a35fe627c0153a3245b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 18 Jul 2023 11:46:09 -0700 Subject: [PATCH 009/156] [Word] (document) Manage body --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + .../50-document/insert-external-document.yaml | 2 +- .../50-document/insert-section-breaks.yaml | 2 +- samples/word/50-document/manage-body.yaml | 423 ++++++++++++++++++ .../50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- .../manage-custom-xml-part-ns.yaml | 2 +- .../50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- .../word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- samples/word/50-document/save-close.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 20091 -> 20593 bytes snippet-extractor-output/snippets.yaml | 307 +++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 18 files changed, 761 insertions(+), 11 deletions(-) create mode 100644 samples/word/50-document/manage-body.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 7e06a63fd..cfd4ccd77 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -268,6 +268,15 @@ group: Tables api_set: WordApi: '1.3' +- id: word-document-manage-body + name: Manage body + fileName: manage-body.yaml + description: Shows how to manage the document body. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + group: Document + api_set: + WordApi: '1.2' - id: word-document-insert-section-breaks name: Add a section fileName: insert-section-breaks.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index da4f1f61a..040082612 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -268,6 +268,15 @@ group: Tables api_set: WordApi: '1.3' +- id: word-document-manage-body + name: Manage body + fileName: manage-body.yaml + description: Shows how to manage the document body. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-body.yaml + group: Document + api_set: + WordApi: '1.2' - id: word-document-insert-section-breaks name: Add a section fileName: insert-section-breaks.yaml diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 04d8ee21f..d48cabbea 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 id: word-document-insert-external-document name: Insert an external document description: Inserts the text of an external document into the current document. diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index 3e9359d19..f86ed8b2b 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 2 id: word-document-insert-section-breaks name: Add a section description: Shows how to insert section breaks in the document. diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml new file mode 100644 index 000000000..ae0ccbdb2 --- /dev/null +++ b/samples/word/50-document/manage-body.yaml @@ -0,0 +1,423 @@ +order: 1 +id: word-document-manage-body +name: Manage body +description: Shows how to manage the document body. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.2' +script: + content: | + $("#get-font-props").click(() => tryCatch(getFontProperties)); + $("#get-html").click(() => tryCatch(getHTML)); + $("#get-ooxml").click(() => tryCatch(getOOXML)); + $("#get-text").click(() => tryCatch(getText)); + $("#insert-content-control").click(() => tryCatch(insertContentControl)); + $("#insert-page-break").click(() => tryCatch(insertPageBreak)); + $("#file").change(getBase64); + $("#insert-external-body").click(() => tryCatch(insertExternalBody)); + $("#insert-html").click(() => tryCatch(insertHTML)); + $("#insert-image-inline").click(() => tryCatch(insertImageInline)); + $("#insert-ooxml").click(() => tryCatch(insertOOXML)); + $("#insert-text").click(() => tryCatch(insertText)); + $("#select").click(() => tryCatch(select)); + $("#clear").click(() => tryCatch(clear)); + $("#insert-paragraph").click(() => tryCatch(insertParagraph)); + $("#setup").click(() => tryCatch(setup)); + + async function getFontProperties() { + // Gets the style and the font size, font name, and font color properties on the body object. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to load font and style information for the document body. + body.load("font/size, font/name, font/color, style"); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + // Show font-related property values on the body object. + const results = + "Font size: " + + body.font.size + + "; Font name: " + + body.font.name + + "; Font color: " + + body.font.color + + "; Body style: " + + body.style; + + console.log(results); + }); + } + + async function getHTML() { + // Gets the HTML that represents the content of the body. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to get the HTML contents of the body. + const bodyHTML = body.getHtml(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (HTML): " + bodyHTML.value); + }); + } + + async function getOOXML() { + // Gets the OOXML that represents the content of the body. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to get the OOXML contents of the body. + const bodyOOXML = body.getOoxml(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (OOXML): " + bodyOOXML.value); + }); + } + + async function getText() { + // Gets the text content of the body. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to load the text in document body. + body.load("text"); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (text): " + body.text); + }); + } + + async function insertContentControl() { + // Creates a content control using the document body. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to wrap the body in a content control. + body.insertContentControl(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Wrapped the body in a content control."); + }); + } + + async function insertPageBreak() { + // Inserts a page break at the beginning of the document. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert a page break at the start of the document body. + body.insertBreak(Word.BreakType.page, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added a page break at the start of the document body."); + }); + } + + let externalDocument; + + function getBase64() { + // Retrieve the file and set up an HTML FileReader element. + const myFile = document.getElementById("file"); + const reader = new FileReader(); + + reader.onload = (event) => { + // Remove the metadata before the Base64-encoded string. + const startIndex = reader.result.toString().indexOf("base64,"); + externalDocument = reader.result.toString().substr(startIndex + 7); + }; + + // Read the file as a data URL so that we can parse the Base64-encoded string. + reader.readAsDataURL(myFile.files[0]); + } + + async function insertExternalBody() { + // Inserts the body from the external document at the beginning of this document. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert the Base64-encoded string representation of the body of the selected .docx file at the beginning of the current document. + body.insertFileFromBase64(externalDocument, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added Base64-encoded text to the beginning of the document body."); + }); + } + + async function insertHTML() { + // Inserts the HTML at the beginning of this document. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert HTML at the beginning of the document. + body.insertHtml("This is text inserted with body.insertHtml()", Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("HTML added to the beginning of the document body."); + }); + } + + async function insertImageInline() { + // Inserts an image inline at the beginning of this document. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Base64-encoded image to insert inline. + const base64EncodedImg = + "iVBORw0KGgoAAAANSUhEUgAAAB4AAAANCAIAAAAxEEnAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACFSURBVDhPtY1BEoQwDMP6/0+XgIMTBAeYoTqso9Rkx1zG+tNj1H94jgGzeNSjteO5vtQQuG2seO0av8LzGbe3anzRoJ4ybm/VeKEerAEbAUpW4aWQCmrGFWykRzGBCnYy2ha3oAIq2MloW9yCCqhgJ6NtcQsqoIKdjLbFLaiACnYyf2fODbrjZcXfr2F4AAAAAElFTkSuQmCC"; + + // Queue a command to insert a Base64-encoded image at the beginning of the current document. + body.insertInlinePictureFromBase64(base64EncodedImg, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added a Base64-encoded image to the beginning of the document body."); + }); + } + + async function insertOOXML() { + // Inserts OOXML at the beginning of this document. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert OOXML at the beginning of the body. + body.insertOoxml( + "This text has formatting directly applied to achieve its font size, color, line spacing, and paragraph spacing.", + Word.InsertLocation.start + ); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added OOXML to the beginning of the document body."); + }); + + // Read "Understand when and how to use Office Open XML in your Word add-in" for guidance on working with OOXML. + // https://learn.microsoft.com/office/dev/add-ins/word/create-better-add-ins-for-word-with-office-open-xml + + // The Word-Add-in-DocumentAssembly sample shows how you can use this API to assemble a document. + // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly + } + + async function insertText() { + // Inserts text at the beginning of this document. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert text at the beginning of the current document. + body.insertText('This is text inserted with body.insertText()', Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log('Text added to the beginning of the document body.'); + }); + } + + async function select() { + // Selects the entire body. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to select the document body. + // The Word UI will move to the selected document body. + body.select(); + + console.log("Selected the document body."); + }); + } + + async function clear() { + // Clears out the content from the document body. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to clear the contents of the body. + body.clear(); + + console.log("Cleared the body contents."); + }); + + // The Silly stories add-in sample shows how the clear method can be used to clear the contents of a document. + // https://aka.ms/sillystorywordaddin + } + + async function insertParagraph() { + // Inserts a paragraph at the end of this document. + // Run a batch operation against the Word object model. + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert a paragraph at the end of the current document. + body.insertParagraph("Content of a new paragraph", Word.InsertLocation.end); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Paragraph added at the end of the document body."); + }); + + // The Word-Add-in-DocumentAssembly sample shows how you can use the insertParagraph method to assemble a document. + // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", + "Start" + ); + body.paragraphs + .getLast() + .insertText( + "To make your document look professionally produced, Word provides header, footer, cover page, and text box designs that complement each other. For example, you can add a matching Online cover page, header, and sidebar. Click Insert and then choose the Online elements you want from the different Online galleries.", + "Replace" + ); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample shows how to manage the content of the document body. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ + + + + + +

Choose a Word document to copy its body into the current document.

+
+ +
+
+ + + + + + + + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index fea7222e8..74b37eadc 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: word-document-manage-change-tracking name: Track changes description: This sample shows how to get and set the change tracking mode and get the before and after of reviewed text. diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 021909e92..3cc873b13 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: word-document-manage-comments name: Manage comments description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 3a309aaba..891a3362c 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: word-document-manage-custom-xml-part-ns name: Manage a CustomXmlPart with the namespace description: 'This sample shows how to add, query, replace, edit, and delete a custom XML part in a document.' diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 602513686..9c1e35ae1 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: word-document-manage-custom-xml-part name: Manage a CustomXmlPart without the namespace description: 'This sample shows how to add, query, edit, and delete a custom XML part in a document.' diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index bb4b15b8f..2c0f8fc13 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: word-document-manage-fields name: Manage fields description: 'This sample shows how to perform basic operations on fields, including insert, get, and delete.' diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index c08f96f74..2659634c1 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: word-document-manage-footnotes name: Manage footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 33c496f41..b0c060fbc 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: word-document-manage-settings name: Manage settings description: 'This sample shows how to add, edit, get, and delete custom settings on a document.' diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 64294c4ee..15e8ae404 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: word-document-manage-styles name: Manage styles description: This sample shows how to perform operations on the styles in the current document and how to add and delete custom styles. diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 4a4672679..4a5b6c8ad 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: word-document-save-close name: Manage document save and close description: Shows how to manage saving and closing document. diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index fe09e6436752c198c78b6e6fdde7dbb8938a4749..3a0785c53e35b2635db9b395ddc642ddf456ea0b 100644 GIT binary patch delta 12540 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 HKbZdo@|jTl delta 12035 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a3430ed45..13e240fa3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13858,6 +13858,30 @@ console.log("Styles from the other document:"); console.log(retrievedStyles.value); }); +'Word.Body#clear:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Clears out the content from the document body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to clear the contents of the body. + body.clear(); + + console.log("Cleared the body contents."); + }); + + + // The Silly stories add-in sample shows how the clear method can be used to + clear the contents of a document. + + // https://aka.ms/sillystorywordaddin 'Word.Body#getComments:member(1)': - >- // Link to full sample: @@ -13875,6 +13899,195 @@ console.log("All comments:"); console.log(comments); }); +'Word.Body#getHtml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the HTML that represents the content of the body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to get the HTML contents of the body. + const bodyHTML = body.getHtml(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (HTML): " + bodyHTML.value); + }); +'Word.Body#getOoxml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the OOXML that represents the content of the body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to get the OOXML contents of the body. + const bodyOOXML = body.getOoxml(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (OOXML): " + bodyOOXML.value); + }); +'Word.Body#insertBreak:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts a page break at the beginning of the document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert a page break at the start of the document body. + body.insertBreak(Word.BreakType.page, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added a page break at the start of the document body."); + }); +'Word.Body#insertContentControl:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Creates a content control using the document body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to wrap the body in a content control. + body.insertContentControl(); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Wrapped the body in a content control."); + }); +'Word.Body#insertFileFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts the body from the external document at the beginning of this + document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert the Base64-encoded string representation of the body of the selected .docx file at the beginning of the current document. + body.insertFileFromBase64(externalDocument, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added Base64-encoded text to the beginning of the document body."); + }); +'Word.Body#insertHtml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts the HTML at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert HTML at the beginning of the document. + body.insertHtml("This is text inserted with body.insertHtml()", Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("HTML added to the beginning of the document body."); + }); +'Word.Body#insertInlinePictureFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts an image inline at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Base64-encoded image to insert inline. + const base64EncodedImg = + "iVBORw0KGgoAAAANSUhEUgAAAB4AAAANCAIAAAAxEEnAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACFSURBVDhPtY1BEoQwDMP6/0+XgIMTBAeYoTqso9Rkx1zG+tNj1H94jgGzeNSjteO5vtQQuG2seO0av8LzGbe3anzRoJ4ybm/VeKEerAEbAUpW4aWQCmrGFWykRzGBCnYy2ha3oAIq2MloW9yCCqhgJ6NtcQsqoIKdjLbFLaiACnYyf2fODbrjZcXfr2F4AAAAAElFTkSuQmCC"; + + // Queue a command to insert a Base64-encoded image at the beginning of the current document. + body.insertInlinePictureFromBase64(base64EncodedImg, Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added a Base64-encoded image to the beginning of the document body."); + }); +'Word.Body#insertOoxml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts OOXML at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert OOXML at the beginning of the body. + body.insertOoxml( + "This text has formatting directly applied to achieve its font size, color, line spacing, and paragraph spacing.", + Word.InsertLocation.start + ); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added OOXML to the beginning of the document body."); + }); + + + // Read "Understand when and how to use Office Open XML in your Word add-in" + for guidance on working with OOXML. + + // + https://learn.microsoft.com/office/dev/add-ins/word/create-better-add-ins-for-word-with-office-open-xml + + + // The Word-Add-in-DocumentAssembly sample shows how you can use this API to + assemble a document. + + // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly 'Word.Body#insertParagraph:member(1)': - >- // Link to full sample: @@ -13913,6 +14126,27 @@ await context.sync(); }); +'Word.Body#insertText:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts text at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert text at the beginning of the current document. + body.insertText('This is text inserted with body.insertText()', Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log('Text added to the beginning of the document body.'); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: @@ -13978,6 +14212,39 @@ } } }); +'Word.Body#font:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the style and the font size, font name, and font color properties on + the body object. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to load font and style information for the document body. + body.load("font/size, font/name, font/color, style"); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + // Show font-related property values on the body object. + const results = + "Font size: " + + body.font.size + + "; Font name: " + + body.font.name + + "; Font color: " + + body.font.color + + "; Body style: " + + body.style; + + console.log(results); + }); 'Word.Body#footnotes:member': - >- // Link to full sample: @@ -14064,6 +14331,25 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); +'Word.Body#select:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Selects the entire body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to select the document body. + // The Word UI will move to the selected document body. + body.select(); + + console.log("Selected the document body."); + }); 'Word.Body#tables:member': - >- // Link to full sample: @@ -14078,6 +14364,27 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); +'Word.Body#text:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the text content of the body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to load the text in document body. + body.load("text"); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Body contents (text): " + body.text); + }); 'Word.Body#type:member': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index b1cb5ebf6..ad4c739bc 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -27,6 +27,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml", + "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml", diff --git a/view/word.json b/view/word.json index 6d7009305..c74a0f538 100644 --- a/view/word.json +++ b/view/word.json @@ -27,6 +27,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-formatting.yaml", + "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.yaml", From 45f50e4545fda551046bf8e6617d23c9887236d6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 18 Jul 2023 13:55:02 -0700 Subject: [PATCH 010/156] [Word] Add mapping for Body.select (#810) --- snippet-extractor-metadata/word.xlsx | Bin 20593 -> 20590 bytes snippet-extractor-output/snippets.yaml | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 3a0785c53e35b2635db9b395ddc642ddf456ea0b..b37a74f0050aa3da8645284b0566f5a8ea5eab0a 100644 GIT binary patch delta 12596 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Selects the entire body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to select the document body. + // The Word UI will move to the selected document body. + body.select(); + + console.log("Selected the document body."); + }); 'Word.Body#fields:member': - >- // Link to full sample: From 53d2a85f6d513dfee974ac669befa1110bec4165 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 18 Jul 2023 16:20:12 -0700 Subject: [PATCH 011/156] [Word] Update mapping for ListLevelType enum (#812) --- snippet-extractor-metadata/word.xlsx | Bin 20590 -> 20560 bytes snippet-extractor-output/snippets.yaml | 43 ++++++++++++------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index b37a74f0050aa3da8645284b0566f5a8ea5eab0a..9c998740ca3c9db144da28290552deb347351046 100644 GIT binary patch delta 9231 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 delta 9264 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d21e27641..261bad8bb 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -16371,37 +16371,36 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Inserts a list starting with the first paragraph then set numbering and - bullet types of the list items. + // Gets information about the first list in the document. await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); + const lists = context.document.body.lists; + lists.load("items"); await context.sync(); - // Use the first paragraph to start a new list. - const list = paragraphs.items[0].startNewList(); - list.load("$none"); + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); await context.sync(); - // To add new items to the list, use Start or End on the insertLocation parameter. - list.insertParagraph("New list item at the start of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); - - // Set numbering for list level 1. - list.setLevelNumbering(0, Word.ListNumbering.arabic); - - // Set bullet type for list level 5. - list.setLevelBullet(4, Word.ListBullet.arrow); - - // Set list level for the last item in this list. - paragraph.listItem.level = 4; - - list.load("levelTypes"); + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } - await context.sync(); + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } }); 'Word.ListNumbering:enum': - >- From fd8716660b082bd29641d23a771d5be7bf95075b Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 20 Jul 2023 14:16:22 -0700 Subject: [PATCH 012/156] [Outlook] (spam reporting) Create snippet for the getAsFileAsync method (#802) * Create snippet for getAsFileAsync method * Update snippet description --- playlists-prod/outlook.yaml | 9 +++ playlists/outlook.yaml | 9 +++ .../99-preview-apis/get-eml-format.yaml | 61 +++++++++++++++++++ view-prod/outlook.json | 3 +- view/outlook.json | 3 +- 5 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 samples/outlook/99-preview-apis/get-eml-format.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 8f0b422b5..7d78d036f 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -775,5 +775,14 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-get-eml-format + name: Get the Base64-encoded EML format of a message (Message Read) + fileName: get-eml-format.yaml + description: Gets the Base64-encoded EML format of a message in read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml + group: Preview APIs api_set: Mailbox: preview \ No newline at end of file diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 51d8ab448..ba5549be3 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -777,3 +777,12 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-get-eml-format + name: Get the Base64-encoded EML format of a message (Message Read) + fileName: get-eml-format.yaml + description: Gets the Base64-encoded EML format of a message in read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml + group: Preview APIs + api_set: + Mailbox: preview diff --git a/samples/outlook/99-preview-apis/get-eml-format.yaml b/samples/outlook/99-preview-apis/get-eml-format.yaml new file mode 100644 index 000000000..7739f760b --- /dev/null +++ b/samples/outlook/99-preview-apis/get-eml-format.yaml @@ -0,0 +1,61 @@ +order: 4 +id: outlook-get-eml-format +name: Get the Base64-encoded EML format of a message (Message Read) +description: Gets the Base64-encoded EML format of a message in read mode. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#get-eml-format").click(getEmlFormat); + + function getEmlFormat() { + Office.context.mailbox.item.getAsFileAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Error encountered during processing: ${asyncResult.error.message}`); + return; + } + + console.log(asyncResult.value); + }); + } + language: typescript +template: + content: |- +
+

This sample shows how to get the Base64-encoded EML format of a message in read mode.

+

Required mode: Message Read

+
+ +
+

Try it out

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 83e0bc2ac..d93f69cd2 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -80,5 +80,6 @@ "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", - "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" + "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", + "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 83c8738c3..1ca9c97d1 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -80,5 +80,6 @@ "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/delay-message-delivery.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", - "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" + "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", + "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml" } \ No newline at end of file From dfa5b5ed3ff9b97dafc155d43b145eb48d2db062 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:34:59 -0700 Subject: [PATCH 013/156] [Outlook] (spam reporting) Add code snippets to event.completed options (#814) --- snippet-extractor-metadata/outlook.xlsx | Bin 24070 -> 24068 bytes snippet-extractor-output/snippets.yaml | 13 +++++++++++++ 2 files changed, 13 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index dff1cd06f4239bddbd40670b7921abe2d2b6ea8f..6d7626933693f0bf3b40f63467a7de0e69675b8a 100644 GIT binary patch delta 13807 zcmZ9zWl&sA)Gms<1`qD;?g4_k1b27WAcMQRy9AfP2MF#AL4reYcMX2YdrzJ3t1~~Q zruvzsz4p_)yH)m^OaCO{(y?uGnKk4_ zeJ;rl;KGTvgOQVS;T(Q{-DqOJ>(a-)n6zJfa3~O&el8IdGF(i%8~jFV&MCPIK^eo_ z!SwZpO;WTT&oi_}30Q8NX8#vk_y&!b)c@VHJ^A>`a9kQ0BHJ-KUAL`q$Ne#Ru|_bF z*$L3AF87TSRsL?%y>`3iFg^FA(^Wqfy27$pj4)LDEQEYQZC5DG$LL1N=?iv!Cfw7y zTJw6O=D~CCZw2A|+PsNQ*hpVh#8;s}ifZsqN`w@Hr%});chQ1wA8jBY*u;4xr}yrt zN_SVzvuPe4;>=zKFss}kF&cqUBRXO%N(K0%`XZZ2bgo^w8B-HXta%A1btzhcNmpB> zX^OCcH**-D6BCanuX>fEc%)n7Fs(`Px~E{sz#HkV3%kmeQs8*(kv-+<(Ns4xKI zJxu5q&&JwCto9^tFU2}j*9UR+?JfJB2CP3Z_M(&GzPMoj9Mi>zOQ9(m)xSvW>SDR_ z3nzP;)j|0bq@n(wZ3R? zs32?&;e?Y!3Onw+g>btOx%|O8G=C%o9r~#3Wap*3gsroI4GF{#;u4aG0_KHZ5 ziPZj}r_C-kCr8niJr9QK2K(oHbYq@LP0rGnDolq7?%OwGZq@K}jm8eiJZy=8yengH z6;ZN%IXN*_@Oo6z)Z$a~+<^U^9E8~Rj!q2lqW!*pV-uksDyoEHy${06p;CzV3S@ZZCdE-_REUMy zvtiN_$zaY-Z%Vt}3?uvgQ355ma$ne=a9_S_k67y4*9w|-u-kLqZE?r2&K3FcRJ^xd zAicys7buG=E{n84w_MPl*XaYZ0RKcB zA2^55D!0$yA*of|zD0gdnR7DIDxs$yZt65nt0J$EX1jel-idfLJfa1{HozdZj2$hk zSnfZEJBe}ZRKnT%sWUKV4M}%jDV7A`u*hfzU;|*Vj5t*1;@RdT@T-_$Bg(b~5nIm4 zJ~LRV{#=e8&b3ZP?~^Sr@SKWdTqZMRW-v)WlZ)B~J}cI8>1k;{kSpNR!p9XL{Jf%% zTLq-ZBGsj-mfa2#$n{KBzaB|y+C5e*b=DkOh1 z_ic-$0p?wQVDCv|dK`5sga$U%UTc}v_8oE1ay42i>Kr^3z4HlWguHjQ%X&?2yGk79 z?Gycq&9M9=+PX<(zoQF|w=9=Z1^H77H$LbXJ@^7e^Qq+FSce#PNDyho|3O6TQWOBy zu*?E+CfVC-FH0KRiXLyqiWMp}7w+xj1xWUEDC|sry zFyzSC^WjV@d9_u9B#GmlS}|!BKz}56pw>0=)9?Mc0PyDVc)!^8C*W}r@II~l{&Xk* zcs=(32zVZOxHkd_20R`CCQjN!-|mgxy&i9#Nda#=^+rFtUZnk>uUA+i7U5Kv&Xoua~Ue`9) z*%wfT7rgtux$v#*_z4n$SJtr^B9ZY;?`J6C_0C*?d}Vx600EhhIY#R+WdAY)g4IrC zw$EwEB?dTNItD`({e<6dip)L^Iu!T~11u%B1iwZ8wcujk=?3v+Vjx<_Z^HNkj0JvU z0}rS8sImHEkPI)YS^_XtNg0U{R?%)=9Opj6BUn|F<;KwhbM&9c1o{gA_WDMc$JTFT z1;D!(HmF7VkZNu;=PAuTZbDcsQW$6Q)Xm_#vnvItC4T4{ZnVHDO-LR>SZz|6K=M?G zkh`g6_CK7xx;qd{_Bh7C84^T)l#P;bma}kvLZiiJ3!gEFQ$Q_rC>!!uU8A!`HmU7C z^N}Wp>|fwz6<4Zors4cc;iXsQB5f04Q8+GyS&LX0`Lr!?IH&*Y>1j5#r1AF?YZeJ4 z=!4?Fj!gSKUZ3Incpvr^jiS3#Gkbb#=HNYV9H)EEC-cI$Hp2WU@_GH~&(%z?p@7@a zZK{5}P&b((0sw@bWk2`U+2n2JZjWXmiG8Sl+IIJX(6`**j05ap`Jm;aTW%LHdlK7v zAI)3KC-5UdDHNAtBwtZZcA0-;C(*N~1nFcjv`_9}KQ|_Aj7}bVAO?j+H0hyRM=zyj zF89`a>65M^>u$`sQgbl!J7P=`$PuPUG!>vO7hq!qsPQ4AXCB3~2Uz^v*M8+HaoxC9 zkF6Mvg}3ydDaf0M@mB)fa_iWT61A(%VI`F=JjesqJOn6v{Ep9`l}$jShU-NE6d~w4lD_Y^vaF~ zmFRv9xC$7!)r)?g&wTH#L8m#K6eF3W3mS;u`xZ(}DpW(yGOt#>Wgf1N03IR<$#A5} z;6|fizLo{H-ITVg#C2dy3S^LR@z|{SzxpxgTg2qmqEjx~Mcnh5d&JFukg-URp6+3U3(}aXa1Dlz(ndGO)Zg zwHqojla-MsSo%ZBiJ1CD%Ncmwv%DQU`fbzy}EI$C@=QM(pCx z^$IDVV6JDk3DWu1_r2-jYW>(~XZlsnF=<^u@6ax~=XRlwAxtL-46eWbZGr+*ojS8& z-$}Z!bs+bbThi#C>zRo`AL{Od?q*JKRJ6#*IdeHuX;}0NePHdXB*XXCNUc z!JH$z=+Tdmz=@;19bKzlkL;i7)D7jA&xQxx3@HuOH9nFA5v~CTMh;Al`KTX^5FZzC z%p!KyQ7vU4c~%f`4HOsT40T}bdNypm;g(sI#hX-Uf?Bwh~@%3$cz~RC} zH;$g_8n%bCgasg2@nbmAXMX!s@S07zpQ1@i|CGJW{qZa+B{?-Vqk<))SBGWVRS1-h z?~Oh42imZKN43y?Y!hEUS7TqS|CoBM?dQ|>V-p-aV;-{l7q9m!%z#yYM)us^n+j=l07ny9r@(rw($`%Xy%w(Yp}PvI%nIk!#;xcE@TVm2LJSdm zrjX3!@{Kxe!w&gC{EXRxomv@0WJd~tup;GVL`YBR+icw)q3C#m!RVT>bVP97X*RI& z@>Y*2mQE)Ms+nz>{k=85$n{CP)`@mh;er!m4+>KI%tQJgPQ3L}o4*<7iD0(levM1= zW(_%P?;54w3bS+wh#n#`!-WP;Qs)_^e8**ntWT-IC7@*GDPfn|7Osu00Un3#*OW(2 zv(t#MF>3NLF069TAD<;98KoTJ+5qM<^I`(cqKWPnW|~mPFmorGm0$R@9Us0;Fh`z_ zl#j3fdg*1Aj8|gk57yaF)0CC+1cJij>i4=FtxXk^O4JqNjWuhG*<7J#^ZaXWacT_z z*Dx91P%d`H`Kei1z44tmmR&SSp6PcOpy^PHRwLrUf8&5DKHv^LS7Z6%41Kxuhkv_1 z_Tv}-OV`YYiG&Xmg`C%05?-F7e#YjHp93u;WOLOND%;TFi865*A``^Bsbe*z(I^=; zV(pHz=CVx{D>AwJYP7}t<6Gkk1vydu6SQe7zc*8>j^U%ETCySFO=E(a+bl=_h>y5o7#qUeTE3h$ z;uei|w}2_q@F@p6)GevMjQ!L0jzhMvDE{<7M)8+}OsKw^8~A*Rz0vioY4UzqF~-{b zV9DsaT(bpeU_Z2*s<$iPJB~F`RF?+nn7VFszd=y*`l2EWMkBm;2!OjhVz^wu67Q zG))5JZPn}%%&E2TRPi?ddcqn%O%FHskAB9CffILkYu55zAF>7;^!ff<0wD!5Eo}N3S{BU6zKqGW$OSUdgmTkWYSn=Rd6UJZUDksrLcfe0KcH_=s2JYcu=H_|v}kYN>m|CaG9>C{)D?eC9xP8pb2kfAaWpNB9NVNgDyx^ukEaRwEr|BL-OnSzg$1Z5UFFa)V z!48a%(F#mm71xy~VI%m_UOy-ED*$*Ab|&akBv%2-E;$_nCJ8Ivu zUPrqU$BRyp*&q|kED1xdYd$UH=O66V_}*Y}VhKcNdFqXL62~VHbhEMzi2O#(@=>~~ zy#9p6ureLK<^Su22FXMCdqb0K{iz*&2wuJQhhz8))+FHTNq5{xlh&xP6Jw!`zMhuo zOwW3xt}(~GbPolfRQofjIRFyBk~nYsa6hI|E3ogXtH#nt)}?kvDA%-s+0C(45*5fi z(}gw+h}~lPeFvO6*oF>v?4Di%kZxrrm2BqYfX$cBjEur7%1h(pIsW}GmSJ4-H85m39o~-8` z5cRFt2n`rA0i80fK9y1lEco#BIiRKY8BCqmCFklayYN)2xcdZo-)F3?J3k~CW9efG z-cIGp@JF}I`IR5uKwV9SP*r^E^bN$PlCzjt?s%p;kXcZA24rnd!w;0KROM&Qn#Pw* z;^x&l+pU6nH;M9sI6^ZDL^F6k|Ds&m39Jpr_4`#9NDl3Qd!|LWwtro-E^ohAS~wwv zyt0IsXq8`9{XKTrU)}UT6Y+J<^BnBT(g=&QZ;PJ!2l)(nRL1WJ(jz0xQ0{lmp}>@k z{kH_&{jbFnQUL1g`|CPJ-*V}gH2-RI-KL{B>*ljHUz_9Li6|`F5<-I?f4Tx=*XB*L z2PV^_>gFbW<-BYT+83onJ5^>M?dt(HMhb2+-3rdt8^!`&Eb5n-tuZqD7A0&(>?Oahuo3IH#cR zq{eNoGk|%@u9+H=EfPdIpQJ$0i`0ZiIKZFYqT2uA z^d*Jxy=mHXxG&qlrZsYJIA_lwgNihyMI`*~Wmj0S3jlr2 zRf#*Ir&GAw)3OC+q2eQqS{w^&==_eNq;P>1C#|Ikghd3Y5C%ITU!NI&R4`$REeY0fbSiLxtpHLbdGa9U!pphBz@!!73o}lw||iZA#+NX z@pS%EJDGLHM01ngkZs&FD5u4AwsAJ2(yf#$m_sOTZOUrQp-laAvgY$zSoX&E&i-?e zEdJSM)vb>Vsw8vKkFVBla^<*V&W4g0q<#QNn=H+%-``pX*0g6d3;=f1!}YOhT)cgT zLYObf>VHV4O4P*0-6o{h7SEqR@{w^(t50^5<#?=u`6(NYKfN&*Ip^MJCNApgiOmLx z3#s}FX4hB@mIRWpH-0!KI49_|c+F+lc|GeubI(Et+palnK(dF{75w4nOmd_YI{(19s?jcChTv`g=bSe7rExN5o$#>2KD4pRU_9rTo}?+v>5Q1t_}xa z1aNe&*2}1TQvJly?X4zGT>%u%jsS-1@qs`sI-sOv?}f~RBoHoxGsq?(ci3||(q0d= z%Pr;g?2~geX-b(jr7lLvnBE!eVVSU|pQ{?M`X->3(?a+d39v%-`}$L<__WoxVGm(U zN(c0d<>#}|=}sO`c({3jra=*2TT>mQ3azCBW$C&|QEwJY<_GR=JI?lV~!i9Ph$_tHRTO$8~Wy;MeOFJ&UP(O;}9t zImN^}ze8wUOryNzQ=KL8^yh01O~w(=ZSx->GWUIjRR9}ii7zv^KndtI3y!AAd)5;4 zT)G!IDmB#E>nNK4RH%de9#P!t%PLo9OPw}+-kpaAd32!M8JF(y9M|#)rN|&_lkSFL zyWpDlwcA#5a+76KzXL4wtFyOG9R;W<6Op_SyKX3Xic0^xxdL_&FQSM#FLN6;tLU`F zuLTD98xY)`sfgh8TZ-kKgftWF{Bc~nvF!gu9!MHtL+5CK;Twe4 z*sW-1Ek}FFF=m=S^9Oma9_Qk;r?doY%*tPyekuGUHiIj;cb;)x`+SPUO%vmJ$vV*hN>Px3L`7-B^Q7~D=_xh5(9%+QP zg0nXX#HD*q!*A0Ww_#PeUgf$tX{_VS^Y&kjG;S*x%3f^lhlyz1rZ8hV-x~Yn+J*pp z_?(|I$U>-SZ>H5urbU4%uy(PhaUDJY25|4$pC)Wf34mux;*>m#49IuXFA z@ba{mgnJTGCRhl&KLj(|_nQ7B8-#$cZ2T>1??{b9;Ef*IyV4H6E)&INb2D;YcBPpQ~183^Le&I$9$&^H@32yXWvvFIarXey!=mcC8lI;686c*Gcm>Pb;r%>L)hKMVtAj2FyVL8EEjX* zKT5ASmH?Bh5sxknqp!pt#&OnyNafjZHD^)-s?t%TId1(;9C6B(pL=p&TP%Xsmv<;o zNv*+?;AAjnT#DN_)K{U!^ebjkElLmCFq8Ht62MI%ph=>BxCG7O_+T0wr*w~iSCsph zj4i4UZ>F-H!clo;9C405IiJh-VOu1Fu5V#1cM3UEEn^U^Wq4p|eGyzFmX|q&idAgd z+CP|=qiDVeBD>%5M}a)UOLZ8dC{$q%)N@TCkWnrm64a?hAYt$#&23%sg47BubhH_+Tv$N-u{~B&-L!`;26k zf%RPK!$usK<>k`#ys7!cD-TMSf9UBb5<6FBHil`!H3+$UL^d4*Z=0Le?qlk!abaX! z!29A{qByXbInste- zfsNLvvA{jN^onhK-5kCj>~f4F*+V@zUsRWzse82aS6$*Gb$280Xq(gK0&>nq|Mg7A z2p}Tf9g2-E$uC&7@_TLI)|+X)Q8=i;v9RiHTlT&D!@Z{XRb6R*rn2D{xJE zryPF9=Q&SuxofGzOu#yzG>V;8kHc}XbXqaIID?-qhBx$xoi%=>vly4((ul0k z9+NqI$wL)F(vNR*e{CVb`}9cbSz`L(a$>s=R>!Zcb5hN4`&NajUl~DM~drf6Y4Nj_f2Sp{V$?#2xJ5oPILfwAr|C1Psr~wtEO45At*; zwbeB+vWvAP?ahjS1N-?2Zln`^-5w!Fa6JZP(EjhG1s3W& zzI5KE#Si+8E_c40(Hu9D9%!T8Ddt3$+6UXS476Z^>Y7g`gPo%`hn;!rl_Qt1oy{RB zOFv$wn|N#&(>%k*o&~qkBz#vVX$(Sj07cTgI~#kIoH0BsC{8{J9nShD!B2GKY)N5D zl3Eu;tHQpnrAVLWVoK4@knoyEqQ~^BstgkVouYSVt3oag|Xc3Dh*wYf6MB$3a`;lE&L4inPpH!K=SwQ?hWSVVLA*8B3qp2`8vY^J(r zS?J=LTh@wWXPh~0&zrRIF0CQ^}Tz>BmzTt}BBGmBH5rhMoU^r>ufLnnD|yiTRk zFqgWSQLZ6y)xOB2~=xV z=rUsrILcNl+L9G*;_pJd?GgnwPygzj+q?M+ry~l(zoHX4wJk zsCH%Lq(0PB#?BTN$(h@(ld@YKC!Fo+739R7F(=*#ctZF8*haRF*hiS(-|%V>hMgll zL$UU_&OM^W6yoa{iU3SJMPZ1Iz8SueroF^{N>AJ`SRvHOq94+DI`Mm(qa zF6s8?oGGY_$;5bZ&k^G_0nFQO?diy~bFGfl8L2H$|A$R=(y4dU4i{2Z?-VfWtm=l9 zn?$5wV?J+-@~>CJ&AfH)T3;<#ql;t9WN5Q$!!_9>l&9AiDeROe_5wX0~Zqm1u&E7}Qu#R^Q)c?O64n2Y7Pe+pVbL*AyHX4cE(%;oxxVdFJCbB09ubX?1eS3X)%L*DBTY!f^vJFX$|=z^s? zQzwx#HkBsousgzd##;Of5_GO5fwI0{1lXz(?VAGU^yd$VbQ*eZYpjeWXi{V2-cXo(O2;1h(57k>7$vNd9@wsJIqU^cg;GobB_}C z|2`9WWSha^Jlwo>X!FT-3$-heH?(OZ1@lh2)Sa*>^t|Yg!en?Mt{5aGkfXc_0qQq? zq-w3;B_=TgpWx4g(B=$iI!!IzFCxc}QWxWtIvQ6Ks6}cFY{4VWYs9hL)nD+>hJ39i zZPK*H!x-z!{euYZlwDaNYh5MAd$PfJiB~>bgA;$b4w}bLq^j5coy_f*d!n%)ppJH1jdd7=sFBS^*hA#^YpZMAk785NcV}LR}s?xxx_2WN|(-P zx#r07ap>zGYF^GS-N%!>msYh+%ZcRxEkTejGHC*yfWgaF1WEV0M(=r)Xe;?XXGzs{ zhkK`7cgm-;8l@aL0KQ(O%m}}w&9T%Ip1H1QMe@EdVzctjOsmBu%wXsYiUR&u^TQiZ zk-Y&K5&XqC`VkQVq9z4Sm;~Uo){Y5ab^g=0RB76_M&+wyVUJi zOmlhiR=ruTCIa{rC!QmqE|lwya;a=}%{#c@p_)nexF z9W$G5+`;9KZz+K64Dgubu%WB06I14T#e0& zgnup7ej0MnzimD_gnO(F_1wRZ&i64(D~sLy(JS(~^9Ns)5}m)S(!atb^sWkB=m0B* zhgju;z6~mMB#4}QxYmxZIM>#AV^a^PV^DazJ2h5~huZ`A6CwLbs@TjMI>S}O479&M zce#R2+uCwp7OF$`^Mi_4$~z{lCSaipJ-XZ;L-$tgr8OqP8* zDMW0d3WLT!fv#b^o(uID3Qz>z9+$opO2N+KMv3+chZ6M{Dww98Q^VeVV3hYub=&NK z)TLoPJq192CD_*oeM|Qa+l_jws@Q^z+ka)gvelLK$L=?QO8#fFntR7G6S$H#4j# zbF&*3d1ydaCi$(u7jpx}byZo#zsysjkcCZ}R}%1m2MD8s_87XvC6-5MCXWn=h)=Yp z-Zi?(xX6y)W%ZqeYVPu(_(3ijp@&dKI4;o_;YhT7yQMUk*hPN{C#z|6i{v|uXQDL# zk+?>!LdLZ9<5^?52A_((uqE8Q?_gqUuCei9g@!L^ULHf_EyYESlR8N1FfwBs)q0K)g|cUC zF)_rgc#G4;yOM~{g?h{~`Sz*|#AmKVf2#nL4_9~+erK9gl?oagp_+?HLM?u>M;wogmDHgF&PEfs&))C$daDDrbdxPXu@T9{x}`692IT?RNePvRehS1#bE+e z$}bL=BXHJZ`nO}rkJ(p0mYJh-&xg-{DvcZwpN5qF43Ky!pG!jN2v{{~UkwRuubjD^ z@skmACcrGMEKCej!)X7E?HiQ>t>HqBND8#FR=a>8kvs9HybZm9nzTcrhT?#NUakHr zg^EQc{;3~gLs$hy5cS60+8vEqLV^}hSYBGBva49}s{LJ2)q`byL2M{yRyk}U&(8&_ zkM$d65W&&x&<^a;Rn2j;(wxW(UhlztrP?ow8J4YxLG93&DPSVEycO(N#G%WkVlGVY zaYy=E_=`Xul*+Z>{u@^>u`Eudc28nnQSMa_YtUOQv(h_EWE8Y zVuxtEU`)c5bsJ5i30u;xQ@{t_P%%1V>Ao6rvi2P9PqN;AKt$4I=mcvV^ex(|o=DM6 zZl-UUEg#?NVFkZ6ZDQM+V;~J0E7K)znH9|?-M^ z$b@B;J^YEEyX84M-^^KYduODLhzGgv*s$KnBH_buOxQ} z=DktVA9lgtl{-ha}g zQgFMF9_O=XDwjgP%b}qifa-Ud-r~9*ZKUg{0bT ziI8lIUar#+!!$0-QuqR2uWXmrIEY>OEz$DgZbu=M<9<=fGo?WUxF0E~UOr=@2i*w!fRvaqoeGzKo`a$xk;JK>I(4tJr+@yso^s z9K=3I?AB`=hic&^B^wGbx3?neim*{qChtmL5~-88805|K1vqZi3yc;=hDD#p4ElaO zj)S=4V^`QNyj#CgF%9zC{d9vL`Z#?WwCJqYUqaBLpBd;^p)Wx9IeNuq8}5W5>>LX_ zl`c+YjghQPV!Q_0l8t7)R%Xq7gvzWow6y~yym@9J`b|yE>;B*^fq7~-GR5Jy+C&s#$>4lL_ zNbcm#Etw_l1nAHBzT%7H#uXRzbN1WXzoCx;=xz^QQ9g5n`|qb;f35ByGNKGyw)khI z-d8PbiNV7Yze9)~@@|^_v9_28Z}2zBoO$|F{;~c_HG3_8A$^0z@FvOR+2`8%v@o?| za{POP^e45Ata`S(imD9cm>gUahcsC&L79!zEI#$00pm|4cIPg~2Rgb~a1KuUVnpxX z0pAu}+tA#axB2Azdl?wvZW5lJmMZJPW(Up(HHj-}RRfMEe{I@3@O-PiMYStKR-f^b zJPbK>`|vNT`U3~CLvpY23!AE{vrVFrUW8+L9;9rZt;5ogKN+Ux_BRQjbPoOG8>E`` zpKIwyI;HZ>S5tIw%9F6FgQ`XP)1r=P05G=)n=t=wAf?6PvK3wS7$xebA3S&(!`c^) z!c(^erxZuh8+R$?(o?}nW{-dg#y|RZpkiK3$Nv;RG8vZA2B3cDc!H;6s^$VS!gzp_G18g$^zh6+?5*18CIr zCjO@Wi6Jz4wM=jh?Jj}!Q(B_l24g&isSJfG6*~}PB+XJ1ah$7`UV*%1EzCsrR2*0v zEGlIq_&fWH;=t83q0$RU#hGu;j+U-{#Std(|%bM~k-3 zg0g3B(CuSAID_RkBYDm{Fi4pX5|*%z`CI|mqrwRZD9>{YZG}z~=EulY@QWE+*L0Xo zH1~XdC_mE_#P8YLaJ$}HlW%$y)9gdX*IQtarixaDh+Zt#SS9MN#oa=IU0|oy{>C^u zgUOVQ*Tze*n7RmOs8HM2{>gq*c3iE_t=UaUJ(l@TkU7sa+TM_&1C?73mtGCQyQN;Q zEYTk`0Af7iKE7j65lQ4>D7N31W(|9s-(G7!{%{2`*Q1NVO}N#*LOL5`(d z=r9xh&y^5J2>g#e{{Q*Br10uWLQbXl>wbaMPU+DlBmBSnQZ@((?Em@W$FGHyM_n;U z$P__6c_Rnlo~w-r~=uPPFd=dS3L&Ejubk5O~~F9fW83Xe;oF4aR3JH|J9?E hGOzFW|Ic`ew1EaBOG>VRFyv{W3RpL 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml + + Office.context.mailbox.item.getAsFileAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Error encountered during processing: ${asyncResult.error.message}`); + return; + } + + console.log(asyncResult.value); + }); 'Office.MessageRead#getAttachmentContentAsync:member(1)': - >- // Link to full sample: From 76a7a641cd285892b2605f85f938f334f3ff4a74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jul 2023 23:31:42 +0000 Subject: [PATCH 014/156] Bump semver from 5.7.1 to 5.7.2 Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2) --- updated-dependencies: - dependency-name: semver dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 82a095593..c24d793c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -797,9 +797,9 @@ saxes@^5.0.1: xmlchars "^2.2.0" semver@^5.3.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" From 9cf3ce15e7751d719274f695ac987a260c6d9a9a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 31 Aug 2023 10:59:06 -0700 Subject: [PATCH 015/156] [Word] (footnotes) Remove online-only restriction (#817) --- samples/word/50-document/manage-footnotes.yaml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 2659634c1..5f3bb4ae2 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -139,13 +139,7 @@ script: }); } async function setup() { - // Check for requirement set support and set two paragraphs of sample text. - if (!Office.context.requirements.isSetSupported("WordApiOnline", "1.1")) { - console.error( - "This version of Word doesn't support WordApiOnline 1.1 and so doesn't currently support the footnotes APIs." - ); - return; - } + // Set two paragraphs of sample text. await Word.run(async (context) => { const body = context.document.body; body.clear(); @@ -175,9 +169,6 @@ template: content: |-
From a480d6435449e600ee59437d1825267544818346 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 1 Sep 2023 12:25:18 -0700 Subject: [PATCH 016/156] [Word] (footnotes) Update associated API set (#819) --- samples/word/50-document/manage-footnotes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 5f3bb4ae2..cc86fda22 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -4,7 +4,7 @@ name: Manage footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' host: WORD api_set: - WordApi: '1.4' + WordApi: '1.5' script: content: | $("#insert-footnote").click(() => tryCatch(insertFootnote)); From bffd1db32a4ce060a1682d63d4906ba36807197b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 1 Sep 2023 12:27:01 -0700 Subject: [PATCH 017/156] [Word] Run yarn start --- playlists-prod/word.yaml | 2 +- playlists/word.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index cfd4ccd77..048d4ff87 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -327,7 +327,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml group: Document api_set: - WordApi: '1.4' + WordApi: '1.5' - id: word-document-manage-fields name: Manage fields fileName: manage-fields.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 040082612..a0d075f54 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -327,7 +327,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-footnotes.yaml group: Document api_set: - WordApi: '1.4' + WordApi: '1.5' - id: word-document-manage-fields name: Manage fields fileName: manage-fields.yaml From 2dcb0df1d15536673c10372f4f39f0f3f1d2168c Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 5 Sep 2023 12:45:43 -0700 Subject: [PATCH 018/156] [Admin] main -> prod (#820) * [Word] (footnotes) Update associated API set (#819) * [Word] Run yarn start --- playlists-prod/word.yaml | 2 +- playlists/word.yaml | 2 +- samples/word/50-document/manage-footnotes.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index cfd4ccd77..048d4ff87 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -327,7 +327,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml group: Document api_set: - WordApi: '1.4' + WordApi: '1.5' - id: word-document-manage-fields name: Manage fields fileName: manage-fields.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 040082612..a0d075f54 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -327,7 +327,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-footnotes.yaml group: Document api_set: - WordApi: '1.4' + WordApi: '1.5' - id: word-document-manage-fields name: Manage fields fileName: manage-fields.yaml diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 5f3bb4ae2..cc86fda22 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -4,7 +4,7 @@ name: Manage footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' host: WORD api_set: - WordApi: '1.4' + WordApi: '1.5' script: content: | $("#insert-footnote").click(() => tryCatch(insertFootnote)); From 44e1f7b98b6cdd697249ee0832866e41cb148f20 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:26:11 -0700 Subject: [PATCH 019/156] [Outlook] (multi-select) Create item multi-select snippet (#822) --- playlists-prod/outlook.yaml | 9 ++ playlists/outlook.yaml | 9 ++ .../get-message-properties.yaml | 79 ++++++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 24068 -> 24146 bytes snippet-extractor-output/snippets.yaml | 40 +++++++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 7 files changed, 139 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-message-properties.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 7d78d036f..08f98152e 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -746,6 +746,15 @@ group: Other Item APIs api_set: Mailbox: '1.13' +- id: outlook-other-item-apis-get-message-properties + name: 'Get properties of selected messages (Message Compose, Message Read)' + fileName: get-message-properties.yaml + description: Gets the properties of multiple selected messages. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml + group: Other Item APIs + api_set: + Mailbox: '1.13' - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index ba5549be3..7e8622cd5 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -746,6 +746,15 @@ group: Other Item APIs api_set: Mailbox: '1.13' +- id: outlook-other-item-apis-get-message-properties + name: 'Get properties of selected messages (Message Compose, Message Read)' + fileName: get-message-properties.yaml + description: Gets the properties of multiple selected messages. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-message-properties.yaml + group: Other Item APIs + api_set: + Mailbox: '1.13' - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml diff --git a/samples/outlook/90-other-item-apis/get-message-properties.yaml b/samples/outlook/90-other-item-apis/get-message-properties.yaml new file mode 100644 index 000000000..8ab2db71a --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -0,0 +1,79 @@ +order: 23 +id: outlook-other-item-apis-get-message-properties +name: 'Get properties of selected messages (Message Compose, Message Read)' +description: Gets the properties of multiple selected messages. +host: OUTLOOK +api_set: + Mailbox: '1.13' +script: + content: | + Office.onReady(() => { + // Registers an event handler to identify when messages are selected. + Office.context.mailbox.addHandlerAsync(Office.EventType.SelectedItemsChanged, getMessageProperties, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log("Event handler added for the SelectedItemsChanged event."); + }); + }); + + function getMessageProperties() { + // Retrieves the selected messages' properties and logs them to the console. + Office.context.mailbox.getSelectedItemsAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + asyncResult.value.forEach((message) => { + console.log(`Item ID: ${message.itemId}`); + console.log(`Subject: ${message.subject}`); + console.log(`Item type: ${message.itemType}`); + console.log(`Item mode: ${message.itemMode}`); + }); + }); + } + language: typescript +template: + content: |- +
+

This sample shows how to get the properties of multiple selected messages.

+

Required mode: Message Compose, Message Read

+
+
+

Try it out

+
    +
  1. Turn on the Reading Pane in Outlook. For guidance, see Use and configure the Reading Pane to preview messages.

  2. +
  3. Hold Ctrl (Windows) or Command (Mac) while selecting multiple messages from your mailbox. You can select a maximum of 100 messages at a time.

  4. +
+

The properties of the selected messages are automatically logged to the console.

+

To learn more about the item multi-select feature, see Activate your Outlook add-in on multiple messages.

+
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 6d7626933693f0bf3b40f63467a7de0e69675b8a..e120a342d2e3d5540a95d424d56ec14bf00432fb 100644 GIT binary patch delta 16874 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 delta 16788 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 l0|5qx_CM`D@2Zk3^o78gl8^NTA- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml + + // Retrieves the selected messages' properties and logs them to the console. + + Office.context.mailbox.getSelectedItemsAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + asyncResult.value.forEach((message) => { + console.log(`Item ID: ${message.itemId}`); + console.log(`Subject: ${message.subject}`); + console.log(`Item type: ${message.itemType}`); + console.log(`Item mode: ${message.itemMode}`); + }); + }); 'Office.Mailbox#getUserIdentityTokenAsync:member(1)': - >- // Link to full sample: @@ -12876,6 +12896,26 @@ Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); +'Office.SelectedItemDetails:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml + + // Retrieves the selected messages' properties and logs them to the console. + + Office.context.mailbox.getSelectedItemsAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + asyncResult.value.forEach((message) => { + console.log(`Item ID: ${message.itemId}`); + console.log(`Subject: ${message.subject}`); + console.log(`Item type: ${message.itemType}`); + console.log(`Item mode: ${message.itemMode}`); + }); + }); 'Office.Sensitivity#getAsync:member(2)': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index d93f69cd2..963c3b9b6 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -78,6 +78,7 @@ "outlook-other-item-apis-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml", "outlook-other-item-apis-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml", "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml", + "outlook-other-item-apis-get-message-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", diff --git a/view/outlook.json b/view/outlook.json index 1ca9c97d1..e9b5f0928 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -78,6 +78,7 @@ "outlook-other-item-apis-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml", "outlook-other-item-apis-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/session-data-apis.yaml", "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/delay-message-delivery.yaml", + "outlook-other-item-apis-get-message-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-message-properties.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", From a2744927c809ccd9587dc701aecde00ce37702b4 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 3 Oct 2023 15:39:51 -0700 Subject: [PATCH 020/156] [Word] (Body) Remove duplicate mapping for select (#824) --- snippet-extractor-metadata/word.xlsx | Bin 20560 -> 20543 bytes snippet-extractor-output/snippets.yaml | 19 ------------------- 2 files changed, 19 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 9c998740ca3c9db144da28290552deb347351046..56fd4e919ad19c6a5a58950be57bedf033d173f1 100644 GIT binary patch delta 13532 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 ur2qCi^eE?5*bj delta 13607 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 Count: " + length); }); }); -'Word.Body#select:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml - - // Selects the entire body. - - // Run a batch operation against the Word object model. - - await Word.run(async (context) => { - // Create a proxy object for the document body. - const body = context.document.body; - - // Queue a command to select the document body. - // The Word UI will move to the selected document body. - body.select(); - - console.log("Selected the document body."); - }); 'Word.Body#tables:member': - >- // Link to full sample: From e14697a103b99a4f6935108fd79b4e10677b4dcd Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 11 Oct 2023 15:55:07 -0700 Subject: [PATCH 021/156] [Outlook] (notifications) Update notifications snippet (#826) * Update notification messages snippet * Apply suggestions from review --- playlists-prod/outlook.yaml | 2 +- playlists/outlook.yaml | 2 +- .../35-notifications/add-getall-remove.yaml | 55 +++- snippet-extractor-metadata/outlook.xlsx | Bin 24146 -> 24289 bytes snippet-extractor-output/snippets.yaml | 240 +++++++++++++++--- 5 files changed, 257 insertions(+), 42 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 08f98152e..e0c9587d2 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -253,7 +253,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml group: Notifications api_set: - Mailbox: '1.3' + Mailbox: '1.10' - id: outlook-attachments-attachments-compose name: Manipulate attachments (Item Compose) fileName: attachments-compose.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 7e8622cd5..84682c0cd 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -253,7 +253,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/35-notifications/add-getall-remove.yaml group: Notifications api_set: - Mailbox: '1.3' + Mailbox: '1.10' - id: outlook-attachments-attachments-compose name: Manipulate attachments (Item Compose) fileName: attachments-compose.yaml diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 18a34b466..bc46e8a0c 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -3,19 +3,21 @@ name: Work with notification messages description: 'Adds different kinds of notification messages, gets all, and replaces and removes an individual notification message.' host: OUTLOOK api_set: - Mailbox: '1.3' + Mailbox: '1.10' script: content: | $("#addProgress").click(addProgress); $("#addInformational").click(addInformational); $("#addInformationalPersisted").click(addInformationalPersisted); + $("#addInsight").click(addInsight); $("#addError").click(addError); $("#getAll").click(getAll); $("#replace").click(replace); $("#remove").click(remove); function addProgress() { - const id = $("#notificationId").val(); + // Adds a progress indicator to the mail item. + const id = $("#notificationId").val().toString(); const details = { type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, @@ -25,7 +27,8 @@ script: } function addInformational() { - const id = $("#notificationId").val(); + // Adds an informational notification to the mail item. + const id = $("#notificationId").val().toString(); const details = { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, @@ -37,7 +40,8 @@ script: } function addInformationalPersisted() { - const id = $("#notificationId").val(); + // Adds a persistent information notification to the mail item. + const id = $("#notificationId").val().toString(); const details = { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, @@ -48,8 +52,29 @@ script: Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); } + function addInsight() { + // Adds an informational message with actions to the mail item. + const id = $("#notificationId").val().toString(); + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, + message: "This is an insight notification", + icon: "icon1", + actions: [ + { + actionText: "Open insight", + actionType: Office.MailboxEnums.ActionType.ShowTaskPane, + commandId: "msgComposeOpenPaneButton", + contextData: { a: "aValue", b: "bValue" } + } + ] + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); + } + function addError() { - const id = $("#notificationId").val(); + // Adds an error notification to the mail item. + const id = $("#notificationId").val().toString(); const details = { type: Office.MailboxEnums.ItemNotificationMessageType.ErrorMessage, @@ -59,11 +84,20 @@ script: } function getAll() { - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + // Gets all the notification messages and their keys for the current mail item. + Office.context.mailbox.item.notificationMessages.getAllAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log(asyncResult.value); + }); } function replace() { - const id = $("#notificationId").val(); + // Replaces a notification message of a given key with another message. + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -76,11 +110,13 @@ script: } function remove() { - const id = $("#notificationId").val(); + // Removes a notification message from the current mail item. + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); } function handleResult(result) { + // Helper method to display the result of an asynchronous call. console.log(result); } language: typescript @@ -105,6 +141,9 @@ template: + diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index e120a342d2e3d5540a95d424d56ec14bf00432fb..4ee3f3df470a69824d6899053719d2467ac3df4a 100644 GIT binary patch delta 12866 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 N^d|Jkhx-3+`5*dzKzjfH delta 12701 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 yR0)BoMi@l@D-lQt2spzlCI1h;(D3#E diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 09b9c7818..cd18e6c7e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8196,7 +8196,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a progress indicator to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -8209,7 +8211,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds an informational notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -8224,7 +8228,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a persistent information notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -8239,12 +8245,25 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + // Gets all the notification messages and their keys for the current mail + item. + + Office.context.mailbox.item.notificationMessages.getAllAsync((asyncResult) + => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log(asyncResult.value); + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Replaces a notification message of a given key with another message. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -8259,7 +8278,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Removes a notification message from the current mail item. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -9064,7 +9085,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a progress indicator to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -9077,7 +9100,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds an informational notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -9092,7 +9117,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a persistent information notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -9107,12 +9134,25 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + // Gets all the notification messages and their keys for the current mail + item. + + Office.context.mailbox.item.notificationMessages.getAllAsync((asyncResult) + => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log(asyncResult.value); + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Replaces a notification message of a given key with another message. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -9127,7 +9167,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Removes a notification message from the current mail item. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -10370,6 +10412,31 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); +'Office.MailboxEnums.ActionType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + + // Adds an informational message with actions to the mail item. + + const id = $("#notificationId").val().toString(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, + message: "This is an insight notification", + icon: "icon1", + actions: [ + { + actionText: "Open insight", + actionType: Office.MailboxEnums.ActionType.ShowTaskPane, + commandId: "msgComposeOpenPaneButton", + contextData: { a: "aValue", b: "bValue" } + } + ] + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); 'Office.MailboxEnums.AppointmentSensitivityType:enum': - >- // Link to full sample: @@ -10597,7 +10664,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds an error notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -11595,7 +11664,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a progress indicator to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -11608,7 +11679,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds an informational notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -11623,7 +11696,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a persistent information notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -11638,12 +11713,25 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + // Gets all the notification messages and their keys for the current mail + item. + + Office.context.mailbox.item.notificationMessages.getAllAsync((asyncResult) + => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log(asyncResult.value); + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Replaces a notification message of a given key with another message. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -11658,7 +11746,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Removes a notification message from the current mail item. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -12344,7 +12434,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a progress indicator to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -12357,7 +12449,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds an informational notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -12372,7 +12466,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a persistent information notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -12387,12 +12483,25 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + // Gets all the notification messages and their keys for the current mail + item. + + Office.context.mailbox.item.notificationMessages.getAllAsync((asyncResult) + => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log(asyncResult.value); + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Replaces a notification message of a given key with another message. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -12407,7 +12516,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Removes a notification message from the current mail item. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -12516,12 +12627,56 @@ console.log("Other Recipients:"); otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); } +'Office.NotificationMessageAction:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + + // Adds an informational message with actions to the mail item. + + const id = $("#notificationId").val().toString(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, + message: "This is an insight notification", + icon: "icon1", + actions: [ + { + actionText: "Open insight", + actionType: Office.MailboxEnums.ActionType.ShowTaskPane, + commandId: "msgComposeOpenPaneButton", + contextData: { a: "aValue", b: "bValue" } + } + ] + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); +'Office.NotificationMessageDetails:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + + // Gets all the notification messages and their keys for the current mail + item. + + Office.context.mailbox.item.notificationMessages.getAllAsync((asyncResult) + => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log(asyncResult.value); + }); 'Office.NotificationMessages#addAsync:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a progress indicator to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -12534,7 +12689,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds an informational notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -12549,7 +12706,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds a persistent information notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -12564,7 +12723,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Adds an error notification to the mail item. + + const id = $("#notificationId").val().toString(); const details = { @@ -12578,13 +12739,26 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + // Gets all the notification messages and their keys for the current mail + item. + + Office.context.mailbox.item.notificationMessages.getAllAsync((asyncResult) + => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log(asyncResult.value); + }); 'Office.NotificationMessages#removeAsync:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Removes a notification message from the current mail item. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -12593,7 +12767,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - const id = $("#notificationId").val(); + // Replaces a notification message of a given key with another message. + + const id = $("#notificationId").val().toString(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, From 09b64c3b8c942a7b74cbcbf8a5314f6ce2324bfd Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 6 Dec 2023 12:10:56 -0800 Subject: [PATCH 022/156] [Excel] (Data types) Expand functionality of error snippet (#831) * [Excel] (Data types) Expand functionality of error snippet * Run yarn start * Remove white space * Update samples/excel/20-data-types/data-types-error-values.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Change sample to use getUsedRange * Run yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 6 ++- playlists/excel.yaml | 6 ++- .../data-types-error-values.yaml | 42 +++++++++++++++---- snippet-extractor-output/snippets.yaml | 6 +-- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index a0932e91b..881400e33 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -331,9 +331,11 @@ api_set: ExcelApi: '1.16' - id: excel-data-types-error-values - name: 'Data types: Set error values' + name: 'Data types: Set and change error values' fileName: data-types-error-values.yaml - description: This sample shows how to set a cell value to an error data type. + description: >- + This sample shows how to set a cell value to an error data type, and then + update the value of cells that contain an error data type. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml group: Data Types diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1407b7977..79660637e 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -331,9 +331,11 @@ api_set: ExcelApi: '1.16' - id: excel-data-types-error-values - name: 'Data types: Set error values' + name: 'Data types: Set and change error values' fileName: data-types-error-values.yaml - description: This sample shows how to set a cell value to an error data type. + description: >- + This sample shows how to set a cell value to an error data type, and then + update the value of cells that contain an error data type. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-error-values.yaml group: Data Types diff --git a/samples/excel/20-data-types/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index 898a52073..cc6eb97c8 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -1,14 +1,15 @@ order: 4 id: excel-data-types-error-values -name: 'Data types: Set error values' -description: This sample shows how to set a cell value to an error data type. +name: 'Data types: Set and change error values' +description: 'This sample shows how to set a cell value to an error data type, and then update the value of cells that contain an error data type.' host: EXCEL api_set: ExcelApi: '1.16' script: content: | $("#setup").click(() => tryCatch(setup)); - $("#setBusyError").click(() => tryCatch(setBusyError)); + $("#set-busy-error").click(() => tryCatch(setBusyError)); + $("#change-busy-error").click(() => tryCatch(changeBusyError)); async function setBusyError() { // This function sets the value of cell A1 to a #BUSY! error using data types. @@ -17,7 +18,7 @@ script: const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); - // Get the error data type and set its type to `busy`. + // Get the error data type and set its type to `busy`. const error: Excel.ErrorCellValue = { type: Excel.CellValueType.error, errorType: Excel.ErrorCellValueType.busy @@ -29,13 +30,35 @@ script: }); } + async function changeBusyError() { + // This function checks if the used range contains a #BUSY! error, and then updates all the cells in the range that contain the error. + await Excel.run(async (context) => { + // Retrieve the Sample worksheet and the used range on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const usedRange = sheet.getUsedRange(); + + // Load the `valuesAsJson` property for comparison. + usedRange.load("valuesAsJson"); + await context.sync(); + + // Check if the used range contains a #BUSY! error. + if (usedRange.valuesAsJson[0][0]["errorType"] == Excel.ErrorCellValueType.busy) { + // If the used range contains a #BUSY! error, load and change those values. + usedRange.load("values"); + await context.sync(); + usedRange.values = [["Process unavailable."]]; + } + + await context.sync(); + }); + } + async function setup() { await Excel.run(async (context) => { // Create a new worksheet called "Sample" and activate it. context.workbook.worksheets.getItemOrNullObject("Sample").delete(); const sheet = context.workbook.worksheets.add("Sample"); sheet.activate(); - await context.sync(); }); } @@ -53,7 +76,7 @@ script: template: content: |-

-

This sample shows how to set the value of cell A1 to the #BUSY! error data type.

+

This sample shows how to set the value of cell A1 to the #BUSY! error data type. The sample then checks to see if the worksheet contains a #BUSY! error, and then updates all cells that contain a #BUSY! error.

Set up

@@ -61,8 +84,11 @@ template: Add worksheet

Try it out

- +
language: html diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index cd18e6c7e..8909a9344 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -706,7 +706,7 @@ const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); - // Get the error data type and set its type to `busy`. + // Get the error data type and set its type to `busy`. const error: Excel.ErrorCellValue = { type: Excel.CellValueType.error, errorType: Excel.ErrorCellValueType.busy @@ -3321,7 +3321,7 @@ const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); - // Get the error data type and set its type to `busy`. + // Get the error data type and set its type to `busy`. const error: Excel.ErrorCellValue = { type: Excel.CellValueType.error, errorType: Excel.ErrorCellValueType.busy @@ -3344,7 +3344,7 @@ const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); - // Get the error data type and set its type to `busy`. + // Get the error data type and set its type to `busy`. const error: Excel.ErrorCellValue = { type: Excel.CellValueType.error, errorType: Excel.ErrorCellValueType.busy From ff9b4b4ebc9cdd2bf44656bf328e4b20e45bdce1 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:30:54 -0800 Subject: [PATCH 023/156] [Outlook] (code samples) Add code samples (#833) --- snippet-extractor-metadata/outlook.xlsx | Bin 24289 -> 24426 bytes snippet-extractor-output/snippets.yaml | 55 ++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 4ee3f3df470a69824d6899053719d2467ac3df4a..9406d97f0ce9786eb9f7f954d2f89b72149e5563 100644 GIT binary patch delta 14057 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 PK&@s>D4s_D-SU3`R`)Td delta 13949 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8909a9344..419c5831c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8500,6 +8500,26 @@ } } ); +'Office.AppointmentCompose#sensitivityLabel:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + + // This snippet gets the current mail item's sensitivity label. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.mailbox.item.sensitivityLabel.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.value); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); 'Office.AppointmentCompose#seriesId:member': - >- // Link to full sample: @@ -9925,6 +9945,21 @@ console.log("Appointment set to all-day event."); } }); +'Office.Item:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + + const itemType = Office.context.mailbox.item.itemType; + + switch (itemType) { + case Office.MailboxEnums.ItemType.Appointment: + console.log(`Current item is an ${itemType}.`); + break; + case Office.MailboxEnums.ItemType.Message: + console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); + break; + } 'Office.Location#getAsync:member(2)': - >- // Link to full sample: @@ -11769,6 +11804,26 @@ } } ); +'Office.MessageCompose#sensitivityLabel:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + + // This snippet gets the current mail item's sensitivity label. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.mailbox.item.sensitivityLabel.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.value); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); 'Office.MessageCompose#seriesId:member': - >- // Link to full sample: From 192e680bcccfb9a3141a8394423559667e257c49 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 19 Dec 2023 08:18:23 -0800 Subject: [PATCH 024/156] [Word] Snippets for reqt. set 1.6 (#835) * [Word] Snippets for reqt. set 1.6 * Add paragraph events snippets * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Updates based on feedback * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Updates based on feedback * Reorganize * snippets mappings --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/word.yaml | 44 +++ playlists/word.yaml | 44 +++ samples/word/25-paragraph/onadded-event.yaml | 128 ++++++++ .../word/25-paragraph/onchanged-event.yaml | 130 ++++++++ .../word/25-paragraph/ondeleted-event.yaml | 131 ++++++++ samples/word/50-document/manage-comments.yaml | 2 +- .../manage-custom-xml-part-ns.yaml | 2 +- .../50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- .../word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- .../50-document/manage-tracked-changes.yaml | 220 +++++++++++++ samples/word/50-document/save-close.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 20543 -> 21437 bytes snippet-extractor-output/snippets.yaml | 291 ++++++++++++++++++ view-prod/word.json | 4 + view/word.json | 4 + 18 files changed, 1004 insertions(+), 8 deletions(-) create mode 100644 samples/word/25-paragraph/onadded-event.yaml create mode 100644 samples/word/25-paragraph/onchanged-event.yaml create mode 100644 samples/word/25-paragraph/ondeleted-event.yaml create mode 100644 samples/word/50-document/manage-tracked-changes.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 048d4ff87..8735d1564 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -201,6 +201,39 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-onadded-event + name: On adding paragraphs + fileName: onadded-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphAdded event that tracks + the addition of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-onchanged-event + name: On changing content in paragraphs + fileName: onchanged-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphChanged event that + tracks when content is changed in paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-ondeleted-event + name: On deleting paragraphs + fileName: ondeleted-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphDeleted event that + tracks the removal of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' - id: word-properties-get-built-in-properties name: Built-in document properties fileName: get-built-in-properties.yaml @@ -306,6 +339,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-tracked-changes + name: Manage tracked changes + fileName: manage-tracked-changes.yaml + description: >- + This samples shows how to manage tracked changes, including accepting and + rejecting changes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + group: Document + api_set: + WordApi: '1.6' - id: word-document-manage-comments name: Manage comments fileName: manage-comments.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index a0d075f54..c7d6801a5 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -201,6 +201,39 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-onadded-event + name: On adding paragraphs + fileName: onadded-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphAdded event that tracks + the addition of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onadded-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-onchanged-event + name: On changing content in paragraphs + fileName: onchanged-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphChanged event that + tracks when content is changed in paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onchanged-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' +- id: word-paragraph-ondeleted-event + name: On deleting paragraphs + fileName: ondeleted-event.yaml + description: >- + Registers, triggers, and deregisters the onParagraphDeleted event that + tracks the removal of paragraphs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/ondeleted-event.yaml + group: Paragraph + api_set: + WordApi: '1.6' - id: word-properties-get-built-in-properties name: Built-in document properties fileName: get-built-in-properties.yaml @@ -306,6 +339,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-tracked-changes + name: Manage tracked changes + fileName: manage-tracked-changes.yaml + description: >- + This samples shows how to manage tracked changes, including accepting and + rejecting changes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-tracked-changes.yaml + group: Document + api_set: + WordApi: '1.6' - id: word-document-manage-comments name: Manage comments fileName: manage-comments.yaml diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml new file mode 100644 index 000000000..655256aa1 --- /dev/null +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -0,0 +1,128 @@ +order: 9 +id: word-paragraph-onadded-event +name: On adding paragraphs +description: 'Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs.' +host: WORD +api_set: + WordApi: '1.6' +script: + content: | + $("#register-event-handler").click(() => tryCatch(registerEventHandler)); + $("#insert-paragraphs").click(() => tryCatch(insertParagraphs)); + $("#get-paragraph-by-id").click(() => tryCatch(getParagraphById)); + $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); + + let eventContext; + + async function registerEventHandler() { + // Registers the onParagraphAdded event handler on the document. + await Word.run(async (context) => { + eventContext = context.document.onParagraphAdded.add(paragraphAdded); + await context.sync(); + + console.log("Added event handler for when paragraphs are added."); + }); + } + + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were added:`); + console.log(event.uniqueLocalIds); + }); + } + + async function getParagraphById() { + await Word.run(async (context) => { + const paragraphId = $("#paragraph-id").val() as string; + const paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); + paragraph.load(); + await paragraph.context.sync(); + + console.log(paragraph); + }); + } + + async function insertParagraphs() { + // Inserts two paragraphs within the document body. + await Word.run(async (context) => { + const paragraphCount = 2; + for (let i = 0; i < paragraphCount; i++) { + context.document.body.insertParagraph(`Paragraph Test ${i + 1}`, "End"); + } + + console.log("Paragraphs inserted: " + paragraphCount); + await context.sync(); + }); + } + + async function deregisterEventHandler() { + await Word.run(eventContext.context, async (context) => { + eventContext.remove(); + await context.sync(); + }); + + eventContext = null; + console.log("Removed event handler that was tracking when paragraphs are added."); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to use the onAdded event with paragraphs. +
+ +
+

Try it out

+ + +

From the console, copy a paragraph ID and paste it into the following field.
+ + + +

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml new file mode 100644 index 000000000..bfe33d854 --- /dev/null +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -0,0 +1,130 @@ +order: 10 +id: word-paragraph-onchanged-event +name: On changing content in paragraphs +description: 'Registers, triggers, and deregisters the onParagraphChanged event that tracks when content is changed in paragraphs.' +host: WORD +api_set: + WordApi: '1.6' +script: + content: | + $("#register-event-handler").click(() => tryCatch(registerEventHandler)); + $("#get-paragraph-by-id").click(() => tryCatch(getParagraphById)); + $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); + $("#setup").click(() => tryCatch(setup)); + + let eventContext; + + async function registerEventHandler() { + // Registers the onParagraphChanged event handler on the document. + await Word.run(async (context) => { + eventContext = context.document.onParagraphChanged.add(paragraphChanged); + await context.sync(); + + console.log("Added event handler for when content is changed in paragraphs."); + }); + } + + async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); + console.log(event.uniqueLocalIds); + }); + } + + async function getParagraphById() { + await Word.run(async (context) => { + const paragraphId = $("#paragraph-id").val() as string; + const paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); + paragraph.load(); + await paragraph.context.sync(); + + console.log(paragraph); + }); + } + + async function deregisterEventHandler() { + await Word.run(eventContext.context, async (context) => { + eventContext.remove(); + await context.sync(); + }); + + eventContext = null; + console.log("Removed event handler that was tracking content changes in paragraphs."); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("Paragraph 1", "End"); + body.insertParagraph("Paragraph 2", "End"); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to use the onChanged event with paragraphs. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ +

+

Within a paragraph, make a change in the text. Then, from the console, copy the paragraph + ID where content was changed and paste into the following field.
+ + + +

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml new file mode 100644 index 000000000..206cbd7bd --- /dev/null +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -0,0 +1,131 @@ +order: 11 +id: word-paragraph-ondeleted-event +name: On deleting paragraphs +description: 'Registers, triggers, and deregisters the onParagraphDeleted event that tracks the removal of paragraphs.' +host: WORD +api_set: + WordApi: '1.6' +script: + content: | + $("#register-event-handler").click(() => tryCatch(registerEventHandler)); + $("#delete-paragraph").click(() => tryCatch(deleteParagraph)); + $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); + $("#setup").click(() => tryCatch(setup)); + + let eventContext; + + async function registerEventHandler() { + // Registers the onParagraphDeleted event handler on the document. + await Word.run(async (context) => { + eventContext = context.document.onParagraphDeleted.add(paragraphDeleted); + await context.sync(); + + console.log("Added event handlers for when paragraphs are deleted."); + }); + } + + async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); + console.log(event.uniqueLocalIds); + }); + } + + async function deleteParagraph() { + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("items"); + await context.sync(); + + if (paragraphs.items.length == 0) { + console.log("There are no paragraphs in this document."); + } else { + console.log("Paragraph to be deleted:"); + console.log(paragraphs.items[0]); + paragraphs.items[0].delete(); + await context.sync(); + } + }); + } + + async function deregisterEventHandler() { + await Word.run(eventContext.context, async (context) => { + eventContext.remove(); + await context.sync(); + }); + + eventContext = null; + console.log("Removed event handler that was tracking when paragraphs are deleted."); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("Paragraph 1", "End"); + body.insertParagraph("Paragraph 2", "End"); + body.insertParagraph("Paragraph 3", "End"); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to use the onDeleted event with paragraphs. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ + + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 3cc873b13..b07a76f06 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: word-document-manage-comments name: Manage comments description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 891a3362c..87b7c9d14 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: word-document-manage-custom-xml-part-ns name: Manage a CustomXmlPart with the namespace description: 'This sample shows how to add, query, replace, edit, and delete a custom XML part in a document.' diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 9c1e35ae1..62e0e69a6 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: word-document-manage-custom-xml-part name: Manage a CustomXmlPart without the namespace description: 'This sample shows how to add, query, edit, and delete a custom XML part in a document.' diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index 2c0f8fc13..ab6e4b759 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: word-document-manage-fields name: Manage fields description: 'This sample shows how to perform basic operations on fields, including insert, get, and delete.' diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index cc86fda22..19df415cf 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: word-document-manage-footnotes name: Manage footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index b0c060fbc..4c924cc8c 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: word-document-manage-settings name: Manage settings description: 'This sample shows how to add, edit, get, and delete custom settings on a document.' diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 15e8ae404..7ebc3e4d1 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: word-document-manage-styles name: Manage styles description: This sample shows how to perform operations on the styles in the current document and how to add and delete custom styles. diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml new file mode 100644 index 000000000..0ce4fc524 --- /dev/null +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -0,0 +1,220 @@ +order: 5 +id: word-document-manage-tracked-changes +name: Manage tracked changes +description: 'This samples shows how to manage tracked changes, including accepting and rejecting changes.' +host: WORD +api_set: + WordApi: '1.6' +script: + content: | + $("#get-all-tracked-changes").click(() => tryCatch(getAllTrackedChanges)); + $("#get-first-tracked-change-range").click(() => tryCatch(getFirstTrackedChangeRange)); + $("#get-next-tracked-change").click(() => tryCatch(getNextTrackedChange)); + $("#accept-first-tracked-change").click(() => tryCatch(acceptFirstTrackedChange)); + $("#reject-first-tracked-change").click(() => tryCatch(rejectFirstTrackedChange)); + $("#accept-all-tracked-changes").click(() => tryCatch(acceptAllTrackedChanges)); + $("#reject-all-tracked-changes").click(() => tryCatch(rejectAllTrackedChanges)); + $("#setup").click(() => tryCatch(setup)); + + async function getAllTrackedChanges() { + // Gets all tracked changes. + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.load(); + await context.sync(); + + console.log(trackedChanges); + }); + } + + async function getFirstTrackedChangeRange() { + // Gets the range of the first tracked change. + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const range = trackedChange.getRange(); + range.load(); + await context.sync(); + + console.log("range.text: " + range.text); + }); + } + + async function getNextTrackedChange() { + // Gets the next (second) tracked change. + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + await context.sync(); + + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const nextTrackedChange = trackedChange.getNext(); + await context.sync(); + + nextTrackedChange.load(); + await context.sync(); + + console.log(nextTrackedChange); + }); + } + + async function acceptFirstTrackedChange() { + // Accepts the first tracked change. + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + trackedChange.load(); + await context.sync(); + + console.log("First tracked change:"); + console.log(trackedChange); + trackedChange.accept(); + console.log("Accepted the first tracked change"); + }); + } + + async function rejectFirstTrackedChange() { + // Rejects the first tracked change. + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + trackedChange.load(); + await context.sync(); + + console.log("First tracked change:"); + console.log(trackedChange); + trackedChange.reject(); + console.log("Rejected the first tracked change"); + }); + } + + async function acceptAllTrackedChanges() { + // Accepts all tracked changes. + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.acceptAll(); + console.log("Accepted all tracked changes"); + }); + } + + async function rejectAllTrackedChanges() { + // Rejects all tracked changes. + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.rejectAll(); + console.log("Rejected all tracked changes"); + }); + } + + async function setup() { + // Updates the text and sets the font color to red. + await Word.run(async (context) => { + context.document.changeTrackingMode = Word.ChangeTrackingMode.off; + + context.document.body.insertText("AAA BBB CCC DDD EEE FFF", "Replace"); + + context.document.changeTrackingMode = Word.ChangeTrackingMode.trackAll; + context.document.body + .search("BBB") + .getFirst() + .insertText("WWW", "Replace"); + context.document.body + .search("DDD ") + .getFirst() + .delete(); + context.document.body + .search("FFF") + .getFirst() + .insertText("XXX ", "Start"); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample shows how to manage tracked changes. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ + + + + +
+
+

First, choose the Add sample text button. + +

+

First, choose the Add sample text button. + +

+
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 4a5b6c8ad..d7fe03cc3 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: word-document-save-close name: Manage document save and close description: Shows how to manage saving and closing document. diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 56fd4e919ad19c6a5a58950be57bedf033d173f1..19617f33bef57925ced28f78b322f31420672e85 100644 GIT binary patch delta 14382 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 delta 13459 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 F{{eDPc)$Pv diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 419c5831c..c95c041d7 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14225,6 +14225,21 @@ console.log("Body contents (OOXML): " + bodyOOXML.value); }); +'Word.Body#getTrackedChanges:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets all tracked changes. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.load(); + await context.sync(); + + console.log(trackedChanges); + }); 'Word.Body#insertBreak:member(1)': - >- // Link to full sample: @@ -15805,6 +15820,19 @@ console.log(newStyleName + " has been added to the style list."); }); +'Word.Document#getParagraphByUniqueLocalId:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + await Word.run(async (context) => { + const paragraphId = $("#paragraph-id").val() as string; + const paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); + paragraph.load(); + await paragraph.context.sync(); + + console.log(paragraph); + }); 'Word.Document#getStyles:member(1)': - >- // Link to full sample: @@ -15863,6 +15891,75 @@ console.log(event.ids); }); } +'Word.Document#onParagraphAdded:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + // Registers the onParagraphAdded event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphAdded.add(paragraphAdded); + await context.sync(); + + console.log("Added event handler for when paragraphs are added."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were added:`); + console.log(event.uniqueLocalIds); + }); + } +'Word.Document#onParagraphChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + // Registers the onParagraphChanged event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphChanged.add(paragraphChanged); + await context.sync(); + + console.log("Added event handler for when content is changed in paragraphs."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); + console.log(event.uniqueLocalIds); + }); + } +'Word.Document#onParagraphDeleted:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + // Registers the onParagraphDeleted event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphDeleted.add(paragraphDeleted); + await context.sync(); + + console.log("Added event handlers for when paragraphs are deleted."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); + console.log(event.uniqueLocalIds); + }); + } 'Word.Document#properties:member': - >- // Link to full sample: @@ -17148,6 +17245,52 @@ await context.sync(); console.log(paragraph.text); }); +'Word.ParagraphAddedEventArgs:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + // Registers the onParagraphAdded event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphAdded.add(paragraphAdded); + await context.sync(); + + console.log("Added event handler for when paragraphs are added."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were added:`); + console.log(event.uniqueLocalIds); + }); + } +'Word.ParagraphChangedEventArgs:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + // Registers the onParagraphChanged event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphChanged.add(paragraphChanged); + await context.sync(); + + console.log("Added event handler for when content is changed in paragraphs."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + + async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); + console.log(event.uniqueLocalIds); + }); + } 'Word.ParagraphCollection#getLast:member(1)': - >- // Link to full sample: @@ -17194,6 +17337,29 @@ await context.sync(); }); +'Word.ParagraphDeleted:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + // Registers the onParagraphDeleted event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onParagraphDeleted.add(paragraphDeleted); + await context.sync(); + + console.log("Added event handlers for when paragraphs are deleted."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + + async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { + await Word.run(async (context) => { + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); + console.log(event.uniqueLocalIds); + }); + } 'Word.ParagraphFormat#alignment:member': - >- // Link to full sample: @@ -18259,6 +18425,131 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); +'Word.TrackedChange#accept:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Accepts the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + trackedChange.load(); + await context.sync(); + + console.log("First tracked change:"); + console.log(trackedChange); + trackedChange.accept(); + console.log("Accepted the first tracked change"); + }); +'Word.TrackedChange#getRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets the range of the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const range = trackedChange.getRange(); + range.load(); + await context.sync(); + + console.log("range.text: " + range.text); + }); +'Word.TrackedChange#reject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Rejects the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + trackedChange.load(); + await context.sync(); + + console.log("First tracked change:"); + console.log(trackedChange); + trackedChange.reject(); + console.log("Rejected the first tracked change"); + }); +'Word.TrackedChangeCollection#acceptAll:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Accepts all tracked changes. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.acceptAll(); + console.log("Accepted all tracked changes"); + }); +'Word.TrackedChangeCollection#getFirst:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets the range of the first tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const range = trackedChange.getRange(); + range.load(); + await context.sync(); + + console.log("range.text: " + range.text); + }); +'Word.TrackedChangeCollection#getNext:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets the next (second) tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + await context.sync(); + + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const nextTrackedChange = trackedChange.getNext(); + await context.sync(); + + nextTrackedChange.load(); + await context.sync(); + + console.log(nextTrackedChange); + }); +'Word.TrackedChangeCollection#rejectAll:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Rejects all tracked changes. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + trackedChanges.rejectAll(); + console.log("Rejected all tracked changes"); + }); 'Word.VerticalAlignment:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index ad4c739bc..373000aa9 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -20,6 +20,9 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml", + "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml", + "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml", "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml", "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml", "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml", @@ -31,6 +34,7 @@ "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml", + "word-document-manage-tracked-changes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml", "word-document-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml", "word-document-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml", "word-document-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml", diff --git a/view/word.json b/view/word.json index c74a0f538..df24c118b 100644 --- a/view/word.json +++ b/view/word.json @@ -20,6 +20,9 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onadded-event.yaml", + "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onchanged-event.yaml", + "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/ondeleted-event.yaml", "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/30-properties/get-built-in-properties.yaml", "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/30-properties/read-write-custom-document-properties.yaml", "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/scroll-to-range.yaml", @@ -31,6 +34,7 @@ "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml", "word-document-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.yaml", + "word-document-manage-tracked-changes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-tracked-changes.yaml", "word-document-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-comments.yaml", "word-document-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-footnotes.yaml", "word-document-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-fields.yaml", From 82ce398408368b98303f1c6c12c1fe0ed47a2411 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 21 Dec 2023 10:56:09 -0800 Subject: [PATCH 025/156] Remapping Word snippets (#837) --- snippet-extractor-metadata/word.xlsx | Bin 21437 -> 21527 bytes snippet-extractor-output/snippets.yaml | 1422 ++++++++++++------------ 2 files changed, 711 insertions(+), 711 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 19617f33bef57925ced28f78b322f31420672e85..2c5d3b84d4058dff95a19247c644b25c7a31c31c 100644 GIT binary patch delta 12559 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 delta 12502 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

*Nj2tR8c!)3ZEbwAuiDY|VQk~ugkD=rQ} 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c95c041d7..7e6959a6e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14166,6 +14166,77 @@ clear the contents of a document. // https://aka.ms/sillystorywordaddin +'Word.Body#fields:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + + // Gets all fields in the document body. + + await Word.run(async (context) => { + const fields = context.document.body.fields.load("items"); + + await context.sync(); + + if (fields.items.length === 0) { + console.log("No fields in this document."); + } else { + fields.load(["code", "result"]); + await context.sync(); + + for (let i = 0; i < fields.items.length; i++) { + console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`); + console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); + } + } + }); +'Word.Body#font:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Gets the style and the font size, font name, and font color properties on + the body object. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to load font and style information for the document body. + body.load("font/size, font/name, font/color, style"); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + // Show font-related property values on the body object. + const results = + "Font size: " + + body.font.size + + "; Font name: " + + body.font.name + + "; Font color: " + + body.font.color + + "; Body style: " + + body.style; + + console.log(results); + }); +'Word.Body#footnotes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + // Gets the footnotes in the document body. + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("length"); + await context.sync(); + + console.log("Number of footnotes in the document body: " + footnotes.items.length); + }); 'Word.Body#getComments:member(1)': - >- // Link to full sample: @@ -14240,6 +14311,25 @@ console.log(trackedChanges); }); +'Word.Body#inlinePictures:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + + // Gets the first image in the document. + + await Word.run(async (context) => { + const firstPicture = context.document.body.inlinePictures.getFirst(); + firstPicture.load("width, height"); + + await context.sync(); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + // Get the image encoded as Base64. + const base64 = firstPicture.getBase64ImageSrc(); + + await context.sync(); + console.log(base64.value); + }); 'Word.Body#insertBreak:member(1)': - >- // Link to full sample: @@ -14446,6 +14536,59 @@ console.log('Text added to the beginning of the document body.'); }); +'Word.Body#paragraphs:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml + + // Counts how many times each term appears in the document. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("text"); + await context.sync(); + + // Split up the document text using existing spaces as the delimiter. + let text = []; + paragraphs.items.forEach((item) => { + let paragraph = item.text.trim(); + if (paragraph) { + paragraph.split(" ").forEach((term) => { + let currentTerm = term.trim(); + if (currentTerm) { + text.push(currentTerm); + } + }); + } + }); + + // Determine the list of unique terms. + let makeTextDistinct = new Set(text); + let distinctText = Array.from(makeTextDistinct); + let allSearchResults = []; + + for (let i = 0; i < distinctText.length; i++) { + let results = context.document.body.search(distinctText[i], { matchCase: true, matchWholeWord: true }); + results.load("text"); + + // Map each search term with its results. + let correlatedResults = { + searchTerm: distinctText[i], + hits: results + }; + + allSearchResults.push(correlatedResults); + } + + await context.sync(); + + // Display the count for each search term. + allSearchResults.forEach((result) => { + let length = result.hits.items.length; + + console.log("Search term: " + result.searchTerm + " => Count: " + length); + }); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: @@ -14506,149 +14649,6 @@ console.log("Selected the document body."); }); -'Word.Body#fields:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - - // Gets all fields in the document body. - - await Word.run(async (context) => { - const fields = context.document.body.fields.load("items"); - - await context.sync(); - - if (fields.items.length === 0) { - console.log("No fields in this document."); - } else { - fields.load(["code", "result"]); - await context.sync(); - - for (let i = 0; i < fields.items.length; i++) { - console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`); - console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); - } - } - }); -'Word.Body#font:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml - - // Gets the style and the font size, font name, and font color properties on - the body object. - - // Run a batch operation against the Word object model. - - await Word.run(async (context) => { - // Create a proxy object for the document body. - const body = context.document.body; - - // Queue a command to load font and style information for the document body. - body.load("font/size, font/name, font/color, style"); - - // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. - await context.sync(); - - // Show font-related property values on the body object. - const results = - "Font size: " + - body.font.size + - "; Font name: " + - body.font.name + - "; Font color: " + - body.font.color + - "; Body style: " + - body.style; - - console.log(results); - }); -'Word.Body#footnotes:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - - // Gets the footnotes in the document body. - - await Word.run(async (context) => { - const footnotes = context.document.body.footnotes; - footnotes.load("length"); - await context.sync(); - - console.log("Number of footnotes in the document body: " + footnotes.items.length); - }); -'Word.Body#inlinePictures:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - - // Gets the first image in the document. - - await Word.run(async (context) => { - const firstPicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); - - await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as Base64. - const base64 = firstPicture.getBase64ImageSrc(); - - await context.sync(); - console.log(base64.value); - }); -'Word.Body#paragraphs:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml - - // Counts how many times each term appears in the document. - - await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("text"); - await context.sync(); - - // Split up the document text using existing spaces as the delimiter. - let text = []; - paragraphs.items.forEach((item) => { - let paragraph = item.text.trim(); - if (paragraph) { - paragraph.split(" ").forEach((term) => { - let currentTerm = term.trim(); - if (currentTerm) { - text.push(currentTerm); - } - }); - } - }); - - // Determine the list of unique terms. - let makeTextDistinct = new Set(text); - let distinctText = Array.from(makeTextDistinct); - let allSearchResults = []; - - for (let i = 0; i < distinctText.length; i++) { - let results = context.document.body.search(distinctText[i], { matchCase: true, matchWholeWord: true }); - results.load("text"); - - // Map each search term with its results. - let correlatedResults = { - searchTerm: distinctText[i], - hits: results - }; - - allSearchResults.push(correlatedResults); - } - - await context.sync(); - - // Display the count for each search term. - allSearchResults.forEach((result) => { - let length = result.hits.items.length; - - console.log("Search term: " + result.searchTerm + " => Count: " + length); - }); - }); 'Word.Body#tables:member': - >- // Link to full sample: @@ -14850,6 +14850,30 @@ console.log(`Reviewed text (before):\n${before.value}`); console.log(`Reviewed text (after):\n${after.value}`); }); +'Word.Comment#content:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + // Edits the first comment in the selected content. + + await Word.run(async (context) => { + const text = $("#edit-comment-text") + .val() + .toString(); + const comment = context.document + .getSelection() + .getComments() + .getFirst(); + comment.content = text; + + // Load object for display in Script Lab console. + comment.load(); + await context.sync(); + + console.log("Comment content changed:"); + console.log(comment); + }); 'Word.Comment#delete:member(1)': - >- // Link to full sample: @@ -14907,30 +14931,6 @@ console.log("No active comment was found in the selection so couldn't reply."); } }); -'Word.Comment#content:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - - // Edits the first comment in the selected content. - - await Word.run(async (context) => { - const text = $("#edit-comment-text") - .val() - .toString(); - const comment = context.document - .getSelection() - .getComments() - .getFirst(); - comment.content = text; - - // Load object for display in Script Lab console. - comment.load(); - await context.sync(); - - console.log("Comment content changed:"); - console.log(comment); - }); 'Word.Comment#resolved:member': - >- // Link to full sample: @@ -14996,64 +14996,25 @@ } else { console.log("No active comment was found in the selection so couldn't reply."); } - }); -'Word.ContentControl#delete:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml - - await Word.run(async (context) => { - const contentControls = context.document.contentControls.getByTag("forTesting"); - contentControls.load("items"); - await context.sync(); - - if (contentControls.items.length === 0) { - console.log("There are no content controls in this document."); - } else { - console.log("Control to be deleted:"); - console.log(contentControls.items[0]); - contentControls.items[0].delete(false); - await context.sync(); - } - }); -'Word.ContentControl#set:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml - - // Adds title and colors to odd and even content controls and changes their - appearance. - - await Word.run(async (context) => { - // Get the complete sentence (as range) associated with the insertion point. - let evenContentControls = context.document.contentControls.getByTag("even"); - let oddContentControls = context.document.contentControls.getByTag("odd"); - evenContentControls.load("length"); - oddContentControls.load("length"); - - await context.sync(); - - for (let i = 0; i < evenContentControls.items.length; i++) { - // Change a few properties and append a paragraph - evenContentControls.items[i].set({ - color: "red", - title: "Odd ContentControl #" + (i + 1), - appearance: Word.ContentControlAppearance.tags - }); - evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); - } - - for (let j = 0; j < oddContentControls.items.length; j++) { - // Change a few properties and append a paragraph - oddContentControls.items[j].set({ - color: "green", - title: "Even ContentControl #" + (j + 1), - appearance: "Tags" - }); - oddContentControls.items[j].insertHtml("This is an even content control", "End"); - } + }); +'Word.ContentControl#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + await Word.run(async (context) => { + const contentControls = context.document.contentControls.getByTag("forTesting"); + contentControls.load("items"); await context.sync(); + + if (contentControls.items.length === 0) { + console.log("There are no content controls in this document."); + } else { + console.log("Control to be deleted:"); + console.log(contentControls.items[0]); + contentControls.items[0].delete(false); + await context.sync(); + } }); 'Word.ContentControl#onDataChanged:member': - >- @@ -15227,6 +15188,45 @@ console.log(event.ids); }); } +'Word.ContentControl#set:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml + + // Adds title and colors to odd and even content controls and changes their + appearance. + + await Word.run(async (context) => { + // Get the complete sentence (as range) associated with the insertion point. + let evenContentControls = context.document.contentControls.getByTag("even"); + let oddContentControls = context.document.contentControls.getByTag("odd"); + evenContentControls.load("length"); + oddContentControls.load("length"); + + await context.sync(); + + for (let i = 0; i < evenContentControls.items.length; i++) { + // Change a few properties and append a paragraph + evenContentControls.items[i].set({ + color: "red", + title: "Odd ContentControl #" + (i + 1), + appearance: Word.ContentControlAppearance.tags + }); + evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); + } + + for (let j = 0; j < oddContentControls.items.length; j++) { + // Change a few properties and append a paragraph + oddContentControls.items[j].set({ + color: "green", + title: "Even ContentControl #" + (j + 1), + appearance: "Tags" + }); + oddContentControls.items[j].insertHtml("This is an even content control", "End"); + } + + await context.sync(); + }); 'Word.ContentControl#tag:member': - >- // Link to full sample: @@ -15559,6 +15559,32 @@ await context.sync(); }); +'Word.CustomXmlPart#id:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Adds a custom XML part. + + await Word.run(async (context) => { + const originalXml = + "JuanHongSally"; + const customXmlPart = context.document.customXmlParts.add(originalXml); + customXmlPart.load("id"); + const xmlBlob = customXmlPart.getXml(); + + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + console.log("Added custom XML part:"); + console.log(readableXml); + + // Store the XML part's ID in a setting so the ID is available to other functions. + const settings = context.document.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); + + await context.sync(); + }); 'Word.CustomXmlPart#insertAttribute:member(1)': - >- // Link to full sample: @@ -15618,6 +15644,30 @@ console.warn("Didn't find custom XML part to insert element into"); } }); +'Word.CustomXmlPart#namespaceUri:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + // Gets the namespace URI from a custom XML part. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + + await context.sync(); + + if (xmlPartIDSetting.value) { + const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); + customXmlPart.load("namespaceUri"); + await context.sync(); + + const namespaceUri = customXmlPart.namespaceUri; + console.log(`Namespace URI: ${JSON.stringify(namespaceUri)}`); + } else { + console.warn("Didn't find custom XML part"); + } + }); 'Word.CustomXmlPart#query:member(1)': - >- // Link to full sample: @@ -15683,56 +15733,6 @@ console.warn("Didn't find custom XML part to replace"); } }); -'Word.CustomXmlPart#id:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - - // Adds a custom XML part. - - await Word.run(async (context) => { - const originalXml = - "JuanHongSally"; - const customXmlPart = context.document.customXmlParts.add(originalXml); - customXmlPart.load("id"); - const xmlBlob = customXmlPart.getXml(); - - await context.sync(); - - const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Added custom XML part:"); - console.log(readableXml); - - // Store the XML part's ID in a setting so the ID is available to other functions. - const settings = context.document.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); - - await context.sync(); - }); -'Word.CustomXmlPart#namespaceUri:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml - - // Gets the namespace URI from a custom XML part. - - await Word.run(async (context) => { - const settings = context.document.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); - - await context.sync(); - - if (xmlPartIDSetting.value) { - const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); - customXmlPart.load("namespaceUri"); - await context.sync(); - - const namespaceUri = customXmlPart.namespaceUri; - console.log(`Namespace URI: ${JSON.stringify(namespaceUri)}`); - } else { - console.warn("Didn't find custom XML part"); - } - }); 'Word.CustomXmlPartCollection#add:member(1)': - >- // Link to full sample: @@ -15820,6 +15820,26 @@ console.log(newStyleName + " has been added to the style list."); }); +'Word.Document#changeTrackingMode:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + + // Gets the current change tracking mode. + + await Word.run(async (context) => { + const document = context.document; + document.load("changeTrackingMode"); + await context.sync(); + + if (document.changeTrackingMode === Word.ChangeTrackingMode.trackMineOnly) { + console.log("Only my changes are being tracked."); + } else if (document.changeTrackingMode === Word.ChangeTrackingMode.trackAll) { + console.log("Everyone's changes are being tracked."); + } else { + console.log("No changes are being tracked."); + } + }); 'Word.Document#getParagraphByUniqueLocalId:member(1)': - >- // Link to full sample: @@ -15847,26 +15867,6 @@ console.log(`Number of styles: ${count.value}`); }); -'Word.Document#changeTrackingMode:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml - - // Gets the current change tracking mode. - - await Word.run(async (context) => { - const document = context.document; - document.load("changeTrackingMode"); - await context.sync(); - - if (document.changeTrackingMode === Word.ChangeTrackingMode.trackMineOnly) { - console.log("Only my changes are being tracked."); - } else if (document.changeTrackingMode === Word.ChangeTrackingMode.trackAll) { - console.log("Everyone's changes are being tracked."); - } else { - console.log("No changes are being tracked."); - } - }); 'Word.Document#onContentControlAdded:member': - >- // Link to full sample: @@ -16041,113 +16041,49 @@ console.log(event.ids); }); } -'Word.Field#delete:member(1)': +'Word.Field#code:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Deletes the first field in the document. + // Gets the first field in the document. await Word.run(async (context) => { const field = context.document.body.fields.getFirstOrNullObject(); - field.load(); - - await context.sync(); - - if (field.isNullObject) { - console.log("This document has no fields."); - } else { - field.delete(); - await context.sync(); - - console.log("The first field in the document was deleted."); - } - }); -'Word.Field#select:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - - // Gets and updates the first field in the selection. - - await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); - field.load(["code", "result", "type", "locked"]); - - await context.sync(); - - if (field.isNullObject) { - console.log("No field in selection."); - } else { - console.log("Before updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - - field.updateResult(); - field.select(); - await context.sync(); - - field.load(["code", "result"]); - await context.sync(); - - console.log("After updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - } - }); -'Word.Field#updateResult:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - - // Gets and updates the first field in the selection. - - await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); - field.load(["code", "result", "type", "locked"]); + field.load(["code", "result", "locked", "type", "data", "kind"]); await context.sync(); if (field.isNullObject) { - console.log("No field in selection."); + console.log("This document has no fields."); } else { - console.log("Before updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - - field.updateResult(); - field.select(); - await context.sync(); - - field.load(["code", "result"]); - await context.sync(); - - console.log("After updating:"); console.log("Code of first field: " + field.code); console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("Type of first field: " + field.type); + console.log("Is the first field locked? " + field.locked); + console.log("Kind of the first field: " + field.kind); } }); -'Word.Field#code:member': +'Word.Field#delete:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Gets the first field in the document. + // Deletes the first field in the document. await Word.run(async (context) => { const field = context.document.body.fields.getFirstOrNullObject(); - field.load(["code", "result", "locked", "type", "data", "kind"]); + field.load(); await context.sync(); if (field.isNullObject) { console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); + field.delete(); + await context.sync(); + + console.log("The first field in the document was deleted."); } }); 'Word.Field#kind:member': @@ -16239,6 +16175,38 @@ console.log("Kind of the first field: " + field.kind); } }); +'Word.Field#select:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + + // Gets and updates the first field in the selection. + + await Word.run(async (context) => { + var field = context.document.getSelection().fields.getFirstOrNullObject(); + field.load(["code", "result", "type", "locked"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("No field in selection."); + } else { + console.log("Before updating:"); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); + + field.updateResult(); + field.select(); + await context.sync(); + + field.load(["code", "result"]); + await context.sync(); + + console.log("After updating:"); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); + } + }); 'Word.Field#type:member': - >- // Link to full sample: @@ -16262,6 +16230,38 @@ console.log("Kind of the first field: " + field.kind); } }); +'Word.Field#updateResult:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + + // Gets and updates the first field in the selection. + + await Word.run(async (context) => { + var field = context.document.getSelection().fields.getFirstOrNullObject(); + field.load(["code", "result", "type", "locked"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("No field in selection."); + } else { + console.log("Before updating:"); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); + + field.updateResult(); + field.select(); + await context.sync(); + + field.load(["code", "result"]); + await context.sync(); + + console.log("After updating:"); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); + } + }); 'Word.FieldCollection#getFirstOrNullObject:member(1)': - >- // Link to full sample: @@ -16364,21 +16364,6 @@ await context.sync(); console.log(base64.value); }); -'Word.InlinePicture:class': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - - // Inserts an image anchored to the last paragraph. - - await Word.run(async (context) => { - context.document.body.paragraphs - .getLast() - .insertParagraph("", "After") - .insertInlinePictureFromBase64(base64Image, "End"); - - await context.sync(); - }); 'Word.InlinePicture#getBase64ImageSrc:member(1)': - >- // Link to full sample: @@ -16418,6 +16403,21 @@ await context.sync(); console.log(base64.value); }); +'Word.InlinePicture:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + + // Inserts an image anchored to the last paragraph. + + await Word.run(async (context) => { + context.document.body.paragraphs + .getLast() + .insertParagraph("", "After") + .insertInlinePictureFromBase64(base64Image, "End"); + + await context.sync(); + }); 'Word.InlinePictureCollection:class': - >- // Link to full sample: @@ -16452,7 +16452,7 @@ console.log("Inserted section without an associated page break"); }); -'Word.List:class': +'Word.List#insertParagraph:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -16483,75 +16483,79 @@ await context.sync(); }); -'Word.List#insertParagraph:member(1)': +'Word.List#levelExistences:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // This example starts a new list with the second paragraph. + // Gets information about the first list in the document. await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); + const lists = context.document.body.lists; + lists.load("items"); await context.sync(); - // Start new list using the second paragraph. - const list = paragraphs.items[1].startNewList(); - list.load("$none"); + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); await context.sync(); - // To add new items to the list, use Start or End on the insertLocation parameter. - list.insertParagraph("New list item at the start of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); - - // Set up list level for the list item. - paragraph.listItem.level = 4; - - // To add paragraphs outside the list, use Before or After. - list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } - await context.sync(); + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } }); -'Word.List#setLevelBullet:member(1)': +'Word.List#levelTypes:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Inserts a list starting with the first paragraph then set numbering and - bullet types of the list items. + // Gets information about the first list in the document. await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); + const lists = context.document.body.lists; + lists.load("items"); await context.sync(); - // Use the first paragraph to start a new list. - const list = paragraphs.items[0].startNewList(); - list.load("$none"); + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); await context.sync(); - // To add new items to the list, use Start or End on the insertLocation parameter. - list.insertParagraph("New list item at the start of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); - - // Set numbering for list level 1. - list.setLevelNumbering(0, Word.ListNumbering.arabic); - - // Set bullet type for list level 5. - list.setLevelBullet(4, Word.ListBullet.arrow); - - // Set list level for the last item in this list. - paragraph.listItem.level = 4; - - list.load("levelTypes"); + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } - await context.sync(); + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } }); -'Word.List#setLevelNumbering:member(1)': +'Word.List#setLevelBullet:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -16588,79 +16592,44 @@ await context.sync(); }); -'Word.List#levelExistences:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - - // Gets information about the first list in the document. - - await Word.run(async (context) => { - const lists = context.document.body.lists; - lists.load("items"); - - await context.sync(); - - if (lists.items.length === 0) { - console.warn("There are no lists in this document"); - return; - } - - // Get the first list. - const list = lists.getFirst(); - list.load("levelTypes,levelExistences"); - - await context.sync(); - - const levelTypes = list.levelTypes; - console.log("Level types of the first list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } - - const levelExistences = list.levelExistences; - console.log("Level existences of the first list:"); - for (let i = 0; i < levelExistences.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); - } - }); -'Word.List#levelTypes:member': +'Word.List#setLevelNumbering:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Gets information about the first list in the document. + // Inserts a list starting with the first paragraph then set numbering and + bullet types of the list items. await Word.run(async (context) => { - const lists = context.document.body.lists; - lists.load("items"); + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); await context.sync(); - if (lists.items.length === 0) { - console.warn("There are no lists in this document"); - return; - } - - // Get the first list. - const list = lists.getFirst(); - list.load("levelTypes,levelExistences"); + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].startNewList(); + list.load("$none"); await context.sync(); - const levelTypes = list.levelTypes; - console.log("Level types of the first list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item at the start of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); - const levelExistences = list.levelExistences; - console.log("Level existences of the first list:"); - for (let i = 0; i < levelExistences.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); - } + // Set numbering for list level 1. + list.setLevelNumbering(0, Word.ListNumbering.arabic); + + // Set bullet type for list level 5. + list.setLevelBullet(4, Word.ListBullet.arrow); + + // Set list level for the last item in this list. + paragraph.listItem.level = 4; + + list.load("levelTypes"); + + await context.sync(); }); -'Word.ListItem#level:member': +'Word.List:class': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -16726,6 +16695,37 @@ list.load("levelTypes"); + await context.sync(); + }); +'Word.ListItem#level:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + + // This example starts a new list with the second paragraph. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); + list.load("$none"); + + await context.sync(); + + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item at the start of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); + + // Set up list level for the list item. + paragraph.listItem.level = 4; + + // To add paragraphs outside the list, use Before or After. + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + await context.sync(); }); 'Word.ListLevelType:enum': @@ -16823,62 +16823,62 @@ console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.value}`); }); -'Word.NoteItem#delete:member(1)': +'Word.NoteItem#body:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Deletes this referenced footnote. + // Gets the text of the referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items"); + footnotes.load("items/body"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - footnotes.items[mark].delete(); + const footnoteBody = footnotes.items[mark].body.getRange(); + footnoteBody.load("text"); await context.sync(); - console.log("Footnote deleted."); + console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); }); -'Word.NoteItem#getNext:member(1)': +'Word.NoteItem#delete:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Selects the next footnote in the document body. + // Deletes this referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items/reference"); + footnotes.load("items"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - const reference = footnotes.items[mark].getNext().reference; - reference.select(); - console.log("Selected is the next footnote: " + (mark + 2)); + footnotes.items[mark].delete(); + await context.sync(); + + console.log("Footnote deleted."); }); -'Word.NoteItem#body:member': +'Word.NoteItem#getNext:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Gets the text of the referenced footnote. + // Selects the next footnote in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items/body"); + footnotes.load("items/reference"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - const footnoteBody = footnotes.items[mark].body.getRange(); - footnoteBody.load("text"); - await context.sync(); - - console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); + const reference = footnotes.items[mark].getNext().reference; + reference.select(); + console.log("Selected is the next footnote: " + (mark + 2)); }); 'Word.NoteItem#reference:member': - >- @@ -16960,6 +16960,17 @@ console.log(`Body type of note: ${item.body.type}`); }); +'Word.Paragraph#alignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + + await Word.run(async (context) => { + // Center last paragraph alignment. + context.document.body.paragraphs.getLast().alignment = "Centered"; + + await context.sync(); + }); 'Word.Paragraph#getRange:member(1)': - >- // Link to full sample: @@ -17014,77 +17025,46 @@ await context.sync(); }); -'Word.Paragraph#select:member(1)': +'Word.Paragraph#leftIndent:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { - // If select is called with no parameters, it selects the object. - context.document.body.paragraphs.getLast().select(); + // Indent the first paragraph. + context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points - await context.sync(); + return context.sync(); }); +'Word.Paragraph#lineSpacing:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { - // Select can be at the start or end of a range; this by definition moves the insertion point without selecting the range. - context.document.body.paragraphs.getLast().select(Word.SelectionMode.end); + // Adjust line spacing. + context.document.body.paragraphs.getFirst().lineSpacing = 20; await context.sync(); }); -'Word.Paragraph#split:member(1)': +'Word.Paragraph#select:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml await Word.run(async (context) => { - const paragraph = context.document.body.paragraphs.getFirst(); - const words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); - words.load("text"); + // If select is called with no parameters, it selects the object. + context.document.body.paragraphs.getLast().select(); await context.sync(); - - for (let i = 0; i < words.items.length; i++) { - if (i >= 1) { - words.items[i - 1].font.highlightColor = "#FFFFFF"; - } - words.items[i].font.highlightColor = "#FFFF00"; - - await context.sync(); - await pause(200); - } }); -'Word.Paragraph#startNewList:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml - - // This example starts a new list with the second paragraph. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); - - await context.sync(); - - // Start new list using the second paragraph. - const list = paragraphs.items[1].startNewList(); - list.load("$none"); - - await context.sync(); - - // To add new items to the list, use Start or End on the insertLocation parameter. - list.insertParagraph("New list item at the start of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); - - // Set up list level for the list item. - paragraph.listItem.level = 4; - - // To add paragraphs outside the list, use Before or After. - list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + // Select can be at the start or end of a range; this by definition moves the insertion point without selecting the range. + context.document.body.paragraphs.getLast().select(Word.SelectionMode.end); await context.sync(); }); @@ -17120,47 +17100,67 @@ await context.sync(); }); -'Word.Paragraph#alignment:member': +'Word.Paragraph#spaceAfter:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { - // Center last paragraph alignment. - context.document.body.paragraphs.getLast().alignment = "Centered"; + // Adjust space between paragraphs. + context.document.body.paragraphs.getFirst().spaceAfter = 20; await context.sync(); }); -'Word.Paragraph#leftIndent:member': +'Word.Paragraph#split:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml await Word.run(async (context) => { - // Indent the first paragraph. - context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points + const paragraph = context.document.body.paragraphs.getFirst(); + const words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); + words.load("text"); - return context.sync(); + await context.sync(); + + for (let i = 0; i < words.items.length; i++) { + if (i >= 1) { + words.items[i - 1].font.highlightColor = "#FFFFFF"; + } + words.items[i].font.highlightColor = "#FFFF00"; + + await context.sync(); + await pause(200); + } }); -'Word.Paragraph#lineSpacing:member': +'Word.Paragraph#startNewList:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + + // This example starts a new list with the second paragraph. await Word.run(async (context) => { - // Adjust line spacing. - context.document.body.paragraphs.getFirst().lineSpacing = 20; + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); await context.sync(); - }); -'Word.Paragraph#spaceAfter:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml - await Word.run(async (context) => { - // Adjust space between paragraphs. - context.document.body.paragraphs.getFirst().spaceAfter = 20; + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); + list.load("$none"); + + await context.sync(); + + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item at the start of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); + + // Set up list level for the list item. + paragraph.listItem.level = 4; + + // To add paragraphs outside the list, use Before or After. + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); await context.sync(); }); @@ -17245,7 +17245,7 @@ await context.sync(); console.log(paragraph.text); }); -'Word.ParagraphAddedEventArgs:class': +'Word.ParagraphAddedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml @@ -17268,7 +17268,7 @@ console.log(event.uniqueLocalIds); }); } -'Word.ParagraphChangedEventArgs:class': +'Word.ParagraphChangedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml @@ -17337,7 +17337,7 @@ await context.sync(); }); -'Word.ParagraphDeleted:class': +'Word.ParagraphDeletedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml @@ -17434,7 +17434,21 @@ await context.sync(); - console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.value}`); + console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.value}`); + }); +'Word.Range#footnotes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + // Gets the footnotes in the selected document range. + + await Word.run(async (context) => { + const footnotes = context.document.getSelection().footnotes; + footnotes.load("length"); + await context.sync(); + + console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); 'Word.Range#getComments:member(1)': - >- @@ -17591,20 +17605,6 @@ console.log("Inserted footnote."); }); -'Word.Range#footnotes:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - - // Gets the footnotes in the selected document range. - - await Word.run(async (context) => { - const footnotes = context.document.getSelection().footnotes; - footnotes.load("length"); - await context.sync(); - - console.log("Number of footnotes in the selected range: " + footnotes.items.length); - }); 'Word.Range#styleBuiltIn:member': - >- // Link to full sample: @@ -17647,20 +17647,18 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.Section:class': +'Word.Section#getFooter:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml - - // Inserts a section break on the next page. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml await Word.run(async (context) => { - const body = context.document.body; - body.insertBreak(Word.BreakType.sectionNext, Word.InsertLocation.end); + context.document.sections + .getFirst() + .getFooter("Primary") + .insertParagraph("This is a primary footer.", "End"); await context.sync(); - - console.log("Inserted section break on next page"); }); 'Word.Section#getHeader:member(1)': - >- @@ -17675,18 +17673,20 @@ await context.sync(); }); -'Word.Section#getFooter:member(2)': +'Word.Section:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml + + // Inserts a section break on the next page. await Word.run(async (context) => { - context.document.sections - .getFirst() - .getFooter("Primary") - .insertParagraph("This is a primary footer.", "End"); + const body = context.document.body; + body.insertBreak(Word.BreakType.sectionNext, Word.InsertLocation.end); await context.sync(); + + console.log("Inserted section break on next page"); }); 'Word.SectionCollection:class': - >- @@ -17776,19 +17776,6 @@ console.log("Setting added or edited:"); console.log(setting); }); -'Word.SettingCollection:class': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml - - // Deletes all custom settings this add-in had set on this document. - - await Word.run(async (context) => { - const settings = context.document.settings; - settings.deleteAll(); - await context.sync(); - console.log("All settings deleted"); - }); 'Word.SettingCollection#add:member(1)': - >- // Link to full sample: @@ -17841,6 +17828,19 @@ } } }); +'Word.SettingCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Deletes all custom settings this add-in had set on this document. + + await Word.run(async (context) => { + const settings = context.document.settings; + settings.deleteAll(); + await context.sync(); + console.log("All settings deleted"); + }); 'Word.Style#delete:member(1)': - >- // Link to full sample: @@ -18033,22 +18033,22 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Table:class': +'Word.Table#alignment:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - await Word.run(async (context) => { - // Use a two-dimensional array to hold the initial table values. - const data = [ - ["Tokyo", "Beijing", "Seattle"], - ["Apple", "Orange", "Pineapple"] - ]; - const table = context.document.body.insertTable(2, 3, "Start", data); - table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; - table.styleFirstColumn = false; + // Gets alignment details about the first table in the document. + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); await context.sync(); + + console.log(`Details about the alignment of the first table:`); + console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); + console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); + console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); 'Word.Table#getBorder:member(1)': - >- @@ -18100,23 +18100,6 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` ); }); -'Word.Table#alignment:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - - // Gets alignment details about the first table in the document. - - await Word.run(async (context) => { - const firstTable = context.document.body.tables.getFirst(); - firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); - await context.sync(); - - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); - }); 'Word.Table#horizontalAlignment:member': - >- // Link to full sample: @@ -18169,6 +18152,23 @@ console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); +'Word.Table:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + + await Word.run(async (context) => { + // Use a two-dimensional array to hold the initial table values. + const data = [ + ["Tokyo", "Beijing", "Seattle"], + ["Apple", "Orange", "Pineapple"] + ]; + const table = context.document.body.insertTable(2, 3, "Start", data); + table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; + table.styleFirstColumn = false; + + await context.sync(); + }); 'Word.TableBorder#color:member': - >- // Link to full sample: @@ -18226,20 +18226,6 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); -'Word.TableCell:class': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml - - // Gets the content of the first cell in the first table. - - await Word.run(async (context) => { - const firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; - firstCell.load("text"); - - await context.sync(); - console.log("First cell's text is: " + firstCell.text); - }); 'Word.TableCell#getBorder:member(2)': - >- // Link to full sample: @@ -18315,22 +18301,19 @@ console.log(`- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`); console.log(`- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCollection:class': +'Word.TableCell:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml - // Gets alignment details about the first table in the document. + // Gets the content of the first cell in the first table. await Word.run(async (context) => { - const firstTable = context.document.body.tables.getFirst(); - firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); - await context.sync(); + const firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; + firstCell.load("text"); - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + await context.sync(); + console.log("First cell's text is: " + firstCell.text); }); 'Word.TableCollection#getFirst:member(1)': - >- @@ -18346,6 +18329,23 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); +'Word.TableCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Gets alignment details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); + await context.sync(); + + console.log(`Details about the alignment of the first table:`); + console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); + console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); + console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + }); 'Word.TableRow#getBorder:member(1)': - >- // Link to full sample: @@ -18386,44 +18386,44 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table's first row: ${cellPadding.value} points` ); }); -'Word.TableRowCollection:class': +'Word.TableRowCollection#getFirst:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Gets content alignment details about the first row of the first table in - the document. + // Gets border details about the first row of the first table in the + document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); const firstTableRow = firstTable.rows.getFirst(); - firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); + const borderLocation = Word.BorderLocation.bottom; + const border = firstTableRow.getBorder(borderLocation); + border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the alignment of the first table's first row:`); - console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); + console.log(`Details about the ${borderLocation} border of the first table's first row:`); + console.log(`- Color: ${border.color}`); + console.log(`- Type: ${border.type}`); + console.log(`- Width: ${border.width} points`); }); -'Word.TableRowCollection#getFirst:member(1)': +'Word.TableRowCollection:class': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Gets border details about the first row of the first table in the - document. + // Gets content alignment details about the first row of the first table in + the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); const firstTableRow = firstTable.rows.getFirst(); - const borderLocation = Word.BorderLocation.bottom; - const border = firstTableRow.getBorder(borderLocation); - border.load(["type", "color", "width"]); + firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table's first row:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the alignment of the first table's first row:`); + console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); + console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); 'Word.TrackedChange#accept:member(1)': - >- @@ -18444,6 +18444,29 @@ trackedChange.accept(); console.log("Accepted the first tracked change"); }); +'Word.TrackedChange#getNext:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + // Gets the next (second) tracked change. + + await Word.run(async (context) => { + const body = context.document.body; + const trackedChanges = body.getTrackedChanges(); + await context.sync(); + + const trackedChange = trackedChanges.getFirst(); + await context.sync(); + + const nextTrackedChange = trackedChange.getNext(); + await context.sync(); + + nextTrackedChange.load(); + await context.sync(); + + console.log(nextTrackedChange); + }); 'Word.TrackedChange#getRange:member(1)': - >- // Link to full sample: @@ -18514,29 +18537,6 @@ console.log("range.text: " + range.text); }); -'Word.TrackedChangeCollection#getNext:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml - - // Gets the next (second) tracked change. - - await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - await context.sync(); - - const trackedChange = trackedChanges.getFirst(); - await context.sync(); - - const nextTrackedChange = trackedChange.getNext(); - await context.sync(); - - nextTrackedChange.load(); - await context.sync(); - - console.log(nextTrackedChange); - }); 'Word.TrackedChangeCollection#rejectAll:member(1)': - >- // Link to full sample: From 2b20695c2ebf9d0806480cc3bdc7a4424bc28a7b Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 29 Dec 2023 12:09:36 -0800 Subject: [PATCH 026/156] Mapping PPT snippets to additional enum endpoints (#839) --- snippet-extractor-metadata/powerpoint.xlsx | Bin 13210 -> 13364 bytes snippet-extractor-output/snippets.yaml | 75 +++++++++++++++++---- 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 82bf34ad03ecc8d0da955d1c6a125d31664d5102..a5ea6d9462b53589e426a5374c16d34580b1b3dc 100644 GIT binary patch delta 7367 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 P0f+K2pmK8mds delta 7166 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 Zi@~%qf+x5|V0>7>$UL+NsqFs|{STo*cvb)a diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7e6959a6e..aa730f687 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13380,6 +13380,57 @@ console.log(`Successfully set end date and time to ${end}`); }); }); +'PowerPoint.ConnectorType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + // This function gets the collection of shapes on the first slide, + + // and adds a line to the collection, while specifying its + + // start and end points. Then it names the shape. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.slides.getItemAt(0).shapes; + + // For a line, left and top are the coordinates of the start point, + // while height and width are the coordinates of the end point. + const line = shapes.addLine(PowerPoint.ConnectorType.straight, + { + left: 400, + top: 200, + height: 20, + width: 150 + }); + line.name = "StraightLine"; + + await context.sync(); + }); +'PowerPoint.GeometricShapeType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + // This function gets the collection of shapes on the first slide, + + // and adds a hexagon shape to the collection, while specifying its + + // location and size. Then it names the shape. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.slides.getItemAt(0).shapes; + const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, + { + left: 100, + top: 100, + height: 150, + width: 150 + }); + hexagon.name = "Hexagon"; + + await context.sync(); + }); 'PowerPoint.Presentation#getSelectedShapes:member(1)': - >- // Link to full sample: @@ -14025,6 +14076,18 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); +'PowerPoint.TextRange#font:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + + // Sets the color of the selected text range to green. + + await PowerPoint.run(async (context) => { + const textRange = context.presentation.getSelectedTextRange(); + textRange.font.color = "green"; + await context.sync(); + }); 'PowerPoint.TextRange#setSelected:member(1)': - >- // Link to full sample: @@ -14071,18 +14134,6 @@ textRange.setSelected(); await context.sync(); }); -'PowerPoint.TextRange#font:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml - - // Sets the color of the selected text range to green. - - await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); - textRange.font.color = "green"; - await context.sync(); - }); 'Word.Alignment:enum': - >- // Link to full sample: From ea25317ece51f6aa183d27232f0bdd850abefb24 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 29 Jan 2024 16:45:35 -0800 Subject: [PATCH 027/156] [Word] (insert external doc) Add function to apply settings (#841) * [Word] (insert external doc) Add function to apply settings * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Metadata mappings --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 7 +- playlists/word.yaml | 7 +- .../50-document/insert-external-document.yaml | 31 ++++++- snippet-extractor-metadata/word.xlsx | Bin 21527 -> 21637 bytes snippet-extractor-output/snippets.yaml | 82 +++++++++++++----- 5 files changed, 99 insertions(+), 28 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 8735d1564..4cb9e21dc 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -322,12 +322,15 @@ - id: word-document-insert-external-document name: Insert an external document fileName: insert-external-document.yaml - description: Inserts the text of an external document into the current document. + description: >- + Inserts the content (with or without settings) of an external document into + the current document. Settings include formatting, change-tracking mode, + custom properties, and XML parts. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml group: Document api_set: - WordApi: '1.3' + WordApi: '1.6' - id: word-document-manage-change-tracking name: Track changes fileName: manage-change-tracking.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index c7d6801a5..9e9de745c 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -322,12 +322,15 @@ - id: word-document-insert-external-document name: Insert an external document fileName: insert-external-document.yaml - description: Inserts the text of an external document into the current document. + description: >- + Inserts the content (with or without settings) of an external document into + the current document. Settings include formatting, change-tracking mode, + custom properties, and XML parts. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml group: Document api_set: - WordApi: '1.3' + WordApi: '1.6' - id: word-document-manage-change-tracking name: Track changes fileName: manage-change-tracking.yaml diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index d48cabbea..01792af5b 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -1,14 +1,15 @@ order: 3 id: word-document-insert-external-document name: Insert an external document -description: Inserts the text of an external document into the current document. +description: 'Inserts the content (with or without settings) of an external document into the current document. Settings include formatting, change-tracking mode, custom properties, and XML parts.' host: WORD api_set: - WordApi: '1.3' + WordApi: '1.6' script: content: | $("#file").change(getBase64); $("#insert-document").click(() => tryCatch(insertDocument)); + $("#insert-document-with-settings").click(() => tryCatch(insertDocumentWithSettings)); let externalDocument; @@ -31,6 +32,23 @@ script: }); } + async function insertDocumentWithSettings() { + // Inserts content (applying selected settings) from another document passed in as a Base64-encoded string. + await Word.run(async (context) => { + // Use the Base64-encoded string representation of the selected .docx file. + context.document.insertFileFromBase64(externalDocument, "Replace", { + importTheme: true, + importStyles: true, + importParagraphSpacing: true, + importPageColor: true, + importChangeTrackingMode: true, + importCustomProperties: true, + importCustomXmlParts: true + }); + await context.sync(); + }); + } + function getBase64() { // Retrieve the file and set up an HTML FileReader element. const myFile = document.getElementById("file"); @@ -64,14 +82,19 @@ template:

Try it out

-

Select a Word document to copy its body text into the current document.

+

Select a Word document.


Insert the body text from the selected document.

+
+

Insert the body text with settings applied from the selected document.

+
language: html diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 2c5d3b84d4058dff95a19247c644b25c7a31c31c..47bcb9f60d9a7160984da6756c47781c0961e8a9 100644 GIT binary patch delta 13825 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 Us?`Mn#)_c7>XgtxmH$BgKQS2z!vFvP delta 13718 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 B*TMh* diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index aa730f687..fd60f59e0 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15871,26 +15871,6 @@ console.log(newStyleName + " has been added to the style list."); }); -'Word.Document#changeTrackingMode:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml - - // Gets the current change tracking mode. - - await Word.run(async (context) => { - const document = context.document; - document.load("changeTrackingMode"); - await context.sync(); - - if (document.changeTrackingMode === Word.ChangeTrackingMode.trackMineOnly) { - console.log("Only my changes are being tracked."); - } else if (document.changeTrackingMode === Word.ChangeTrackingMode.trackAll) { - console.log("Everyone's changes are being tracked."); - } else { - console.log("No changes are being tracked."); - } - }); 'Word.Document#getParagraphByUniqueLocalId:member(1)': - >- // Link to full sample: @@ -15918,6 +15898,47 @@ console.log(`Number of styles: ${count.value}`); }); +'Word.Document#insertFileFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + + // Inserts content (applying selected settings) from another document passed + in as a Base64-encoded string. + + await Word.run(async (context) => { + // Use the Base64-encoded string representation of the selected .docx file. + context.document.insertFileFromBase64(externalDocument, "Replace", { + importTheme: true, + importStyles: true, + importParagraphSpacing: true, + importPageColor: true, + importChangeTrackingMode: true, + importCustomProperties: true, + importCustomXmlParts: true + }); + await context.sync(); + }); +'Word.Document#changeTrackingMode:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + + // Gets the current change tracking mode. + + await Word.run(async (context) => { + const document = context.document; + document.load("changeTrackingMode"); + await context.sync(); + + if (document.changeTrackingMode === Word.ChangeTrackingMode.trackMineOnly) { + console.log("Only my changes are being tracked."); + } else if (document.changeTrackingMode === Word.ChangeTrackingMode.trackAll) { + console.log("Everyone's changes are being tracked."); + } else { + console.log("No changes are being tracked."); + } + }); 'Word.Document#onContentControlAdded:member': - >- // Link to full sample: @@ -16488,6 +16509,27 @@ await context.sync(); console.log(base64.value); }); +'Word.InsertFileOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + + // Inserts content (applying selected settings) from another document passed + in as a Base64-encoded string. + + await Word.run(async (context) => { + // Use the Base64-encoded string representation of the selected .docx file. + context.document.insertFileFromBase64(externalDocument, "Replace", { + importTheme: true, + importStyles: true, + importParagraphSpacing: true, + importPageColor: true, + importChangeTrackingMode: true, + importCustomProperties: true, + importCustomXmlParts: true + }); + await context.sync(); + }); 'Word.InsertLocation:enum': - >- // Link to full sample: From b86d3108c1882542fd3a3c517ffee48c45f95de8 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 1 Feb 2024 16:13:45 -0800 Subject: [PATCH 028/156] [Word] (writing assistance) Add snippet on managing annotations (#845) * [Word] (writing assistance) Add snippet on managing annotations * Update samples/word/50-document/manage-annotations.yaml Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * minor updates --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/word.yaml | 11 + playlists/word.yaml | 11 + .../word/50-document/manage-annotations.yaml | 350 ++++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 5 files changed, 374 insertions(+) create mode 100644 samples/word/50-document/manage-annotations.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 4cb9e21dc..270b82320 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -439,6 +439,17 @@ group: Document api_set: WordApi: '1.5' +- id: word-document-manage-annotations + name: Manage annotations + fileName: manage-annotations.yaml + description: >- + Shows how to leverage the Writing Assistance API to manage annotations and + use annotation events. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + group: Document + api_set: + WordApi: '1.7' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 9e9de745c..5c18040c2 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -439,6 +439,17 @@ group: Document api_set: WordApi: '1.5' +- id: word-document-manage-annotations + name: Manage annotations + fileName: manage-annotations.yaml + description: >- + Shows how to leverage the Writing Assistance API to manage annotations and + use annotation events. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml + group: Document + api_set: + WordApi: '1.7' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml new file mode 100644 index 000000000..482c036b8 --- /dev/null +++ b/samples/word/50-document/manage-annotations.yaml @@ -0,0 +1,350 @@ +order: 14 +id: word-document-manage-annotations +name: Manage annotations +description: Shows how to leverage the Writing Assistance API to manage annotations and use annotation events. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.7' +script: + content: | + $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); + $("#insert-annotations").click(() => tryCatch(insertAnnotations)); + $("#get-annotations").click(() => tryCatch(getAnnotations)); + $("#accept-first").click(() => tryCatch(acceptFirst)); + $("#reject-last").click(() => tryCatch(rejectLast)); + $("#delete-annotations").click(() => tryCatch(deleteAnnotations)); + $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); + $("#setup").click(() => tryCatch(setup)); + + let eventContexts = []; + + async function registerEventHandlers() { + // Registers event handlers. + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + + await context.sync(); + + console.log("Event handlers registered."); + }); + } + + async function paragraphChanged(args: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + const results = []; + for (let id of args.uniqueLocalIds) { + let para = context.document.getParagraphByUniqueLocalId(id); + para.load("uniqueLocalId"); + + results.push({ para: para, text: para.getText() }); + } + + await context.sync(); + + for (let result of results) { + console.log(`${args.type}: ${result.para.uniqueLocalId} - ${result.text.value}`); + } + }); + } + + async function insertAnnotations() { + // Adds annotations to the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const critique1 = { + colorScheme: Word.CritiqueColorScheme.red, + start: 1, + length: 3 + }; + const critique2 = { + colorScheme: Word.CritiqueColorScheme.green, + start: 6, + length: 1 + }; + const critique3 = { + colorScheme: Word.CritiqueColorScheme.blue, + start: 10, + length: 3 + }; + const critique4 = { + colorScheme: Word.CritiqueColorScheme.lavender, + start: 14, + length: 3 + }; + const critique5 = { + colorScheme: Word.CritiqueColorScheme.berry, + start: 18, + length: 10 + }; + const annotationSet: Word.AnnotationSet = { + critiques: [critique1, critique2, critique3, critique4, critique5] + }; + + const annotationIds = paragraph.insertAnnotations(annotationSet); + + await context.sync(); + + console.log("Annotations inserted:", annotationIds.value); + }); + } + + async function getAnnotations() { + // Gets annotations found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + console.log("Annotations found:"); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); + } + + async function acceptFirst() { + // Accepts the first annotation found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Accepting ${annotation.id}`); + annotation.critiqueAnnotation.accept(); + + await context.sync(); + break; + } + } + }); + } + + async function rejectLast() { + // Rejects the last annotation found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = annotations.items.length - 1; i >= 0; i--) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Rejecting ${annotation.id}`); + annotation.critiqueAnnotation.reject(); + + await context.sync(); + break; + } + } + }); + } + + async function deleteAnnotations() { + // Deletes all annotations found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id"); + + await context.sync(); + + const ids = []; + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + ids.push(annotation.id); + annotation.delete(); + } + + await context.sync(); + + console.log("Annotations deleted:", ids); + }); + } + + async function onClickedHandler(args: Word.AnnotationClickedEventArgs) { + await Word.run(async (context) => { + const annotation = context.document.getAnnotationById(args.id); + annotation.load("critiqueAnnotation"); + + await context.sync(); + + console.log(`AnnotationClicked: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + }); + } + + async function onHoveredHandler(args: Word.AnnotationHoveredEventArgs) { + await Word.run(async (context) => { + const annotation = context.document.getAnnotationById(args.id); + annotation.load("critiqueAnnotation"); + + await context.sync(); + + console.log(`AnnotationHovered: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + }); + } + + async function onInsertedHandler(args: Word.AnnotationInsertedEventArgs) { + await Word.run(async (context) => { + const annotations = []; + for (let i = 0; i < args.ids.length; i++) { + let annotation = context.document.getAnnotationById(args.ids[i]); + annotation.load("id,critiqueAnnotation"); + + annotations.push(annotation); + } + + await context.sync(); + + for (let annotation of annotations) { + console.log(`AnnotationInserted: ${annotation.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); + } + + async function onRemovedHandler(args: Word.AnnotationRemovedEventArgs) { + await Word.run(async (context) => { + for (let id of args.ids) { + console.log(`AnnotationRemoved: ${id}`); + } + }); + } + + async function deregisterEventHandlers() { + // Deregisters event handlers. + await Word.run(async (context) => { + for (let i = 0; i < eventContexts.length; i++) { + await Word.run(eventContexts[i].context, async (context) => { + eventContexts[i].remove(); + }); + } + + await context.sync(); + + eventContexts = []; + console.log("Removed event handlers."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", + "Start" + ); + body.insertParagraph( + "To make your document look professionally produced, Word provides header, footer, cover page, and text box designs that complement each other. For example, you can add a matching cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", + "End" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample demonstrates how to manage annotations and use annotation events.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+ Register event handlers. + +
+ Insert annotations. + +
+ Get annotations. + +
+ Accept first. + +
+ Reject last. + +
+ Delete annotations. + +
+ Deregister event handlers. + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/word.json b/view-prod/word.json index 373000aa9..6c01615b0 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -43,6 +43,7 @@ "word-document-manage-custom-xml-part": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml", "word-document-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml", + "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml" diff --git a/view/word.json b/view/word.json index df24c118b..c5827c28e 100644 --- a/view/word.json +++ b/view/word.json @@ -43,6 +43,7 @@ "word-document-manage-custom-xml-part": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-custom-xml-part.yaml", "word-document-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.yaml", + "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml" From 02eb0468c8e780f5cf0d13899946443f969ba418 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 1 Feb 2024 16:40:11 -0800 Subject: [PATCH 029/156] [Word] (paragraph) Add snippet for GetText (#844) * [Word] (paragraph) Add snippet for GetText * Use ul instead of ol * Set snippet order * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Updates based on feedback * Note Hidden text feature restriction --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/word.yaml | 11 ++ playlists/word.yaml | 11 ++ samples/word/25-paragraph/get-text.yaml | 111 ++++++++++++++++++ samples/word/25-paragraph/onadded-event.yaml | 2 +- .../word/25-paragraph/onchanged-event.yaml | 2 +- .../word/25-paragraph/ondeleted-event.yaml | 2 +- view-prod/word.json | 1 + view/word.json | 1 + 8 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 samples/word/25-paragraph/get-text.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 270b82320..814660c7c 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -201,6 +201,17 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-get-text + name: Get text + fileName: get-text.yaml + description: >- + Shows how to get paragraph text, including hidden text and text marked for + deletion. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-text.yaml + group: Paragraph + api_set: + WordApi: '1.7' - id: word-paragraph-onadded-event name: On adding paragraphs fileName: onadded-event.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 5c18040c2..007469f00 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -201,6 +201,17 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-get-text + name: Get text + fileName: get-text.yaml + description: >- + Shows how to get paragraph text, including hidden text and text marked for + deletion. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-text.yaml + group: Paragraph + api_set: + WordApi: '1.7' - id: word-paragraph-onadded-event name: On adding paragraphs fileName: onadded-event.yaml diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml new file mode 100644 index 000000000..66e726b12 --- /dev/null +++ b/samples/word/25-paragraph/get-text.yaml @@ -0,0 +1,111 @@ +order: 9 +id: word-paragraph-get-text +name: Get text +description: 'Shows how to get paragraph text, including hidden text and text marked for deletion.' +author: OfficeDev +host: WORD +api_set: + WordApi: '1.7' +script: + content: | + $("#run").click(() => tryCatch(run)); + $("#setup").click(() => tryCatch(setup)); + + async function run() { + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + + const text = paragraph.getText(); + const textIncludingHidden = paragraph.getText({ IncludeHiddenText: true }); + const textIncludingDeleted = paragraph.getText({ IncludeTextMarkedAsDeleted: true }); + + await context.sync(); + + console.log("Text:- " + text.value); + console.log("Including hidden text:- " + textIncludingHidden.value); + console.log("Including text marked as deleted:- " + textIncludingDeleted.value); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", + "Start" + ); + body.insertParagraph( + "To make your document look professionally produced, Word provides header, footer, cover page, and text box designs that complement each other. For example, you can add a matching cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", + "End" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample demonstrates how to get paragraph text, including hidden text and text marked for deletion.

+
    +
  • How to hide selected text (only available on Windows): +
      +
    1. Open the Font dialog (e.g., right-click the text then select Font from the context menu).
    2. +
    3. Turn on the Hidden checkbox.
    4. +
    5. Choose OK.
    6. +
    +
  • +
  • How to Track changes in + Word.
  • +
+
+ +
+

Set up

+ +
+ +
+

Try it out

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index 655256aa1..da0fb0edb 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: word-paragraph-onadded-event name: On adding paragraphs description: 'Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs.' diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index bfe33d854..589a33571 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: word-paragraph-onchanged-event name: On changing content in paragraphs description: 'Registers, triggers, and deregisters the onParagraphChanged event that tracks when content is changed in paragraphs.' diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index 206cbd7bd..00e068d18 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: word-paragraph-ondeleted-event name: On deleting paragraphs description: 'Registers, triggers, and deregisters the onParagraphDeleted event that tracks the removal of paragraphs.' diff --git a/view-prod/word.json b/view-prod/word.json index 6c01615b0..b099d2075 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -20,6 +20,7 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-get-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-text.yaml", "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml", "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml", "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml", diff --git a/view/word.json b/view/word.json index c5827c28e..5e4d501e9 100644 --- a/view/word.json +++ b/view/word.json @@ -20,6 +20,7 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-get-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-text.yaml", "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onadded-event.yaml", "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onchanged-event.yaml", "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/ondeleted-event.yaml", From b41a343fd626e67b4d5bf44166c7078d0d26e533 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 1 Feb 2024 17:02:34 -0800 Subject: [PATCH 030/156] [Word] (table) Add snippet for managing custom style (#843) * [Word] (table) Add snippet for managing custom style * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Run yarn start * Add note about preview behavior --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/word.yaml | 13 +- playlists/word.yaml | 11 + .../99-preview-apis/manage-custom-style.yaml | 487 ++++++++++++++++++ view-prod/word.json | 3 +- view/word.json | 3 +- 5 files changed, 514 insertions(+), 3 deletions(-) create mode 100644 samples/word/99-preview-apis/manage-custom-style.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 814660c7c..72dadf915 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -487,4 +487,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml group: Preview APIs api_set: - WordApi: '1.1' \ No newline at end of file + WordApi: '1.1' +- id: word-tables-manage-custom-style + name: Manage custom table style + fileName: manage-custom-style.yaml + description: >- + Shows how to manage primarily margins and alignments of a custom table style + in the current document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + group: Preview APIs + api_set: + WordApi: '1.8' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index 007469f00..227d883ea 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -488,3 +488,14 @@ group: Preview APIs api_set: WordApi: '1.1' +- id: word-tables-manage-custom-style + name: Manage custom table style + fileName: manage-custom-style.yaml + description: >- + Shows how to manage primarily margins and alignments of a custom table style + in the current document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml + group: Preview APIs + api_set: + WordApi: '1.8' diff --git a/samples/word/99-preview-apis/manage-custom-style.yaml b/samples/word/99-preview-apis/manage-custom-style.yaml new file mode 100644 index 000000000..01bc08b8d --- /dev/null +++ b/samples/word/99-preview-apis/manage-custom-style.yaml @@ -0,0 +1,487 @@ +id: word-tables-manage-custom-style +name: Manage custom table style +description: Shows how to manage primarily margins and alignments of a custom table style in the current document. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.8' +script: + content: | + $("#add-style").click(() => tryCatch(addStyle)); + $("#apply-style").click(() => tryCatch(applyStyle)); + $("#show-style-properties").click(() => tryCatch(getTableStyle)); + $("#set-alignment").click(() => tryCatch(setAlignment)); + $("#set-allow-break-across-page").click(() => tryCatch(setAllowBreakAcrossPage)); + $("#set-top-cell-margin").click(() => tryCatch(setTopCellMargin)); + $("#set-bottom-cell-margin").click(() => tryCatch(setBottomCellMargin)); + $("#set-left-cell-margin").click(() => tryCatch(setLeftCellMargin)); + $("#set-right-cell-margin").click(() => tryCatch(setRightCellMargin)); + $("#set-cell-spacing").click(() => tryCatch(setCellSpacing)); + $("#delete-style").click(() => tryCatch(deleteStyle)); + $("#import-styles-from-json").click(() => tryCatch(importStylesFromJson)); + + async function addStyle() { + // Adds a new table style. + const newStyleName = $("#new-style-name").val() as string; + if (newStyleName == "") { + console.warn("Enter a style name to add."); + return; + } + + await Word.run(async (context) => { + const style = context.document.getStyles().getByNameOrNullObject(newStyleName); + style.load(); + await context.sync(); + + if (!style.isNullObject) { + console.warn( + `There's an existing style with the same name '${newStyleName}'! Please provide another style name.` + ); + return; + } + + context.document.addStyle(newStyleName, Word.StyleType.table); + await context.sync(); + + console.log(newStyleName + " has been added to the style list."); + }); + } + + async function applyStyle() { + // Applies the specified style to a new table. + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to apply."); + return; + } + + await Word.run(async (context) => { + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else if (style.type != Word.StyleType.table) { + console.warn(`The '${styleName}' style isn't a table style.`); + } else { + const body = context.document.body; + body.clear(); + const data = [ + ["Tokyo", "Beijing", "Seattle"], + ["Apple", "Orange", "Pineapple"] + ]; + const table = body.insertTable(2, 3, "Start", data); + table.style = style.nameLocal; + table.styleFirstColumn = false; + await context.sync(); + + console.log(`'${styleName}' style applied to first table.`); + console.log(style); + } + }); + } + + async function getTableStyle() { + // Gets the table style properties and displays them in the form. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.load(); + await context.sync(); + + if (tableStyle.isNullObject) { + console.warn(`There's no existing table style with the name '${styleName}'.`); + return; + } + + console.log(tableStyle); + $("#alignment").val(tableStyle.alignment); + $("#allow-break-across-page").val(tableStyle.allowBreakAcrossPage.toString()); + $("#top-cell-margin").val(tableStyle.topCellMargin); + $("#bottom-cell-margin").val(tableStyle.bottomCellMargin); + $("#left-cell-margin").val(tableStyle.leftCellMargin); + $("#right-cell-margin").val(tableStyle.rightCellMargin); + $("#cell-spacing").val(tableStyle.cellSpacing); + }); + } + + async function setAlignment() { + // Sets the table alignment. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const alignment = $("#alignment") + .val() + .toString(); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.alignment = alignment as Word.Alignment; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Alignment: " + tableStyle.alignment); + }); + } + + async function setAllowBreakAcrossPage() { + // Sets the allowBreakAcrossPage property. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const allowBreakAcrossPage = $("#allow-break-across-page").val() as string; + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.allowBreakAcrossPage = allowBreakAcrossPage === "true"; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("allowBreakAcrossPage: " + tableStyle.allowBreakAcrossPage); + }); + } + + async function setTopCellMargin() { + // Sets the top cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const topCellMargin = Number( + $("#top-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.topCellMargin = topCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Top cell margin: " + tableStyle.topCellMargin); + }); + } + + async function setBottomCellMargin() { + // Sets the bottom cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const bottomCellMargin = Number( + $("#bottom-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.bottomCellMargin = bottomCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Bottom cell margin: " + tableStyle.bottomCellMargin); + }); + } + + async function setLeftCellMargin() { + // Sets the left cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const leftCellMargin = Number( + $("#left-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.leftCellMargin = leftCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Left cell margin: " + tableStyle.leftCellMargin); + }); + } + + async function setRightCellMargin() { + // Sets the right cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const rightCellMargin = Number( + $("#right-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.rightCellMargin = rightCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Right cell margin: " + tableStyle.rightCellMargin); + }); + } + + async function setCellSpacing() { + // Sets the cell spacing. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const cellSpacing = Number( + $("#cell-spacing") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.cellSpacing = cellSpacing; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Cell spacing: " + tableStyle.cellSpacing); + }); + } + + async function deleteStyle() { + // Deletes the custom style. + const styleName = $("#style-name-to-delete").val() as string; + if (styleName == "") { + console.warn("Enter a style name to delete."); + return; + } + + await Word.run(async (context) => { + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.delete(); + console.log(`Successfully deleted custom style '${styleName}'.`); + } + }); + } + + async function importStylesFromJson() { + // Imports styles from JSON. + await Word.run(async (context) => { + const str = + '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; + const styles = context.document.importStylesFromJson(str); + await context.sync(); + console.log("Styles imported from JSON:"); + console.log(styles); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample demonstrates how to manage a custom table style and use Document.importStylesFromJson. +

+

Important: Some TableStyle properties are currently in preview. If this snippet doesn't work, try using Word + on a different platform.

+
+ +
+

Try it out

+

Add a new table style

+

Name the style using letters. Can include digits. Examples: NewName, newname1

+

+ + +

+ +

Use custom style

+ + +

+ +

+ +

+ +
+

Update custom style

+ +
Note: Mixed and Unknown aren't valid when setting.
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+

Delete custom style

+ + +
+ +
+ +
+

Import styles from JSON string

+ +
+ language: html +style: + content: | + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + + .margin { + margin-top: 5px; + margin-bottom: 5px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/word.json b/view-prod/word.json index b099d2075..626108b1b 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -47,5 +47,6 @@ "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml" + "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 5e4d501e9..957ffcc09 100644 --- a/view/word.json +++ b/view/word.json @@ -47,5 +47,6 @@ "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml" + "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file From f51bc1cb711fa27428b8495953e9aaf9cf1d0837 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 1 Feb 2024 17:29:53 -0800 Subject: [PATCH 031/156] [Word] Adding 1.7 property and fix null bug (#846) * [Word] Adding 1.7 property and fix null bug * Minor cleanup based on feedback from recent PR --- samples/word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- .../10-content-controls/content-control-onadded-event.yaml | 2 +- .../content-control-ondatachanged-event.yaml | 4 ++-- .../content-control-ondeleted-event.yaml | 4 ++-- .../content-control-onentered-event.yaml | 4 ++-- .../10-content-controls/content-control-onexited-event.yaml | 4 ++-- .../content-control-onselectionchanged-event.yaml | 4 ++-- .../insert-and-change-content-controls.yaml | 2 +- samples/word/15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 2 +- samples/word/20-lists/organize-list.yaml | 2 +- .../word/25-paragraph/get-paragraph-on-insertion-point.yaml | 2 +- samples/word/25-paragraph/get-word-count.yaml | 2 +- samples/word/25-paragraph/insert-formatted-text.yaml | 2 +- samples/word/25-paragraph/insert-header-and-footer.yaml | 2 +- samples/word/25-paragraph/onadded-event.yaml | 2 +- samples/word/25-paragraph/onchanged-event.yaml | 2 +- samples/word/25-paragraph/ondeleted-event.yaml | 2 +- samples/word/25-paragraph/paragraph-properties.yaml | 2 +- samples/word/30-properties/get-built-in-properties.yaml | 2 +- .../read-write-custom-document-properties.yaml | 2 +- samples/word/35-ranges/scroll-to-range.yaml | 2 +- samples/word/40-tables/manage-formatting.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- samples/word/50-document/insert-external-document.yaml | 5 +++-- samples/word/50-document/insert-section-breaks.yaml | 2 +- samples/word/50-document/manage-body.yaml | 2 +- samples/word/50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- samples/word/50-document/manage-custom-xml-part-ns.yaml | 2 +- samples/word/50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- samples/word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- samples/word/50-document/manage-tracked-changes.yaml | 2 +- samples/word/50-document/save-close.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- samples/word/90-scenarios/multiple-property-set.yaml | 2 +- samples/word/99-preview-apis/insert-and-get-pictures.yaml | 2 +- samples/word/default.yaml | 2 +- snippet-extractor-output/snippets.yaml | 6 ++++-- 43 files changed, 53 insertions(+), 50 deletions(-) diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index c27dbdf75..9c5f8b405 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -23,7 +23,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. function tryCatch(callback) { Promise.resolve() .then(callback) diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index fd9f583c1..822c891e6 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -23,7 +23,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 06949bb01..82b0c85a2 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -79,7 +79,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 57d539c5b..4b054e846 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -72,7 +72,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when data is changed in content controls."); }); } @@ -96,7 +96,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index 012e1cfaf..58c77c5a5 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -90,7 +90,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when content controls are deleted."); }); } @@ -114,7 +114,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index dbc4bef0a..249e2b31a 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -71,7 +71,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when the cursor is placed in content controls."); }); } @@ -95,7 +95,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index 6e4908277..925d4bda2 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -71,7 +71,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when the cursor is removed from within content controls."); }); } @@ -95,7 +95,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 51cbea505..bb59c443e 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -71,7 +71,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when selection is changed in content controls."); }); } @@ -95,7 +95,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index 161de751f..ccc108856 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -89,7 +89,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 7a7a62fa7..48aa5fdeb 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -58,7 +58,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 84d6ec71e..359355e8a 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -64,7 +64,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 9c17b9344..27b570e0c 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -89,7 +89,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index 5c6bcb403..24879ac21 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -68,7 +68,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 36ddd1817..61036bb90 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -76,7 +76,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 49dc12016..654172b82 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -64,7 +64,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index 0b83646ff..19f63e158 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -115,7 +115,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index da0fb0edb..dfcf4f04f 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -65,7 +65,7 @@ script: console.log("Removed event handler that was tracking when paragraphs are added."); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index 589a33571..79f7582a0 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -61,7 +61,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index 00e068d18..dfb62f43c 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -68,7 +68,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index fd51c0c93..2c88052fd 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -69,7 +69,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 040586d3a..6c7ecef07 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -20,7 +20,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/30-properties/read-write-custom-document-properties.yaml b/samples/word/30-properties/read-write-custom-document-properties.yaml index 8ad8b6db3..206497230 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -41,7 +41,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index 6726a96f7..45e2cf3d5 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -48,7 +48,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index eff2be977..6920d9585 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -170,7 +170,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 1f4e33a49..ae0a11384 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -37,7 +37,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 01792af5b..3182cf4c4 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -43,7 +43,8 @@ script: importPageColor: true, importChangeTrackingMode: true, importCustomProperties: true, - importCustomXmlParts: true + importCustomXmlParts: true, + importDifferentOddEvenPages: true }); await context.sync(); }); @@ -64,7 +65,7 @@ script: reader.readAsDataURL(myFile.files[0]); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index f86ed8b2b..c38b7feae 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -78,7 +78,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index ae0ccbdb2..dc43e06c2 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -322,7 +322,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 74b37eadc..6e2ef4e6c 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -78,7 +78,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index b07a76f06..6419c912e 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -170,7 +170,7 @@ script: ); }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 87b7c9d14..556fba94e 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -215,7 +215,7 @@ script: return xmlBlob.replace(/> <"); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 62e0e69a6..8973a568b 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -154,7 +154,7 @@ script: return xmlBlob.replace(/> <"); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index ab6e4b759..284916531 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -171,7 +171,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 19df415cf..65fabfb41 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -155,7 +155,7 @@ script: ); }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 4c924cc8c..c40a72290 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -66,7 +66,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 7ebc3e4d1..bf4b30440 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -210,7 +210,7 @@ script: reader.readAsDataURL(myFile.files[0]); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 0ce4fc524..da90e66be 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -139,7 +139,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index d7fe03cc3..be9092cc8 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -67,7 +67,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index bf3bc9926..3ab087497 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -106,7 +106,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index f10ced3f4..c1ab8bd7b 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -58,7 +58,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml index 4d2a75b8e..b78c58500 100644 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -58,7 +58,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 27169b905..cf62155ca 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -19,7 +19,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fd60f59e0..fcc0bdae2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15915,7 +15915,8 @@ importPageColor: true, importChangeTrackingMode: true, importCustomProperties: true, - importCustomXmlParts: true + importCustomXmlParts: true, + importDifferentOddEvenPages: true }); await context.sync(); }); @@ -16526,7 +16527,8 @@ importPageColor: true, importChangeTrackingMode: true, importCustomProperties: true, - importCustomXmlParts: true + importCustomXmlParts: true, + importDifferentOddEvenPages: true }); await context.sync(); }); From caf582289bd2b7eaf190941fe97957c540ba3e39 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 1 Feb 2024 17:33:32 -0800 Subject: [PATCH 032/156] [Admin] main -> prod (#847) * [Word] (writing assistance) Add snippet on managing annotations (#845) * [Word] (writing assistance) Add snippet on managing annotations * Update samples/word/50-document/manage-annotations.yaml Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * minor updates --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * [Word] (paragraph) Add snippet for GetText (#844) * [Word] (paragraph) Add snippet for GetText * Use ul instead of ol * Set snippet order * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Updates based on feedback * Note Hidden text feature restriction --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * [Word] (table) Add snippet for managing custom style (#843) * [Word] (table) Add snippet for managing custom style * Apply suggestions from code review Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Run yarn start * Add note about preview behavior --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * [Word] Adding 1.7 property and fix null bug (#846) * [Word] Adding 1.7 property and fix null bug * Minor cleanup based on feedback from recent PR --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/word.yaml | 35 +- playlists/word.yaml | 33 ++ .../word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- .../content-control-onadded-event.yaml | 2 +- .../content-control-ondatachanged-event.yaml | 4 +- .../content-control-ondeleted-event.yaml | 4 +- .../content-control-onentered-event.yaml | 4 +- .../content-control-onexited-event.yaml | 4 +- ...tent-control-onselectionchanged-event.yaml | 4 +- .../insert-and-change-content-controls.yaml | 2 +- .../15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 2 +- samples/word/20-lists/organize-list.yaml | 2 +- .../get-paragraph-on-insertion-point.yaml | 2 +- samples/word/25-paragraph/get-text.yaml | 111 ++++ samples/word/25-paragraph/get-word-count.yaml | 2 +- .../25-paragraph/insert-formatted-text.yaml | 2 +- .../insert-header-and-footer.yaml | 2 +- samples/word/25-paragraph/onadded-event.yaml | 4 +- .../word/25-paragraph/onchanged-event.yaml | 4 +- .../word/25-paragraph/ondeleted-event.yaml | 4 +- .../25-paragraph/paragraph-properties.yaml | 2 +- .../get-built-in-properties.yaml | 2 +- ...read-write-custom-document-properties.yaml | 2 +- samples/word/35-ranges/scroll-to-range.yaml | 2 +- samples/word/40-tables/manage-formatting.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- .../50-document/insert-external-document.yaml | 5 +- .../50-document/insert-section-breaks.yaml | 2 +- .../word/50-document/manage-annotations.yaml | 350 +++++++++++++ samples/word/50-document/manage-body.yaml | 2 +- .../50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- .../manage-custom-xml-part-ns.yaml | 2 +- .../50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- .../word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- .../50-document/manage-tracked-changes.yaml | 2 +- samples/word/50-document/save-close.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- .../90-scenarios/multiple-property-set.yaml | 2 +- .../insert-and-get-pictures.yaml | 2 +- .../99-preview-apis/manage-custom-style.yaml | 487 ++++++++++++++++++ samples/word/default.yaml | 2 +- snippet-extractor-output/snippets.yaml | 6 +- view-prod/word.json | 5 +- view/word.json | 5 +- 50 files changed, 1079 insertions(+), 56 deletions(-) create mode 100644 samples/word/25-paragraph/get-text.yaml create mode 100644 samples/word/50-document/manage-annotations.yaml create mode 100644 samples/word/99-preview-apis/manage-custom-style.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 4cb9e21dc..72dadf915 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -201,6 +201,17 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-get-text + name: Get text + fileName: get-text.yaml + description: >- + Shows how to get paragraph text, including hidden text and text marked for + deletion. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-text.yaml + group: Paragraph + api_set: + WordApi: '1.7' - id: word-paragraph-onadded-event name: On adding paragraphs fileName: onadded-event.yaml @@ -439,6 +450,17 @@ group: Document api_set: WordApi: '1.5' +- id: word-document-manage-annotations + name: Manage annotations + fileName: manage-annotations.yaml + description: >- + Shows how to leverage the Writing Assistance API to manage annotations and + use annotation events. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + group: Document + api_set: + WordApi: '1.7' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -465,4 +487,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml group: Preview APIs api_set: - WordApi: '1.1' \ No newline at end of file + WordApi: '1.1' +- id: word-tables-manage-custom-style + name: Manage custom table style + fileName: manage-custom-style.yaml + description: >- + Shows how to manage primarily margins and alignments of a custom table style + in the current document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + group: Preview APIs + api_set: + WordApi: '1.8' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index 9e9de745c..227d883ea 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -201,6 +201,17 @@ group: Paragraph api_set: WordApi: '1.1' +- id: word-paragraph-get-text + name: Get text + fileName: get-text.yaml + description: >- + Shows how to get paragraph text, including hidden text and text marked for + deletion. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-text.yaml + group: Paragraph + api_set: + WordApi: '1.7' - id: word-paragraph-onadded-event name: On adding paragraphs fileName: onadded-event.yaml @@ -439,6 +450,17 @@ group: Document api_set: WordApi: '1.5' +- id: word-document-manage-annotations + name: Manage annotations + fileName: manage-annotations.yaml + description: >- + Shows how to leverage the Writing Assistance API to manage annotations and + use annotation events. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml + group: Document + api_set: + WordApi: '1.7' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -466,3 +488,14 @@ group: Preview APIs api_set: WordApi: '1.1' +- id: word-tables-manage-custom-style + name: Manage custom table style + fileName: manage-custom-style.yaml + description: >- + Shows how to manage primarily margins and alignments of a custom table style + in the current document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml + group: Preview APIs + api_set: + WordApi: '1.8' diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index c27dbdf75..9c5f8b405 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -23,7 +23,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. function tryCatch(callback) { Promise.resolve() .then(callback) diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index fd9f583c1..822c891e6 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -23,7 +23,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 06949bb01..82b0c85a2 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -79,7 +79,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 57d539c5b..4b054e846 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -72,7 +72,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when data is changed in content controls."); }); } @@ -96,7 +96,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index 012e1cfaf..58c77c5a5 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -90,7 +90,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when content controls are deleted."); }); } @@ -114,7 +114,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index dbc4bef0a..249e2b31a 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -71,7 +71,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when the cursor is placed in content controls."); }); } @@ -95,7 +95,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index 6e4908277..925d4bda2 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -71,7 +71,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when the cursor is removed from within content controls."); }); } @@ -95,7 +95,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 51cbea505..bb59c443e 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -71,7 +71,7 @@ script: await context.sync(); - eventContexts = null; + eventContexts = []; console.log("Removed event handlers that were tracking when selection is changed in content controls."); }); } @@ -95,7 +95,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index 161de751f..ccc108856 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -89,7 +89,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 7a7a62fa7..48aa5fdeb 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -58,7 +58,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 84d6ec71e..359355e8a 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -64,7 +64,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 9c17b9344..27b570e0c 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -89,7 +89,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index 5c6bcb403..24879ac21 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -68,7 +68,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml new file mode 100644 index 000000000..66e726b12 --- /dev/null +++ b/samples/word/25-paragraph/get-text.yaml @@ -0,0 +1,111 @@ +order: 9 +id: word-paragraph-get-text +name: Get text +description: 'Shows how to get paragraph text, including hidden text and text marked for deletion.' +author: OfficeDev +host: WORD +api_set: + WordApi: '1.7' +script: + content: | + $("#run").click(() => tryCatch(run)); + $("#setup").click(() => tryCatch(setup)); + + async function run() { + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + + const text = paragraph.getText(); + const textIncludingHidden = paragraph.getText({ IncludeHiddenText: true }); + const textIncludingDeleted = paragraph.getText({ IncludeTextMarkedAsDeleted: true }); + + await context.sync(); + + console.log("Text:- " + text.value); + console.log("Including hidden text:- " + textIncludingHidden.value); + console.log("Including text marked as deleted:- " + textIncludingDeleted.value); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", + "Start" + ); + body.insertParagraph( + "To make your document look professionally produced, Word provides header, footer, cover page, and text box designs that complement each other. For example, you can add a matching cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", + "End" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample demonstrates how to get paragraph text, including hidden text and text marked for deletion.

+
    +
  • How to hide selected text (only available on Windows): +
      +
    1. Open the Font dialog (e.g., right-click the text then select Font from the context menu).
    2. +
    3. Turn on the Hidden checkbox.
    4. +
    5. Choose OK.
    6. +
    +
  • +
  • How to Track changes in + Word.
  • +
+
+ +
+

Set up

+ +
+ +
+

Try it out

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 36ddd1817..61036bb90 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -76,7 +76,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 49dc12016..654172b82 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -64,7 +64,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index 0b83646ff..19f63e158 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -115,7 +115,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index 655256aa1..dfcf4f04f 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: word-paragraph-onadded-event name: On adding paragraphs description: 'Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs.' @@ -65,7 +65,7 @@ script: console.log("Removed event handler that was tracking when paragraphs are added."); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index bfe33d854..79f7582a0 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: word-paragraph-onchanged-event name: On changing content in paragraphs description: 'Registers, triggers, and deregisters the onParagraphChanged event that tracks when content is changed in paragraphs.' @@ -61,7 +61,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index 206cbd7bd..dfb62f43c 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: word-paragraph-ondeleted-event name: On deleting paragraphs description: 'Registers, triggers, and deregisters the onParagraphDeleted event that tracks the removal of paragraphs.' @@ -68,7 +68,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index fd51c0c93..2c88052fd 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -69,7 +69,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 040586d3a..6c7ecef07 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -20,7 +20,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/30-properties/read-write-custom-document-properties.yaml b/samples/word/30-properties/read-write-custom-document-properties.yaml index 8ad8b6db3..206497230 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -41,7 +41,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index 6726a96f7..45e2cf3d5 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -48,7 +48,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index eff2be977..6920d9585 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -170,7 +170,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 1f4e33a49..ae0a11384 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -37,7 +37,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 01792af5b..3182cf4c4 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -43,7 +43,8 @@ script: importPageColor: true, importChangeTrackingMode: true, importCustomProperties: true, - importCustomXmlParts: true + importCustomXmlParts: true, + importDifferentOddEvenPages: true }); await context.sync(); }); @@ -64,7 +65,7 @@ script: reader.readAsDataURL(myFile.files[0]); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index f86ed8b2b..c38b7feae 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -78,7 +78,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml new file mode 100644 index 000000000..482c036b8 --- /dev/null +++ b/samples/word/50-document/manage-annotations.yaml @@ -0,0 +1,350 @@ +order: 14 +id: word-document-manage-annotations +name: Manage annotations +description: Shows how to leverage the Writing Assistance API to manage annotations and use annotation events. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.7' +script: + content: | + $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); + $("#insert-annotations").click(() => tryCatch(insertAnnotations)); + $("#get-annotations").click(() => tryCatch(getAnnotations)); + $("#accept-first").click(() => tryCatch(acceptFirst)); + $("#reject-last").click(() => tryCatch(rejectLast)); + $("#delete-annotations").click(() => tryCatch(deleteAnnotations)); + $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); + $("#setup").click(() => tryCatch(setup)); + + let eventContexts = []; + + async function registerEventHandlers() { + // Registers event handlers. + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + + await context.sync(); + + console.log("Event handlers registered."); + }); + } + + async function paragraphChanged(args: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + const results = []; + for (let id of args.uniqueLocalIds) { + let para = context.document.getParagraphByUniqueLocalId(id); + para.load("uniqueLocalId"); + + results.push({ para: para, text: para.getText() }); + } + + await context.sync(); + + for (let result of results) { + console.log(`${args.type}: ${result.para.uniqueLocalId} - ${result.text.value}`); + } + }); + } + + async function insertAnnotations() { + // Adds annotations to the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const critique1 = { + colorScheme: Word.CritiqueColorScheme.red, + start: 1, + length: 3 + }; + const critique2 = { + colorScheme: Word.CritiqueColorScheme.green, + start: 6, + length: 1 + }; + const critique3 = { + colorScheme: Word.CritiqueColorScheme.blue, + start: 10, + length: 3 + }; + const critique4 = { + colorScheme: Word.CritiqueColorScheme.lavender, + start: 14, + length: 3 + }; + const critique5 = { + colorScheme: Word.CritiqueColorScheme.berry, + start: 18, + length: 10 + }; + const annotationSet: Word.AnnotationSet = { + critiques: [critique1, critique2, critique3, critique4, critique5] + }; + + const annotationIds = paragraph.insertAnnotations(annotationSet); + + await context.sync(); + + console.log("Annotations inserted:", annotationIds.value); + }); + } + + async function getAnnotations() { + // Gets annotations found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + console.log("Annotations found:"); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); + } + + async function acceptFirst() { + // Accepts the first annotation found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Accepting ${annotation.id}`); + annotation.critiqueAnnotation.accept(); + + await context.sync(); + break; + } + } + }); + } + + async function rejectLast() { + // Rejects the last annotation found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = annotations.items.length - 1; i >= 0; i--) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Rejecting ${annotation.id}`); + annotation.critiqueAnnotation.reject(); + + await context.sync(); + break; + } + } + }); + } + + async function deleteAnnotations() { + // Deletes all annotations found in the selected paragraph. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id"); + + await context.sync(); + + const ids = []; + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + ids.push(annotation.id); + annotation.delete(); + } + + await context.sync(); + + console.log("Annotations deleted:", ids); + }); + } + + async function onClickedHandler(args: Word.AnnotationClickedEventArgs) { + await Word.run(async (context) => { + const annotation = context.document.getAnnotationById(args.id); + annotation.load("critiqueAnnotation"); + + await context.sync(); + + console.log(`AnnotationClicked: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + }); + } + + async function onHoveredHandler(args: Word.AnnotationHoveredEventArgs) { + await Word.run(async (context) => { + const annotation = context.document.getAnnotationById(args.id); + annotation.load("critiqueAnnotation"); + + await context.sync(); + + console.log(`AnnotationHovered: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + }); + } + + async function onInsertedHandler(args: Word.AnnotationInsertedEventArgs) { + await Word.run(async (context) => { + const annotations = []; + for (let i = 0; i < args.ids.length; i++) { + let annotation = context.document.getAnnotationById(args.ids[i]); + annotation.load("id,critiqueAnnotation"); + + annotations.push(annotation); + } + + await context.sync(); + + for (let annotation of annotations) { + console.log(`AnnotationInserted: ${annotation.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); + } + + async function onRemovedHandler(args: Word.AnnotationRemovedEventArgs) { + await Word.run(async (context) => { + for (let id of args.ids) { + console.log(`AnnotationRemoved: ${id}`); + } + }); + } + + async function deregisterEventHandlers() { + // Deregisters event handlers. + await Word.run(async (context) => { + for (let i = 0; i < eventContexts.length; i++) { + await Word.run(eventContexts[i].context, async (context) => { + eventContexts[i].remove(); + }); + } + + await context.sync(); + + eventContexts = []; + console.log("Removed event handlers."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", + "Start" + ); + body.insertParagraph( + "To make your document look professionally produced, Word provides header, footer, cover page, and text box designs that complement each other. For example, you can add a matching cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", + "End" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample demonstrates how to manage annotations and use annotation events.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+ Register event handlers. + +
+ Insert annotations. + +
+ Get annotations. + +
+ Accept first. + +
+ Reject last. + +
+ Delete annotations. + +
+ Deregister event handlers. + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index ae0ccbdb2..dc43e06c2 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -322,7 +322,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 74b37eadc..6e2ef4e6c 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -78,7 +78,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index b07a76f06..6419c912e 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -170,7 +170,7 @@ script: ); }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 87b7c9d14..556fba94e 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -215,7 +215,7 @@ script: return xmlBlob.replace(/> <"); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 62e0e69a6..8973a568b 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -154,7 +154,7 @@ script: return xmlBlob.replace(/> <"); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index ab6e4b759..284916531 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -171,7 +171,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 19df415cf..65fabfb41 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -155,7 +155,7 @@ script: ); }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 4c924cc8c..c40a72290 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -66,7 +66,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 7ebc3e4d1..bf4b30440 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -210,7 +210,7 @@ script: reader.readAsDataURL(myFile.files[0]); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 0ce4fc524..da90e66be 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -139,7 +139,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index d7fe03cc3..be9092cc8 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -67,7 +67,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index bf3bc9926..3ab087497 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -106,7 +106,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index f10ced3f4..c1ab8bd7b 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -58,7 +58,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml index 4d2a75b8e..b78c58500 100644 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -58,7 +58,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/samples/word/99-preview-apis/manage-custom-style.yaml b/samples/word/99-preview-apis/manage-custom-style.yaml new file mode 100644 index 000000000..01bc08b8d --- /dev/null +++ b/samples/word/99-preview-apis/manage-custom-style.yaml @@ -0,0 +1,487 @@ +id: word-tables-manage-custom-style +name: Manage custom table style +description: Shows how to manage primarily margins and alignments of a custom table style in the current document. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.8' +script: + content: | + $("#add-style").click(() => tryCatch(addStyle)); + $("#apply-style").click(() => tryCatch(applyStyle)); + $("#show-style-properties").click(() => tryCatch(getTableStyle)); + $("#set-alignment").click(() => tryCatch(setAlignment)); + $("#set-allow-break-across-page").click(() => tryCatch(setAllowBreakAcrossPage)); + $("#set-top-cell-margin").click(() => tryCatch(setTopCellMargin)); + $("#set-bottom-cell-margin").click(() => tryCatch(setBottomCellMargin)); + $("#set-left-cell-margin").click(() => tryCatch(setLeftCellMargin)); + $("#set-right-cell-margin").click(() => tryCatch(setRightCellMargin)); + $("#set-cell-spacing").click(() => tryCatch(setCellSpacing)); + $("#delete-style").click(() => tryCatch(deleteStyle)); + $("#import-styles-from-json").click(() => tryCatch(importStylesFromJson)); + + async function addStyle() { + // Adds a new table style. + const newStyleName = $("#new-style-name").val() as string; + if (newStyleName == "") { + console.warn("Enter a style name to add."); + return; + } + + await Word.run(async (context) => { + const style = context.document.getStyles().getByNameOrNullObject(newStyleName); + style.load(); + await context.sync(); + + if (!style.isNullObject) { + console.warn( + `There's an existing style with the same name '${newStyleName}'! Please provide another style name.` + ); + return; + } + + context.document.addStyle(newStyleName, Word.StyleType.table); + await context.sync(); + + console.log(newStyleName + " has been added to the style list."); + }); + } + + async function applyStyle() { + // Applies the specified style to a new table. + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to apply."); + return; + } + + await Word.run(async (context) => { + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else if (style.type != Word.StyleType.table) { + console.warn(`The '${styleName}' style isn't a table style.`); + } else { + const body = context.document.body; + body.clear(); + const data = [ + ["Tokyo", "Beijing", "Seattle"], + ["Apple", "Orange", "Pineapple"] + ]; + const table = body.insertTable(2, 3, "Start", data); + table.style = style.nameLocal; + table.styleFirstColumn = false; + await context.sync(); + + console.log(`'${styleName}' style applied to first table.`); + console.log(style); + } + }); + } + + async function getTableStyle() { + // Gets the table style properties and displays them in the form. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.load(); + await context.sync(); + + if (tableStyle.isNullObject) { + console.warn(`There's no existing table style with the name '${styleName}'.`); + return; + } + + console.log(tableStyle); + $("#alignment").val(tableStyle.alignment); + $("#allow-break-across-page").val(tableStyle.allowBreakAcrossPage.toString()); + $("#top-cell-margin").val(tableStyle.topCellMargin); + $("#bottom-cell-margin").val(tableStyle.bottomCellMargin); + $("#left-cell-margin").val(tableStyle.leftCellMargin); + $("#right-cell-margin").val(tableStyle.rightCellMargin); + $("#cell-spacing").val(tableStyle.cellSpacing); + }); + } + + async function setAlignment() { + // Sets the table alignment. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const alignment = $("#alignment") + .val() + .toString(); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.alignment = alignment as Word.Alignment; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Alignment: " + tableStyle.alignment); + }); + } + + async function setAllowBreakAcrossPage() { + // Sets the allowBreakAcrossPage property. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const allowBreakAcrossPage = $("#allow-break-across-page").val() as string; + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.allowBreakAcrossPage = allowBreakAcrossPage === "true"; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("allowBreakAcrossPage: " + tableStyle.allowBreakAcrossPage); + }); + } + + async function setTopCellMargin() { + // Sets the top cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const topCellMargin = Number( + $("#top-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.topCellMargin = topCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Top cell margin: " + tableStyle.topCellMargin); + }); + } + + async function setBottomCellMargin() { + // Sets the bottom cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const bottomCellMargin = Number( + $("#bottom-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.bottomCellMargin = bottomCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Bottom cell margin: " + tableStyle.bottomCellMargin); + }); + } + + async function setLeftCellMargin() { + // Sets the left cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const leftCellMargin = Number( + $("#left-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.leftCellMargin = leftCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Left cell margin: " + tableStyle.leftCellMargin); + }); + } + + async function setRightCellMargin() { + // Sets the right cell margin. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const rightCellMargin = Number( + $("#right-cell-margin") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.rightCellMargin = rightCellMargin; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Right cell margin: " + tableStyle.rightCellMargin); + }); + } + + async function setCellSpacing() { + // Sets the cell spacing. + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } + + await Word.run(async (context) => { + const cellSpacing = Number( + $("#cell-spacing") + .val() + .toString() + ); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.cellSpacing = cellSpacing; + await context.sync(); + + tableStyle.load(); + await context.sync(); + console.log("Cell spacing: " + tableStyle.cellSpacing); + }); + } + + async function deleteStyle() { + // Deletes the custom style. + const styleName = $("#style-name-to-delete").val() as string; + if (styleName == "") { + console.warn("Enter a style name to delete."); + return; + } + + await Word.run(async (context) => { + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.delete(); + console.log(`Successfully deleted custom style '${styleName}'.`); + } + }); + } + + async function importStylesFromJson() { + // Imports styles from JSON. + await Word.run(async (context) => { + const str = + '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; + const styles = context.document.importStylesFromJson(str); + await context.sync(); + console.log("Styles imported from JSON:"); + console.log(styles); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample demonstrates how to manage a custom table style and use Document.importStylesFromJson. +

+

Important: Some TableStyle properties are currently in preview. If this snippet doesn't work, try using Word + on a different platform.

+
+ +
+

Try it out

+

Add a new table style

+

Name the style using letters. Can include digits. Examples: NewName, newname1

+

+ + +

+ +

Use custom style

+ + +

+ +

+ +

+ +
+

Update custom style

+ +
Note: Mixed and Unknown aren't valid when setting.
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+

Delete custom style

+ + +
+ +
+ +
+

Import styles from JSON string

+ +
+ language: html +style: + content: | + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + + .margin { + margin-top: 5px; + margin-bottom: 5px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 27169b905..cf62155ca 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -19,7 +19,7 @@ script: }); } - /** Default helper for invoking an action and handling errors. */ + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { await callback(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fd60f59e0..fcc0bdae2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15915,7 +15915,8 @@ importPageColor: true, importChangeTrackingMode: true, importCustomProperties: true, - importCustomXmlParts: true + importCustomXmlParts: true, + importDifferentOddEvenPages: true }); await context.sync(); }); @@ -16526,7 +16527,8 @@ importPageColor: true, importChangeTrackingMode: true, importCustomProperties: true, - importCustomXmlParts: true + importCustomXmlParts: true, + importDifferentOddEvenPages: true }); await context.sync(); }); diff --git a/view-prod/word.json b/view-prod/word.json index 373000aa9..626108b1b 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -20,6 +20,7 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-get-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-text.yaml", "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml", "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml", "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml", @@ -43,7 +44,9 @@ "word-document-manage-custom-xml-part": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml", "word-document-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml", + "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml" + "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index df24c118b..957ffcc09 100644 --- a/view/word.json +++ b/view/word.json @@ -20,6 +20,7 @@ "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml", "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/search.yaml", "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-word-count.yaml", + "word-paragraph-get-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-text.yaml", "word-paragraph-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onadded-event.yaml", "word-paragraph-onchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/onchanged-event.yaml", "word-paragraph-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/ondeleted-event.yaml", @@ -43,7 +44,9 @@ "word-document-manage-custom-xml-part": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-custom-xml-part.yaml", "word-document-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.yaml", + "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml" + "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file From a4a2c525fe4001633a93235add0606a351e40bcb Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 2 Feb 2024 09:06:48 -0800 Subject: [PATCH 033/156] [Word] Add metadata mappings (#848) --- playlists-prod/word.yaml | 4 +- playlists/word.yaml | 4 +- .../50-document/insert-external-document.yaml | 2 +- .../insert-and-get-pictures.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 21637 -> 22272 bytes snippet-extractor-output/snippets.yaml | 2021 +++++++++++------ 6 files changed, 1291 insertions(+), 742 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 72dadf915..01e642fda 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -341,7 +341,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml group: Document api_set: - WordApi: '1.6' + WordApi: '1.7' - id: word-document-manage-change-tracking name: Track changes fileName: manage-change-tracking.yaml @@ -487,7 +487,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml group: Preview APIs api_set: - WordApi: '1.1' + WordApi: '1.8' - id: word-tables-manage-custom-style name: Manage custom table style fileName: manage-custom-style.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 227d883ea..2719729e4 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -341,7 +341,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml group: Document api_set: - WordApi: '1.6' + WordApi: '1.7' - id: word-document-manage-change-tracking name: Track changes fileName: manage-change-tracking.yaml @@ -487,7 +487,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml group: Preview APIs api_set: - WordApi: '1.1' + WordApi: '1.8' - id: word-tables-manage-custom-style name: Manage custom table style fileName: manage-custom-style.yaml diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 3182cf4c4..41798bd3e 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -4,7 +4,7 @@ name: Insert an external document description: 'Inserts the content (with or without settings) of an external document into the current document. Settings include formatting, change-tracking mode, custom properties, and XML parts.' host: WORD api_set: - WordApi: '1.6' + WordApi: '1.7' script: content: | $("#file").change(getBase64); diff --git a/samples/word/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml index b78c58500..9fb560b9e 100644 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -4,7 +4,7 @@ description: Inserts and gets inline pictures. author: OfficeDev host: WORD api_set: - WordApi: '1.1' + WordApi: '1.8' script: content: | $("#setup").click(() => tryCatch(setup)); diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 47bcb9f60d9a7160984da6756c47781c0961e8a9..2c89624856ae09b8a7f57b3fc8f36f91c84a6b11 100644 GIT binary patch delta 13879 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 Jo9cf!{|CbjK?eW; delta 13192 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fcc0bdae2..2c9919f6a 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14155,139 +14155,400 @@ body.paragraphs.getFirst().alignment = "Left"; body.paragraphs.getLast().alignment = Word.Alignment.left; }); -'Word.Application#createDocument:member(1)': +'Word.Annotation#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - // Updates the text of the current document with the text from another - document passed in as a Base64-encoded string. + // Deletes all annotations found in the selected paragraph. await Word.run(async (context) => { - // Use the Base64-encoded string representation of the selected .docx file. - const externalDoc = context.application.createDocument(externalDocument); + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id"); + await context.sync(); - const externalDocBody = externalDoc.body; - externalDocBody.load("text"); + const ids = []; + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + ids.push(annotation.id); + annotation.delete(); + } + await context.sync(); - // Insert the external document's text at the beginning of the current document's body. - const externalDocBodyText = externalDocBody.text; - const currentDocBody = context.document.body; - currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); + console.log("Annotations deleted:", ids); + }); +'Word.Annotation#critiqueAnnotation:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Gets annotations found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + await context.sync(); + + console.log("Annotations found:"); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } }); -'Word.Application#retrieveStylesFromBase64:member(1)': +'Word.Annotation#id:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - // Gets style info from another document passed in as a Base64-encoded - string. + // Accepts the first annotation found in the selected paragraph. await Word.run(async (context) => { - const retrievedStyles = context.application.retrieveStylesFromBase64(externalDocument); + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + await context.sync(); - console.log("Styles from the other document:"); - console.log(retrievedStyles.value); + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Accepting ${annotation.id}`); + annotation.critiqueAnnotation.accept(); + + await context.sync(); + break; + } + } }); -'Word.Body#clear:member(1)': +'Word.Annotation#state:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - // Clears out the content from the document body. + // Rejects the last annotation found in the selected paragraph. - // Run a batch operation against the Word object model. + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = annotations.items.length - 1; i >= 0; i--) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Rejecting ${annotation.id}`); + annotation.critiqueAnnotation.reject(); + + await context.sync(); + break; + } + } + }); +'Word.AnnotationClickedEventArgs:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Registers event handlers. await Word.run(async (context) => { - // Create a proxy object for the document body. - const body = context.document.body; + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); - // Queue a command to clear the contents of the body. - body.clear(); + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); - console.log("Cleared the body contents."); + await context.sync(); + + console.log("Event handlers registered."); }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + async function onClickedHandler(args: Word.AnnotationClickedEventArgs) { + await Word.run(async (context) => { + const annotation = context.document.getAnnotationById(args.id); + annotation.load("critiqueAnnotation"); - // The Silly stories add-in sample shows how the clear method can be used to - clear the contents of a document. + await context.sync(); - // https://aka.ms/sillystorywordaddin -'Word.Body#fields:member': + console.log(`AnnotationClicked: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + }); + } +'Word.AnnotationCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - // Gets all fields in the document body. + // Gets annotations found in the selected paragraph. await Word.run(async (context) => { - const fields = context.document.body.fields.load("items"); + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); await context.sync(); - if (fields.items.length === 0) { - console.log("No fields in this document."); - } else { - fields.load(["code", "result"]); + console.log("Annotations found:"); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); +'Word.AnnotationHoveredEventArgs:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Registers event handlers. + + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + async function onHoveredHandler(args: Word.AnnotationHoveredEventArgs) { + await Word.run(async (context) => { + const annotation = context.document.getAnnotationById(args.id); + annotation.load("critiqueAnnotation"); + await context.sync(); - for (let i = 0; i < fields.items.length; i++) { - console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`); - console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); + console.log(`AnnotationHovered: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + }); + } +'Word.AnnotationInsertedEventArgs:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Registers event handlers. + + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + async function onInsertedHandler(args: Word.AnnotationInsertedEventArgs) { + await Word.run(async (context) => { + const annotations = []; + for (let i = 0; i < args.ids.length; i++) { + let annotation = context.document.getAnnotationById(args.ids[i]); + annotation.load("id,critiqueAnnotation"); + + annotations.push(annotation); } - } + + await context.sync(); + + for (let annotation of annotations) { + console.log(`AnnotationInserted: ${annotation.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); + } +'Word.AnnotationRemovedEventArgs:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Registers event handlers. + + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + + await context.sync(); + + console.log("Event handlers registered."); }); -'Word.Body#font:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - // Gets the style and the font size, font name, and font color properties on - the body object. + async function onRemovedHandler(args: Word.AnnotationRemovedEventArgs) { + await Word.run(async (context) => { + for (let id of args.ids) { + console.log(`AnnotationRemoved: ${id}`); + } + }); + } +'Word.AnnotationSet:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - // Run a batch operation against the Word object model. + // Adds annotations to the selected paragraph. await Word.run(async (context) => { - // Create a proxy object for the document body. - const body = context.document.body; + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const critique1 = { + colorScheme: Word.CritiqueColorScheme.red, + start: 1, + length: 3 + }; + const critique2 = { + colorScheme: Word.CritiqueColorScheme.green, + start: 6, + length: 1 + }; + const critique3 = { + colorScheme: Word.CritiqueColorScheme.blue, + start: 10, + length: 3 + }; + const critique4 = { + colorScheme: Word.CritiqueColorScheme.lavender, + start: 14, + length: 3 + }; + const critique5 = { + colorScheme: Word.CritiqueColorScheme.berry, + start: 18, + length: 10 + }; + const annotationSet: Word.AnnotationSet = { + critiques: [critique1, critique2, critique3, critique4, critique5] + }; - // Queue a command to load font and style information for the document body. - body.load("font/size, font/name, font/color, style"); + const annotationIds = paragraph.insertAnnotations(annotationSet); - // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. await context.sync(); - // Show font-related property values on the body object. - const results = - "Font size: " + - body.font.size + - "; Font name: " + - body.font.name + - "; Font color: " + - body.font.color + - "; Body style: " + - body.style; + console.log("Annotations inserted:", annotationIds.value); + }); +'Word.AnnotationState:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - console.log(results); + // Accepts the first annotation found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Accepting ${annotation.id}`); + annotation.critiqueAnnotation.accept(); + + await context.sync(); + break; + } + } }); -'Word.Body#footnotes:member': +'Word.Application#createDocument:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml - // Gets the footnotes in the document body. + // Updates the text of the current document with the text from another + document passed in as a Base64-encoded string. await Word.run(async (context) => { - const footnotes = context.document.body.footnotes; - footnotes.load("length"); + // Use the Base64-encoded string representation of the selected .docx file. + const externalDoc = context.application.createDocument(externalDocument); await context.sync(); - console.log("Number of footnotes in the document body: " + footnotes.items.length); + const externalDocBody = externalDoc.body; + externalDocBody.load("text"); + await context.sync(); + + // Insert the external document's text at the beginning of the current document's body. + const externalDocBodyText = externalDocBody.text; + const currentDocBody = context.document.body; + currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); + await context.sync(); + }); +'Word.Application#retrieveStylesFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + + // Gets style info from another document passed in as a Base64-encoded + string. + + await Word.run(async (context) => { + const retrievedStyles = context.application.retrieveStylesFromBase64(externalDocument); + await context.sync(); + + console.log("Styles from the other document:"); + console.log(retrievedStyles.value); + }); +'Word.Body#clear:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Clears out the content from the document body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to clear the contents of the body. + body.clear(); + + console.log("Cleared the body contents."); }); + + + // The Silly stories add-in sample shows how the clear method can be used to + clear the contents of a document. + + // https://aka.ms/sillystorywordaddin 'Word.Body#getComments:member(1)': - >- // Link to full sample: @@ -14362,25 +14623,6 @@ console.log(trackedChanges); }); -'Word.Body#inlinePictures:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - - // Gets the first image in the document. - - await Word.run(async (context) => { - const firstPicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); - - await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as Base64. - const base64 = firstPicture.getBase64ImageSrc(); - - await context.sync(); - console.log(base64.value); - }); 'Word.Body#insertBreak:member(1)': - >- // Link to full sample: @@ -14486,17 +14728,198 @@ // Queue a command to insert a Base64-encoded image at the beginning of the current document. body.insertInlinePictureFromBase64(base64EncodedImg, Word.InsertLocation.start); - // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added a Base64-encoded image to the beginning of the document body."); + }); +'Word.Body#insertOoxml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts OOXML at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert OOXML at the beginning of the body. + body.insertOoxml( + "This text has formatting directly applied to achieve its font size, color, line spacing, and paragraph spacing.", + Word.InsertLocation.start + ); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log("Added OOXML to the beginning of the document body."); + }); + + + // Read "Understand when and how to use Office Open XML in your Word add-in" + for guidance on working with OOXML. + + // + https://learn.microsoft.com/office/dev/add-ins/word/create-better-add-ins-for-word-with-office-open-xml + + + // The Word-Add-in-DocumentAssembly sample shows how you can use this API to + assemble a document. + + // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly +'Word.Body#insertParagraph:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml + + await Word.run(async (context) => { + // Second sentence, let's insert it as a paragraph after the previously inserted one. + const secondSentence = context.document.body.insertParagraph( + "This is the first text with a custom style.", + "End" + ); + secondSentence.font.set({ + bold: false, + italic: true, + name: "Berlin Sans FB", + color: "blue", + size: 30 + }); + + await context.sync(); + }); +'Word.Body#insertTable:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + + await Word.run(async (context) => { + // Use a two-dimensional array to hold the initial table values. + const data = [ + ["Tokyo", "Beijing", "Seattle"], + ["Apple", "Orange", "Pineapple"] + ]; + const table = context.document.body.insertTable(2, 3, "Start", data); + table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; + table.styleFirstColumn = false; + + await context.sync(); + }); +'Word.Body#insertText:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Inserts text at the beginning of this document. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to insert text at the beginning of the current document. + body.insertText('This is text inserted with body.insertText()', Word.InsertLocation.start); + + // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. + await context.sync(); + + console.log('Text added to the beginning of the document body.'); + }); +'Word.Body#search:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + + // Does a basic text search and highlights matches in the document. + + await Word.run(async (context) => { + const results = context.document.body.search("Online"); + results.load("length"); + + await context.sync(); + + // Let's traverse the search results and highlight matches. + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "yellow"; + } + + await context.sync(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + + // Does a wildcard search and highlights matches in the document. + + await Word.run(async (context) => { + // Construct a wildcard expression and set matchWildcards to true in order to use wildcards. + const results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); + results.load("length"); + + await context.sync(); + + // Let's traverse the search results and highlight matches. + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "red"; + results.items[i].font.color = "white"; + } + + await context.sync(); + }); +'Word.Body#select:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + + // Selects the entire body. + + // Run a batch operation against the Word object model. + + await Word.run(async (context) => { + // Create a proxy object for the document body. + const body = context.document.body; + + // Queue a command to select the document body. + // The Word UI will move to the selected document body. + body.select(); + + console.log("Selected the document body."); + }); +'Word.Body#fields:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + + // Gets all fields in the document body. + + await Word.run(async (context) => { + const fields = context.document.body.fields.load("items"); + await context.sync(); - console.log("Added a Base64-encoded image to the beginning of the document body."); + if (fields.items.length === 0) { + console.log("No fields in this document."); + } else { + fields.load(["code", "result"]); + await context.sync(); + + for (let i = 0; i < fields.items.length; i++) { + console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`); + console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); + } + } }); -'Word.Body#insertOoxml:member(1)': +'Word.Body#font:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml - // Inserts OOXML at the beginning of this document. + // Gets the style and the font size, font name, and font color properties on + the body object. // Run a batch operation against the Word object model. @@ -14504,88 +14927,57 @@ // Create a proxy object for the document body. const body = context.document.body; - // Queue a command to insert OOXML at the beginning of the body. - body.insertOoxml( - "This text has formatting directly applied to achieve its font size, color, line spacing, and paragraph spacing.", - Word.InsertLocation.start - ); + // Queue a command to load font and style information for the document body. + body.load("font/size, font/name, font/color, style"); // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. await context.sync(); - console.log("Added OOXML to the beginning of the document body."); - }); - - - // Read "Understand when and how to use Office Open XML in your Word add-in" - for guidance on working with OOXML. - - // - https://learn.microsoft.com/office/dev/add-ins/word/create-better-add-ins-for-word-with-office-open-xml - - - // The Word-Add-in-DocumentAssembly sample shows how you can use this API to - assemble a document. - - // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly -'Word.Body#insertParagraph:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml - - await Word.run(async (context) => { - // Second sentence, let's insert it as a paragraph after the previously inserted one. - const secondSentence = context.document.body.insertParagraph( - "This is the first text with a custom style.", - "End" - ); - secondSentence.font.set({ - bold: false, - italic: true, - name: "Berlin Sans FB", - color: "blue", - size: 30 - }); + // Show font-related property values on the body object. + const results = + "Font size: " + + body.font.size + + "; Font name: " + + body.font.name + + "; Font color: " + + body.font.color + + "; Body style: " + + body.style; - await context.sync(); + console.log(results); }); -'Word.Body#insertTable:member(1)': +'Word.Body#footnotes:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - await Word.run(async (context) => { - // Use a two-dimensional array to hold the initial table values. - const data = [ - ["Tokyo", "Beijing", "Seattle"], - ["Apple", "Orange", "Pineapple"] - ]; - const table = context.document.body.insertTable(2, 3, "Start", data); - table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; - table.styleFirstColumn = false; + // Gets the footnotes in the document body. + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("length"); await context.sync(); + + console.log("Number of footnotes in the document body: " + footnotes.items.length); }); -'Word.Body#insertText:member(1)': +'Word.Body#inlinePictures:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml - - // Inserts text at the beginning of this document. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - // Run a batch operation against the Word object model. + // Gets the first image in the document. await Word.run(async (context) => { - // Create a proxy object for the document body. - const body = context.document.body; - - // Queue a command to insert text at the beginning of the current document. - body.insertText('This is text inserted with body.insertText()', Word.InsertLocation.start); + const firstPicture = context.document.body.inlinePictures.getFirst(); + firstPicture.load("width, height"); - // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. await context.sync(); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + // Get the image encoded as Base64. + const base64 = firstPicture.getBase64ImageSrc(); - console.log('Text added to the beginning of the document body.'); + await context.sync(); + console.log(base64.value); }); 'Word.Body#paragraphs:member': - >- @@ -14640,66 +15032,6 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); -'Word.Body#search:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml - - // Does a basic text search and highlights matches in the document. - - await Word.run(async (context) => { - const results = context.document.body.search("Online"); - results.load("length"); - - await context.sync(); - - // Let's traverse the search results and highlight matches. - for (let i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "yellow"; - } - - await context.sync(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml - - // Does a wildcard search and highlights matches in the document. - - await Word.run(async (context) => { - // Construct a wildcard expression and set matchWildcards to true in order to use wildcards. - const results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); - results.load("length"); - - await context.sync(); - - // Let's traverse the search results and highlight matches. - for (let i = 0; i < results.items.length; i++) { - results.items[i].font.highlightColor = "red"; - results.items[i].font.color = "white"; - } - - await context.sync(); - }); -'Word.Body#select:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml - - // Selects the entire body. - - // Run a batch operation against the Word object model. - - await Word.run(async (context) => { - // Create a proxy object for the document body. - const body = context.document.body; - - // Queue a command to select the document body. - // The Word UI will move to the selected document body. - body.select(); - - console.log("Selected the document body."); - }); 'Word.Body#tables:member': - >- // Link to full sample: @@ -14901,30 +15233,6 @@ console.log(`Reviewed text (before):\n${before.value}`); console.log(`Reviewed text (after):\n${after.value}`); }); -'Word.Comment#content:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - - // Edits the first comment in the selected content. - - await Word.run(async (context) => { - const text = $("#edit-comment-text") - .val() - .toString(); - const comment = context.document - .getSelection() - .getComments() - .getFirst(); - comment.content = text; - - // Load object for display in Script Lab console. - comment.load(); - await context.sync(); - - console.log("Comment content changed:"); - console.log(comment); - }); 'Word.Comment#delete:member(1)': - >- // Link to full sample: @@ -14982,6 +15290,30 @@ console.log("No active comment was found in the selection so couldn't reply."); } }); +'Word.Comment#content:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + // Edits the first comment in the selected content. + + await Word.run(async (context) => { + const text = $("#edit-comment-text") + .val() + .toString(); + const comment = context.document + .getSelection() + .getComments() + .getFirst(); + comment.content = text; + + // Load object for display in Script Lab console. + comment.load(); + await context.sync(); + + console.log("Comment content changed:"); + console.log(comment); + }); 'Word.Comment#resolved:member': - >- // Link to full sample: @@ -15067,6 +15399,45 @@ await context.sync(); } }); +'Word.ContentControl#set:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml + + // Adds title and colors to odd and even content controls and changes their + appearance. + + await Word.run(async (context) => { + // Get the complete sentence (as range) associated with the insertion point. + let evenContentControls = context.document.contentControls.getByTag("even"); + let oddContentControls = context.document.contentControls.getByTag("odd"); + evenContentControls.load("length"); + oddContentControls.load("length"); + + await context.sync(); + + for (let i = 0; i < evenContentControls.items.length; i++) { + // Change a few properties and append a paragraph + evenContentControls.items[i].set({ + color: "red", + title: "Odd ContentControl #" + (i + 1), + appearance: Word.ContentControlAppearance.tags + }); + evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); + } + + for (let j = 0; j < oddContentControls.items.length; j++) { + // Change a few properties and append a paragraph + oddContentControls.items[j].set({ + color: "green", + title: "Even ContentControl #" + (j + 1), + appearance: "Tags" + }); + oddContentControls.items[j].insertHtml("This is an even content control", "End"); + } + + await context.sync(); + }); 'Word.ContentControl#onDataChanged:member': - >- // Link to full sample: @@ -15239,45 +15610,6 @@ console.log(event.ids); }); } -'Word.ContentControl#set:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml - - // Adds title and colors to odd and even content controls and changes their - appearance. - - await Word.run(async (context) => { - // Get the complete sentence (as range) associated with the insertion point. - let evenContentControls = context.document.contentControls.getByTag("even"); - let oddContentControls = context.document.contentControls.getByTag("odd"); - evenContentControls.load("length"); - oddContentControls.load("length"); - - await context.sync(); - - for (let i = 0; i < evenContentControls.items.length; i++) { - // Change a few properties and append a paragraph - evenContentControls.items[i].set({ - color: "red", - title: "Odd ContentControl #" + (i + 1), - appearance: Word.ContentControlAppearance.tags - }); - evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); - } - - for (let j = 0; j < oddContentControls.items.length; j++) { - // Change a few properties and append a paragraph - oddContentControls.items[j].set({ - color: "green", - title: "Even ContentControl #" + (j + 1), - appearance: "Tags" - }); - oddContentControls.items[j].insertHtml("This is an even content control", "End"); - } - - await context.sync(); - }); 'Word.ContentControl#tag:member': - >- // Link to full sample: @@ -15385,19 +15717,7 @@ await context.sync(); }); -'Word.ContentControlDataChangedEventArgs#eventType:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml - - async function contentControlDataChanged(event: - Word.ContentControlDataChangedEventArgs) { - await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`); - console.log(event.ids); - }); - } -'Word.ContentControlDataChangedEventArgs#ids:member': +'Word.ContentControlDataChangedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -15409,19 +15729,7 @@ console.log(event.ids); }); } -'Word.ContentControlDeletedEventArgs#eventType:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml - - async function contentControlDeleted(event: - Word.ContentControlDeletedEventArgs) { - await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`); - console.log(event.ids); - }); - } -'Word.ContentControlDeletedEventArgs#ids:member': +'Word.ContentControlDeletedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -15433,18 +15741,7 @@ console.log(event.ids); }); } -'Word.ContentControlEnteredEventArgs#eventType:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml - - async function contentControlEntered(event: - Word.ContentControlEnteredEventArgs) { - await Word.run(async (context) => { - console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); - }); - } -'Word.ContentControlEnteredEventArgs#ids:member': +'Word.ContentControlEnteredEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -15455,18 +15752,7 @@ console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); }); } -'Word.ContentControlExitedEventArgs#eventType:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml - - async function contentControlExited(event: - Word.ContentControlExitedEventArgs) { - await Word.run(async (context) => { - console.log(`${event.eventType} event detected. ID of content control that was exited: ${event.ids[0]}`); - }); - } -'Word.ContentControlExitedEventArgs#ids:member': +'Word.ContentControlExitedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -15477,7 +15763,7 @@ console.log(`${event.eventType} event detected. ID of content control that was exited: ${event.ids[0]}`); }); } -'Word.ContentControlSelectionChangedEventArgs#eventType:member': +'Word.ContentControlSelectionChangedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -15489,18 +15775,124 @@ console.log(event.ids); }); } -'Word.ContentControlSelectionChangedEventArgs#ids:member': +'Word.Critique:interface': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml - async function contentControlSelectionChanged(event: - Word.ContentControlSelectionChangedEventArgs) { - await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`); - console.log(event.ids); - }); - } + // Adds annotations to the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const critique1 = { + colorScheme: Word.CritiqueColorScheme.red, + start: 1, + length: 3 + }; + const critique2 = { + colorScheme: Word.CritiqueColorScheme.green, + start: 6, + length: 1 + }; + const critique3 = { + colorScheme: Word.CritiqueColorScheme.blue, + start: 10, + length: 3 + }; + const critique4 = { + colorScheme: Word.CritiqueColorScheme.lavender, + start: 14, + length: 3 + }; + const critique5 = { + colorScheme: Word.CritiqueColorScheme.berry, + start: 18, + length: 10 + }; + const annotationSet: Word.AnnotationSet = { + critiques: [critique1, critique2, critique3, critique4, critique5] + }; + + const annotationIds = paragraph.insertAnnotations(annotationSet); + + await context.sync(); + + console.log("Annotations inserted:", annotationIds.value); + }); +'Word.CritiqueAnnotation#accept:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Accepts the first annotation found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Accepting ${annotation.id}`); + annotation.critiqueAnnotation.accept(); + + await context.sync(); + break; + } + } + }); +'Word.CritiqueAnnotation#reject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Rejects the last annotation found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (var i = annotations.items.length - 1; i >= 0; i--) { + const annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Rejecting ${annotation.id}`); + annotation.critiqueAnnotation.reject(); + + await context.sync(); + break; + } + } + }); +'Word.CritiqueAnnotation#critique:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Gets annotations found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + console.log("Annotations found:"); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); 'Word.CustomProperty:class': - >- // Link to full sample: @@ -15610,32 +16002,6 @@ await context.sync(); }); -'Word.CustomXmlPart#id:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - - // Adds a custom XML part. - - await Word.run(async (context) => { - const originalXml = - "JuanHongSally"; - const customXmlPart = context.document.customXmlParts.add(originalXml); - customXmlPart.load("id"); - const xmlBlob = customXmlPart.getXml(); - - await context.sync(); - - const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Added custom XML part:"); - console.log(readableXml); - - // Store the XML part's ID in a setting so the ID is available to other functions. - const settings = context.document.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); - - await context.sync(); - }); 'Word.CustomXmlPart#insertAttribute:member(1)': - >- // Link to full sample: @@ -15695,93 +16061,119 @@ console.warn("Didn't find custom XML part to insert element into"); } }); -'Word.CustomXmlPart#namespaceUri:member': +'Word.CustomXmlPart#query:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Gets the namespace URI from a custom XML part. + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { const settings = context.document.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); if (xmlPartIDSetting.value) { const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); - customXmlPart.load("namespaceUri"); + const xpathToQueryFor = "/Reviewers/Reviewer"; + const clientResult = customXmlPart.query(xpathToQueryFor, { + contoso: "http://schemas.contoso.com/review/1.0" + }); + await context.sync(); - const namespaceUri = customXmlPart.namespaceUri; - console.log(`Namespace URI: ${JSON.stringify(namespaceUri)}`); + console.log(`Queried custom XML part for ${xpathToQueryFor} and found ${clientResult.value.length} matches:`); + for (let i = 0; i < clientResult.value.length; i++) { + console.log(clientResult.value[i]); + } } else { - console.warn("Didn't find custom XML part"); + console.warn("Didn't find custom XML part to query"); } }); -'Word.CustomXmlPart#query:member(1)': +'Word.CustomXmlPart#setXml:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml - // Queries a custom XML part for elements matching the search terms. + // Replaces a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); - + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); await context.sync(); if (xmlPartIDSetting.value) { const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); - const xpathToQueryFor = "/Reviewers/Reviewer"; - const clientResult = customXmlPart.query(xpathToQueryFor, { - contoso: "http://schemas.contoso.com/review/1.0" - }); + const originalXmlBlob = customXmlPart.getXml(); + await context.sync(); + + let readableXml = addLineBreaksToXML(originalXmlBlob.value); + console.log("Original custom XML part:"); + console.log(readableXml); + // The setXml method replaces the entire XML part. + customXmlPart.setXml( + "JohnHitomi" + ); + const updatedXmlBlob = customXmlPart.getXml(); await context.sync(); - console.log(`Queried custom XML part for ${xpathToQueryFor} and found ${clientResult.value.length} matches:`); - for (let i = 0; i < clientResult.value.length; i++) { - console.log(clientResult.value[i]); - } + readableXml = addLineBreaksToXML(updatedXmlBlob.value); + console.log("Replaced custom XML part:"); + console.log(readableXml); } else { - console.warn("Didn't find custom XML part to query"); + console.warn("Didn't find custom XML part to replace"); } }); -'Word.CustomXmlPart#setXml:member(1)': +'Word.CustomXmlPart#id:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Adds a custom XML part. + + await Word.run(async (context) => { + const originalXml = + "JuanHongSally"; + const customXmlPart = context.document.customXmlParts.add(originalXml); + customXmlPart.load("id"); + const xmlBlob = customXmlPart.getXml(); + + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + console.log("Added custom XML part:"); + console.log(readableXml); + + // Store the XML part's ID in a setting so the ID is available to other functions. + const settings = context.document.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); + + await context.sync(); + }); +'Word.CustomXmlPart#namespaceUri:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml - // Replaces a custom XML part. + // Gets the namespace URI from a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + await context.sync(); if (xmlPartIDSetting.value) { const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); - const originalXmlBlob = customXmlPart.getXml(); - await context.sync(); - - let readableXml = addLineBreaksToXML(originalXmlBlob.value); - console.log("Original custom XML part:"); - console.log(readableXml); - - // The setXml method replaces the entire XML part. - customXmlPart.setXml( - "JohnHitomi" - ); - const updatedXmlBlob = customXmlPart.getXml(); + customXmlPart.load("namespaceUri"); await context.sync(); - readableXml = addLineBreaksToXML(updatedXmlBlob.value); - console.log("Replaced custom XML part:"); - console.log(readableXml); + const namespaceUri = customXmlPart.namespaceUri; + console.log(`Namespace URI: ${JSON.stringify(namespaceUri)}`); } else { - console.warn("Didn't find custom XML part to replace"); + console.warn("Didn't find custom XML part"); } }); 'Word.CustomXmlPartCollection#add:member(1)': @@ -15898,6 +16290,21 @@ console.log(`Number of styles: ${count.value}`); }); +'Word.Document#importStylesFromJson:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + + // Imports styles from JSON. + + await Word.run(async (context) => { + const str = + '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; + const styles = context.document.importStylesFromJson(str); + await context.sync(); + console.log("Styles imported from JSON:"); + console.log(styles); + }); 'Word.Document#insertFileFromBase64:member(1)': - >- // Link to full sample: @@ -16114,29 +16521,6 @@ console.log(event.ids); }); } -'Word.Field#code:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - - // Gets the first field in the document. - - await Word.run(async (context) => { - const field = context.document.body.fields.getFirstOrNullObject(); - field.load(["code", "result", "locked", "type", "data", "kind"]); - - await context.sync(); - - if (field.isNullObject) { - console.log("This document has no fields."); - } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); - } - }); 'Word.Field#delete:member(1)': - >- // Link to full sample: @@ -16159,73 +16543,94 @@ console.log("The first field in the document was deleted."); } }); -'Word.Field#kind:member': +'Word.Field#select:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Gets the first field in the document. + // Gets and updates the first field in the selection. await Word.run(async (context) => { - const field = context.document.body.fields.getFirstOrNullObject(); - field.load(["code", "result", "locked", "type", "data", "kind"]); + var field = context.document.getSelection().fields.getFirstOrNullObject(); + field.load(["code", "result", "type", "locked"]); await context.sync(); if (field.isNullObject) { - console.log("This document has no fields."); + console.log("No field in selection."); } else { + console.log("Before updating:"); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); + + field.updateResult(); + field.select(); + await context.sync(); + + field.load(["code", "result"]); + await context.sync(); + + console.log("After updating:"); console.log("Code of first field: " + field.code); console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); } }); -'Word.Field#locked:member': +'Word.Field#updateResult:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Gets the first field in the selection and toggles between setting it to - locked or unlocked. + // Gets and updates the first field in the selection. await Word.run(async (context) => { var field = context.document.getSelection().fields.getFirstOrNullObject(); field.load(["code", "result", "type", "locked"]); + await context.sync(); if (field.isNullObject) { - console.log("The selection has no fields."); + console.log("No field in selection."); } else { - console.log(`The first field in the selection is currently ${field.locked ? "locked" : "unlocked"}.`); - field.locked = !field.locked; + console.log("Before updating:"); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); + + field.updateResult(); + field.select(); await context.sync(); - console.log(`The first field in the selection is now ${field.locked ? "locked" : "unlocked"}.`); + field.load(["code", "result"]); + await context.sync(); + + console.log("After updating:"); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); } }); -'Word.Field#parentBody:member': +'Word.Field#code:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Gets the parent body of the first field in the document. + // Gets the first field in the document. await Word.run(async (context) => { const field = context.document.body.fields.getFirstOrNullObject(); - field.load("parentBody/text"); + field.load(["code", "result", "locked", "type", "data", "kind"]); await context.sync(); if (field.isNullObject) { console.log("This document has no fields."); } else { - const parentBody = field.parentBody; - console.log("Text of first field's parent body: " + JSON.stringify(parentBody.text)); + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("Type of first field: " + field.type); + console.log("Is the first field locked? " + field.locked); + console.log("Kind of the first field: " + field.kind); } }); -'Word.Field#result:member': +'Word.Field#kind:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -16248,39 +16653,50 @@ console.log("Kind of the first field: " + field.kind); } }); -'Word.Field#select:member(1)': +'Word.Field#locked:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Gets and updates the first field in the selection. + // Gets the first field in the selection and toggles between setting it to + locked or unlocked. await Word.run(async (context) => { var field = context.document.getSelection().fields.getFirstOrNullObject(); field.load(["code", "result", "type", "locked"]); - await context.sync(); if (field.isNullObject) { - console.log("No field in selection."); + console.log("The selection has no fields."); } else { - console.log("Before updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - - field.updateResult(); - field.select(); + console.log(`The first field in the selection is currently ${field.locked ? "locked" : "unlocked"}.`); + field.locked = !field.locked; await context.sync(); - field.load(["code", "result"]); - await context.sync(); + console.log(`The first field in the selection is now ${field.locked ? "locked" : "unlocked"}.`); + } + }); +'Word.Field#parentBody:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - console.log("After updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); + // Gets the parent body of the first field in the document. + + await Word.run(async (context) => { + const field = context.document.body.fields.getFirstOrNullObject(); + field.load("parentBody/text"); + + await context.sync(); + + if (field.isNullObject) { + console.log("This document has no fields."); + } else { + const parentBody = field.parentBody; + console.log("Text of first field's parent body: " + JSON.stringify(parentBody.text)); } }); -'Word.Field#type:member': +'Word.Field#result:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -16303,36 +16719,27 @@ console.log("Kind of the first field: " + field.kind); } }); -'Word.Field#updateResult:member(1)': +'Word.Field#type:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml - // Gets and updates the first field in the selection. + // Gets the first field in the document. await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); - field.load(["code", "result", "type", "locked"]); + const field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result", "locked", "type", "data", "kind"]); await context.sync(); if (field.isNullObject) { - console.log("No field in selection."); + console.log("This document has no fields."); } else { - console.log("Before updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - - field.updateResult(); - field.select(); - await context.sync(); - - field.load(["code", "result"]); - await context.sync(); - - console.log("After updating:"); console.log("Code of first field: " + field.code); console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("Type of first field: " + field.type); + console.log("Is the first field locked? " + field.locked); + console.log("Kind of the first field: " + field.kind); } }); 'Word.FieldCollection#getFirstOrNullObject:member(1)': @@ -16456,6 +16863,21 @@ await context.sync(); console.log(base64.value); }); +'Word.InlinePicture:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + + // Inserts an image anchored to the last paragraph. + + await Word.run(async (context) => { + context.document.body.paragraphs + .getLast() + .insertParagraph("", "After") + .insertInlinePictureFromBase64(base64Image, "End"); + + await context.sync(); + }); 'Word.InlinePicture#imageFormat:member': - >- // Link to full sample: @@ -16476,21 +16898,6 @@ await context.sync(); console.log(base64.value); }); -'Word.InlinePicture:class': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - - // Inserts an image anchored to the last paragraph. - - await Word.run(async (context) => { - context.document.body.paragraphs - .getLast() - .insertParagraph("", "After") - .insertInlinePictureFromBase64(base64Image, "End"); - - await context.sync(); - }); 'Word.InlinePictureCollection:class': - >- // Link to full sample: @@ -16547,7 +16954,7 @@ console.log("Inserted section without an associated page break"); }); -'Word.List#insertParagraph:member(1)': +'Word.List:class': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -16573,82 +16980,41 @@ // Set up list level for the list item. paragraph.listItem.level = 4; - // To add paragraphs outside the list, use Before or After. - list.insertParagraph("New paragraph goes after (not part of the list)", "After"); - - await context.sync(); - }); -'Word.List#levelExistences:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - - // Gets information about the first list in the document. - - await Word.run(async (context) => { - const lists = context.document.body.lists; - lists.load("items"); - - await context.sync(); - - if (lists.items.length === 0) { - console.warn("There are no lists in this document"); - return; - } - - // Get the first list. - const list = lists.getFirst(); - list.load("levelTypes,levelExistences"); - - await context.sync(); - - const levelTypes = list.levelTypes; - console.log("Level types of the first list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } - - const levelExistences = list.levelExistences; - console.log("Level existences of the first list:"); - for (let i = 0; i < levelExistences.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); - } + // To add paragraphs outside the list, use Before or After. + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + + await context.sync(); }); -'Word.List#levelTypes:member': +'Word.List#insertParagraph:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml - // Gets information about the first list in the document. + // This example starts a new list with the second paragraph. await Word.run(async (context) => { - const lists = context.document.body.lists; - lists.load("items"); + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); await context.sync(); - if (lists.items.length === 0) { - console.warn("There are no lists in this document"); - return; - } - - // Get the first list. - const list = lists.getFirst(); - list.load("levelTypes,levelExistences"); + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); + list.load("$none"); await context.sync(); - const levelTypes = list.levelTypes; - console.log("Level types of the first list:"); - for (let i = 0; i < levelTypes.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); - } + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item at the start of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); - const levelExistences = list.levelExistences; - console.log("Level existences of the first list:"); - for (let i = 0; i < levelExistences.length; i++) { - console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); - } + // Set up list level for the list item. + paragraph.listItem.level = 4; + + // To add paragraphs outside the list, use Before or After. + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + + await context.sync(); }); 'Word.List#setLevelBullet:member(1)': - >- @@ -16724,36 +17090,77 @@ await context.sync(); }); -'Word.List:class': +'Word.List#levelExistences:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // This example starts a new list with the second paragraph. + // Gets information about the first list in the document. await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); + const lists = context.document.body.lists; + lists.load("items"); await context.sync(); - // Start new list using the second paragraph. - const list = paragraphs.items[1].startNewList(); - list.load("$none"); + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); await context.sync(); - // To add new items to the list, use Start or End on the insertLocation parameter. - list.insertParagraph("New list item at the start of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } - // Set up list level for the list item. - paragraph.listItem.level = 4; + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } + }); +'Word.List#levelTypes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // To add paragraphs outside the list, use Before or After. - list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + // Gets information about the first list in the document. + + await Word.run(async (context) => { + const lists = context.document.body.lists; + lists.load("items"); + + await context.sync(); + + if (lists.items.length === 0) { + console.warn("There are no lists in this document"); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); await context.sync(); + + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } + + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } }); 'Word.ListBullet:enum': - >- @@ -16918,62 +17325,62 @@ console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.value}`); }); -'Word.NoteItem#body:member': +'Word.NoteItem#delete:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Gets the text of the referenced footnote. + // Deletes this referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items/body"); + footnotes.load("items"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - const footnoteBody = footnotes.items[mark].body.getRange(); - footnoteBody.load("text"); + footnotes.items[mark].delete(); await context.sync(); - console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); + console.log("Footnote deleted."); }); -'Word.NoteItem#delete:member(1)': +'Word.NoteItem#getNext:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Deletes this referenced footnote. + // Selects the next footnote in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items"); + footnotes.load("items/reference"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - footnotes.items[mark].delete(); - await context.sync(); - - console.log("Footnote deleted."); + const reference = footnotes.items[mark].getNext().reference; + reference.select(); + console.log("Selected is the next footnote: " + (mark + 2)); }); -'Word.NoteItem#getNext:member(1)': +'Word.NoteItem#body:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Selects the next footnote in the document body. + // Gets the text of the referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items/reference"); + footnotes.load("items/body"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - const reference = footnotes.items[mark].getNext().reference; - reference.select(); - console.log("Selected is the next footnote: " + (mark + 2)); + const footnoteBody = footnotes.items[mark].body.getRange(); + footnoteBody.load("text"); + await context.sync(); + + console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); }); 'Word.NoteItem#reference:member': - >- @@ -17055,17 +17462,6 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.Paragraph#alignment:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml - - await Word.run(async (context) => { - // Center last paragraph alignment. - context.document.body.paragraphs.getLast().alignment = "Centered"; - - await context.sync(); - }); 'Word.Paragraph#getRange:member(1)': - >- // Link to full sample: @@ -17096,6 +17492,50 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); +'Word.Paragraph#insertAnnotations:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Adds annotations to the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const critique1 = { + colorScheme: Word.CritiqueColorScheme.red, + start: 1, + length: 3 + }; + const critique2 = { + colorScheme: Word.CritiqueColorScheme.green, + start: 6, + length: 1 + }; + const critique3 = { + colorScheme: Word.CritiqueColorScheme.blue, + start: 10, + length: 3 + }; + const critique4 = { + colorScheme: Word.CritiqueColorScheme.lavender, + start: 14, + length: 3 + }; + const critique5 = { + colorScheme: Word.CritiqueColorScheme.berry, + start: 18, + length: 10 + }; + const annotationSet: Word.AnnotationSet = { + critiques: [critique1, critique2, critique3, critique4, critique5] + }; + + const annotationIds = paragraph.insertAnnotations(annotationSet); + + await context.sync(); + + console.log("Annotations inserted:", annotationIds.value); + }); 'Word.Paragraph#insertBreak:member(1)': - >- // Link to full sample: @@ -17118,28 +17558,6 @@ range.font.highlightColor = "black"; range.font.color = "white"; - await context.sync(); - }); -'Word.Paragraph#leftIndent:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml - - await Word.run(async (context) => { - // Indent the first paragraph. - context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points - - return context.sync(); - }); -'Word.Paragraph#lineSpacing:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml - - await Word.run(async (context) => { - // Adjust line spacing. - context.document.body.paragraphs.getFirst().lineSpacing = 20; - await context.sync(); }); 'Word.Paragraph#select:member(1)': @@ -17193,17 +17611,6 @@ secondParagraph.set(firstParagraph); - await context.sync(); - }); -'Word.Paragraph#spaceAfter:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml - - await Word.run(async (context) => { - // Adjust space between paragraphs. - context.document.body.paragraphs.getFirst().spaceAfter = 20; - await context.sync(); }); 'Word.Paragraph#split:member(1)': @@ -17247,15 +17654,59 @@ await context.sync(); - // To add new items to the list, use Start or End on the insertLocation parameter. - list.insertParagraph("New list item at the start of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item at the start of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); + + // Set up list level for the list item. + paragraph.listItem.level = 4; + + // To add paragraphs outside the list, use Before or After. + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + + await context.sync(); + }); +'Word.Paragraph#alignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + + await Word.run(async (context) => { + // Center last paragraph alignment. + context.document.body.paragraphs.getLast().alignment = "Centered"; + + await context.sync(); + }); +'Word.Paragraph#leftIndent:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + + await Word.run(async (context) => { + // Indent the first paragraph. + context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points + + return context.sync(); + }); +'Word.Paragraph#lineSpacing:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + + await Word.run(async (context) => { + // Adjust line spacing. + context.document.body.paragraphs.getFirst().lineSpacing = 20; - // Set up list level for the list item. - paragraph.listItem.level = 4; + await context.sync(); + }); +'Word.Paragraph#spaceAfter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml - // To add paragraphs outside the list, use Before or After. - list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + await Word.run(async (context) => { + // Adjust space between paragraphs. + context.document.body.paragraphs.getFirst().spaceAfter = 20; await context.sync(); }); @@ -17340,6 +17791,47 @@ await context.sync(); console.log(paragraph.text); }); +'Word.Paragraph#uniqueLocalId:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Registers event handlers. + + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + async function paragraphChanged(args: Word.ParagraphChangedEventArgs) { + await Word.run(async (context) => { + const results = []; + for (let id of args.uniqueLocalIds) { + let para = context.document.getParagraphByUniqueLocalId(id); + para.load("uniqueLocalId"); + + results.push({ para: para, text: para.getText() }); + } + + await context.sync(); + + for (let result of results) { + console.log(`${args.type}: ${result.para.uniqueLocalId} - ${result.text.value}`); + } + }); + } 'Word.ParagraphAddedEventArgs:interface': - >- // Link to full sample: @@ -17386,6 +17878,28 @@ console.log(event.uniqueLocalIds); }); } +'Word.ParagraphCollection#getFirst:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + // Gets annotations found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + console.log("Annotations found:"); + + for (var i = 0; i < annotations.items.length; i++) { + const annotation = annotations.items[i]; + + console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + } + }); 'Word.ParagraphCollection#getLast:member(1)': - >- // Link to full sample: @@ -17455,33 +17969,6 @@ console.log(event.uniqueLocalIds); }); } -'Word.ParagraphFormat#alignment:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml - - // Sets certain aspects of the specified style's paragraph format e.g., the - left indent size and the alignment. - - await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; - if (styleName == "") { - console.warn("Enter a style name to update its paragraph format."); - return; - } - - const style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - style.paragraphFormat.leftIndent = 30; - style.paragraphFormat.alignment = Word.Alignment.centered; - console.log(`Successfully the paragraph format of the '${styleName}' style.`); - } - }); 'Word.ParagraphFormat#leftIndent:member': - >- // Link to full sample: @@ -17700,6 +18187,33 @@ console.log("Inserted footnote."); }); +'Word.ParagraphFormat#alignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + + // Sets certain aspects of the specified style's paragraph format e.g., the + left indent size and the alignment. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update its paragraph format."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.paragraphFormat.leftIndent = 30; + style.paragraphFormat.alignment = Word.Alignment.centered; + console.log(`Successfully the paragraph format of the '${styleName}' style.`); + } + }); 'Word.Range#styleBuiltIn:member': - >- // Link to full sample: @@ -17871,6 +18385,19 @@ console.log("Setting added or edited:"); console.log(setting); }); +'Word.SettingCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Deletes all custom settings this add-in had set on this document. + + await Word.run(async (context) => { + const settings = context.document.settings; + settings.deleteAll(); + await context.sync(); + console.log("All settings deleted"); + }); 'Word.SettingCollection#add:member(1)': - >- // Link to full sample: @@ -17923,19 +18450,6 @@ } } }); -'Word.SettingCollection:class': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml - - // Deletes all custom settings this add-in had set on this document. - - await Word.run(async (context) => { - const settings = context.document.settings; - settings.deleteAll(); - await context.sync(); - console.log("All settings deleted"); - }); 'Word.Style#delete:member(1)': - >- // Link to full sample: @@ -18128,23 +18642,6 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Table#alignment:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - - // Gets alignment details about the first table in the document. - - await Word.run(async (context) => { - const firstTable = context.document.body.tables.getFirst(); - firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); - await context.sync(); - - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); - }); 'Word.Table#getBorder:member(1)': - >- // Link to full sample: @@ -18195,6 +18692,23 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` ); }); +'Word.Table#alignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Gets alignment details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); + await context.sync(); + + console.log(`Details about the alignment of the first table:`); + console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); + console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); + console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + }); 'Word.Table#horizontalAlignment:member': - >- // Link to full sample: @@ -18321,6 +18835,20 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); +'Word.TableCell:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + + // Gets the content of the first cell in the first table. + + await Word.run(async (context) => { + const firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; + firstCell.load("text"); + + await context.sync(); + console.log("First cell's text is: " + firstCell.text); + }); 'Word.TableCell#getBorder:member(2)': - >- // Link to full sample: @@ -18396,19 +18924,22 @@ console.log(`- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`); console.log(`- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCell:class': +'Word.TableCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Gets the content of the first cell in the first table. + // Gets alignment details about the first table in the document. await Word.run(async (context) => { - const firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; - firstCell.load("text"); - + const firstTable = context.document.body.tables.getFirst(); + firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log("First cell's text is: " + firstCell.text); + + console.log(`Details about the alignment of the first table:`); + console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); + console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); + console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); 'Word.TableCollection#getFirst:member(1)': - >- @@ -18424,23 +18955,6 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); -'Word.TableCollection:class': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - - // Gets alignment details about the first table in the document. - - await Word.run(async (context) => { - const firstTable = context.document.body.tables.getFirst(); - firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); - await context.sync(); - - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); - }); 'Word.TableRow#getBorder:member(1)': - >- // Link to full sample: @@ -18481,6 +18995,24 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table's first row: ${cellPadding.value} points` ); }); +'Word.TableRowCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Gets content alignment details about the first row of the first table in + the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstTableRow = firstTable.rows.getFirst(); + firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); + await context.sync(); + + console.log(`Details about the alignment of the first table's first row:`); + console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); + console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); + }); 'Word.TableRowCollection#getFirst:member(1)': - >- // Link to full sample: @@ -18502,23 +19034,40 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); -'Word.TableRowCollection:class': +'Word.TableStyle:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + + // Gets the table style properties and displays them in the form. + + const styleName = $("#style-name") + .val() + .toString(); + if (styleName == "") { + console.warn("Please input a table style name."); + return; + } - // Gets content alignment details about the first row of the first table in - the document. await Word.run(async (context) => { - const firstTable = context.document.body.tables.getFirst(); - const firstTableRow = firstTable.rows.getFirst(); - firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); + const tableStyle = context.document.getStyles().getByName(styleName).tableStyle; + tableStyle.load(); await context.sync(); - console.log(`Details about the alignment of the first table's first row:`); - console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); + if (tableStyle.isNullObject) { + console.warn(`There's no existing table style with the name '${styleName}'.`); + return; + } + + console.log(tableStyle); + $("#alignment").val(tableStyle.alignment); + $("#allow-break-across-page").val(tableStyle.allowBreakAcrossPage.toString()); + $("#top-cell-margin").val(tableStyle.topCellMargin); + $("#bottom-cell-margin").val(tableStyle.bottomCellMargin); + $("#left-cell-margin").val(tableStyle.leftCellMargin); + $("#right-cell-margin").val(tableStyle.rightCellMargin); + $("#cell-spacing").val(tableStyle.cellSpacing); }); 'Word.TrackedChange#accept:member(1)': - >- From 2db5229aa0248cf37d8296f1fafd5e10419f84e9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 Feb 2024 13:17:19 -0800 Subject: [PATCH 034/156] [Word] (paragraph) Include lineUnit properties (#849) * [Word] (paragraph) Include lineUnit properties * Update metadata mapping * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * run yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 2 +- playlists/word.yaml | 2 +- .../25-paragraph/paragraph-properties.yaml | 32 +++++- snippet-extractor-metadata/word.xlsx | Bin 22272 -> 22429 bytes snippet-extractor-output/snippets.yaml | 105 +++++++++++++----- 5 files changed, 109 insertions(+), 32 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 01e642fda..97298df00 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -182,7 +182,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph api_set: - WordApi: '1.2' + WordApi: '1.1' - id: word-paragraph-search name: Search fileName: search.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 2719729e4..1063cbba3 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -182,7 +182,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph api_set: - WordApi: '1.2' + WordApi: '1.1' - id: word-paragraph-search name: Search fileName: search.yaml diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 2c88052fd..c011d7de3 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -5,12 +5,14 @@ description: 'Sets indentation, space between paragraphs, and other paragraph pr author: OfficeDev host: WORD api_set: - WordApi: '1.2' + WordApi: '1.1' script: content: | $("#indent").click(() => tryCatch(indent)); $("#spacing").click(() => tryCatch(spacing)); $("#space-after").click(() => tryCatch(spaceAfter)); + $("#line-unit-spacing-after").click(() => tryCatch(spaceAfterInLines)); + $("#line-unit-spacing-before").click(() => tryCatch(spaceBeforeInLines)); $("#align").click(() => tryCatch(align)); $("#setup").click(() => tryCatch(setup)); @@ -34,13 +36,31 @@ script: async function spaceAfter() { await Word.run(async (context) => { - // Adjust space between paragraphs. + // Set the space (in points) after the first paragraph. context.document.body.paragraphs.getFirst().spaceAfter = 20; await context.sync(); }); } + async function spaceAfterInLines() { + await Word.run(async (context) => { + // Set the space (in line units) after the first paragraph. + context.document.body.paragraphs.getFirst().lineUnitAfter = 1; + + await context.sync(); + }); + } + + async function spaceBeforeInLines() { + await Word.run(async (context) => { + // Set the space (in line units) before the first paragraph. + context.document.body.paragraphs.getFirst().lineUnitBefore = 1; + + await context.sync(); + }); + } + async function align() { await Word.run(async (context) => { // Center last paragraph alignment. @@ -103,6 +123,14 @@ template:

+ +

+ +

diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 2c89624856ae09b8a7f57b3fc8f36f91c84a6b11..dfdb0a3e160c07e46b8fffd51b0fa50c36131357 100644 GIT binary patch delta 13643 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

i-1^DOx_!Xa$`>)wfKfB7>{FCk8 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 Qno^>(7A4G!>VGKz2NubVNdN!< diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2c9919f6a..8c709bff1 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -17697,6 +17697,28 @@ // Adjust line spacing. context.document.body.paragraphs.getFirst().lineSpacing = 20; + await context.sync(); + }); +'Word.Paragraph#lineUnitAfter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + + await Word.run(async (context) => { + // Set the space (in line units) after the first paragraph. + context.document.body.paragraphs.getFirst().lineUnitAfter = 1; + + await context.sync(); + }); +'Word.Paragraph#lineUnitBefore:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + + await Word.run(async (context) => { + // Set the space (in line units) before the first paragraph. + context.document.body.paragraphs.getFirst().lineUnitBefore = 1; + await context.sync(); }); 'Word.Paragraph#spaceAfter:member': @@ -17705,7 +17727,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { - // Adjust space between paragraphs. + // Set the space (in points) after the first paragraph. context.document.body.paragraphs.getFirst().spaceAfter = 20; await context.sync(); @@ -17969,6 +17991,60 @@ console.log(event.uniqueLocalIds); }); } +'Word.ParagraphFormat:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + + // Sets certain aspects of the specified style's paragraph format e.g., the + left indent size and the alignment. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update its paragraph format."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.paragraphFormat.leftIndent = 30; + style.paragraphFormat.alignment = Word.Alignment.centered; + console.log(`Successfully the paragraph format of the '${styleName}' style.`); + } + }); +'Word.ParagraphFormat#alignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + + // Sets certain aspects of the specified style's paragraph format e.g., the + left indent size and the alignment. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update its paragraph format."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.paragraphFormat.leftIndent = 30; + style.paragraphFormat.alignment = Word.Alignment.centered; + console.log(`Successfully the paragraph format of the '${styleName}' style.`); + } + }); 'Word.ParagraphFormat#leftIndent:member': - >- // Link to full sample: @@ -18187,33 +18263,6 @@ console.log("Inserted footnote."); }); -'Word.ParagraphFormat#alignment:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml - - // Sets certain aspects of the specified style's paragraph format e.g., the - left indent size and the alignment. - - await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; - if (styleName == "") { - console.warn("Enter a style name to update its paragraph format."); - return; - } - - const style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - style.paragraphFormat.leftIndent = 30; - style.paragraphFormat.alignment = Word.Alignment.centered; - console.log(`Successfully the paragraph format of the '${styleName}' style.`); - } - }); 'Word.Range#styleBuiltIn:member': - >- // Link to full sample: From 72203907e1f3bb81cf637d45e76da3dd36c837f4 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 Feb 2024 15:27:54 -0800 Subject: [PATCH 035/156] [Word] (style) Include BorderWidth (#850) * [Word] (style) Include BorderWidth * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Apply suggestions from code review * Split out snippets * Map borderCollection properties * Update to .on pattern * remove author --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 20 ++ playlists/word.yaml | 20 ++ .../word/50-document/get-external-styles.yaml | 90 +++++ .../word/50-document/manage-annotations.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 69 +--- samples/word/50-document/save-close.yaml | 2 +- .../word/99-preview-apis/manage-styles.yaml | 316 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 22429 -> 22722 bytes snippet-extractor-output/snippets.yaml | 165 ++++++++- view-prod/word.json | 2 + view/word.json | 2 + 11 files changed, 628 insertions(+), 60 deletions(-) create mode 100644 samples/word/50-document/get-external-styles.yaml create mode 100644 samples/word/99-preview-apis/manage-styles.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 97298df00..a442df397 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -441,6 +441,15 @@ group: Document api_set: WordApi: '1.5' +- id: word-document-get-external-styles + name: Get styles from external document + fileName: get-external-styles.yaml + description: This sample shows how to get styles from an external document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml + group: Document + api_set: + WordApi: '1.5' - id: word-document-save-close name: Manage document save and close fileName: save-close.yaml @@ -488,6 +497,17 @@ group: Preview APIs api_set: WordApi: '1.8' +- id: word-manage-styles + name: Manage styles + fileName: manage-styles.yaml + description: >- + This sample shows how to perform operations on the styles in the current + document and how to add and delete custom styles. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + group: Preview APIs + api_set: + WordApi: '1.8' - id: word-tables-manage-custom-style name: Manage custom table style fileName: manage-custom-style.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 1063cbba3..94f6c6afd 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -441,6 +441,15 @@ group: Document api_set: WordApi: '1.5' +- id: word-document-get-external-styles + name: Get styles from external document + fileName: get-external-styles.yaml + description: This sample shows how to get styles from an external document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/get-external-styles.yaml + group: Document + api_set: + WordApi: '1.5' - id: word-document-save-close name: Manage document save and close fileName: save-close.yaml @@ -488,6 +497,17 @@ group: Preview APIs api_set: WordApi: '1.8' +- id: word-manage-styles + name: Manage styles + fileName: manage-styles.yaml + description: >- + This sample shows how to perform operations on the styles in the current + document and how to add and delete custom styles. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml + group: Preview APIs + api_set: + WordApi: '1.8' - id: word-tables-manage-custom-style name: Manage custom table style fileName: manage-custom-style.yaml diff --git a/samples/word/50-document/get-external-styles.yaml b/samples/word/50-document/get-external-styles.yaml new file mode 100644 index 000000000..9bed46af9 --- /dev/null +++ b/samples/word/50-document/get-external-styles.yaml @@ -0,0 +1,90 @@ +order: 13 +id: word-document-get-external-styles +name: Get styles from external document +description: This sample shows how to get styles from an external document. +host: WORD +api_set: + WordApi: '1.5' +script: + content: | + $("#file").on("change", getBase64); + $("#get-external-styles").on("click", () => tryCatch(getExternalStyles)); + + let externalDocument; + + async function getExternalStyles() { + // Gets style info from another document passed in as a Base64-encoded string. + await Word.run(async (context) => { + const retrievedStyles = context.application.retrieveStylesFromBase64(externalDocument); + await context.sync(); + + console.log("Styles from the other document:", retrievedStyles.value); + }); + } + + function getBase64() { + // Retrieve the file and set up an HTML FileReader element. + const myFile = document.getElementById("file"); + const reader = new FileReader(); + + reader.onload = (event) => { + // Remove the metadata before the Base64-encoded string. + const startIndex = reader.result.toString().indexOf("base64,"); + externalDocument = reader.result.toString().substr(startIndex + 7); + }; + + // Read the file as a data URL so that we can parse the Base64-encoded string. + reader.readAsDataURL(myFile.files[0]); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +

+ This sample demonstrates how to get styles from an external document. +
+ +
+

Try it out

+

Select a Word document to get its style info.

+
+ +
+
+

Get style info from the selected document.

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + core-js@2.4.1/client/core.min.js + @types/core-js + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 482c036b8..2b100d1d9 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: word-document-manage-annotations name: Manage annotations description: Shows how to leverage the Writing Assistance API to manage annotations and use annotation events. diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index bf4b30440..fda1e6d2b 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -7,15 +7,13 @@ api_set: WordApi: '1.5' script: content: | - $("#count").click(() => tryCatch(getCount)); - $("#add-style").click(() => tryCatch(addStyle)); - $("#properties").click(() => tryCatch(getProperties)); - $("#apply-style").click(() => tryCatch(applyStyle)); - $("#font-properties").click(() => tryCatch(setFontProperties)); - $("#paragraph-format").click(() => tryCatch(setParagraphFormat)); - $("#delete-style").click(() => tryCatch(deleteStyle)); - $("#file").change(getBase64); - $("#get-external-styles").click(() => tryCatch(getExternalStyles)); + $("#count").on("click", () => tryCatch(getCount)); + $("#add-style").on("click", () => tryCatch(addStyle)); + $("#properties").on("click", () => tryCatch(getProperties)); + $("#apply-style").on("click", () => tryCatch(applyStyle)); + $("#font-properties").on("click", () => tryCatch(setFontProperties)); + $("#paragraph-format").on("click", () => tryCatch(setParagraphFormat)); + $("#delete-style").on("click", () => tryCatch(deleteStyle)); async function getCount() { // Gets the number of styles. @@ -182,34 +180,6 @@ script: }); } - let externalDocument; - - async function getExternalStyles() { - // Gets style info from another document passed in as a Base64-encoded string. - await Word.run(async (context) => { - const retrievedStyles = context.application.retrieveStylesFromBase64(externalDocument); - await context.sync(); - - console.log("Styles from the other document:"); - console.log(retrievedStyles.value); - }); - } - - function getBase64() { - // Retrieve the file and set up an HTML FileReader element. - const myFile = document.getElementById("file"); - const reader = new FileReader(); - - reader.onload = (event) => { - // Remove the metadata before the Base64-encoded string. - const startIndex = reader.result.toString().indexOf("base64,"); - externalDocument = reader.result.toString().substr(startIndex + 7); - }; - - // Read the file as a data URL so that we can parse the Base64-encoded string. - reader.readAsDataURL(myFile.files[0]); - } - // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { @@ -280,24 +250,13 @@ template: Set paragraph format -

Delete custom style

-

- - - -

-

Get style info from external document

-

Select a Word document to get its style info.

-
- -
-
-

Get style info from the selected document.

- +

Delete custom style

+

+ + +

language: html style: diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index be9092cc8..15c004919 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: word-document-save-close name: Manage document save and close description: Shows how to manage saving and closing document. diff --git a/samples/word/99-preview-apis/manage-styles.yaml b/samples/word/99-preview-apis/manage-styles.yaml new file mode 100644 index 000000000..0dfcbdf52 --- /dev/null +++ b/samples/word/99-preview-apis/manage-styles.yaml @@ -0,0 +1,316 @@ +id: word-manage-styles +name: Manage styles +description: This sample shows how to perform operations on the styles in the current document and how to add and delete custom styles. +host: WORD +api_set: + WordApi: '1.8' +script: + content: | + $("#count").on("click", () => tryCatch(getCount)); + $("#add-style").on("click", () => tryCatch(addStyle)); + $("#properties").on("click", () => tryCatch(getProperties)); + $("#apply-style").on("click", () => tryCatch(applyStyle)); + $("#font-properties").on("click", () => tryCatch(setFontProperties)); + $("#paragraph-format").on("click", () => tryCatch(setParagraphFormat)); + $("#border-properties").on("click", () => tryCatch(setBorderProperties)); + $("#delete-style").on("click", () => tryCatch(deleteStyle)); + + async function getCount() { + // Gets the number of available styles stored with the document. + await Word.run(async (context) => { + const styles = context.document.getStyles(); + const count = styles.getCount(); + await context.sync(); + + console.log(`Number of styles: ${count.value}`); + }); + } + + async function addStyle() { + // Adds a new style. + await Word.run(async (context) => { + const newStyleName = $("#new-style-name").val() as string; + if (newStyleName == "") { + console.warn("Enter a style name to add."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(newStyleName); + style.load(); + await context.sync(); + + if (!style.isNullObject) { + console.warn( + `There's an existing style with the same name '${newStyleName}'! Please provide another style name.` + ); + return; + } + + const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; + context.document.addStyle(newStyleName, newStyleType); + await context.sync(); + + console.log(newStyleName + " has been added to the style list."); + }); + } + + async function getProperties() { + // Gets the properties of the specified style. + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to get properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.font.load(); + style.paragraphFormat.load(); + await context.sync(); + + console.log(`Properties of the '${styleName}' style:`); + console.log(style); + } + }); + } + + async function applyStyle() { + // Applies the specified style to a paragraph. + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to apply."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else if (style.type != Word.StyleType.paragraph) { + console.log(`The '${styleName}' style isn't a paragraph style.`); + } else { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", + "Start" + ); + const paragraph = body.paragraphs.getFirst(); + paragraph.style = style.nameLocal; + console.log(`'${styleName}' style applied to first paragraph.`); + } + }); + } + + async function setFontProperties() { + // Updates font properties (e.g., color, size) of the specified style. + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update font properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const font = style.font; + font.color = "#FF0000"; + font.size = 20; + console.log(`Successfully updated font properties of the '${styleName}' style.`); + } + }); + } + + async function setParagraphFormat() { + // Sets certain aspects of the specified style's paragraph format e.g., the left indent size and the alignment. + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update its paragraph format."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.paragraphFormat.leftIndent = 30; + style.paragraphFormat.alignment = Word.Alignment.centered; + console.log(`Successfully the paragraph format of the '${styleName}' style.`); + } + }); + } + + async function setBorderProperties() { + // Updates border properties (e.g., type, width, color) of the specified style. + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders"); + } + }); + } + + async function deleteStyle() { + // Deletes the custom style. + await Word.run(async (context) => { + const styleName = $("#style-name-to-delete").val() as string; + if (styleName == "") { + console.warn("Enter a style name to delete."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + style.delete(); + console.log(`Successfully deleted custom style '${styleName}'.`); + } + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to manage styles. +
+ +
+

Try it out

+

+

Get current number of styles

+ +

+ +

Add a custom style

+
Give the style an alphanumeric name. Must start with a letter. Examples: NewName, newname1
+

+ + +

+

+ + +

+ + +

Use custom style

+ + +

+ +

+ + +

Update custom style

+ + +

+

Set font color to red and font size to 20.
+ +

+

Set paragraph left indent size to 30 and alignment to center.
+ +

+

Set outside border type to dashed, width to pt. 0.25, and color to green.
+ + +

Delete custom style

+

+ + + +

+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + core-js@2.4.1/client/core.min.js + @types/core-js + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index dfdb0a3e160c07e46b8fffd51b0fa50c36131357..49471c20eb006a375768c12fb1213c0957d0a15c 100644 GIT binary patch delta 14731 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 delta 14410 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml // Gets style info from another document passed in as a Base64-encoded string. @@ -14522,8 +14522,7 @@ const retrievedStyles = context.application.retrieveStylesFromBase64(externalDocument); await context.sync(); - console.log("Styles from the other document:"); - console.log(retrievedStyles.value); + console.log("Styles from the other document:", retrievedStyles.value); }); 'Word.Body#clear:member(1)': - >- @@ -15113,6 +15112,134 @@ console.log(`Body type of note: ${item.body.type}`); }); +'Word.BorderCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + // Updates border properties (e.g., type, width, color) of the specified + style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders"); + } + }); +'Word.BorderCollection#outsideBorderColor:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + // Updates border properties (e.g., type, width, color) of the specified + style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders"); + } + }); +'Word.BorderCollection#outsideBorderType:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + // Updates border properties (e.g., type, width, color) of the specified + style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders"); + } + }); +'Word.BorderCollection#outsideBorderWidth:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + // Updates border properties (e.g., type, width, color) of the specified + style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders"); + } + }); 'Word.BorderLocation:enum': - >- // Link to full sample: @@ -15152,6 +15279,38 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); +'Word.BorderWidth:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + // Updates border properties (e.g., type, width, color) of the specified + style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders"); + } + }); 'Word.BreakType:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 626108b1b..1f097e4ed 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -43,10 +43,12 @@ "word-document-manage-custom-xml-part-ns": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml", "word-document-manage-custom-xml-part": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml", "word-document-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml", + "word-document-get-external-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 957ffcc09..b274c9a8f 100644 --- a/view/word.json +++ b/view/word.json @@ -43,10 +43,12 @@ "word-document-manage-custom-xml-part-ns": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-custom-xml-part-ns.yaml", "word-document-manage-custom-xml-part": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-custom-xml-part.yaml", "word-document-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-styles.yaml", + "word-document-get-external-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/get-external-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file From 243e795b1cd16f4b75a076b99ff559ee632a9fef Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 9 Feb 2024 14:14:19 -0800 Subject: [PATCH 036/156] [all hosts] Update .click and .change events to .on notation (#853) * [all hosts] Update .click and .change events to .on notation * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- README.md | 106 +++++++++--------- .../excel/20-chart/chart-title-ts.yaml | 6 +- .../excel/01-basics/basic-api-call-es5.yaml | 2 +- samples/excel/01-basics/basic-api-call.yaml | 2 +- .../01-basics/basic-common-api-call.yaml | 2 +- .../excel/10-chart/chart-axis-formatting.yaml | 6 +- samples/excel/10-chart/chart-axis.yaml | 12 +- .../excel/10-chart/chart-bubble-chart.yaml | 4 +- .../10-chart/chart-create-several-charts.yaml | 20 ++-- samples/excel/10-chart/chart-data-source.yaml | 4 +- samples/excel/10-chart/chart-data-table.yaml | 8 +- samples/excel/10-chart/chart-formatting.yaml | 10 +- samples/excel/10-chart/chart-legend.yaml | 4 +- samples/excel/10-chart/chart-point.yaml | 4 +- .../excel/10-chart/chart-series-markers.yaml | 4 +- .../10-chart/chart-series-plotorder.yaml | 4 +- samples/excel/10-chart/chart-series.yaml | 6 +- .../excel/10-chart/chart-title-format.yaml | 10 +- samples/excel/10-chart/chart-trendlines.yaml | 10 +- .../excel/10-chart/create-doughnut-chart.yaml | 6 +- samples/excel/12-comment/comment-basics.yaml | 12 +- .../excel/12-comment/comment-mentions.yaml | 4 +- samples/excel/12-comment/comment-replies.yaml | 12 +- .../excel/12-comment/comment-resolution.yaml | 8 +- .../conditional-formatting-advanced.yaml | 10 +- .../conditional-formatting-basic.yaml | 22 ++-- ...e-set-get-and-delete-custom-xml-parts.yaml | 6 +- .../test-xml-for-unique-namespace.yaml | 6 +- .../data-types-entity-attribution.yaml | 4 +- .../data-types-entity-icons.yaml | 4 +- .../data-types-entity-values.yaml | 4 +- .../data-types-error-values.yaml | 6 +- .../data-types-formatted-number.yaml | 8 +- .../20-data-types/data-types-references.yaml | 4 +- .../20-data-types/data-types-web-image.yaml | 10 +- .../22-data-validation/data-validation.yaml | 8 +- .../excel/26-document/custom-properties.yaml | 5 +- .../26-document/get-file-in-slices-async.yaml | 6 +- samples/excel/26-document/properties.yaml | 10 +- .../30-events/data-change-event-details.yaml | 4 +- samples/excel/30-events/data-changed.yaml | 4 +- .../30-events/event-column-and-row-sort.yaml | 9 +- .../event-worksheet-single-click.yaml | 2 +- .../30-events/events-chart-activated.yaml | 8 +- ...vents-chartcollection-added-activated.yaml | 6 +- .../events-comment-event-handler.yaml | 10 +- .../30-events/events-disable-events.yaml | 8 +- .../30-events/events-formula-changed.yaml | 6 +- .../excel/30-events/events-table-changed.yaml | 10 +- .../events-tablecollection-changed.yaml | 6 +- .../30-events/events-workbook-activated.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 16 +-- .../events-worksheet-protection.yaml | 4 +- samples/excel/30-events/events-worksheet.yaml | 14 +-- .../30-events/selection-changed-events.yaml | 4 +- .../create-and-remove-named-item.yaml | 12 +- .../34-named-item/update-named-item.yaml | 6 +- .../pivottable-calculations.yaml | 10 +- .../pivottable-create-and-modify.yaml | 18 +-- .../pivottable-filters-and-summaries.yaml | 18 +-- .../pivottable-get-pivottables.yaml | 8 +- .../pivottable-pivotfilters.yaml | 16 +-- .../38-pivottable/pivottable-pivotlayout.yaml | 22 ++-- .../38-pivottable/pivottable-refresh.yaml | 6 +- .../38-pivottable/pivottable-slicer.yaml | 16 +-- .../38-pivottable/pivottable-source-data.yaml | 4 +- samples/excel/42-range/cell-properties.yaml | 6 +- samples/excel/42-range/dynamic-arrays.yaml | 8 +- samples/excel/42-range/formatting.yaml | 6 +- .../42-range/insert-delete-clear-range.yaml | 8 +- samples/excel/42-range/outline.yaml | 14 +-- samples/excel/42-range/precedents.yaml | 12 +- samples/excel/42-range/range-areas.yaml | 12 +- samples/excel/42-range/range-auto-fill.yaml | 10 +- samples/excel/42-range/range-copyfrom.yaml | 18 +-- samples/excel/42-range/range-dependents.yaml | 8 +- .../42-range/range-direct-dependents.yaml | 8 +- samples/excel/42-range/range-find.yaml | 12 +- .../excel/42-range/range-get-range-edge.yaml | 14 +-- samples/excel/42-range/range-hyperlink.yaml | 10 +- .../excel/42-range/range-merged-ranges.yaml | 6 +- .../excel/42-range/range-relationships.yaml | 12 +- .../42-range/range-remove-duplicates.yaml | 6 +- .../42-range/range-text-orientation.yaml | 6 +- samples/excel/42-range/selected-range.yaml | 4 +- samples/excel/42-range/set-get-values.yaml | 20 ++-- samples/excel/42-range/style.yaml | 14 +-- samples/excel/42-range/used-range.yaml | 6 +- .../44-shape/shape-create-and-delete.yaml | 10 +- samples/excel/44-shape/shape-groups.yaml | 10 +- samples/excel/44-shape/shape-images.yaml | 10 +- samples/excel/44-shape/shape-lines.yaml | 22 ++-- .../excel/44-shape/shape-move-and-order.yaml | 14 +-- samples/excel/44-shape/shape-textboxes.yaml | 12 +- .../add-rows-and-columns-to-a-table.yaml | 8 +- .../46-table/convert-range-to-table.yaml | 4 +- samples/excel/46-table/create-table.yaml | 2 +- samples/excel/46-table/filter-data.yaml | 6 +- samples/excel/46-table/formatting.yaml | 4 +- .../excel/46-table/get-data-from-table.yaml | 4 +- ...get-visible-range-of-a-filtered-table.yaml | 8 +- samples/excel/46-table/import-json-data.yaml | 2 +- samples/excel/46-table/resize-table.yaml | 4 +- samples/excel/46-table/sort-data.yaml | 4 +- .../create-get-change-delete-settings.yaml | 6 +- .../excel/50-workbook/create-workbook.yaml | 4 +- .../50-workbook/culture-info-date-time.yaml | 6 +- samples/excel/50-workbook/culture-info.yaml | 8 +- .../excel/50-workbook/data-protection.yaml | 18 +-- .../50-workbook/workbook-calculation.yaml | 8 +- .../50-workbook/workbook-get-active-cell.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 4 +- .../50-workbook/workbook-save-and-close.yaml | 8 +- .../excel/54-worksheet/active-worksheet.yaml | 6 +- .../add-delete-rename-move-worksheet.yaml | 8 +- samples/excel/54-worksheet/gridlines.yaml | 4 +- .../excel/54-worksheet/list-worksheets.yaml | 2 +- ...rence-worksheets-by-relative-position.yaml | 6 +- samples/excel/54-worksheet/tab-color.yaml | 8 +- .../54-worksheet/worksheet-auto-filter.yaml | 14 +-- .../excel/54-worksheet/worksheet-copy.yaml | 4 +- .../54-worksheet/worksheet-find-all.yaml | 8 +- .../54-worksheet/worksheet-freeze-panes.yaml | 12 +- .../54-worksheet/worksheet-page-layout.yaml | 16 +-- .../54-worksheet/worksheet-range-cell.yaml | 10 +- .../54-worksheet/worksheet-visibility.yaml | 4 +- .../90-scenarios/currency-converter.yaml | 4 +- .../90-scenarios/multiple-property-set.yaml | 6 +- .../performance-optimization.yaml | 12 +- .../excel/90-scenarios/report-generation.yaml | 2 +- .../90-scenarios/working-with-dates.yaml | 6 +- .../excel/99-just-for-fun/color-wheel.yaml | 4 +- samples/excel/99-just-for-fun/gradient.yaml | 4 +- .../99-just-for-fun/path-finder-game.yaml | 8 +- samples/excel/99-just-for-fun/patterns.yaml | 6 +- samples/excel/99-just-for-fun/tetrominos.yaml | 6 +- samples/excel/default.yaml | 2 +- samples/onenote/default.yaml | 2 +- .../10-roaming-settings/roaming-settings.yaml | 6 +- .../load-set-get-save.yaml | 10 +- .../20-item-body/add-inline-base64-image.yaml | 2 +- .../20-item-body/append-text-on-send.yaml | 2 +- .../outlook/20-item-body/get-body-format.yaml | 2 +- .../20-item-body/get-selected-data.yaml | 2 +- .../20-item-body/prepend-text-on-send.yaml | 2 +- .../prepend-text-to-item-body.yaml | 2 +- .../20-item-body/replace-selected-text.yaml | 2 +- .../outlook/25-item-save-and-close/close.yaml | 2 +- .../outlook/25-item-save-and-close/save.yaml | 2 +- .../get-all-attendees.yaml | 2 +- .../get-cc-message-read.yaml | 2 +- .../get-from-message-compose.yaml | 2 +- .../get-from-message-read.yaml | 2 +- ...tional-attendees-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-organizer.yaml | 2 +- ...quired-attendees-appointment-attendee.yaml | 2 +- .../get-sender-message-read.yaml | 2 +- .../get-set-bcc-message-compose.yaml | 4 +- .../get-set-cc-message-compose.yaml | 4 +- ...ional-attendees-appointment-organizer.yaml | 4 +- ...uired-attendees-appointment-organizer.yaml | 4 +- .../get-set-to-message-compose.yaml | 4 +- .../get-to-message-read.yaml | 2 +- .../35-notifications/add-getall-remove.yaml | 16 +-- .../40-attachments/attachments-compose.yaml | 10 +- .../get-attachment-content.yaml | 4 +- .../40-attachments/get-attachments-read.yaml | 2 +- .../45-categories/work-with-categories.yaml | 6 +- .../work-with-master-categories.yaml | 6 +- .../50-recurrence/get-recurrence-read.yaml | 2 +- .../outlook/50-recurrence/get-series-id.yaml | 2 +- ...-set-recurrence-appointment-organizer.yaml | 4 +- .../display-existing-appointment.yaml | 4 +- .../display-existing-message.yaml | 4 +- .../display-new-appointment.yaml | 4 +- .../55-display-items/display-new-message.yaml | 4 +- .../55-display-items/display-reply-forms.yaml | 8 +- .../display-reply-with-attachments.yaml | 4 +- .../sensitivity-label.yaml | 4 +- .../sensitivity-labels-catalog.yaml | 4 +- .../get-shared-properties.yaml | 6 +- .../get-internet-headers-message-read.yaml | 2 +- ...stom-internet-headers-message-compose.yaml | 6 +- .../basic-entities.yaml | 4 +- .../contextual.yaml | 6 +- .../selected.yaml | 4 +- .../basic-rest-cors.yaml | 2 +- .../get-icaluid-as-attendee.yaml | 2 +- .../get-icaluid-as-organizer.yaml | 2 +- .../ids-and-urls.yaml | 2 +- .../item-id-compose.yaml | 2 +- .../make-ews-request-async.yaml | 2 +- ...-message-using-make-ews-request-async.yaml | 2 +- .../user-callback-token.yaml | 2 +- .../user-identity-token.yaml | 2 +- .../delay-message-delivery.yaml | 12 +- ...d-remove-enhancedlocation-appointment.yaml | 6 +- .../get-conversation-id-message.yaml | 2 +- .../get-date-time-created-read.yaml | 2 +- .../get-date-time-modified-read.yaml | 2 +- .../get-diagnostic-information.yaml | 2 +- .../90-other-item-apis/get-end-read.yaml | 2 +- .../get-internet-message-id-read.yaml | 2 +- .../get-item-class-read.yaml | 2 +- .../90-other-item-apis/get-item-type.yaml | 2 +- .../90-other-item-apis/get-location-read.yaml | 2 +- .../get-normalized-subject-read.yaml | 2 +- .../get-set-end-appointment-organizer.yaml | 4 +- ...et-set-location-appointment-organizer.yaml | 4 +- .../get-set-start-appointment-organizer.yaml | 4 +- .../get-set-subject-compose.yaml | 4 +- .../90-other-item-apis/get-start-read.yaml | 2 +- .../90-other-item-apis/get-subject-read.yaml | 2 +- .../90-other-item-apis/session-data-apis.yaml | 10 +- .../90-other-item-apis/set-selected-data.yaml | 2 +- .../work-with-client-signatures.yaml | 10 +- .../calendar-properties-apis.yaml | 8 +- .../outlook/99-preview-apis/close-async.yaml | 2 +- .../99-preview-apis/get-eml-format.yaml | 2 +- .../set-displayed-body-subject.yaml | 4 +- samples/outlook/default.yaml | 2 +- .../powerpoint/basics/basic-api-call-js.yaml | 2 +- .../powerpoint/basics/basic-api-call-ts.yaml | 2 +- .../basics/basic-common-api-call.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- .../document/create-presentation.yaml | 4 +- samples/powerpoint/images/insert-image.yaml | 2 +- samples/powerpoint/images/insert-svg.yaml | 2 +- .../scenarios/searches-wikipedia-api.yaml | 2 +- samples/powerpoint/shapes/get-set-shapes.yaml | 14 +-- samples/powerpoint/shapes/shapes.yaml | 14 +-- .../slide-management/add-slides.yaml | 4 +- .../slide-management/get-set-slides.yaml | 10 +- .../slide-management/get-slide-metadata.yaml | 2 +- .../slide-management/insert-slides.yaml | 6 +- samples/powerpoint/tags/tags.yaml | 12 +- .../powerpoint/text/get-set-textrange.yaml | 10 +- .../project/basics/basic-common-api-call.yaml | 2 +- samples/project/default.yaml | 2 +- samples/web/default.yaml | 2 +- .../word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- .../word/01-basics/basic-common-api-call.yaml | 2 +- .../content-control-onadded-event.yaml | 8 +- .../content-control-ondatachanged-event.yaml | 8 +- .../content-control-ondeleted-event.yaml | 10 +- .../content-control-onentered-event.yaml | 8 +- .../content-control-onexited-event.yaml | 8 +- ...tent-control-onselectionchanged-event.yaml | 8 +- .../insert-and-change-content-controls.yaml | 6 +- .../15-images/insert-and-get-pictures.yaml | 6 +- samples/word/20-lists/insert-list.yaml | 4 +- samples/word/20-lists/organize-list.yaml | 6 +- .../get-paragraph-on-insertion-point.yaml | 6 +- samples/word/25-paragraph/get-text.yaml | 4 +- samples/word/25-paragraph/get-word-count.yaml | 4 +- .../25-paragraph/insert-formatted-text.yaml | 6 +- .../insert-header-and-footer.yaml | 14 +-- .../insert-in-different-locations.yaml | 12 +- .../insert-line-and-page-breaks.yaml | 6 +- samples/word/25-paragraph/onadded-event.yaml | 8 +- .../word/25-paragraph/onchanged-event.yaml | 8 +- .../word/25-paragraph/ondeleted-event.yaml | 8 +- .../25-paragraph/paragraph-properties.yaml | 14 +-- samples/word/25-paragraph/search.yaml | 6 +- .../get-built-in-properties.yaml | 2 +- ...read-write-custom-document-properties.yaml | 6 +- samples/word/35-ranges/compare-location.yaml | 6 +- samples/word/35-ranges/scroll-to-range.yaml | 6 +- .../split-words-of-first-paragraph.yaml | 4 +- samples/word/40-tables/manage-formatting.yaml | 20 ++-- samples/word/40-tables/table-cell-access.yaml | 4 +- .../50-document/insert-external-document.yaml | 6 +- .../50-document/insert-section-breaks.yaml | 10 +- .../word/50-document/manage-annotations.yaml | 16 +-- samples/word/50-document/manage-body.yaml | 32 +++--- .../50-document/manage-change-tracking.yaml | 8 +- samples/word/50-document/manage-comments.yaml | 18 +-- .../manage-custom-xml-part-ns.yaml | 14 +-- .../50-document/manage-custom-xml-part.yaml | 10 +- samples/word/50-document/manage-fields.yaml | 16 +-- .../word/50-document/manage-footnotes.yaml | 20 ++-- samples/word/50-document/manage-settings.yaml | 6 +- .../50-document/manage-tracked-changes.yaml | 16 +-- samples/word/50-document/save-close.yaml | 12 +- samples/word/90-scenarios/doc-assembly.yaml | 10 +- .../90-scenarios/multiple-property-set.yaml | 6 +- .../insert-and-get-pictures.yaml | 6 +- .../99-preview-apis/manage-custom-style.yaml | 24 ++-- samples/word/default.yaml | 2 +- 291 files changed, 1038 insertions(+), 1018 deletions(-) diff --git a/README.md b/README.md index 5722c3af0..644316552 100644 --- a/README.md +++ b/README.md @@ -11,92 +11,92 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr ### One-time tasks 1. [Fork](https://help.github.com/articles/about-forks/) this project into your GitHub account. -2. Clone your fork to your development computer. -3. Ensure that you have Node, version 6.10+, installed. (To check the version run the command `node -v`.) -4. Install `yarn` as a global package `npm install yarn --global`. -5. Be sure your CLI is in the root of the office-js-snippets repo and run `yarn install`. (It is similar to `npm install`.) -6. Set up the original \OfficeDev\office-js-snippets as the upstream repo for your local repo by following the steps in [Configuring a remote for a fork](https://help.github.com/articles/configuring-a-remote-for-a-fork/). -7. If you'll be using Visual Studio Code as your editor, install the [TSLint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) extension for Visual Studio Code. +1. Clone your fork to your development computer. +1. Ensure that you have Node, version 6.10+, installed. (To check the version run the command `node -v`.) +1. Install `yarn` as a global package `npm install yarn --global`. +1. Be sure your CLI is in the root of the office-js-snippets repo and run `yarn install`. (It is similar to `npm install`.) +1. Set up the original \OfficeDev\office-js-snippets as the upstream repo for your local repo by following the steps in [Configuring a remote for a fork](https://help.github.com/articles/configuring-a-remote-for-a-fork/). +1. If you'll be using Visual Studio Code as your editor, install the [TSLint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) extension for Visual Studio Code. ### Adding a new sample > For the git tasks in this procedure, the instructions assume that you're using a CLI. You are welcome to use a GUI git client. Consult the client's help to learn how to carry out the same tasks. 1. Create a snippet using [Script Lab](https://github.com/OfficeDev/script-lab/blob/master/README.md#what-is). Ensure that the name and description are what you want to be shown publicly. Use standard TypeScript indentation. Improper indentation can cause a failure of the build that you run in a later step. See also the [**Style guidelines**](#style-guidelines) section below. -2. Choose the Share icon, and then choose **Copy to Clipboard**. -3. Paste the contents into a text editor. -4. Near the top of the file, you will see the line `api_set: {}`. This needs to be changed to specify the host API version of the most recently added API that is used in your snippet. For example, if the snippet is for Excel and it uses some APIs that were introduced in Excel API 1.3, some in 1.4, and some in 1.5, then you need to specify `ExcelApi 1.5` as the value of the `api_set` property. Put a line break and four spaces before the value and no {} characters. To continue the example, when you're done the property would look like this: +1. Choose the Share icon, and then choose **Copy to Clipboard**. +1. Paste the contents into a text editor. +1. Near the top of the file, you will see the line `api_set: {}`. This needs to be changed to specify the host API version of the most recently added API that is used in your snippet. For example, if the snippet is for Excel and it uses some APIs that were introduced in Excel API 1.3, some in 1.4, and some in 1.5, then you need to specify `ExcelApi 1.5` as the value of the `api_set` property. Put a line break and four spaces before the value and no {} characters. To continue the example, when you're done the property would look like this: ```yaml api_set: ExcelApi: '1.5' ``` -5. Check the name and description property values, also near the top of the file, and edit as needed. -6. Save the file **somewhere outside of the office-js-snippets project**. (You will move it into the project in a later step.) The file name must have a ".yaml" extension and it must be in [`kebab-case`](http://wiki.c2.com/?KebabCase). For examples, see the existing *.yaml files in the subfolders of the `samples` folder of the project. -7. Make sure the main branch of your fork is in sync with the main branch of the upstream \OfficeDev\office-js-snippets repo by following the steps in [Syncing a fork](https://help.github.com/articles/syncing-a-fork/). -8. Create a new branch at the **office-js-snippets** root folder of your local repo by running the command `git checkout -b {name_of_your_new_branch}`. (This will create and checkout the new branch. *Stay in this branch for all the remaining steps.*) Each snippet should have its own branch. Suggestion: use the name of the yaml file that you created above (without the extension) as the branch name. -9. Decide the folder where your snippet should be added. All snippet files must reside within the appropriate subfolder inside the `samples` folder. Within the `samples` folder, the structure of subfolders is as follows: +1. Check the name and description property values, also near the top of the file, and edit as needed. +1. Save the file **somewhere outside of the office-js-snippets project**. (You will move it into the project in a later step.) The file name must have a ".yaml" extension and it must be in [`kebab-case`](http://wiki.c2.com/?KebabCase). For examples, see the existing *.yaml files in the subfolders of the `samples` folder of the project. +1. Make sure the main branch of your fork is in sync with the main branch of the upstream \OfficeDev\office-js-snippets repo by following the steps in [Syncing a fork](https://help.github.com/articles/syncing-a-fork/). +1. Create a new branch at the **office-js-snippets** root folder of your local repo by running the command `git checkout -b {name_of_your_new_branch}`. (This will create and checkout the new branch. *Stay in this branch for all the remaining steps.*) Each snippet should have its own branch. Suggestion: use the name of the yaml file that you created above (without the extension) as the branch name. +1. Decide the folder where your snippet should be added. All snippet files must reside within the appropriate subfolder inside the `samples` folder. Within the `samples` folder, the structure of subfolders is as follows: - - The base folders such as `excel`, `word`, etc. primarily represent the various host applications. - - Within each base folder, group folders organize snippets into various categories. - - Within each group folder, each .yaml file represents a snippet. + - The base folders such as `excel`, `word`, etc. primarily represent the various host applications. + - Within each base folder, group folders organize snippets into various categories. + - Within each group folder, each .yaml file represents a snippet. - > **Note**: If your snippet doesn't fit with any existing group folder, create a new group folder inside the base folder. If the existing folders in the base folder begin with numbers, such as `03-range`, then your new folder should also begin with a number. Since the numbers determine the sequence of the groups in Script Lab, use a number between the numbers of the groups between which you want the new folder to appear. + > **Note**: If your snippet doesn't fit with any existing group folder, create a new group folder inside the base folder. If the existing folders in the base folder begin with numbers, such as `03-range`, then your new folder should also begin with a number. Since the numbers determine the sequence of the groups in Script Lab, use a number between the numbers of the groups between which you want the new folder to appear. -10. Open one of the `.yaml` files already in the group folder. If it has an `order` property near the top, then the snippets in the group folder are ordered in a particular sequence in Script Lab. Add an `order` property to the top of your `.yaml` file and give it a number that is between the order numbers of the snippets between which you want it to appear. -11. Copy your `.yaml` file to the chosen group folder. -12. Run `yarn start`. If there are no problems, the output will end with a `Done!`. If there are errors, review the output to check what caused the build validation to fail, and fix as needed. See [**Known errors and fixes**](#known-errors-and-fixes-in-the-build-tool) for more information. +1. Open one of the `.yaml` files already in the group folder. If it has an `order` property near the top, then the snippets in the group folder are ordered in a particular sequence in Script Lab. Add an `order` property to the top of your `.yaml` file and give it a number that is between the order numbers of the snippets between which you want it to appear. +1. Copy your `.yaml` file to the chosen group folder. +1. Run `yarn start`. If there are no problems, the output will end with a `Done!`. If there are errors, review the output to check what caused the build validation to fail, and fix as needed. See [**Known errors and fixes**](#known-errors-and-fixes-in-the-build-tool) for more information. - > **Note**: The `yarn start` command adds an `id` property to the top of the file. + > **Note**: The `yarn start` command adds an `id` property to the top of the file. -13. Re-run `yarn start`, and fix errors, until the build succeeds. -14. Run `git status`. You should see that, in addition to your new `.yaml` file (or possibly new folder), a `playlist\{host}.yaml` file (where `{host}` is `excel`, `word`, etc.) has also been changed. This is expected. The build tool you just ran added a reference to your new snippet to this file. -15. Run the following two commands. The commit message should be a brief description of what the snippet demonstrates; for example, `"shows how to use getWhatever method"`. +1. Re-run `yarn start`, and fix errors, until the build succeeds. +1. Run `git status`. You should see that, in addition to your new `.yaml` file (or possibly new folder), a `playlist\{host}.yaml` file (where `{host}` is `excel`, `word`, etc.) has also been changed. This is expected. The build tool you just ran added a reference to your new snippet to this file. +1. Run the following two commands. The commit message should be a brief description of what the snippet demonstrates; for example, `"shows how to use getWhatever method"`. ``` git add -A git commit -m "{commit message}" ``` -16. Push the snippet to your fork by running: +1. Push the snippet to your fork by running: ``` git push --set-upstream origin {name_of_your_new_branch} ``` -17. You now create a [pull request](https://help.github.com/articles/about-pull-requests/). In your fork on GitHub, *switch to your new branch*. -18. Choose **New pull request**. -19. On the **Open a pull request** page, verify that: +1. You now create a [pull request](https://help.github.com/articles/about-pull-requests/). In your fork on GitHub, *switch to your new branch*. +1. Choose **New pull request**. +1. On the **Open a pull request** page, verify that: - - the base fork is `OfficeDev/office-js-snippets` - - the base branch is `main` - - the head fork is `{your-GitHub-account}/office-js-snippets` - - the "compare" branch is `{name_of_your_new_branch}`. + - the base fork is `OfficeDev/office-js-snippets` + - the base branch is `main` + - the head fork is `{your-GitHub-account}/office-js-snippets` + - the "compare" branch is `{name_of_your_new_branch}`. -20. The title of the pull request defaults to your commit message. Change it as needed and optionally add a comment to provide additional information about the pull request to the reviewers. -21. All pull requests to office-js-snippets must be approved by at least one reviewer. On the right side of the page is a **Reviewers** section. You can optionally suggest one or more people to review the pull request. (GitHub sometimes lists one or more admins of the repo by default, but it is not consistent in doing this.) Your pull request will be reviewed even if you don't suggest anyone. -22. Choose **Create pull request**. The page for your pull request will open. There will initially be a message on the page saying **Some checks haven’t completed yet**. An online version of the same build tool that you ran locally is testing the files again. It usually takes a few minutes. +1. The title of the pull request defaults to your commit message. Change it as needed and optionally add a comment to provide additional information about the pull request to the reviewers. +1. All pull requests to office-js-snippets must be approved by at least one reviewer. On the right side of the page is a **Reviewers** section. You can optionally suggest one or more people to review the pull request. (GitHub sometimes lists one or more admins of the repo by default, but it is not consistent in doing this.) Your pull request will be reviewed even if you don't suggest anyone. +1. Choose **Create pull request**. The page for your pull request will open. There will initially be a message on the page saying **Some checks haven’t completed yet**. An online version of the same build tool that you ran locally is testing the files again. It usually takes a few minutes. - > **Note**: Since your pull request passed locally, it should pass the online test too. Once in a while, the online test fails when the local test passed. This is usually a bug in the online test service. If this happens, cancel the pull request, wait a few hours, and then repeat the steps for creating a pull request. + > **Note**: Since your pull request passed locally, it should pass the online test too. Once in a while, the online test fails when the local test passed. This is usually a bug in the online test service. If this happens, cancel the pull request, wait a few hours, and then repeat the steps for creating a pull request. -23. The reviewers may make comments on your pull request and ask you to make changes. Make changes in Script Lab and then repeat the process of creating the `.yaml` file. You do not have to create the new branch again, but make sure it is checked out when you copy the changed `.yaml` file over the previous version. After you commit and push the changed version to your fork, the new version is automatically added to your existing pull request. *Do **not** create a new pull request.* -24. When the reviewers are satisfied, your pull request will be merged to the `main` branch and the pull request will be closed. +1. The reviewers may make comments on your pull request and ask you to make changes. Make changes in Script Lab and then repeat the process of creating the `.yaml` file. You do not have to create the new branch again, but make sure it is checked out when you copy the changed `.yaml` file over the previous version. After you commit and push the changed version to your fork, the new version is automatically added to your existing pull request. *Do **not** create a new pull request.* +1. When the reviewers are satisfied, your pull request will be merged to the `main` branch and the pull request will be closed. - > **Note**: In a few days, the repo admins will merge your snippet into the `prod` branch. It will then appear in **Samples** area of Script Lab. (It is in the **My Snippets** area as soon as you create it.) + > **Note**: In a few days, the repo admins will merge your snippet into the `prod` branch. It will then appear in **Samples** area of Script Lab. (It is in the **My Snippets** area as soon as you create it.) -25. Optionally, you can delete the branch you created from your fork and/or your local clone. +1. Optionally, you can delete the branch you created from your fork and/or your local clone. #### Known errors and fixes in the build tool - An error saying that `name` has upper-case letters or other disallowed characters is *not* referring to the `name` property in the file. It is referring to the file name itself. You'll also get this error, if the file extension is not `.yaml`. -## Style guidelines: +## Style guidelines Basic snippet structure is as follows: ```ts -$("#run").click(() => tryCatch(run)); +$("#run").on("click", () => tryCatch(run)); async function run() { await Word.run(async (context) => { @@ -121,23 +121,25 @@ async function tryCatch(callback) { A few style rules to observe: -* Use standard TypeScript indentation. -* For each button, define a corresponding `async` function to be run when the button is clicked. The `async` function can be called "run" if there is only one button on the page -- otherwise, name it as you will. -* Each button-click handler should invoke the `tryCatch` function, passing in the name of the `async` function to be executed when the button is clicked. -* All HTML IDs should be `all-lower-case-and-hyphenated`. -* Unless you are explicitly showing pretty UI, you don't have to do the popup notification except for one or two samples. It's a lot of HTML & JS code, and also not strictly Fabric-y (there is a more "correct" way of doing this with components). -* Strings should be in double-quotes. -* Don't forget the semicolons. -* `Libraries` in snippets must have a specific version. Eg. `jquery@3.1.1`. +- Use standard TypeScript indentation. +- For each button, define a corresponding `async` function to be run when the button is clicked. The `async` function can be called "run" if there is only one button on the page -- otherwise, name it as you will. +- Each button-click handler should invoke the `tryCatch` function, passing in the name of the `async` function to be executed when the button is clicked. +- All HTML IDs should be `all-lower-case-and-hyphenated`. +- Unless you are explicitly showing pretty UI, you don't have to do the popup notification except for one or two samples. It's a lot of HTML & JS code, and also not strictly Fabric-y (there is a more "correct" way of doing this with components). +- Strings should be in double-quotes. +- Don't forget the semicolons. +- `Libraries` in snippets must have a specific version. Eg. `jquery@3.1.1`. ## Debugging the build script -* The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. +- The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. > **Note**: If debugging in Visual Studio Code, you can use "F5" to attach the debugger, but be sure to run `npm run tsc` before you do (and after any code change!). `F5` is not set to recompile! ## Join the Microsoft 365 Developer Program + Get a free sandbox, tools, and other resources you need to build solutions for the Microsoft 365 platform. + - [Free developer sandbox](https://developer.microsoft.com/microsoft-365/dev-program#Subscription) Get a free, renewable 90-day Microsoft 365 E5 developer subscription. - [Sample data packs](https://developer.microsoft.com/microsoft-365/dev-program#Sample) Automatically configure your sandbox by installing user data and content to help you build your solutions. - [Access to experts](https://developer.microsoft.com/microsoft-365/dev-program#Experts) Access community events to learn from Microsoft 365 experts. diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 5c0ab8e2f..6f5ee59aa 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: 1.1 script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#set-title").click(() => tryCatch(setTitle)); - $("#get-title").click(() => tryCatch(getTitle)); + $("#set-title").on("click", () => tryCatch(setTitle)); + $("#get-title").on("click", () => tryCatch(getTitle)); async function setTitle() { await Excel.run(async (ctx) => { diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index 949160c1a..ec5b4e034 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -8,7 +8,7 @@ api_set: ExcelApi: '1.1' script: content: | - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); function run() { return Excel.run(function (context) { diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index ff3e77392..265bd5db5 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -8,7 +8,7 @@ api_set: ExcelApi: '1.1' script: content: | - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 4299dd3a7..697ddf49b 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -8,7 +8,7 @@ api_set: Selection: 1.1 script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.document.getSelectedDataAsync( diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index 36cadc25a..dd28749c3 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.8' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#format-horizontal-axis").click(() => tryCatch(formatHorizontalAxis)); - $("#format-vertical-axis").click(() => tryCatch(formatVerticalAxis)); + $("#setup").on("click", () => tryCatch(setup)); + $("#format-horizontal-axis").on("click", () => tryCatch(formatHorizontalAxis)); + $("#format-vertical-axis").on("click", () => tryCatch(formatVerticalAxis)); async function formatHorizontalAxis() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index f37d4ee45..e26227d29 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.7' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#get-axis-unit").click(() => tryCatch(getAxisUnit)); - $("#change-axis-unit").click(() => tryCatch(changeAxisUnit)); - $("#remove-axis-label").click(() => tryCatch(removeAxisLabel)); - $("#show-axis-label").click(() => tryCatch(showAxisLabel)); - $("#set-axis-title").click(() => tryCatch(setAxisTitle)); + $("#setup").on("click", () => tryCatch(setup)); + $("#get-axis-unit").on("click", () => tryCatch(getAxisUnit)); + $("#change-axis-unit").on("click", () => tryCatch(changeAxisUnit)); + $("#remove-axis-label").on("click", () => tryCatch(removeAxisLabel)); + $("#show-axis-label").on("click", () => tryCatch(showAxisLabel)); + $("#set-axis-title").on("click", () => tryCatch(setAxisTitle)); async function getAxisUnit() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index 108325244..63dfc66aa 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -8,7 +8,9 @@ api_set: ExcelApi: '1.12' script: content: | - $("#setup").click(() => tryCatch(setup)); $("#create-bubble-chart").click(() => tryCatch(createBubbleChart)); $("#get-chart-series-dimension-values").click(() => tryCatch(getChartSeriesDimensionValues)); + $("#setup").on("click", () => tryCatch(setup)); + $("#create-bubble-chart").on("click", () => tryCatch(createBubbleChart)); + $("#get-chart-series-dimension-values").on("click", () => tryCatch(getChartSeriesDimensionValues)); async function createBubbleChart() { await Excel.run(async (context) => { /* diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index 53ffff914..dced518cd 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -8,16 +8,16 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-column-clustered-chart").click(() => tryCatch(createColumnClusteredChart)); - $("#create-line-chart").click(() => tryCatch(createLineChart)); - $("#create-xy-scatter-chart").click(() => tryCatch(createXYScatterChart)); - $("#create-area-chart").click(() => tryCatch(createAreaStackedChart)); - $("#create-radar-chart").click(() => tryCatch(createRadarFilledChart)); - $("#create-pie-chart").click(() => tryCatch(createPieChart)); - $("#create-3d-chart").click(() => tryCatch(create3DChart)); - $("#create-cylinder-chart").click(() => tryCatch(createCylinderChart)); - $("#create-bar-100-chart").click(() => tryCatch(createBar100Chart)); + $("#setup").on("click", () => tryCatch(setup)); + $("#create-column-clustered-chart").on("click", () => tryCatch(createColumnClusteredChart)); + $("#create-line-chart").on("click", () => tryCatch(createLineChart)); + $("#create-xy-scatter-chart").on("click", () => tryCatch(createXYScatterChart)); + $("#create-area-chart").on("click", () => tryCatch(createAreaStackedChart)); + $("#create-radar-chart").on("click", () => tryCatch(createRadarFilledChart)); + $("#create-pie-chart").on("click", () => tryCatch(createPieChart)); + $("#create-3d-chart").on("click", () => tryCatch(create3DChart)); + $("#create-cylinder-chart").on("click", () => tryCatch(createCylinderChart)); + $("#create-bar-100-chart").on("click", () => tryCatch(createBar100Chart)); async function createColumnClusteredChart() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index cb0b65ca1..b05f7ee43 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.15' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#log-chart-series-source").click(() => tryCatch(logChartSeriesSource)); + $("#setup").on("click", () => tryCatch(setup)); + $("#log-chart-series-source").on("click", () => tryCatch(logChartSeriesSource)); async function logChartSeriesSource() { // This function retrieves the data source information of a chart series in the Sample worksheet. diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml index 9d0c5b04d..b285890c0 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.14' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-column-clustered-chart").click(() => tryCatch(createColumnClusteredChart)); - $("#add-chart-data-table").click(() => tryCatch(addChartDataTable)); - $("#format-chart-data-table").click(() => tryCatch(formatChartDataTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#create-column-clustered-chart").on("click", () => tryCatch(createColumnClusteredChart)); + $("#add-chart-data-table").on("click", () => tryCatch(addChartDataTable)); + $("#format-chart-data-table").on("click", () => tryCatch(formatChartDataTable)); async function createColumnClusteredChart() { // This function creates a clustered column chart based on data from a table on diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 319878a32..66186bd9e 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.8' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#format-chart").click(() => tryCatch(formatChart)); - $("#show-datalabels").click(() => tryCatch(dataLabels)); - $("#change-color").click(() => tryCatch(changeColor)); - $("#clear").click(() => tryCatch(clearChart)); + $("#setup").on("click", () => tryCatch(setup)); + $("#format-chart").on("click", () => tryCatch(formatChart)); + $("#show-datalabels").on("click", () => tryCatch(dataLabels)); + $("#change-color").on("click", () => tryCatch(changeColor)); + $("#clear").on("click", () => tryCatch(clearChart)); async function formatChart() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index 9275934e9..ba78cac50 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#format-legend-font").click(() => tryCatch(formatLegendFont)); + $("#setup").on("click", () => tryCatch(setup)); + $("#format-legend-font").on("click", () => tryCatch(formatLegendFont)); async function formatLegendFont() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index 582fecda5..029d78772 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.7' script: content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#set-chart-point-color").click(() => tryCatch(setChartPointColor)); + $("#setup").on("click", () => tryCatch(setup)); + $("#set-chart-point-color").on("click", () => tryCatch(setChartPointColor)); async function setChartPointColor() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 307aa18c0..568fa8852 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#set-markers").click(() => tryCatch(setMarkers)); + $("#setup").on("click", () => tryCatch(setup)); + $("#set-markers").on("click", () => tryCatch(setMarkers)); async function setMarkers() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 2d1db67a8..89ee09f5c 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#order-series-plot").click(() => tryCatch(addSeries)); + $("#setup").on("click", () => tryCatch(setup)); + $("#order-series-plot").on("click", () => tryCatch(addSeries)); async function addSeries() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index a7c73fe60..df24c69bb 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-series").click(() => tryCatch(addSeries)); - $("#delete-series").click(() => tryCatch(deleteSeries)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-series").on("click", () => tryCatch(addSeries)); + $("#delete-series").on("click", () => tryCatch(deleteSeries)); async function addSeries() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 85d6674c3..a0419af38 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#change-title-format").click(() => tryCatch(changeTitleFormat)); - $("#change-title-substring").click(() => tryCatch(changeTitleSubstring)); - $("#change-title-orientation").click(() => tryCatch(changeTitleOrientation)); - $("#add-title-shadow").click(() => tryCatch(addTitleShadow)); + $("#setup").on("click", () => tryCatch(setup)); + $("#change-title-format").on("click", () => tryCatch(changeTitleFormat)); + $("#change-title-substring").on("click", () => tryCatch(changeTitleSubstring)); + $("#change-title-orientation").on("click", () => tryCatch(changeTitleOrientation)); + $("#add-title-shadow").on("click", () => tryCatch(addTitleShadow)); async function changeTitleFormat() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 4772af54c..de2aeb909 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.7' script: content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#add-trendline").click(() => tryCatch(addTrendline)); - $("#get-trendline").click(() => tryCatch(getTrendline)); - $("#get-trendline-color").click(() => tryCatch(getTrendlineColor)); - $("#set-trendline-color").click(() => tryCatch(setTrendlineColor)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-trendline").on("click", () => tryCatch(addTrendline)); + $("#get-trendline").on("click", () => tryCatch(getTrendline)); + $("#get-trendline-color").on("click", () => tryCatch(getTrendlineColor)); + $("#set-trendline-color").on("click", () => tryCatch(setTrendlineColor)); async function addTrendline() { await Excel.run(async (context) => { diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index c618f49fb..b0d0c83dd 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-doughnut-chart").click(() => tryCatch(createChart)); - $("#add-series").click(() => tryCatch(addSeries)); + $("#setup").on("click", () => tryCatch(setup)); + $("#create-doughnut-chart").on("click", () => tryCatch(createChart)); + $("#add-series").on("click", () => tryCatch(addSeries)); async function createChart() { Excel.run(async (context) => { diff --git a/samples/excel/12-comment/comment-basics.yaml b/samples/excel/12-comment/comment-basics.yaml index 282e4627c..7f410f63f 100644 --- a/samples/excel/12-comment/comment-basics.yaml +++ b/samples/excel/12-comment/comment-basics.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-comment-to-selected-cell").click(() => tryCatch(addCommentToSelectedCell)); - $("#add-comment-to-cell").click(() => tryCatch(addCommentToCell)); - $("#get-comment-metadata").click(() => tryCatch(getCommentMetadata)); - $("#edit-comment").click(() => tryCatch(editComment)); - $("#delete-comment").click(() => tryCatch(deleteComment)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-comment-to-selected-cell").on("click", () => tryCatch(addCommentToSelectedCell)); + $("#add-comment-to-cell").on("click", () => tryCatch(addCommentToCell)); + $("#get-comment-metadata").on("click", () => tryCatch(getCommentMetadata)); + $("#edit-comment").on("click", () => tryCatch(editComment)); + $("#delete-comment").on("click", () => tryCatch(deleteComment)); async function addCommentToSelectedCell() { await Excel.run(async (context) => { diff --git a/samples/excel/12-comment/comment-mentions.yaml b/samples/excel/12-comment/comment-mentions.yaml index 22b67a2ee..db5f7a91e 100644 --- a/samples/excel/12-comment/comment-mentions.yaml +++ b/samples/excel/12-comment/comment-mentions.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.11' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-comment-with-mention").click(() => tryCatch(addCommentWithMention)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-comment-with-mention").on("click", () => tryCatch(addCommentWithMention)); async function addCommentWithMention() { await Excel.run(async (context) => { diff --git a/samples/excel/12-comment/comment-replies.yaml b/samples/excel/12-comment/comment-replies.yaml index acade0f0a..a586ca33a 100644 --- a/samples/excel/12-comment/comment-replies.yaml +++ b/samples/excel/12-comment/comment-replies.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-first-comment-reply").click(() => tryCatch(addFirstCommentReply)); - $("#add-second-comment-reply").click(() => tryCatch(addSecondCommentReply)); - $("#get-comment-reply-metadata").click(() => tryCatch(getCommentReplyMetadata)); - $("#edit-comment-reply").click(() => tryCatch(editCommentReply)); - $("#delete-comment-reply").click(() => tryCatch(deleteCommentReply)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-first-comment-reply").on("click", () => tryCatch(addFirstCommentReply)); + $("#add-second-comment-reply").on("click", () => tryCatch(addSecondCommentReply)); + $("#get-comment-reply-metadata").on("click", () => tryCatch(getCommentReplyMetadata)); + $("#edit-comment-reply").on("click", () => tryCatch(editCommentReply)); + $("#delete-comment-reply").on("click", () => tryCatch(deleteCommentReply)); async function addFirstCommentReply() { await Excel.run(async (context) => { diff --git a/samples/excel/12-comment/comment-resolution.yaml b/samples/excel/12-comment/comment-resolution.yaml index b2e4e9511..6451e2ce1 100644 --- a/samples/excel/12-comment/comment-resolution.yaml +++ b/samples/excel/12-comment/comment-resolution.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-comment").click(() => tryCatch(addComment)); - $("#resolve-comment").click(() => tryCatch(resolveComment)); - $("#reopen-comment").click(() => tryCatch(reopenComment)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-comment").on("click", () => tryCatch(addComment)); + $("#resolve-comment").on("click", () => tryCatch(resolveComment)); + $("#reopen-comment").on("click", () => tryCatch(reopenComment)); async function addComment() { await Excel.run(async (context) => { diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 07bcbf4c2..e5ae71812 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.6' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#apply-conditional-formats-default-priority").click(() => tryCatch(applyConditionalFormatsWithDefaultPriority)); - $("#apply-conditional-formats-explicit-priority").click(() => tryCatch(applyPrioritizedConditionalFormats)); - $("#apply-conditional-formats-stop-if-true").click(() => tryCatch(applyPrioritizedConditionalFormatsWithStopOnTrue)); - $("#remove-conditional-format").click(() => tryCatch(removeConditionalFormat)); + $("#setup").on("click", () => tryCatch(setup)); + $("#apply-conditional-formats-default-priority").on("click", () => tryCatch(applyConditionalFormatsWithDefaultPriority)); + $("#apply-conditional-formats-explicit-priority").on("click", () => tryCatch(applyPrioritizedConditionalFormats)); + $("#apply-conditional-formats-stop-if-true").on("click", () => tryCatch(applyPrioritizedConditionalFormatsWithStopOnTrue)); + $("#remove-conditional-format").on("click", () => tryCatch(removeConditionalFormat)); async function applyConditionalFormatsWithDefaultPriority() { diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index fbbaf5dff..828fb69be 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -7,17 +7,17 @@ api_set: ExcelApi: '1.6' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#apply-color-scale-format").click(() => tryCatch(applyColorScaleFormat)); - $("#apply-preset-format").click(() => tryCatch(applyPresetFormat)); - $("#apply-databar-format").click(() => tryCatch(applyDataBarFormat)); - $("#apply-icon-set-format").click(() => tryCatch(applyIconSetFormat)); - $("#apply-text-format").click(() => tryCatch(applyTextFormat)); - $("#apply-cell-value-format").click(() => tryCatch(applyCellValueFormat)); - $("#apply-top-bottom-format").click(() => tryCatch(applyTopBottomFormat)); - $("#apply-custom-format").click(() => tryCatch(applyCustomFormat)); - $("#list-conditional-formats").click(() => tryCatch(listConditionalFormats)); - $("#clear-all-conditional-formats").click(() => tryCatch(clearAllConditionalFormats)); + $("#setup").on("click", () => tryCatch(setup)); + $("#apply-color-scale-format").on("click", () => tryCatch(applyColorScaleFormat)); + $("#apply-preset-format").on("click", () => tryCatch(applyPresetFormat)); + $("#apply-databar-format").on("click", () => tryCatch(applyDataBarFormat)); + $("#apply-icon-set-format").on("click", () => tryCatch(applyIconSetFormat)); + $("#apply-text-format").on("click", () => tryCatch(applyTextFormat)); + $("#apply-cell-value-format").on("click", () => tryCatch(applyCellValueFormat)); + $("#apply-top-bottom-format").on("click", () => tryCatch(applyTopBottomFormat)); + $("#apply-custom-format").on("click", () => tryCatch(applyCustomFormat)); + $("#list-conditional-formats").on("click", () => tryCatch(listConditionalFormats)); + $("#clear-all-conditional-formats").on("click", () => tryCatch(clearAllConditionalFormats)); async function applyColorScaleFormat() { await Excel.run(async (context) => { diff --git a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index 906c96685..e5cfb900b 100644 --- a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.5' script: content: | - $("#create-custom-xml-part").click(() => tryCatch(createCustomXmlPart)); - $("#change-custom-xml-part").click(() => tryCatch(changeCustomXmlPart)); - $("#delete-custom-xml-part").click(() => tryCatch(deleteCustomXmlPart)); + $("#create-custom-xml-part").on("click", () => tryCatch(createCustomXmlPart)); + $("#change-custom-xml-part").on("click", () => tryCatch(changeCustomXmlPart)); + $("#delete-custom-xml-part").on("click", () => tryCatch(deleteCustomXmlPart)); async function createCustomXmlPart() { await Excel.run(async (context) => { diff --git a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index c42b996bd..5e7e8b78a 100644 --- a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.5' script: content: | - $("#create-custom-xml-part").click(() => tryCatch(createCustomXmlPart)); - $("#test-for-unique-namespace").click(() => tryCatch(testForUniqueNamespace)); - $("#delete-all-custom-xml-parts").click(() => tryCatch(deleteAllCustomXmlParts)); + $("#create-custom-xml-part").on("click", () => tryCatch(createCustomXmlPart)); + $("#test-for-unique-namespace").on("click", () => tryCatch(testForUniqueNamespace)); + $("#delete-all-custom-xml-parts").on("click", () => tryCatch(deleteAllCustomXmlParts)); async function createCustomXmlPart() { await Excel.run(async (context) => { diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index 953eaee8f..31d8718dd 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.16' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-entities-to-table").click(() => tryCatch(addEntitiesToTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-entities-to-table").on("click", () => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { // This function retrieves data for each of the existing products in the table, diff --git a/samples/excel/20-data-types/data-types-entity-icons.yaml b/samples/excel/20-data-types/data-types-entity-icons.yaml index 335f1e75d..820e8ffaf 100644 --- a/samples/excel/20-data-types/data-types-entity-icons.yaml +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.16' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-icons").click(() => tryCatch(createIcons)); + $("#setup").on("click", () => tryCatch(setup)); + $("#create-icons").on("click", () => tryCatch(createIcons)); // Retrieve the entity card icons enum. const iconNames = Excel.EntityCompactLayoutIcons; diff --git a/samples/excel/20-data-types/data-types-entity-values.yaml b/samples/excel/20-data-types/data-types-entity-values.yaml index 08ea49176..258207fdf 100644 --- a/samples/excel/20-data-types/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.16' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#addEntitiesToTable").click(() => tryCatch(addEntitiesToTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#addEntitiesToTable").on("click", () => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { // This function retrieves data for each of the existing products in the table, diff --git a/samples/excel/20-data-types/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index cc6eb97c8..2ef9f2938 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.16' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#set-busy-error").click(() => tryCatch(setBusyError)); - $("#change-busy-error").click(() => tryCatch(changeBusyError)); + $("#setup").on("click", () => tryCatch(setup)); + $("#set-busy-error").on("click", () => tryCatch(setBusyError)); + $("#change-busy-error").on("click", () => tryCatch(changeBusyError)); async function setBusyError() { // This function sets the value of cell A1 to a #BUSY! error using data types. diff --git a/samples/excel/20-data-types/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml index e534b3226..d6e856783 100644 --- a/samples/excel/20-data-types/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.16' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#set-formatted-number-date").click(() => tryCatch(setFormattedNumberDate)); - $("#set-formatted-number-currency").click(() => tryCatch(setFormattedNumberCurrency)); - $("#get-formatted-number").click(() => tryCatch(getFormattedNumber)); + $("#setup").on("click", () => tryCatch(setup)); + $("#set-formatted-number-date").on("click", () => tryCatch(setFormattedNumberDate)); + $("#set-formatted-number-currency").on("click", () => tryCatch(setFormattedNumberCurrency)); + $("#get-formatted-number").on("click", () => tryCatch(getFormattedNumber)); async function setFormattedNumberDate() { // This function creates a formatted number data type, diff --git a/samples/excel/20-data-types/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml index af9070c87..64704445e 100644 --- a/samples/excel/20-data-types/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.16' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-entities-to-table").click(() => tryCatch(addEntitiesToTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-entities-to-table").on("click", () => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { // This function creates entity values with references to other entity values. diff --git a/samples/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 5cdf97001..8ec69c613 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.16' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#insert-image").click(() => tryCatch(insertImage)); - $("#retrieve-image-info").click(() => tryCatch(retrieveImageInfo)); - $("#open-image").click(() => tryCatch(openImage)); - $("#clear-form").click(() => tryCatch(clearForm)); + $("#setup").on("click", () => tryCatch(setup)); + $("#insert-image").on("click", () => tryCatch(insertImage)); + $("#retrieve-image-info").on("click", () => tryCatch(retrieveImageInfo)); + $("#open-image").on("click", () => tryCatch(openImage)); + $("#clear-form").on("click", () => tryCatch(clearForm)); async function insertImage() { // This function inserts a web image into the currently selected cell. diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index cabcc1092..31f8ced2d 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.8' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#positive-number").click(() => tryCatch(addPositiveNumberRequirement)); - $("#require-approved-location").click(() => tryCatch(requireApprovedName)); - $("#comment-redundancy").click(() => tryCatch(warnAboutCommentRedundancy)); + $("#setup").on("click", () => tryCatch(setup)); + $("#positive-number").on("click", () => tryCatch(addPositiveNumberRequirement)); + $("#require-approved-location").on("click", () => tryCatch(requireApprovedName)); + $("#comment-redundancy").on("click", () => tryCatch(warnAboutCommentRedundancy)); async function addPositiveNumberRequirement() { await Excel.run(async (context) => { diff --git a/samples/excel/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index a18cec122..e68c75efd 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -7,7 +7,10 @@ api_set: ExcelAPI: '1.12' script: content: | - $("#set-custom-doc-property").click(() => tryCatch(setCustomDocProperty)); $("#get-custom-doc-properties").click(() => tryCatch(getCustomDocProperties)); $("#set-custom-worksheet-property").click(() => tryCatch(setCustomWorksheetProperty)); $("#get-custom-worksheet-properties").click(() => tryCatch(getCustomWorksheetProperties)); + $("#set-custom-doc-property").on("click", () => tryCatch(setCustomDocProperty)); + $("#get-custom-doc-properties").on("click", () => tryCatch(getCustomDocProperties)); + $("#set-custom-worksheet-property").on("click", () => tryCatch(setCustomWorksheetProperty)); + $("#get-custom-worksheet-properties").on("click", () => tryCatch(getCustomWorksheetProperties)); /* To learn how to view document properties in the UI, * see https://support.office.com/article/View-or-change-the-properties-for-an-Office-file-21D604C2-481E-4379-8E54-1DD4622C6B75 diff --git a/samples/excel/26-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml index 514a925c5..41d8100ba 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.4' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#get-file").click(() => tryCatch(getCurrentFile)); - $("#new-workbook-from-file").click(() => tryCatch(newWorkbookFromFile)); + $("#setup").on("click", () => tryCatch(setup)); + $("#get-file").on("click", () => tryCatch(getCurrentFile)); + $("#new-workbook-from-file").on("click", () => tryCatch(newWorkbookFromFile)); function getCurrentFile() { const sliceSize = 4096; /*Bytes*/ diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 3e34550fb..38de1c35c 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.7' script: content: | - $("#set-doc-properties").click(() => tryCatch(setDocProperties)); - $("#get-doc-properties").click(() => tryCatch(getDocProperties)); - $("#set-custom-doc-properties").click(() => tryCatch(setCustomDocProperties)); - $("#get-custom-doc-properties").click(() => tryCatch(getCustomDocProperties)); - $("#get-count-custom-doc-properties").click(() => tryCatch(getCountCustomDocProperties)); + $("#set-doc-properties").on("click", () => tryCatch(setDocProperties)); + $("#get-doc-properties").on("click", () => tryCatch(getDocProperties)); + $("#set-custom-doc-properties").on("click", () => tryCatch(setCustomDocProperties)); + $("#get-custom-doc-properties").on("click", () => tryCatch(getCustomDocProperties)); + $("#get-count-custom-doc-properties").on("click", () => tryCatch(getCountCustomDocProperties)); async function setDocProperties() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index b85591d2d..bcecb8ad8 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#register-handler").click(() => tryCatch(registerChangeEventHandler)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-handler").on("click", () => tryCatch(registerChangeEventHandler)); async function registerChangeEventHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index f70d88e7a..4f78dd6ca 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#register-data-changed-handler").click(() => tryCatch(registerDataChangedHandler)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-data-changed-handler").on("click", () => tryCatch(registerDataChangedHandler)); async function registerDataChangedHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/event-column-and-row-sort.yaml b/samples/excel/30-events/event-column-and-row-sort.yaml index bc2f39981..3c0178886 100644 --- a/samples/excel/30-events/event-column-and-row-sort.yaml +++ b/samples/excel/30-events/event-column-and-row-sort.yaml @@ -7,7 +7,14 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup").click(() => tryCatch(setup)); $("#register-sort-handlers").click(() => tryCatch(registerSortHandlers)); $("#register-row-sort-handler").click(() => tryCatch(registerRowSortHandler)); $("#register-column-sort-handler").click(() => tryCatch(registerColumnSortHandler)); $("#sort-q1").click(() => tryCatch(sortTopToBottom, "Q1")); $("#sort-q3").click(() => tryCatch(sortTopToBottom, "Q3")); $("#sort-apples").click(() => tryCatch(sortLeftToRight, "Apples")); $("#sort-quinces").click(() => tryCatch(sortLeftToRight, "Quinces")); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-sort-handlers").on("click", () => tryCatch(registerSortHandlers)); + $("#register-row-sort-handler").on("click", () => tryCatch(registerRowSortHandler)); + $("#register-column-sort-handler").on("click", () => tryCatch(registerColumnSortHandler)); + $("#sort-q1").on("click", () => tryCatch(sortTopToBottom, "Q1")); + $("#sort-q3").on("click", () => tryCatch(sortTopToBottom, "Q3")); + $("#sort-apples").on("click", () => tryCatch(sortLeftToRight, "Apples")); + $("#sort-quinces").on("click", () => tryCatch(sortLeftToRight, "Quinces")); async function registerSortHandlers() { registerRowSortHandler(); registerColumnSortHandler(); diff --git a/samples/excel/30-events/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml index 6e13acac6..a76587f7c 100644 --- a/samples/excel/30-events/event-worksheet-single-click.yaml +++ b/samples/excel/30-events/event-worksheet-single-click.yaml @@ -7,7 +7,7 @@ api_set: ExcelApi: '1.10' script: content: |- - $("#register-click-handler").click(() => tryCatch(registerClickHandler)); + $("#register-click-handler").on("click", () => tryCatch(registerClickHandler)); async function registerClickHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 3bd976194..121812db5 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.8' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#register-onactivated-deactivated-handlers").click(() => tryCatch(registerActivationHandlers)); - $("#create-pie-chart").click(() => tryCatch(createPieChart)); - $("#create-cylinder-chart").click(() => tryCatch(createCylinderChart)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-onactivated-deactivated-handlers").on("click", () => tryCatch(registerActivationHandlers)); + $("#create-pie-chart").on("click", () => tryCatch(createPieChart)); + $("#create-cylinder-chart").on("click", () => tryCatch(createCylinderChart)); async function registerActivationHandlers() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index f96ad0f9f..c196af2ee 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.8' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#register-chartcollection-handlers").click(() => tryCatch(registerChartCollectionHandlers)); - $("#add-chart").click(() => tryCatch(createPieChart)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-chartcollection-handlers").on("click", () => tryCatch(registerChartCollectionHandlers)); + $("#add-chart").on("click", () => tryCatch(createPieChart)); async function registerChartCollectionHandlers() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 76f7a5223..b9f7cf39b 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -7,11 +7,11 @@ api_set: ExcelAPI: '1.12' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); - $("#add-comment").click(() => tryCatch(addComment)); - $("#edit-comment").click(() => tryCatch(editComment)); - $("#delete-comment").click(() => tryCatch(deleteComment)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#add-comment").on("click", () => tryCatch(addComment)); + $("#edit-comment").on("click", () => tryCatch(editComment)); + $("#delete-comment").on("click", () => tryCatch(deleteComment)); async function registerEventHandlers() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index b97d09ca1..e2b7e6426 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.8' script: content: | - $("#toggleEvents").click(() => tryCatch(toggleEvents)); - $("#setup").click(() => tryCatch(setup)); - $("#refreshData").click(() => tryCatch(addOrRefreshData)); - $("#registerSumChangedHandlers").click(() => tryCatch(registerSumChangedHandlers)); + $("#toggleEvents").on("click", () => tryCatch(toggleEvents)); + $("#setup").on("click", () => tryCatch(setup)); + $("#refreshData").on("click", () => tryCatch(addOrRefreshData)); + $("#registerSumChangedHandlers").on("click", () => tryCatch(registerSumChangedHandlers)); async function toggleEvents() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index b9bcd3c85..808fadaad 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -7,9 +7,9 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#register-formula-change-handler").click(() => tryCatch(registerFormulaChangeHandler)); - $("#trigger-formula-change").click(() => tryCatch(triggerFormulaChange)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-formula-change-handler").on("click", () => tryCatch(registerFormulaChangeHandler)); + $("#trigger-formula-change").on("click", () => tryCatch(triggerFormulaChange)); async function registerFormulaChangeHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index c7d4caf33..3ca683a1a 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.7' script: content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#register-on-changed-handler").click(() => tryCatch(registerOnChangedHandler)); - $("#change-data").click(() => tryCatch(changeData)); - $("#register-on-selection-changed-handler").click(() => tryCatch(registerOnSelectionChangedHandler)); - $("#change-selection").click(() => tryCatch(changeSelection)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-on-changed-handler").on("click", () => tryCatch(registerOnChangedHandler)); + $("#change-data").on("click", () => tryCatch(changeData)); + $("#register-on-selection-changed-handler").on("click", () => tryCatch(registerOnSelectionChangedHandler)); + $("#change-selection").on("click", () => tryCatch(changeSelection)); async function registerOnChangedHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index e0662c26e..aafd712ae 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.7' script: content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#register-on-changed-handler").click(() => tryCatch(registerOnChangedHandler)); - $("#change-data").click(() => tryCatch(changeData)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-on-changed-handler").on("click", () => tryCatch(registerOnChangedHandler)); + $("#change-data").on("click", () => tryCatch(changeData)); async function registerOnChangedHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml index 94979e2c8..8d78023da 100644 --- a/samples/excel/30-events/events-workbook-activated.yaml +++ b/samples/excel/30-events/events-workbook-activated.yaml @@ -7,7 +7,7 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#register-event-handler").click(() => tryCatch(registerEventHandler)); + $("#register-event-handler").on("click", () => tryCatch(registerEventHandler)); async function workbookActivated(event: Excel.WorkbookActivatedEventArgs) { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml index 1e2661035..eeab333c5 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8,16 +8,16 @@ api_set: ExcelApi: '1.7' script: content: |- - $("#register-on-add-handler").click(() => tryCatch(registerOnAddHandler)); - $("#add-worksheet").click(() => tryCatch(addWorksheet)); + $("#register-on-add-handler").on("click", () => tryCatch(registerOnAddHandler)); + $("#add-worksheet").on("click", () => tryCatch(addWorksheet)); - $("#register-on-activate-handler").click(() => tryCatch(registerOnActivateHandler)); - $("#register-on-deactivate-handler").click(() => tryCatch(registerOnDeactivateHandler)); - $("#delete-worksheet").click(() => tryCatch(deleteWorksheet)); + $("#register-on-activate-handler").on("click", () => tryCatch(registerOnActivateHandler)); + $("#register-on-deactivate-handler").on("click", () => tryCatch(registerOnDeactivateHandler)); + $("#delete-worksheet").on("click", () => tryCatch(deleteWorksheet)); - $("#create-setting").click(() => tryCatch(createSetting)); - $("#change-setting").click(() => tryCatch(changeSetting)); - $("#register-settings-changed-handler").click(() => tryCatch(registerSettingsChangedHandler)); + $("#create-setting").on("click", () => tryCatch(createSetting)); + $("#change-setting").on("click", () => tryCatch(changeSetting)); + $("#register-settings-changed-handler").on("click", () => tryCatch(registerSettingsChangedHandler)); async function registerOnAddHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index 509e0a554..7874fdca1 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -7,8 +7,8 @@ api_set: ExcelAPI: '1.14' script: content: | - $("#register-event").click(() => tryCatch(registerEvent)); - $("#change-protection").click(() => tryCatch(changeProtection)); + $("#register-event").on("click", () => tryCatch(registerEvent)); + $("#change-protection").on("click", () => tryCatch(changeProtection)); async function registerEvent() { // This function registers an event handler for the onProtectionChanged event of a worksheet. diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 682015fe7..d5be6133c 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -8,16 +8,16 @@ api_set: ExcelApi: '1.7' script: content: |- - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#register-on-selection-changed-handler").click(() => tryCatch(registerSelectionChangedHandler)); - $("#select-range").click(() => tryCatch(selectRange)); + $("#register-on-selection-changed-handler").on("click", () => tryCatch(registerSelectionChangedHandler)); + $("#select-range").on("click", () => tryCatch(selectRange)); - $("#register-on-changed-handler").click(() => tryCatch(registerOnChangedHandler)); - $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); - $("#recalculate").click(() => tryCatch(recalculate)); + $("#register-on-changed-handler").on("click", () => tryCatch(registerOnChangedHandler)); + $("#register-onCalculated-handler").on("click", () => tryCatch(registerOnCalculatedHandler)); + $("#recalculate").on("click", () => tryCatch(recalculate)); - $("#delete-data").click(() => tryCatch(deleteData)); + $("#delete-data").on("click", () => tryCatch(deleteData)); async function registerSelectionChangedHandler() { await Excel.run(async (context) => { diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index 285379ebd..e18f1ca89 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); async function registerEventHandlers() { await Excel.run(async (context) => { diff --git a/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index c152eb15d..05cebaca1 100644 --- a/samples/excel/34-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -7,13 +7,13 @@ api_set: ExcelApi: '1.4' script: content: |- - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#add-name-to-total").click(() => tryCatch(addNameToTotal)); - $("#add-name-to-header").click(() => tryCatch(addNameToHeader)); - $("#format-named-range").click(() => tryCatch(formatRangeByName)); - $("#remove-name").click(() => tryCatch(removeName)); - $("#list-named-items").click(() => tryCatch(listNamedItems)); + $("#add-name-to-total").on("click", () => tryCatch(addNameToTotal)); + $("#add-name-to-header").on("click", () => tryCatch(addNameToHeader)); + $("#format-named-range").on("click", () => tryCatch(formatRangeByName)); + $("#remove-name").on("click", () => tryCatch(removeName)); + $("#list-named-items").on("click", () => tryCatch(listNamedItems)); async function addNameToTotal() { await Excel.run(async (context) => { diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 1cee72d6f..dd98f6495 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.7' script: content: |- - $("#add-named-item").click(() => tryCatch(addNamedItem)); - $("#update-named-item").click(() => tryCatch(updateNamedItem)); - $("#setup").click(() => tryCatch(setup)); + $("#add-named-item").on("click", () => tryCatch(addNamedItem)); + $("#update-named-item").on("click", () => tryCatch(updateNamedItem)); + $("#setup").on("click", () => tryCatch(setup)); async function addNamedItem() { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index ba8886dd7..c5a1d6347 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -8,11 +8,11 @@ api_set: ExcelApi: '1.8' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#deletePivot").click(() => tryCatch(deletePivot)); - $("#showPercentages").click(() => tryCatch(showPercentages)); - $("#showDifferenceFrom").click(() => tryCatch(showDifferenceFrom)); - $("#showSums").click(() => tryCatch(showSums)); + $("#setup").on("click", () => tryCatch(setup)); + $("#deletePivot").on("click", () => tryCatch(deletePivot)); + $("#showPercentages").on("click", () => tryCatch(showPercentages)); + $("#showDifferenceFrom").on("click", () => tryCatch(showDifferenceFrom)); + $("#showSums").on("click", () => tryCatch(showSums)); async function showPercentages() { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 8ad09ddaf..f3794311d 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -8,15 +8,15 @@ api_set: ExcelApi: '1.8' script: content: |- - $("#deletePivot").click(() => tryCatch(deletePivot)); - $("#createWithNames").click(() => tryCatch(createWithNames)); - $("#addRow").click(() => tryCatch(addRow)); - $("#removeRow").click(() => tryCatch(removeRow)); - $("#toggleColumn").click(() => tryCatch(toggleColumn)); - $("#addValues").click(() => tryCatch(addValues)); - $("#changeHierarchyNames").click(() => tryCatch(changeHierarchyNames)); - $("#changeLayout").click(() => tryCatch(changeLayout)); - $("#setup").click(() => tryCatch(setup)); + $("#deletePivot").on("click", () => tryCatch(deletePivot)); + $("#createWithNames").on("click", () => tryCatch(createWithNames)); + $("#addRow").on("click", () => tryCatch(addRow)); + $("#removeRow").on("click", () => tryCatch(removeRow)); + $("#toggleColumn").on("click", () => tryCatch(toggleColumn)); + $("#addValues").on("click", () => tryCatch(addValues)); + $("#changeHierarchyNames").on("click", () => tryCatch(changeHierarchyNames)); + $("#changeLayout").on("click", () => tryCatch(changeLayout)); + $("#setup").on("click", () => tryCatch(setup)); async function createWithNames() { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 9430d6de1..04aa72b80 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -8,15 +8,15 @@ api_set: ExcelApi: '1.8' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#deletePivot").click(() => tryCatch(deletePivot)); - $("#filter").click(() => tryCatch(filter)); - $("#getCrateTotal").click(() => tryCatch(getCrateTotal)); - $("#minFunc").click(() => tryCatch(minFunc)); - $("#maxFunc").click(() => tryCatch(maxFunc)); - $("#countFunc").click(() => tryCatch(countFunc)); - $("#avgFunc").click(() => tryCatch(avgFunc)); - $("#sumFunc").click(() => tryCatch(sumFunc)); + $("#setup").on("click", () => tryCatch(setup)); + $("#deletePivot").on("click", () => tryCatch(deletePivot)); + $("#filter").on("click", () => tryCatch(filter)); + $("#getCrateTotal").on("click", () => tryCatch(getCrateTotal)); + $("#minFunc").on("click", () => tryCatch(minFunc)); + $("#maxFunc").on("click", () => tryCatch(maxFunc)); + $("#countFunc").on("click", () => tryCatch(countFunc)); + $("#avgFunc").on("click", () => tryCatch(avgFunc)); + $("#sumFunc").on("click", () => tryCatch(sumFunc)); async function filter(functionType: Excel.AggregationFunction) { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml index 23ac8032e..8d6d3cdef 100644 --- a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml +++ b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -7,10 +7,10 @@ api_set: ExcelAPI: '1.12' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#get-pivottables-in-workbook").click(() => tryCatch(getPivotTablesInWorkbook)); - $("#get-pivottables-in-worksheet").click(() => tryCatch(getPivotTablesInWorksheet)); - $("#get-pivottables-in-selected-range").click(() => tryCatch(getPivotTablesInSelectedRange)); + $("#setup").on("click", () => tryCatch(setup)); + $("#get-pivottables-in-workbook").on("click", () => tryCatch(getPivotTablesInWorkbook)); + $("#get-pivottables-in-worksheet").on("click", () => tryCatch(getPivotTablesInWorksheet)); + $("#get-pivottables-in-selected-range").on("click", () => tryCatch(getPivotTablesInSelectedRange)); async function getPivotTablesInWorkbook() { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index d07c74f5e..ed4c13e1a 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -7,14 +7,14 @@ api_set: ExcelAPI: '1.12' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#manual-filter").click(() => tryCatch(manualFilter)); - $("#date-filter").click(() => tryCatch(dateFilter)); - $("#value-filter").click(() => tryCatch(valueFilter)); - $("#label-filter").click(() => tryCatch(labelFilter)); - $("#clear-filters").click(() => tryCatch(clearFilters)); - $("#log-filters").click(() => tryCatch(logFilters)); - $("#get-crate-total").click(() => tryCatch(getCrateTotal)); + $("#setup").on("click", () => tryCatch(setup)); + $("#manual-filter").on("click", () => tryCatch(manualFilter)); + $("#date-filter").on("click", () => tryCatch(dateFilter)); + $("#value-filter").on("click", () => tryCatch(valueFilter)); + $("#label-filter").on("click", () => tryCatch(labelFilter)); + $("#clear-filters").on("click", () => tryCatch(clearFilters)); + $("#log-filters").on("click", () => tryCatch(logFilters)); + $("#get-crate-total").on("click", () => tryCatch(getCrateTotal)); async function manualFilter() { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml index acbd8c3f0..881ec1b1f 100644 --- a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -7,17 +7,17 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#change-layout").click(() => tryCatch(changeLayout)); - $("#add-alt-text").click(() => tryCatch(addAltText)); - $("#add-line-spacing").click(() => tryCatch(addLineSpacing)); - $("#repeat-item-labels").click(() => tryCatch(repeatItemLabels)); - $("#toggle-field-headers").click(() => tryCatch(toggleFieldHeaders)); - $("#toggle-grand-totals").click(() => tryCatch(toggleGrandTotals)); - $("#set-empty-cell-text").click(() => tryCatch(setEmptyCellText)); - $("#toggle-fill-empty-cells").click(() => tryCatch(toggleFillEmptyCells)); - $("#toggle-auto-format").click(() => tryCatch(toggleAutoFormat)); - $("#toggle-preserve-formatting").click(() => tryCatch(togglePreserveFormatting)); + $("#setup").on("click", () => tryCatch(setup)); + $("#change-layout").on("click", () => tryCatch(changeLayout)); + $("#add-alt-text").on("click", () => tryCatch(addAltText)); + $("#add-line-spacing").on("click", () => tryCatch(addLineSpacing)); + $("#repeat-item-labels").on("click", () => tryCatch(repeatItemLabels)); + $("#toggle-field-headers").on("click", () => tryCatch(toggleFieldHeaders)); + $("#toggle-grand-totals").on("click", () => tryCatch(toggleGrandTotals)); + $("#set-empty-cell-text").on("click", () => tryCatch(setEmptyCellText)); + $("#toggle-fill-empty-cells").on("click", () => tryCatch(toggleFillEmptyCells)); + $("#toggle-auto-format").on("click", () => tryCatch(toggleAutoFormat)); + $("#toggle-preserve-formatting").on("click", () => tryCatch(togglePreserveFormatting)); async function changeLayout() { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-refresh.yaml b/samples/excel/38-pivottable/pivottable-refresh.yaml index 87b0a6d01..bd198a02b 100644 --- a/samples/excel/38-pivottable/pivottable-refresh.yaml +++ b/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.8' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#refresh-pivottable").click(() => tryCatch(refreshPivotTable)); - $("#add-table-row").click(() => tryCatch(addTableRow)); + $("#setup").on("click", () => tryCatch(setup)); + $("#refresh-pivottable").on("click", () => tryCatch(refreshPivotTable)); + $("#add-table-row").on("click", () => tryCatch(addTableRow)); async function refreshPivotTable() { // This function refreshes the "Farm Sales" PivotTable, diff --git a/samples/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 96c967688..57b847d18 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7,14 +7,14 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-pivot-table").click(() => tryCatch(addPivotTable)); - $("#add-slicer").click(() => tryCatch(addSlicer)); - $("#format-slicer").click(() => tryCatch(formatSlicer)); - $("#apply-style").click(() => tryCatch(applyStyle)); - $("#add-filters").click(() => tryCatch(addFilters)); - $("#remove-filters").click(() => tryCatch(removeFilters)); - $("#remove-slicer").click(() => tryCatch(removeSlicer)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-pivot-table").on("click", () => tryCatch(addPivotTable)); + $("#add-slicer").on("click", () => tryCatch(addSlicer)); + $("#format-slicer").on("click", () => tryCatch(formatSlicer)); + $("#apply-style").on("click", () => tryCatch(applyStyle)); + $("#add-filters").on("click", () => tryCatch(addFilters)); + $("#remove-filters").on("click", () => tryCatch(removeFilters)); + $("#remove-slicer").on("click", () => tryCatch(removeSlicer)); async function addSlicer() { await Excel.run(async (context) => { diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index e0ceb5821..37886a8ea 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.15' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#get-pivottable-data-source").click(() => tryCatch(getPivotTableDataSource)); + $("#setup").on("click", () => tryCatch(setup)); + $("#get-pivottable-data-source").on("click", () => tryCatch(getPivotTableDataSource)); async function getPivotTableDataSource() { // This function logs information about the data source of a PivotTable. diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index e923d3f2d..1fec2f819 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.9' script: content: | - $("#set-cell-properties").click(() => tryCatch(setCellProperties)); - $("#get-cell-properties").click(() => tryCatch(getCellProperties)); - $("#setup").click(() => tryCatch(setup)); + $("#set-cell-properties").on("click", () => tryCatch(setCellProperties)); + $("#get-cell-properties").on("click", () => tryCatch(getCellProperties)); + $("#setup").on("click", () => tryCatch(setup)); async function setCellProperties() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/dynamic-arrays.yaml b/samples/excel/42-range/dynamic-arrays.yaml index 8411cc596..d7140301a 100644 --- a/samples/excel/42-range/dynamic-arrays.yaml +++ b/samples/excel/42-range/dynamic-arrays.yaml @@ -7,10 +7,10 @@ api_set: ExcelAPI: '1.12' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#copy-table-headers").click(() => tryCatch(copyTableHeaders)); - $("#apply-filter-function").click(() => tryCatch(applyFilterFunction)); - $("#display-spill-information").click(() => tryCatch(displaySpillInformation)); + $("#setup").on("click", () => tryCatch(setup)); + $("#copy-table-headers").on("click", () => tryCatch(copyTableHeaders)); + $("#apply-filter-function").on("click", () => tryCatch(applyFilterFunction)); + $("#display-spill-information").on("click", () => tryCatch(displaySpillInformation)); async function copyTableHeaders() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index a8abfa954..18e6a6003 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -8,10 +8,10 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#set-font-and-fill-color").click(() => tryCatch(setFontAndFillColor)); - $("#set-number-format").click(() => tryCatch(setNumberFormat)); + $("#set-font-and-fill-color").on("click", () => tryCatch(setFontAndFillColor)); + $("#set-number-format").on("click", () => tryCatch(setNumberFormat)); async function setFontAndFillColor() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index cd6db23fd..fb3e16c56 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -8,11 +8,11 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#insert-range").click(() => tryCatch(insertRange)); - $("#delete-range").click(() => tryCatch(deleteRange)); - $("#clear-range").click(() => tryCatch(clearRange)); + $("#insert-range").on("click", () => tryCatch(insertRange)); + $("#delete-range").on("click", () => tryCatch(deleteRange)); + $("#clear-range").on("click", () => tryCatch(clearRange)); async function insertRange() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/outline.yaml b/samples/excel/42-range/outline.yaml index 02f043b4a..c57d706e8 100644 --- a/samples/excel/42-range/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -7,13 +7,13 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup-data").click(() => tryCatch(setupData)); - $("#setup-totals").click(() => tryCatch(setupTotals)); - $("#group-rows").click(() => tryCatch(groupRows)); - $("#group-columns").click(() => tryCatch(groupColumns)); - $("#collapse-outline").click(() => tryCatch(collapseOutline)); - $("#expand-outline").click(() => tryCatch(expandOutline)); - $("#ungroup").click(() => tryCatch(ungroup)); + $("#setup-data").on("click", () => tryCatch(setupData)); + $("#setup-totals").on("click", () => tryCatch(setupTotals)); + $("#group-rows").on("click", () => tryCatch(groupRows)); + $("#group-columns").on("click", () => tryCatch(groupColumns)); + $("#collapse-outline").on("click", () => tryCatch(collapseOutline)); + $("#expand-outline").on("click", () => tryCatch(expandOutline)); + $("#ungroup").on("click", () => tryCatch(ungroup)); async function groupRows() { Excel.run(async (context) => { diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 26988d156..3c5340802 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.14' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#select-first-cell").click(() => tryCatch(selectFirstCell)); - $("#select-second-cell").click(() => tryCatch(selectSecondCell)); - $("#get-direct-precedents").click(() => tryCatch(getDirectPrecedents)); - $("#get-all-precedents").click(() => tryCatch(getAllPrecedents)); - $("#clear-highlighting").click(() => tryCatch(clearFormatting)); + $("#setup").on("click", () => tryCatch(setup)); + $("#select-first-cell").on("click", () => tryCatch(selectFirstCell)); + $("#select-second-cell").on("click", () => tryCatch(selectSecondCell)); + $("#get-direct-precedents").on("click", () => tryCatch(getDirectPrecedents)); + $("#get-all-precedents").on("click", () => tryCatch(getAllPrecedents)); + $("#clear-highlighting").on("click", () => tryCatch(clearFormatting)); /** Select a cell with precedents on one worksheet. */ async function selectFirstCell() { diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index cfbff6ec9..4a3e17a80 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.9' script: content: | - $("#reset").click(() => tryCatch(reset)); - $("#color-selected-ranges").click(() => tryCatch(colorSelectedRanges)); - $("#color-specified-ranges").click(() => tryCatch(colorSpecifiedRanges)); - $("#color-all-formula-ranges").click(() => tryCatch(colorAllFormulaRanges)); - $("#color-all-logical-text-ranges").click(() => tryCatch(colorAllLogicalAndTextRanges)); - $("#read-properties-specified-ranges").click(() => tryCatch(readPropertiesOfSpecifiedRanges)); + $("#reset").on("click", () => tryCatch(reset)); + $("#color-selected-ranges").on("click", () => tryCatch(colorSelectedRanges)); + $("#color-specified-ranges").on("click", () => tryCatch(colorSpecifiedRanges)); + $("#color-all-formula-ranges").on("click", () => tryCatch(colorAllFormulaRanges)); + $("#color-all-logical-text-ranges").on("click", () => tryCatch(colorAllLogicalAndTextRanges)); + $("#read-properties-specified-ranges").on("click", () => tryCatch(readPropertiesOfSpecifiedRanges)); async function colorSelectedRanges() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-auto-fill.yaml b/samples/excel/42-range/range-auto-fill.yaml index c6042f1d1..8a2e44a03 100644 --- a/samples/excel/42-range/range-auto-fill.yaml +++ b/samples/excel/42-range/range-auto-fill.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup-data").click(() => tryCatch(setupData)); - $("#setup-first-sums").click(() => tryCatch(setupFirstSums)); - $("#auto-fill-values").click(() => tryCatch(autoFillValues)); - $("#auto-fill-formats").click(() => tryCatch(autoFillFormats)); - $("#auto-fill-copy").click(() => tryCatch(autoFillCopy)); + $("#setup-data").on("click", () => tryCatch(setupData)); + $("#setup-first-sums").on("click", () => tryCatch(setupFirstSums)); + $("#auto-fill-values").on("click", () => tryCatch(autoFillValues)); + $("#auto-fill-formats").on("click", () => tryCatch(autoFillFormats)); + $("#auto-fill-copy").on("click", () => tryCatch(autoFillCopy)); async function autoFillValues() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 0db6cc1ac..8424fa207 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -7,15 +7,15 @@ api_set: ExcelApi: '1.10' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#copyAll").click(() => tryCatch(copyAll)); - $("#copyFormula").click(() => tryCatch(copyFormula)); - $("#copyFormulaResult").click(() => tryCatch(copyFormulaResult)); - $("#copySingleAcrossRange").click(() => tryCatch(copySingleAcrossRange)); - $("#copyOnlyFormat").click(() => tryCatch(copyOnlyFormat)); - $("#skipBlanks").click(() => tryCatch(skipBlanks)); - $("#transpose").click(() => tryCatch(transpose)); - $("#move").click(() => tryCatch(move)); + $("#setup").on("click", () => tryCatch(setup)); + $("#copyAll").on("click", () => tryCatch(copyAll)); + $("#copyFormula").on("click", () => tryCatch(copyFormula)); + $("#copyFormulaResult").on("click", () => tryCatch(copyFormulaResult)); + $("#copySingleAcrossRange").on("click", () => tryCatch(copySingleAcrossRange)); + $("#copyOnlyFormat").on("click", () => tryCatch(copyOnlyFormat)); + $("#skipBlanks").on("click", () => tryCatch(skipBlanks)); + $("#transpose").on("click", () => tryCatch(transpose)); + $("#move").on("click", () => tryCatch(move)); async function copyAll() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-dependents.yaml b/samples/excel/42-range/range-dependents.yaml index b79542f62..e61ea18ec 100644 --- a/samples/excel/42-range/range-dependents.yaml +++ b/samples/excel/42-range/range-dependents.yaml @@ -7,10 +7,10 @@ api_set: ExcelAPI: '1.15' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#select-D3").click(() => tryCatch(selectD3)); - $("#get-all-dependents").click(() => tryCatch(getAllDependents)); - $("#clear-highlighting").click(() => tryCatch(clearFormatting)); + $("#setup").on("click", () => tryCatch(setup)); + $("#select-D3").on("click", () => tryCatch(selectD3)); + $("#get-all-dependents").on("click", () => tryCatch(getAllDependents)); + $("#clear-highlighting").on("click", () => tryCatch(clearFormatting)); async function selectD3() { // This function selects a cell with dependents across both worksheets. diff --git a/samples/excel/42-range/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml index 27f0ce290..4a6a5f126 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -7,10 +7,10 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#select-D3").click(() => tryCatch(selectD3)); - $("#select-E4").click(() => tryCatch(selectE4)); - $("#get-direct-dependents").click(() => tryCatch(getDirectDependents)); + $("#setup").on("click", () => tryCatch(setup)); + $("#select-D3").on("click", () => tryCatch(selectD3)); + $("#select-E4").on("click", () => tryCatch(selectE4)); + $("#get-direct-dependents").on("click", () => tryCatch(getDirectDependents)); /** Select a cell with direct dependents on the same worksheet. */ async function selectD3() { diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 5037390c8..da0a4622e 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.9' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#findText").click(() => tryCatch(findText)); - $("#findTextWithNullCheck").click(() => tryCatch(findTextWithNullCheck)); - $("#toggleComplete").click(() => tryCatch(toggleComplete)); - $("#toggleCase").click(() => tryCatch(toggleCase)); - $("#toggleDirection").click(() => tryCatch(toggleDirection)); + $("#setup").on("click", () => tryCatch(setup)); + $("#findText").on("click", () => tryCatch(findText)); + $("#findTextWithNullCheck").on("click", () => tryCatch(findTextWithNullCheck)); + $("#toggleComplete").on("click", () => tryCatch(toggleComplete)); + $("#toggleCase").on("click", () => tryCatch(toggleCase)); + $("#toggleDirection").on("click", () => tryCatch(toggleDirection)); let isCompleteMatchToggle = false; let isMatchCaseToggle = false; diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index a16b965c3..5b000608b 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -7,13 +7,13 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#select-E9").click(() => tryCatch(selectE9)); - $("#select-D8-E9").click(() => tryCatch(selectD8E9)); - $("#get-range-edge-left").click(() => tryCatch(getRangeEdgeLeft)); - $("#get-range-edge-up").click(() => tryCatch(getRangeEdgeUp)); - $("#get-extended-range-right").click(() => tryCatch(getExtendedRangeRight)); - $("#get-extended-range-down").click(() => tryCatch(getExtendedRangeDown)); + $("#setup").on("click", () => tryCatch(setup)); + $("#select-E9").on("click", () => tryCatch(selectE9)); + $("#select-D8-E9").on("click", () => tryCatch(selectD8E9)); + $("#get-range-edge-left").on("click", () => tryCatch(getRangeEdgeLeft)); + $("#get-range-edge-up").on("click", () => tryCatch(getRangeEdgeUp)); + $("#get-extended-range-right").on("click", () => tryCatch(getExtendedRangeRight)); + $("#get-extended-range-down").on("click", () => tryCatch(getExtendedRangeDown)); async function getRangeEdgeLeft() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index 1f7f91207..098714c15 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -8,12 +8,12 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#create-url-hyperlinks").click(() => tryCatch(createUrlHyperlinks)); - $("#create-document-hyperlinks").click(() => tryCatch(createDocumentHyperlinks)); - $("#update-hyperlinks").click(() => tryCatch(updateHyperlinks)); - $("#clear-hyperlinks").click(() => tryCatch(clearHyperlinks)); + $("#create-url-hyperlinks").on("click", () => tryCatch(createUrlHyperlinks)); + $("#create-document-hyperlinks").on("click", () => tryCatch(createDocumentHyperlinks)); + $("#update-hyperlinks").on("click", () => tryCatch(updateHyperlinks)); + $("#clear-hyperlinks").on("click", () => tryCatch(clearHyperlinks)); async function createUrlHyperlinks() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml index 0961a0015..fddacf40d 100644 --- a/samples/excel/42-range/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -7,9 +7,9 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#create-merged-range").click(() => tryCatch(createMergedRange)); - $("#get-merged-range").click(() => tryCatch(getMergedRange)); + $("#setup").on("click", () => tryCatch(setup)); + $("#create-merged-range").on("click", () => tryCatch(createMergedRange)); + $("#get-merged-range").on("click", () => tryCatch(getMergedRange)); async function createMergedRange() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 63156897b..79189d94d 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -8,12 +8,12 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#bounding-rect").click(() => tryCatch(boundingRect)); - $("#intersection").click(() => tryCatch(intersection)); - $("#offset-range").click(() => tryCatch(offsetRange)); - $("#resized-range").click(() => tryCatch(resizedRange)); - $("#create-sales-contest-charts").click(() => tryCatch(createContestCharts)); + $("#setup").on("click", () => tryCatch(setup)); + $("#bounding-rect").on("click", () => tryCatch(boundingRect)); + $("#intersection").on("click", () => tryCatch(intersection)); + $("#offset-range").on("click", () => tryCatch(offsetRange)); + $("#resized-range").on("click", () => tryCatch(resizedRange)); + $("#create-sales-contest-charts").on("click", () => tryCatch(createContestCharts)); async function boundingRect() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index 1d61d4180..5c0f33085 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#delete-name").click(() => tryCatch(deleteName)); - $("#delete-distributor").click(() => tryCatch(deleteDistributor)); + $("#delete-name").on("click", () => tryCatch(deleteName)); + $("#delete-distributor").on("click", () => tryCatch(deleteDistributor)); async function deleteName() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 7211ee30b..99a438123 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#set-text-orientation").click(() => tryCatch(setTextOrientation)); - $("#get-text-orientation").click(() => tryCatch(getTextOrientation)); + $("#setup").on("click", () => tryCatch(setup)); + $("#set-text-orientation").on("click", () => tryCatch(setTextOrientation)); + $("#get-text-orientation").on("click", () => tryCatch(getTextOrientation)); async function setTextOrientation() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 4c14a5798..3748a9273 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.1' script: content: | - $("#get-selection").click(() => tryCatch(getSelection)); - $("#set-selection").click(() => tryCatch(setSelection)); + $("#get-selection").on("click", () => tryCatch(getSelection)); + $("#set-selection").on("click", () => tryCatch(setSelection)); async function getSelection() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index b9c1d91fc..7ad56f487 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -8,16 +8,16 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - - $("#set-value").click(() => tryCatch(setValue)); - $("#set-values").click(() => tryCatch(setValues)); - $("#set-formula").click(() => tryCatch(setFormula)); - $("#set-formulas").click(() => tryCatch(setFormulas)); - $("#set-formulas-r1c1").click(() => tryCatch(setFormulasR1C1)); - $("#get-values").click(() => tryCatch(getValues)); - $("#get-texts").click(() => tryCatch(getTexts)); - $("#get-formulas").click(() => tryCatch(getFormulas)); + $("#setup").on("click", () => tryCatch(setup)); + + $("#set-value").on("click", () => tryCatch(setValue)); + $("#set-values").on("click", () => tryCatch(setValues)); + $("#set-formula").on("click", () => tryCatch(setFormula)); + $("#set-formulas").on("click", () => tryCatch(setFormulas)); + $("#set-formulas-r1c1").on("click", () => tryCatch(setFormulasR1C1)); + $("#get-values").on("click", () => tryCatch(getValues)); + $("#get-texts").on("click", () => tryCatch(getTexts)); + $("#get-formulas").on("click", () => tryCatch(getFormulas)); async function setValue() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index 2ad8bcd6c..ae7172223 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -8,13 +8,13 @@ api_set: ExcelApi: '1.7' script: content: |+ - $("#setup").click(() => tryCatch(setup)); - $("#add-new-style").click(() => tryCatch(addNewStyle)); - $("#apply-new-style").click(() => tryCatch(applyNewStyle)); - $("#apply-built-in-style").click(() => tryCatch(applyBuiltInStyle)); - $("#get-style-font").click(() => tryCatch(getStyleFontProperties)); - $("#get-style-alignment").click(() => tryCatch(getStyleAlignmentProperties)); - $("#delete-new-style").click(() => tryCatch(deleteNewStyle)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-new-style").on("click", () => tryCatch(addNewStyle)); + $("#apply-new-style").on("click", () => tryCatch(applyNewStyle)); + $("#apply-built-in-style").on("click", () => tryCatch(applyBuiltInStyle)); + $("#get-style-font").on("click", () => tryCatch(getStyleFontProperties)); + $("#get-style-alignment").on("click", () => tryCatch(getStyleAlignmentProperties)); + $("#delete-new-style").on("click", () => tryCatch(deleteNewStyle)); async function addNewStyle() { await Excel.run(async (context) => { diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index ceb41f352..5f748272b 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#try-create-chart-from-table").click(() => tryCatch(tryCreateChartFromEmptyTable)); - $("#fill-table").click(() => tryCatch(fillTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#try-create-chart-from-table").on("click", () => tryCatch(tryCreateChartFromEmptyTable)); + $("#fill-table").on("click", () => tryCatch(fillTable)); async function tryCreateChartFromEmptyTable() { await Excel.run(async (context) => { diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 3469e9ea7..a2db19697 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#createHexagon").click(() => tryCatch(createHexagon)); - $("#createTriangle").click(() => tryCatch(createTriangle)); - $("#createSmileyFace").click(() => tryCatch(createSmileyFace)); - $("#removeAll").click(() => tryCatch(removeAll)); + $("#setup").on("click", () => tryCatch(setup)); + $("#createHexagon").on("click", () => tryCatch(createHexagon)); + $("#createTriangle").on("click", () => tryCatch(createTriangle)); + $("#createSmileyFace").on("click", () => tryCatch(createSmileyFace)); + $("#removeAll").on("click", () => tryCatch(removeAll)); async function createHexagon() { await Excel.run(async (context) => { diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index b6d60f218..e97b9dcc5 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#createShapes").click(() => tryCatch(createShapes)); - $("#groupShapes").click(() => tryCatch(groupShapes)); - $("#moveGroup").click(() => tryCatch(moveGroup)); - $("#ungroupShapes").click(() => tryCatch(ungroupShapes)); + $("#setup").on("click", () => tryCatch(setup)); + $("#createShapes").on("click", () => tryCatch(createShapes)); + $("#groupShapes").on("click", () => tryCatch(groupShapes)); + $("#moveGroup").on("click", () => tryCatch(moveGroup)); + $("#ungroupShapes").on("click", () => tryCatch(ungroupShapes)); async function groupShapes() { await Excel.run(async (context) => { diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index e28300275..f6265d562 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -7,11 +7,11 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#selectedFile").change(() => tryCatch(readImageFromFile)); - $("#flipImage").click(() => tryCatch(flipImage)); - $("#getImageFormat").click(() => tryCatch(getImageFormat)); - $("#writeOutImageString").click(() => tryCatch(writeOutImageString)); + $("#setup").on("click", () => tryCatch(setup)); + $("#selectedFile").on("change", () => tryCatch(readImageFromFile)); + $("#flipImage").on("click", () => tryCatch(flipImage)); + $("#getImageFormat").on("click", () => tryCatch(getImageFormat)); + $("#writeOutImageString").on("click", () => tryCatch(writeOutImageString)); async function readImageFromFile() { const myFile = document.getElementById("selectedFile"); diff --git a/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index 8fd8207fe..507c1c295 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -7,17 +7,17 @@ api_set: ExcelApi: '1.9' script: content: |- - $("#setup").click(() => tryCatch(setup)); - $("#createShapes").click(() => tryCatch(createShapes)); - $("#addStraightLine").click(() => tryCatch(addStraightLine)); - $("#addCurvedLine").click(() => tryCatch(addCurvedLine)); - $("#arrowLine").click(() => tryCatch(arrowLine)); - $("#diamondLine").click(() => tryCatch(diamondLine)); - $("#connectStraightLine").click(() => tryCatch(connectStraightLine)); - $("#disconnectStraightLine").click(() => tryCatch(disconnectStraightLine)); - $("#connectCurvedLine").click(() => tryCatch(connectCurvedLine)); - $("#disconnectCurvedLine").click(() => tryCatch(disconnectCurvedLine)); - $("#deleteLines").click(() => tryCatch(deleteLines)); + $("#setup").on("click", () => tryCatch(setup)); + $("#createShapes").on("click", () => tryCatch(createShapes)); + $("#addStraightLine").on("click", () => tryCatch(addStraightLine)); + $("#addCurvedLine").on("click", () => tryCatch(addCurvedLine)); + $("#arrowLine").on("click", () => tryCatch(arrowLine)); + $("#diamondLine").on("click", () => tryCatch(diamondLine)); + $("#connectStraightLine").on("click", () => tryCatch(connectStraightLine)); + $("#disconnectStraightLine").on("click", () => tryCatch(disconnectStraightLine)); + $("#connectCurvedLine").on("click", () => tryCatch(connectCurvedLine)); + $("#disconnectCurvedLine").on("click", () => tryCatch(disconnectCurvedLine)); + $("#deleteLines").on("click", () => tryCatch(deleteLines)); async function addStraightLine() { await Excel.run(async (context) => { diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index f5a6625e8..6308d3666 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -7,13 +7,13 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#moveLeft").click(() => tryCatch(moveLeft)); - $("#moveDown").click(() => tryCatch(moveDown)); - $("#rotate").click(() => tryCatch(rotate)); - $("#scaleUp").click(() => tryCatch(scaleUp)); - $("#moveZOrderDown").click(() => tryCatch(moveZOrderDown)); - $("#createShapes").click(() => tryCatch(createShapes)); + $("#setup").on("click", () => tryCatch(setup)); + $("#moveLeft").on("click", () => tryCatch(moveLeft)); + $("#moveDown").on("click", () => tryCatch(moveDown)); + $("#rotate").on("click", () => tryCatch(rotate)); + $("#scaleUp").on("click", () => tryCatch(scaleUp)); + $("#moveZOrderDown").on("click", () => tryCatch(moveZOrderDown)); + $("#createShapes").on("click", () => tryCatch(createShapes)); async function moveLeft() { await Excel.run(async (context) => { diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 114d919df..e5b189dd2 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#createGeometricShape").click(() => tryCatch(createGeometricShape)); - $("#createTextbox").click(() => tryCatch(createTextbox)); - $("#centerTextbox").click(() => tryCatch(centerTextbox)); - $("#autoSizeText").click(() => tryCatch(autoSizeText)); - $("#deleteText").click(() => tryCatch(deleteText)); + $("#setup").on("click", () => tryCatch(setup)); + $("#createGeometricShape").on("click", () => tryCatch(createGeometricShape)); + $("#createTextbox").on("click", () => tryCatch(createTextbox)); + $("#centerTextbox").on("click", () => tryCatch(centerTextbox)); + $("#autoSizeText").on("click", () => tryCatch(autoSizeText)); + $("#deleteText").on("click", () => tryCatch(deleteText)); async function createTextbox() { diff --git a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml index 006660870..ad3a350e2 100644 --- a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml @@ -8,11 +8,11 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#add-row").click(() => tryCatch(addRow)); - $("#add-column").click(() => tryCatch(addColumn)); - $("#add-calculated-column").click(() => tryCatch(addCalculatedColumn)); + $("#add-row").on("click", () => tryCatch(addRow)); + $("#add-column").on("click", () => tryCatch(addColumn)); + $("#add-calculated-column").on("click", () => tryCatch(addCalculatedColumn)); async function addRow() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 1e7924e1b..d7e784a69 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#convert-range-to-table").click(() => tryCatch(convertRangeToTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#convert-range-to-table").on("click", () => tryCatch(convertRangeToTable)); async function convertRangeToTable() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index ab0340392..fd15edb7b 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -8,7 +8,7 @@ api_set: ExcelApi: '1.4' script: content: | - $("#create-table").click(() => tryCatch(createTable)); + $("#create-table").on("click", () => tryCatch(createTable)); async function createTable() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index 229a37783..f5bcba261 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#filter-table").click(() => tryCatch(filterTable)); - $("#clear-filters").click(() => tryCatch(clearFilters)); + $("#setup").on("click", () => tryCatch(setup)); + $("#filter-table").on("click", () => tryCatch(filterTable)); + $("#clear-filters").on("click", () => tryCatch(clearFilters)); async function filterTable() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index a40833fc5..fcfffd752 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#format-table").click(() => tryCatch(formatTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#format-table").on("click", () => tryCatch(formatTable)); async function formatTable() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 3b48ea6df..161601738 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#get-data-from-table").click(() => tryCatch(getData)); + $("#setup").on("click", () => tryCatch(setup)); + $("#get-data-from-table").on("click", () => tryCatch(getData)); async function getData() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml index c719c7902..e4e93112c 100644 --- a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml @@ -8,10 +8,10 @@ api_set: ExcelApi: '1.4' script: content: |+ - $("#create-table").click(() => tryCatch(createTable)); - $("#filter-table").click(() => tryCatch(filterTable)); - $("#get-range").click(() => tryCatch(getRange)); - $("#get-visible-range").click(() => tryCatch(getVisibleRange)); + $("#create-table").on("click", () => tryCatch(createTable)); + $("#filter-table").on("click", () => tryCatch(filterTable)); + $("#get-range").on("click", () => tryCatch(getRange)); + $("#get-visible-range").on("click", () => tryCatch(getVisibleRange)); async function getVisibleRange() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 937fa71bb..bb56f37b3 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -8,7 +8,7 @@ api_set: ExcelApi: '1.4' script: content: | - $("#import-json-data").click(() => tryCatch(importJsonData)); + $("#import-json-data").on("click", () => tryCatch(importJsonData)); async function importJsonData() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/resize-table.yaml b/samples/excel/46-table/resize-table.yaml index 999354183..bda92275b 100644 --- a/samples/excel/46-table/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -7,8 +7,8 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#resize-table").click(() => tryCatch(resizeTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#resize-table").on("click", () => tryCatch(resizeTable)); async function resizeTable() { await Excel.run(async (context) => { diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index 255f6015c..98294f07f 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#sort-table").click(() => tryCatch(sortTable)); + $("#setup").on("click", () => tryCatch(setup)); + $("#sort-table").on("click", () => tryCatch(sortTable)); async function sortTable() { await Excel.run(async (context) => { diff --git a/samples/excel/50-workbook/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml index 6c20d2a05..f24da8105 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.4' script: content: | - $("#create-setting").click(() => tryCatch(createSetting)); - $("#change-setting").click(() => tryCatch(changeSetting)); - $("#delete-setting").click(() => tryCatch(deleteSetting)); + $("#create-setting").on("click", () => tryCatch(createSetting)); + $("#change-setting").on("click", () => tryCatch(changeSetting)); + $("#delete-setting").on("click", () => tryCatch(deleteSetting)); async function createSetting() { await Excel.run(async (context) => { diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index 01840918a..af83a541f 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.8' script: content: | - $("#create-new-blank-workbook").click(() => tryCatch(createBlankWorkbook)); - $("#file").change(() => tryCatch(createWorkbookFromExisting)); + $("#create-new-blank-workbook").on("click", () => tryCatch(createBlankWorkbook)); + $("#file").on("change", () => tryCatch(createWorkbookFromExisting)); async function createBlankWorkbook() { await Excel.run(async (context) => { diff --git a/samples/excel/50-workbook/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml index e370c1793..e9f67c415 100644 --- a/samples/excel/50-workbook/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -7,9 +7,9 @@ api_set: ExcelAPI: '1.12' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#display-date-time-setting").click(() => tryCatch(displayDateTimeSetting)); - $("#write-date-time-setting").click(() => tryCatch(writeDateTimeSetting)); + $("#setup").on("click", () => tryCatch(setup)); + $("#display-date-time-setting").on("click", () => tryCatch(displayDateTimeSetting)); + $("#write-date-time-setting").on("click", () => tryCatch(writeDateTimeSetting)); async function displayDateTimeSetting() { await Excel.run(async (context) => { diff --git a/samples/excel/50-workbook/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml index b7aaaa803..30b64044d 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.11' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#display-culture-info").click(() => tryCatch(displayCultureInfo)); - $("#write-decimal").click(() => tryCatch(writeDecimal)); - $("#write-big-number").click(() => tryCatch(writeBigNumber)); + $("#setup").on("click", () => tryCatch(setup)); + $("#display-culture-info").on("click", () => tryCatch(displayCultureInfo)); + $("#write-decimal").on("click", () => tryCatch(writeDecimal)); + $("#write-big-number").on("click", () => tryCatch(writeBigNumber)); async function displayCultureInfo() { await Excel.run(async (context) => { diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index 07123e44a..2fb7531b0 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -7,15 +7,15 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#protect-data-in-worksheet").click(() => tryCatch(protectDataInWorksheet)); - $("#unprotect-data-in-worksheet").click(() => tryCatch(unprotectDataInWorksheet)); - $("#protect-workbook-structure").click(() => tryCatch(protectWorkbookStructure)); - $("#unprotect-workbook-structure").click(() => tryCatch(unprotectWorkbookStructure)); - $("#password-protect-data-in-worksheet").click(() => tryCatch(passwordProtectDataInWorksheet)); - $("#password-unprotect-data-in-worksheet").click(() => tryCatch(passwordUnprotectDataInWorksheet)); - $("#password-protect-workbook-structure").click(() => tryCatch(passwordProtectWorkbookStructure)); - $("#password-unprotect-workbook-structure").click(() => tryCatch(passwordUnprotectWorkbookStructure)); + $("#setup").on("click", () => tryCatch(setup)); + $("#protect-data-in-worksheet").on("click", () => tryCatch(protectDataInWorksheet)); + $("#unprotect-data-in-worksheet").on("click", () => tryCatch(unprotectDataInWorksheet)); + $("#protect-workbook-structure").on("click", () => tryCatch(protectWorkbookStructure)); + $("#unprotect-workbook-structure").on("click", () => tryCatch(unprotectWorkbookStructure)); + $("#password-protect-data-in-worksheet").on("click", () => tryCatch(passwordProtectDataInWorksheet)); + $("#password-unprotect-data-in-worksheet").on("click", () => tryCatch(passwordUnprotectDataInWorksheet)); + $("#password-protect-workbook-structure").on("click", () => tryCatch(passwordProtectWorkbookStructure)); + $("#password-unprotect-workbook-structure").on("click", () => tryCatch(passwordUnprotectWorkbookStructure)); async function protectDataInWorksheet() { await Excel.run(async (context) => { diff --git a/samples/excel/50-workbook/workbook-calculation.yaml b/samples/excel/50-workbook/workbook-calculation.yaml index 8a5c101cc..a71e4a70a 100644 --- a/samples/excel/50-workbook/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -7,7 +7,13 @@ api_set: ExcelApi: '1.11' script: content: | - $("#setup").click(() => tryCatch(setup)); $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); $("#recalculate-single").click(() => tryCatch(recalculateSingle)); $("#recalculate-column").click(() => tryCatch(recalculateColumn)); $("#manual-calculations").click(() => tryCatch(switchToManualCalculations)); $("#automatic-calculations").click(() => tryCatch(switchToAutomaticCalculations)); $("#force-calculation").click(() => tryCatch(forceCalculation)); + $("#setup").on("click", () => tryCatch(setup)); + $("#register-onCalculated-handler").on("click", () => tryCatch(registerOnCalculatedHandler)); + $("#recalculate-single").on("click", () => tryCatch(recalculateSingle)); + $("#recalculate-column").on("click", () => tryCatch(recalculateColumn)); + $("#manual-calculations").on("click", () => tryCatch(switchToManualCalculations)); + $("#automatic-calculations").on("click", () => tryCatch(switchToAutomaticCalculations)); + $("#force-calculation").on("click", () => tryCatch(forceCalculation)); async function registerOnCalculatedHandler() { await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index 6b56e6c76..457ff2206 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -7,7 +7,7 @@ api_set: ExcelApi: '1.7' script: content: | - $("#get-active-cell").click(() => tryCatch(run)); + $("#get-active-cell").on("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 4f502f69c..8e136f299 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -7,8 +7,8 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#file").change(getBase64); - $("#insert-sheets").click(() => tryCatch(insertSheets)); + $("#file").on("change", getBase64); + $("#insert-sheets").on("click", () => tryCatch(insertSheets)); let externalWorkbook; diff --git a/samples/excel/50-workbook/workbook-save-and-close.yaml b/samples/excel/50-workbook/workbook-save-and-close.yaml index c93326fad..a87c12f1e 100644 --- a/samples/excel/50-workbook/workbook-save-and-close.yaml +++ b/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -7,10 +7,10 @@ api_set: ExcelAPI: '1.11' script: content: | - $("#saveWithPrompt").click(() => tryCatch(saveWithPrompt)); - $("#saveWithoutPrompt").click(() => tryCatch(saveWithoutPrompt)); - $("#closeWithSave").click(() => tryCatch(closeWithSave)); - $("#closeWithoutSave").click(() => tryCatch(closeWithoutSave)); + $("#saveWithPrompt").on("click", () => tryCatch(saveWithPrompt)); + $("#saveWithoutPrompt").on("click", () => tryCatch(saveWithoutPrompt)); + $("#closeWithSave").on("click", () => tryCatch(closeWithSave)); + $("#closeWithoutSave").on("click", () => tryCatch(closeWithoutSave)); async function saveWithPrompt() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index cabb12f81..dcb92b83e 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -8,10 +8,10 @@ api_set: ExcelApi: '1.1' script: content: |- - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#get-active-worksheet").click(() => tryCatch(getActiveWorksheet)); - $("#set-active-worksheet").click(() => tryCatch(setActiveWorksheet)); + $("#get-active-worksheet").on("click", () => tryCatch(getActiveWorksheet)); + $("#set-active-worksheet").on("click", () => tryCatch(setActiveWorksheet)); async function getActiveWorksheet() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml index 904c01b51..710f7e94c 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -8,10 +8,10 @@ api_set: ExcelApi: '1.1' script: content: | - $("#add-worksheet").click(() => tryCatch(addWorksheet)); - $("#delete-worksheet").click(() => tryCatch(deleteWorksheet)); - $("#rename-worksheet").click(() => tryCatch(renameWorksheet)); - $("#move-worksheet").click(() => tryCatch(moveWorksheet)); + $("#add-worksheet").on("click", () => tryCatch(addWorksheet)); + $("#delete-worksheet").on("click", () => tryCatch(deleteWorksheet)); + $("#rename-worksheet").on("click", () => tryCatch(renameWorksheet)); + $("#move-worksheet").on("click", () => tryCatch(moveWorksheet)); async function addWorksheet() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index ed691a166..6a021efce 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.8' script: content: | - $("#hide-gridlines").click(() => tryCatch(hideGridlines)); - $("#show-gridlines").click(() => tryCatch(showGridlines)); + $("#hide-gridlines").on("click", () => tryCatch(hideGridlines)); + $("#show-gridlines").on("click", () => tryCatch(showGridlines)); async function hideGridlines() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index 50e56f674..3540f6510 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -8,7 +8,7 @@ api_set: ExcelApi: '1.1' script: content: | - $("#list-worksheets").click(() => tryCatch(listWorksheets)); + $("#list-worksheets").on("click", () => tryCatch(listWorksheets)); async function listWorksheets() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml index da01e093a..0e4c49a4b 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.5' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#compare-current-and-previous-year").click(() => tryCatch(compareCurrentWithPreviousTax)); - $("#compare-first-and-last-year").click(() => tryCatch(compareFirstWithMostRecentTaxRate)); + $("#setup").on("click", () => tryCatch(setup)); + $("#compare-current-and-previous-year").on("click", () => tryCatch(compareCurrentWithPreviousTax)); + $("#compare-first-and-last-year").on("click", () => tryCatch(compareFirstWithMostRecentTaxRate)); async function setup() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 7e2656a1f..81c5736f3 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -8,10 +8,10 @@ api_set: ExcelApi: '1.7' script: content: | - $("#set-tab-color-to-hex-color").click(() => tryCatch(setTabColorToHexColor)); - $("#set-tab-color-to-named-color").click(() => tryCatch(setTabColorToNamedColor)); - $("#set-tab-color-to-default-color").click(() => tryCatch(setTabColorToDefaultColor)); - $("#get-tab-color").click(() => tryCatch(getTabColor)); + $("#set-tab-color-to-hex-color").on("click", () => tryCatch(setTabColorToHexColor)); + $("#set-tab-color-to-named-color").on("click", () => tryCatch(setTabColorToNamedColor)); + $("#set-tab-color-to-default-color").on("click", () => tryCatch(setTabColorToDefaultColor)); + $("#get-tab-color").on("click", () => tryCatch(getTabColor)); async function setTabColorToHexColor() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index b172d97fe..b51277e35 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -7,13 +7,13 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#add-percent-auto-filter").click(() => tryCatch(addPercentAutoFilter)); - $("#add-custom-auto-filter").click(() => tryCatch(addCustomAutoFilter)); - $("#randomize-data").click(() => tryCatch(randomizeData)); - $("#refresh-auto-filter").click(() => tryCatch(refreshAutoFilter)); - $("#clear-single-auto-filter").click(() => tryCatch(clearSingleAutoFilter)); - $("#remove-all-auto-filters").click(() => tryCatch(removeAllAutoFilters)); + $("#setup").on("click", () => tryCatch(setup)); + $("#add-percent-auto-filter").on("click", () => tryCatch(addPercentAutoFilter)); + $("#add-custom-auto-filter").on("click", () => tryCatch(addCustomAutoFilter)); + $("#randomize-data").on("click", () => tryCatch(randomizeData)); + $("#refresh-auto-filter").on("click", () => tryCatch(refreshAutoFilter)); + $("#clear-single-auto-filter").on("click", () => tryCatch(clearSingleAutoFilter)); + $("#remove-all-auto-filters").on("click", () => tryCatch(removeAllAutoFilters)); async function addPercentAutoFilter() { // This function adds a percentage AutoFilter to the active worksheet diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index bd11af31b..8201f59ba 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#copy-worksheet").click(() => tryCatch(run)); + $("#setup").on("click", () => tryCatch(setup)); + $("#copy-worksheet").on("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index de104f7e4..43eb474f4 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -7,10 +7,10 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#findCompleted").click(() => tryCatch(findCompleted)); - $("#findDelayed").click(() => tryCatch(findDelayed)); - $("#findCanceled").click(() => tryCatch(findCanceled)); + $("#setup").on("click", () => tryCatch(setup)); + $("#findCompleted").on("click", () => tryCatch(findCompleted)); + $("#findDelayed").on("click", () => tryCatch(findDelayed)); + $("#findCanceled").on("click", () => tryCatch(findCanceled)); async function findCompleted() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index dd8c0f0f8..140e35852 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8,13 +8,13 @@ api_set: ExcelApi: '1.7' script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#freeze-columns").click(() => tryCatch(freezeColumns)); - $("#freeze-rows").click(() => tryCatch(freezeRows)); - $("#freeze-at").click(() => tryCatch(freezeAt)); - $("#get-location").click(() => tryCatch(getLocation)); - $("#unfreeze-all-panes").click(() => tryCatch(unfreezeAllPanes)); + $("#freeze-columns").on("click", () => tryCatch(freezeColumns)); + $("#freeze-rows").on("click", () => tryCatch(freezeRows)); + $("#freeze-at").on("click", () => tryCatch(freezeAt)); + $("#get-location").on("click", () => tryCatch(getLocation)); + $("#unfreeze-all-panes").on("click", () => tryCatch(unfreezeAllPanes)); async function freezeColumns() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index 64c36ead9..836576365 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -7,14 +7,14 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#setPageBreaks").click(() => tryCatch(setPageBreaks)); - $("#center").click(() => tryCatch(center)); - $("#setBlackAndWhite").click(() => tryCatch(setBlackAndWhite)); - $("#setPrintTitleRow").click(() => tryCatch(setPrintTitleRow)); - $("#setPrintArea").click(() => tryCatch(setPrintArea)); - $("#changeOrientation").click(() => tryCatch(changeOrientation)); - $("#setZoom").click(() => tryCatch(setZoom)); + $("#setup").on("click", () => tryCatch(setup)); + $("#setPageBreaks").on("click", () => tryCatch(setPageBreaks)); + $("#center").on("click", () => tryCatch(center)); + $("#setBlackAndWhite").on("click", () => tryCatch(setBlackAndWhite)); + $("#setPrintTitleRow").on("click", () => tryCatch(setPrintTitleRow)); + $("#setPrintArea").on("click", () => tryCatch(setPrintArea)); + $("#changeOrientation").on("click", () => tryCatch(changeOrientation)); + $("#setZoom").on("click", () => tryCatch(setZoom)); async function setPageBreaks() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 176fe8714..775dc432a 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -8,12 +8,12 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); + $("#setup").on("click", () => tryCatch(setup)); - $("#get-used-range").click(() => tryCatch(getUsedRange)); - $("#get-entire-range").click(() => tryCatch(getEntireRange)); - $("#get-range").click(() => tryCatch(getRange)); - $("#get-cell").click(() => tryCatch(getCell)); + $("#get-used-range").on("click", () => tryCatch(getUsedRange)); + $("#get-entire-range").on("click", () => tryCatch(getEntireRange)); + $("#get-range").on("click", () => tryCatch(getRange)); + $("#get-cell").on("click", () => tryCatch(getCell)); async function getUsedRange() { await Excel.run(async (context) => { diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 2dafa0639..35c92fee3 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.1' script: content: | - $("#hide-worksheet").click(() => tryCatch(hideWorksheet)); - $("#unhide-worksheet").click(() => tryCatch(unhideWorksheet)); + $("#hide-worksheet").on("click", () => tryCatch(hideWorksheet)); + $("#unhide-worksheet").on("click", () => tryCatch(unhideWorksheet)); async function hideWorksheet() { await Excel.run(async (context) => { diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml index 7e57e9818..854ae6951 100644 --- a/samples/excel/90-scenarios/currency-converter.yaml +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -17,8 +17,8 @@ script: let tableSetup: Record = {}; - $("#convert").click(() => tryCatch(convert)); - $("#setup").click(() => tryCatch(setupSample)); + $("#convert").on("click", () => tryCatch(convert)); + $("#setup").on("click", () => tryCatch(setupSample)); /** Main converting function **/ async function convert() { diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index fc6a4c6b6..dc8d014f3 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); - $("#copy-properties-from-range").click(() => tryCatch(copyPropertiesFromRange)); + $("#setup").on("click", () => tryCatch(setup)); + $("#set-multiple-properties-with-object").on("click", () => tryCatch(setMultiplePropertiesWithObject)); + $("#copy-properties-from-range").on("click", () => tryCatch(copyPropertiesFromRange)); async function setMultiplePropertiesWithObject() { await Excel.run(async (context) => { diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index b1fa056cc..04d23ceb6 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.9' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#refresh-data").click(() => tryCatch(refreshData)); - $("#toggle-tracking").click(() => tryCatch(toggleTracking)); - $("#toggle-screen-painting").click(() => tryCatch(toggleScreenPainting)); - $("#toggle-calculation").click(() => tryCatch(toggleCalculationMode)); - $("#recalculate").click(() => tryCatch(recalculate)); + $("#setup").on("click", () => tryCatch(setup)); + $("#refresh-data").on("click", () => tryCatch(refreshData)); + $("#toggle-tracking").on("click", () => tryCatch(toggleTracking)); + $("#toggle-screen-painting").on("click", () => tryCatch(toggleScreenPainting)); + $("#toggle-calculation").on("click", () => tryCatch(toggleCalculationMode)); + $("#recalculate").on("click", () => tryCatch(recalculate)); const ROW_COUNT = 500; const COLUMN_COUNT = 20; diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 2add48209..80768c3d2 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -8,7 +8,7 @@ api_set: ExcelApi: '1.1' script: content: | - $("#create-report").click(() => tryCatch(createReport)); + $("#create-report").on("click", () => tryCatch(createReport)); /** Load sample data into a new worksheet and create a chart */ async function createReport() { diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 05761ffdb..b228a191a 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -10,9 +10,9 @@ script: content: | declare var moment: any; - $("#setup").click(() => tryCatch(setup)); - $("#set-date-value-using-timestamp").click(() => tryCatch(setDateValueUsingTimestamp)); - $("#get-date-value").click(() => tryCatch(getDateValue)); + $("#setup").on("click", () => tryCatch(setup)); + $("#set-date-value-using-timestamp").on("click", () => tryCatch(setDateValueUsingTimestamp)); + $("#get-date-value").on("click", () => tryCatch(getDateValue)); async function setDateValueUsingTimestamp() { await Excel.run(async (context) => { diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index 2bc0828c5..f40874d0d 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -8,8 +8,8 @@ api_set: ExcelApi: '1.4' script: content: | - $("#wheel").click(wheelGo); - $("#stop").click(wheelStop); + $("#wheel").on("click", wheelGo); + $("#stop").on("click", wheelStop); let isStopped: boolean diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index d4720d92e..295c3f66a 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -11,8 +11,8 @@ script: initializeColorPickers(); // Set up the click handler: - const $drawButton = $("#draw-gradient").click(drawGradient); - $("#random").click(randomizeColors); + const $drawButton = $("#draw-gradient").on("click", drawGradient); + $("#random").on("click", randomizeColors); /** Click-handler for drawing the gradient */ async function drawGradient() { diff --git a/samples/excel/99-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml index b63a27b27..27513ae68 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -8,11 +8,11 @@ api_set: ExcelApi: '1.4' script: content: | - $("#setup").click(setup); - $("#repeat").click(repeat); + $("#setup").on("click", setup); + $("#repeat").on("click", repeat); - const $pruneTheGrid = $("#step-by-step").click(pruneTheGrid); - const $allAtOnce = $("#all-at-once").click(allAtOnce); + const $pruneTheGrid = $("#step-by-step").on("click", pruneTheGrid); + const $allAtOnce = $("#all-at-once").on("click", allAtOnce); const GRID_ROW_COUNT = 25; const GRID_COLUMN_COUNT = 30; diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index ebdf9d0ee..82333b40b 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.4' script: content: |- - $("#squares").click(() => tryCatch(drawSquares)); - $("#spiral").click(() => tryCatch(drawSpiral)); - $("#decoration").click(() => tryCatch(drawDecoration)); + $("#squares").on("click", () => tryCatch(drawSquares)); + $("#spiral").on("click", () => tryCatch(drawSpiral)); + $("#decoration").on("click", () => tryCatch(drawDecoration)); async function drawSquares() { await Excel.run(async (context) => { diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 3a0850856..515ab5cb4 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -8,13 +8,13 @@ api_set: ExcelApi: '1.9' script: content: |- - $("#run").click(() => { + $("#run").on("click", () => { $("#setup").hide(); tryCatch(run); }); - $("#selectedFile").change(() => tryCatch(readImageFromFile)); - $("#focusButton").click(() => tryCatch(focus)); + $("#selectedFile").on("change", () => tryCatch(readImageFromFile)); + $("#focusButton").on("click", () => tryCatch(focus)); let backgroundPicture = getDefaultBackgroundPicture(); diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 10ea5b1db..32c8a1e03 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -7,7 +7,7 @@ api_set: ExcelApi: '1.1' script: content: | - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 57fbd0e52..50a3a4c84 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -7,7 +7,7 @@ api_set: OneNoteApi: '1.1' script: content: | - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); async function run() { await OneNote.run(async (context) => { diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 527dcca19..f08ab07ad 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -6,9 +6,9 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); - $("#set").click(set); - $("#save").click(save); + $("#get").on("click", get); + $("#set").on("click", set); + $("#save").on("click", save); function get() { const settingName = $("#settingName").val(); diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index cf3c2fb7f..3a12f3b83 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -8,11 +8,11 @@ script: content: | let customProps; - $("#load").click(load); - $("#get").click(get); - $("#set").click(set); - $("#remove").click(remove); - $("#save").click(save); + $("#load").on("click", load); + $("#get").on("click", get); + $("#set").on("click", set); + $("#remove").on("click", remove); + $("#save").on("click", save); function load() { Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { diff --git a/samples/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml index 5d1b47f05..27a8eec47 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.8' script: content: | - $("#add-image").click(addImage); + $("#add-image").on("click", addImage); function addImage() { const mailItem = Office.context.mailbox.item; diff --git a/samples/outlook/20-item-body/append-text-on-send.yaml b/samples/outlook/20-item-body/append-text-on-send.yaml index b324ac54c..69a4e1425 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.9' script: content: | - $("#append-on-send").click(appendOnSend); + $("#append-on-send").on("click", appendOnSend); function appendOnSend() { // This snippet appends text to the end of the message or appointment's body once it's sent. diff --git a/samples/outlook/20-item-body/get-body-format.yaml b/samples/outlook/20-item-body/get-body-format.yaml index 50621c9f0..6f34542a4 100644 --- a/samples/outlook/20-item-body/get-body-format.yaml +++ b/samples/outlook/20-item-body/get-body-format.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-body-format").click(getBodyFormat); + $("#get-body-format").on("click", getBodyFormat); function getBodyFormat() { // Get the mail item's body format (plain text or HTML) and log it to the console. diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml index 76e2c16b7..86f15b340 100644 --- a/samples/outlook/20-item-body/get-selected-data.yaml +++ b/samples/outlook/20-item-body/get-selected-data.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-selected-data").click(getSelectedData); + $("#get-selected-data").on("click", getSelectedData); function getSelectedData() { Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { diff --git a/samples/outlook/20-item-body/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml index 639537b9c..06a78fe37 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.13' script: content: | - $("#prepend-on-send").click(prependOnSend); + $("#prepend-on-send").on("click", prependOnSend); function prependOnSend() { // This snippet prepends text to the beginning of the message or appointment's body once it's sent. diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index e062d5c42..e8a7d28b6 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#prepend").click(prependText); + $("#prepend").on("click", prependText); function prependText() { /* This snippet adds text to the beginning of the message or appointment's body. diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index cd0e62e6e..8958cde5c 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#replace-selection").click(replaceSelection); + $("#replace-selection").on("click", replaceSelection); function replaceSelection() { /* This snippet replaces selected text in a message or appointment's body with specified text. diff --git a/samples/outlook/25-item-save-and-close/close.yaml b/samples/outlook/25-item-save-and-close/close.yaml index 54e6b9e3f..6cbbb7599 100644 --- a/samples/outlook/25-item-save-and-close/close.yaml +++ b/samples/outlook/25-item-save-and-close/close.yaml @@ -6,7 +6,7 @@ api_set: Mailbox: '1.3' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.item.close(); diff --git a/samples/outlook/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml index 77d79ce17..db0b7fa35 100644 --- a/samples/outlook/25-item-save-and-close/save.yaml +++ b/samples/outlook/25-item-save-and-close/save.yaml @@ -6,7 +6,7 @@ api_set: Mailbox: '1.3' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.item.saveAsync(function (result) { diff --git a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml index 9a0206f82..9af9fccb7 100644 --- a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.7' script: content: |- - $("#get-attendees").click(getAttendees); + $("#get-attendees").on("click", getAttendees); function getAttendees() { // This snippet gets an appointment's required and optional attendees and groups them by their response. diff --git a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml index dc284302a..0a0c2988d 100644 --- a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-cc").click(getCc); + $("#get-cc").on("click", getCc); function getCc() { const msgCc = Office.context.mailbox.item.cc; diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml index 7e556daa8..46e585970 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.7' script: content: | - $("#get-from").click(getFrom); + $("#get-from").on("click", getFrom); function getFrom() { Office.context.mailbox.item.from.getAsync(function(asyncResult) { diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml index 1a1dd7421..aea7e7b45 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-from").click(getFrom); + $("#get-from").on("click", getFrom); function getFrom() { const msgFrom = Office.context.mailbox.item.from; diff --git a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml index 5fe180f31..89d5cb16a 100644 --- a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-optional-attendees").click(getOptionalAttendees); + $("#get-optional-attendees").on("click", getOptionalAttendees); function getOptionalAttendees() { const apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml index a7e4a5c41..dc88c2f2e 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-organizer").click(getOrganizer); + $("#get-organizer").on("click", getOrganizer); function getOrganizer() { const apptOrganizer = Office.context.mailbox.item.organizer; diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml index 9c20fdbb5..1c8cd9234 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.7' script: content: | - $("#get-organizer").click(getOrganizer); + $("#get-organizer").on("click", getOrganizer); function getOrganizer() { Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { diff --git a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml index 134c433bd..bc421d7d9 100644 --- a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-required-attendees").click(getRequiredAttendees); + $("#get-required-attendees").on("click", getRequiredAttendees); function getRequiredAttendees() { const apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; diff --git a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml index a43e7e738..cf0e23c17 100644 --- a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-sender").click(getSender); + $("#get-sender").on("click", getSender); function getSender() { const msgSender = Office.context.mailbox.item.sender; diff --git a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml index fe42a896b..82b707fc1 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-bcc").click(getBcc); - $("#set-bcc").click(setBcc); + $("#get-bcc").on("click", getBcc); + $("#set-bcc").on("click", setBcc); function getBcc() { Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml index 1b67b55cc..64a8149be 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-cc").click(getCc); - $("#set-cc").click(setCc); + $("#get-cc").on("click", getCc); + $("#set-cc").on("click", setCc); function getCc() { Office.context.mailbox.item.cc.getAsync(function(asyncResult) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml index 6055c1a47..103f90157 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-optional-attendees").click(getOptionalAttendees); - $("#set-optional-attendees").click(setOptionalAttendees); + $("#get-optional-attendees").on("click", getOptionalAttendees); + $("#set-optional-attendees").on("click", setOptionalAttendees); function getOptionalAttendees() { Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml index 6ca144775..c04c8f2b5 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-required-attendees").click(getRequiredAttendees); - $("#set-required-attendees").click(setRequiredAttendees); + $("#get-required-attendees").on("click", getRequiredAttendees); + $("#set-required-attendees").on("click", setRequiredAttendees); function getRequiredAttendees() { Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml index 3d709374f..74847c423 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-to").click(getTo); - $("#set-to").click(setTo); + $("#get-to").on("click", getTo); + $("#set-to").on("click", setTo); function getTo() { Office.context.mailbox.item.to.getAsync(function(asyncResult) { diff --git a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml index ce34c880e..d5e376bcd 100644 --- a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get-to").click(getTo); + $("#get-to").on("click", getTo); function getTo() { const msgTo = Office.context.mailbox.item.to; diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index bc46e8a0c..b10f9d712 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -6,14 +6,14 @@ api_set: Mailbox: '1.10' script: content: | - $("#addProgress").click(addProgress); - $("#addInformational").click(addInformational); - $("#addInformationalPersisted").click(addInformationalPersisted); - $("#addInsight").click(addInsight); - $("#addError").click(addError); - $("#getAll").click(getAll); - $("#replace").click(replace); - $("#remove").click(remove); + $("#addProgress").on("click", addProgress); + $("#addInformational").on("click", addInformational); + $("#addInformationalPersisted").on("click", addInformationalPersisted); + $("#addInsight").on("click", addInsight); + $("#addError").on("click", addError); + $("#getAll").on("click", getAll); + $("#replace").on("click", replace); + $("#remove").on("click", remove); function addProgress() { // Adds a progress indicator to the mail item. diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index 1d0765464..14c6f2d0f 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -6,11 +6,11 @@ api_set: Mailbox: '1.1' script: content: | - $("#add").click(add); - $("#addItemAttachment").click(addItemAttachment); - $("#addBase64").click(addBase64); - $("#get").click(get); - $("#remove").click(remove); + $("#add").on("click", add); + $("#addItemAttachment").on("click", addItemAttachment); + $("#addBase64").on("click", addBase64); + $("#get").on("click", get); + $("#remove").on("click", remove); function add() { const attachmentUrl = $("#attachmentUrl").val(); diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index 58912cd3b..5b49ca774 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -6,8 +6,8 @@ api_set: Mailbox: '1.8' script: content: | - $("#attachment-content-compose").click(getAttachmentContentCompose); - $("#attachment-content-read").click(getAttachmentContentRead); + $("#attachment-content-compose").on("click", getAttachmentContentCompose); + $("#attachment-content-read").on("click", getAttachmentContentRead); const item = Office.context.mailbox.item; diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index cea5e1545..64ceec1dc 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -6,7 +6,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { const attachments = Office.context.mailbox.item.attachments; diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index 126f70bd0..14500f333 100644 --- a/samples/outlook/45-categories/work-with-categories.yaml +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -7,9 +7,9 @@ api_set: Mailbox: '1.8' script: content: | - $("#get-categories").click(getCategories); - $("#add-categories").click(addCategories); - $("#remove-categories").click(removeCategories); + $("#get-categories").on("click", getCategories); + $("#add-categories").on("click", addCategories); + $("#remove-categories").on("click", removeCategories); function getCategories() { Office.context.mailbox.item.categories.getAsync(function(asyncResult) { diff --git a/samples/outlook/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index 7800fd86b..f48099221 100644 --- a/samples/outlook/45-categories/work-with-master-categories.yaml +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -7,9 +7,9 @@ api_set: Mailbox: '1.8' script: content: | - $("#get-master-categories").click(getMasterCategories); - $("#add-master-categories").click(addMasterCategories); - $("#remove-master-categories").click(removeMasterCategories); + $("#get-master-categories").on("click", getMasterCategories); + $("#add-master-categories").on("click", addMasterCategories); + $("#remove-master-categories").on("click", removeMasterCategories); function getMasterCategories() { Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { diff --git a/samples/outlook/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index c8db693f5..8cc60407d 100644 --- a/samples/outlook/50-recurrence/get-recurrence-read.yaml +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.7' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { const recurrence = Office.context.mailbox.item.recurrence; diff --git a/samples/outlook/50-recurrence/get-series-id.yaml b/samples/outlook/50-recurrence/get-series-id.yaml index e629fc34c..3f2ae02e3 100644 --- a/samples/outlook/50-recurrence/get-series-id.yaml +++ b/samples/outlook/50-recurrence/get-series-id.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.7' script: content: | - $("#get-series-id").click(getSeriesId); + $("#get-series-id").on("click", getSeriesId); function getSeriesId() { const seriesId = Office.context.mailbox.item.seriesId; diff --git a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml index 755682401..19c40bca4 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.7' script: content: | - $("#get").click(get); - $("#set").click(set); + $("#get").on("click", get); + $("#set").on("click", set); function get() { Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index 5fab43f47..dbefec472 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -10,8 +10,8 @@ script: // Pre-populate with current item ID. $("#itemId").val(Office.context.mailbox.item.itemId); - $("#run").click(run); - $("#run-async").click(runAsync); + $("#run").on("click", run); + $("#run-async").on("click", runAsync); function run() { const itemId = $("#itemId").val(); diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index b070c328f..dc7735bf2 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -10,8 +10,8 @@ script: // Pre-populate with current item ID. $("#itemId").val(Office.context.mailbox.item.itemId); - $("#run").click(run); - $("#run-async").click(runAsync); + $("#run").on("click", run); + $("#run-async").on("click", runAsync); function run() { const itemId = $("#itemId").val(); diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 6137d2d36..a19958052 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.9' script: content: | - $("#run").click(run); - $("#run-async").click(runAsync); + $("#run").on("click", run); + $("#run-async").on("click", runAsync); function run() { const start = new Date(); diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 66d43f9aa..8f619651e 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.9' script: content: | - $("#run").click(run); - $("#run-async").click(runAsync); + $("#run").on("click", run); + $("#run-async").on("click", runAsync); function run() { Office.context.mailbox.displayNewMessageForm({ diff --git a/samples/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index 745772799..e020d39fc 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -7,10 +7,10 @@ api_set: Mailbox: '1.9' script: content: | - $("#display-reply-form").click(displayReplyForm); - $("#display-reply-form-async").click(displayReplyFormAsync); - $("#display-reply-all-form").click(displayReplyAllForm); - $("#display-reply-all-form-async").click(displayReplyAllFormAsync); + $("#display-reply-form").on("click", displayReplyForm); + $("#display-reply-form-async").on("click", displayReplyFormAsync); + $("#display-reply-all-form").on("click", displayReplyAllForm); + $("#display-reply-all-form-async").on("click", displayReplyAllFormAsync); // The async version is only available starting with requirement set 1.9. function displayReplyForm() { diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index 3af4cc04a..ab7faa8ce 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.9' script: content: | - $("#run").click(run); - $("#run-async").click(runAsync); + $("#run").on("click", run); + $("#run-async").on("click", runAsync); function run() { Office.context.mailbox.item.displayReplyForm({ diff --git a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml index c196d0ec7..ed21f10b7 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.13' script: content: | - $("#get-sensitivity-label").click(getCurrentSensitivityLabel); - $("#set-sensitivity-label").click(setSensitivityLabel); + $("#get-sensitivity-label").on("click", getCurrentSensitivityLabel); + $("#set-sensitivity-label").on("click", setSensitivityLabel); function getCurrentSensitivityLabel() { // This snippet gets the current mail item's sensitivity label. diff --git a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml index 6b0d2dc3c..75fc82cd2 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.13' script: content: | - $("#get-sensitivity-labels-enabled").click(getSensitivityLabelsCatalogIsEnabled); - $("#get-sensitivity-labels-catalog").click(getSensitivityLabelsCatalog); + $("#get-sensitivity-labels-enabled").on("click", getSensitivityLabelsCatalogIsEnabled); + $("#get-sensitivity-labels-catalog").on("click", getSensitivityLabelsCatalog); function getSensitivityLabelsCatalogIsEnabled() { // This snippet determines if the sensitivity labels catalog is enabled on the current mailbox. diff --git a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml index b749468be..56bae1ba1 100644 --- a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml +++ b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -6,9 +6,9 @@ api_set: Mailbox: '1.8' script: content: | - $("#get").click(get); - $("#run-message").click(runOnMessage); - $("#run-appointment").click(runOnAppointment); + $("#get").on("click", get); + $("#run-message").on("click", runOnMessage); + $("#run-appointment").on("click", runOnAppointment); function get() { if (!Office.context.mailbox.item.getSharedPropertiesAsync) { diff --git a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml index 20f9f0f0b..e4140f821 100644 --- a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml +++ b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -6,7 +6,7 @@ api_set: Mailbox: '1.8' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.item.getAllInternetHeadersAsync(function (asyncResult) { diff --git a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml index 945d95b6b..db0f86c95 100644 --- a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml +++ b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -6,9 +6,9 @@ api_set: Mailbox: '1.8' script: content: | - $("#set-custom-headers").click(setCustomHeaders); - $("#get-selected-custom-headers").click(getSelectedCustomHeaders); - $("#remove-selected-custom-headers").click(removeSelectedCustomHeaders); + $("#set-custom-headers").on("click", setCustomHeaders); + $("#get-selected-custom-headers").on("click", getSelectedCustomHeaders); + $("#remove-selected-custom-headers").on("click", removeSelectedCustomHeaders); // Set custom internet headers. function setCustomHeaders() { diff --git a/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml b/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml index 7b5e49dfb..5c54cbbc5 100644 --- a/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml +++ b/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml @@ -6,8 +6,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#getEntities").click(getEntities); - $("#getEntitiesByType").click(getEntitiesByType); + $("#getEntities").on("click", getEntities); + $("#getEntitiesByType").on("click", getEntitiesByType); function getEntities() { const entities = Office.context.mailbox.item.getEntities(); diff --git a/samples/outlook/75-entities-and-regex-matches/contextual.yaml b/samples/outlook/75-entities-and-regex-matches/contextual.yaml index ab5a9593b..54479ddcc 100644 --- a/samples/outlook/75-entities-and-regex-matches/contextual.yaml +++ b/samples/outlook/75-entities-and-regex-matches/contextual.yaml @@ -6,9 +6,9 @@ api_set: Mailbox: '1.1' script: content: | - $("#getFilteredEntitiesByName").click(getFilteredEntitiesByName); - $("#getRegExMatches").click(getRegExMatches); - $("#getRegExMatchesByName").click(getRegExMatchesByName); + $("#getFilteredEntitiesByName").on("click", getFilteredEntitiesByName); + $("#getRegExMatches").on("click", getRegExMatches); + $("#getRegExMatchesByName").on("click", getRegExMatchesByName); function getFilteredEntitiesByName() { // This API would only work when you click on highlighted physical address that has the word "Way" in it. diff --git a/samples/outlook/75-entities-and-regex-matches/selected.yaml b/samples/outlook/75-entities-and-regex-matches/selected.yaml index e2f622e5d..470812823 100644 --- a/samples/outlook/75-entities-and-regex-matches/selected.yaml +++ b/samples/outlook/75-entities-and-regex-matches/selected.yaml @@ -6,8 +6,8 @@ api_set: Mailbox: '1.6' script: content: | - $("#getSelectedEntities").click(getSelectedEntities); - $("#getSelectedRegExMatches").click(getSelectedRegExMatches); + $("#getSelectedEntities").on("click", getSelectedEntities); + $("#getSelectedRegExMatches").on("click", getSelectedRegExMatches); function getSelectedEntities() { const entities = Office.context.mailbox.item.getSelectedEntities(); diff --git a/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml b/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml index 47c43946c..06f7192b6 100644 --- a/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml +++ b/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.5' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml index fbc5444b7..7d16d13a0 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { const ewsId = Office.context.mailbox.item.itemId; diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml index 2b2503008..add1fe594 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.3' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.item.saveAsync((result) => { diff --git a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml index 4b167e07a..ce0d9ea8f 100644 --- a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.5' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { console.log("EWS URL: " + Office.context.mailbox.ewsUrl); diff --git a/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml b/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml index a797444d4..fd0bd0a1e 100644 --- a/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml +++ b/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.8' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.item.getItemIdAsync(function (result) { diff --git a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml index 6efee558c..5d4023808 100644 --- a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { const ewsId = Office.context.mailbox.item.itemId; diff --git a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml index c7e830764..8c991a666 100644 --- a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { const request = ''+ diff --git a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml index cec954b38..800b810e2 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.getCallbackTokenAsync(function (result) { diff --git a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml index e974bfb1e..e6c8633e9 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.mailbox.getUserIdentityTokenAsync(function (result) { diff --git a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml index 9230db2d7..36dde322e 100644 --- a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml +++ b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -7,12 +7,12 @@ api_set: Mailbox: '1.13' script: content: | - $("#get-date").click(getDeliveryDate); - $("#set-time-five-minutes").click(() => computeDelay("set-time-five-minutes")); - $("#set-time-fifteen-minutes").click(() => computeDelay("set-time-fifteen-minutes")); - $("#set-time-thirty-minutes").click(() => computeDelay("set-time-thirty-minutes")); - $("#set-time-sixty-minutes").click(() => computeDelay("set-time-sixty-minutes")); - $("#set-time-one-day").click(() => computeDelay("set-time-one-day")); + $("#get-date").on("click", getDeliveryDate); + $("#set-time-five-minutes").on("click", () => computeDelay("set-time-five-minutes")); + $("#set-time-fifteen-minutes").on("click", () => computeDelay("set-time-fifteen-minutes")); + $("#set-time-thirty-minutes").on("click", () => computeDelay("set-time-thirty-minutes")); + $("#set-time-sixty-minutes").on("click", () => computeDelay("set-time-sixty-minutes")); + $("#set-time-one-day").on("click", () => computeDelay("set-time-one-day")); let totalDelay = 0; diff --git a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml index 1a4b68f59..a93ab2752 100644 --- a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml +++ b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -7,9 +7,9 @@ api_set: Mailbox: '1.8' script: content: | - $("#get").click(get); - $("#add").click(add); - $("#remove").click(remove); + $("#get").on("click", get); + $("#add").on("click", add); + $("#remove").on("click", remove); function get() { Office.context.mailbox.item.enhancedLocation.getAsync((result) => { diff --git a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml index 697608f8d..7f06ce9ea 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); diff --git a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml index f41ce02e7..57f61e1ef 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); diff --git a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml index 8000abae0..ec6590fb0 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); diff --git a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml index a696e9d85..b66f56bb2 100644 --- a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml +++ b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: |- - $("#get-diagnostics").click(getDiagnostics); + $("#get-diagnostics").on("click", getDiagnostics); function getDiagnostics() { // This function gets a mailbox's diagnostic information, such as Outlook client and version, and logs it to the console. diff --git a/samples/outlook/90-other-item-apis/get-end-read.yaml b/samples/outlook/90-other-item-apis/get-end-read.yaml index 55e37fb88..ed4e3867f 100644 --- a/samples/outlook/90-other-item-apis/get-end-read.yaml +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); diff --git a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml index 829fa5309..d2bd5e084 100644 --- a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml +++ b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Internet message ID: ${Office.context.mailbox.item.internetMessageId}`); diff --git a/samples/outlook/90-other-item-apis/get-item-class-read.yaml b/samples/outlook/90-other-item-apis/get-item-class-read.yaml index 363e80cd3..39b7c74b5 100644 --- a/samples/outlook/90-other-item-apis/get-item-class-read.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); diff --git a/samples/outlook/90-other-item-apis/get-item-type.yaml b/samples/outlook/90-other-item-apis/get-item-type.yaml index ab80afb9e..102c61336 100644 --- a/samples/outlook/90-other-item-apis/get-item-type.yaml +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { const itemType = Office.context.mailbox.item.itemType; diff --git a/samples/outlook/90-other-item-apis/get-location-read.yaml b/samples/outlook/90-other-item-apis/get-location-read.yaml index 5adaa4a73..46d70d92b 100644 --- a/samples/outlook/90-other-item-apis/get-location-read.yaml +++ b/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Appointment location: ${Office.context.mailbox.item.location}`); diff --git a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml index 87414f2f9..71828e0e0 100644 --- a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); diff --git a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml index dbb4d0e14..a3ea663a8 100644 --- a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); - $("#set").click(set); + $("#get").on("click", get); + $("#set").on("click", set); function get() { Office.context.mailbox.item.end.getAsync((result) => { diff --git a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml index 45c1c43fd..dd2e76307 100644 --- a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); - $("#set").click(set); + $("#get").on("click", get); + $("#set").on("click", set); function get() { Office.context.mailbox.item.location.getAsync((result) => { diff --git a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml index cd5277f34..b26f7bcae 100644 --- a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); - $("#set").click(set); + $("#get").on("click", get); + $("#set").on("click", set); function get() { Office.context.mailbox.item.start.getAsync((result) => { diff --git a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml index b305987cc..d5a045847 100644 --- a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml +++ b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); - $("#set").click(set); + $("#get").on("click", get); + $("#set").on("click", set); function get() { Office.context.mailbox.item.subject.getAsync((result) => { diff --git a/samples/outlook/90-other-item-apis/get-start-read.yaml b/samples/outlook/90-other-item-apis/get-start-read.yaml index a7301233b..cefc14309 100644 --- a/samples/outlook/90-other-item-apis/get-start-read.yaml +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); diff --git a/samples/outlook/90-other-item-apis/get-subject-read.yaml b/samples/outlook/90-other-item-apis/get-subject-read.yaml index 55bd28c6d..0b74de2aa 100644 --- a/samples/outlook/90-other-item-apis/get-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-subject-read.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#get").click(get); + $("#get").on("click", get); function get() { console.log(`Subject: ${Office.context.mailbox.item.subject}`); diff --git a/samples/outlook/90-other-item-apis/session-data-apis.yaml b/samples/outlook/90-other-item-apis/session-data-apis.yaml index 0947b5ca8..11a06993b 100644 --- a/samples/outlook/90-other-item-apis/session-data-apis.yaml +++ b/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -7,11 +7,11 @@ api_set: Mailbox: '1.11' script: content: | - $("#setSessionData").click(setSessionData); - $("#getSessionData").click(getSessionData); - $("#getAllSessionData").click(getAllSessionData); - $("#removeSessionData").click(removeSessionData); - $("#clearSessionData").click(clearSessionData); + $("#setSessionData").on("click", setSessionData); + $("#getSessionData").on("click", getSessionData); + $("#getAllSessionData").on("click", getAllSessionData); + $("#removeSessionData").on("click", removeSessionData); + $("#clearSessionData").on("click", clearSessionData); function setSessionData() { Office.context.mailbox.item.sessionData.setAsync( "Date", diff --git a/samples/outlook/90-other-item-apis/set-selected-data.yaml b/samples/outlook/90-other-item-apis/set-selected-data.yaml index e98f0c23a..4442411b8 100644 --- a/samples/outlook/90-other-item-apis/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.1' script: content: | - $("#set-selected-data").click(setSelectedData); + $("#set-selected-data").on("click", setSelectedData); function setSelectedData() { Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { diff --git a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml index ac5626b40..23cad0ae8 100644 --- a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml +++ b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -7,11 +7,11 @@ api_set: Mailbox: '1.10' script: content: | - $("#isClientSignatureEnabled").click(isClientSignatureEnabled); - $("#disableClientSignature").click(disableClientSignature); - $("#getComposeType").click(getComposeType); - $("#setSignature").click(setSignature); - $("#setSignatureWithInlineImage").click(setSignatureWithInlineImage); + $("#isClientSignatureEnabled").on("click", isClientSignatureEnabled); + $("#disableClientSignature").on("click", disableClientSignature); + $("#getComposeType").on("click", getComposeType); + $("#setSignature").on("click", setSignature); + $("#setSignatureWithInlineImage").on("click", setSignatureWithInlineImage); function isClientSignatureEnabled() { // Check if the client signature is currently enabled. diff --git a/samples/outlook/99-preview-apis/calendar-properties-apis.yaml b/samples/outlook/99-preview-apis/calendar-properties-apis.yaml index 7119c7dd8..0071ca0fe 100644 --- a/samples/outlook/99-preview-apis/calendar-properties-apis.yaml +++ b/samples/outlook/99-preview-apis/calendar-properties-apis.yaml @@ -7,10 +7,10 @@ api_set: Mailbox: preview script: content: | - $("#getIsAllDayEvent").click(getIsAllDayEvent); - $("#setIsAllDayEventTrue").click(setIsAllDayEventTrue); - $("#getSensitivity").click(getSensitivity); - $("#setSensitivityConfidential").click(setSensitivityConfidential); + $("#getIsAllDayEvent").on("click", getIsAllDayEvent); + $("#setIsAllDayEventTrue").on("click", setIsAllDayEventTrue); + $("#getSensitivity").on("click", getSensitivity); + $("#setSensitivityConfidential").on("click", setSensitivityConfidential); function getIsAllDayEvent() { Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { diff --git a/samples/outlook/99-preview-apis/close-async.yaml b/samples/outlook/99-preview-apis/close-async.yaml index e64b5b4d2..78269c37f 100644 --- a/samples/outlook/99-preview-apis/close-async.yaml +++ b/samples/outlook/99-preview-apis/close-async.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: preview script: content: | - $("#close-async").click(closeAsync); + $("#close-async").on("click", closeAsync); function closeAsync() { // This snippet closes the current message being composed and discards any unsaved changes when the optional property, discardItem, is set to true. diff --git a/samples/outlook/99-preview-apis/get-eml-format.yaml b/samples/outlook/99-preview-apis/get-eml-format.yaml index 7739f760b..a89221a6a 100644 --- a/samples/outlook/99-preview-apis/get-eml-format.yaml +++ b/samples/outlook/99-preview-apis/get-eml-format.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: preview script: content: | - $("#get-eml-format").click(getEmlFormat); + $("#get-eml-format").on("click", getEmlFormat); function getEmlFormat() { Office.context.mailbox.item.getAsFileAsync((asyncResult) => { diff --git a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml index 722728905..a84e6a97b 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -7,8 +7,8 @@ api_set: Mailbox: preview script: content: | - $("#set-body").click(setDisplayedBody); - $("#set-subject").click(setDisplayedSubject); + $("#set-body").on("click", setDisplayedBody); + $("#set-subject").on("click", setDisplayedSubject); function setDisplayedBody() { // This snippet temporarily sets the content displayed in the body of a message in read mode. diff --git a/samples/outlook/default.yaml b/samples/outlook/default.yaml index 03b07809b..b8092cb5c 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -6,7 +6,7 @@ host: OUTLOOK api_set: null script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { const userProfile = Office.context.mailbox.userProfile; diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index b43a99e5d..3e9f4f31d 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -6,7 +6,7 @@ host: POWERPOINT api_set: PowerPointApi '1.4' script: content: | - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); function run() { // This function gets the collection of shapes on the first slide, diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 20de3c96c..37a27057d 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -6,7 +6,7 @@ host: POWERPOINT api_set: PowerPointApi '1.4' script: content: | - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); const run: Function = async () => { // This function gets the collection of shapes on the first slide, diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index fc0d07ea2..c1b11fb51 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -8,7 +8,7 @@ api_set: Selection: 1.1 script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index 175564923..9bffb48d0 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -6,7 +6,7 @@ host: POWERPOINT api_set: {} script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index b11beeb0a..1133c3013 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -7,8 +7,8 @@ api_set: PowerPoint: 1.1 script: content: | - $("#create-new-blank-presentation").click(() => tryCatch(createBlankPresentation)); - $("#file").change(() => tryCatch(createPresentationFromExisting)); + $("#create-new-blank-presentation").on("click", () => tryCatch(createBlankPresentation)); + $("#file").on("change", () => tryCatch(createPresentationFromExisting)); function createBlankPresentation() { PowerPoint.createPresentation(); diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index 4b1d7f071..9901be513 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -7,7 +7,7 @@ host: POWERPOINT api_set: {} script: content: | - $('#insert').click(run); + $('#insert').on("click", run); function run() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { diff --git a/samples/powerpoint/images/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml index b4f8cacf4..b0bb337a1 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -7,7 +7,7 @@ host: POWERPOINT api_set: {} script: content: | - $('#insert').click(newImage); + $('#insert').on("click", newImage); function newImage() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index 6930599d1..224ad4aa4 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -12,7 +12,7 @@ script: */ declare let moment: any; - $("#search").click(run); + $("#search").on("click", run); async function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, {}, getSelectedText); diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 330aa10ec..8e9209ba4 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -7,13 +7,13 @@ api_set: PowerPointApi: '1.5' script: content: | - $("#getSelectedShapes").click(() => tryCatch(getSelectedShapes)); - $("#setSelectedShapes").click(() => tryCatch(setSelectedShapes)); - $("#changeFill").click(() => tryCatch(changeFill)); - $("#saveShapeSelection").click(() => tryCatch(saveShapeSelection)); - $("#loadShapeSelection").click(() => tryCatch(loadShapeSelection)); - $("#createShapes").click(() => tryCatch(createShapes)); - $("#arrangeSelected").click(() => tryCatch(arrangeSelected)); + $("#getSelectedShapes").on("click", () => tryCatch(getSelectedShapes)); + $("#setSelectedShapes").on("click", () => tryCatch(setSelectedShapes)); + $("#changeFill").on("click", () => tryCatch(changeFill)); + $("#saveShapeSelection").on("click", () => tryCatch(saveShapeSelection)); + $("#loadShapeSelection").on("click", () => tryCatch(loadShapeSelection)); + $("#createShapes").on("click", () => tryCatch(createShapes)); + $("#arrangeSelected").on("click", () => tryCatch(arrangeSelected)); async function getSelectedShapes() { // Gets the shapes you selected on the slide and displays their IDs on the task pane. diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index b8c93987a..9ca8e45ba 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -5,13 +5,13 @@ host: POWERPOINT api_set: PowerPointApi '1.4' script: content: | - $("#create-hexagon").click(() => tryCatch(createHexagon)); - $("#shrink-hexagon").click(() => tryCatch(shrinkHexagon)); - $("#move-hexagon").click(() => tryCatch(moveHexagon)); - $("#create-line").click(() => tryCatch(createLine)); - $("#create-text-box").click(() => tryCatch(createTextBox)); - $("#create-shape-with-text").click(() => tryCatch(createShapeWithText)); - $("#remove-all").click(() => tryCatch(removeAll)); + $("#create-hexagon").on("click", () => tryCatch(createHexagon)); + $("#shrink-hexagon").on("click", () => tryCatch(shrinkHexagon)); + $("#move-hexagon").on("click", () => tryCatch(moveHexagon)); + $("#create-line").on("click", () => tryCatch(createLine)); + $("#create-text-box").on("click", () => tryCatch(createTextBox)); + $("#create-shape-with-text").on("click", () => tryCatch(createShapeWithText)); + $("#remove-all").on("click", () => tryCatch(removeAll)); async function createHexagon() { // This function gets the collection of shapes on the first slide, diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 75fe109b1..e4263c4bd 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -7,8 +7,8 @@ api_set: PowerPointApi: '1.3' script: content: | - $("#slide-masters").click(() => tryCatch(logSlideMasters)); - $("#add-slide").click(() => tryCatch(addSlide)); + $("#slide-masters").on("click", () => tryCatch(logSlideMasters)); + $("#add-slide").on("click", () => tryCatch(addSlide)); async function addSlide() { const chosenMaster = $("#master-id").val() as string; diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index 7096e5448..ba5abe517 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -7,11 +7,11 @@ api_set: PowerPointApi: '1.5' script: content: |- - $("#getSelectedSlides").click(() => tryCatch(getSelectedSlides)); - $("#setSelectedSlides").click(() => tryCatch(setSelectedSlides)); - $("#deleteSlides").click(() => tryCatch(deleteSlides)); - $("#saveSlideSelection").click(() => tryCatch(saveSlideSelection)); - $("#loadSlideSelection").click(() => tryCatch(loadSlideSelection)); + $("#getSelectedSlides").on("click", () => tryCatch(getSelectedSlides)); + $("#setSelectedSlides").on("click", () => tryCatch(setSelectedSlides)); + $("#deleteSlides").on("click", () => tryCatch(deleteSlides)); + $("#saveSlideSelection").on("click", () => tryCatch(saveSlideSelection)); + $("#loadSlideSelection").on("click", () => tryCatch(loadSlideSelection)); async function getSelectedSlides() { // Gets the selected slides and displays their IDs on the task pane. diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index c507d2d43..832f1d030 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -7,7 +7,7 @@ host: POWERPOINT api_set: {} script: content: |- - $("#get-slide-metadata").click(getSlideMetadata); + $("#get-slide-metadata").on("click", getSlideMetadata); function getSlideMetadata() { Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 73b182b99..607c8eace 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -7,9 +7,9 @@ api_set: PowerPointApi: '1.2' script: content: | - $("#insert-all-slides").click(() => tryCatch(insertAllSlides)); - $("#insert-after-target-slide").click(() => tryCatch(insertAfterSelectedSlide)); - $("#file").change(() => tryCatch(storeFileAsBase64)); + $("#insert-all-slides").on("click", () => tryCatch(insertAllSlides)); + $("#insert-after-target-slide").on("click", () => tryCatch(insertAfterSelectedSlide)); + $("#file").on("change", () => tryCatch(storeFileAsBase64)); let chosenFileBase64; diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 52fda7222..08b0be75b 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -6,12 +6,12 @@ api_set: PowerPointApi: '1.3' script: content: | - $("#add-selected-slide-tag").click(() => tryCatch(addTagToSelectedSlide)); - $("#delete-slides-by-audience").click(() => tryCatch(deleteSlidesByAudience)); - $("#add-slide-tags").click(() => tryCatch(addMultipleSlideTags)); - $("#add-shape-tag").click(() => tryCatch(addShapeTag)); - $("#add-presentation-tag").click(() => tryCatch(addPresentationTag)); - $("#delete-presentation-tag").click(() => tryCatch(deletePresentationTag)); + $("#add-selected-slide-tag").on("click", () => tryCatch(addTagToSelectedSlide)); + $("#delete-slides-by-audience").on("click", () => tryCatch(deleteSlidesByAudience)); + $("#add-slide-tags").on("click", () => tryCatch(addMultipleSlideTags)); + $("#add-shape-tag").on("click", () => tryCatch(addShapeTag)); + $("#add-presentation-tag").on("click", () => tryCatch(addPresentationTag)); + $("#delete-presentation-tag").on("click", () => tryCatch(deletePresentationTag)); async function addTagToSelectedSlide() { await PowerPoint.run(async function(context) { diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index 4f3320093..eb5263b48 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -7,11 +7,11 @@ api_set: PowerPointApi: '1.5' script: content: | - $("#getSelectedTextRange").click(() => tryCatch(getSelectedTextRange)); - $("#setSelectedTextRange").click(() => tryCatch(setSelectedTextRange)); - $("#changeColor").click(() => tryCatch(changeColor)); - $("#saveTextSelection").click(() => tryCatch(saveTextSelection)); - $("#loadTextSelection").click(() => tryCatch(loadTextSelection)); + $("#getSelectedTextRange").on("click", () => tryCatch(getSelectedTextRange)); + $("#setSelectedTextRange").on("click", () => tryCatch(setSelectedTextRange)); + $("#changeColor").on("click", () => tryCatch(changeColor)); + $("#saveTextSelection").on("click", () => tryCatch(saveTextSelection)); + $("#loadTextSelection").on("click", () => tryCatch(loadTextSelection)); async function getSelectedTextRange() { // Gets the selected text range and prints data about the range on the task pane. diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index 5e15a37cc..3b73ebcef 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -8,7 +8,7 @@ api_set: Selection: 1.1 script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { diff --git a/samples/project/default.yaml b/samples/project/default.yaml index 4e90aaa56..0d31b13fb 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -6,7 +6,7 @@ host: PROJECT api_set: {} script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { diff --git a/samples/web/default.yaml b/samples/web/default.yaml index b8b93782f..470013de6 100644 --- a/samples/web/default.yaml +++ b/samples/web/default.yaml @@ -6,7 +6,7 @@ host: WEB api_set: {} script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { console.log("Your code goes here"); diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 9c5f8b405..4ae9817f8 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -8,7 +8,7 @@ api_set: WordApi: '1.1' script: content: |- - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); function run() { return Word.run(function (context) { diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 822c891e6..a9017ef63 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -8,7 +8,7 @@ api_set: WordApi: '1.1' script: content: |- - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); async function run() { // Gets the current selection and changes the font color to red. diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index 8fa401ce0..299ead7ab 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -8,7 +8,7 @@ api_set: Selection: 1.1 script: content: | - $("#run").click(run); + $("#run").on("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 82b0c85a2..17b277280 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.5' script: content: | - $("#register-event-handler").click(() => tryCatch(registerEventHandler)); - $("#insert-content-controls").click(() => tryCatch(insertContentControls)); - $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); - $("#setup").click(() => tryCatch(setup)); + $("#register-event-handler").on("click", () => tryCatch(registerEventHandler)); + $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); + $("#deregister-event-handler").on("click", () => tryCatch(deregisterEventHandler)); + $("#setup").on("click", () => tryCatch(setup)); let eventContext; diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 4b054e846..2997c1269 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.5' script: content: | - $("#insert-content-controls").click(() => tryCatch(insertContentControls)); - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); let eventContexts = []; diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index 58c77c5a5..4f556d67c 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -7,11 +7,11 @@ api_set: WordApi: '1.5' script: content: | - $("#insert-content-controls").click(() => tryCatch(insertContentControls)); - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); - $("#delete-content-control").click(() => tryCatch(deleteContentControl)); - $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#delete-content-control").on("click", () => tryCatch(deleteContentControl)); + $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); let eventContexts = []; diff --git a/samples/word/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index 249e2b31a..353867342 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.5' script: content: | - $("#insert-content-controls").click(() => tryCatch(insertContentControls)); - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); let eventContexts = []; diff --git a/samples/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index 925d4bda2..f8ae816db 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.5' script: content: | - $("#insert-content-controls").click(() => tryCatch(insertContentControls)); - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); let eventContexts = []; diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index bb59c443e..3d8d86643 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.5' script: content: | - $("#insert-content-controls").click(() => tryCatch(insertContentControls)); - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); let eventContexts = []; diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index ccc108856..e9fe7ac4b 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.1' script: content: | - $("#insert-controls").click(() => tryCatch(insertContentControls)); - $("#change-controls").click(() => tryCatch(modifyContentControls)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-controls").on("click", () => tryCatch(insertContentControls)); + $("#change-controls").on("click", () => tryCatch(modifyContentControls)); + $("#setup").on("click", () => tryCatch(setup)); async function insertContentControls() { // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags. diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 48aa5fdeb..884815d88 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.1' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#insert").click(() => tryCatch(insertImage)); - $("#get").click(() => tryCatch(getImage)); + $("#setup").on("click", () => tryCatch(setup)); + $("#insert").on("click", () => tryCatch(insertImage)); + $("#get").on("click", () => tryCatch(getImage)); async function insertImage() { // Inserts an image anchored to the last paragraph. diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 359355e8a..f8da1a686 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -8,8 +8,8 @@ api_set: WordApi: '1.3' script: content: | - $("#insert-list").click(() => tryCatch(insertList)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-list").on("click", () => tryCatch(insertList)); + $("#setup").on("click", () => tryCatch(setup)); async function insertList() { // This example starts a new list with the second paragraph. diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 27b570e0c..08e17b121 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.3' script: content: | - $("#insert-list").click(() => tryCatch(insertOrganizeList)); - $("#get-list-props").click(() => tryCatch(getListProps)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-list").on("click", () => tryCatch(insertOrganizeList)); + $("#get-list-props").on("click", () => tryCatch(getListProps)); + $("#setup").on("click", () => tryCatch(setup)); async function insertOrganizeList() { // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. diff --git a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index 24879ac21..1b1fba7ec 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.1' script: content: | - $("#get-paragraph").click(() => tryCatch(getParagraph)); - $("#get-sentences").click(() => tryCatch(getSentences)); - $("#setup").click(() => tryCatch(setup)); + $("#get-paragraph").on("click", () => tryCatch(getParagraph)); + $("#get-sentences").on("click", () => tryCatch(getSentences)); + $("#setup").on("click", () => tryCatch(setup)); async function getParagraph() { await Word.run(async (context) => { diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index 66e726b12..e0fe92f7a 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -8,8 +8,8 @@ api_set: WordApi: '1.7' script: content: | - $("#run").click(() => tryCatch(run)); - $("#setup").click(() => tryCatch(setup)); + $("#run").on("click", () => tryCatch(run)); + $("#setup").on("click", () => tryCatch(setup)); async function run() { await Word.run(async (context) => { diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 61036bb90..840ebd558 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -8,8 +8,8 @@ api_set: WordApi: '1.1' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#count").click(() => tryCatch(run)); + $("#setup").on("click", () => tryCatch(setup)); + $("#count").on("click", () => tryCatch(run)); async function run() { // Counts how many times each term appears in the document. diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 654172b82..cd0c29cce 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.1' script: content: |- - $("#add-text").click(() => tryCatch(addFormattedText)); - $("#add-paragraph").click(() => tryCatch(addFormattedParagraph)); - $("#add-preset").click(() => tryCatch(addPreStyledFormattedText)); + $("#add-text").on("click", () => tryCatch(addFormattedText)); + $("#add-paragraph").on("click", () => tryCatch(addFormattedParagraph)); + $("#add-preset").on("click", () => tryCatch(addPreStyledFormattedText)); async function addFormattedText() { await Word.run(async (context) => { diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index 19f63e158..81f4cb4e5 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -8,13 +8,13 @@ api_set: WordApi: '1.1' script: content: | - $("#add-header").click(() => tryCatch(addHeader)); - $("#add-footer").click(() => tryCatch(addFooter)); - $("#add-first-page-header").click(() => tryCatch(addFirstPageHeader)); - $("#add-first-page-footer").click(() => tryCatch(addFirstPageFooter)); - $("#add-even-pages-header").click(() => tryCatch(addEvenPagesHeader)); - $("#add-even-pages-footer").click(() => tryCatch(addEvenPagesFooter)); - $("#setup").click(() => tryCatch(setup)); + $("#add-header").on("click", () => tryCatch(addHeader)); + $("#add-footer").on("click", () => tryCatch(addFooter)); + $("#add-first-page-header").on("click", () => tryCatch(addFirstPageHeader)); + $("#add-first-page-footer").on("click", () => tryCatch(addFirstPageFooter)); + $("#add-even-pages-header").on("click", () => tryCatch(addEvenPagesHeader)); + $("#add-even-pages-footer").on("click", () => tryCatch(addEvenPagesFooter)); + $("#setup").on("click", () => tryCatch(setup)); async function addHeader() { await Word.run(async (context) => { diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index d92558904..4695c9889 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -8,12 +8,12 @@ api_set: WordApi: '1.2' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#before").click(() => tryCatch(before)); - $("#start").click(() => tryCatch(start)); - $("#end").click(() => tryCatch(end)); - $("#after").click(() => tryCatch(after)); - $("#replace").click(() => tryCatch(replace)); + $("#setup").on("click", () => tryCatch(setup)); + $("#before").on("click", () => tryCatch(before)); + $("#start").on("click", () => tryCatch(start)); + $("#end").on("click", () => tryCatch(end)); + $("#after").on("click", () => tryCatch(after)); + $("#replace").on("click", () => tryCatch(replace)); async function before() { await Word.run(async (context) => { diff --git a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml index 3b370491a..9d25e185a 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.2' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#line").click(() => tryCatch(insertLineBreak)); - $("#page").click(() => tryCatch(insertPageBreak)); + $("#setup").on("click", () => tryCatch(setup)); + $("#line").on("click", () => tryCatch(insertLineBreak)); + $("#page").on("click", () => tryCatch(insertPageBreak)); async function insertLineBreak() { Word.run(async (context) => { diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index dfcf4f04f..33d734e61 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.6' script: content: | - $("#register-event-handler").click(() => tryCatch(registerEventHandler)); - $("#insert-paragraphs").click(() => tryCatch(insertParagraphs)); - $("#get-paragraph-by-id").click(() => tryCatch(getParagraphById)); - $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); + $("#register-event-handler").on("click", () => tryCatch(registerEventHandler)); + $("#insert-paragraphs").on("click", () => tryCatch(insertParagraphs)); + $("#get-paragraph-by-id").on("click", () => tryCatch(getParagraphById)); + $("#deregister-event-handler").on("click", () => tryCatch(deregisterEventHandler)); let eventContext; diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index 79f7582a0..7f3949d7d 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.6' script: content: | - $("#register-event-handler").click(() => tryCatch(registerEventHandler)); - $("#get-paragraph-by-id").click(() => tryCatch(getParagraphById)); - $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); - $("#setup").click(() => tryCatch(setup)); + $("#register-event-handler").on("click", () => tryCatch(registerEventHandler)); + $("#get-paragraph-by-id").on("click", () => tryCatch(getParagraphById)); + $("#deregister-event-handler").on("click", () => tryCatch(deregisterEventHandler)); + $("#setup").on("click", () => tryCatch(setup)); let eventContext; diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index dfb62f43c..218aefc73 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.6' script: content: | - $("#register-event-handler").click(() => tryCatch(registerEventHandler)); - $("#delete-paragraph").click(() => tryCatch(deleteParagraph)); - $("#deregister-event-handler").click(() => tryCatch(deregisterEventHandler)); - $("#setup").click(() => tryCatch(setup)); + $("#register-event-handler").on("click", () => tryCatch(registerEventHandler)); + $("#delete-paragraph").on("click", () => tryCatch(deleteParagraph)); + $("#deregister-event-handler").on("click", () => tryCatch(deregisterEventHandler)); + $("#setup").on("click", () => tryCatch(setup)); let eventContext; diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index c011d7de3..bb4ba5708 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -8,13 +8,13 @@ api_set: WordApi: '1.1' script: content: | - $("#indent").click(() => tryCatch(indent)); - $("#spacing").click(() => tryCatch(spacing)); - $("#space-after").click(() => tryCatch(spaceAfter)); - $("#line-unit-spacing-after").click(() => tryCatch(spaceAfterInLines)); - $("#line-unit-spacing-before").click(() => tryCatch(spaceBeforeInLines)); - $("#align").click(() => tryCatch(align)); - $("#setup").click(() => tryCatch(setup)); + $("#indent").on("click", () => tryCatch(indent)); + $("#spacing").on("click", () => tryCatch(spacing)); + $("#space-after").on("click", () => tryCatch(spaceAfter)); + $("#line-unit-spacing-after").on("click", () => tryCatch(spaceAfterInLines)); + $("#line-unit-spacing-before").on("click", () => tryCatch(spaceBeforeInLines)); + $("#align").on("click", () => tryCatch(align)); + $("#setup").on("click", () => tryCatch(setup)); async function indent() { await Word.run(async (context) => { diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index bfc17600e..5d851551f 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.1' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#basic-search").click(() => tryCatch(basicSearch)); - $("#wildcard-search").click(() => tryCatch(wildcardSearch)); + $("#setup").on("click", () => tryCatch(setup)); + $("#basic-search").on("click", () => tryCatch(basicSearch)); + $("#wildcard-search").on("click", () => tryCatch(wildcardSearch)); async function basicSearch() { // Does a basic text search and highlights matches in the document. diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 6c7ecef07..6160ca9ac 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -8,7 +8,7 @@ api_set: WordApi: '1.1' script: content: |- - $("#run").click(() => tryCatch(getProperties)); + $("#run").on("click", () => tryCatch(getProperties)); async function getProperties() { await Word.run(async (context) => { diff --git a/samples/word/30-properties/read-write-custom-document-properties.yaml b/samples/word/30-properties/read-write-custom-document-properties.yaml index 206497230..74fb1b0d5 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.3' script: content: |- - $("#number").click(() => tryCatch(insertNumericProperty)); - $("#string").click(() => tryCatch(insertStringProperty)); - $("#read").click(() => tryCatch(readCustomDocumentProperties)); + $("#number").on("click", () => tryCatch(insertNumericProperty)); + $("#string").on("click", () => tryCatch(insertStringProperty)); + $("#read").on("click", () => tryCatch(readCustomDocumentProperties)); async function insertNumericProperty() { await Word.run(async (context) => { diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml index e52848e22..a7bcf3ad0 100644 --- a/samples/word/35-ranges/compare-location.yaml +++ b/samples/word/35-ranges/compare-location.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.3' script: content: | - $("#compare").click(() => tryCatch(compareLocations)); - $("#compare-to-selection").click(() => tryCatch(compareWithSelection)); - $("#setup").click(() => tryCatch(setup)); + $("#compare").on("click", () => tryCatch(compareLocations)); + $("#compare-to-selection").on("click", () => tryCatch(compareWithSelection)); + $("#setup").on("click", () => tryCatch(setup)); async function compareLocations() { // Compares the location of one paragraph in relation to another paragraph. diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index 45e2cf3d5..4d109f744 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.2' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#scroll").click(() => tryCatch(scroll)); - $("#scroll-end").click(() => tryCatch(scrollEnd)); + $("#setup").on("click", () => tryCatch(setup)); + $("#scroll").on("click", () => tryCatch(scroll)); + $("#scroll-end").on("click", () => tryCatch(scrollEnd)); async function scroll() { await Word.run(async (context) => { diff --git a/samples/word/35-ranges/split-words-of-first-paragraph.yaml b/samples/word/35-ranges/split-words-of-first-paragraph.yaml index 2d455b976..ce615d930 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -8,8 +8,8 @@ api_set: WordApi: '1.3' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#highlight").click(() => tryCatch(highlightWords)); + $("#setup").on("click", () => tryCatch(setup)); + $("#highlight").on("click", () => tryCatch(highlightWords)); async function highlightWords() { await Word.run(async (context) => { diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index 6920d9585..4f5bced69 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -8,16 +8,16 @@ api_set: WordApi: '1.3' script: content: | - $("#get-table-alignment").click(() => tryCatch(getTableAlignment)); - $("#get-table-border").click(() => tryCatch(getTableBorder)); - $("#get-table-cell-padding").click(() => tryCatch(getTableCellPadding)); - $("#get-table-row-alignment").click(() => tryCatch(getTableRowAlignment)); - $("#get-table-row-border").click(() => tryCatch(getTableRowBorder)); - $("#get-table-row-cell-padding").click(() => tryCatch(getTableRowCellPadding)); - $("#get-table-cell-alignment").click(() => tryCatch(getTableCellAlignment)); - $("#get-table-cell-border").click(() => tryCatch(getTableCellBorder)); - $("#get-table-cell-cell-padding").click(() => tryCatch(getTableCellCellPadding)); - $("#setup").click(() => tryCatch(insertTable)); + $("#get-table-alignment").on("click", () => tryCatch(getTableAlignment)); + $("#get-table-border").on("click", () => tryCatch(getTableBorder)); + $("#get-table-cell-padding").on("click", () => tryCatch(getTableCellPadding)); + $("#get-table-row-alignment").on("click", () => tryCatch(getTableRowAlignment)); + $("#get-table-row-border").on("click", () => tryCatch(getTableRowBorder)); + $("#get-table-row-cell-padding").on("click", () => tryCatch(getTableRowCellPadding)); + $("#get-table-cell-alignment").on("click", () => tryCatch(getTableCellAlignment)); + $("#get-table-cell-border").on("click", () => tryCatch(getTableCellBorder)); + $("#get-table-cell-cell-padding").on("click", () => tryCatch(getTableCellCellPadding)); + $("#setup").on("click", () => tryCatch(insertTable)); async function getTableAlignment() { // Gets alignment details about the first table in the document. diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index ae0a11384..ea26d40e4 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -8,8 +8,8 @@ api_set: WordApi: '1.3' script: content: |- - $("#run").click(() => tryCatch(getTableCell)); - $("#setup").click(() => tryCatch(insertTable)); + $("#run").on("click", () => tryCatch(getTableCell)); + $("#setup").on("click", () => tryCatch(insertTable)); async function getTableCell() { // Gets the content of the first cell in the first table. diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 41798bd3e..ba0708721 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -7,9 +7,9 @@ api_set: WordApi: '1.7' script: content: | - $("#file").change(getBase64); - $("#insert-document").click(() => tryCatch(insertDocument)); - $("#insert-document-with-settings").click(() => tryCatch(insertDocumentWithSettings)); + $("#file").on("change", getBase64); + $("#insert-document").on("click", () => tryCatch(insertDocument)); + $("#insert-document-with-settings").on("click", () => tryCatch(insertDocumentWithSettings)); let externalDocument; diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index c38b7feae..a28158469 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -7,11 +7,11 @@ api_set: WordApi: '1.1' script: content: | - $("#add-sectionNext").click(() => tryCatch(addNext)); - $("#add-sectionEven").click(() => tryCatch(addEven)); - $("#add-sectionOdd").click(() => tryCatch(addOdd)); - $("#add-sectionContinuous").click(() => tryCatch(addContinuous)); - $("#setup").click(() => tryCatch(setup)); + $("#add-sectionNext").on("click", () => tryCatch(addNext)); + $("#add-sectionEven").on("click", () => tryCatch(addEven)); + $("#add-sectionOdd").on("click", () => tryCatch(addOdd)); + $("#add-sectionContinuous").on("click", () => tryCatch(addContinuous)); + $("#setup").on("click", () => tryCatch(setup)); async function addNext() { // Inserts a section break on the next page. diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 2b100d1d9..051a7ab4b 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -8,14 +8,14 @@ api_set: WordApi: '1.7' script: content: | - $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); - $("#insert-annotations").click(() => tryCatch(insertAnnotations)); - $("#get-annotations").click(() => tryCatch(getAnnotations)); - $("#accept-first").click(() => tryCatch(acceptFirst)); - $("#reject-last").click(() => tryCatch(rejectLast)); - $("#delete-annotations").click(() => tryCatch(deleteAnnotations)); - $("#deregister-event-handlers").click(() => tryCatch(deregisterEventHandlers)); - $("#setup").click(() => tryCatch(setup)); + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#insert-annotations").on("click", () => tryCatch(insertAnnotations)); + $("#get-annotations").on("click", () => tryCatch(getAnnotations)); + $("#accept-first").on("click", () => tryCatch(acceptFirst)); + $("#reject-last").on("click", () => tryCatch(rejectLast)); + $("#delete-annotations").on("click", () => tryCatch(deleteAnnotations)); + $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); let eventContexts = []; diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index dc43e06c2..28ac0ef5b 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -8,22 +8,22 @@ api_set: WordApi: '1.2' script: content: | - $("#get-font-props").click(() => tryCatch(getFontProperties)); - $("#get-html").click(() => tryCatch(getHTML)); - $("#get-ooxml").click(() => tryCatch(getOOXML)); - $("#get-text").click(() => tryCatch(getText)); - $("#insert-content-control").click(() => tryCatch(insertContentControl)); - $("#insert-page-break").click(() => tryCatch(insertPageBreak)); - $("#file").change(getBase64); - $("#insert-external-body").click(() => tryCatch(insertExternalBody)); - $("#insert-html").click(() => tryCatch(insertHTML)); - $("#insert-image-inline").click(() => tryCatch(insertImageInline)); - $("#insert-ooxml").click(() => tryCatch(insertOOXML)); - $("#insert-text").click(() => tryCatch(insertText)); - $("#select").click(() => tryCatch(select)); - $("#clear").click(() => tryCatch(clear)); - $("#insert-paragraph").click(() => tryCatch(insertParagraph)); - $("#setup").click(() => tryCatch(setup)); + $("#get-font-props").on("click", () => tryCatch(getFontProperties)); + $("#get-html").on("click", () => tryCatch(getHTML)); + $("#get-ooxml").on("click", () => tryCatch(getOOXML)); + $("#get-text").on("click", () => tryCatch(getText)); + $("#insert-content-control").on("click", () => tryCatch(insertContentControl)); + $("#insert-page-break").on("click", () => tryCatch(insertPageBreak)); + $("#file").on("change", getBase64); + $("#insert-external-body").on("click", () => tryCatch(insertExternalBody)); + $("#insert-html").on("click", () => tryCatch(insertHTML)); + $("#insert-image-inline").on("click", () => tryCatch(insertImageInline)); + $("#insert-ooxml").on("click", () => tryCatch(insertOOXML)); + $("#insert-text").on("click", () => tryCatch(insertText)); + $("#select").on("click", () => tryCatch(select)); + $("#clear").on("click", () => tryCatch(clear)); + $("#insert-paragraph").on("click", () => tryCatch(insertParagraph)); + $("#setup").on("click", () => tryCatch(setup)); async function getFontProperties() { // Gets the style and the font size, font name, and font color properties on the body object. diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 6e2ef4e6c..233e4681f 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -7,10 +7,10 @@ api_set: WordApi: '1.4' script: content: | - $("#get-change-tracking-mode").click(() => tryCatch(getChangeTrackingMode)); - $("#set-change-tracking-mode").click(() => tryCatch(setChangeTrackingMode)); - $("#get-reviewed-text").click(() => tryCatch(getReviewedText)); - $("#setup").click(() => tryCatch(setup)); + $("#get-change-tracking-mode").on("click", () => tryCatch(getChangeTrackingMode)); + $("#set-change-tracking-mode").on("click", () => tryCatch(setChangeTrackingMode)); + $("#get-reviewed-text").on("click", () => tryCatch(getReviewedText)); + $("#setup").on("click", () => tryCatch(setup)); async function getChangeTrackingMode() { // Gets the current change tracking mode. diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 6419c912e..b1b72c157 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -7,15 +7,15 @@ api_set: WordApi: '1.4' script: content: | - $("#insert").click(() => tryCatch(insertComment)); - $("#edit").click(() => tryCatch(editFirstCommentInSelection)); - $("#reply").click(() => tryCatch(replyToFirstActiveCommentInSelection)); - $("#resolve").click(() => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); - $("#range").click(() => tryCatch(getFirstCommentRange)); - $("#get-comments-in-selection").click(() => tryCatch(getCommentsInSelection)); - $("#delete").click(() => tryCatch(deleteFirstCommentInSelection)); - $("#get-comments").click(() => tryCatch(getComments)); - $("#setup").click(() => tryCatch(setup)); + $("#insert").on("click", () => tryCatch(insertComment)); + $("#edit").on("click", () => tryCatch(editFirstCommentInSelection)); + $("#reply").on("click", () => tryCatch(replyToFirstActiveCommentInSelection)); + $("#resolve").on("click", () => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); + $("#range").on("click", () => tryCatch(getFirstCommentRange)); + $("#get-comments-in-selection").on("click", () => tryCatch(getCommentsInSelection)); + $("#delete").on("click", () => tryCatch(deleteFirstCommentInSelection)); + $("#get-comments").on("click", () => tryCatch(getComments)); + $("#setup").on("click", () => tryCatch(setup)); async function insertComment() { // Sets a comment on the selected content. diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 556fba94e..137c28799 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -7,13 +7,13 @@ api_set: WordApi: '1.4' script: content: | - $("#add-custom-xml-part").click(() => tryCatch(addCustomXmlPart)); - $("#query").click(() => tryCatch(query)); - $("#get-namespace").click(() => tryCatch(getNamespace)); - $("#replace-custom-xml-part").click(() => tryCatch(replace)); - $("#insert-attribute").click(() => tryCatch(insertAttribute)); - $("#insert-element").click(() => tryCatch(insertElement)); - $("#delete-custom-xml-part").click(() => tryCatch(deleteCustomXmlPart)); + $("#add-custom-xml-part").on("click", () => tryCatch(addCustomXmlPart)); + $("#query").on("click", () => tryCatch(query)); + $("#get-namespace").on("click", () => tryCatch(getNamespace)); + $("#replace-custom-xml-part").on("click", () => tryCatch(replace)); + $("#insert-attribute").on("click", () => tryCatch(insertAttribute)); + $("#insert-element").on("click", () => tryCatch(insertElement)); + $("#delete-custom-xml-part").on("click", () => tryCatch(deleteCustomXmlPart)); async function addCustomXmlPart() { // Adds a custom XML part. diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 8973a568b..b9cdabe47 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -7,11 +7,11 @@ api_set: WordApi: '1.4' script: content: | - $("#add-custom-xml-part").click(() => tryCatch(addCustomXmlPart)); - $("#query").click(() => tryCatch(query)); - $("#insert-attribute").click(() => tryCatch(insertAttribute)); - $("#insert-element").click(() => tryCatch(insertElement)); - $("#delete-custom-xml-part").click(() => tryCatch(deleteCustomXmlPart)); + $("#add-custom-xml-part").on("click", () => tryCatch(addCustomXmlPart)); + $("#query").on("click", () => tryCatch(query)); + $("#insert-attribute").on("click", () => tryCatch(insertAttribute)); + $("#insert-element").on("click", () => tryCatch(insertElement)); + $("#delete-custom-xml-part").on("click", () => tryCatch(deleteCustomXmlPart)); async function addCustomXmlPart() { // Adds a custom XML part. diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index 284916531..17732b633 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -7,14 +7,14 @@ api_set: WordApi: '1.5' script: content: | - $("#insert-date-field").click(() => tryCatch(rangeInsertDateField)); - $("#get-first").click(() => tryCatch(getFirstField)); - $("#get-parent-body").click(() => tryCatch(getParentBodyOfFirstField)); - $("#get-all").click(() => tryCatch(getAllFields)); - $("#get-selected-field-and-update").click(() => tryCatch(getSelectedFieldAndUpdate)); - $("#get-selected-field-and-lock-or-unlock").click(() => tryCatch(getFieldAndLockOrUnlock)); - $("#delete-first-field").click(() => tryCatch(deleteFirstField)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-date-field").on("click", () => tryCatch(rangeInsertDateField)); + $("#get-first").on("click", () => tryCatch(getFirstField)); + $("#get-parent-body").on("click", () => tryCatch(getParentBodyOfFirstField)); + $("#get-all").on("click", () => tryCatch(getAllFields)); + $("#get-selected-field-and-update").on("click", () => tryCatch(getSelectedFieldAndUpdate)); + $("#get-selected-field-and-lock-or-unlock").on("click", () => tryCatch(getFieldAndLockOrUnlock)); + $("#delete-first-field").on("click", () => tryCatch(deleteFirstField)); + $("#setup").on("click", () => tryCatch(setup)); async function rangeInsertDateField() { // Inserts a Date field before selection. diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 65fabfb41..4a18fb986 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -7,16 +7,16 @@ api_set: WordApi: '1.5' script: content: | - $("#insert-footnote").click(() => tryCatch(insertFootnote)); - $("#get-reference").click(() => tryCatch(getReference)); - $("#get-footnote-type").click(() => tryCatch(getFootnoteType)); - $("#get-footnote-body").click(() => tryCatch(getFootnoteBody)); - $("#get-next-footnote").click(() => tryCatch(getNextFootnote)); - $("#delete-footnote").click(() => tryCatch(deleteFootnote)); - $("#get-first-footnote").click(() => tryCatch(getFirstFootnote)); - $("#get-footnotes-from-body").click(() => tryCatch(getFootnotesFromBody)); - $("#get-footnotes-from-range").click(() => tryCatch(getFootnotesFromRange)); - $("#setup").click(() => tryCatch(setup)); + $("#insert-footnote").on("click", () => tryCatch(insertFootnote)); + $("#get-reference").on("click", () => tryCatch(getReference)); + $("#get-footnote-type").on("click", () => tryCatch(getFootnoteType)); + $("#get-footnote-body").on("click", () => tryCatch(getFootnoteBody)); + $("#get-next-footnote").on("click", () => tryCatch(getNextFootnote)); + $("#delete-footnote").on("click", () => tryCatch(deleteFootnote)); + $("#get-first-footnote").on("click", () => tryCatch(getFirstFootnote)); + $("#get-footnotes-from-body").on("click", () => tryCatch(getFootnotesFromBody)); + $("#get-footnotes-from-range").on("click", () => tryCatch(getFootnotesFromRange)); + $("#setup").on("click", () => tryCatch(setup)); async function insertFootnote() { // Sets a footnote on the selected content. diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index c40a72290..7e53de92c 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -7,9 +7,9 @@ api_set: WordApi: '1.4' script: content: | - $("#add-edit-setting").click(() => tryCatch(addEditSetting)); - $("#get-all-settings").click(() => tryCatch(getAllSettings)); - $("#delete-all-settings").click(() => tryCatch(deleteAllSettings)); + $("#add-edit-setting").on("click", () => tryCatch(addEditSetting)); + $("#get-all-settings").on("click", () => tryCatch(getAllSettings)); + $("#delete-all-settings").on("click", () => tryCatch(deleteAllSettings)); async function addEditSetting() { // Adds a new custom setting or diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index da90e66be..236cf3120 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -7,14 +7,14 @@ api_set: WordApi: '1.6' script: content: | - $("#get-all-tracked-changes").click(() => tryCatch(getAllTrackedChanges)); - $("#get-first-tracked-change-range").click(() => tryCatch(getFirstTrackedChangeRange)); - $("#get-next-tracked-change").click(() => tryCatch(getNextTrackedChange)); - $("#accept-first-tracked-change").click(() => tryCatch(acceptFirstTrackedChange)); - $("#reject-first-tracked-change").click(() => tryCatch(rejectFirstTrackedChange)); - $("#accept-all-tracked-changes").click(() => tryCatch(acceptAllTrackedChanges)); - $("#reject-all-tracked-changes").click(() => tryCatch(rejectAllTrackedChanges)); - $("#setup").click(() => tryCatch(setup)); + $("#get-all-tracked-changes").on("click", () => tryCatch(getAllTrackedChanges)); + $("#get-first-tracked-change-range").on("click", () => tryCatch(getFirstTrackedChangeRange)); + $("#get-next-tracked-change").on("click", () => tryCatch(getNextTrackedChange)); + $("#accept-first-tracked-change").on("click", () => tryCatch(acceptFirstTrackedChange)); + $("#reject-first-tracked-change").on("click", () => tryCatch(rejectFirstTrackedChange)); + $("#accept-all-tracked-changes").on("click", () => tryCatch(acceptAllTrackedChanges)); + $("#reject-all-tracked-changes").on("click", () => tryCatch(rejectAllTrackedChanges)); + $("#setup").on("click", () => tryCatch(setup)); async function getAllTrackedChanges() { // Gets all tracked changes. diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 15c004919..86c83b1b4 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -7,12 +7,12 @@ api_set: WordApi: '1.5' script: content: | - $("#save-no-prompt").click(() => tryCatch(saveNoPrompt)); - $("#save-after-prompt").click(() => tryCatch(saveAfterPrompt)); - $("#close-after-save").click(() => tryCatch(closeAfterSave)); - $("#close-no-save").click(() => tryCatch(closeWithoutSave)); - $("#save").click(() => tryCatch(save)); - $("#close").click(() => tryCatch(close)); + $("#save-no-prompt").on("click", () => tryCatch(saveNoPrompt)); + $("#save-after-prompt").on("click", () => tryCatch(saveAfterPrompt)); + $("#close-after-save").on("click", () => tryCatch(closeAfterSave)); + $("#close-no-save").on("click", () => tryCatch(closeWithoutSave)); + $("#save").on("click", () => tryCatch(save)); + $("#close").on("click", () => tryCatch(close)); async function saveNoPrompt() { // Saves the document with the provided file name diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 3ab087497..d7e13f7f2 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -8,11 +8,11 @@ api_set: WordApi: '1.1' script: content: |- - $("#insert-header").click(() => tryCatch(insertHeader)); - $("#add-paragraphs").click(() => tryCatch(addParagraphs)); - $("#add-content-controls").click(() => tryCatch(addContentControls)); - $("#change-customer").click(() => tryCatch(changeCustomer)); - $("#add-footer").click(() => tryCatch(addFooter)); + $("#insert-header").on("click", () => tryCatch(insertHeader)); + $("#add-paragraphs").on("click", () => tryCatch(addParagraphs)); + $("#add-content-controls").on("click", () => tryCatch(addContentControls)); + $("#change-customer").on("click", () => tryCatch(changeCustomer)); + $("#add-footer").on("click", () => tryCatch(addFooter)); async function insertHeader() { await Word.run(async (context) => { diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index c1ab8bd7b..545207fa9 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.3' script: content: | - $("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); - $("#copy-properties-from-paragraph").click(() => tryCatch(copyPropertiesFromParagraph)); - $("#setup").click(() => tryCatch(setup)); + $("#set-multiple-properties-with-object").on("click", () => tryCatch(setMultiplePropertiesWithObject)); + $("#copy-properties-from-paragraph").on("click", () => tryCatch(copyPropertiesFromParagraph)); + $("#setup").on("click", () => tryCatch(setup)); async function setMultiplePropertiesWithObject() { await Word.run(async (context) => { diff --git a/samples/word/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml index 9fb560b9e..b05bfc235 100644 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -7,9 +7,9 @@ api_set: WordApi: '1.8' script: content: | - $("#setup").click(() => tryCatch(setup)); - $("#insert").click(() => tryCatch(insertImage)); - $("#get").click(() => tryCatch(getImage)); + $("#setup").on("click", () => tryCatch(setup)); + $("#insert").on("click", () => tryCatch(insertImage)); + $("#get").on("click", () => tryCatch(getImage)); async function insertImage() { // Inserts an image anchored to the last paragraph. diff --git a/samples/word/99-preview-apis/manage-custom-style.yaml b/samples/word/99-preview-apis/manage-custom-style.yaml index 01bc08b8d..90e99ac9c 100644 --- a/samples/word/99-preview-apis/manage-custom-style.yaml +++ b/samples/word/99-preview-apis/manage-custom-style.yaml @@ -7,18 +7,18 @@ api_set: WordApi: '1.8' script: content: | - $("#add-style").click(() => tryCatch(addStyle)); - $("#apply-style").click(() => tryCatch(applyStyle)); - $("#show-style-properties").click(() => tryCatch(getTableStyle)); - $("#set-alignment").click(() => tryCatch(setAlignment)); - $("#set-allow-break-across-page").click(() => tryCatch(setAllowBreakAcrossPage)); - $("#set-top-cell-margin").click(() => tryCatch(setTopCellMargin)); - $("#set-bottom-cell-margin").click(() => tryCatch(setBottomCellMargin)); - $("#set-left-cell-margin").click(() => tryCatch(setLeftCellMargin)); - $("#set-right-cell-margin").click(() => tryCatch(setRightCellMargin)); - $("#set-cell-spacing").click(() => tryCatch(setCellSpacing)); - $("#delete-style").click(() => tryCatch(deleteStyle)); - $("#import-styles-from-json").click(() => tryCatch(importStylesFromJson)); + $("#add-style").on("click", () => tryCatch(addStyle)); + $("#apply-style").on("click", () => tryCatch(applyStyle)); + $("#show-style-properties").on("click", () => tryCatch(getTableStyle)); + $("#set-alignment").on("click", () => tryCatch(setAlignment)); + $("#set-allow-break-across-page").on("click", () => tryCatch(setAllowBreakAcrossPage)); + $("#set-top-cell-margin").on("click", () => tryCatch(setTopCellMargin)); + $("#set-bottom-cell-margin").on("click", () => tryCatch(setBottomCellMargin)); + $("#set-left-cell-margin").on("click", () => tryCatch(setLeftCellMargin)); + $("#set-right-cell-margin").on("click", () => tryCatch(setRightCellMargin)); + $("#set-cell-spacing").on("click", () => tryCatch(setCellSpacing)); + $("#delete-style").on("click", () => tryCatch(deleteStyle)); + $("#import-styles-from-json").on("click", () => tryCatch(importStylesFromJson)); async function addStyle() { // Adds a new table style. diff --git a/samples/word/default.yaml b/samples/word/default.yaml index cf62155ca..50674f5a8 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -7,7 +7,7 @@ api_set: WordApi: '1.1' script: content: | - $("#run").click(() => tryCatch(run)); + $("#run").on("click", () => tryCatch(run)); async function run() { await Word.run(async (context) => { From 36c361ce8e23d5770d2fb3daa3e5f1d0ec29f4d2 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 13 Feb 2024 13:38:06 -0800 Subject: [PATCH 037/156] [Outlook] (notifications) Fix insight notification snippet (#855) * Fix snippet * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Apply suggestion from review * Build recent changes * Fix typo Co-authored-by: Elizabeth Samuel --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 4 +- playlists/outlook.yaml | 4 +- .../35-notifications/add-getall-remove.yaml | 60 +++++++++++------ snippet-extractor-output/snippets.yaml | 66 +++++++++++-------- 4 files changed, 82 insertions(+), 52 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index e0c9587d2..193e94408 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -247,8 +247,8 @@ name: Work with notification messages fileName: add-getall-remove.yaml description: >- - Adds different kinds of notification messages, gets all, and replaces and - removes an individual notification message. + Adds different kinds of notification messages, gets all notifications, and + replaces and removes an individual notification message. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml group: Notifications diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 84682c0cd..0f9b940ad 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -247,8 +247,8 @@ name: Work with notification messages fileName: add-getall-remove.yaml description: >- - Adds different kinds of notification messages, gets all, and replaces and - removes an individual notification message. + Adds different kinds of notification messages, gets all notifications, and + replaces and removes an individual notification message. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/35-notifications/add-getall-remove.yaml group: Notifications diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index b10f9d712..7fc95352e 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -1,6 +1,6 @@ id: outlook-notifications-add-getall-remove name: Work with notification messages -description: 'Adds different kinds of notification messages, gets all, and replaces and removes an individual notification message.' +description: 'Adds different kinds of notification messages, gets all notifications, and replaces and removes an individual notification message.' host: OUTLOOK api_set: Mailbox: '1.10' @@ -55,20 +55,23 @@ script: function addInsight() { // Adds an informational message with actions to the mail item. const id = $("#notificationId").val().toString(); - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, - message: "This is an insight notification", - icon: "icon1", - actions: [ - { - actionText: "Open insight", - actionType: Office.MailboxEnums.ActionType.ShowTaskPane, - commandId: "msgComposeOpenPaneButton", - contextData: { a: "aValue", b: "bValue" } - } - ] - }; + + const itemId = Office.context.mailbox.item.itemId; + const details = { + type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, + message: "This is an insight notification with id = " + id, + icon: "icon1", + actions: [ + { + actionText: "Open insight", + actionType: Office.MailboxEnums.ActionType.ShowTaskPane, + // Identify whether the current mail item is in read or compose mode to set the appropriate commandId value. + commandId: (itemId == undefined ? "PG.HelpCommand.Compose" : "PG.HelpCommand.Read"), + contextData: { a: "aValue", b: "bValue" } + } + ] + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); } @@ -127,34 +130,51 @@ template:
-

Try it out

+

Try it out

- +
+

Add a notification

+

To add a notification, enter a unique ID for the notification in the text field, then select one of the notification types below.

+

Note:

+
    +
  • You can add a maximum of five notifications per mail item.
  • +
  • You can only add one insight notification to a mail item.
  • +
  • In Outlook on the web, you can only add an insight notification to an item in compose mode.
  • +
+
+
+
+
+

Get all notifications

+

Replace a notification

+

To replace a notification with an informational message, enter the ID of the notification you want to replace in the text field, then select Replace notification.

+

Remove a notification

+

To remove a notification, enter the ID of the notification you want to remove in the text field, then select Remove notification.

language: html diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 47b53a4d5..6310d23c1 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10456,20 +10456,25 @@ const id = $("#notificationId").val().toString(); - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, - message: "This is an insight notification", - icon: "icon1", - actions: [ - { - actionText: "Open insight", - actionType: Office.MailboxEnums.ActionType.ShowTaskPane, - commandId: "msgComposeOpenPaneButton", - contextData: { a: "aValue", b: "bValue" } - } - ] - }; + + const itemId = Office.context.mailbox.item.itemId; + + const details = { + type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, + message: "This is an insight notification with id = " + id, + icon: "icon1", + actions: [ + { + actionText: "Open insight", + actionType: Office.MailboxEnums.ActionType.ShowTaskPane, + // Identify whether the current mail item is in read or compose mode to set the appropriate commandId value. + commandId: (itemId == undefined ? "PG.HelpCommand.Compose" : "PG.HelpCommand.Read"), + contextData: { a: "aValue", b: "bValue" } + } + ] + }; + + Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); 'Office.MailboxEnums.AppointmentSensitivityType:enum': @@ -12691,20 +12696,25 @@ const id = $("#notificationId").val().toString(); - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, - message: "This is an insight notification", - icon: "icon1", - actions: [ - { - actionText: "Open insight", - actionType: Office.MailboxEnums.ActionType.ShowTaskPane, - commandId: "msgComposeOpenPaneButton", - contextData: { a: "aValue", b: "bValue" } - } - ] - }; + + const itemId = Office.context.mailbox.item.itemId; + + const details = { + type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, + message: "This is an insight notification with id = " + id, + icon: "icon1", + actions: [ + { + actionText: "Open insight", + actionType: Office.MailboxEnums.ActionType.ShowTaskPane, + // Identify whether the current mail item is in read or compose mode to set the appropriate commandId value. + commandId: (itemId == undefined ? "PG.HelpCommand.Compose" : "PG.HelpCommand.Read"), + contextData: { a: "aValue", b: "bValue" } + } + ] + }; + + Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); 'Office.NotificationMessageDetails:interface': From cf53e323d0178b50cb1974a964f903d93e54c10c Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 14 Feb 2024 12:41:10 -0800 Subject: [PATCH 038/156] Update messaging for dev program (#857) --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 644316552..07ac86706 100644 --- a/README.md +++ b/README.md @@ -138,11 +138,10 @@ A few style rules to observe: ## Join the Microsoft 365 Developer Program -Get a free sandbox, tools, and other resources you need to build solutions for the Microsoft 365 platform. +Join the [Microsoft 365 Developer Program](https://aka.ms/m365devprogram) to get resources and information to help you build solutions for the Microsoft 365 platform, including recommendations tailored to your areas of interest. -- [Free developer sandbox](https://developer.microsoft.com/microsoft-365/dev-program#Subscription) Get a free, renewable 90-day Microsoft 365 E5 developer subscription. -- [Sample data packs](https://developer.microsoft.com/microsoft-365/dev-program#Sample) Automatically configure your sandbox by installing user data and content to help you build your solutions. -- [Access to experts](https://developer.microsoft.com/microsoft-365/dev-program#Experts) Access community events to learn from Microsoft 365 experts. -- [Personalized recommendations](https://developer.microsoft.com/microsoft-365/dev-program#Recommendations) Find developer resources quickly from your personalized dashboard. +You might also qualify for a free developer subscription that's renewable for 90 days and comes configured with sample data; for details, see the [FAQ](https://learn.microsoft.com/office/developer-program/microsoft-365-developer-program-faq#who-qualifies-for-a-microsoft-365-e5-developer-subscription-). + +--- This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. From fc8e14a0c8994fb969eacf5420b364ce5148df35 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 21 Feb 2024 08:54:26 -0800 Subject: [PATCH 039/156] Adding NamedItem sample (#858) --- .../create-and-remove-named-item.yaml | 4 +++- snippet-extractor-metadata/excel.xlsx | Bin 27995 -> 28057 bytes snippet-extractor-output/snippets.yaml | 19 ++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index 05cebaca1..1e78a206e 100644 --- a/samples/excel/34-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -78,13 +78,15 @@ script: async function listNamedItems() { await Excel.run(async (context) => { + // Log all the named items in the active worksheet. const namedItems = context.workbook.worksheets.getActiveWorksheet().names.load(); await context.sync(); console.log("This worksheet contains " + namedItems.items.length + " named items."); for (let i = 0; i < namedItems.items.length; i++) { - console.log(JSON.stringify(namedItems.items[i])) + "\n"; + const namedItem : Excel.NamedItem = namedItems.items[i]; + console.log(JSON.stringify(namedItem)) + "\n"; } await context.sync(); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 1b2f497d05251cd3c70b9c691da0563e97451f21..a64ede47b533d060776371fe2c0ee2af7cd56ffb 100644 GIT binary patch delta 18176 zcmX`SWmp?bur`dfxKrGHNN%w)2%44t+DU6l?GyrIk@LxqKc;(~{QLWhEa^0a65aQta!>gZ_4;t8-X)6jFw z_=e-3Q}+?@s?-gKAWEZwAQ3&Qsj*TYmxNqcjf78-5MA>AK*CP}NVbV;`D?u6ayq%u zy#H!ykTehxtt@r_L)XZ_`=FEAVxEukB+9&CWN~VD2caou`!{g-zMbp zZVM%{CS^@wfvu~V!E7zL%&|U2$oUEH%kL^2R?QUzxodaP;xf6>YQRPbLg_Rv1x}Ii zWv(%SqUXFuU9ujAs61t$f2*?He0Cev?K)w&adnxOqrdt`o9ja z#th9SwUHm6E=`F(1B*Hle@JU-Fk!dtg$lr0+sQu<`P=K^lQkLpod$z{>B~>isI#rs zV!h+(Jozwvz@n^t#Dr1QyHod=9+mNiIKyw_rs!J~j43%dJe6 zJOmK>tPjbD6`sTrgZsZJT;gQJ;-PFKl6v(HOK{W(sm{E?{ySRw=Qeg>JJ0z;?8>hA zCr4rt!W^?{wwXoJ9NCymnrPx&{tjDD1BV*_p{`+r8gNpI4j-ehLXcpYYM~AsXw?FZ zfwCHCrnJ^4+isGcUtL6*&u9E7{0y~=b>Gub&yb8vx!X>@#K^g;r`wkwnz&2|=PR55 zYA0`iANkE8puS!=&UMK5H*`+s@jU+?f!3z$8G! z;Uv)8pw;dn(ZHaMg>t!p=%JvD1)-tvp%Oqgguu*11IOiWIAIrbXTsVYbdfibBKaCf z7NwkubBlxZ&cs#eeQ5wB*Ja>FHMVt;+?NtKUiVj_gSNrJu?loW5NY#_Si^T(!vIXj zG$zT`;j6fdQPr^D+;z-0%zD{7R11&K$2;Lmh9&Urd#mK+b$o+*W-Y}Rb`5)|bJ?e! z$UsMiVnSQv67G(3oT373u6nZ1qQ^Wx>YC^j=4eoKG=i=|&0E773&Xz}s>42=lpo$k z&R5Ahp=zMFI`o-?p-q`>O=8iaRC^0OGBg=lD!Ly6`x5^K2Pq?L9O4X=cSg-36y_%< zT?L#zeD7=!zM>Pdu$r;^z%!9KWqkj73Jny>>v<@Ui05GR4U@bGDX>aqPDwwPNZS$C z`IaWp?aRi{<0KF@82$9`Ym}#}OTzEECWF;=>V(cmTTLWhlM^I*!@VYQutj3nVrP0Y z+B5y5VW+25ScO*G{+LsQ*f;O^8XY!U^f-yB`GY5|mH4|V+Z9jdz2N?}z;6LVBmm%d zz6w6;&(iEQFFlML2VDPsuIBfS)oNIn?mor^ z^9TJYH&Kr^CQ35`R6kB{_il#oW(>-GLgfsn4FLN!?=*6?vwyISI? zK6k>BZ`2~6f1pE~p~1Kjk(=!Q=9QtK_7=xO=fhWS*~KDJF%ZC4=0kXs`s0ex#fuO> zx(0%0iwWkHYyT!Mv;Ep`K(#UVLIy$UkB|Rp60__om>PeFG@4pN=ZR|q@4WD90#t?X zDXifhQwFQx#>dXXPksE9{eP$BU+0wn8xwLKrp${szYO1ae?O`0-0**YJ0Jr-E&x9! zjo$AXFP1%kPiHy8A3Kd#o$t@jYew&lS;8OJ3m?y&E0vvZ*C)dMA1fZLAJeQGZ;!pK zH%lMH=y4ynD~}(**T-kz`*ZID`Wi<`B8Mw0~kga-GTB>x108(VFVMYSC)` z0>0T1#V2&jbMc!mUYJORQ=86h?gyVo^!*M7>Co%-6Dt(0bm*|BXLn!j8>K)cZhPDC zhBtrq87s51^uR;(rP;s@5t6@E=mvyjGB-O%a#H+#o?rE74~YKfz={kiLH_?{XCtb5 zxj5X6zwJl^==++IVV=`3iKzN>$hZc2k^Mz7Udwr+pFKu$2d`-TVy&;0+BH&R!toRW zxc%&yj?=VfIVjS17OoJKI5g?J5urG+vK4sW6K%|Z@|qk0f#{i^F#p_hn+Bq$!)Mdmiml98tROZ zpr_jsEf|LiL8en_1?r0;>=T9e??$x-a@)D(bDvB|`Wypbg??d>#iDQRzT_oQ5BPe| z3E>bhJYtYs2L8JAMX>Uf6U!@4`n*+<^8-REvu^N$G4YtVE2VdW+G8L|z8QcX?;{if zOsM>4I757MG>6A3(H|b8tR+E4Hsk9NSnmfn(Xk=Fom<)eX>&(>ps}`NC-mhNMUJahpuvj>-s3$*X1%g3 z-fcY#l&`P#-%n0HssQro3cpiFGBSc3gm@wRxsE+gb@V_HQ^a=B^j zsCVFZHHoY$-UAZ!e^MGjkd|c`E7E!!?|~-kDnc>#pmxkg&#Qgcj7J{SWr6B=ysw__ z_Jr!*d?DJ3QI=&Vwi|}x-89RC71AF6Ph2~CvfMyoyQTl>48DS@>Av}&i{t+P`(TA| zNF3fNGC__seokd~(3{b?vlRhZ>&eDR{4jK`6Y&D6%B*2LUD>f+eEP^`zHt9ZySq6V z9wPnJP35P@R{6S}-b2XRq?vYJkY#%JV3YE&&K}91$NrBJ2qD$?ow5y*;1`NedYa|t zvUlgw=G_$6o}GH5K7GWPxVQd4o~%VEOhbUgx};EOkT0p7hs8Yq z*Y7KLy{SJ6+cn;ZzS~_KjY-A#jAS(v-R6cKh&|_*{G->`n~PZ#w~3M@H^Y$|D3RmP ziLqrqeZo{6_H-MCKJvL`;WWy+F&gm4q?E0QxsTVzc{L?M4giGi5FW@6%?n;Jc)~95c7x7IA69c&@bBL1k28HgJ zZGp=j$-R7Be1E+%@2IO$r_@tI6T6DzGW{@NTfQ-I9Vp6|VX>2hf!uCTC~hMD+0!?^ z|3`OOJzeCFxgq7stMF|E6+1+jD9c4p_P73g6r7U?cKWsxFwdmzl|q(8F{92X{u*3B z{bL_oIvq?zxVmd$(y13T{H8y?D_h&1Og-%D-5u_Vl>Pl3LnKhwVNpr@Q zV|Z2Vv;Z^kWqR%C16taVC@=FJk9Ydxf5)clAS;zpwn)Ck?ylX4{=C7Ap5CdaX5R-h z3SkgX81RIWKP#51iRdj@c=uRJ#<;gVmexbL zMSI5&H7PjXV<+I#um7}Is;%4tZZjYbu3+Ih$>X zPhuNjmLHo2m~2SQ^>zln_V4!YmgoOBEglz51}H|>)*@AV`BX6{_IhsvM`Kyp7~cXx zmq&=H1owm-m~921Z#JH8TFV-=LBJYKn$^UJ`*bwOE`-kR7YuxH|Sx63w_B91AGTr}xDRGIn(lz4n1S%n=8cg}Qb$-4YAob*vGdNPYaVBl!2}M}?*+TF=*V;sRI=4m5Puh0!Q#C9kpdAvh;u+13HWoUW-4)cLOI`Q*>_r6XcT>GkB9UM01Ss$i>D6<(8UkQH zcZ;=AFDlYU%Q4{ty*8f*YQGu#vjS?C>^N3K;qLL=6FlGr+cqZM5VqskC%^axby@Se zl==}2{VZ&0e$lWdmwm#@la?qtu$B+~QPjcCXmZU>=gpLH6T~${g!e-q#x~$DBeT5# z>lzAx(;j38J+@Uh#QhJ-{yl-+8IEG^Yj6qsHeB6liR-XkqkuU~nP*%8R+{=NU*Dx0 z71PU@WZ)MBOLTA2Trg&C{`cikT~`eBWrQTSHJ`r20L)xX5iNsS0Je0p}ms{jDL)G~T?I{79 z*EPjV2}|n9aUaLp!Q$Vdr|@Z-+rSHtzBNyH;38A^babV)SMyC9b;Us%d=bbW>U_XLGDhyCBFlP#D6Q0K z@-C&ib8kYcm)g3v9vc%HQT3Ghvv0*&N-o$W=@9(lHbt1ofL8y9E10t&<+@ska05W% z1%T6Wmht_$yYD(^y1YXtv!>sJQ>KR-a-HRh=iP~hVSOgfW6K4B=NXt~1Oe6TsC#3coDEs?3%<2e5M^+jjDWO{?E+ zP3sbG`ZIceZ7GbcC1l`UR>1Vr(H1wUtZ&!IfQQ+9cUiLytelgwonn|>lmr@V6lndc ze1;ZQ-1~@rIduYZId(mzqXly5RI|YW`sPk;+q4#8v8rl37tTb?jHO@o_zdRq`v-9A zpoQmT9om3entV;5Xu@;2Klzh5o35*6u3ey-KOX-G<3NQyLUDhJe;KWjNU38^@)?g) zxGrK^_M+8NCZ5(>@_S1UmJrh^5kr_)|~A6+)l1qD@n~64ColfADww zt0!WCEPh5ny(%sz%-poGKAqJL>$!QxgEA|Z~jP8Jc=ChjkVuUyaUK)ziA{s!^U!DKD(j4or&=Nmrlxn~f z2GlMO)x9#sG!p@*Kd)lfCw&2yg`DSCuuJo*XMj6v#jL5!jNwZf7*PMMBymkOZJj!P zMh)k}&&&J=ZA+R5Fk_c{y?qhH03O@(t@AsaI!S)&2IEy0+H-5>p?U)QMi?@{7m?;| z>n%KC*aKGeEl1lrM~Orhux55C8U=QY&Oq~i`0>k<#|n zopsHWOG9Kz-j8ck#-nXZ55D77uKFQ0hLoR3tLv}Avy+G}C@urO?9@K}-B(%W#w`f4 zOFEGf_@_n=oYmC)OZ?=cUD|FRBS&Geeh+#GO6#1ZB-?63f#0spxFEt*|(A=eh~eYLmh@d>9u0cbdPm48yBFfRag}E zb=H8@V<4xc>RLqrOw5H1Zg6I!A+7Fd#_hzj-bI)8ZxwB`IWs~0oiP4;72|5#kgM);<+yf&cp6|kdHEuOHhkuxiGQZIq^AohIxR+Z>n*1?d(>ir3kdCCv7!W(8eajZ+*#ua)Y=4~BW*q~aP{qgCEt^iJnEw^3yZ~S^e&Ps>;x3EZWQaz+r3<1x<;IqGeKt+zE{nMV z6G=^dy)O2%cwBPznd{rx2Z|FE7LNw(E6#TDf(?CG7c5e(T9nChYgxz7HK`8)Qn|xq|!)o+QV?K;rC;2 z)CAnE&RZ{e#vub6;LU&Y@K4Sa(c2eTECd~)@EWR*;xuCrOCw zJ^%)UPfV}nM(2Ob48*%X{_Qe?#0m&G-bsh#8AH^3OUI<`(%D)=$@7KJ1I5XnQ#D^# zn&c;}JXb*kMJr#QfVC<1C;e6S45%tZuq#$A{ZOG!g0t*|+=f;0Wi7HmP9`Qzc3D-I z`ZFRey=~D})8^qs&kme)2!o0U7rnEmTD+UqnMk{5#IT0-XlGwg#fCO=PEi6*Vcm6mtnxiOZ%XyT2g5C`HdP>95e#Qk}fkX(AR^>UH zkv`M8y`C1>Z`98Io??F)_&eu|<{&r6^NcuAFFLw>Nva?a>2IoAFMz+6>Q#&0mQLfa zp}mduV2+ds8n3WFK)|e3SUh{^JI7y z{s#QTb_Du5^ZPlk;h~!dcJSowSccMqVN21U=F0jwv+NmvsE#^++BD&9&UA+&6U9@i z!`^Pwf&tzuXk2mDmj7ByOx*+#xte4~{^XYo8!vcjBy8kU)rk8{osBPYYeS(&QD4m7 z{hOOyGHKVxE;s(y{k8_y)fisxLZ(wrT;;wR?-ua0`CrRbkR6BLtF1$c0_P@|djb3Q zf5Jp*ghe0Ht#|Q!-7I|7wI1P$MVMfHk|m2$I5b(R<^C_xQ_mm*U1R)$uAxqpV>5S{ASHB)9azs%awIJUvVtsy}d}C~^Bfs`#Fe&!})s*Rsu? zan8E2l5dLpeQ|``c2Wd#qDZ>d(7gHNfORAI>q3I$k+c@06f%~_hG9@qdkw84w@_=Z z)Jpb~Ps&{vqqCKvc+-m`lWdOrXnGrPY4H^8!l{+-FCI6@AKq_g>@vcmGeCl9!xg&N zvUbHL@5F-V(s}Ri1a#k>@$+H8qD;Qt(g22-Kte9Kv4LEYhr5-e$pJ+0Hi;DNyh1CB zuGW{;fh$0xflW)4vZjP*@Ki;TUlxR)g21QNCrH1!qQHsug6L-078Oz?Rfn5GoFcn(fXqtU%%Z-~$Kb;_hV2Opvu0A6J19P*Q(bw?x zlj~m_JV_46%jv@o;j#|1nu`T_(hP&vCRc~;rW6tnfRPKU`?nqO)_X%h!%7#;!&G~1 z9{jTBM?1|{2W;-9iBMBPv2BZ~S3hO}u^SpvOW12!EteKl8v)*R>PopD> zcO<-mYLAl|@=~j#z@}w5mC;bTuwzkoMGj_w2Si06R zq2+Y;JMXN_5>e@G=xX&AG8jx2ZT<66NNSHA=fkue^nk5P z&u_nKr_?z)m|{j>r_hC)-e;i0aWiO-d5}ax8~{Xjv5AS1;wrCoh9Y&OURJVvm~QCW zFi`c}WLp8v|86_7{!x0-70h!y{IwnqfUKD7Kd|$rScldQY-fOYXub-yYeBJVp0IHQ z0C2-B`+K|Mh`=ozniT#1c%s2Lhi44`2`j7j^KnBi<4*867M0NHaQs4&QDl*kIk>HH z3fMrzx}~J=a}DzR298LnQa=c?y099TZ|Vi}cnU|pq``UiArTHfC=BQLDbEW8zYK6_ zJC(1*H1te-=`;{)3-r@_`(Cbo^O;nma{T4<>g-Sl>7A(WtY(bIi`(PNQmAqJKI*Hl zFV_p0e~}FPGimkq(@!hifX8Z4Mjf~;OJHl#G>p7LhrjrRVb;RHBEopy&4PjRB*f`@ z^cVW7$dJ% z7RWW7R0df&9@O14b8ZdDHo*#K9>(Q+s>aSSb;`x597_~F?1 zrKK;eC+0GhsmIqbDQCQ)Zr(opWx!qAson5FN+6ZeM*g%h4mrD~1Ted{h~}}q&JGK4 z`bW}?)!SbE`D$k6cuZNDqFaE%Zryhy^xbnx+Z9a-*<(2@Ics{u^TjjT9NRGJYyje1C>>FI$lj+~}q z<#1&ICji_$GhK*B{CL|oPzPHv21~RAj*9IFbT$ zyPuY3lBRQ?ML?Wpdjbo6#v^TLbZs^v z#?ntg4eIc$2 zx}0ig;_%l8?Mh+x9hBMje9G<$boz@|ZRqpOn>h@n#;{p{3~Pod=c4^Z0T{m$EU~K3NihUf2CdCx1g$8)}+Hk)#88b-0Vz)!rRbP zAt$&-Qt&bMuI_tFsyArROwY*63c%-{J69~?vH zbnPH%VKcw!-@Yhh-0N|Xgq8K!{n+iEvjTw-M}1|)HZ&rs-_5&)<4qFz0=*wx$RG=X zrET?BqZM+%NI=Kk4zD%N^c09N{xnST72Gy_u+$U;Y?)^(hl^NLqx5X(yEAir|IVg2 za1?c#Fwj`Rbxs^*vD<`EKj3bl?p65mI`;H5x4Z8g z9C%OhoJzn1mWba#@YEiYN1`Oc=KZ{%IAPCK`{qN?xR2=8d=pczREDy_StqoUsJef` z#3dZ~r;0gABNhbx?LWw6XnEP2c#K|Wep3;6@+4W{O^HT_32~t^EycGg7`;fb@mvGJE137l?$oKCChrcK<&DTu~6g@zZ*8iPjD$<<- zsfIM+TG0SCjf8E(+9n6JYH%i+cP3agoce;jSf@E7h#KG>)`R!iJa$J8)gUEZ9iV-| z3Rtg(zN|umryU*AbXrKJKqszT=bDsA-f+99+T~eIUu`vs`Paub@i~o9tsA}rFs4A& zYN!20;h|i*RQ5dS@-N=P#;1joZn8esCDR+#|8bSPQBCrQer@-}@nuimnsiDmJ9CtE zg!X}1qthqPp?g<0ne!Sg&Az%0a@JK~z@Y156cw%w zG^YtUh-Npq*M0{0g11e^tsZ~@e*v>WnvQVh%%@7nW2bCdAzmc`wMf$A<{q=u+~ZO0 z^c|Hj^LC|{_o?(zqS^GD=JeaC$xWZQ8l4yY3iUvxnjJB)&d<#`yr=Bt9%?wNW$z;^ zx{Q1F#O~;uqVR^Sv~0ea$sRk$Il2mbwuUW`cQ66Lz4WmIY0=x)xm$f+%{+n6j zW=xPfySdL#ewt$eke}dmp!wHR6Hwx{Pf9eYzYR^FXau9yXAnvx3?$5hvnke1voK5N zj~!3{%Smpr6`lUDM&LgUAcrJ~Yu@TIm}8=dTvlN{MUW)p18|(_wNTXhYSDvjcpxFc zG=ozms*JOIIkqv12aqUo(Dd&a!ak|zk$*km=m0T90e%IUPa`8sJy4zRn|IgBHt&Oc z?Ax3p;q%FbeYsGMf^AbbZ5~SLK_ISkXaVxjHyT}TLgr62KU;=V=9`wXGzK|K%iGj5 z`YAj&KIhv%7IW>cyxNHs4Aq^>wbMl_&smNQ?i!TNsTxNT0S|$j&^o1@Xv_jJxYQNl zvN)4r&*>KD)zxD(=d#n+^9B*)mxXp&kaKa39*OE5CKHXW!ag=#>zw#>WvrmkUQJ}h zdU6nbEPmJ~HxCZ5r#wnV^J;a!EyG{KKW8O3FX1-kS*Ag}y@CxB8=~qUZ3Jx{0Z67p z;bfl4B@P6%V7ZF;!rgWp`OLpVrO7R{X6`l1>Fg<2^4DP+Gjo1TH39-Ph+_yG7;3XPsBmI7Bv<|_N`2fL8p zn{A7^SvfxnPZ|CL$(JOg1C;@%3njTWf&>eK4?Ezq*-kG1E5Sm3)oL!d7hkPPAG;1` zd;FJ#8dvYCnOUm*>ul~!QWNP(nl*3!rdF_R^JW@TvCckP@VJ{!QeneB_SMM@j&o9b zW16sKvmtGg{DE~3Jz#{D^{}@r#_%+gs?l7EtbN4qSNZ#j$ z&k|@hypYvTCFGzt&|LZX-J!*#z_Qk-Yl7Pp`3bX**~tU#|M{WXGbCIYYX>`wORyPh z{{YpPk{&p5*_jAr`>5XRHK_4ReR$8KpwC#gsYiZt-OHgDCn!hsI+PA|N5NN_T!chi;JgN zorhU?;^NvCE>}4(L9O2Pn>yW9|7~)g8{aGtz6=fz;A-`5Y$Lj@u30}bHed^;6~(UB761#@|7qF&t13R#k&h$d!Rmk?0+K(ooXnLEcGdhXqPvd)c$%~R z+?7d8Cv{gRFD5_^4D9;8hea;pUY+vkz9F1kCIC*GD&-X)mb+$&tXk4tUNQEcr+plr z(l?H-nDplo?J@?Se;JEm=M%NbVIqR8*D_+s0s}PVQHZh)-vu1{V4fPIh}xEG6oIlV zoi--HYTMP7^ukqkl&l!WP|;6xk09;he#2%ax^FRiTpi@}zC1gW-AJVUZ315&QEq9= z^hnh>U)6W{$6&|a`{rYk^EohB)tO4(M zROz_13c9TX2J`$;05*k^fu1)d;T=T?gqC}x+ua>Ek9q!}Y%KQhFs_L%y5170j9Giv zgjPs^yn*e@sOAGp9eC@pJ*u_IjI1iZP%{+3>SLZIEb$(Q{$u?JUAhq_lIr=I$n3q? zL$^Yfx7sSMA_r{LTQEiXJx&Fh1RBSeS|4Hi36U(ob*jbqdF~*MpLQ}UVY?Djp~rBI zqISljhC;yi?ImT_?6;SGJfk+xdq1H@)xDv!9ao3ZxBJSf#b$2SH`n| z;qs%_hTqfifswzmU|Ew>|7hpi<#7?2;rm;uQRmx0UOVGuH7Xf6M8-8G^Dn$W;3w}> zy1{MWIQ0NqVJuv%XruI=XpdX{zXCDG1xF@>03E%m3~*2x z;i~LhU5=!abS82$eiG+7F_*N^FeT=wIza{)Iwhn?&cc`zh+#X(6CS4$$FWfYzdI}0 z)6g|$_L}-_5Y%|7w$)ekGX~p|{}rlq(Q0>EPQiXvg(2cL^IL3~I%R?Kes;i}u4pGL z$`1Mqg&qxy+E?#wuvftM#^131GjYx}m&*#^#Q}dxWpYWjmdPY^|DiRK+#Cut-ZcW? zxpX4$mcJmT0Nl@dMFuPhU@cCz_B!S2S{x&HZ{Hxh!EfHvcio+~et+cSJ^i=0QS6K;1G4dEgQEOXmTK$O6r8QCQ&_5=RY@A_F(*Y@Vg~9YnH{|6>8q7OBFW#*63aT9<7V56P3LkXMDlb-21pI1@QfT={P_mw_X|cvr zb;SxBKf#3heV1&G0^ggOyQDrNR=kU8_~Pt*s*5Zstp1+TeB3O7%<|XAJWTNrCf_3gmBvq_+3!gMT#gYRl(RULsy#dg%w`B3t-6{ne70WVVe3gBX!GRi|8qNx~b6(b69!QaQu}LF7goc`6lkEk#I|5 zxHVMvwDBQ{C6h*}x}sWXpz&i2W7`JdRU^EeY)6O_SwEP=bu4)sIt(W|UE{2aKFKLk zWxVZsfs=RxMGfW01c}1;vt_LxwBa?*W4LS+$~YNg98DC{pzr%OJFqA8MjX7ZE1`of zeq9|m#V^l!x;_(>av`$? zj~9ap95qY~uIpdnEc?z+=BC)%7u0nvVHUo@Z56VB?dWqIy!uo&2jAB+z!~XSv3Qo@ z=>Lj8WCrCCDPNe6NV95zj3Q~|&XG3#+5R^jLnY=Gwl2~#qEM;CT9r}sbAcQqVRDbR zHhq1rL;EZ!*V_#rsKFR)ct%gm#Gq87>fSCKbb`__!umA+I1ed_?x=3&-jYqrh<>eM zTh+hSvcqdVl*U0gtd#=HRy6v6)LPd`l6pidHEbV<+GqYuJEBPi`_J0OWq&@L4d``f zC*uw)SIb+zNa>N1WG$Fu;p){bC*p1`H(B&cPvP7Qjgk9_&>2t)0`a`V|Mzc&T6&=a z7&I76H_dw-C@33UC@37L1Z7)XV50uo&z+{99m*Q(-Fv0^3<9+oasWX5(s!Db9fKUt z0T%h%j7u?~@zud;QUN%efW) z&97I=!up0y45c@@%dbD5EZj0)eZ8jLZIX&C44REt&@0+sZ^Ao2S|0!_K!ZPybMHT! z&syF(+kF-+^%~_@gy(#;{_Zt9xZ8wxj_(_^I_jr4>K(KgJe}tNAGeA;TI>F?u-3Fx z^2NN|#0eW3-fCPmt{aRN<-Fe=jG|wxZ1=vL_qwGuoV|Fgg+E*z2K(x3_WNJ7w7ymx zH=K9k=A1i5&xESv=r@+%kWC&W*R1#aIP$KB4;d$}q(d1qZ47298$5|G9JAokc& z@Xe69-6SQ{iHqUo9X9m-D!t8M%bGmTa2CKH1Web(Y^f)pO3VYZlg&+XzMD%F^AU+V zzL=wyTNQVblADF}M!c&2oLy|?(5A>zO%p9Q6zpH#K=1vl3@`0zp~ zhOf4Mnni6?Q~9yIVj=`{;PC7U=+7dPwn_&MFk0jG*PNBKVdH428j_jRG zP~13wKq&DUV>jtb?6@7v7at_XRG#nmg4Akb8-T{UlS)Nkw@TEjIyD8NL5pQ5nLqjy z5^pNj)GGx!bJk#W3D9Lj!M=!dkw{NU!t>8jyhCcOTf9_QNWSr>TtJ@)%{QAe8v8GP zGS-^d9Va%*#Q;SdfrI`=F*1=@UWq}AvpoLc!0@!n{QbnlS$uSR3ih&!?LAyw_nFvh z_OR!*BD*5sZfVGOg!-jd6vu^ijhcai6=Sn-jNGJ)=Ck>(s=6|aviTYoss+7CNHBf~6wLV-KRqwA^ ziv(n%0vq_T%pngRx5}fEI`#}RWCKS#CQ<>9+U94#=cz1-Trqtlk+TGfA9onJBUIBR zExNnSXey*vf46Im~*tt_43qQL&7qdmbAPNy^brFLVe zxfVK&B@;AM*jW_EQx|IdG~XEHVsT4KC4{9z_-nU=8`$o`mk|V{ zK#@?ff>X>e{51W-0Mja+4J}PM_(c0-cWIp@E|73a97r(Lj=64Dv?KYd?XH;P=9ky7 zATl2DVIK$G6=$4Uv6B`XTs43{i}NX{$1BARSQ0A`{u_2W1(?4(l)Lng%HnfY(e^;r z5z&Hn%(CP0;iC$D9I=m&bI!}!GMDnXqhJqu@}*c&Y{p*+J1>-07KBQf{|9%ibS7t%xh+3RicH zFo9{bD}?tfY(9kqdfnXeCLytj!m9=yCXBTR)iOam3Rm|)oZsC0xl561? zV@z;e<_#ds>+~IWH~$EWqzcUApQVIhK-Gv8g+u8Dm2cnItkJ~*gnujcB;-~u{&0ib zX7reuIpBhapcj@2ahPToXn^&(JQ0ZejGL?zUA1vwbu9YK6Kt&6P(ur?>24F~ydmCk z6g+0pXNl_eS^#HJ(L(y%bb>|uh-trF1BWVdlK@AMpuWI-T#Osnai66ArVV<{-nwGKd2M zy@6le5K&3^)8`reqHE=QD7N2P5$uuDv7~1rG&4o@pUmKiHE{1mJWWN!atdPNb9Ki(9!7gINg9?+v;{UItJ zYOmuE$WUQi4f1!pn=om$LMdrrXI$Mwt7i_^qnbuqB1AS?EUc&59m*`60w$?;UB%3# z{-S-B8msM??8glEwBjwUUtdAziLES}nLNdYHdzQkgT$gof8rf7{M3Ej@1cl@Hbk4ADHa**9K^Ac+pWozV{7Xi8`Z`teAyUTu$@kHZe`WWF@#H{OGwlkM3o0>Y zcN6L!SCU}+f_r@YZI6;2=>C>0rxhtCfkTNb;8vLrzM&>@+Le7yFLS0d@yJYF@t-kyIz$v;31#G#Jd$CI)@mQekG zjo)l`J~KVC_vv?8SJIc{oXhFQv*FQ}<>KhICFNbm_>S@0g)-yc5^LZkxLoB7O`AkI zzQ3NTVBp&HC>_Tr3@4Jm;7DFR9rscAhdqU?jq<&;1a!uCTS_a4Anw}|KB;q+3dQ#aPDCap-W?uQi(+ zD~vd@X#ENpbBRgI-a{vSl!|;3hFGdSnvJK_WmwN(^0f!~B0l~6cgS4Lx}UhD#NPGR{Dxeic|a4Qd*Otnq90cl;}NRWc=|rXPGcfi}d%s8mwGA7{z|D$BU4 z9W4?qqw@@~&?s|yG(S6l5-aGIV!r{ZJ=O$RoWkWu(AW-Nj|sx(H1i11bJk&42Gd-pDeLluZ-SxW6yrN869*DbD<4?%D(2Vu;7b&S4!g_Q(67?ZO$hx4Q{-dc` zpB76br@51Ebibe-x97P2h!aBrHKewgez>&F1bvk^^A;Hq&BoB)=>BJflhj}LmxxDm zA~hjJT*xs7R$e+!^w>1Yz*r{6BYJFnV68?rFacX>LCnCk0DZ4a-T%wsP%0bc_r%;i zM$D$O-_68g3IO8uk#)5B!6d0hzhCiDq-TW&x_3>`<}EB=bq=ZU!=r8^RL>FJEGmWt z6q8Tf^MgiSQFBB3Bb2$qt=zuGMDjyfq5!L+7QJt9qqq2~xVh~v+j4L3zAjs}Zw2WT zNL%mC04=?qk z!R8hIhujzGZIq$Ew}DlMoD{mkl(meiJJ8Vi3Fzw4Fv3v@nd+?Q$FKTaOMmiF?l!Jl z%8r$5m(_Wop~(}lG}NJs5-c^eA=I53%+Qz#XBrf^4UsW|lfSUMDFD9R9zjne*-`J8 zK&bzTwwN>(KYhaIK>Po?IQMX-7ch=*W2AAA9Md?eiRL;f_e&)A923fxWio8WOr42S zcC^ala*oT7++#M5&=GU#GPfLzC+9dWIWZN{QkmQeTkVwdJe@l4pYQwq^L^hxzTfBh z>~R5-a2AXR*7u#ARr`xphmgp>%v4kTJ#1cuG)UWy;9i9RT4`;VBTI$(=BC2sXM|l$ zH$vSgSvv=&CFi`BnDsJA`@_XamYrhVGxAe*V5qi(0wRgGx$&!4-=eE(Cy6*d{l}dI z^`k9MQd1{k_Asa|E?Q6YbVT4rx45KC*S}ocyPwfpa8xbdz)m&rxRkM5%~Dycxt3UT z2Z)c$70vUvGjE)Z7Ufys$878ho`&R5-!Kzo%EG8kW4L(mEq7{bqXzY0&cOpSn9X53 zc8*S1gE{P6KbWlK&7Ba>18v0znDE~2qOhSf(b!*Rt6pFNy}#QVl>II$D4`RoE`DPYw!ET@=2z= zy73{lQo9pvYS!bC%BVU`VW`e2VF2wp`Oz6f1~dCLv6+I2cUeQL5v8{oHMGJW#kq1= zrL0(8dCOc$18+ z(e>cYV!ic%?k3GcI*?{ZJtj)k`~Jdeh@)(WY7glE;->VB7l+*hD|D$@^3uXguH zE^0I$kmVMPzFtcgC?e+QGiA%0YCKN7VL|%?Oav`x2!ixGr#%~q@JE+a=vD@u^7Xtc z+fiL^n!WhIbxQR60a=NCg~qkU^sX4e$Tr8AH9slNQ6saQL<&p7;kX87+9cmLSHrUT z#_g5LN1=l~mQNs6v#bb}aoK9b7=s=M7-b+&6H{Qg0 z{EOUdu7Lm}F7%=GQBaArSRINPytpd0h?73Oq9$oiOq_RBf{lqhK?BE81yhWq{KcN#GG!TSXKhRJT4$$eZ7$Y7_Z#Wz za)3j};H3@o682ymt>f5)Wz9&pbjQ4I2FblD%Jbv_!V<;BPG(b(-+`1uw_p_yDc^8e zpy>_l)A-AMGOoU?N&rQ1f*?)<6pA5YYhl135E%jjseY*fIRK3m2XHsA SM6m}a1E$e>a^;bq1pff17P7_w delta 18021 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 6310d23c1..033b34564 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3841,6 +3841,25 @@ const line = shapes.getItem("StraightLine").line; line.disconnectBeginShape(); line.disconnectEndShape(); + await context.sync(); + }); +'Excel.NamedItem:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml + + await Excel.run(async (context) => { + // Log all the named items in the active worksheet. + const namedItems = context.workbook.worksheets.getActiveWorksheet().names.load(); + await context.sync(); + + console.log("This worksheet contains " + namedItems.items.length + " named items."); + + for (let i = 0; i < namedItems.items.length; i++) { + const namedItem : Excel.NamedItem = namedItems.items[i]; + console.log(JSON.stringify(namedItem)) + "\n"; + } + await context.sync(); }); 'Excel.NamedItem#delete:member(1)': From 2c99ab1aba4e88a8258b16ebf44ee5dc334693bc Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 27 Feb 2024 09:39:50 -0800 Subject: [PATCH 040/156] [Word] (document) Compare documents (#852) * [Word] (document) Compare documents * Updates * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * metadata mappings --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 9 ++ playlists/word.yaml | 9 ++ samples/word/50-document/save-close.yaml | 2 +- .../99-preview-apis/compare-documents.yaml | 82 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 22722 -> 22886 bytes snippet-extractor-output/snippets.yaml | 72 +++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 8 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 samples/word/99-preview-apis/compare-documents.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index a442df397..9462223f6 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -488,6 +488,15 @@ group: Scenarios api_set: WordApi: '1.3' +- id: word-document-compare-documents + name: Compare documents + fileName: compare-documents.yaml + description: Compares two documents (the current one and a specified external one). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + group: Preview APIs + api_set: + WordApi: '1.8' - id: word-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 94f6c6afd..43cd50a17 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -488,6 +488,15 @@ group: Scenarios api_set: WordApi: '1.3' +- id: word-document-compare-documents + name: Compare documents + fileName: compare-documents.yaml + description: Compares two documents (the current one and a specified external one). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/compare-documents.yaml + group: Preview APIs + api_set: + WordApi: '1.8' - id: word-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 86c83b1b4..faaf9a2d1 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -80,7 +80,7 @@ script: template: content: |-
-

This sample shows how use the options for saving and closing the current document.

+

This sample shows how to use the options for saving and closing the current document.

diff --git a/samples/word/99-preview-apis/compare-documents.yaml b/samples/word/99-preview-apis/compare-documents.yaml new file mode 100644 index 000000000..e70171359 --- /dev/null +++ b/samples/word/99-preview-apis/compare-documents.yaml @@ -0,0 +1,82 @@ +id: word-document-compare-documents +name: Compare documents +description: Compares two documents (the current one and a specified external one). +author: YijunMS +host: WORD +api_set: + WordApi: '1.8' +script: + content: | + $("#run").on("click", () => tryCatch(run)); + + async function run() { + // Compares the current document with a specified external document. + await Word.run(async (context) => { + // Absolute path of an online or local document. + const filePath = $("#filePath") + .val() + .toString(); + // Options that configure the compare operation. + const options = { + compareTarget: Word.CompareTarget.compareTargetCurrent, + detectFormatChanges: false + // Other options you choose... + }; + context.document.compare(filePath, options); + + await context.sync(); + + console.log("Differences shown in the current document."); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to compare two documents: the current one and a specified external one.

+
+ +
+

Try it out

+ + + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 49471c20eb006a375768c12fb1213c0957d0a15c..ef3dd55241d9593b583346dce2f977726772d1fd 100644 GIT binary patch delta 14913 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 delta 14779 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 033b34564..ca540d732 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15568,6 +15568,30 @@ console.log("No active comment was found in the selection so couldn't reply."); } }); +'Word.CompareTarget:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + + // Compares the current document with a specified external document. + + await Word.run(async (context) => { + // Absolute path of an online or local document. + const filePath = $("#filePath") + .val() + .toString(); + // Options that configure the compare operation. + const options = { + compareTarget: Word.CompareTarget.compareTargetCurrent, + detectFormatChanges: false + // Other options you choose... + }; + context.document.compare(filePath, options); + + await context.sync(); + + console.log("Differences shown in the current document."); + }); 'Word.ContentControl#delete:member(1)': - >- // Link to full sample: @@ -16451,6 +16475,30 @@ console.log(newStyleName + " has been added to the style list."); }); +'Word.Document#compare:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + + // Compares the current document with a specified external document. + + await Word.run(async (context) => { + // Absolute path of an online or local document. + const filePath = $("#filePath") + .val() + .toString(); + // Options that configure the compare operation. + const options = { + compareTarget: Word.CompareTarget.compareTargetCurrent, + detectFormatChanges: false + // Other options you choose... + }; + context.document.compare(filePath, options); + + await context.sync(); + + console.log("Differences shown in the current document."); + }); 'Word.Document#getParagraphByUniqueLocalId:member(1)': - >- // Link to full sample: @@ -16661,6 +16709,30 @@ } } }); +'Word.DocumentCompareOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + + // Compares the current document with a specified external document. + + await Word.run(async (context) => { + // Absolute path of an online or local document. + const filePath = $("#filePath") + .val() + .toString(); + // Options that configure the compare operation. + const options = { + compareTarget: Word.CompareTarget.compareTargetCurrent, + detectFormatChanges: false + // Other options you choose... + }; + context.document.compare(filePath, options); + + await context.sync(); + + console.log("Differences shown in the current document."); + }); 'Word.DocumentCreated:class': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 1f097e4ed..72ebb0eea 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -48,6 +48,7 @@ "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", + "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" diff --git a/view/word.json b/view/word.json index b274c9a8f..7476607dd 100644 --- a/view/word.json +++ b/view/word.json @@ -48,6 +48,7 @@ "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", + "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" From d670b9d3c38b33615fc09d71c64885a242ab6047 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 29 Feb 2024 11:24:16 -0800 Subject: [PATCH 041/156] [Word] (custom XML part) Also map namespace example (#861) --- config/build.documentation.ts | 8 +- .../manage-custom-xml-part-ns.yaml | 12 + .../50-document/manage-custom-xml-part.yaml | 8 + snippet-extractor-metadata/word.xlsx | Bin 22886 -> 22974 bytes snippet-extractor-output/snippets.yaml | 1220 +++++++++++++++++ 5 files changed, 1244 insertions(+), 4 deletions(-) diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 154bc03c2..72eb9099b 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -161,13 +161,13 @@ function getExtractedDataFromSnippet( const whitespaceCountOnFirstLine = spaceFollowedByWordsRegex.exec(fullSnippetTextArray[0])[1].length; // Place snippet location as comment. - const editedFilename = filename.substr(filename.lastIndexOf('samples')).replace(/\\/g, '/'); - text = '// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/' + editedFilename + '\n'; + const editedFilename = filename.substring(filename.lastIndexOf('samples')).replace(/\\/g, '/'); + text = '// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/' + editedFilename + '\n\n'; text += indented .map(line => { - if (line.substr(0, whitespaceCountOnFirstLine).trim().length === 0) { - return line.substr(whitespaceCountOnFirstLine); + if (line.substring(0, whitespaceCountOnFirstLine).trim().length === 0) { + return line.substring(whitespaceCountOnFirstLine); } else { return line; } diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 137c28799..ee9b603b5 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -40,6 +40,8 @@ script: } async function query() { + // Original XML: JuanHongSally + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { const settings = context.document.settings; @@ -67,6 +69,8 @@ script: } async function getNamespace() { + // Original XML: JuanHongSally + // Gets the namespace URI from a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -88,6 +92,8 @@ script: } async function replace() { + // Original XML: JuanHongSally + // Replaces a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -120,6 +126,8 @@ script: } async function insertAttribute() { + // Original XML: JuanHongSally + // Inserts an attribute into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -149,6 +157,8 @@ script: } async function insertElement() { + // Original XML: JuanHongSally + // Inserts an element into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -178,6 +188,8 @@ script: } async function deleteCustomXmlPart() { + // Original XML: JuanHongSally + // Deletes a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index b9cdabe47..a5de8205b 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -37,6 +37,8 @@ script: } async function query() { + // Original XML: JuanHongSally + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { const settings = context.document.settings; @@ -64,6 +66,8 @@ script: } async function insertAttribute() { + // Original XML: JuanHongSally + // Inserts an attribute into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -88,6 +92,8 @@ script: } async function insertElement() { + // Original XML: JuanHongSally + // Inserts an element into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -117,6 +123,8 @@ script: } async function deleteCustomXmlPart() { + // Original XML: JuanHongSally + // Deletes a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index ef3dd55241d9593b583346dce2f977726772d1fd..93c23b30453f488107afdf39cfa4925a4bdef2f3 100644 GIT binary patch delta 15046 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 L3a(Y{Ka&3s%d20y delta 14917 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 w34?9QB`eG0C7)^`|92TAe`;ZZeaR { @@ -20,6 +21,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml + await Excel.run(async (context) => { context.application.calculate(Excel.CalculationType.full); }); @@ -28,6 +30,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml + await Excel.run(async (context) => { context.application.load("decimalSeparator,thousandsSeparator"); context.application.cultureInfo.numberFormat.load("numberDecimalSeparator,numberGroupSeparator"); @@ -56,6 +59,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml + await Excel.run(async (context) => { // Recreate the data in the worksheet with random data. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -90,6 +94,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -108,6 +113,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -126,6 +132,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -144,6 +151,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const sumCell = sheet.getRange("K4"); @@ -158,6 +166,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + // This function adds a percentage AutoFilter to the active worksheet // and applies the filter to a column of the used range. @@ -180,6 +189,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + // This function clears the AutoFilter setting from one column. await Excel.run(async (context) => { @@ -195,6 +205,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + // This function refreshes the AutoFilter to ensure that changes are captured. @@ -211,6 +222,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + // This function removes all AutoFilters from the active worksheet. await Excel.run(async (context) => { @@ -226,6 +238,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-changed.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -241,6 +254,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const sumRange = sheet.getRange("B20:P20"); @@ -259,6 +273,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -335,6 +350,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -411,6 +427,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml + await Excel.run(async (context) => { context.application.calculationMode = Excel.CalculationMode.manual; context.application.load("calculationMode"); @@ -423,6 +440,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml + await Excel.run(async (context) => { context.application.calculate(Excel.CalculationType.recalculate); await context.sync(); @@ -432,6 +450,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -508,6 +527,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -536,6 +556,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -612,6 +633,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -640,6 +662,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -668,6 +691,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -683,6 +707,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -698,6 +723,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml + // This function sets the value of cell A1 to a #BUSY! error using data types. @@ -721,6 +747,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adds a data table to a chart that already exists on the worksheet. @@ -739,6 +766,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + await Excel.run(async (context) => { const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); @@ -755,6 +783,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + async function chartActivated(event) { await Excel.run(async (context) => { // Retrieve the worksheet. @@ -774,6 +803,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + await Excel.run(async (context) => { const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); @@ -790,6 +820,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + async function chartDeactivated(event) { await Excel.run(async (context) => { // Callback function for when the chart is deactivated. @@ -801,6 +832,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -820,6 +852,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -835,6 +868,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + await Excel.run(async (context) => { const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); @@ -851,6 +885,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + async function chartActivated(event) { await Excel.run(async (context) => { // Retrieve the worksheet. @@ -870,6 +905,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + await Excel.run(async (context) => { const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); @@ -886,6 +922,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + async function chartDeactivated(event) { await Excel.run(async (context) => { // Callback function for when the chart is deactivated. @@ -897,6 +934,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adjusts the display and format of a chart data table that already exists on the worksheet. @@ -926,6 +964,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adjusts the display and format of a chart data table that already exists on the worksheet. @@ -955,6 +994,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adjusts the display and format of a chart data table that already exists on the worksheet. @@ -984,6 +1024,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adjusts the display and format of a chart data table that already exists on the worksheet. @@ -1013,6 +1054,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adjusts the display and format of a chart data table that already exists on the worksheet. @@ -1042,6 +1084,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adds a data table to a chart that already exists on the worksheet. @@ -1060,6 +1103,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adjusts the display and format of a chart data table that already exists on the worksheet. @@ -1089,6 +1133,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + // This function adjusts the display and format of a chart data table that already exists on the worksheet. @@ -1118,6 +1163,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-point.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1134,6 +1180,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-legend.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1156,6 +1203,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const seriesCollection = sheet.charts.getItemAt(0).series; @@ -1176,6 +1224,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml + // This function retrieves the data source information of a chart series in the Sample worksheet. @@ -1202,6 +1251,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml + // This function retrieves the data source information of a chart series in the Sample worksheet. @@ -1228,6 +1278,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1253,6 +1304,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -1285,6 +1337,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -1317,6 +1370,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -1349,6 +1403,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -1381,6 +1436,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + await Excel.run(async (context) => { /* The table is expected to look like this: @@ -1430,6 +1486,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1449,6 +1506,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml + await Excel.run(async (context) => { // Create a new worksheet called "Sample" and activate it. context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -1488,6 +1546,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1513,6 +1572,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let chart = sheet.charts.getItemAt(0); @@ -1526,6 +1586,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const title = sheet.charts.getItemAt(0).title; @@ -1538,6 +1599,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1556,6 +1618,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1571,6 +1634,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -1590,6 +1654,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-create-several-charts.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); let salesTable = sheet.tables.getItem("SalesTable"); @@ -1611,6 +1676,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -1639,6 +1705,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml + await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.skipSave); }); @@ -1647,6 +1714,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -1666,6 +1734,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); const comment = sheet.comments.getItemAt(0); @@ -1677,6 +1746,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + await Excel.run(async (context) => { context.workbook.comments.getItemByCell("Comments!A2").delete(); await context.sync(); @@ -1686,6 +1756,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + await Excel.run(async (context) => { const comment = context.workbook.comments.getItemByCell("Comments!A2"); comment.load(["authorEmail", "authorName", "creationDate"]); @@ -1699,6 +1770,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-resolution.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); sheet.comments.getItemAt(0).resolved = true; @@ -1709,6 +1781,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); @@ -1721,6 +1794,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + await Excel.run(async (context) => { const comments = context.workbook.worksheets.getActiveWorksheet().comments; @@ -1737,6 +1811,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + async function commentAdded(event: Excel.CommentAddedEventArgs) { // Retrieve the added comment using the comment ID. // Note: This function assumes only a single comment is added at a time. @@ -1761,6 +1836,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + await Excel.run(async (context) => { const comments = context.workbook.worksheets.getActiveWorksheet().comments; @@ -1777,6 +1853,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + async function commentChanged(event: Excel.CommentChangedEventArgs) { // Retrieve the changed comment using the comment ID. // Note: This function assumes only a single comment is changed at a time. @@ -1801,6 +1878,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + await Excel.run(async (context) => { const comments = context.workbook.worksheets.getActiveWorksheet().comments; @@ -1817,6 +1895,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + async function commentDeleted(event: Excel.CommentDeletedEventArgs) { // Print out the deleted comment's ID. // Note: This function assumes only a single comment is deleted at a time. @@ -1830,6 +1909,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); const comment = sheet.comments.getItemAt(0); @@ -1847,6 +1927,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + await Excel.run(async (context) => { // Remove the first comment reply from this worksheet's first comment. const sheet = context.workbook.worksheets.getItem("Comments"); @@ -1859,6 +1940,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + await Excel.run(async (context) => { // Adds a reply to the first comment in this worksheet. const sheet = context.workbook.worksheets.getItem("Comments"); @@ -1871,6 +1953,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); const mention = { @@ -1895,6 +1978,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -1910,6 +1994,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -1925,6 +2010,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1939,6 +2025,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B21:E23"); @@ -1954,6 +2041,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -1973,6 +2061,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -1987,6 +2076,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2001,6 +2091,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const worksheetRange = sheet.getRange(); @@ -2031,6 +2122,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2074,6 +2166,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -2089,6 +2182,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -2104,6 +2198,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const worksheetRange = sheet.getRange(); @@ -2134,6 +2229,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -2153,6 +2249,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange(); @@ -2167,6 +2264,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const worksheetRange = sheet.getRange(); @@ -2197,6 +2295,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -2216,6 +2315,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2259,6 +2359,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); queueCommandsToClearAllConditionalFormats(sheet); @@ -2297,6 +2398,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2311,6 +2413,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); queueCommandsToClearAllConditionalFormats(sheet); @@ -2349,6 +2452,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2392,6 +2496,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2435,6 +2540,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2478,6 +2584,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2521,6 +2628,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -2536,6 +2644,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -2551,6 +2660,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -2566,6 +2676,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.addLine(200, 50, 300, 150, Excel.ConnectorType.straight); @@ -2577,6 +2688,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Comments"); const mention = { @@ -2601,6 +2713,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info-date-time.yaml + await Excel.run(async (context) => { context.application.cultureInfo.datetimeFormat.load([ "longDatePattern", @@ -2641,6 +2754,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2655,6 +2769,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml + await Excel.run(async (context) => { // Get the key/value pair from the task pane. const userKey = $("#key").text(); @@ -2673,6 +2788,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -2705,6 +2821,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + await Excel.run(async (context) => { // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. @@ -2729,6 +2846,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + await Excel.run(async (context) => { // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. @@ -2753,6 +2871,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -2777,6 +2896,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + await Excel.run(async (context) => { // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. @@ -2801,6 +2921,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml + await Excel.run(async (context) => { $("#display-xml").text(""); const contosoNamespace = "http://schemas.contoso.com/review/1.0"; @@ -2833,6 +2954,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -2857,6 +2979,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml + await Excel.run(async (context) => { $("#display-xml").text(""); const contosoNamespace = "http://schemas.contoso.com/review/1.0"; @@ -2889,6 +3012,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -2921,6 +3045,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml + await Excel.run(async (context) => { $("#display-xml").text(""); const contosoNamespace = "http://schemas.contoso.com/review/1.0"; @@ -2953,6 +3078,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -2967,6 +3093,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + await Excel.run(async (context) => { const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies dataHierarchies.load("no-properties-needed"); @@ -2981,6 +3108,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); const farmDataHierarchy: Excel.DataPivotHierarchy = pivotTable.dataHierarchies.getItem("Sum of Crates Sold at Farm"); @@ -3007,6 +3135,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const commentsRange = @@ -3039,6 +3168,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); @@ -3075,6 +3205,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const nameRange = @@ -3101,6 +3232,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); @@ -3137,6 +3269,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const nameRange = @@ -3163,6 +3296,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); @@ -3199,6 +3333,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a date-based PivotFilter. @@ -3231,6 +3366,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + // This function deletes data from a range and sets the delete shift direction to "up". @@ -3244,6 +3380,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml + await Excel.run(async (context) => { // Load the keys and values of all custom properties. const customDocProperties = context.workbook.properties.custom; @@ -3261,6 +3398,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/filter-data.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3285,6 +3423,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-icons.yaml + function createEntitiesWithIcons(icons): Excel.EntityCellValue[][] { /* This method creates an entity data type for each * icon in the `EntityCompactLayoutIcons` enum, @@ -3313,6 +3452,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml + // This function sets the value of cell A1 to a #BUSY! error using data types. @@ -3336,6 +3476,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml + // This function sets the value of cell A1 to a #BUSY! error using data types. @@ -3359,6 +3500,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3435,6 +3577,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + // This function adds a percentage AutoFilter to the active worksheet // and applies the filter to a column of the used range. @@ -3457,6 +3600,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a date-based PivotFilter. @@ -3489,6 +3633,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml + // This function creates a formatted number data type, // and sets the format of this data type as a currency. @@ -3516,6 +3661,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml + // This function creates a formatted number data type, // and sets the format of this data type as a date. @@ -3542,6 +3688,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon); @@ -3556,6 +3703,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3574,6 +3722,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml + await Excel.run(async (context) => { // Retrieve the worksheet and the table in that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -3593,6 +3742,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -3636,6 +3786,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -3679,6 +3830,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B8:E13"); @@ -3722,6 +3874,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const image = sheet.shapes.getItem("Image").image; @@ -3736,6 +3889,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/insert-delete-clear-range.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B4:E4"); @@ -3749,6 +3903,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml + await Excel.run(async (context) => { // Get the selected range. const range = context.workbook.getSelectedRange(); @@ -3774,6 +3929,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a PivotFilter to filter based on the strings of item labels. @@ -3800,6 +3956,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -3812,6 +3969,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -3824,6 +3982,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -3836,6 +3995,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -3848,6 +4008,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml + await Excel.run(async (context) => { // Log all the named items in the active worksheet. const namedItems = context.workbook.worksheets.getActiveWorksheet().names.load(); @@ -3867,6 +4028,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const totalName = sheet.names.getItemOrNullObject("TotalAmount"); @@ -3889,6 +4051,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/update-named-item.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -3913,6 +4076,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const headerRange = sheet.getRange("A1:D1"); @@ -3927,6 +4091,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml + // This will convert a number like "14,37" to "14.37" // (assuming the system decimal separator is "."). @@ -3968,6 +4133,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml + await Excel.run(async (context) => { // This will convert a number like "123-456-789" to "123,456,789" // (assuming the system thousands separator is ","). @@ -3993,6 +4159,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.horizontalPageBreaks.add("A21:E21"); @@ -4003,6 +4170,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.centerHorizontally = true; @@ -4014,6 +4182,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.centerHorizontally = true; @@ -4025,6 +4194,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; @@ -4035,6 +4205,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.setPrintArea("A1:D41"); @@ -4045,6 +4216,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.setPrintTitleRows("$1:$1"); @@ -4055,6 +4227,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.zoom = { scale: 200 }; @@ -4065,6 +4238,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; @@ -4075,6 +4249,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); @@ -4090,6 +4265,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Clear all the PivotFilters. @@ -4109,6 +4285,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a date-based PivotFilter. @@ -4141,6 +4318,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a PivotFilter to filter based on the strings of item labels. @@ -4167,6 +4345,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a PivotFilter to filter on manually-selected items. @@ -4193,6 +4372,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a PivotFilter to filter on the values correlated with a row. @@ -4219,6 +4399,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a PivotFilter to filter on the values correlated with a row. @@ -4245,6 +4426,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Set the alt text for the displayed PivotTable. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4261,6 +4443,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Add a blank row after each PivotItem in the row hierarchy. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4276,6 +4459,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Set a default value for an empty cell in the PivotTable. This doesn't include cells left blank by the layout. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4292,6 +4476,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Toggle whether empty cells are filled with a default value. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4311,6 +4496,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -4332,6 +4518,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Change the PivotLayout.type to a new type. const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -4355,6 +4542,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Set whether the PivotTable keeps the established format after it is refreshed and recalculated. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4374,6 +4562,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Repeat the PivotItem labels for each row used by another level of the row hierarchy. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4389,6 +4578,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Turn the grand totals on and off for the rows and columns. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4412,6 +4602,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Turn the field headers on and off for the row and column hierarchies. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4429,6 +4620,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + await Excel.run(async (context) => { // Turn the grand totals on and off for the rows and columns. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); @@ -4452,6 +4644,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -4474,6 +4667,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold at Farm")); @@ -4486,6 +4680,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + await Excel.run(async (context) => { context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); @@ -4496,6 +4691,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + async function filter(functionType: Excel.AggregationFunction) { await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -4516,6 +4712,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml + // This function logs information about the data source of a PivotTable. await Excel.run(async (context) => { @@ -4536,6 +4733,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml + // This function logs information about the data source of a PivotTable. await Excel.run(async (context) => { @@ -4556,6 +4754,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); pivotTable.layout.load("layoutType"); @@ -4577,6 +4776,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml + // This function refreshes the "Farm Sales" PivotTable, // which updates the PivotTable with changes made to the source table. @@ -4591,6 +4791,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + await Excel.run(async (context) => { const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); @@ -4603,6 +4804,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml + // This function refreshes the "Farm Sales" PivotTable, // which updates the PivotTable with changes made to the source table. @@ -4617,6 +4819,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:M5"); @@ -4632,6 +4835,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const sumCell = sheet.getRange("P4"); @@ -4646,6 +4850,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); // Place a label in front of the copied data. @@ -4661,6 +4866,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); @@ -4685,6 +4891,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); @@ -4709,6 +4916,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const cell = context.workbook.getActiveCell(); @@ -4737,6 +4945,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml + // This function highlights all the dependent cells of the active cell. // Dependent cells contain formulas that refer to other cells. @@ -4764,6 +4973,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.yaml + await Excel.run(async (context) => { // Direct dependents are cells that contain formulas that refer to other cells. let range = context.workbook.getActiveCell(); @@ -4787,6 +4997,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. // A "direct precedent" is a cell directly referenced by the selected formula. @@ -4811,6 +5022,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml + await Excel.run(async (context) => { // Get the selected range. const range = context.workbook.getSelectedRange(); @@ -4836,6 +5048,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -4895,6 +5108,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml + await Excel.run(async (context) => { // Retrieve the worksheet and the table in that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -4921,6 +5135,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + await Excel.run(async (context) => { const activeRange = context.workbook.getSelectedRange(); @@ -4948,6 +5163,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. let range = context.workbook.getActiveCell(); @@ -4971,6 +5187,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml + await Excel.run(async (context) => { // Get the selected range. const range = context.workbook.getSelectedRange(); @@ -4996,6 +5213,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5012,6 +5230,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -5034,6 +5253,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -5093,6 +5313,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -5130,6 +5351,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5148,6 +5370,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -5177,6 +5400,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml + await Excel.run(async (context) => { // Retrieve the worksheet and the table in that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5196,6 +5420,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); // Place a label in front of the moved data. @@ -5210,6 +5435,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:D11"); @@ -5226,6 +5452,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -5245,6 +5472,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5321,6 +5549,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + async function sortTopToBottom(criteria: string) { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5350,6 +5579,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); let range = worksheet.getRange("A1:E1"); @@ -5366,6 +5596,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5382,6 +5613,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml + // This function creates a formatted number data type, // and sets the format of this data type as a date. @@ -5408,6 +5640,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5424,6 +5657,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); // Place a label in front of the copied data. @@ -5439,6 +5673,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-text-orientation.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:E2"); @@ -5454,6 +5689,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -5483,6 +5719,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -5512,6 +5749,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -5541,6 +5779,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -5570,6 +5809,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Orders"); @@ -5598,6 +5838,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); style.load("textOrientation, horizontalAlignment, autoIndent, readingOrder, wrapText, includeProtection, shrinkToFit, locked"); @@ -5618,6 +5859,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B2:D11"); @@ -5634,6 +5876,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml + await Excel.run(async (context) => { context.runtime.load("enableEvents"); await context.sync(); @@ -5654,6 +5897,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml + await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.prompt); }); @@ -5662,6 +5906,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + searchDirectionToggle = searchDirectionToggle === Excel.SearchDirection.forward ? Excel.SearchDirection.backwards : Excel.SearchDirection.forward; @@ -5672,6 +5917,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5748,6 +5994,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; let needsReview = settings.getItem("NeedsReview"); @@ -5769,6 +6016,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); @@ -5781,6 +6029,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; let needsReview = settings.getItem("NeedsReview"); @@ -5802,6 +6051,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); @@ -5814,6 +6064,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Shapes").delete(); const sheet = context.workbook.worksheets.add("Shapes"); @@ -5832,6 +6083,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace); @@ -5847,6 +6099,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); @@ -5862,6 +6115,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -5876,6 +6130,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Square") @@ -5887,6 +6142,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); @@ -5898,6 +6154,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Pentagon") @@ -5909,6 +6166,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.getItem("StraightLine").line; @@ -5927,6 +6185,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -5939,6 +6198,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle); @@ -5955,6 +6215,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -5967,6 +6228,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -5978,6 +6240,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.getItem("Textbox"); @@ -5989,6 +6252,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon); @@ -6003,6 +6267,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const square = sheet.shapes.getItem("Square"); @@ -6020,6 +6285,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + const myFile = document.getElementById("selectedFile"); const reader = new FileReader(); @@ -6045,6 +6311,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const line = shapes.addLine(200, 50, 300, 150, Excel.ConnectorType.straight); @@ -6056,6 +6323,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.addTextBox("A box with text"); @@ -6071,6 +6339,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); @@ -6085,6 +6354,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -6097,6 +6367,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.getItem("Textbox"); @@ -6108,6 +6379,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") @@ -6119,6 +6391,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml + await Excel.run(async (context) => { const visibleSheets = await filterWorksheetsByVisibility(context, Excel.SheetVisibility.visible); @@ -6139,6 +6412,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); const farmDataHierarchy: Excel.DataPivotHierarchy = pivotTable.dataHierarchies.getItem("Sum of Crates Sold at Farm"); @@ -6165,6 +6439,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml + await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); const farmDataHierarchy: Excel.DataPivotHierarchy = pivotTable.dataHierarchies.getItem("Sum of Crates Sold at Farm"); @@ -6194,6 +6469,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.clearFilters(); @@ -6204,6 +6480,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.slicers.getItemAt(0).delete(); @@ -6214,6 +6491,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.selectItems(["Lemon", "Lime", "Orange"]); @@ -6224,6 +6502,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.style = "SlicerStyleLight6"; @@ -6234,6 +6513,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Pivot"); const slicer = sheet.slicers.add( @@ -6248,6 +6528,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); slicer.caption = "Fruit Types"; @@ -6262,6 +6543,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + async function sortTopToBottom(criteria: string) { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -6291,6 +6573,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + async function sortLeftToRight(criteria: string) { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -6320,6 +6603,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/streaming-function.yaml + /** @CustomFunction * @description Increments the cell with a given amount at a specified interval in milliseconds. * @param {number} amount - The amount to add to the cell value on each increment. @@ -6345,6 +6629,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); @@ -6361,6 +6646,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Normal"); style.font.load("bold, color, italic, name, size"); @@ -6380,6 +6666,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); let range = worksheet.getRange("A1:E1"); @@ -6396,6 +6683,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let style = context.workbook.styles.getItem("Diagonal Orientation Style"); style.load("textOrientation, horizontalAlignment, autoIndent, readingOrder, wrapText, includeProtection, shrinkToFit, locked"); @@ -6416,6 +6704,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -6441,6 +6730,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -6466,6 +6756,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml + await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); table.onChanged.add(onChange); @@ -6478,6 +6769,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml + await Excel.run(async (context) => { let table = context.workbook.tables.getItemAt(0); table.onSelectionChanged.add(onSelectionChange); @@ -6490,6 +6782,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/resize-table.yaml + await Excel.run(async (context) => { // Retrieve the worksheet and a table on that worksheet. const sheet = context.workbook.worksheets.getItem("Sample"); @@ -6505,6 +6798,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-change-event-details.yaml + async function onTableChanged(eventArgs: Excel.TableChangedEventArgs) { await Excel.run(async (context) => { const details = eventArgs.details; @@ -6519,6 +6813,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml + async function onChange(event) { await Excel.run(async (context) => { let table = context.workbook.tables.getItem(event.tableId); @@ -6537,6 +6832,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml + async function onChange(event) { await Excel.run(async (context) => { let table = context.workbook.tables.getItem(event.tableId); @@ -6555,6 +6851,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml + await Excel.run(async (context) => { let tables = context.workbook.tables; tables.onChanged.add(onChange); @@ -6567,6 +6864,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml + async function onSelectionChange(args) { await Excel.run(async (context) => { console.log("Handler for table onSelectionChanged event has been triggered. The new selection is: " + args.address); @@ -6577,6 +6875,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -6592,6 +6891,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("B16:D18"); @@ -6607,6 +6907,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml + await Excel.run(async (context) => { const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.getItem("Textbox"); @@ -6618,6 +6919,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + await Excel.run(async (context) => { // Add a PivotFilter to filter on the values correlated with a row. @@ -6644,6 +6946,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let worksheet = context.workbook.worksheets.getItem("Sample"); let range = worksheet.getRange("A1:E1"); @@ -6658,6 +6961,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml + // This function retrieves the image URL from the selected cell and opens that image in a new browser tab. @@ -6685,6 +6989,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml + // This function inserts a web image into the currently selected cell. await Excel.run(async (context) => { @@ -6720,6 +7025,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml + await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.save); }); @@ -6728,6 +7034,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml + await Excel.run(async (context) => { let myWorkbook = context.workbook; @@ -6743,6 +7050,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + await Excel.run(async (context) => { const selectedRanges = context.workbook.getSelectedRanges(); @@ -6755,6 +7063,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml + // Retrieve the file and set up an HTML FileReader element. const myFile = document.getElementById("file"); @@ -6777,6 +7086,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml + await Excel.run(async (context) => { // Retrieve the source workbook. const workbook = context.workbook; @@ -6797,6 +7107,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + async function workbookActivated(event: Excel.WorkbookActivatedEventArgs) { await Excel.run(async (context) => { // Callback function for when the workbook is activated. @@ -6807,6 +7118,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + await Excel.run(async (context) => { const workbook = context.workbook; @@ -6821,6 +7133,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + await Excel.run(async (context) => { // Get the names of all the PivotTables in the workbook. const pivotTables = context.workbook.pivotTables; @@ -6838,6 +7151,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml + await Excel.run(async (context) => { let titleValue = "Excel document properties API"; let subjectValue = "Set and get document properties"; @@ -6867,6 +7181,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml + await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.save); }); @@ -6875,6 +7190,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + await Excel.run(async (context) => { let styles = context.workbook.styles; @@ -6900,6 +7216,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); passwordHelper(password); @@ -6919,6 +7236,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); passwordHelper(password); @@ -6932,6 +7250,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. // A "direct precedent" is a cell directly referenced by the selected formula. @@ -6956,6 +7275,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + // This function adds a percentage AutoFilter to the active worksheet // and applies the filter to a column of the used range. @@ -6978,6 +7298,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml + await Excel.run(async (context) => { let myWorkbook = context.workbook; @@ -6996,6 +7317,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml + await Excel.run(async (context) => { // Load the keys and values of all custom properties in the current worksheet. const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; @@ -7013,6 +7335,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const foundRanges = sheet.findAllOrNullObject("Complete", { @@ -7033,6 +7356,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -7062,6 +7386,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; const currentSheet = sheets.getActiveWorksheet(); @@ -7087,6 +7412,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -7100,6 +7426,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); sheet.onChanged.add(onChange); @@ -7112,6 +7439,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + await Excel.run(async (context) => { console.log("Adding column handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -7137,6 +7465,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml + await Excel.run(async (context) => { // Retrieve the worksheet named "Sample". let sheet = context.workbook.worksheets.getItem("Sample"); @@ -7151,6 +7480,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml + async function formulaChangeHandler(event: Excel.WorksheetFormulaChangedEventArgs) { await Excel.run(async (context) => { @@ -7172,6 +7502,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml + // This function registers an event handler for the onProtectionChanged event of a worksheet. @@ -7190,6 +7521,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml + async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { // This function is an event handler that returns the protection status of a worksheet @@ -7208,6 +7540,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + await Excel.run(async (context) => { console.log("Adding row handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -7233,6 +7566,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.onSingleClicked.add((event) => { @@ -7251,6 +7585,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + await Excel.run(async (context) => { // Get the names of all the PivotTables in the current worksheet. const pivotTables = context.workbook.worksheets.getActiveWorksheet().pivotTables; @@ -7268,6 +7603,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/gridlines.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.showGridlines = true; @@ -7279,6 +7615,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -7291,6 +7628,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Pivot"); const slicer = sheet.slicers.add( @@ -7305,6 +7643,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml + await Excel.run(async (context) => { const activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.tabColor = "#FF0000"; @@ -7316,6 +7655,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + async function onWorksheetAdd(event) { await Excel.run(async (context) => { console.log( @@ -7329,6 +7669,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + async function onChange(event: Excel.WorksheetChangedEventArgs) { // This function is an event handler that returns the address, trigger source, // and insert or delete shift directions of the change. @@ -7358,6 +7699,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + // This function deletes data from a range and sets the delete shift direction to "up". @@ -7371,6 +7713,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + async function onChange(event: Excel.WorksheetChangedEventArgs) { // This function is an event handler that returns the address, trigger source, // and insert or delete shift directions of the change. @@ -7401,6 +7744,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -7430,6 +7774,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + await Excel.run(async (context) => { const sheets = context.workbook.worksheets; @@ -7459,6 +7804,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onActivated.add(onActivate); @@ -7471,6 +7817,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { let sheet = context.workbook.worksheets; sheet.onAdded.add(onWorksheetAdd); @@ -7483,6 +7830,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { let sheets = context.workbook.worksheets; sheets.onDeactivated.add(onDeactivate); @@ -7495,6 +7843,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml + await Excel.run(async (context) => { // Get the key/value pair from the task pane. const userKey = $("#key").text(); @@ -7513,6 +7862,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -7526,6 +7876,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -7539,6 +7890,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -7552,6 +7904,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const frozenRange = sheet.freezePanes.getLocationOrNullObject(); @@ -7570,6 +7923,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); sheet.freezePanes.unfreeze(); @@ -7581,6 +7935,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml + await Excel.run(async (context) => { // Retrieve the source workbook. const workbook = context.workbook; @@ -7601,6 +7956,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); passwordHelper(password); @@ -7620,6 +7976,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); passwordHelper(password); @@ -7633,6 +7990,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml + async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { // This function is an event handler that returns the protection status of a worksheet @@ -7651,6 +8009,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml + async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { // This function is an event handler that returns the protection status of a worksheet @@ -7669,6 +8028,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml + async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { // This function is an event handler that returns the protection status of a worksheet @@ -7687,6 +8047,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.onSingleClicked.add((event) => { @@ -7705,6 +8066,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + const attachmentUrl = $("#attachmentUrl").val(); Office.context.mailbox.item.addFileAttachmentAsync( @@ -7717,6 +8079,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; @@ -7729,6 +8092,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Set the signature for the current item with inline image. const modIcon1Base64 = @@ -7759,6 +8123,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + const attachmentItemId = $("#attachmentItemId").val(); Office.context.mailbox.item.addItemAttachmentAsync( @@ -7771,6 +8136,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -7788,6 +8154,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + // Note: In order for you to successfully add a category, // it must be in the mailbox categories master list. @@ -7817,6 +8184,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -7842,12 +8210,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml + Office.context.mailbox.item.close(); 'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Disable the client signature. Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) @@ -7863,6 +8233,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + Office.context.mailbox.item.end.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -7874,6 +8245,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Get start date failed with message ${result.error.message}`); @@ -7895,6 +8267,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Failed to get locations. Error message: ${result.error.message}`); @@ -7916,6 +8289,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + const locations = [ { id: "Contoso", @@ -7939,6 +8313,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + const locations = [ { id: "Contoso", @@ -7963,6 +8338,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + // Gets the attachments of the current message or appointment in compose mode. @@ -7994,6 +8370,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + Office.context.mailbox.item.getAttachmentsAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(result.error.message); @@ -8028,6 +8405,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + Office.context.mailbox.item.getItemIdAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`getItemIdAsync failed with message: ${result.error.message}`); @@ -8040,6 +8418,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -8055,6 +8434,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on an item from a shared folder."); return; @@ -8069,6 +8449,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on an appointment from a shared folder."); return; @@ -8115,6 +8496,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Is this an all-day event? " + asyncResult.value); @@ -8126,6 +8508,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.isAllDayEvent.setAsync(true, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -8139,6 +8522,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Check if the client signature is currently enabled. Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) @@ -8154,6 +8538,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + const itemType = Office.context.mailbox.item.itemType; switch (itemType) { @@ -8169,6 +8554,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); @@ -8190,6 +8576,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + Office.context.mailbox.item.location.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -8201,6 +8588,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + const location = "my office"; Office.context.mailbox.item.location.setAsync(location, (result) => { @@ -8215,6 +8603,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a progress indicator to the mail item. const id = $("#notificationId").val().toString(); @@ -8230,6 +8619,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an informational notification to the mail item. const id = $("#notificationId").val().toString(); @@ -8247,6 +8637,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a persistent information notification to the mail item. const id = $("#notificationId").val().toString(); @@ -8264,6 +8655,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Gets all the notification messages and their keys for the current mail item. @@ -8280,6 +8672,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Replaces a notification message of a given key with another message. const id = $("#notificationId").val().toString(); @@ -8297,6 +8690,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Removes a notification message from the current mail item. const id = $("#notificationId").val().toString(); @@ -8308,6 +8702,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -8330,6 +8725,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + const email = $("#emailOptional") .val() .toString(); @@ -8348,6 +8744,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml + Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const apptOrganizer = asyncResult.value; @@ -8361,6 +8758,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const recurrence = asyncResult.value; @@ -8377,6 +8775,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + // Important: Can only set the recurrence pattern of an appointment series. @@ -8428,6 +8827,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), { asyncContext : null }, @@ -8445,6 +8845,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -8467,6 +8868,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + const email = $("#emailRequired") .val() .toString(); @@ -8485,6 +8887,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/save.yaml + Office.context.mailbox.item.saveAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log(`saveAsync succeeded, itemId is ${result.value}`); @@ -8498,6 +8901,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Sensitivity: " + asyncResult.value); @@ -8509,6 +8913,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.sensitivity.setAsync( Office.MailboxEnums.AppointmentSensitivityType.Confidential, function callback(asyncResult) { @@ -8524,6 +8929,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + // This snippet gets the current mail item's sensitivity label. Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { @@ -8544,6 +8950,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + const seriesId = Office.context.mailbox.item.seriesId; @@ -8559,6 +8966,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("The sessionData is " + JSON.stringify(asyncResult.value)); @@ -8571,6 +8979,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml + Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -8584,6 +8993,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -8595,6 +9005,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + const start = new Date(); // Represents current date and time. start.setDate(start.getDate() + 2); // Add 2 days to current date. @@ -8611,6 +9022,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + Office.context.mailbox.item.subject.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -8622,6 +9034,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + let subject = "Hello World!"; Office.context.mailbox.item.subject.setAsync(subject, (result) => { @@ -8636,6 +9049,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml + const attachments = Office.context.mailbox.item.attachments; console.log(attachments); @@ -8644,6 +9058,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -8661,6 +9076,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + // Note: In order for you to successfully add a category, // it must be in the mailbox categories master list. @@ -8690,6 +9106,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -8715,6 +9132,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); 'Office.AppointmentRead#dateTimeModified:member': @@ -8722,6 +9140,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); 'Office.AppointmentRead#displayReplyAllForm:member(1)': @@ -8729,6 +9148,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with some bold text."); 'Office.AppointmentRead#displayReplyAllFormAsync:member(1)': @@ -8736,6 +9156,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL with some bold text.", function( asyncResult @@ -8747,12 +9168,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyForm("This is a reply with some text in italics."); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + Office.context.mailbox.item.displayReplyForm({ htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", attachments: [ @@ -8771,6 +9194,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyFormAsync("This is a reply with some text in italics.", function( asyncResult @@ -8781,6 +9205,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + // The async version is only available starting with requirement set 1.9, // and provides a callback when the new appointment form has been created. @@ -8802,12 +9227,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml + console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); 'Office.AppointmentRead#enhancedLocation:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Failed to get locations. Error message: ${result.error.message}`); @@ -8830,6 +9257,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + // Gets the attachments of the current message or appointment in read mode. // The item.attachments call can only be used in read mode. @@ -8851,6 +9279,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + const entities = Office.context.mailbox.item.getEntities(); let entityTypesFound = 0; @@ -8907,12 +9336,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); 'Office.AppointmentRead#getFilteredEntitiesByName:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + // This API would only work when you click on highlighted physical address that has the word "Way" in it. @@ -8922,6 +9353,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); @@ -8930,6 +9362,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); @@ -8938,6 +9371,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + const entities = Office.context.mailbox.item.getSelectedEntities(); let entityTypesFound = 0; @@ -8994,6 +9428,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { @@ -9008,6 +9443,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on an item from a shared folder."); return; @@ -9022,6 +9458,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on an appointment from a shared folder."); return; @@ -9068,12 +9505,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml + console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); 'Office.AppointmentRead#itemType:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + const itemType = Office.context.mailbox.item.itemType; switch (itemType) { @@ -9089,6 +9528,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); @@ -9110,6 +9550,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml + console.log(`Appointment location: ${Office.context.mailbox.item.location}`); 'Office.AppointmentRead#normalizedSubject:member': @@ -9117,6 +9558,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); 'Office.AppointmentRead#notificationMessages:member': @@ -9124,6 +9566,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a progress indicator to the mail item. const id = $("#notificationId").val().toString(); @@ -9139,6 +9582,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an informational notification to the mail item. const id = $("#notificationId").val().toString(); @@ -9156,6 +9600,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a persistent information notification to the mail item. const id = $("#notificationId").val().toString(); @@ -9173,6 +9618,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Gets all the notification messages and their keys for the current mail item. @@ -9189,6 +9635,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Replaces a notification message of a given key with another message. const id = $("#notificationId").val().toString(); @@ -9206,6 +9653,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Removes a notification message from the current mail item. const id = $("#notificationId").val().toString(); @@ -9217,6 +9665,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml + const apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; console.log("Optional attendees:"); @@ -9235,6 +9684,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml + const apptOrganizer = Office.context.mailbox.item.organizer; console.log("Organizer: " + apptOrganizer.displayName + " (" + @@ -9244,6 +9694,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml + const recurrence = Office.context.mailbox.item.recurrence; @@ -9259,6 +9710,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml + const apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; console.log("Required attendees:"); @@ -9277,6 +9729,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + const seriesId = Office.context.mailbox.item.seriesId; @@ -9292,18 +9745,21 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml + console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); 'Office.AppointmentRead#subject:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml + console.log(`Subject: ${Office.context.mailbox.item.subject}`); 'Office.Body#appendOnSendAsync:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/append-text-on-send.yaml + // This snippet appends text to the end of the message or appointment's body once it's sent. @@ -9334,6 +9790,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml + const mailItem = Office.context.mailbox.item; const base64String = @@ -9370,6 +9827,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-body-format.yaml + // Get the mail item's body format (plain text or HTML) and log it to the console. @@ -9386,6 +9844,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-to-item-body.yaml + /* This snippet adds text to the beginning of the message or appointment's body. @@ -9419,6 +9878,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-on-send.yaml + // This snippet prepends text to the beginning of the message or appointment's body once it's sent. @@ -9449,6 +9909,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml + const mailItem = Office.context.mailbox.item; const base64String = @@ -9485,6 +9946,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/replace-selected-text.yaml + /* This snippet replaces selected text in a message or appointment's body with specified text. @@ -9518,6 +9980,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Set the signature for the current item with inline image. const modIcon1Base64 = @@ -9547,6 +10010,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Set the signature for the current item. const signature = $("#signature").val(); @@ -9566,6 +10030,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + // Note: In order for you to successfully add a category, // it must be in the mailbox categories master list. @@ -9596,6 +10061,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -9614,6 +10080,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -9639,6 +10106,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + const propertyName = $("#propertyName").val(); const propertyValue = customProps.get(propertyName); @@ -9652,6 +10120,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + const propertyName = $("#propertyName").val(); customProps.remove(propertyName); @@ -9662,6 +10131,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + const propertyName = $("#propertyName").val(); const propertyValue = $("#propertyValue").val(); @@ -9675,6 +10145,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml + // This snippet gets the delivery date and time of a message. Office.context.mailbox.item.delayDeliveryTime.getAsync((asyncResult) => { @@ -9696,6 +10167,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml + function setDeliveryDate(minutes) { // This snippet sets the delivery date and time of a message. const currentTime = new Date().getTime(); @@ -9719,6 +10191,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml + // This snippet temporarily sets the content displayed in the body of a message in read mode. @@ -9743,6 +10216,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml + // This snippet temporarily sets the content displayed in the subject field of a message in read mode. @@ -9767,6 +10241,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml + // This snippet temporarily sets the content displayed in the body of a message in read mode. @@ -9791,6 +10266,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml + // This snippet temporarily sets the content displayed in the subject field of a message in read mode. @@ -9815,6 +10291,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + const locations = [ { id: "Contoso", @@ -9839,6 +10316,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Failed to get locations. Error message: ${result.error.message}`); @@ -9861,6 +10339,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + const locations = [ { id: "Contoso", @@ -9885,6 +10364,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml + Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgFrom = asyncResult.value; @@ -9898,6 +10378,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + Office.context.mailbox.item.internetHeaders.getAsync( ["preferred-fruit", "preferred-vegetable", "best-vegetable", "nonexistent-header"], function (asyncResult) { @@ -9913,6 +10394,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + Office.context.mailbox.item.internetHeaders.removeAsync( ["best-vegetable", "nonexistent-header"], function (asyncResult) { @@ -9928,6 +10410,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + Office.context.mailbox.item.internetHeaders.setAsync( { "preferred-fruit": "orange", "preferred-vegetable": "broccoli", "best-vegetable": "spinach" }, function (asyncResult) { @@ -9944,6 +10427,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Is this an all-day event? " + asyncResult.value); @@ -9956,6 +10440,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.isAllDayEvent.setAsync(true, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -9969,6 +10454,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + const itemType = Office.context.mailbox.item.itemType; switch (itemType) { @@ -9984,6 +10470,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + Office.context.mailbox.item.location.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -9996,6 +10483,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + const location = "my office"; Office.context.mailbox.item.location.setAsync(location, (result) => { @@ -10010,6 +10498,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); const ewsId = Office.context.mailbox.item.itemId; @@ -10034,6 +10523,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { const ewsId = Office.context.mailbox.item.itemId; @@ -10053,6 +10543,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); const ewsId = Office.context.mailbox.item.itemId; @@ -10077,6 +10568,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml + const itemId = $("#itemId").val(); Office.context.mailbox.displayAppointmentForm(itemId); @@ -10085,6 +10577,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml + const itemId = $("#itemId").val(); @@ -10101,6 +10594,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml + const itemId = $("#itemId").val(); Office.context.mailbox.displayMessageForm(itemId); @@ -10109,6 +10603,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml + const itemId = $("#itemId").val(); @@ -10125,6 +10620,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml + const start = new Date(); const end = new Date(); @@ -10147,6 +10643,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml + const start = new Date(); const end = new Date(); @@ -10178,6 +10675,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml + Office.context.mailbox.displayNewMessageForm({ toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item ccRecipients: ["sam@contoso.com"], @@ -10197,6 +10695,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml + // The async version is only available starting with requirement set 1.9, // and provides a callback when the new message form has been created. @@ -10225,6 +10724,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); const ewsId = Office.context.mailbox.item.itemId; @@ -10249,6 +10749,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { const ewsId = Office.context.mailbox.item.itemId; @@ -10269,6 +10770,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml + Office.context.mailbox.getCallbackTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Token retrieval failed with message: ${result.error.message}`); @@ -10281,6 +10783,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml + // Retrieves the selected messages' properties and logs them to the console. Office.context.mailbox.getSelectedItemsAsync((asyncResult) => { @@ -10301,6 +10804,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml + Office.context.mailbox.getUserIdentityTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Token retrieval failed with message: ${result.error.message}`); @@ -10313,6 +10817,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml + const ewsId = Office.context.mailbox.item.itemId; const request = `- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an error notification to the mail item. const id = $("#notificationId").val().toString(); @@ -10739,6 +11260,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + const itemType = Office.context.mailbox.item.itemType; switch (itemType) { @@ -10754,6 +11276,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + const locations = [ { id: "Contoso", @@ -10778,6 +11301,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + // Important: Can only set the recurrence pattern of an appointment series. @@ -10829,6 +11353,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml + // This function gets a mailbox's diagnostic information, such as Outlook client and version, and logs it to the console. @@ -10861,6 +11386,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml + const msgTo = Office.context.mailbox.item.to; const distributionLists = []; @@ -10915,6 +11441,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + // Important: Can only set the recurrence pattern of an appointment series. @@ -10966,6 +11493,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + // Important: Can only set the recurrence pattern of an appointment series. @@ -11017,6 +11545,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml + function organizeByResponse(attendees) { const accepted = []; const declined = []; @@ -11057,6 +11586,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { const ewsId = Office.context.mailbox.item.itemId; @@ -11077,6 +11607,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -11092,6 +11623,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + // Important: Can only set the recurrence pattern of an appointment series. @@ -11143,6 +11675,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml + const masterCategoriesToAdd = [ { displayName: "TestCategory", @@ -11164,6 +11697,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -11182,6 +11716,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml + const masterCategoriesToRemove = ["TestCategory"]; @@ -11198,6 +11733,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + const attachmentUrl = $("#attachmentUrl").val(); Office.context.mailbox.item.addFileAttachmentAsync( @@ -11210,6 +11746,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; @@ -11222,6 +11759,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Set the signature for the current item with inline image. const modIcon1Base64 = @@ -11252,6 +11790,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + const attachmentItemId = $("#attachmentItemId").val(); Office.context.mailbox.item.addItemAttachmentAsync( @@ -11264,6 +11803,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgBcc = asyncResult.value; @@ -11279,6 +11819,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + const email = $("#emailBcc") .val() .toString(); @@ -11296,6 +11837,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -11313,6 +11855,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + // Note: In order for you to successfully add a category, // it must be in the mailbox categories master list. @@ -11342,6 +11885,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -11367,6 +11911,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgCc = asyncResult.value; @@ -11382,6 +11927,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + const email = $("#emailCc") .val() .toString(); @@ -11399,12 +11945,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml + Office.context.mailbox.item.close(); 'Office.MessageCompose#closeAsync:member(2)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml + // This snippet closes the current message being composed and discards any unsaved changes when the optional property, discardItem, is set to true. @@ -11428,6 +11976,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); 'Office.MessageCompose#delayDeliveryTime:member': @@ -11435,6 +11984,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml + function setDeliveryDate(minutes) { // This snippet sets the delivery date and time of a message. const currentTime = new Date().getTime(); @@ -11458,6 +12008,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Disable the client signature. Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) @@ -11473,6 +12024,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml + Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgFrom = asyncResult.value; @@ -11486,6 +12038,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + // Gets the attachments of the current message or appointment in compose mode. @@ -11517,6 +12070,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + Office.context.mailbox.item.getAttachmentsAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(result.error.message); @@ -11551,6 +12105,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Get the compose type of the current message. Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { @@ -11570,6 +12125,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + Office.context.mailbox.item.getItemIdAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`getItemIdAsync failed with message: ${result.error.message}`); @@ -11582,6 +12138,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -11597,6 +12154,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on an item from a shared folder."); return; @@ -11611,6 +12169,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; @@ -11657,6 +12216,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + Office.context.mailbox.item.internetHeaders.getAsync( ["preferred-fruit", "preferred-vegetable", "best-vegetable", "nonexistent-header"], function (asyncResult) { @@ -11672,6 +12232,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + // Check if the client signature is currently enabled. Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) @@ -11687,6 +12248,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + const itemType = Office.context.mailbox.item.itemType; switch (itemType) { @@ -11702,6 +12264,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); @@ -11723,6 +12286,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a progress indicator to the mail item. const id = $("#notificationId").val().toString(); @@ -11738,6 +12302,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an informational notification to the mail item. const id = $("#notificationId").val().toString(); @@ -11755,6 +12320,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a persistent information notification to the mail item. const id = $("#notificationId").val().toString(); @@ -11772,6 +12338,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Gets all the notification messages and their keys for the current mail item. @@ -11788,6 +12355,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Replaces a notification message of a given key with another message. const id = $("#notificationId").val().toString(); @@ -11805,6 +12373,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Removes a notification message from the current mail item. const id = $("#notificationId").val().toString(); @@ -11816,6 +12385,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), { asyncContext : null }, @@ -11833,6 +12403,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + // This snippet gets the current mail item's sensitivity label. Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { @@ -11853,6 +12424,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + const seriesId = Office.context.mailbox.item.seriesId; @@ -11868,6 +12440,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("The sessionData is " + JSON.stringify(asyncResult.value)); @@ -11880,6 +12453,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml + Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -11893,6 +12467,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + Office.context.mailbox.item.subject.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -11904,6 +12479,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + let subject = "Hello World!"; Office.context.mailbox.item.subject.setAsync(subject, (result) => { @@ -11918,6 +12494,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + Office.context.mailbox.item.to.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgTo = asyncResult.value; @@ -11933,6 +12510,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + const email = $("#emailTo") .val() .toString(); @@ -11950,6 +12528,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml + const attachments = Office.context.mailbox.item.attachments; console.log(attachments); @@ -11958,6 +12537,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -11975,6 +12555,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + // Note: In order for you to successfully add a category, // it must be in the mailbox categories master list. @@ -12004,6 +12585,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const categories = asyncResult.value; @@ -12029,6 +12611,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml + const msgCc = Office.context.mailbox.item.cc; console.log("Message copied to:"); @@ -12041,6 +12624,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); 'Office.MessageRead#dateTimeCreated:member': @@ -12048,6 +12632,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); 'Office.MessageRead#dateTimeModified:member': @@ -12055,6 +12640,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); 'Office.MessageRead#display:member': @@ -12062,6 +12648,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml + // This snippet temporarily sets the content displayed in the body of a message in read mode. @@ -12086,6 +12673,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with some bold text."); 'Office.MessageRead#displayReplyAllFormAsync:member(1)': @@ -12093,6 +12681,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL with some bold text.", function( asyncResult @@ -12104,12 +12693,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyForm("This is a reply with some text in italics."); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + Office.context.mailbox.item.displayReplyForm({ htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", attachments: [ @@ -12128,6 +12719,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + Office.context.mailbox.item.displayReplyFormAsync("This is a reply with some text in italics.", function( asyncResult @@ -12138,6 +12730,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + // The async version is only available starting with requirement set 1.9, // and provides a callback when the new appointment form has been created. @@ -12159,12 +12752,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml + console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); 'Office.MessageRead#from:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml + const msgFrom = Office.context.mailbox.item.from; console.log("Message received from: " + msgFrom.displayName + " (" + @@ -12174,6 +12769,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml + Office.context.mailbox.item.getAllInternetHeadersAsync(function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -12199,6 +12795,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml + Office.context.mailbox.item.getAsFileAsync((asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { console.log(`Error encountered during processing: ${asyncResult.error.message}`); @@ -12212,6 +12809,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + // Gets the attachments of the current message or appointment in read mode. // The item.attachments call can only be used in read mode. @@ -12233,6 +12831,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + const entities = Office.context.mailbox.item.getEntities(); let entityTypesFound = 0; @@ -12289,12 +12888,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); 'Office.MessageRead#getFilteredEntitiesByName:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + // This API would only work when you click on highlighted physical address that has the word "Way" in it. @@ -12304,6 +12905,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); @@ -12312,6 +12914,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + // This API would only work when you click on highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); @@ -12320,6 +12923,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + const entities = Office.context.mailbox.item.getSelectedEntities(); let entityTypesFound = 0; @@ -12376,6 +12980,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { @@ -12390,6 +12995,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on an item from a shared folder."); return; @@ -12404,6 +13010,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { console.error("Try this sample on a message from a shared folder."); return; @@ -12450,6 +13057,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml + console.log(`Internet message ID: ${Office.context.mailbox.item.internetMessageId}`); 'Office.MessageRead#itemClass:member': @@ -12457,12 +13065,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml + console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); 'Office.MessageRead#itemType:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + const itemType = Office.context.mailbox.item.itemType; switch (itemType) { @@ -12478,6 +13088,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); @@ -12499,6 +13110,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml + console.log(`Appointment location: ${Office.context.mailbox.item.location}`); 'Office.MessageRead#normalizedSubject:member': @@ -12506,6 +13118,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); 'Office.MessageRead#notificationMessages:member': @@ -12513,6 +13126,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a progress indicator to the mail item. const id = $("#notificationId").val().toString(); @@ -12528,6 +13142,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an informational notification to the mail item. const id = $("#notificationId").val().toString(); @@ -12545,6 +13160,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a persistent information notification to the mail item. const id = $("#notificationId").val().toString(); @@ -12562,6 +13178,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Gets all the notification messages and their keys for the current mail item. @@ -12578,6 +13195,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Replaces a notification message of a given key with another message. const id = $("#notificationId").val().toString(); @@ -12595,6 +13213,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Removes a notification message from the current mail item. const id = $("#notificationId").val().toString(); @@ -12606,6 +13225,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml + const recurrence = Office.context.mailbox.item.recurrence; @@ -12621,6 +13241,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml + const msgSender = Office.context.mailbox.item.sender; console.log("Sender: " + msgSender.displayName + " (" + @@ -12630,6 +13251,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + const seriesId = Office.context.mailbox.item.seriesId; @@ -12645,18 +13267,21 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml + console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); 'Office.MessageRead#subject:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml + console.log(`Subject: ${Office.context.mailbox.item.subject}`); 'Office.MessageRead#to:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml + const msgTo = Office.context.mailbox.item.to; const distributionLists = []; @@ -12711,6 +13336,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an informational message with actions to the mail item. const id = $("#notificationId").val().toString(); @@ -12741,6 +13367,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Gets all the notification messages and their keys for the current mail item. @@ -12758,6 +13385,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a progress indicator to the mail item. const id = $("#notificationId").val().toString(); @@ -12773,6 +13401,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an informational notification to the mail item. const id = $("#notificationId").val().toString(); @@ -12790,6 +13419,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds a persistent information notification to the mail item. const id = $("#notificationId").val().toString(); @@ -12807,6 +13437,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Adds an error notification to the mail item. const id = $("#notificationId").val().toString(); @@ -12823,6 +13454,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Gets all the notification messages and their keys for the current mail item. @@ -12840,6 +13472,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Removes a notification message from the current mail item. const id = $("#notificationId").val().toString(); @@ -12851,6 +13484,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + // Replaces a notification message of a given key with another message. const id = $("#notificationId").val().toString(); @@ -12869,6 +13503,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml + Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const apptOrganizer = asyncResult.value; @@ -12882,6 +13517,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgBcc = asyncResult.value; @@ -12897,6 +13533,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgCc = asyncResult.value; @@ -12912,6 +13549,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -12934,6 +13572,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -12956,6 +13595,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + Office.context.mailbox.item.to.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const msgTo = asyncResult.value; @@ -12972,6 +13612,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + const email = $("#emailBcc") .val() .toString(); @@ -12988,6 +13629,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + const email = $("#emailCc") .val() .toString(); @@ -13004,6 +13646,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + const email = $("#emailOptional") .val() .toString(); @@ -13021,6 +13664,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + const email = $("#emailRequired") .val() .toString(); @@ -13038,6 +13682,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + const email = $("#emailTo") .val() .toString(); @@ -13055,6 +13700,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { const recurrence = asyncResult.value; @@ -13072,6 +13718,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + // Important: Can only set the recurrence pattern of an appointment series. @@ -13123,6 +13770,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml + const settingName = $("#settingName").val(); const settingValue = Office.context.roamingSettings.get(settingName); @@ -13135,6 +13783,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml + // Save settings in the mailbox to make it available in future sessions. Office.context.roamingSettings.saveAsync(function(result) { @@ -13149,6 +13798,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml + const settingName = $("#settingName").val(); const settingValue = $("#settingValue").val(); @@ -13161,6 +13811,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml + // Retrieves the selected messages' properties and logs them to the console. Office.context.mailbox.getSelectedItemsAsync((asyncResult) => { @@ -13181,6 +13832,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Sensitivity: " + asyncResult.value); @@ -13193,6 +13845,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + Office.context.mailbox.item.sensitivity.setAsync( Office.MailboxEnums.AppointmentSensitivityType.Confidential, function callback(asyncResult) { @@ -13208,6 +13861,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + // This snippet gets the current mail item's sensitivity label. Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { @@ -13228,6 +13882,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + // This snippet sets the sensitivity label on the current mail item. Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { @@ -13261,6 +13916,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml + // This snippet gets all available sensitivity labels from the catalog. Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { @@ -13283,6 +13939,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml + // This snippet determines if the sensitivity labels catalog is enabled on the current mailbox. @@ -13298,6 +13955,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + Office.context.mailbox.item.sessionData.clearAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("sessionData.clearAsync succeeded"); @@ -13310,6 +13968,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("The sessionData is " + JSON.stringify(asyncResult.value)); @@ -13322,6 +13981,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + Office.context.mailbox.item.sessionData.getAsync( "Date", function(asyncResult) { @@ -13336,6 +13996,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + Office.context.mailbox.item.sessionData.removeAsync( "Date", function callback(asyncResult) { @@ -13351,6 +14012,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + Office.context.mailbox.item.sessionData.setAsync( "Date", "7/24/2020", @@ -13366,6 +14028,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); @@ -13378,6 +14041,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + const start = new Date(); // Represents current date and time. start.setDate(start.getDate() + 2); // Add 2 days to current date. @@ -13393,6 +14057,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Get start date failed with message ${result.error.message}`); @@ -13414,6 +14079,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + // This function gets the collection of shapes on the first slide, // and adds a line to the collection, while specifying its @@ -13441,6 +14107,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + // This function gets the collection of shapes on the first slide, // and adds a hexagon shape to the collection, while specifying its @@ -13465,6 +14132,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { @@ -13491,6 +14159,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Gets the shapes you selected on the slide and displays their IDs on the task pane. @@ -13515,6 +14184,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Saves which shapes are selected so that they can be reselected later. await PowerPoint.run(async (context) => { @@ -13541,6 +14211,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + // Gets the selected slides and displays their IDs on the task pane. await PowerPoint.run(async (context) => { @@ -13577,6 +14248,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + // Saves which slides are currently selected so they can be reselected later. @@ -13606,6 +14278,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + // Gets the selected text range and prints data about the range on the task pane. @@ -13645,6 +14318,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { @@ -13659,6 +14333,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml + await PowerPoint.run(async function(context) { const selectedSlideID = await getSelectedSlideID(); @@ -13673,6 +14348,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + // Sets selection to the slides that were saved. await PowerPoint.run(async (context) => { @@ -13683,6 +14359,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + // Selects slides 2, 4, and 5. await PowerPoint.run(async (context) => { @@ -13709,6 +14386,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { @@ -13726,6 +14404,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { @@ -13753,6 +14432,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { @@ -13780,6 +14460,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { @@ -13807,6 +14488,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { @@ -13834,6 +14516,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + // This function gets the collection of shapes on the first slide, // and adds a hexagon shape to the collection, while specifying its @@ -13858,6 +14541,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + // This function gets the collection of shapes on the first slide, // and adds a line to the collection, while specifying its @@ -13885,6 +14569,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + // This function gets the collection of shapes on the first slide, // and adds a text box to the collection, while specifying its text, @@ -13909,6 +14594,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + await PowerPoint.run(async function(context) { const slide = context.presentation.slides.getItemAt(0); const shape = slide.shapes.getItemAt(0); @@ -13928,6 +14614,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { @@ -13945,6 +14632,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { @@ -13957,6 +14645,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + // Deletes the selected slides. await PowerPoint.run(async (context) => { @@ -13975,6 +14664,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { @@ -13987,6 +14677,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + // Selects the first two shapes on slide 1. await PowerPoint.run(async (context) => { @@ -14009,6 +14700,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + const chosenMaster = $("#master-id").val() as string; const chosenLayout = $("#layout-id").val() as string; @@ -14026,6 +14718,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + // Selects slides 2, 4, and 5. await PowerPoint.run(async (context) => { @@ -14052,6 +14745,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + await PowerPoint.run(async function(context) { const slide = context.presentation.slides.getItemAt(0); slide.tags.add("OCEAN", "Indian"); @@ -14073,6 +14767,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + await PowerPoint.run(async function (context) { let presentationTags = context.presentation.tags; @@ -14087,6 +14782,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + await PowerPoint.run(async function(context) { let selectedSlideIndex = await getSelectedSlideIndex(); @@ -14110,6 +14806,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { @@ -14122,6 +14819,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + // Selects the first 10 characters of the selected shape. await PowerPoint.run(async (context) => { @@ -14154,6 +14852,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { @@ -14168,6 +14867,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { const body = context.document.body; body.clear(); @@ -14189,6 +14889,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Deletes all annotations found in the selected paragraph. await Word.run(async (context) => { @@ -14215,6 +14916,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Gets annotations found in the selected paragraph. await Word.run(async (context) => { @@ -14237,6 +14939,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Accepts the first annotation found in the selected paragraph. await Word.run(async (context) => { @@ -14263,6 +14966,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Rejects the last annotation found in the selected paragraph. await Word.run(async (context) => { @@ -14289,6 +14993,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Registers event handlers. await Word.run(async (context) => { @@ -14308,6 +15013,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + async function onClickedHandler(args: Word.AnnotationClickedEventArgs) { await Word.run(async (context) => { const annotation = context.document.getAnnotationById(args.id); @@ -14323,6 +15029,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Gets annotations found in the selected paragraph. await Word.run(async (context) => { @@ -14345,6 +15052,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Registers event handlers. await Word.run(async (context) => { @@ -14364,6 +15072,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + async function onHoveredHandler(args: Word.AnnotationHoveredEventArgs) { await Word.run(async (context) => { const annotation = context.document.getAnnotationById(args.id); @@ -14379,6 +15088,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Registers event handlers. await Word.run(async (context) => { @@ -14398,6 +15108,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + async function onInsertedHandler(args: Word.AnnotationInsertedEventArgs) { await Word.run(async (context) => { const annotations = []; @@ -14420,6 +15131,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Registers event handlers. await Word.run(async (context) => { @@ -14439,6 +15151,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + async function onRemovedHandler(args: Word.AnnotationRemovedEventArgs) { await Word.run(async (context) => { for (let id of args.ids) { @@ -14451,6 +15164,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Adds annotations to the selected paragraph. await Word.run(async (context) => { @@ -14495,6 +15209,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Accepts the first annotation found in the selected paragraph. await Word.run(async (context) => { @@ -14521,6 +15236,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + // Updates the text of the current document with the text from another document passed in as a Base64-encoded string. @@ -14544,6 +15260,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml + // Gets style info from another document passed in as a Base64-encoded string. @@ -14558,6 +15275,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Clears out the content from the document body. // Run a batch operation against the Word object model. @@ -14582,6 +15300,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Gets the comments in the document body. await Word.run(async (context) => { @@ -14599,6 +15318,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Gets the HTML that represents the content of the body. // Run a batch operation against the Word object model. @@ -14620,6 +15340,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Gets the OOXML that represents the content of the body. // Run a batch operation against the Word object model. @@ -14641,6 +15362,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Gets all tracked changes. await Word.run(async (context) => { @@ -14656,6 +15378,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Inserts a page break at the beginning of the document. // Run a batch operation against the Word object model. @@ -14677,6 +15400,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Creates a content control using the document body. // Run a batch operation against the Word object model. @@ -14698,6 +15422,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Inserts the body from the external document at the beginning of this document. @@ -14720,6 +15445,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Inserts the HTML at the beginning of this document. // Run a batch operation against the Word object model. @@ -14741,6 +15467,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Inserts an image inline at the beginning of this document. // Run a batch operation against the Word object model. @@ -14766,6 +15493,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Inserts OOXML at the beginning of this document. // Run a batch operation against the Word object model. @@ -14803,6 +15531,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml + await Word.run(async (context) => { // Second sentence, let's insert it as a paragraph after the previously inserted one. const secondSentence = context.document.body.insertParagraph( @@ -14824,6 +15553,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. const data = [ @@ -14841,6 +15571,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Inserts text at the beginning of this document. // Run a batch operation against the Word object model. @@ -14862,6 +15593,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + // Does a basic text search and highlights matches in the document. await Word.run(async (context) => { @@ -14881,6 +15613,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + // Does a wildcard search and highlights matches in the document. await Word.run(async (context) => { @@ -14903,6 +15636,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Selects the entire body. // Run a batch operation against the Word object model. @@ -14922,6 +15656,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets all fields in the document body. await Word.run(async (context) => { @@ -14946,6 +15681,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Gets the style and the font size, font name, and font color properties on the body object. @@ -14979,6 +15715,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the footnotes in the document body. await Word.run(async (context) => { @@ -14993,6 +15730,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + // Gets the first image in the document. await Word.run(async (context) => { @@ -15012,6 +15750,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml + // Counts how many times each term appears in the document. await Word.run(async (context) => { @@ -15065,6 +15804,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + // Gets the content of the first cell in the first table. await Word.run(async (context) => { @@ -15079,6 +15819,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml + // Gets the text content of the body. // Run a batch operation against the Word object model. @@ -15100,6 +15841,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the referenced note's item type and body type, which are both "Footnote". @@ -15123,6 +15865,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the referenced note's item type and body type, which are both "Footnote". @@ -15146,6 +15889,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + // Updates border properties (e.g., type, width, color) of the specified style. @@ -15178,6 +15922,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + // Updates border properties (e.g., type, width, color) of the specified style. @@ -15210,6 +15955,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + // Updates border properties (e.g., type, width, color) of the specified style. @@ -15242,6 +15988,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + // Updates border properties (e.g., type, width, color) of the specified style. @@ -15274,6 +16021,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first table in the document. await Word.run(async (context) => { @@ -15293,6 +16041,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first of the first table in the document. await Word.run(async (context) => { @@ -15313,6 +16062,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + // Updates border properties (e.g., type, width, color) of the specified style. @@ -15345,6 +16095,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml + await Word.run(async (context) => { context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); @@ -15356,6 +16107,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml + await Word.run(async (context) => { const sentence = context.document.body.insertParagraph( "To be or not to be", @@ -15372,6 +16124,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets cell padding details about the first table in the document. await Word.run(async (context) => { @@ -15389,6 +16142,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Gets the current change tracking mode. await Word.run(async (context) => { @@ -15409,6 +16163,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Gets the reviewed text. await Word.run(async (context) => { @@ -15426,6 +16181,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Deletes the first comment in the selected content. await Word.run(async (context) => { @@ -15443,6 +16199,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Gets the range of the first comment in the selected content. await Word.run(async (context) => { @@ -15461,6 +16218,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Replies to the first active comment in the selected content. await Word.run(async (context) => { @@ -15483,6 +16241,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Edits the first comment in the selected content. await Word.run(async (context) => { @@ -15507,6 +16266,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { @@ -15533,6 +16293,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Gets the range of the first comment in the selected content. await Word.run(async (context) => { @@ -15551,6 +16312,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Replies to the first active comment in the selected content. await Word.run(async (context) => { @@ -15573,6 +16335,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + // Compares the current document with a specified external document. await Word.run(async (context) => { @@ -15597,6 +16360,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + await Word.run(async (context) => { const contentControls = context.document.contentControls.getByTag("forTesting"); contentControls.load("items"); @@ -15616,6 +16380,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml + // Adds title and colors to odd and even content controls and changes their appearance. @@ -15655,6 +16420,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml + await Word.run(async (context) => { const contentControls = context.document.contentControls; contentControls.load("items"); @@ -15678,6 +16444,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml + async function contentControlDataChanged(event: Word.ContentControlDataChangedEventArgs) { await Word.run(async (context) => { @@ -15690,6 +16457,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + await Word.run(async (context) => { const contentControls = context.document.contentControls; contentControls.load("items"); @@ -15713,6 +16481,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { @@ -15725,6 +16494,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml + await Word.run(async (context) => { const contentControls = context.document.contentControls; contentControls.load("items"); @@ -15748,6 +16518,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml + async function contentControlEntered(event: Word.ContentControlEnteredEventArgs) { await Word.run(async (context) => { @@ -15759,6 +16530,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml + await Word.run(async (context) => { const contentControls = context.document.contentControls; contentControls.load("items"); @@ -15782,6 +16554,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml + async function contentControlExited(event: Word.ContentControlExitedEventArgs) { await Word.run(async (context) => { @@ -15793,6 +16566,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + await Word.run(async (context) => { const contentControls = context.document.contentControls; contentControls.load("items"); @@ -15815,6 +16589,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + async function contentControlSelectionChanged(event: Word.ContentControlSelectionChangedEventArgs) { await Word.run(async (context) => { @@ -15827,6 +16602,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml + // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags. @@ -15854,6 +16630,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml + async function contentControlAdded(event: Word.ContentControlAddedEventArgs) { await Word.run(async (context) => { @@ -15866,6 +16643,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml + async function contentControlAdded(event: Word.ContentControlAddedEventArgs) { await Word.run(async (context) => { @@ -15878,6 +16656,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml + // Adds title and colors to odd and even content controls and changes their appearance. @@ -15917,6 +16696,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml + await Word.run(async (context) => { const contentControls = context.document.contentControls.getByTag("customer"); contentControls.load("text"); @@ -15934,6 +16714,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml + async function contentControlDataChanged(event: Word.ContentControlDataChangedEventArgs) { await Word.run(async (context) => { @@ -15946,6 +16727,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { @@ -15958,6 +16740,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml + async function contentControlEntered(event: Word.ContentControlEnteredEventArgs) { await Word.run(async (context) => { @@ -15969,6 +16752,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml + async function contentControlExited(event: Word.ContentControlExitedEventArgs) { await Word.run(async (context) => { @@ -15980,6 +16764,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + async function contentControlSelectionChanged(event: Word.ContentControlSelectionChangedEventArgs) { await Word.run(async (context) => { @@ -15992,6 +16777,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Adds annotations to the selected paragraph. await Word.run(async (context) => { @@ -16036,6 +16822,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Accepts the first annotation found in the selected paragraph. await Word.run(async (context) => { @@ -16062,6 +16849,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Rejects the last annotation found in the selected paragraph. await Word.run(async (context) => { @@ -16088,6 +16876,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Gets annotations found in the selected paragraph. await Word.run(async (context) => { @@ -16110,6 +16899,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + await Word.run(async (context) => { const properties = context.document.properties.customProperties; properties.load("key,type,value"); @@ -16123,6 +16913,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + await Word.run(async (context) => { context.document.properties.customProperties.add("Numeric Property", 1234); @@ -16133,6 +16924,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + await Word.run(async (context) => { context.document.properties.customProperties.add("String Property", "Hello World!"); @@ -16144,6 +16936,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + await Word.run(async (context) => { const properties = context.document.properties.customProperties; properties.load("key,type,value"); @@ -16157,6 +16950,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Original XML: + JuanHongSally + + // Deletes a custom XML part. await Word.run(async (context) => { @@ -16164,6 +16962,46 @@ const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); await context.sync(); + if (xmlPartIDSetting.value) { + let customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); + const xmlBlob = customXmlPart.getXml(); + customXmlPart.delete(); + customXmlPart = context.document.customXmlParts.getItemOrNullObject(xmlPartIDSetting.value); + + await context.sync(); + + if (customXmlPart.isNullObject) { + console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted`); + + // Delete the associated setting too. + xmlPartIDSetting.delete(); + + await context.sync(); + } else { + const readableXml = addLineBreaksToXML(xmlBlob.value); + const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:\n${readableXml}`; + console.error(strangeMessage); + } + } else { + console.warn("Didn't find custom XML part to delete"); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Original XML: JuanHongSally + + + // Deletes a custom XML part. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + await context.sync(); + if (xmlPartIDSetting.value) { let customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); const xmlBlob = customXmlPart.getXml(); @@ -16189,10 +17027,40 @@ } }); 'Word.CustomXmlPart#getXml:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Adds a custom XML part. + + // If you want to populate the CustomXml.namespaceUri property, you must + include the xmlns attribute. + + await Word.run(async (context) => { + const originalXml = + "JuanHongSally"; + const customXmlPart = context.document.customXmlParts.add(originalXml); + customXmlPart.load(["id", "namespaceUri"]); + const xmlBlob = customXmlPart.getXml(); + + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`); + console.log(readableXml); + + // Store the XML part's ID in a setting so the ID is available to other functions. + const settings = context.document.settings; + settings.add("ContosoReviewXmlPartIdNS", customXmlPart.id); + + await context.sync(); + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + // Adds a custom XML part. await Word.run(async (context) => { @@ -16215,10 +17083,51 @@ await context.sync(); }); 'Word.CustomXmlPart#insertAttribute:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Original XML: JuanHongSally + + + // Inserts an attribute into a custom XML part. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + await context.sync(); + + if (xmlPartIDSetting.value) { + const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); + + // The insertAttribute method inserts an attribute with the given name and value into the element identified by the xpath parameter. + customXmlPart.insertAttribute( + "/contoso:Reviewers", + { contoso: "http://schemas.contoso.com/review/1.0" }, + "Nation", + "US" + ); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + console.log("Successfully inserted attribute:"); + console.log(readableXml); + } else { + console.warn("Didn't find custom XML part to insert attribute into"); + } + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Original XML: + JuanHongSally + + // Inserts an attribute into a custom XML part. await Word.run(async (context) => { @@ -16242,10 +17151,51 @@ } }); 'Word.CustomXmlPart#insertElement:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Original XML: JuanHongSally + + + // Inserts an element into a custom XML part. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + await context.sync(); + + if (xmlPartIDSetting.value) { + const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); + + // The insertElement method inserts the given XML under the parent element identified by the xpath parameter at the provided child position index. + customXmlPart.insertElement( + "/contoso:Reviewers", + "Mark", + { contoso: "http://schemas.contoso.com/review/1.0" }, + 0 + ); + const xmlBlob = customXmlPart.getXml(); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + console.log("Successfully inserted element:"); + console.log(readableXml); + } else { + console.warn("Didn't find custom XML part to insert element into"); + } + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Original XML: + JuanHongSally + + // Inserts an element into a custom XML part. await Word.run(async (context) => { @@ -16274,10 +17224,49 @@ } }); 'Word.CustomXmlPart#query:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Original XML: JuanHongSally + + + // Queries a custom XML part for elements matching the search terms. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + + await context.sync(); + + if (xmlPartIDSetting.value) { + const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); + const xpathToQueryFor = "/contoso:Reviewers"; + const clientResult = customXmlPart.query(xpathToQueryFor, { + contoso: "http://schemas.contoso.com/review/1.0" + }); + + await context.sync(); + + console.log(`Queried custom XML part for ${xpathToQueryFor} and found ${clientResult.value.length} matches:`); + for (let i = 0; i < clientResult.value.length; i++) { + console.log(clientResult.value[i]); + } + } else { + console.warn("Didn't find custom XML part to query"); + } + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Original XML: + JuanHongSally + + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { @@ -16308,6 +17297,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + // Original XML: JuanHongSally + + // Replaces a custom XML part. await Word.run(async (context) => { @@ -16343,6 +17337,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + // Adds a custom XML part. await Word.run(async (context) => { @@ -16369,6 +17364,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + // Original XML: JuanHongSally + + // Gets the namespace URI from a custom XML part. await Word.run(async (context) => { @@ -16389,10 +17389,40 @@ } }); 'Word.CustomXmlPartCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Adds a custom XML part. + + // If you want to populate the CustomXml.namespaceUri property, you must + include the xmlns attribute. + + await Word.run(async (context) => { + const originalXml = + "JuanHongSally"; + const customXmlPart = context.document.customXmlParts.add(originalXml); + customXmlPart.load(["id", "namespaceUri"]); + const xmlBlob = customXmlPart.getXml(); + + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`); + console.log(readableXml); + + // Store the XML part's ID in a setting so the ID is available to other functions. + const settings = context.document.settings; + settings.add("ContosoReviewXmlPartIdNS", customXmlPart.id); + + await context.sync(); + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + // Adds a custom XML part. await Word.run(async (context) => { @@ -16415,10 +17445,49 @@ await context.sync(); }); 'Word.CustomXmlPartCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Original XML: JuanHongSally + + + // Queries a custom XML part for elements matching the search terms. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); + + await context.sync(); + + if (xmlPartIDSetting.value) { + const customXmlPart = context.document.customXmlParts.getItem(xmlPartIDSetting.value); + const xpathToQueryFor = "/contoso:Reviewers"; + const clientResult = customXmlPart.query(xpathToQueryFor, { + contoso: "http://schemas.contoso.com/review/1.0" + }); + + await context.sync(); + + console.log(`Queried custom XML part for ${xpathToQueryFor} and found ${clientResult.value.length} matches:`); + for (let i = 0; i < clientResult.value.length; i++) { + console.log(clientResult.value[i]); + } + } else { + console.warn("Didn't find custom XML part to query"); + } + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Original XML: + JuanHongSally + + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { @@ -16449,6 +17518,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Adds a new style. await Word.run(async (context) => { @@ -16480,6 +17550,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + // Compares the current document with a specified external document. await Word.run(async (context) => { @@ -16504,6 +17575,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + await Word.run(async (context) => { const paragraphId = $("#paragraph-id").val() as string; const paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); @@ -16517,6 +17589,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Gets the number of styles. await Word.run(async (context) => { @@ -16531,6 +17604,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + // Imports styles from JSON. await Word.run(async (context) => { @@ -16546,6 +17620,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + // Inserts content (applying selected settings) from another document passed in as a Base64-encoded string. @@ -16568,6 +17643,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Gets the current change tracking mode. await Word.run(async (context) => { @@ -16588,6 +17664,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml + // Registers the onAdded event handler on the document. await Word.run(async (context) => { @@ -16600,6 +17677,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml + async function contentControlAdded(event: Word.ContentControlAddedEventArgs) { await Word.run(async (context) => { @@ -16612,6 +17690,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + // Registers the onParagraphAdded event handler on the document. await Word.run(async (context) => { @@ -16624,6 +17703,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { await Word.run(async (context) => { console.log(`${event.type} event detected. IDs of paragraphs that were added:`); @@ -16635,6 +17715,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + // Registers the onParagraphChanged event handler on the document. await Word.run(async (context) => { @@ -16647,6 +17728,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { await Word.run(async (context) => { console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); @@ -16658,6 +17740,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + // Registers the onParagraphDeleted event handler on the document. await Word.run(async (context) => { @@ -16670,6 +17753,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { await Word.run(async (context) => { console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); @@ -16681,6 +17765,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml + await Word.run(async (context) => { const builtInProperties = context.document.properties; builtInProperties.load("*"); // Let's get all! @@ -16693,6 +17778,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + // Gets all custom settings this add-in set on this document. await Word.run(async (context) => { @@ -16714,6 +17800,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + // Compares the current document with a specified external document. await Word.run(async (context) => { @@ -16738,6 +17825,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + // Updates the text of the current document with the text from another document passed in as a Base64-encoded string. @@ -16761,6 +17849,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + await Word.run(async (context) => { const properties = context.document.properties.customProperties; properties.load("key,type,value"); @@ -16774,6 +17863,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { @@ -16786,6 +17876,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Deletes the first field in the document. await Word.run(async (context) => { @@ -16808,6 +17899,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets and updates the first field in the selection. await Word.run(async (context) => { @@ -16840,6 +17932,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets and updates the first field in the selection. await Word.run(async (context) => { @@ -16872,6 +17965,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets the first field in the document. await Word.run(async (context) => { @@ -16895,6 +17989,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets the first field in the document. await Word.run(async (context) => { @@ -16918,6 +18013,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets the first field in the selection and toggles between setting it to locked or unlocked. @@ -16941,6 +18037,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets the parent body of the first field in the document. await Word.run(async (context) => { @@ -16961,6 +18058,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets the first field in the document. await Word.run(async (context) => { @@ -16984,6 +18082,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets the first field in the document. await Word.run(async (context) => { @@ -17007,6 +18106,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets the first field in the document. await Word.run(async (context) => { @@ -17030,6 +18130,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Gets all fields in the document body. await Word.run(async (context) => { @@ -17054,6 +18155,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Inserts a Date field before selection. await Word.run(async (context) => { @@ -17076,6 +18178,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml + await Word.run(async (context) => { context.document.sections .getFirst() @@ -17089,6 +18192,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml + // Gets the first image in the document. await Word.run(async (context) => { @@ -17109,6 +18213,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + // Gets the first image in the document. await Word.run(async (context) => { @@ -17128,6 +18233,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + // Inserts an image anchored to the last paragraph. await Word.run(async (context) => { @@ -17143,6 +18249,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml + // Gets the first image in the document. await Word.run(async (context) => { @@ -17163,6 +18270,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + // Gets the first image in the document. await Word.run(async (context) => { @@ -17182,6 +18290,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + // Inserts content (applying selected settings) from another document passed in as a Base64-encoded string. @@ -17204,6 +18313,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml + // Inserts a section without an associated page break. await Word.run(async (context) => { @@ -17219,6 +18329,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + // This example starts a new list with the second paragraph. await Word.run(async (context) => { @@ -17250,6 +18361,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + // This example starts a new list with the second paragraph. await Word.run(async (context) => { @@ -17281,6 +18393,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. @@ -17318,6 +18431,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. @@ -17355,6 +18469,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + // Gets information about the first list in the document. await Word.run(async (context) => { @@ -17391,6 +18506,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + // Gets information about the first list in the document. await Word.run(async (context) => { @@ -17427,6 +18543,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. @@ -17464,6 +18581,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + // This example starts a new list with the second paragraph. await Word.run(async (context) => { @@ -17495,6 +18613,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + // Gets information about the first list in the document. await Word.run(async (context) => { @@ -17531,6 +18650,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. @@ -17568,6 +18688,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml + // Compares the location of one paragraph in relation to another paragraph. await Word.run(async (context) => { @@ -17590,6 +18711,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Deletes this referenced footnote. await Word.run(async (context) => { @@ -17609,6 +18731,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Selects the next footnote in the document body. await Word.run(async (context) => { @@ -17627,6 +18750,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the text of the referenced footnote. await Word.run(async (context) => { @@ -17647,6 +18771,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Selects the footnote's reference mark in the document body. await Word.run(async (context) => { @@ -17668,6 +18793,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the referenced note's item type and body type, which are both "Footnote". @@ -17691,6 +18817,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the first footnote in the document body and select its reference mark. @@ -17704,6 +18831,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the referenced note's item type and body type, which are both "Footnote". @@ -17727,6 +18855,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + await Word.run(async (context) => { // Get the complete sentence (as range) associated with the insertion point. const sentences = context.document @@ -17757,6 +18886,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Adds annotations to the selected paragraph. await Word.run(async (context) => { @@ -17801,6 +18931,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml + Word.run(async (context) => { context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); @@ -17812,6 +18943,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-in-different-locations.yaml + await Word.run(async (context) => { // Replace the last paragraph. const range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); @@ -17825,6 +18957,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml + await Word.run(async (context) => { // If select is called with no parameters, it selects the object. context.document.body.paragraphs.getLast().select(); @@ -17835,6 +18968,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml + await Word.run(async (context) => { // Select can be at the start or end of a range; this by definition moves the insertion point without selecting the range. context.document.body.paragraphs.getLast().select(Word.SelectionMode.end); @@ -17846,6 +18980,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml + await Word.run(async (context) => { const paragraph = context.document.body.paragraphs.getFirst(); paragraph.set({ @@ -17862,6 +18997,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml + await Word.run(async (context) => { const firstParagraph = context.document.body.paragraphs.getFirst(); const secondParagraph = firstParagraph.getNext(); @@ -17878,6 +19014,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml + await Word.run(async (context) => { const paragraph = context.document.body.paragraphs.getFirst(); const words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); @@ -17900,6 +19037,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + // This example starts a new list with the second paragraph. await Word.run(async (context) => { @@ -17931,6 +19069,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Center last paragraph alignment. context.document.body.paragraphs.getLast().alignment = "Centered"; @@ -17942,6 +19081,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Indent the first paragraph. context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points @@ -17953,6 +19093,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Adjust line spacing. context.document.body.paragraphs.getFirst().lineSpacing = 20; @@ -17964,6 +19105,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Set the space (in line units) after the first paragraph. context.document.body.paragraphs.getFirst().lineUnitAfter = 1; @@ -17975,6 +19117,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Set the space (in line units) before the first paragraph. context.document.body.paragraphs.getFirst().lineUnitBefore = 1; @@ -17986,6 +19129,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml + await Word.run(async (context) => { // Set the space (in points) after the first paragraph. context.document.body.paragraphs.getFirst().spaceAfter = 20; @@ -17997,6 +19141,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Applies the specified style to a paragraph. await Word.run(async (context) => { @@ -18031,6 +19176,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml + await Word.run(async (context) => { const paragraph = context.document.body.insertParagraph("Timeline", "End"); paragraph.styleBuiltIn = "Heading2"; @@ -18065,6 +19211,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + await Word.run(async (context) => { // The collection of paragraphs of the current selection returns the full paragraphs contained in it. const paragraph = context.document.getSelection().paragraphs.getFirst(); @@ -18078,6 +19225,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Registers event handlers. await Word.run(async (context) => { @@ -18097,6 +19245,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + async function paragraphChanged(args: Word.ParagraphChangedEventArgs) { await Word.run(async (context) => { const results = []; @@ -18119,6 +19268,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + // Registers the onParagraphAdded event handler on the document. await Word.run(async (context) => { @@ -18131,6 +19281,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml + async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { await Word.run(async (context) => { console.log(`${event.type} event detected. IDs of paragraphs that were added:`); @@ -18142,6 +19293,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + // Registers the onParagraphChanged event handler on the document. await Word.run(async (context) => { @@ -18154,6 +19306,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml + async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { await Word.run(async (context) => { console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); @@ -18165,6 +19318,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + // Gets annotations found in the selected paragraph. await Word.run(async (context) => { @@ -18187,6 +19341,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + // Inserts an image anchored to the last paragraph. await Word.run(async (context) => { @@ -18202,6 +19357,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + // This example starts a new list with the second paragraph. await Word.run(async (context) => { @@ -18233,6 +19389,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + // Registers the onParagraphDeleted event handler on the document. await Word.run(async (context) => { @@ -18245,6 +19402,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml + async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { await Word.run(async (context) => { console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); @@ -18256,6 +19414,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Sets certain aspects of the specified style's paragraph format e.g., the left indent size and the alignment. @@ -18283,6 +19442,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Sets certain aspects of the specified style's paragraph format e.g., the left indent size and the alignment. @@ -18310,6 +19470,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Sets certain aspects of the specified style's paragraph format e.g., the left indent size and the alignment. @@ -18337,6 +19498,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml + // Compares the location of one paragraph in relation to another paragraph. await Word.run(async (context) => { @@ -18359,6 +19521,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Gets the footnotes in the selected document range. await Word.run(async (context) => { @@ -18373,6 +19536,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Gets the comments in the selected content. await Word.run(async (context) => { @@ -18390,6 +19554,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Gets the reviewed text. await Word.run(async (context) => { @@ -18407,6 +19572,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + await Word.run(async (context) => { // Get the complete sentence (as range) associated with the insertion point. const sentences = context.document @@ -18437,6 +19603,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Sets a comment on the selected content. await Word.run(async (context) => { @@ -18457,6 +19624,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml + // Simulates creation of a template. First searches the document for instances of the string "Contractor", @@ -18490,6 +19658,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + // Inserts a Date field before selection. await Word.run(async (context) => { @@ -18512,6 +19681,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Sets a footnote on the selected content. await Word.run(async (context) => { @@ -18528,6 +19698,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml + await Word.run(async (context) => { const header = context.document.body.insertText("This is a sample Heading 1 Title!!\n", "Start" /*this means at the beginning of the body */); @@ -18540,6 +19711,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + await Word.run(async (context) => { // Get the complete sentence (as range) associated with the insertion point. const sentences = context.document @@ -18570,6 +19742,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml + await Word.run(async (context) => { context.document.sections .getFirst() @@ -18583,6 +19756,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml + await Word.run(async (context) => { context.document.sections .getFirst() @@ -18596,6 +19770,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml + // Inserts a section break on the next page. await Word.run(async (context) => { @@ -18611,6 +19786,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml + // Inserts a section break on the next even page. await Word.run(async (context) => { @@ -18626,6 +19802,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml + await Word.run(async (context) => { // Select can be at the start or end of a range; this by definition moves the insertion point without selecting the range. context.document.body.paragraphs.getLast().select(Word.SelectionMode.end); @@ -18637,6 +19814,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + // Adds a new custom setting or // edits the value of an existing one. @@ -18668,6 +19846,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + // Adds a new custom setting or // edits the value of an existing one. @@ -18699,6 +19878,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + // Deletes all custom settings this add-in had set on this document. await Word.run(async (context) => { @@ -18712,6 +19892,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + // Adds a new custom setting or // edits the value of an existing one. @@ -18743,6 +19924,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + // Gets all custom settings this add-in set on this document. await Word.run(async (context) => { @@ -18764,6 +19946,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Deletes the custom style. await Word.run(async (context) => { @@ -18789,6 +19972,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Updates font properties (e.g., color, size) of the specified style. await Word.run(async (context) => { @@ -18816,6 +20000,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Applies the specified style to a paragraph. await Word.run(async (context) => { @@ -18850,6 +20035,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Sets certain aspects of the specified style's paragraph format e.g., the left indent size and the alignment. @@ -18877,6 +20063,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Adds a new style. await Word.run(async (context) => { @@ -18908,6 +20095,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Gets the number of styles. await Word.run(async (context) => { @@ -18922,6 +20110,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + // Applies the specified style to a paragraph. await Word.run(async (context) => { @@ -18956,6 +20145,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first table in the document. await Word.run(async (context) => { @@ -18975,6 +20165,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + // Gets the content of the first cell in the first table. await Word.run(async (context) => { @@ -18989,6 +20180,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets cell padding details about the first table in the document. await Word.run(async (context) => { @@ -19006,6 +20198,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets alignment details about the first table in the document. await Word.run(async (context) => { @@ -19023,6 +20216,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets alignment details about the first table in the document. await Word.run(async (context) => { @@ -19040,6 +20234,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets content alignment details about the first row of the first table in the document. @@ -19058,6 +20253,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets alignment details about the first table in the document. await Word.run(async (context) => { @@ -19075,6 +20271,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. const data = [ @@ -19092,6 +20289,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first table in the document. await Word.run(async (context) => { @@ -19111,6 +20309,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first table in the document. await Word.run(async (context) => { @@ -19130,6 +20329,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first table in the document. await Word.run(async (context) => { @@ -19149,6 +20349,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + // Gets the content of the first cell in the first table. await Word.run(async (context) => { @@ -19163,6 +20364,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first of the first table in the document. await Word.run(async (context) => { @@ -19183,6 +20385,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets cell padding details about the first cell of the first table in the document. @@ -19202,6 +20405,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets content alignment details about the first cell of the first table in the document. @@ -19220,6 +20424,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets content alignment details about the first cell of the first table in the document. @@ -19238,6 +20443,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets alignment details about the first table in the document. await Word.run(async (context) => { @@ -19255,6 +20461,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + // Gets the content of the first cell in the first table. await Word.run(async (context) => { @@ -19269,6 +20476,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first row of the first table in the document. @@ -19290,6 +20498,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets cell padding details about the first row of the first table in the document. @@ -19309,6 +20518,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets content alignment details about the first row of the first table in the document. @@ -19327,6 +20537,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets border details about the first row of the first table in the document. @@ -19348,6 +20559,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + // Gets the table style properties and displays them in the form. const styleName = $("#style-name") @@ -19383,6 +20595,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Accepts the first tracked change. await Word.run(async (context) => { @@ -19402,6 +20615,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Gets the next (second) tracked change. await Word.run(async (context) => { @@ -19425,6 +20639,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Gets the range of the first tracked change. await Word.run(async (context) => { @@ -19444,6 +20659,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Rejects the first tracked change. await Word.run(async (context) => { @@ -19463,6 +20679,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Accepts all tracked changes. await Word.run(async (context) => { @@ -19476,6 +20693,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Gets the range of the first tracked change. await Word.run(async (context) => { @@ -19495,6 +20713,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + // Rejects all tracked changes. await Word.run(async (context) => { @@ -19508,6 +20727,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + // Gets content alignment details about the first row of the first table in the document. From 8d9c8e5a07dad71e3ec6ce2e62ffe22d0670dec3 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:32:08 -0800 Subject: [PATCH 042/156] [Outlook] (clients) Add new Outlook on Windows references (#863) --- samples/outlook/35-notifications/add-getall-remove.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 7fc95352e..7d1b45f36 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -141,7 +141,7 @@ template:
  • You can add a maximum of five notifications per mail item.
  • You can only add one insight notification to a mail item.
  • -
  • In Outlook on the web, you can only add an insight notification to an item in compose mode.
  • +
  • In Outlook on the web and in new Outlook on Windows (preview), you can only add an insight notification to an item in compose mode.
+
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 963c3b9b6..80b4e8372 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -82,5 +82,6 @@ "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", - "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml" + "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml", + "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index e9b5f0928..14a596017 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -82,5 +82,6 @@ "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", - "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml" + "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml", + "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-in-reply-to.yaml" } \ No newline at end of file From 6fe9eef49f559bf1ce974772379ff1c38fb7c742 Mon Sep 17 00:00:00 2001 From: ndeleuze <107273303+ndeleuze@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:23:55 -0500 Subject: [PATCH 045/156] New sample snippet for the getItemClassAsync API (#828) * Adding new sample snippet for the getItemClassAsync API * Addressing PR Comments * Update samples/outlook/99-preview-apis/get-item-class-async.yaml Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Update samples/outlook/99-preview-apis/get-item-class-async.yaml Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Update samples/outlook/99-preview-apis/get-item-class-async.yaml Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Ran yarn start --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/outlook.yaml | 9 +++ playlists/outlook.yaml | 11 +++- .../99-preview-apis/get-item-class-async.yaml | 63 +++++++++++++++++++ view-prod/outlook.json | 1 + view/outlook.json | 3 +- 5 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 samples/outlook/99-preview-apis/get-item-class-async.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index fed38471c..d378cf903 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -802,5 +802,14 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-get-item-class-async + name: Get item class (Compose) + fileName: get-item-class-async.yaml + description: Retrieves the item class property of the message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml + group: Preview APIs api_set: Mailbox: preview \ No newline at end of file diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index af0546eb7..17bd02571 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -800,7 +800,16 @@ fileName: get-in-reply-to.yaml description: Retrieves the ID of the message being replied to by the current message. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-in-reply-to.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml group: Preview APIs api_set: Mailbox: preview +- id: outlook-get-item-class-async + name: Get item class (Compose) + fileName: get-item-class-async.yaml + description: Retrieves the item class property of the message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml + group: Preview APIs + api_set: + Mailbox: preview \ No newline at end of file diff --git a/samples/outlook/99-preview-apis/get-item-class-async.yaml b/samples/outlook/99-preview-apis/get-item-class-async.yaml new file mode 100644 index 000000000..bdf3a9fb2 --- /dev/null +++ b/samples/outlook/99-preview-apis/get-item-class-async.yaml @@ -0,0 +1,63 @@ +order: 5 +id: outlook-get-item-class-async +name: Get item class (Compose) +description: Retrieves the item class property of the message being composed. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#get-item-class-async").click(getItemClassAsync); + + function getItemClassAsync() { + // This snippet returns the Exchange Web Services item class property (PR_MESSAGE_CLASS) of the current mail item. + // The API call is only supported on a message being composed. + Office.context.mailbox.item.getItemClassAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log("Item class of the current mail item: " + asyncResult.value); + }); + } + language: typescript +template: + content: |- +
+

This sample shows how to get the Exchange Web Services (EWS) item class of the current message being composed.

+

Required mode: Message Compose

+
+ +
+

Try it out

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 80b4e8372..472320a5b 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -84,4 +84,5 @@ "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml", "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" + "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 14a596017..f53a5b833 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -83,5 +83,6 @@ "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml", - "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-in-reply-to.yaml" + "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" + "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-item-class-async.yaml" } \ No newline at end of file From 93ef914dd59e3582767b6f4ea4dd62b5ae065d4d Mon Sep 17 00:00:00 2001 From: ndeleuze <107273303+ndeleuze@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:35:09 -0500 Subject: [PATCH 046/156] Sample snippet for the getConversationIndexAsync API (#829) * Adding sample snippet for the new conversation index property available as initial data * Addressing PR Comments * Apply suggestions from code review * Changed conversationIndex to an async API --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/outlook.yaml | 11 +++ playlists/outlook.yaml | 13 +++- .../get-conversation-index.yaml | 70 +++++++++++++++++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 samples/outlook/99-preview-apis/get-conversation-index.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index d378cf903..f4de9d40f 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -795,6 +795,17 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-get-conversation-index + name: Get the position of a message in a conversation (Message Compose) + fileName: get-conversation-index.yaml + description: >- + Retrieves the Base64-encoded position of the current message in a + conversation thread. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml + group: Preview APIs + api_set: + Mailbox: preview - id: outlook-get-in-reply-to name: Get the ID of the message being replied to (Message Compose) fileName: get-in-reply-to.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 17bd02571..90f0abb8a 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -795,6 +795,17 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-get-conversation-index + name: Get the position of a message in a conversation (Message Compose) + fileName: get-conversation-index.yaml + description: >- + Retrieves the Base64-encoded position of the current message in a + conversation thread. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-conversation-index.yaml + group: Preview APIs + api_set: + Mailbox: preview - id: outlook-get-in-reply-to name: Get the ID of the message being replied to (Message Compose) fileName: get-in-reply-to.yaml @@ -812,4 +823,4 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml group: Preview APIs api_set: - Mailbox: preview \ No newline at end of file + Mailbox: preview diff --git a/samples/outlook/99-preview-apis/get-conversation-index.yaml b/samples/outlook/99-preview-apis/get-conversation-index.yaml new file mode 100644 index 000000000..35bed63ea --- /dev/null +++ b/samples/outlook/99-preview-apis/get-conversation-index.yaml @@ -0,0 +1,70 @@ +order: 6 +id: outlook-get-conversation-index +name: Get the position of a message in a conversation (Message Compose) +description: Retrieves the Base64-encoded position of the current message in a conversation thread. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#get-conversation-index").click(getConversationIndex); + + function getConversationIndex() { + // This snippet returns the Base64-encoded position of the current message in a conversation thread (PR_CONVERSATION_INDEX). + // The API call is supported on a message being composed and isn't supported on read items or appointments. + Office.context.mailbox.item.getConversationIndexAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + + const conversationIndex = result.value; + if (conversationIndex) { + console.log("Position in the conversation thread: " + conversationIndex); + } + else + { + console.log("The current message doesn't belong to a conversation thread."); + } + }); + } + language: typescript +template: + content: |- +
+

This sample shows how to get the Base64-encoded position of the current message in a conversation thread.

+

Required mode: Message Compose

+
+ +
+

Try it out

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 472320a5b..4efa3e666 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -83,6 +83,7 @@ "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml", + "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml" "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index f53a5b833..7eb8ef693 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -83,6 +83,7 @@ "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml", + "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-conversation-index.yaml" "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-item-class-async.yaml" } \ No newline at end of file From 7e07c61313a7ab448c748814dafd21d152e704a3 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 11 Apr 2024 13:00:44 -0700 Subject: [PATCH 047/156] [Outlook] (item) Map code samples to additional item member APIs (#867) * Map snippets to additional item member APIs * Fix spacing --- playlists-prod/outlook.yaml | 18 ++--- playlists/outlook.yaml | 20 +++--- .../get-conversation-index.yaml | 4 +- .../99-preview-apis/get-in-reply-to.yaml | 4 +- snippet-extractor-metadata/outlook.xlsx | Bin 24476 -> 24637 bytes snippet-extractor-output/snippets.yaml | 63 ++++++++++++++++++ view-prod/outlook.json | 4 +- view/outlook.json | 6 +- 8 files changed, 89 insertions(+), 30 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index f4de9d40f..01a4037da 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -795,6 +795,15 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-get-item-class-async + name: Get item class (Compose) + fileName: get-item-class-async.yaml + description: Retrieves the item class property of the message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml + group: Preview APIs + api_set: + Mailbox: preview - id: outlook-get-conversation-index name: Get the position of a message in a conversation (Message Compose) fileName: get-conversation-index.yaml @@ -813,14 +822,5 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-get-item-class-async - name: Get item class (Compose) - fileName: get-item-class-async.yaml - description: Retrieves the item class property of the message being composed. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml - group: Preview APIs api_set: Mailbox: preview \ No newline at end of file diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 90f0abb8a..5199001bb 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -795,6 +795,15 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-get-item-class-async + name: Get item class (Compose) + fileName: get-item-class-async.yaml + description: Retrieves the item class property of the message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-item-class-async.yaml + group: Preview APIs + api_set: + Mailbox: preview - id: outlook-get-conversation-index name: Get the position of a message in a conversation (Message Compose) fileName: get-conversation-index.yaml @@ -811,16 +820,7 @@ fileName: get-in-reply-to.yaml description: Retrieves the ID of the message being replied to by the current message. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-get-item-class-async - name: Get item class (Compose) - fileName: get-item-class-async.yaml - description: Retrieves the item class property of the message being composed. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-in-reply-to.yaml group: Preview APIs api_set: Mailbox: preview diff --git a/samples/outlook/99-preview-apis/get-conversation-index.yaml b/samples/outlook/99-preview-apis/get-conversation-index.yaml index 35bed63ea..a57a12ba1 100644 --- a/samples/outlook/99-preview-apis/get-conversation-index.yaml +++ b/samples/outlook/99-preview-apis/get-conversation-index.yaml @@ -21,9 +21,7 @@ script: const conversationIndex = result.value; if (conversationIndex) { console.log("Position in the conversation thread: " + conversationIndex); - } - else - { + } else { console.log("The current message doesn't belong to a conversation thread."); } }); diff --git a/samples/outlook/99-preview-apis/get-in-reply-to.yaml b/samples/outlook/99-preview-apis/get-in-reply-to.yaml index 74fa26415..42288212f 100644 --- a/samples/outlook/99-preview-apis/get-in-reply-to.yaml +++ b/samples/outlook/99-preview-apis/get-in-reply-to.yaml @@ -15,9 +15,7 @@ script: const inReplyTo = Office.context.mailbox.item.inReplyTo; if (inReplyTo) { console.log("ID of the message being replied to: " + inReplyTo); - } - else - { + } else { console.log("No InReplyTo property available for this message"); } } diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 2437a2194f4139c8612076e9d2fa15fa41f7e952..e5955e6d78f105057903e6f96e0cca320d9b47a2 100644 GIT binary patch delta 14660 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml + + + // This snippet returns the Base64-encoded position of the current message + in a conversation thread (PR_CONVERSATION_INDEX). + + // The API call is supported on a message being composed and isn't supported + on read items or appointments. + + Office.context.mailbox.item.getConversationIndexAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + + const conversationIndex = result.value; + if (conversationIndex) { + console.log("Position in the conversation thread: " + conversationIndex); + } else { + console.log("The current message doesn't belong to a conversation thread."); + } + }); +'Office.MessageCompose#getItemClassAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml + + + // This snippet returns the Exchange Web Services item class property + (PR_MESSAGE_CLASS) of the current mail item. + + // The API call is only supported on a message being composed. + + Office.context.mailbox.item.getItemClassAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log("Item class of the current mail item: " + asyncResult.value); + }); 'Office.MessageCompose#getItemIdAsync:member(2)': - >- // Link to full sample: @@ -12277,6 +12321,25 @@ ); } }); +'Office.MessageCompose#inReplyTo:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml + + + // This snippet gets the ID of the message being replied to by the current + message (PR_IN_REPLY_TO_ID). + + // The API call is supported on messages being composed and isn't supported + on read items. + + const inReplyTo = Office.context.mailbox.item.inReplyTo; + + if (inReplyTo) { + console.log("ID of the message being replied to: " + inReplyTo); + } else { + console.log("No InReplyTo property available for this message"); + } 'Office.MessageCompose#internetHeaders:member': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 4efa3e666..7a8ab96cf 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -83,7 +83,7 @@ "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml", - "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml" + "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml", + "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml", "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" - "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 7eb8ef693..f2b210499 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -83,7 +83,7 @@ "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml", - "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-conversation-index.yaml" - "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" - "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-item-class-async.yaml" + "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-item-class-async.yaml", + "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-conversation-index.yaml", + "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-in-reply-to.yaml" } \ No newline at end of file From 9f638763fa222d0441b5c5162479fe8a7b7b132f Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 18 Apr 2024 12:13:43 -0700 Subject: [PATCH 048/156] Adjust language for new security guidelines (#869) --- SECURITY.md | 2 +- samples/excel/42-range/range-hyperlink.yaml | 2 +- snippet-extractor-output/snippets.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index e138ec5d6..4a0f12f81 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -24,7 +24,7 @@ Please include the requested information listed below (as much as you can provid * Any special configuration required to reproduce the issue * Step-by-step instructions to reproduce the issue * Proof-of-concept or exploit code (if possible) - * Impact of the issue, including how an attacker might exploit the issue + * Impact of the issue, including how a threat actor might exploit the issue This information will help us triage your report more quickly. diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index 098714c15..60a639088 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -112,7 +112,7 @@ script: let cellRange = productsRange.getCell(i, 0); // Clear the hyperlink. - // This eliminates the hyperlink but does not update text format. + // This removes the hyperlink but does not update text format. cellRange.clear(Excel.ClearApplyTo.hyperlinks); // Update text format. diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fab33cbf1..a9079d99d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1690,7 +1690,7 @@ let cellRange = productsRange.getCell(i, 0); // Clear the hyperlink. - // This eliminates the hyperlink but does not update text format. + // This removes the hyperlink but does not update text format. cellRange.clear(Excel.ClearApplyTo.hyperlinks); // Update text format. @@ -5823,7 +5823,7 @@ let cellRange = productsRange.getCell(i, 0); // Clear the hyperlink. - // This eliminates the hyperlink but does not update text format. + // This removes the hyperlink but does not update text format. cellRange.clear(Excel.ClearApplyTo.hyperlinks); // Update text format. From 3d4d538b40bf16bad550f584eaaecfeeac0befae Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 9 May 2024 07:25:09 -0700 Subject: [PATCH 049/156] [Word] (content controls) Add snippet for checkbox type (#871) * [Word] (content controls) Add snippet for checkbox type * Updates based on feedback * Updates based on feedback * minor tweak --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + ...t-and-change-checkbox-content-control.yaml | 248 ++++++++++++++++++ .../insert-and-change-content-controls.yaml | 4 +- snippet-extractor-metadata/word.xlsx | Bin 22974 -> 23283 bytes snippet-extractor-output/snippets.yaml | 168 +++++++++++- view-prod/word.json | 1 + view/word.json | 1 + 8 files changed, 434 insertions(+), 6 deletions(-) create mode 100644 samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 9462223f6..7e6c9f469 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -102,6 +102,15 @@ group: Content Controls api_set: WordApi: '1.5' +- id: word-content-controls-insert-and-change-checkbox-content-control + name: Manage checkbox content controls + fileName: insert-and-change-checkbox-content-control.yaml + description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + group: Content Controls + api_set: + WordApi: '1.7' - id: word-images-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 43cd50a17..e9a0165a5 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -102,6 +102,15 @@ group: Content Controls api_set: WordApi: '1.5' +- id: word-content-controls-insert-and-change-checkbox-content-control + name: Manage checkbox content controls + fileName: insert-and-change-checkbox-content-control.yaml + description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + group: Content Controls + api_set: + WordApi: '1.7' - id: word-images-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml diff --git a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml new file mode 100644 index 000000000..4fe1a47ae --- /dev/null +++ b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -0,0 +1,248 @@ +order: 8 +id: word-content-controls-insert-and-change-checkbox-content-control +name: Manage checkbox content controls +description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' +host: WORD +api_set: + WordApi: '1.7' +script: + content: | + $("#insert-controls").on("click", () => tryCatch(insertCheckboxContentControls)); + $("#toggle-control").on("click", () => tryCatch(toggleCheckboxContentControl)); + $("#change-controls").on("click", () => tryCatch(toggleCheckboxContentControls)); + $("#delete-control").on("click", () => tryCatch(deleteCheckboxContentControl)); + $("#setup").on("click", () => tryCatch(setup)); + + async function insertCheckboxContentControls() { + // Traverses each paragraph of the document and places a checkbox content control at the beginning of each. + await Word.run(async (context) => { + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // Don't need any properties; just start each paragraph with a content control. + + await context.sync(); + + for (let i = 0; i < paragraphs.items.length; i++) { + let contentControl = paragraphs.items[i] + .getRange(Word.RangeLocation.start) + .insertContentControl(Word.ContentControlType.checkBox); + } + console.log("Checkbox content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); + } + + async function toggleCheckboxContentControl() { + // Toggles the isChecked property of the first checkbox content control found in the selection. + await Word.run(async (context) => { + const selectedRange = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.checkBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,checkboxContentControl/isChecked"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,checkboxContentControl/isChecked"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.checkBox) { + console.warn("No checkbox content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + const isCheckedBefore = selectedContentControl.checkboxContentControl.isChecked; + console.log("isChecked state before:", `id: ${selectedContentControl.id} ... isChecked: ${isCheckedBefore}`); + selectedContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + selectedContentControl.load("id,checkboxContentControl/isChecked"); + await context.sync(); + + console.log( + "isChecked state after:", + `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` + ); + }); + } + + async function toggleCheckboxContentControls() { + // Toggles the isChecked property on all checkbox content controls. + await Word.run(async (context) => { + let contentControls = context.document.getContentControls({ + types: [Word.ContentControlType.checkBox] + }); + contentControls.load("items"); + + await context.sync(); + + const length = contentControls.items.length; + console.log(`Number of checkbox content controls: ${length}`); + + if (length <= 0) { + return; + } + + const checkboxContentControls = []; + for (let i = 0; i < length; i++) { + let contentControl = contentControls.items[i]; + contentControl.load("id,checkboxContentControl/isChecked"); + checkboxContentControls.push(contentControl); + } + + await context.sync(); + + console.log("isChecked state before:"); + const updatedCheckboxContentControls = []; + for (let i = 0; i < checkboxContentControls.length; i++) { + const currentCheckboxContentControl = checkboxContentControls[i]; + const isCheckedBefore = currentCheckboxContentControl.checkboxContentControl.isChecked; + console.log(`id: ${currentCheckboxContentControl.id} ... isChecked: ${isCheckedBefore}`); + + currentCheckboxContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + currentCheckboxContentControl.load("id,checkboxContentControl/isChecked"); + updatedCheckboxContentControls.push(currentCheckboxContentControl); + } + + await context.sync(); + + console.log("isChecked state after:"); + for (let i = 0; i < updatedCheckboxContentControls.length; i++) { + const currentCheckboxContentControl = updatedCheckboxContentControls[i]; + console.log( + `id: ${currentCheckboxContentControl.id} ... isChecked: ${currentCheckboxContentControl.checkboxContentControl.isChecked}` + ); + } + }); + } + + async function deleteCheckboxContentControl() { + // Deletes the first checkbox content control found in the selection. + await Word.run(async (context) => { + const selectedRange = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.checkBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.checkBox) { + console.warn("No checkbox content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log(`About to delete checkbox content control with id: ${selectedContentControl.id}`); + selectedContentControl.delete(false); + await context.sync(); + + console.log("Deleted checkbox content control."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("Task 3", "Start"); + body.insertParagraph("Task 2", "Start"); + body.insertParagraph("Task 1", "Start"); + body.paragraphs.getLast().insertText("Task 4", "Replace"); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + if (error.code === "ItemNotFound") { + console.warn("No checkbox content control is currently selected."); + } else { + console.error(error); + } + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to insert, change, and delete checkbox content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+

+ Insert checkbox content controls on each paragraph. + +

+

+ Modify isChecked property of the first checkbox content control found in your selected content. + +

+

+ Modify isChecked property of all checkbox content controls. + +

+

+ Delete the first checkbox content control found in your selected content. + +

+
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index e9fe7ac4b..9f692e829 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -47,7 +47,7 @@ script: await context.sync(); for (let i = 0; i < evenContentControls.items.length; i++) { - // Change a few properties and append a paragraph + // Change a few properties and append a paragraph. evenContentControls.items[i].set({ color: "red", title: "Odd ContentControl #" + (i + 1), @@ -57,7 +57,7 @@ script: } for (let j = 0; j < oddContentControls.items.length; j++) { - // Change a few properties and append a paragraph + // Change a few properties and append a paragraph. oddContentControls.items[j].set({ color: "green", title: "Even ContentControl #" + (j + 1), diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 93c23b30453f488107afdf39cfa4925a4bdef2f3..228c00bc3d9af73c6aeb0eb85e67d579fd54cef0 100644 GIT binary patch delta 15325 zcmZ8|18`;n`l{}!sZ*!U^Yl#5 z)J#uxS9fm{=zR-ly#_R7??Dx?8mJ3R0MK{LX2A%^YyJ-WP--A#f~BiSPW+M7TA|nV z)Zj7zs|7;7Ng<*6{T?qXyLw!5frW~n7t(kC>+)DrJN0)wJ)^}h5|^N)p-Y96!X1jU z)oX0eSc0EAznaum1Vo{0=a(Pu%cgoXHl=CXkU*CBM8jAWue|x_y+$6w?7a}PS^yfD z>`of^%G}XS2G}{-l@Bzd1=_5tMdV`DJ0Ya2c1gDyRzFAVTp?7uEuhXW#W;LKsv4jB zH5Gntj?P#tgA5nZgz-M)k5@E$wN#XtB~Z3+C-t9W2#|ijhKC`giMU%;qGcxQ)y_bQ z_)0HWf1zKY-cdnpdn4>b9Qj872?fmTN2S6EkJAa5hSixse6!;PEnL`9hVS{KF!DGT z+4yu|QTFkt)edEyKv&t9${nRBWLq*J%%WoqsNTHd2iazO)62~*&=i{=DJmcP)er=7 z8W_?yn6HESfbsGgH??xKsceLZCPwUsLOnT@9gu#kO7Z^fmFoiy!*2x_+XHxfsnyZf z%Sa)+mzv%E{ZpbEeX@i^eu)bPM)# zx>9)j&NfD9=yO8c*)x4COCm8`R2sPEirT7$nY%PB}cA8PU)iL298^=X>j4#d~_Vn!3mn0d=oi0XL^Yhtvxl-!Uwv2XhQ!^lq$UagkAg2pzL)iqM7*;xHs00MG`_FQVC)&$eQHfW4`s#agVGnql1k`eSL zcSpp-l4X|pqw;A1eo?@;#optKjn%osbO;rthQ0nKv+XnNu+Ji`Qa6NlBY*VbT|LOq zEmA%^^G&_M@_0Xh406YkgM58w-`Tv2=IBoY8>#k3izHi{(8JeK9A`8xScir zzLkDmHQoihOnsNW*Y$lq_I>?%eJAew{7Mi8eCGt@-Cu4(0cUteyx8?+NRwrQ3;wZDw{CL>0) zkvJOlCQ@TB&BjjYECB69Q=wOEhNh`I1@#7PI5H?q2Ao^S>-H_mX-tZYXI8Ie><<_k zo&P{qzQjdEiW9TJxNti)!Cj#p!I84wvFasz)*=JZJ!&YdWQC#)+Z?r5gP0%N`@xG|tYMr5fTZ%GzEvZ_yaw(hYmcf2 zJEZsh1v%=o`$-3JV0BpN!Zc@_o$!&$Om zy6W7)-_>F9VPfbcelK-t$&C9tI$ehCda54<@l&+YJlf#K zjYtRXU@N4wt7#^vCn;6E0j2d=7m3r1Voi82Y=J=r2)$02905L!OmPbe<~Uh7>&(?* zR@Mo9lI5C^%H^8ClIx&KH0@Nw5M^GCOT$159O8UFGXdshEK@^FfkgnZEbc|Z7d8H@ zPwTFRp|b{ntbde98T4>9I{nPckj8}i2h!b4TzlQs+6|7S4En5ZE>5NJt>b{35Fmz2 zBsAq`@)HU;$}<*Dph-UnbT}T!r!ldIu_2%g_QC;)cAJc#CfFK0F!WIb5DfZ>jId0+ zZC)O@nv{fUxS%r=Q&ea|C)^}6sQx#gW)kUH zVdLXs_|KLzeg(n1edY-FEpm>kAZBHSGm>21{l$OFGu9Y>3V?lUAjW&6N{G^#xEUtT zxUwg{L9Nvs05X?n6$n?ZDC4&-*F3GoIJk2`J;VI8-J3#g7s;*6Hw7{`+51&lIg3;P zXkP2vLi(i7RKSfdT128N^VOM~aQv!95v_c-b8=uN1P5L4UeuTgOPauyS_3kfo(zpy zddU??D_^Jh0WO&PjL(?6XyE?q8Oo4xc}T3p+p$>_Wrj0ku}8fJl4SWazb|Lu(1;
eEOD|b~&MvnQ1d7+@FDyqV7 z8unGi7VuVo}se&iAKR7W|=d^!TGiIisOIQ=Vo2dvLWvxkzel3?B`Cs{?h; z>c>Y@uvKM6Id&}PV>7>auOy5Nq%u#T0~9yVA-tse6V0FGYUpMHhRS>Cf>BJA&Z`uc zPqlFk70_yWXTw|#N8tD6{bl)v8wD8Q!^zB_!H+;KylWNHfT7t%81vDZt8OZcpxC#O zP{E1-dB}*ZPiyNSmgKg^2Vt4<2+_-qyQkO1o{9--JS6jtsZWE;eKhd58utl!SmdF) zZAMXz3v4`O^8SZF^%_uk*pe@I?@n)g@=$C8hSyRwCAqs7t1%1(JE=rn9}f|Kb`v^TA&q6`p`G3I9-z)u8}>-kg{6@V)-_73 z8t0$hyu3Rz8V?s>7^CXKgT_1BIcyN2Qi&2YL&rcSv9GTWD@SzC#4N2Id4FP5u*H7u zkCZ@>sc2ql8ryZr>6Rt7;a~Rt^z34WLMKa-oJC3-%;wkwZ}saO`~6q>EzH<}0(xTC z&cZBJ_Ukmz8ISLTH$9f)GvdTw8AH;cO&otM9aCB*W-RPlQEUEuL2V;nr>KdVwKyM$ z6QjN@^rvUZ_6B85XcgkVnKV8c_gu{46fL>(`%BQsgB#mYO+eaG>ECA~7CmsEIa*EV zKr;F@!T7)G6fk4D^Ntc(xtMprX)8Z|a7h~Rm#u&B?;^%e=1OjTfZj(TiS^HqSe8tv zUX8raY!!c~M%IdZcX59)&wt-{O9^woW_h>gXFT$S+}U3u?V3zo>StBRhHrGKmm=$b z&2~hTa%HP_>+a$W>3qLLnetcf(8R&3@&u!{skMBeDm_G@(#Eo(sbH-OJ=HJ6@(pPn zv37Irh~6v0Lh>R3?q*?}EBB&8Y9|&B1vf9363{s?#%yp@b08`LcRkm$;C;n;2djj% zy)Z#7FBg1r@(Y9}sV>+zEYlm9^c|_Y1^7_!9;3RW-FzV|or#M)-@!SS#>OJwaIVBw z)&V72yZgC$s17Ur>6bWY?e1`qMrJ5k-n1`1Zl_`HO@HS*6ix9;ok4#Lh`Fd zcWI}UkUAK6`#t$bSj`U>`lrJb4l9T|94ia*h;#(Z%?MT}18HvArYOZ~`PVOdyqMoPdCmE~v@`1EeKk5)FSpqGjpWHI2(U zV$)#bdm6K!y&rE7=Cc96Tt*|Mp(5qTN3ZWtzn)tTvdu}d&7MU?P!t7OA2!L+73$xw z(Nf;`7uTWv{`CxQtmH=l7Zomof_KobBA!3Rq;Gsy^}RzWUaTLAadSqmu7a@^TvToC znh(g}jn_KH0r6$gxU1#+2UFdg*@cj(Dh!h#ghBDDY>}L;3?;dI*lvsG=tG=ina1$H zZIH-7W{ToWE)?HNIiM8B@|YpvZjk)m4|R)493}MsiDD5t{r{wWtF$oDy15A-L0^vu z$7S1K;-C4Y%+?BT#?~}uNEF33@!&%< zL2fD2IiIW5xA!`gPkr8{s&9{$AVe==!pW({W%##A>-S=*_Jlt-+{KS7wsKP1~^%REp)5h*`HMAlXP~y zVmnb?5D%B=NT*hp-|BTpz~nw>TJ#!^vnxZuE(vRQ?J*9hyxxMk;B_W!Ei>bG`Nhs! zQDSernw=;s#*QNS1{!=9frxM;T$h!&8R#W7!7-o`pTN_?a5MF!Gb!IU)qMfY;QI-^ z63m-ir{-Ia0eB!zEY2&;IRvLosR)oZc96}QmiJBM;XjfhVm^8zIVEhc5dY?N+1To~ z4Xh~1H~vFxD>;@VhPH7iV_I=5`LrpdoKxOFe-2RV14T-{#>1`4OXneJ34OS{K(CdF z4Wu!HfUwN&tWA;QQyGK_wHq8*I}}xX|~BWFozJ4LWuWqvHtq60<4U&q=Eysu@miL0LJ zf#O{aK7W>4iY9?zo@m>bP*`NrL%uBx?JuA#cipJN!r7F9=I%2p8`Ul(x8flTb}i%y z?(|k3GaDln#J#-gxXRcFT_)FGz%5UQDR<~qRkY$}dST$fn%^#A}} z$FH0gFFbRX%!1*AtaL7(;<>=o!ts1b+?`lG@j7Xk)smzrz@;MQi}p2Y7B5KMr?=$f zxu$w&;au?5edJY%dz~H=|L5#dNaUq(W?uIVq;M~B8${Jw6uZFlic9#2RD6RxCWXri z3n6K+*GoQj0feS@gHA`1i1*eg z&VtbZ)`{Iji9UNfDw@{$67!?5XsP+!a7wXY1N@)$gySz$?@rbM%`|THt^mYfBBj)W z6~(gX<|0QoQ;|KCP*16p1Q%CApfrxl;i7!XM&iQBwR*P1Ge1xxCpYvD`^H$87m6-m zLOYH1%Mqb`PJl{V01eZ|Ip&S}Sg=`cZwyf2beJ(kXmqvbM?|Uv<3+PeY7xMu*!sru zj;dor0&_AS%7PQcRke9YegOheM12u&lYCeqIg3nHuh1n|rKmz;p2wpx4SXuT2AR~E3D?tRXg>Ez0?ehIzkYP) znbDX*9;L1evTa__G5jglfP`Fuh0$(a|A_vAo<)B{zlh+kydN;7j0Nb&s@EVVL&abXw**MK4}Q%}NT>`$NTl#ET8)Yyt6y^I zL<>DfBTp7U^;&9S4FY_kVsw!@xxL7|6A_`&iag#$&vq2+E}iy`tZ00niesZgX5ze) zQsYPnL4S~(!%)0jZIDP{rpu{N1aC+rFAA1T1*zSW!P1MH#oXrS+}c-&hTkO=Hb*00 z7VQsiu3bu(=b8Zp(}bK@c;=yDD#$OvM7I^S+E!7Ry~1TWYyegvD5Cb9%uH=F5UHd< z&kLGmc$hYFa!^$=ON#{lyoCtV?qVWZjT(q%}xmEuxY1sHd?^@^}_q>)rAH?m9S8qUopdSvvt5 zvz)@vI4q#kGE-N?NY|wa3>oZ)K5{2_LZi(l0NVSEBUE2#Vmzr((kf zu*S)IWmkHVDhn+W8qYA8hDp8kp?dHGPqOkHX90pEC#TD=y|CG^{6@O%C6W@fS!GQTShF6lw$ti@4v^Ph@{I-$$xMX{7BDd_(A8#$lMy+PqsKtC;>Ht|b%Eeu~LPx&c<^IXGU774rcjHGa zRI8M-xn5tg2oi+?NjCwnD2hwVvUA@G(dBDqlL-pzIAb%cj@#b%BBhp@a%L z8UXm=m*l?Fdln-Aw2r)d79(~sXwtbxDsG>?jlNxQ z!6>V(K$=F9g32g5j+bL44B!6OA&4x0%l*B9YvI_rKr7j@N1x=>Tp%!i4u@YRSwSFg z4t~_D2TW1~F=|P2{5eu%WFu_Bwx$~Y5D<)$oW;_LVV6k{V+ant0DIsMCb`BSY*}eS zBy~FMST3a?YshsvR{a3~0Hrnrnb4X`VhcqkwqR&jdLdS^$^QfEJPu{V=;31xuBqA+a^%rz#$v>#o*tzwzXm_` zcQ9)=bD|7q@dO2@^)M-!d3d7rZQ+>$nWnW<<{8Ors{L})Dd~hRVoSyF_>xPc3s6-z#3o@66%@`ym!)tyXvL z!ijvdRINZ)lwdNuE9!#slZ@IYq3QvGzcPrzAfm@OBW zP7+={C_M%F%?}U!obq|Z@emtuy6r>o0yK__!mcpBxc znA#iCv3<4W%wd(6&!jp_0&v5W2jW}+nzL0m#-xga%d1LHX0wJ6KI1Y0o7NfAvTtJD>d~; zd=!vY8JI|;T)`K`RtU1t1HgG$Y{FCc|n-TNL|5vW=s%*0J# zs0o?LGPk&G%ttD>nS}oCSJ4G?aL{tGk+)^*k@*J$a2jdc|FDsN*iXno#Gk`2&f{v? z;xJ4|827;X-4FmerSBrufuF6@e@NlEETM*3tT?QYjl*aVEJ5SqSkI}kEAt_HF5uv) zbMVHjuH{P#;>wJo1d+pN!yz{0jqk`+sH?7B9A6yG5k+1YM_$n`<<(8uGsPQye&H za9A*a;~FXwhBYihqW#qiUqGD8n$M}4YdM#K_-v`P+8;;+QI@C457%#9cOpD`@+uzi zFJ%@W?UKtrJ%=& zjuQ==xB&8wl27wSpGgjbWj(=Ac{MKnsVErKPJPV_9Q#s|jfK-DLl)}=2`8(9KvPg9 zlXy=T3o~?)oNcCF*4uM2MmJk=$p+l*@rt;Mv7{ViM+K&cJqVK1m`$tDZr|al$`>ij z1VSWb1O=KT@z@Q{c_*dVkXrTkH>c~;MohMIJS-u|AV=XM&7Ftr0>Uz_=KA_C`a~{b z#na3bjCi>Ihoa#x1vhg(@K2p<%gbZE2S=!HILUPm5b^G_`a--aTu4BwR!u^%H&3U* zU#fJGpBi@}vfpX|l_rBGQ6^Uq-jv7-av6!I*e6nAbLL1FPIMG1nSiweedz)ocx$oe7$Bc z(xhHYv4_MI%K>@9%tC-d8;s!gia%KKn)Rnm%=C_PC? z$fsNS5k&rPtqwKwG7=`mKK0O?czJh&$uKuI*+SmLc~P+6;wgBzp|Ht9qAEL?VJ_T4 zY{Cr7&g+(0#VCn3*CMoKB=!`uE(|FwNoI`0=rbxtoG}D+=Z%0OW>1wKq8I~xwgzal zE`*VZ1nx;AQMo}DdX(D(rCK9Sv1P+MHFxZAGcA#C)7CQfya)zM$U71#%HN$VWE_Wt zKc)-rnE2m1nMqf|3q^5J5VY?f$6sWEE-f$qGp+-qNk)&x-zmQ*j9-sLWqfv(SsSr3_6o(Ye>XvZ6RiY_7rxdVonT(D%j(!KrHRz;@C^(P+Ak zcfkqq(435&9N<8Sy=J5d>z7UW-L6NbPX+0yi0ZLdc-+aaW9xQKm{f}GV2OT5qdhVW z1ga)8=5|s_nr3KFQO5b(-iG2vHD(*|=sPi;f?yW!3K9fyRQ&oTph)K|HXM24CCe}j z!ZBU}8ld&~wE$bULx&S48Yk$5)zJpxa{S|W@tk~zk;yiDH9;)?5prtCMD-RtE+WMs zVhj{IC5_3m>Mxpk^hEyucEEUjVdk5W!LlhY}vvx~%hDx}wLB4`wQGPO+X%25hO?vi-@&BkIj zbVZL3C%h^~$39uMd5xHB&2`Nqqg_r=adM#6p^}-lC7*BLFE92|U1^z!m4Z|3B-YTp z2ZBiGO!gb}fn=jQ~YKMyX-N_CUniN>s4NoKBW z$?zy_zYym#JoEJ3$t@*^LxVQC^I)v0oVddk4nEr?-_FRNJm)yY z(52UHtR;#1Bs(RM)SBGZ?>ek3H)TNh0Myel9N9_1XwjQA)-u393=*Yisy9puxkw^f z-hyfUD8pA)bAg1#0`J)6$3QfqD@}&2B)DyXs4BE__55*4B_cP%CrD~^P}!W>B_7YG zMIYwo<3f^%BZ|g+5Ki;wKuX8V!ny~`^z2CWTFcAApCysqXBZ|lX?u@J(*NG=2vFt0 zcEVY7KiFMhOWRSvJcI?IS<4}!tsNU5`=oqIUv(OJ(Acv@_4niCBqS@6>YKno(JCSCaVG(Q=O|JyC z?o)+P+wK=nTf5mKTfGdT`+Xq)5sSfX8Z95t8Z{K=UyV&`;QUDNdZ1U^CJ;uKYM~Yq zs$d4u5*6Jn=%c1;77Omoc>N!Ss=?GF7m8)U3OA+*b;V@@J`Vr%eSe+auL=V`kH0~ixLDX>0N@OB*;C*kATx*{ApaVOmp!wq zo438CE0fnx`)Tb>heIwDf95#=%1iAT+EfeTM9fQ}Sqe9^;Y5c z4k_)X9M^hhyzgzyIH|YS$zZ1QTY+81vqW)Wur*C5Y?8DWE!`wH?%OfxGxfMS-aQ=q zfNVJ6NumJx{!gEL>JGb0AEksZ$be>etKJ_g(fmoqAN8H6{DY}1c@V}#LujRuOjlA)137erTKW4hW{~XkRHPnv%t-5Kt%zP1Mwp}ODSKoZa6XkQ0)Swpm&xss%W9N?A!d_qzg2OM^Sjs z1>Sn_wW-?CX_pAwV5;W9>*UzRUJhyfL!Y(Yl>zs;Ea0-C!QOgsRK;Zj?k2qS`|YF- zV`%JpGPbSD?FIIKh8s|I9G~Cu;99u{`~N!G8|~cB=JP$ds9Vs?iodf9>;N*CC4%Sx zDGfoUzf5w)AZ*FJk*bV@1J?fZ2NMv*G(j+Y9^b?bztbrF7S4w#O1(X@`tiA9*Bih3 zdhxp-!;ujJd~#GZE%!4pEi4hUI9MDcQ^&c`ds3zbRC{4&#jj;8Q$KX&uffR=$y+I> z>DWKW)Ni2uX`v0iK&F72JX6n>u}vyRz{41wc%qlW56)~RxH|vWyM}%M~XU?}! z?dtLv{0<)>=)kHjp|Y=6o4N1(!W*|6Cqsna*jYID@W8CPSDJ$@T6<}U_Y7q<+A~bo z+fVgjZ4IkH$f1I+9To*gDwdO1t2Y3t@g|}5*ve@uZRGS%Mb6Q#fMNgl@NWhr0JGNC zQEF4}^%Oo*2UOz}NtmF#$(Y7brW~+fc9a=m(jiZ=yRbw-{Y&l+Y`T)aWQetxF++T! z5%$*7h=XxSO~YvgLsrxp+PE&2L%gpJTUbH+Qs9Yt-|Qg4LH0lyI5Md$H8o%L zd$SKtWub6hf%Rx*J)&g9^16B@iZVyooZq{*VoH*`wI4{-_U0Au$ zi<5|PMK%|qof_NY%oIhkc9r`Gm{}T!Sbh3H9IobsrqEX);q+I+>5Z7{8~s1|jex-K zEKntQ5D;$;5D<+2d)jSGT`Vos-CTY+SpUzVFV^37JZwh=FwcDt{8fL?zi;)`A&9m| zisu$JID&6j>=B|v`&m^Wn_38b{Cxa{tJWxqWZCA=CWaI-l)3NsQEu?@W==2tXOJUR z%Xkd%dcNpIp;0g;SJM{{FizuMXFgOlchx*mqrY|U#-4duof7`qFZ^)@vr>6->1F=& zvu&c7mdh-gTlid$CPVi}(+uOsj}>4k7a4PQ9Et}$HQ@8%e99tQ+g5QC7AnaiC8z)jE_%jF@_QBtN! zMbi+TpZRpsVOY5A*^@gpww!?4Kv;V!?r)5kk+*KR_-u!s^cJ3}I3G^uuB`sDT7LWB znjFV2eV4c2XF3g;3w?luxqBOv#aBwU-_JWAbfxMr!Yq9l%Yh{_HTx30M5hTDPy*+S z_!$QJAal0|KIZ;(K)Wfcp{^+z=ag;DpeU`DM=j4+qng>kpCs}!Msgr(%XG}RlT+s_ zR{|p3p|&@9?}tJYyn5)u45r+z2BwEKPi@=Y`>iOpiFdmjDSO!`zlj&5=Sf^1QHEUB z2d87D8L5l9MDCsHMC16sEI6*KEPBJ6OnSD(GfgZ&Y#Qt?-~v6&AR5uAYQ46>2fqrj zros3mN&3vTQbYAX9yTQT@*tO5Yp!J^`}9iw7X4 z*dzlp$yM!>n<@Wo#9 zg@t$<<#hSlenbA(AwzZ0TIN9*?egt=Dg2t&y10vJN=mMMx-_=x>ibY7eo@=Ro|ER%Cdx8I!$SV6kTBXvNjn@Y;?l1#^R^fz?C>_ zDU_vUT?UuevYWN7b|)UI<9qqtOq98rd!lEkz@4=q z=UeZFA^m8=Vp_-=SH?5c3ElfKy1!JZT}sB!hGL!F+Pv;!$yWXAN7nw;j?&CBnA=!d zV=e`kAE7b6F<)47VRa6iU|rC5tWC2Yw(9ypT%-rj48-s0H)%WB*`ShJ*B_qsK0Rp% z(Cbqj^&Q)szzz|1fK(gxLN}^iIWV*%AY#u4Ua}q{hm?se9zPs{+Inbz zU;4<|7CVftTs1dVXRQZgPT(avTz#Yxjg2X8z`Im!r{0xgGSq7h$I~tJ z(0xt%z8;u7hO38{25KUb)Ygv~;)W$BKecG2oLNmD<>x;KXpc;y(GuA;__!y$H*t*U z#p=L;CVm{*IDxY(BSZb8b6}x$q`SyDRoxd`5IgZSiaA!xe!Q^B5#}QDtD$P>Ck)Tt z8c&x%5Sos?sZz$=uet=WS`+5(?9`2OL$`rVj*07yzIpZji+mw)1-h-kgP*p~Oy5qR zN+wtPt)=gfn9$eq)Ib}AQvYJ~Leu1ta9`sl5r%9>+;^}sk~Ks`OZ4g4SXI-4sE>^?WO#QNh% zgYW$YxI+WO&4qED2Ykih4sUvJwO8OUI}(P7 z_Cw2m1285lYlg4z-5j7m6duSd&qa+T*2x2_9e{=7p%z}r^5&}1a^DX2O zU8Zdo@J3$Im1a^OXB*`u+1yl}O_93s(@zD-^?-?$8hK6+*`2)`R}H}?Q5@4bw#yq0 z4Ilh$gP#Bz1+6n+boJbf=L0?W*hTY`sgVQh?M#-ZgT#GaOIyWo6xpafIFGc06-%Nw z*e*Hvkm7nQENP`=A2V?epG(oV8ktTYa@gqtAVGV0s-LFNC3d;#?Kd1_%P@SKPe0@l ztHpR7zyn|u8d>k*G;7INC> z(z%Cw-_FdX&nP#hDW%YP2=4$r+S6*v7>%vY%1!)Jda+uVQ1Ds=1Sh;0 zP~=%)LbCX`H3~!{Q?&=r0fx}S!F9FwE^LgK9|Rs6hQi}k;A3&SKVHvJeAdCNd?X}o zX^xm^;9%%rik;yUc@vww0X_2XztqleUEE-;JW7zR1fhJR?=syiEWvkX`$czwsGj$q zsbd=D`i)F3w=iFNR%`&3vrXI) zTMdq81oW{8I~9+r$NnxYU-d|OFGi#{OuDxb$!JK++Am7#BhhTC+T(QRwu-;tLs3P<>>-gOt~uLK_CW9ZE#5eU|^U& z{GMHe1l1&?@~(s_NRj3(UJBI0Dv^)IXXl_wk|p09_9DQSgBcE1d{ml;kDgCt8UYM} zkfxa9wB|uf!gzt@UlcJ0b*G_VOTZL8za6wsrq6|%C4n22v+GaCmZVR~AZ9WW$i|km zdcH)ps`GohRSJk*gQSF)CQz9NK)v(ixZlJlRn|83&TsXiDy}*lC;WxA*oMR?x#35o z{1;1MZ-v0<2FqpP9rpypp%nTcCpmVGw2e%l^>Ea7SlL-_zVcp*OCJ)sQxB1%kIAJW zC*DJj;+;Ht_)?Z)#-svO6*;Z+*8}W%=WD3_jp&enzgG*OfLVn0Y_`Y*Zh<=P^qor9 zYCj%$ElB|ASzoN15_Ea8Y?Mab0r|kGiZ77GD_I>KSe9}!uJ4>*tlHkmM=>e~X1Tnx zTy{m7DuzVe7X0`d`u8!4h5p2M{&$iR<{H!KVft7C=eu`Q498F5xC}A4y*#>-{q2lb zhm`A}`*;BtiSM*TDw;hY)dvxO4`r`i=_>zb~PO^)oDhEO1uIM?)U9vgUEbDW_kz70Egm$ola{aXg|J9^z+FNR zOzW0timXmRMfyb6Ms&r-MsJm6lo}gMjFTb{q;o(!?Es7 z`h}3!c;&Z%I{-ighx1{->)+u<#h-gcvJdg)es%{c3{+9XY)X_a2Zj8pH(R|96qF@J z8*tdpGG{7R6i+g`nf!P^8R@HH#{ zTn+yerB{5jYV{+k&Th;q<4?ab_>%WK-HCkud05?c>4ZMQ)@9Td=M5w$%Vgi(n8?De z_~33?)1^OIt}R?uU7TrMyp>jk(^FFlDozAbgN33SK&7#h`k|Y|COtCCf$K&b(r*RAdt2>ot8jba0owZFUExzWki7fQv$^+&; zMRM5GBK|f6+}?#mST~SDx}6TbA6o|mj21j6iGTrRG!=u=GB}s(jd6Q3xglc7v&f8w&(FVJTy`zyNlqpJ*mE<-l=+vteh!+H5!5;km_^uQQ0A1xA? zNjO-Q#o!Ss#uu?Dc%yFsMs`=qgz+cnH9EiBd*5!6LY3={LTZ%(DbYI-GziKhW;sk{ z;F0@?>o^PA)uR)W_7ti8G^Ll=lO(Mg zuix?E(Tq=-0WU1InFnjY7e_3z>F$V~ov&Wa*!i9| z*skISGU6Y?=It$tpXuf6KzW7g`Im5~HcfcS{_6MV1&=Dj#+T8a)4$F)i060GS_9lT z`YUwe^P%}57 z&8|x7v5dPx79IzLlQG#FGADk3AFVpM=bhttPGfarLq8`lLYpsg0IAN+UOrF*^o4~y zi^5B6Jx4%~EB2OdgoT2-1V#=A^EyCJY!~6h_qp|0FINIyv(bjP2QIOte1bh)A5c(& zl%?Kzl_u?6zE!GKh=4XkQmQ!0F+2sgIlr;~{7h?l|GCghnt=Q*A6rJ68Ad^CCI-}( zJ0U-SojVo!CVT}dD`GXBE9*l2--=ghEj3VLV3rmm!GDVgK|yf-dD{Pd)DVC_5%7SY zT6ACytUy|AN`n7C2KQgC5HHYHo0#DLciaC<;1C3sXp4X~%K&qwDS-$&bYQ<_fjm0A z1pi~d{#Bm&LjJF(|6dUUIbfWQ2$;1ZP(=YBc%g&xzuN-%t%C^`tpvo<6$C?31#0RF Sfc;hn0(B{&uC@Ln{C@yc`UY_T delta 15063 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 Zeuxc)q)2VPe_)8DQEf_?Hnsog{6F(~X}$me diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a9079d99d..3c6fefb44 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -16305,6 +16305,60 @@ console.log(`Reviewed text (before):\n${before.value}`); console.log(`Reviewed text (after):\n${after.value}`); }); +'Word.CheckboxContentControl:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + // Toggles the isChecked property on all checkbox content controls. + + await Word.run(async (context) => { + let contentControls = context.document.getContentControls({ + types: [Word.ContentControlType.checkBox] + }); + contentControls.load("items"); + + await context.sync(); + + const length = contentControls.items.length; + console.log(`Number of checkbox content controls: ${length}`); + + if (length <= 0) { + return; + } + + const checkboxContentControls = []; + for (let i = 0; i < length; i++) { + let contentControl = contentControls.items[i]; + contentControl.load("id,checkboxContentControl/isChecked"); + checkboxContentControls.push(contentControl); + } + + await context.sync(); + + console.log("isChecked state before:"); + const updatedCheckboxContentControls = []; + for (let i = 0; i < checkboxContentControls.length; i++) { + const currentCheckboxContentControl = checkboxContentControls[i]; + const isCheckedBefore = currentCheckboxContentControl.checkboxContentControl.isChecked; + console.log(`id: ${currentCheckboxContentControl.id} ... isChecked: ${isCheckedBefore}`); + + currentCheckboxContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + currentCheckboxContentControl.load("id,checkboxContentControl/isChecked"); + updatedCheckboxContentControls.push(currentCheckboxContentControl); + } + + await context.sync(); + + console.log("isChecked state after:"); + for (let i = 0; i < updatedCheckboxContentControls.length; i++) { + const currentCheckboxContentControl = updatedCheckboxContentControls[i]; + console.log( + `id: ${currentCheckboxContentControl.id} ... isChecked: ${currentCheckboxContentControl.checkboxContentControl.isChecked}` + ); + } + }); 'Word.Comment#delete:member(1)': - >- // Link to full sample: @@ -16523,7 +16577,7 @@ await context.sync(); for (let i = 0; i < evenContentControls.items.length; i++) { - // Change a few properties and append a paragraph + // Change a few properties and append a paragraph. evenContentControls.items[i].set({ color: "red", title: "Odd ContentControl #" + (i + 1), @@ -16533,7 +16587,7 @@ } for (let j = 0; j < oddContentControls.items.length; j++) { - // Change a few properties and append a paragraph + // Change a few properties and append a paragraph. oddContentControls.items[j].set({ color: "green", title: "Even ContentControl #" + (j + 1), @@ -16799,7 +16853,7 @@ await context.sync(); for (let i = 0; i < evenContentControls.items.length; i++) { - // Change a few properties and append a paragraph + // Change a few properties and append a paragraph. evenContentControls.items[i].set({ color: "red", title: "Odd ContentControl #" + (i + 1), @@ -16809,7 +16863,7 @@ } for (let j = 0; j < oddContentControls.items.length; j++) { - // Change a few properties and append a paragraph + // Change a few properties and append a paragraph. oddContentControls.items[j].set({ color: "green", title: "Even ContentControl #" + (j + 1), @@ -16901,6 +16955,30 @@ console.log(event.ids); }); } +'Word.ContentControlType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + // Traverses each paragraph of the document and places a checkbox content + control at the beginning of each. + + await Word.run(async (context) => { + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // Don't need any properties; just start each paragraph with a content control. + + await context.sync(); + + for (let i = 0; i < paragraphs.items.length; i++) { + let contentControl = paragraphs.items[i] + .getRange(Word.RangeLocation.start) + .insertContentControl(Word.ContentControlType.checkBox); + } + console.log("Checkbox content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); 'Word.Critique:interface': - >- // Link to full sample: @@ -17699,6 +17777,60 @@ console.log("Differences shown in the current document."); }); +'Word.Document#getContentControls:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + // Toggles the isChecked property on all checkbox content controls. + + await Word.run(async (context) => { + let contentControls = context.document.getContentControls({ + types: [Word.ContentControlType.checkBox] + }); + contentControls.load("items"); + + await context.sync(); + + const length = contentControls.items.length; + console.log(`Number of checkbox content controls: ${length}`); + + if (length <= 0) { + return; + } + + const checkboxContentControls = []; + for (let i = 0; i < length; i++) { + let contentControl = contentControls.items[i]; + contentControl.load("id,checkboxContentControl/isChecked"); + checkboxContentControls.push(contentControl); + } + + await context.sync(); + + console.log("isChecked state before:"); + const updatedCheckboxContentControls = []; + for (let i = 0; i < checkboxContentControls.length; i++) { + const currentCheckboxContentControl = checkboxContentControls[i]; + const isCheckedBefore = currentCheckboxContentControl.checkboxContentControl.isChecked; + console.log(`id: ${currentCheckboxContentControl.id} ... isChecked: ${isCheckedBefore}`); + + currentCheckboxContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + currentCheckboxContentControl.load("id,checkboxContentControl/isChecked"); + updatedCheckboxContentControls.push(currentCheckboxContentControl); + } + + await context.sync(); + + console.log("isChecked state after:"); + for (let i = 0; i < updatedCheckboxContentControls.length; i++) { + const currentCheckboxContentControl = updatedCheckboxContentControls[i]; + console.log( + `id: ${currentCheckboxContentControl.id} ... isChecked: ${currentCheckboxContentControl.checkboxContentControl.isChecked}` + ); + } + }); 'Word.Document#getParagraphByUniqueLocalId:member(1)': - >- // Link to full sample: @@ -19067,6 +19199,34 @@ await context.sync(); console.log("success"); }); +'Word.Paragraph#insertContentControl:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml + + + // Traverses each paragraph of the document and wraps a content control on + each with either a even or odd tags. + + await Word.run(async (context) => { + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // Don't need any properties; just wrap each paragraph with a content control. + + await context.sync(); + + for (let i = 0; i < paragraphs.items.length; i++) { + let contentControl = paragraphs.items[i].insertContentControl(); + // For even, tag "even". + if (i % 2 === 0) { + contentControl.tag = "even"; + } else { + contentControl.tag = "odd"; + } + } + console.log("Content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); 'Word.Paragraph#insertText:member(1)': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 72ebb0eea..0622217e3 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -9,6 +9,7 @@ "word-content-controls-content-control-ondatachanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml", "word-content-controls-content-control-onexited-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml", "word-content-controls-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml", + "word-content-controls-insert-and-change-checkbox-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml", diff --git a/view/word.json b/view/word.json index 7476607dd..7353a2a3d 100644 --- a/view/word.json +++ b/view/word.json @@ -9,6 +9,7 @@ "word-content-controls-content-control-ondatachanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-ondatachanged-event.yaml", "word-content-controls-content-control-onexited-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onexited-event.yaml", "word-content-controls-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-ondeleted-event.yaml", + "word-content-controls-insert-and-change-checkbox-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/insert-list.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/organize-list.yaml", From 0945e94518f168eae7a7f4492051a1c52e59dc3b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 9 May 2024 07:26:17 -0700 Subject: [PATCH 050/156] [Word] (comments) Expand snippet to include event handling (#872) * [Word] (comments) Expand snippet to include event handling * Add track and sync statements to enable event handling * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback * Remove remaining Script Lab mentions * rename variable --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 11 + playlists/word.yaml | 11 + samples/word/50-document/manage-comments.yaml | 13 +- .../word/99-preview-apis/manage-comments.yaml | 335 ++++++++++++++++++ snippet-extractor-output/snippets.yaml | 14 +- view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 374 insertions(+), 12 deletions(-) create mode 100644 samples/word/99-preview-apis/manage-comments.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 7e6c9f469..e26645577 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -515,6 +515,17 @@ group: Preview APIs api_set: WordApi: '1.8' +- id: word-manage-comments + name: Manage comments + fileName: manage-comments.yaml + description: >- + This sample shows how to perform operations on comments (including insert, + reply, get, edit, resolve, and delete) and use comment events. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + group: Preview APIs + api_set: + WordApi: '1.8' - id: word-manage-styles name: Manage styles fileName: manage-styles.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index e9a0165a5..31fd28bbc 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -515,6 +515,17 @@ group: Preview APIs api_set: WordApi: '1.8' +- id: word-manage-comments + name: Manage comments + fileName: manage-comments.yaml + description: >- + This sample shows how to perform operations on comments (including insert, + reply, get, edit, resolve, and delete) and use comment events. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml + group: Preview APIs + api_set: + WordApi: '1.8' - id: word-manage-styles name: Manage styles fileName: manage-styles.yaml diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index b1b72c157..81c33aa9a 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -25,7 +25,7 @@ script: .toString(); const comment = context.document.getSelection().insertComment(text); - // Load object for display in Script Lab console. + // Load object to log in the console. comment.load(); await context.sync(); @@ -46,7 +46,7 @@ script: .getFirst(); comment.content = text; - // Load object for display in Script Lab console. + // Load object to log in the console. comment.load(); await context.sync(); @@ -64,6 +64,7 @@ script: const comments = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); + const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); @@ -87,8 +88,8 @@ script: // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. - const toggleResolved: boolean = comment.resolved; - comment.resolved = !toggleResolved; + const resolvedBefore = comment.resolved; + comment.resolved = !resolvedBefore; comment.load(); await context.sync(); @@ -117,7 +118,7 @@ script: await Word.run(async (context) => { const comments = context.document.getSelection().getComments(); - // Load objects for display in Script Lab console. + // Load objects to log in the console. comments.load(); await context.sync(); @@ -145,7 +146,7 @@ script: await Word.run(async (context) => { const comments = context.document.body.getComments(); - // Load objects for display in Script Lab console. + // Load objects to log in the console. comments.load(); await context.sync(); diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml new file mode 100644 index 000000000..41cbd23dd --- /dev/null +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -0,0 +1,335 @@ +id: word-manage-comments +name: Manage comments +description: 'This sample shows how to perform operations on comments (including insert, reply, get, edit, resolve, and delete) and use comment events.' +host: WORD +api_set: + WordApi: '1.8' +script: + content: | + $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + $("#insert").on("click", () => tryCatch(insertComment)); + $("#edit").on("click", () => tryCatch(editFirstCommentInSelection)); + $("#reply").on("click", () => tryCatch(replyToFirstActiveCommentInSelection)); + $("#resolve").on("click", () => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); + $("#range").on("click", () => tryCatch(getFirstCommentRange)); + $("#get-comments-in-selection").on("click", () => tryCatch(getCommentsInSelection)); + $("#delete").on("click", () => tryCatch(deleteFirstCommentInSelection)); + $("#get-comments").on("click", () => tryCatch(getComments)); + $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); + $("#setup").on("click", () => tryCatch(setup)); + + let eventContexts = []; + + async function registerEventHandlers() { + // Registers event handlers. + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + } + + async function insertComment() { + // Sets a comment on the selected content. + await Word.run(async (context) => { + const text = $("#comment-text") + .val() + .toString(); + const comment = context.document.getSelection().insertComment(text); + + // Load object to log in the console. + comment.load(); + await context.sync(); + + console.log("Comment inserted:", comment); + }); + } + + async function editFirstCommentInSelection() { + // Edits the first comment in the selected content. + await Word.run(async (context) => { + const text = $("#edit-comment-text") + .val() + .toString(); + const comment = context.document + .getSelection() + .getComments() + .getFirst(); + comment.content = text; + + // Load object to log in the console. + comment.load(); + await context.sync(); + + console.log("Comment content changed:", comment); + }); + } + + async function replyToFirstActiveCommentInSelection() { + // Replies to the first active comment in the selected content. + await Word.run(async (context) => { + const text = $("#reply-text") + .val() + .toString(); + const comments = context.document.getSelection().getComments(); + comments.load("items"); + await context.sync(); + + const firstActiveComment = comments.items.find((item) => item.resolved !== true); + if (firstActiveComment) { + const reply = firstActiveComment.reply(text); + console.log("Reply added."); + } else { + console.log("No active comment was found in the selection, so couldn't reply."); + } + }); + } + + async function toggleResolvedStatusOfFirstCommentInSelection() { + // Toggles Resolved status of the first comment in the selected content. + await Word.run(async (context) => { + const comment = context.document + .getSelection() + .getComments() + .getFirst(); + comment.load("resolved"); + await context.sync(); + + // Toggle resolved status. + // If the comment is active, set as resolved. + // If it's resolved, set resolved to false. + const resolvedBefore = comment.resolved; + comment.resolved = !resolvedBefore; + comment.load(); + await context.sync(); + + console.log(`Comment Resolved status: ${comment.resolved}`, comment); + }); + } + + async function getFirstCommentRange() { + // Gets the range of the first comment in the selected content. + await Word.run(async (context) => { + const range = context.document + .getSelection() + .getComments() + .getFirst() + .getRange(); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + }); + } + + async function getCommentsInSelection() { + // Gets the comments in the selected content. + await Word.run(async (context) => { + const comments = context.document.getSelection().getComments(); + + // Load objects to log in the console. + comments.load(); + await context.sync(); + + console.log("Comments:", comments); + }); + } + + async function deleteFirstCommentInSelection() { + // Deletes the first comment in the selected content. + await Word.run(async (context) => { + context.document + .getSelection() + .getComments() + .getFirst() + .delete(); + await context.sync(); + + console.log("Comment deleted."); + }); + } + + async function getComments() { + // Gets the comments in the document body. + await Word.run(async (context) => { + const comments = context.document.body.getComments(); + + // Load objects to log in the console. + comments.load(); + await context.sync(); + + console.log("All comments:", comments); + }); + } + + async function deregisterEventHandlers() { + // Deregisters event handlers. + await Word.run(async (context) => { + for (let i = 0; i < eventContexts.length; i++) { + await Word.run(eventContexts[i].context, async (context) => { + eventContexts[i].remove(); + }); + } + + await context.sync(); + + eventContexts = []; + console.log("Removed event handlers."); + }); + } + + async function onEventHandler(event: Word.CommentEventArgs) { + // Handler for all events except onCommentChanged. + await Word.run(async (context) => { + console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); + }); + } + + async function onChangedHandler(event: Word.CommentEventArgs) { + await Word.run(async (context) => { + console.log( + `${event.type} event detected. ${event.changeType} change made. Event source: ${event.source}. Comment info:` + ); + console.log(event.commentDetails); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", + "Start" + ); + body.paragraphs + .getLast() + .insertText( + "To make your document look professionally produced, Word provides header, footer, cover page, and text box designs that complement each other. For example, you can add a matching Online cover page, header, and sidebar. Click Insert and then choose the Online elements you want from the different Online galleries.", + "Replace" + ); + }); + } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows operations on comments and how to use comment events.

+

Important: Comment events APIs are currently in preview. If this snippet doesn't work, try using + Word + on a different platform.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

+ +

+

Manage comments in selection

+

Select content in document body before proceeding.

+

+ + + +

+

+ + + +

+

+ + + +

+

+ +

+

+ +

+

+ +

+

+ +

+

Manage comments in document body

+

+ +

+

+ +

+
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 3c6fefb44..552c22ce4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15435,7 +15435,7 @@ await Word.run(async (context) => { const comments = context.document.body.getComments(); - // Load objects for display in Script Lab console. + // Load objects to log in the console. comments.load(); await context.sync(); @@ -16411,6 +16411,7 @@ const comments = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); + const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); @@ -16437,7 +16438,7 @@ .getFirst(); comment.content = text; - // Load object for display in Script Lab console. + // Load object to log in the console. comment.load(); await context.sync(); @@ -16463,8 +16464,8 @@ // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. - const toggleResolved: boolean = comment.resolved; - comment.resolved = !toggleResolved; + const resolvedBefore = comment.resolved; + comment.resolved = !resolvedBefore; comment.load(); await context.sync(); @@ -16505,6 +16506,7 @@ const comments = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); + const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); @@ -19831,7 +19833,7 @@ await Word.run(async (context) => { const comments = context.document.getSelection().getComments(); - // Load objects for display in Script Lab console. + // Load objects to log in the console. comments.load(); await context.sync(); @@ -19901,7 +19903,7 @@ .toString(); const comment = context.document.getSelection().insertComment(text); - // Load object for display in Script Lab console. + // Load object to log in the console. comment.load(); await context.sync(); diff --git a/view-prod/word.json b/view-prod/word.json index 0622217e3..0b0a3d3d3 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -51,6 +51,7 @@ "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 7353a2a3d..3a4944169 100644 --- a/view/word.json +++ b/view/word.json @@ -51,6 +51,7 @@ "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" } \ No newline at end of file From 2efd1c0062e29714428c3cbcf1ddebb600dac532 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 9 May 2024 10:54:28 -0700 Subject: [PATCH 051/156] [Word] Update mappings, minor cleanup (#873) * [Word] Update mappings, minor cleanup * Tweak --- .../content-control-onadded-event.yaml | 3 +- .../content-control-ondatachanged-event.yaml | 3 +- .../content-control-ondeleted-event.yaml | 6 +- ...tent-control-onselectionchanged-event.yaml | 3 +- ...t-and-change-checkbox-content-control.yaml | 2 +- samples/word/20-lists/organize-list.yaml | 2 +- samples/word/25-paragraph/get-text.yaml | 4 +- samples/word/25-paragraph/onadded-event.yaml | 3 +- .../word/25-paragraph/onchanged-event.yaml | 3 +- .../word/25-paragraph/ondeleted-event.yaml | 6 +- samples/word/40-tables/manage-formatting.yaml | 28 +- .../50-document/insert-section-breaks.yaml | 8 +- samples/word/50-document/manage-body.yaml | 2 +- .../50-document/manage-change-tracking.yaml | 3 +- samples/word/50-document/manage-comments.yaml | 15 +- .../manage-custom-xml-part-ns.yaml | 32 +- .../50-document/manage-custom-xml-part.yaml | 22 +- samples/word/50-document/manage-fields.yaml | 20 +- samples/word/50-document/manage-settings.yaml | 9 +- samples/word/50-document/manage-styles.yaml | 3 +- .../50-document/manage-tracked-changes.yaml | 14 +- samples/word/50-document/save-close.yaml | 8 +- .../insert-and-get-pictures.yaml | 3 +- .../word/99-preview-apis/manage-comments.yaml | 6 +- .../99-preview-apis/manage-custom-style.yaml | 6 +- .../word/99-preview-apis/manage-styles.yaml | 5 +- snippet-extractor-metadata/word.xlsx | Bin 23283 -> 24824 bytes snippet-extractor-output/snippets.yaml | 1287 +++++++++++++---- 28 files changed, 1108 insertions(+), 398 deletions(-) diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 17b277280..34887f3c6 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -26,8 +26,7 @@ script: async function contentControlAdded(event: Word.ContentControlAddedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were added:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls that were added:`, event.ids); }); } diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 2997c1269..1b09913e1 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -57,8 +57,7 @@ script: async function contentControlDataChanged(event: Word.ContentControlDataChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`, event.ids); }); } diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index 4f556d67c..743ad26fb 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -58,8 +58,7 @@ script: async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } @@ -72,8 +71,7 @@ script: if (contentControls.items.length === 0) { console.log("There are no content controls in this document."); } else { - console.log("Control to be deleted:"); - console.log(contentControls.items[0]); + console.log("Control to be deleted:", contentControls.items[0]); contentControls.items[0].delete(false); await context.sync(); } diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 3d8d86643..ad28cbd46 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -56,8 +56,7 @@ script: async function contentControlSelectionChanged(event: Word.ContentControlSelectionChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } diff --git a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml index 4fe1a47ae..f31b67deb 100644 --- a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -172,7 +172,7 @@ script: await callback(); } catch (error) { // Note: In a production add-in, you'd want to notify the user through your add-in's UI. - if (error.code === "ItemNotFound") { + if (error.code === Word.ErrorCodes.itemNotFound) { console.warn("No checkbox content control is currently selected."); } else { console.error(error); diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 08e17b121..1eb4f5afa 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -54,7 +54,7 @@ script: await context.sync(); if (lists.items.length === 0) { - console.warn("There are no lists in this document"); + console.warn("There are no lists in this document."); return; } diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index e0fe92f7a..8c9a516cc 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -21,9 +21,7 @@ script: await context.sync(); - console.log("Text:- " + text.value); - console.log("Including hidden text:- " + textIncludingHidden.value); - console.log("Including text marked as deleted:- " + textIncludingDeleted.value); + console.log("Text:- " + text.value, "Including hidden text:- " + textIncludingHidden.value, "Including text marked as deleted:- " + textIncludingDeleted.value); }); } diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index 33d734e61..20a2dedb4 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -26,8 +26,7 @@ script: async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs that were added:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs that were added:`, event.uniqueLocalIds); }); } diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index 7f3949d7d..7007ebc7d 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -26,8 +26,7 @@ script: async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index 218aefc73..5882112ea 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -26,8 +26,7 @@ script: async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`, event.uniqueLocalIds); }); } @@ -40,8 +39,7 @@ script: if (paragraphs.items.length == 0) { console.log("There are no paragraphs in this document."); } else { - console.log("Paragraph to be deleted:"); - console.log(paragraphs.items[0]); + console.log("Paragraph to be deleted:", paragraphs.items[0]); paragraphs.items[0].delete(); await context.sync(); } diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index 4f5bced69..57211d821 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -26,10 +26,7 @@ script: firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); } @@ -42,10 +39,7 @@ script: border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); } @@ -71,9 +65,7 @@ script: firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table's first row:`); - console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); + console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); } @@ -87,10 +79,7 @@ script: border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table's first row:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table's first row:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); } @@ -117,9 +106,7 @@ script: firstCell.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table's first cell:`); - console.log(`- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`); - console.log(`- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); + console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); } @@ -133,10 +120,7 @@ script: border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table's first cell:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table's first cell:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); } diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index a28158469..01282c095 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -21,7 +21,7 @@ script: await context.sync(); - console.log("Inserted section break on next page"); + console.log("Inserted section break on next page."); }); } @@ -33,7 +33,7 @@ script: await context.sync(); - console.log("Inserted section break on next even page"); + console.log("Inserted section break on next even page."); }); } @@ -45,7 +45,7 @@ script: await context.sync(); - console.log("Inserted section break on next odd page"); + console.log("Inserted section break on next odd page."); }); } @@ -57,7 +57,7 @@ script: await context.sync(); - console.log("Inserted section without an associated page break"); + console.log("Inserted section without an associated page break."); }); } diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index 28ac0ef5b..7539792ea 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -249,7 +249,7 @@ script: // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. await context.sync(); - console.log('Text added to the beginning of the document body.'); + console.log("Text added to the beginning of the document body."); }); } diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 233e4681f..db9c6cddb 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -56,8 +56,7 @@ script: await context.sync(); - console.log(`Reviewed text (before):\n${before.value}`); - console.log(`Reviewed text (after):\n${after.value}`); + console.log("Reviewed text (before):", before.value, "Reviewed text (after):", after.value); }); } diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 81c33aa9a..17c2152e9 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -29,8 +29,7 @@ script: comment.load(); await context.sync(); - console.log("Comment inserted:"); - console.log(comment); + console.log("Comment inserted:", comment); }); } @@ -50,8 +49,7 @@ script: comment.load(); await context.sync(); - console.log("Comment content changed:"); - console.log(comment); + console.log("Comment content changed:", comment); }); } @@ -93,8 +91,7 @@ script: comment.load(); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`); - console.log(comment); + console.log(`Comment Resolved status: ${comment.resolved}`, comment); }); } @@ -122,8 +119,7 @@ script: comments.load(); await context.sync(); - console.log("Comments:"); - console.log(comments); + console.log("Comments:", comments); }); } @@ -150,8 +146,7 @@ script: comments.load(); await context.sync(); - console.log("All comments:"); - console.log(comments); + console.log("All comments:", comments); }); } diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index ee9b603b5..92d323f5f 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -28,8 +28,7 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`); - console.log(readableXml); + console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`, readableXml); // Store the XML part's ID in a setting so the ID is available to other functions. const settings = context.document.settings; @@ -63,7 +62,7 @@ script: console.log(clientResult.value[i]); } } else { - console.warn("Didn't find custom XML part to query"); + console.warn("Didn't find custom XML part to query."); } }); } @@ -86,7 +85,7 @@ script: const namespaceUri = customXmlPart.namespaceUri; console.log(`Namespace URI: ${JSON.stringify(namespaceUri)}`); } else { - console.warn("Didn't find custom XML part"); + console.warn("Didn't find custom XML part."); } }); } @@ -106,8 +105,7 @@ script: await context.sync(); let readableXml = addLineBreaksToXML(originalXmlBlob.value); - console.log("Original custom XML part:"); - console.log(readableXml); + console.log("Original custom XML part:", readableXml); // The setXml method replaces the entire XML part. customXmlPart.setXml( @@ -117,10 +115,9 @@ script: await context.sync(); readableXml = addLineBreaksToXML(updatedXmlBlob.value); - console.log("Replaced custom XML part:"); - console.log(readableXml); + console.log("Replaced custom XML part:", readableXml); } else { - console.warn("Didn't find custom XML part to replace"); + console.warn("Didn't find custom XML part to replace."); } }); } @@ -148,10 +145,9 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted attribute:"); - console.log(readableXml); + console.log("Successfully inserted attribute:", readableXml); } else { - console.warn("Didn't find custom XML part to insert attribute into"); + console.warn("Didn't find custom XML part to insert attribute into."); } }); } @@ -179,10 +175,9 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted element:"); - console.log(readableXml); + console.log("Successfully inserted element:", readableXml); } else { - console.warn("Didn't find custom XML part to insert element into"); + console.warn("Didn't find custom XML part to insert element into."); } }); } @@ -205,7 +200,7 @@ script: await context.sync(); if (customXmlPart.isNullObject) { - console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted`); + console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted.`); // Delete the associated setting too. xmlPartIDSetting.delete(); @@ -213,11 +208,10 @@ script: await context.sync(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); - const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:\n${readableXml}`; - console.error(strangeMessage); + console.error(`This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, readableXml); } } else { - console.warn("Didn't find custom XML part to delete"); + console.warn("Didn't find custom XML part to delete."); } }); } diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index a5de8205b..2b02d5b57 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -25,8 +25,7 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Added custom XML part:"); - console.log(readableXml); + console.log("Added custom XML part:", readableXml); // Store the XML part's ID in a setting so the ID is available to other functions. const settings = context.document.settings; @@ -60,7 +59,7 @@ script: console.log(clientResult.value[i]); } } else { - console.warn("Didn't find custom XML part to query"); + console.warn("Didn't find custom XML part to query."); } }); } @@ -83,10 +82,9 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted attribute:"); - console.log(readableXml); + console.log("Successfully inserted attribute:", readableXml); } else { - console.warn("Didn't find custom XML part to insert attribute into"); + console.warn("Didn't find custom XML part to insert attribute into."); } }); } @@ -114,10 +112,9 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted element:"); - console.log(readableXml); + console.log("Successfully inserted element:", readableXml); } else { - console.warn("Didn't find custom XML part to insert element into"); + console.warn("Didn't find custom XML part to insert element into."); } }); } @@ -140,7 +137,7 @@ script: await context.sync(); if (customXmlPart.isNullObject) { - console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted`); + console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted.`); // Delete the associated setting too. xmlPartIDSetting.delete(); @@ -148,11 +145,10 @@ script: await context.sync(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); - const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:\n${readableXml}`; - console.error(strangeMessage); + console.error(`This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, readableXml); } } else { - console.warn("Didn't find custom XML part to delete"); + console.warn("Didn't find custom XML part to delete."); } }); } diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index 17732b633..8d1d705c7 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -29,8 +29,7 @@ script: if (field.isNullObject) { console.log("There are no fields in this document."); } else { - console.log("Code of the field: " + field.code); - console.log("Result of the field: " + JSON.stringify(field.result)); + console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); } @@ -46,11 +45,7 @@ script: if (field.isNullObject) { console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); } @@ -86,8 +81,7 @@ script: await context.sync(); for (let i = 0; i < fields.items.length; i++) { - console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`); - console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); + console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`, `Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); } } }); @@ -104,9 +98,7 @@ script: if (field.isNullObject) { console.log("No field in selection."); } else { - console.log("Before updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("Before updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); field.updateResult(); field.select(); @@ -115,9 +107,7 @@ script: field.load(["code", "result"]); await context.sync(); - console.log("After updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("After updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); } }); } diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 7e53de92c..2e04ab5b9 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -20,7 +20,7 @@ script: .toString(); if (key == "") { - console.error("Key shouldn't be empty"); + console.error("Key shouldn't be empty."); return; } @@ -33,8 +33,7 @@ script: setting.load(); await context.sync(); - console.log("Setting added or edited:"); - console.log(setting); + console.log("Setting added or edited:", setting); }); } @@ -46,7 +45,7 @@ script: await context.sync(); if (settings.items.length == 0) { - console.log("There are no settings"); + console.log("There are no settings."); } else { console.log("All settings:"); for (let i = 0; i < settings.items.length; i++) { @@ -62,7 +61,7 @@ script: const settings = context.document.settings; settings.deleteAll(); await context.sync(); - console.log("All settings deleted"); + console.log("All settings deleted."); }); } diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index fda1e6d2b..e3f9ab032 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -74,8 +74,7 @@ script: style.paragraphFormat.load(); await context.sync(); - console.log(`Properties of the '${styleName}' style:`); - console.log(style); + console.log(`Properties of the '${styleName}' style:`, style); } }); } diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 236cf3120..81c2cf641 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -73,10 +73,9 @@ script: trackedChange.load(); await context.sync(); - console.log("First tracked change:"); - console.log(trackedChange); + console.log("First tracked change:", trackedChange); trackedChange.accept(); - console.log("Accepted the first tracked change"); + console.log("Accepted the first tracked change."); }); } @@ -89,10 +88,9 @@ script: trackedChange.load(); await context.sync(); - console.log("First tracked change:"); - console.log(trackedChange); + console.log("First tracked change:, trackedChange); trackedChange.reject(); - console.log("Rejected the first tracked change"); + console.log("Rejected the first tracked change."); }); } @@ -102,7 +100,7 @@ script: const body = context.document.body; const trackedChanges = body.getTrackedChanges(); trackedChanges.acceptAll(); - console.log("Accepted all tracked changes"); + console.log("Accepted all tracked changes."); }); } @@ -112,7 +110,7 @@ script: const body = context.document.body; const trackedChanges = body.getTrackedChanges(); trackedChanges.rejectAll(); - console.log("Rejected all tracked changes"); + console.log("Rejected all tracked changes."); }); } diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index faaf9a2d1..e5848e950 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -21,7 +21,7 @@ script: const text = $("#fileName-text") .val() .toString(); - context.document.save("Save", text); + context.document.save(Word.SaveBehavior.save, text); await context.sync(); }); } @@ -30,7 +30,7 @@ script: // If the document hasn't been saved before, prompts // user with options for if or how they want to save. await Word.run(async (context) => { - context.document.save("Prompt"); + context.document.save(Word.SaveBehavior.prompt); await context.sync(); }); } @@ -38,14 +38,14 @@ script: async function closeAfterSave() { // Closes the document after saving. await Word.run(async (context) => { - context.document.close("Save"); + context.document.close(Word.CloseBehavior.save); }); } async function closeWithoutSave() { // Closes the document without saving any changes. await Word.run(async (context) => { - context.document.close("SkipSave"); + context.document.close(Word.CloseBehavior.skipSave); await context.sync(); }); } diff --git a/samples/word/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml index b05bfc235..60fbe96d6 100644 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -30,8 +30,7 @@ script: firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - console.log(`Image format: ${firstPicture.imageFormat}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index 41cbd23dd..85305a279 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -107,8 +107,7 @@ script: // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. - const resolvedBefore = comment.resolved; - comment.resolved = !resolvedBefore; + comment.resolved = !comment.resolved; comment.load(); await context.sync(); @@ -197,9 +196,8 @@ script: async function onChangedHandler(event: Word.CommentEventArgs) { await Word.run(async (context) => { console.log( - `${event.type} event detected. ${event.changeType} change made. Event source: ${event.source}. Comment info:` + `${event.type} event detected. ${event.changeType} change made. Event source: ${event.source}. Comment info:`, event.commentDetails ); - console.log(event.commentDetails); }); } diff --git a/samples/word/99-preview-apis/manage-custom-style.yaml b/samples/word/99-preview-apis/manage-custom-style.yaml index 90e99ac9c..15fc9498b 100644 --- a/samples/word/99-preview-apis/manage-custom-style.yaml +++ b/samples/word/99-preview-apis/manage-custom-style.yaml @@ -76,8 +76,7 @@ script: table.styleFirstColumn = false; await context.sync(); - console.log(`'${styleName}' style applied to first table.`); - console.log(style); + console.log(`'${styleName}' style applied to first table.`, style); } }); } @@ -318,8 +317,7 @@ script: '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; const styles = context.document.importStylesFromJson(str); await context.sync(); - console.log("Styles imported from JSON:"); - console.log(styles); + console.log("Styles imported from JSON:", styles); }); } diff --git a/samples/word/99-preview-apis/manage-styles.yaml b/samples/word/99-preview-apis/manage-styles.yaml index 0dfcbdf52..a4f10e60e 100644 --- a/samples/word/99-preview-apis/manage-styles.yaml +++ b/samples/word/99-preview-apis/manage-styles.yaml @@ -74,8 +74,7 @@ script: style.paragraphFormat.load(); await context.sync(); - console.log(`Properties of the '${styleName}' style:`); - console.log(style); + console.log(`Properties of the '${styleName}' style:`, style); } }); } @@ -181,7 +180,7 @@ script: borders.outsideBorderType = Word.BorderType.dashed; borders.outsideBorderWidth = Word.BorderWidth.pt025; borders.outsideBorderColor = "green"; - console.log("Updated outside borders"); + console.log("Updated outside borders."); } }); } diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 228c00bc3d9af73c6aeb0eb85e67d579fd54cef0..1faf5fa774edaf1e95ead9d366d79d69c9259e73 100644 GIT binary patch delta 16995 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
^WSH!hBzgjM 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 Y9ZOjb66!x5^1t)%KPB>7^S`J61C- @@ -15715,7 +15714,7 @@ // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion. await context.sync(); - console.log('Text added to the beginning of the document body.'); + console.log("Text added to the beginning of the document body."); }); 'Word.Body#search:member(1)': - >- @@ -15800,8 +15799,7 @@ await context.sync(); for (let i = 0; i < fields.items.length; i++) { - console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`); - console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); + console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`, `Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); } } }); @@ -15874,6 +15872,209 @@ await context.sync(); console.log(base64.value); }); +'Word.Body#lists:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + + + // Gets information about the first list in the document. + + await Word.run(async (context) => { + const lists = context.document.body.lists; + lists.load("items"); + + await context.sync(); + + if (lists.items.length === 0) { + console.warn("There are no lists in this document."); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); + + await context.sync(); + + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } + + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } + }); +'Word.Body#onCommentAdded:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onEventHandler(event: Word.CommentEventArgs) { + // Handler for all events except onCommentChanged. + await Word.run(async (context) => { + console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); + }); + } +'Word.Body#onCommentChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onChangedHandler(event: Word.CommentEventArgs) { + await Word.run(async (context) => { + console.log( + `${event.type} event detected. ${event.changeType} change made. Event source: ${event.source}. Comment info:`, event.commentDetails + ); + }); + } +'Word.Body#onCommentDeleted:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onEventHandler(event: Word.CommentEventArgs) { + // Handler for all events except onCommentChanged. + await Word.run(async (context) => { + console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); + }); + } +'Word.Body#onCommentDeselected:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onEventHandler(event: Word.CommentEventArgs) { + // Handler for all events except onCommentChanged. + await Word.run(async (context) => { + console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); + }); + } +'Word.Body#onCommentSelected:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onEventHandler(event: Word.CommentEventArgs) { + // Handler for all events except onCommentChanged. + await Word.run(async (context) => { + console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); + }); + } 'Word.Body#paragraphs:member': - >- // Link to full sample: @@ -16043,7 +16244,7 @@ borders.outsideBorderType = Word.BorderType.dashed; borders.outsideBorderWidth = Word.BorderWidth.pt025; borders.outsideBorderColor = "green"; - console.log("Updated outside borders"); + console.log("Updated outside borders."); } }); 'Word.BorderCollection#outsideBorderColor:member': @@ -16076,7 +16277,7 @@ borders.outsideBorderType = Word.BorderType.dashed; borders.outsideBorderWidth = Word.BorderWidth.pt025; borders.outsideBorderColor = "green"; - console.log("Updated outside borders"); + console.log("Updated outside borders."); } }); 'Word.BorderCollection#outsideBorderType:member': @@ -16109,7 +16310,7 @@ borders.outsideBorderType = Word.BorderType.dashed; borders.outsideBorderWidth = Word.BorderWidth.pt025; borders.outsideBorderColor = "green"; - console.log("Updated outside borders"); + console.log("Updated outside borders."); } }); 'Word.BorderCollection#outsideBorderWidth:member': @@ -16142,7 +16343,7 @@ borders.outsideBorderType = Word.BorderType.dashed; borders.outsideBorderWidth = Word.BorderWidth.pt025; borders.outsideBorderColor = "green"; - console.log("Updated outside borders"); + console.log("Updated outside borders."); } }); 'Word.BorderLocation:enum': @@ -16160,10 +16361,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.BorderType:enum': - >- @@ -16181,10 +16379,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table's first cell:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table's first cell:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.BorderWidth:enum': - >- @@ -16216,7 +16411,7 @@ borders.outsideBorderType = Word.BorderType.dashed; borders.outsideBorderWidth = Word.BorderWidth.pt025; borders.outsideBorderColor = "green"; - console.log("Updated outside borders"); + console.log("Updated outside borders."); } }); 'Word.BreakType:enum': @@ -16302,8 +16497,7 @@ await context.sync(); - console.log(`Reviewed text (before):\n${before.value}`); - console.log(`Reviewed text (after):\n${after.value}`); + console.log("Reviewed text (before):", before.value, "Reviewed text (after):", after.value); }); 'Word.CheckboxContentControl:class': - >- @@ -16359,6 +16553,17 @@ ); } }); +'Word.CloseBehavior:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml + + + // Closes the document after saving. + + await Word.run(async (context) => { + context.document.close(Word.CloseBehavior.save); + }); 'Word.Comment#delete:member(1)': - >- // Link to full sample: @@ -16442,8 +16647,7 @@ comment.load(); await context.sync(); - console.log("Comment content changed:"); - console.log(comment); + console.log("Comment content changed:", comment); }); 'Word.Comment#resolved:member': - >- @@ -16469,9 +16673,42 @@ comment.load(); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`); - console.log(comment); + console.log(`Comment Resolved status: ${comment.resolved}`, comment); }); +'Word.CommentChangeType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onChangedHandler(event: Word.CommentEventArgs) { + await Word.run(async (context) => { + console.log( + `${event.type} event detected. ${event.changeType} change made. Event source: ${event.source}. Comment info:`, event.commentDetails + ); + }); + } 'Word.CommentCollection#getFirst:member(1)': - >- // Link to full sample: @@ -16497,6 +16734,97 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Replies to the first active comment in the selected content. + + await Word.run(async (context) => { + const text = $("#reply-text") + .val() + .toString(); + const comments = context.document.getSelection().getComments(); + comments.load("items"); + await context.sync(); + + const firstActiveComment = comments.items.find((item) => item.resolved !== true); + if (firstActiveComment) { + const reply = firstActiveComment.reply(text); + console.log("Reply added"); + } else { + console.log("No active comment was found in the selection so couldn't reply."); + } + }); +'Word.CommentDetail:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onEventHandler(event: Word.CommentEventArgs) { + // Handler for all events except onCommentChanged. + await Word.run(async (context) => { + console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); + }); + } +'Word.CommentEventArgs:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onChangedHandler(event: Word.CommentEventArgs) { + await Word.run(async (context) => { + console.log( + `${event.type} event detected. ${event.changeType} change made. Event source: ${event.source}. Comment info:`, event.commentDetails + ); + }); + } +'Word.CommentReply:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + // Replies to the first active comment in the selected content. await Word.run(async (context) => { @@ -16554,8 +16882,7 @@ if (contentControls.items.length === 0) { console.log("There are no content controls in this document."); } else { - console.log("Control to be deleted:"); - console.log(contentControls.items[0]); + console.log("Control to be deleted:", contentControls.items[0]); contentControls.items[0].delete(false); await context.sync(); } @@ -16600,6 +16927,50 @@ await context.sync(); }); +'Word.ContentControl#checkboxContentControl:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + // Toggles the isChecked property of the first checkbox content control + found in the selection. + + await Word.run(async (context) => { + const selectedRange = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.checkBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,checkboxContentControl/isChecked"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,checkboxContentControl/isChecked"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.checkBox) { + console.warn("No checkbox content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + const isCheckedBefore = selectedContentControl.checkboxContentControl.isChecked; + console.log("isChecked state before:", `id: ${selectedContentControl.id} ... isChecked: ${isCheckedBefore}`); + selectedContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + selectedContentControl.load("id,checkboxContentControl/isChecked"); + await context.sync(); + + console.log( + "isChecked state after:", + `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` + ); + }); 'Word.ContentControl#onDataChanged:member': - >- // Link to full sample: @@ -16633,8 +17004,7 @@ async function contentControlDataChanged(event: Word.ContentControlDataChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`, event.ids); }); } 'Word.ContentControl#onDeleted:member': @@ -16670,8 +17040,7 @@ async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } 'Word.ContentControl#onEntered:member': @@ -16778,8 +17147,7 @@ async function contentControlSelectionChanged(event: Word.ContentControlSelectionChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } 'Word.ContentControl#tag:member': @@ -16810,20 +17178,20 @@ await context.sync(); }); -'Word.ContentControlAddedEventArgs#eventType:member': +'Word.ContentControlAddedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml - async function contentControlAdded(event: Word.ContentControlAddedEventArgs) - { - await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were added:`); - console.log(event.ids); - }); - } -'Word.ContentControlAddedEventArgs#ids:member': + // Registers the onAdded event handler on the document. + + await Word.run(async (context) => { + eventContext = context.document.onContentControlAdded.add(contentControlAdded); + await context.sync(); + + console.log("Added event handler for when content controls are added."); + }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -16832,8 +17200,7 @@ async function contentControlAdded(event: Word.ContentControlAddedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were added:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls that were added:`, event.ids); }); } 'Word.ContentControlAppearance:enum': @@ -16894,17 +17261,84 @@ await context.sync(); }); +'Word.ContentControlCollection#getFirstOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + // Toggles the isChecked property of the first checkbox content control + found in the selection. + + await Word.run(async (context) => { + const selectedRange = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.checkBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,checkboxContentControl/isChecked"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,checkboxContentControl/isChecked"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.checkBox) { + console.warn("No checkbox content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + const isCheckedBefore = selectedContentControl.checkboxContentControl.isChecked; + console.log("isChecked state before:", `id: ${selectedContentControl.id} ... isChecked: ${isCheckedBefore}`); + selectedContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + selectedContentControl.load("id,checkboxContentControl/isChecked"); + await context.sync(); + + console.log( + "isChecked state after:", + `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` + ); + }); 'Word.ContentControlDataChangedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml + await Word.run(async (context) => { + const contentControls = context.document.contentControls; + contentControls.load("items"); + await context.sync(); + + // Register the onDataChanged event handler on each content control. + if (contentControls.items.length === 0) { + console.log("There aren't any content controls in this document so can't register event handlers."); + } else { + for (let i = 0; i < contentControls.items.length; i++) { + eventContexts[i] = contentControls.items[i].onDataChanged.add(contentControlDataChanged); + contentControls.items[i].track(); + } + + await context.sync(); + + console.log("Added event handlers for when data is changed in content controls."); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml + + async function contentControlDataChanged(event: Word.ContentControlDataChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`, event.ids); }); } 'Word.ContentControlDeletedEventArgs:interface': @@ -16913,11 +17347,34 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + await Word.run(async (context) => { + const contentControls = context.document.contentControls; + contentControls.load("items"); + await context.sync(); + + // Register the onDeleted event handler on each content control. + if (contentControls.items.length === 0) { + console.log("There aren't any content controls in this document so can't register event handlers."); + } else { + for (let i = 0; i < contentControls.items.length; i++) { + eventContexts[i] = contentControls.items[i].onDeleted.add(contentControlDeleted); + contentControls.items[i].track(); + } + + await context.sync(); + + console.log("Added event handlers for when content controls are deleted."); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + + async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } 'Word.ContentControlEnteredEventArgs:interface': @@ -16926,6 +17383,30 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml + await Word.run(async (context) => { + const contentControls = context.document.contentControls; + contentControls.load("items"); + await context.sync(); + + // Register the onEntered event handler on each content control. + if (contentControls.items.length === 0) { + console.log("There aren't any content controls in this document so can't register event handlers."); + } else { + for (let i = 0; i < contentControls.items.length; i++) { + eventContexts[i] = contentControls.items[i].onEntered.add(contentControlEntered); + contentControls.items[i].track(); + } + + await context.sync(); + + console.log("Added event handlers for when the cursor is placed in content controls."); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml + + async function contentControlEntered(event: Word.ContentControlEnteredEventArgs) { await Word.run(async (context) => { @@ -16938,23 +17419,113 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml + await Word.run(async (context) => { + const contentControls = context.document.contentControls; + contentControls.load("items"); + await context.sync(); + + // Register the onExited event handler on each content control. + if (contentControls.items.length === 0) { + console.log("There aren't any content controls in this document so can't register event handlers."); + } else { + for (let i = 0; i < contentControls.items.length; i++) { + eventContexts[i] = contentControls.items[i].onExited.add(contentControlExited); + contentControls.items[i].track(); + } + + await context.sync(); + + console.log("Added event handlers for when the cursor is removed from within content controls."); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml + + async function contentControlExited(event: Word.ContentControlExitedEventArgs) { await Word.run(async (context) => { console.log(`${event.eventType} event detected. ID of content control that was exited: ${event.ids[0]}`); }); } +'Word.ContentControlOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + // Toggles the isChecked property of the first checkbox content control + found in the selection. + + await Word.run(async (context) => { + const selectedRange = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.checkBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,checkboxContentControl/isChecked"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,checkboxContentControl/isChecked"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.checkBox) { + console.warn("No checkbox content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + const isCheckedBefore = selectedContentControl.checkboxContentControl.isChecked; + console.log("isChecked state before:", `id: ${selectedContentControl.id} ... isChecked: ${isCheckedBefore}`); + selectedContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + selectedContentControl.load("id,checkboxContentControl/isChecked"); + await context.sync(); + + console.log( + "isChecked state after:", + `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` + ); + }); 'Word.ContentControlSelectionChangedEventArgs:interface': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + await Word.run(async (context) => { + const contentControls = context.document.contentControls; + contentControls.load("items"); + await context.sync(); + + if (contentControls.items.length === 0) { + console.log("There aren't any content controls in this document so can't register event handlers."); + } else { + for (let i = 0; i < contentControls.items.length; i++) { + eventContexts[i] = contentControls.items[i].onSelectionChanged.add(contentControlSelectionChanged); + contentControls.items[i].track(); + } + + await context.sync(); + + console.log("Added event handlers for when selections are changed in content controls."); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + + async function contentControlSelectionChanged(event: Word.ContentControlSelectionChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } 'Word.ContentControlType:enum': @@ -17103,6 +17674,51 @@ console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); } }); +'Word.CritiqueColorScheme:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + // Adds annotations to the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const critique1 = { + colorScheme: Word.CritiqueColorScheme.red, + start: 1, + length: 3 + }; + const critique2 = { + colorScheme: Word.CritiqueColorScheme.green, + start: 6, + length: 1 + }; + const critique3 = { + colorScheme: Word.CritiqueColorScheme.blue, + start: 10, + length: 3 + }; + const critique4 = { + colorScheme: Word.CritiqueColorScheme.lavender, + start: 14, + length: 3 + }; + const critique5 = { + colorScheme: Word.CritiqueColorScheme.berry, + start: 18, + length: 10 + }; + const annotationSet: Word.AnnotationSet = { + critiques: [critique1, critique2, critique3, critique4, critique5] + }; + + const annotationIds = paragraph.insertAnnotations(annotationSet); + + await context.sync(); + + console.log("Annotations inserted:", annotationIds.value); + }); 'Word.CustomProperty:class': - >- // Link to full sample: @@ -17180,7 +17796,7 @@ await context.sync(); if (customXmlPart.isNullObject) { - console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted`); + console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted.`); // Delete the associated setting too. xmlPartIDSetting.delete(); @@ -17188,11 +17804,10 @@ await context.sync(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); - const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:\n${readableXml}`; - console.error(strangeMessage); + console.error(`This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, readableXml); } } else { - console.warn("Didn't find custom XML part to delete"); + console.warn("Didn't find custom XML part to delete."); } }); - >- @@ -17220,7 +17835,7 @@ await context.sync(); if (customXmlPart.isNullObject) { - console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted`); + console.log(`The XML part with the ID ${xmlPartIDSetting.value} has been deleted.`); // Delete the associated setting too. xmlPartIDSetting.delete(); @@ -17228,11 +17843,10 @@ await context.sync(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); - const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:\n${readableXml}`; - console.error(strangeMessage); + console.error(`This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, readableXml); } } else { - console.warn("Didn't find custom XML part to delete"); + console.warn("Didn't find custom XML part to delete."); } }); 'Word.CustomXmlPart#getXml:member(1)': @@ -17256,8 +17870,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`); - console.log(readableXml); + console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`, readableXml); // Store the XML part's ID in a setting so the ID is available to other functions. const settings = context.document.settings; @@ -17282,8 +17895,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Added custom XML part:"); - console.log(readableXml); + console.log("Added custom XML part:", readableXml); // Store the XML part's ID in a setting so the ID is available to other functions. const settings = context.document.settings; @@ -17322,10 +17934,9 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted attribute:"); - console.log(readableXml); + console.log("Successfully inserted attribute:", readableXml); } else { - console.warn("Didn't find custom XML part to insert attribute into"); + console.warn("Didn't find custom XML part to insert attribute into."); } }); - >- @@ -17353,10 +17964,9 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted attribute:"); - console.log(readableXml); + console.log("Successfully inserted attribute:", readableXml); } else { - console.warn("Didn't find custom XML part to insert attribute into"); + console.warn("Didn't find custom XML part to insert attribute into."); } }); 'Word.CustomXmlPart#insertElement:member(1)': @@ -17390,10 +18000,9 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted element:"); - console.log(readableXml); + console.log("Successfully inserted element:", readableXml); } else { - console.warn("Didn't find custom XML part to insert element into"); + console.warn("Didn't find custom XML part to insert element into."); } }); - >- @@ -17426,10 +18035,9 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Successfully inserted element:"); - console.log(readableXml); + console.log("Successfully inserted element:", readableXml); } else { - console.warn("Didn't find custom XML part to insert element into"); + console.warn("Didn't find custom XML part to insert element into."); } }); 'Word.CustomXmlPart#query:member(1)': @@ -17464,7 +18072,7 @@ console.log(clientResult.value[i]); } } else { - console.warn("Didn't find custom XML part to query"); + console.warn("Didn't find custom XML part to query."); } }); - >- @@ -17498,7 +18106,7 @@ console.log(clientResult.value[i]); } } else { - console.warn("Didn't find custom XML part to query"); + console.warn("Didn't find custom XML part to query."); } }); 'Word.CustomXmlPart#setXml:member(1)': @@ -17524,8 +18132,7 @@ await context.sync(); let readableXml = addLineBreaksToXML(originalXmlBlob.value); - console.log("Original custom XML part:"); - console.log(readableXml); + console.log("Original custom XML part:", readableXml); // The setXml method replaces the entire XML part. customXmlPart.setXml( @@ -17535,10 +18142,9 @@ await context.sync(); readableXml = addLineBreaksToXML(updatedXmlBlob.value); - console.log("Replaced custom XML part:"); - console.log(readableXml); + console.log("Replaced custom XML part:", readableXml); } else { - console.warn("Didn't find custom XML part to replace"); + console.warn("Didn't find custom XML part to replace."); } }); 'Word.CustomXmlPart#id:member': @@ -17559,8 +18165,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Added custom XML part:"); - console.log(readableXml); + console.log("Added custom XML part:", readableXml); // Store the XML part's ID in a setting so the ID is available to other functions. const settings = context.document.settings; @@ -17594,7 +18199,7 @@ const namespaceUri = customXmlPart.namespaceUri; console.log(`Namespace URI: ${JSON.stringify(namespaceUri)}`); } else { - console.warn("Didn't find custom XML part"); + console.warn("Didn't find custom XML part."); } }); 'Word.CustomXmlPartCollection#add:member(1)': @@ -17618,8 +18223,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`); - console.log(readableXml); + console.log(`Added custom XML part with namespace URI ${customXmlPart.namespaceUri}:`, readableXml); // Store the XML part's ID in a setting so the ID is available to other functions. const settings = context.document.settings; @@ -17644,8 +18248,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - console.log("Added custom XML part:"); - console.log(readableXml); + console.log("Added custom XML part:", readableXml); // Store the XML part's ID in a setting so the ID is available to other functions. const settings = context.document.settings; @@ -17685,7 +18288,7 @@ console.log(clientResult.value[i]); } } else { - console.warn("Didn't find custom XML part to query"); + console.warn("Didn't find custom XML part to query."); } }); - >- @@ -17719,7 +18322,7 @@ console.log(clientResult.value[i]); } } else { - console.warn("Didn't find custom XML part to query"); + console.warn("Didn't find custom XML part to query."); } }); 'Word.Document#addStyle:member(1)': @@ -17754,6 +18357,19 @@ console.log(newStyleName + " has been added to the style list."); }); +'Word.Document#close:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml + + + // Closes the document with default behavior + + // for current state of the document. + + await Word.run(async (context) => { + context.document.close(); + }); 'Word.Document#compare:member(1)': - >- // Link to full sample: @@ -17875,8 +18491,7 @@ '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; const styles = context.document.importStylesFromJson(str); await context.sync(); - console.log("Styles imported from JSON:"); - console.log(styles); + console.log("Styles imported from JSON:", styles); }); 'Word.Document#insertFileFromBase64:member(1)': - >- @@ -17901,6 +18516,20 @@ }); await context.sync(); }); +'Word.Document#save:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml + + + // Saves the document with default behavior + + // for current state of the document. + + await Word.run(async (context) => { + context.document.save(); + await context.sync(); + }); 'Word.Document#changeTrackingMode:member': - >- // Link to full sample: @@ -17944,8 +18573,7 @@ async function contentControlAdded(event: Word.ContentControlAddedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were added:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls that were added:`, event.ids); }); } 'Word.Document#onParagraphAdded:member': @@ -17969,8 +18597,7 @@ async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs that were added:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs that were added:`, event.uniqueLocalIds); }); } 'Word.Document#onParagraphChanged:member': @@ -17994,8 +18621,7 @@ async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } 'Word.Document#onParagraphDeleted:member': @@ -18019,8 +18645,7 @@ async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`, event.uniqueLocalIds); }); } 'Word.Document#properties:member': @@ -18050,7 +18675,7 @@ await context.sync(); if (settings.items.length == 0) { - console.log("There are no settings"); + console.log("There are no settings."); } else { console.log("All settings:"); for (let i = 0; i < settings.items.length; i++) { @@ -18121,6 +18746,57 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); +'Word.ErrorCodes:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + if (error.code === Word.ErrorCodes.itemNotFound) { + console.warn("No checkbox content control is currently selected."); + } else { + console.error(error); + } + } + } +'Word.EventSource:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + const body = context.document.body; + body.track(); + await context.sync(); + + eventContexts[0] = body.onCommentAdded.add(onEventHandler); + eventContexts[1] = body.onCommentChanged.add(onChangedHandler); + eventContexts[2] = body.onCommentDeleted.add(onEventHandler); + eventContexts[3] = body.onCommentDeselected.add(onEventHandler); + eventContexts[4] = body.onCommentSelected.add(onEventHandler); + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + + async function onEventHandler(event: Word.CommentEventArgs) { + // Handler for all events except onCommentChanged. + await Word.run(async (context) => { + console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); + }); + } 'Word.EventType:enum': - >- // Link to full sample: @@ -18130,8 +18806,7 @@ async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { - console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`); - console.log(event.ids); + console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } 'Word.Field#delete:member(1)': @@ -18174,9 +18849,7 @@ if (field.isNullObject) { console.log("No field in selection."); } else { - console.log("Before updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("Before updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); field.updateResult(); field.select(); @@ -18185,9 +18858,7 @@ field.load(["code", "result"]); await context.sync(); - console.log("After updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("After updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); } }); 'Word.Field#updateResult:member(1)': @@ -18207,9 +18878,7 @@ if (field.isNullObject) { console.log("No field in selection."); } else { - console.log("Before updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("Before updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); field.updateResult(); field.select(); @@ -18218,9 +18887,7 @@ field.load(["code", "result"]); await context.sync(); - console.log("After updating:"); - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); + console.log("After updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); } }); 'Word.Field#code:member': @@ -18240,11 +18907,7 @@ if (field.isNullObject) { console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); 'Word.Field#kind:member': @@ -18264,11 +18927,7 @@ if (field.isNullObject) { console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); 'Word.Field#locked:member': @@ -18333,11 +18992,7 @@ if (field.isNullObject) { console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); 'Word.Field#type:member': @@ -18357,11 +19012,7 @@ if (field.isNullObject) { console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); 'Word.FieldCollection#getFirstOrNullObject:member(1)': @@ -18381,11 +19032,7 @@ if (field.isNullObject) { console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + JSON.stringify(field.result)); - console.log("Type of first field: " + field.type); - console.log("Is the first field locked? " + field.locked); - console.log("Kind of the first field: " + field.kind); + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); 'Word.FieldCollection#items:member': @@ -18408,11 +19055,30 @@ await context.sync(); for (let i = 0; i < fields.items.length; i++) { - console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`); - console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); + console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`, `Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); } } }); +'Word.FieldKind:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + + + // Gets the first field in the document. + + await Word.run(async (context) => { + const field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result", "locked", "type", "data", "kind"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("This document has no fields."); + } else { + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); + } + }); 'Word.FieldType:enum': - >- // Link to full sample: @@ -18432,10 +19098,26 @@ if (field.isNullObject) { console.log("There are no fields in this document."); } else { - console.log("Code of the field: " + field.code); - console.log("Result of the field: " + JSON.stringify(field.result)); + console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); +'Word.GetTextOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-text.yaml + + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + + const text = paragraph.getText(); + const textIncludingHidden = paragraph.getText({ IncludeHiddenText: true }); + const textIncludingDeleted = paragraph.getText({ IncludeTextMarkedAsDeleted: true }); + + await context.sync(); + + console.log("Text:- " + text.value, "Including hidden text:- " + textIncludingHidden.value, "Including text marked as deleted:- " + textIncludingDeleted.value); + }); 'Word.HeaderFooterType:enum': - >- // Link to full sample: @@ -18463,8 +19145,7 @@ firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - console.log(`Image format: ${firstPicture.imageFormat}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -18520,8 +19201,7 @@ firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - console.log(`Image format: ${firstPicture.imageFormat}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -18585,7 +19265,7 @@ await context.sync(); - console.log("Inserted section without an associated page break"); + console.log("Inserted section without an associated page break."); }); 'Word.List:class': - >- @@ -18742,7 +19422,7 @@ await context.sync(); if (lists.items.length === 0) { - console.warn("There are no lists in this document"); + console.warn("There are no lists in this document."); return; } @@ -18779,7 +19459,7 @@ await context.sync(); if (lists.items.length === 0) { - console.warn("There are no lists in this document"); + console.warn("There are no lists in this document."); return; } @@ -18839,6 +19519,43 @@ await context.sync(); }); +'Word.ListCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + + + // Gets information about the first list in the document. + + await Word.run(async (context) => { + const lists = context.document.body.lists; + lists.load("items"); + + await context.sync(); + + if (lists.items.length === 0) { + console.warn("There are no lists in this document."); + return; + } + + // Get the first list. + const list = lists.getFirst(); + list.load("levelTypes,levelExistences"); + + await context.sync(); + + const levelTypes = list.levelTypes; + console.log("Level types of the first list:"); + for (let i = 0; i < levelTypes.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelTypes[i]}`); + } + + const levelExistences = list.levelExistences; + console.log("Level existences of the first list:"); + for (let i = 0; i < levelExistences.length; i++) { + console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); + } + }); 'Word.ListItem#level:member': - >- // Link to full sample: @@ -18886,7 +19603,7 @@ await context.sync(); if (lists.items.length === 0) { - console.warn("There are no lists in this document"); + console.warn("There are no lists in this document."); return; } @@ -19113,6 +19830,21 @@ console.log(`Body type of note: ${item.body.type}`); }); +'Word.OutlineLevel:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + + + // Imports styles from JSON. + + await Word.run(async (context) => { + const str = + '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; + const styles = context.document.importStylesFromJson(str); + await context.sync(); + console.log("Styles imported from JSON:", styles); + }); 'Word.Paragraph#getRange:member(1)': - >- // Link to full sample: @@ -19575,8 +20307,7 @@ async function paragraphAdded(event: Word.ParagraphAddedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs that were added:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs that were added:`, event.uniqueLocalIds); }); } 'Word.ParagraphChangedEventArgs:interface': @@ -19600,8 +20331,7 @@ async function paragraphChanged(event: Word.ParagraphChangedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } 'Word.ParagraphCollection#getFirst:member(1)': @@ -19696,8 +20426,7 @@ async function paragraphDeleted(event: Word.ParagraphDeletedEventArgs) { await Word.run(async (context) => { - console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`); - console.log(event.uniqueLocalIds); + console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`, event.uniqueLocalIds); }); } 'Word.ParagraphFormat:class': @@ -19807,38 +20536,60 @@ console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.value}`); }); -'Word.Range#footnotes:member': +'Word.Range#getComments:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Gets the footnotes in the selected document range. + // Gets the comments in the selected content. await Word.run(async (context) => { - const footnotes = context.document.getSelection().footnotes; - footnotes.load("length"); + const comments = context.document.getSelection().getComments(); + + // Load objects to log in the console. + comments.load(); await context.sync(); - console.log("Number of footnotes in the selected range: " + footnotes.items.length); + console.log("Comments:", comments); }); -'Word.Range#getComments:member(1)': +'Word.Range#getContentControls:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml - // Gets the comments in the selected content. + // Deletes the first checkbox content control found in the selection. await Word.run(async (context) => { - const comments = context.document.getSelection().getComments(); + const selectedRange = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.checkBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id"); - // Load objects to log in the console. - comments.load(); await context.sync(); - console.log("Comments:"); - console.log(comments); + if (selectedContentControl.isNullObject) { + const parentContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.checkBox) { + console.warn("No checkbox content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log(`About to delete checkbox content control with id: ${selectedContentControl.id}`); + selectedContentControl.delete(false); + await context.sync(); + + console.log("Deleted checkbox content control."); }); 'Word.Range#getReviewedText:member(1)': - >- @@ -19855,8 +20606,7 @@ await context.sync(); - console.log(`Reviewed text (before):\n${before.value}`); - console.log(`Reviewed text (after):\n${after.value}`); + console.log("Reviewed text (before):", before.value, "Reviewed text (after):", after.value); }); 'Word.Range#getTextRanges:member(1)': - >- @@ -19907,8 +20657,7 @@ comment.load(); await context.sync(); - console.log("Comment inserted:"); - console.log(comment); + console.log("Comment inserted:", comment); }); 'Word.Range#insertContentControl:member(1)': - >- @@ -19963,8 +20712,7 @@ if (field.isNullObject) { console.log("There are no fields in this document."); } else { - console.log("Code of the field: " + field.code); - console.log("Result of the field: " + JSON.stringify(field.result)); + console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); 'Word.Range#insertFootnote:member(1)': @@ -19984,6 +20732,65 @@ console.log("Inserted footnote."); }); +'Word.Range#footnotes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + + // Gets the footnotes in the selected document range. + + await Word.run(async (context) => { + const footnotes = context.document.getSelection().footnotes; + footnotes.load("length"); + await context.sync(); + + console.log("Number of footnotes in the selected range: " + footnotes.items.length); + }); +'Word.Range#parentContentControl:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml + + + // Toggles the isChecked property of the first checkbox content control + found in the selection. + + await Word.run(async (context) => { + const selectedRange = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.checkBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,checkboxContentControl/isChecked"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,checkboxContentControl/isChecked"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.checkBox) { + console.warn("No checkbox content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + const isCheckedBefore = selectedContentControl.checkboxContentControl.isChecked; + console.log("isChecked state before:", `id: ${selectedContentControl.id} ... isChecked: ${isCheckedBefore}`); + selectedContentControl.checkboxContentControl.isChecked = !isCheckedBefore; + selectedContentControl.load("id,checkboxContentControl/isChecked"); + await context.sync(); + + console.log( + "isChecked state after:", + `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` + ); + }); 'Word.Range#styleBuiltIn:member': - >- // Link to full sample: @@ -20028,6 +20835,20 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); +'Word.SaveBehavior:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml + + + // If the document hasn't been saved before, prompts + + // user with options for if or how they want to save. + + await Word.run(async (context) => { + context.document.save(Word.SaveBehavior.prompt); + await context.sync(); + }); 'Word.Section#getFooter:member(2)': - >- // Link to full sample: @@ -20070,7 +20891,7 @@ await context.sync(); - console.log("Inserted section break on next page"); + console.log("Inserted section break on next page."); }); 'Word.SectionCollection:class': - >- @@ -20086,7 +20907,7 @@ await context.sync(); - console.log("Inserted section break on next even page"); + console.log("Inserted section break on next even page."); }); 'Word.SelectionMode:enum': - >- @@ -20116,7 +20937,7 @@ .toString(); if (key == "") { - console.error("Key shouldn't be empty"); + console.error("Key shouldn't be empty."); return; } @@ -20129,8 +20950,7 @@ setting.load(); await context.sync(); - console.log("Setting added or edited:"); - console.log(setting); + console.log("Setting added or edited:", setting); }); 'Word.Setting#value:member': - >- @@ -20148,7 +20968,7 @@ .toString(); if (key == "") { - console.error("Key shouldn't be empty"); + console.error("Key shouldn't be empty."); return; } @@ -20161,8 +20981,7 @@ setting.load(); await context.sync(); - console.log("Setting added or edited:"); - console.log(setting); + console.log("Setting added or edited:", setting); }); 'Word.SettingCollection:class': - >- @@ -20176,7 +20995,7 @@ const settings = context.document.settings; settings.deleteAll(); await context.sync(); - console.log("All settings deleted"); + console.log("All settings deleted."); }); 'Word.SettingCollection#add:member(1)': - >- @@ -20194,7 +21013,7 @@ .toString(); if (key == "") { - console.error("Key shouldn't be empty"); + console.error("Key shouldn't be empty."); return; } @@ -20207,8 +21026,7 @@ setting.load(); await context.sync(); - console.log("Setting added or edited:"); - console.log(setting); + console.log("Setting added or edited:", setting); }); 'Word.SettingCollection#items:member': - >- @@ -20224,7 +21042,7 @@ await context.sync(); if (settings.items.length == 0) { - console.log("There are no settings"); + console.log("There are no settings."); } else { console.log("All settings:"); for (let i = 0; i < settings.items.length; i++) { @@ -20446,10 +21264,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.Table#getCell:member(1)': - >- @@ -20497,10 +21312,7 @@ firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); 'Word.Table#horizontalAlignment:member': - >- @@ -20515,10 +21327,7 @@ firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); 'Word.Table#rows:member': - >- @@ -20535,9 +21344,7 @@ firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table's first row:`); - console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); + console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); 'Word.Table#verticalAlignment:member': - >- @@ -20552,10 +21359,7 @@ firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); 'Word.Table:class': - >- @@ -20590,10 +21394,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.TableBorder#type:member': - >- @@ -20610,10 +21411,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.TableBorder#width:member': - >- @@ -20630,10 +21428,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.TableCell:class': - >- @@ -20666,10 +21461,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table's first cell:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table's first cell:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.TableCell#getCellPadding:member(2)': - >- @@ -20706,9 +21498,7 @@ firstCell.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table's first cell:`); - console.log(`- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`); - console.log(`- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); + console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); 'Word.TableCell#verticalAlignment:member': - >- @@ -20725,9 +21515,7 @@ firstCell.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table's first cell:`); - console.log(`- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`); - console.log(`- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); + console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); 'Word.TableCollection:class': - >- @@ -20742,10 +21530,7 @@ firstTable.load(["alignment", "horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table:`); - console.log(`- Alignment of the table within the containing page column: ${firstTable.alignment}`); - console.log(`- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); + console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); 'Word.TableCollection#getFirst:member(1)': - >- @@ -20779,10 +21564,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table's first row:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table's first row:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.TableRow#getCellPadding:member(1)': - >- @@ -20819,9 +21601,7 @@ firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table's first row:`); - console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); + console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); 'Word.TableRowCollection#getFirst:member(1)': - >- @@ -20840,10 +21620,7 @@ border.load(["type", "color", "width"]); await context.sync(); - console.log(`Details about the ${borderLocation} border of the first table's first row:`); - console.log(`- Color: ${border.color}`); - console.log(`- Type: ${border.type}`); - console.log(`- Width: ${border.width} points`); + console.log(`Details about the ${borderLocation} border of the first table's first row:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); 'Word.TableStyle:class': - >- @@ -20896,10 +21673,9 @@ trackedChange.load(); await context.sync(); - console.log("First tracked change:"); - console.log(trackedChange); + console.log("First tracked change:", trackedChange); trackedChange.accept(); - console.log("Accepted the first tracked change"); + console.log("Accepted the first tracked change."); }); 'Word.TrackedChange#getNext:member(1)': - >- @@ -20960,10 +21736,9 @@ trackedChange.load(); await context.sync(); - console.log("First tracked change:"); - console.log(trackedChange); + console.log("First tracked change:, trackedChange); trackedChange.reject(); - console.log("Rejected the first tracked change"); + console.log("Rejected the first tracked change."); }); 'Word.TrackedChangeCollection#acceptAll:member(1)': - >- @@ -20977,7 +21752,7 @@ const body = context.document.body; const trackedChanges = body.getTrackedChanges(); trackedChanges.acceptAll(); - console.log("Accepted all tracked changes"); + console.log("Accepted all tracked changes."); }); 'Word.TrackedChangeCollection#getFirst:member(1)': - >- @@ -21011,7 +21786,7 @@ const body = context.document.body; const trackedChanges = body.getTrackedChanges(); trackedChanges.rejectAll(); - console.log("Rejected all tracked changes"); + console.log("Rejected all tracked changes."); }); 'Word.VerticalAlignment:enum': - >- @@ -21028,7 +21803,5 @@ firstTableRow.load(["horizontalAlignment", "verticalAlignment"]); await context.sync(); - console.log(`Details about the alignment of the first table's first row:`); - console.log(`- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`); - console.log(`- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); + console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); From 862c0c81fa06e7f87b9ee9f43166879ac3386a7a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 14 May 2024 09:44:58 -0700 Subject: [PATCH 052/156] [Word] (annotations) Clean up (#876) --- .../word/50-document/manage-annotations.yaml | 47 ++++++++---------- snippet-extractor-output/snippets.yaml | 48 +++++++++---------- 2 files changed, 44 insertions(+), 51 deletions(-) diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 051a7ab4b..70eb3c5ad 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -2,7 +2,7 @@ order: 15 id: word-document-manage-annotations name: Manage annotations description: Shows how to leverage the Writing Assistance API to manage annotations and use annotation events. -author: OfficeDev +author: cbouzmsft host: WORD api_set: WordApi: '1.7' @@ -49,7 +49,7 @@ script: await context.sync(); for (let result of results) { - console.log(`${args.type}: ${result.para.uniqueLocalId} - ${result.text.value}`); + console.log(`${args.type}: ID ${result.para.uniqueLocalId}:-`, result.text.value); } }); } @@ -106,10 +106,10 @@ script: console.log("Annotations found:"); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; - console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); } @@ -123,11 +123,11 @@ script: await context.sync(); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; if (annotation.state === Word.AnnotationState.created) { - console.log(`Accepting ${annotation.id}`); + console.log(`Accepting ID ${annotation.id}...`); annotation.critiqueAnnotation.accept(); await context.sync(); @@ -146,11 +146,11 @@ script: await context.sync(); - for (var i = annotations.items.length - 1; i >= 0; i--) { + for (let i = annotations.items.length - 1; i >= 0; i--) { const annotation = annotations.items[i]; if (annotation.state === Word.AnnotationState.created) { - console.log(`Rejecting ${annotation.id}`); + console.log(`Rejecting ID ${annotation.id}...`); annotation.critiqueAnnotation.reject(); await context.sync(); @@ -170,7 +170,7 @@ script: await context.sync(); const ids = []; - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; ids.push(annotation.id); @@ -190,7 +190,7 @@ script: await context.sync(); - console.log(`AnnotationClicked: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`AnnotationClicked: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } @@ -201,7 +201,7 @@ script: await context.sync(); - console.log(`AnnotationHovered: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`AnnotationHovered: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } @@ -218,7 +218,7 @@ script: await context.sync(); for (let annotation of annotations) { - console.log(`AnnotationInserted: ${annotation.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`AnnotationInserted: ID ${annotation.id}:`, annotation.critiqueAnnotation.critique); } }); } @@ -226,7 +226,7 @@ script: async function onRemovedHandler(args: Word.AnnotationRemovedEventArgs) { await Word.run(async (context) => { for (let id of args.ids) { - console.log(`AnnotationRemoved: ${id}`); + console.log(`AnnotationRemoved: ID ${id}`); } }); } @@ -287,39 +287,32 @@ template:

Try it out

- Register event handlers.
- Insert annotations.
- Get annotations.
- Accept first.
- Reject last.
- Delete annotations.
- Deregister event handlers.
language: html diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 297634fa0..3fc863e04 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15029,7 +15029,7 @@ await context.sync(); const ids = []; - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; ids.push(annotation.id); @@ -15057,10 +15057,10 @@ console.log("Annotations found:"); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; - console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); 'Word.Annotation#id:member': @@ -15078,11 +15078,11 @@ await context.sync(); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; if (annotation.state === Word.AnnotationState.created) { - console.log(`Accepting ${annotation.id}`); + console.log(`Accepting ID ${annotation.id}...`); annotation.critiqueAnnotation.accept(); await context.sync(); @@ -15105,11 +15105,11 @@ await context.sync(); - for (var i = annotations.items.length - 1; i >= 0; i--) { + for (let i = annotations.items.length - 1; i >= 0; i--) { const annotation = annotations.items[i]; if (annotation.state === Word.AnnotationState.created) { - console.log(`Rejecting ${annotation.id}`); + console.log(`Rejecting ID ${annotation.id}...`); annotation.critiqueAnnotation.reject(); await context.sync(); @@ -15150,7 +15150,7 @@ await context.sync(); - console.log(`AnnotationClicked: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`AnnotationClicked: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } 'Word.AnnotationCollection:class': @@ -15170,10 +15170,10 @@ console.log("Annotations found:"); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; - console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); 'Word.AnnotationHoveredEventArgs:interface': @@ -15209,7 +15209,7 @@ await context.sync(); - console.log(`AnnotationHovered: ${args.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`AnnotationHovered: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } 'Word.AnnotationInsertedEventArgs:interface': @@ -15251,7 +15251,7 @@ await context.sync(); for (let annotation of annotations) { - console.log(`AnnotationInserted: ${annotation.id} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`AnnotationInserted: ID ${annotation.id}:`, annotation.critiqueAnnotation.critique); } }); } @@ -15284,7 +15284,7 @@ async function onRemovedHandler(args: Word.AnnotationRemovedEventArgs) { await Word.run(async (context) => { for (let id of args.ids) { - console.log(`AnnotationRemoved: ${id}`); + console.log(`AnnotationRemoved: ID ${id}`); } }); } @@ -15348,11 +15348,11 @@ await context.sync(); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; if (annotation.state === Word.AnnotationState.created) { - console.log(`Accepting ${annotation.id}`); + console.log(`Accepting ID ${annotation.id}...`); annotation.critiqueAnnotation.accept(); await context.sync(); @@ -17612,11 +17612,11 @@ await context.sync(); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; if (annotation.state === Word.AnnotationState.created) { - console.log(`Accepting ${annotation.id}`); + console.log(`Accepting ID ${annotation.id}...`); annotation.critiqueAnnotation.accept(); await context.sync(); @@ -17639,11 +17639,11 @@ await context.sync(); - for (var i = annotations.items.length - 1; i >= 0; i--) { + for (let i = annotations.items.length - 1; i >= 0; i--) { const annotation = annotations.items[i]; if (annotation.state === Word.AnnotationState.created) { - console.log(`Rejecting ${annotation.id}`); + console.log(`Rejecting ID ${annotation.id}...`); annotation.critiqueAnnotation.reject(); await context.sync(); @@ -17668,10 +17668,10 @@ console.log("Annotations found:"); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; - console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); 'Word.CritiqueColorScheme:enum': @@ -20282,7 +20282,7 @@ await context.sync(); for (let result of results) { - console.log(`${args.type}: ${result.para.uniqueLocalId} - ${result.text.value}`); + console.log(`${args.type}: ID ${result.para.uniqueLocalId}:-`, result.text.value); } }); } @@ -20351,10 +20351,10 @@ console.log("Annotations found:"); - for (var i = 0; i < annotations.items.length; i++) { + for (let i = 0; i < annotations.items.length; i++) { const annotation = annotations.items[i]; - console.log(`${annotation.id} - ${annotation.state} - ${JSON.stringify(annotation.critiqueAnnotation.critique)}`); + console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); 'Word.ParagraphCollection#getLast:member(1)': From 88459f5f83c7e55127844be08579ecbde905db33 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 17 May 2024 08:54:58 -0700 Subject: [PATCH 053/156] [Word] Map existing snippets (#879) --- snippet-extractor-metadata/word.xlsx | Bin 24824 -> 24848 bytes snippet-extractor-output/snippets.yaml | 67 +++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 1faf5fa774edaf1e95ead9d366d79d69c9259e73..c043b78926acd892912b8961380824476e341408 100644 GIT binary patch delta 16912 zcmX6@V|-st(~fO4Nn^9IZQE#U+euGs{A1gV?W9R#Hn!~sjq&Dw-Y@6F&Tq6cXJ@Y2 zee44V^@G=`!$O~0S=l!v>A(^ITaH=GXg~6rKER)Hf(VhIQq-SBnx!|?tMy;B+qa?U z0}@!^RpvkZEmddTy(>B-28IM*Hy$=}u5NzPBifE@kegwX`|XfLYgJ5$H^#2_ zGIgC(Ie3mb7zlPddem4|3dlu^1%pVn=o4;2<<}Cmp5Y3;`q=+Cx~OnL>Sp|asxh;f zTlAnC|4Nc8L3-B%E1{VoIqpu0?aL_a5ni!C>*e=oiUY&y1u>UVsah<{=~BW3w#t(z zI2W%EyXQ%IJZ1Wqg<@I-@S~SUQL0M*kkNdH9|s_RUkVi&(^U6plEH0K&m2eMizJPw z&^-RGcl)NfB&2Q4szFj|6syQu;QgftEY)Rr%f7rNx496E9v(s-#Kx0yTipPr>FQoN zkXqu~hB-3!7}Xrw6Fy5s(BE?v56@xAhmE|`yD%2?aIgzQvtIuVK!aFWvF&E;BPSBj zsEGPIXUy{8$MmZw2P)Fix8Q80@yXpP9KL`8>Gcocq#=pLSiI_}ZceWa#~+p(;pL1I zzB3p^k0MPoM|PCUvuVy-!{0`}EG`q(KhXS^x+De}sxMX4Gu8)3h{BV}Yyn+N0yI$j z*+o3roOcWjO849*z{R-81ERvsLM;G8YR4r!WRo3sLtoD2qG|~@PT%Eefk&2Vq$Qd& z;=PdJ0qRcm;OfpSD^KTsXhn7$e!T>GZOM?i)Fp6PGyE=+se5HtHGLuwDl*f#Dm!c1F>1Y4i zQE8mPR&s?c$Mq)(xLJtdP}YzV`GsSKT$Qskzt08MNP-{*fk1oqo)t+42ByK0A%+$?l%uj)MW=fH8b&AA zXI${8C~D6a5f-I0@5oumLY=w4v`sO$rq8x5%Nd~^DZ5-0tV;H@Z>�sfqn87y`ey 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 z zA+O!ln%V+bkzScpblVFG8CA^NMjN04UH^TJx;Lb@6F}O#R?r!F#SL4^R}m$U?tWsS zp=*+`OOzjlEucvgkjQUeQj%Hi>iUfW5vs4O4DY-2yMIC8r&736*!I0(Qs^e60&bjh zb8(a6@dr?!_>!F)!W~mZ7}I%;HZbldd)tljswF9?d-HV5NLo+-@iJ=?9u_wW-cLxo z2K}@meQm5?tgV6X%gWS{J*5+{dy89Pwz;|JNp~nu3yabL_fXH_k#&SIZ~&g0Yr1Mm zo%|!<$Dw+Kuc%@_A^EQDSU#rb8jrX{*%}zKBm=;0_9Njz8z~V*QilTy2mVY*lpu!s z6iw`4NXtsl%Ote$6z=%4Q$;>^27;i2uP6o{s-KWv*v^_x_sj16AuCpuntGBTdEV@c zgxr1?fNP}WNX%imqTi1e;Jfm6;U3z0Zj5+ztcpCsU?CBBjpkaUnCc&;uK??0hek$B z9S$h}>FaaG5=RjyCPx!+#v@3?9(tQ&P@T;wxLCK}LBU{w2s0K>p*DirJ|!17q-Gk# zq4kYvq$Otllx!t`Q~IHWj1xozC|`i@qCzFUrJ}(1+hNK{LWxBPYErQHcicSj7gj|G zf{MGS0@~Ab?l94WP|0G_)4%0vr@|f10rZ5er*I4_I;FHt#O_Sd<8F<{LZ!)vtguk7;mfmMd^FNv0yaKzgIQiF(< z!cU%O2U0hU=(t|=h_CcY%|mioQ7y~lp+rz2ow7swo{9i;ET_w(GTPK_BUOn-D|1sJP(Frt`I-hRX2{~Ec%$XBq?pskZ#3e zC&JH@OP;vpr}OJH5djUx!}u_=o%y-6U7o%-4T zJVEf(|D3tRP4quK;<9M~k!2CpVYd5{0xQqtAI{th_lKf#XC?iFA*0_O^$=N=)`%mx zwxNznd$_WEBC*jeMmBNpVAA8~Z^@$Dh#K zy7jlMvLGkMD1nN`&<&-Z>9%Qwiiy#4QzvFZ!fU3ChP&J%<1yowtXeuZP)?tcLaRtXgF?}3mTK+{i)RyqC`&UqU zV}7?XCErCt`zrROE0TupU7FQW3v_=`am05QvnyVUa=h1b>17kx!9j>T#S{1AG>s-C zT2SzUN@rFAVkIUSWkK{D*p08@783TY zjfq^qesqimmKRw-voQmy!_XH^Z*+SG(^3JG{>3d1CtW!RM8+-=Mgr2&$d1M^vX|AK z1!xKN<9>0-QQ;JF`6b_K0Vn1Rf`K=DY6a)eo3pv@02^QB`kZqF~le3%&@Z(rB_0FDEN#R2(Lpg&vi@6g@1M(9NHek~pvb z?He2B=MOGplqRJ%h7>+1C+bKs%Y%~Wj!LD6^>;WB3Zb`ElaN9*bFE}WrHn=QgxGR1 zB_$4%h1yQNwLziHjBB(iW}Y*09Q2V(AO{tg!ovX_HNCVrQO31vp5eI=be2j+g$=6; zS2jVzc^|i5^c{T@G)T5!gFLzqP!RX_XG#O*?%yPlI{0|eR2vOwFz93(smcXG#FYVc zJ9is(12{g6M-aQvM8ak|GwSPDLB`*RBT!~SGtG1ldE+qLNfx>fLg=ra-=<2NY;FoG zw3&d=oD`1X4&nAZcGD~W$s4ISQ}gzA*HM(Yk&Y&;Qk3{c>3(JmHqaHs_E|@rDPlH} zC=3fo#Ql9xoz5HxBGw|;hfxNCa0Avjz5MKgg6NNa@qCcOu9erPD6sCr3%%Cu zyy+4<&1{kidpTf4YU!HcP@kDIQ*9XsPCOQ*`^^>5WOpx@Awms&8>M-#P2|OPDCw4y zsA`51F{8fWQ?goAxL+MbaIOR`pl)Pg?EVVHr?s1%w#GA*P{5-qv0T@ze zz#%%bp_7)gHW_nS)1e%Y;j7t6eICM?IL%K8Uejt5 zFeRN*HNlmZeLSBWLz5dFI*G?~mAR0-cf3z$>Jv{T`oz4+<9-$IL9nd!izX;Y+)-*H z3K8y}BgTeDw*p>y7vE=_iB)w!?jO=?Z30XA=0tkeGT#x2UBvS3%8+}r>#b8ntp zEyT4lWipYCL8JISNyyX&)OjFf9u+u6jU(TS5bfeeJC@YSNifk6mjS;Qh_l3ADD1Rw z&<85~bkXTBby@pSr^f~}ML2A~KD(^PTSxwY+g7V5^19pHbI4H=laOafA1RSVxW7SWL9 z&+4HtRE>Ia3kM{cXgd8KT|62`KVtmBRRx+BF$<)>=&w2YFch_NObgp_U)9(YaG`z3 zs_Whq99!rDU(yG_>qF8bOfmgW9l5ac&#=kk4N!qP(pMwj-6}}33>+&cQt-%b!kt}( ziQLw2NZy>7nnquja9||0x8{Sio-Z6YVMu$EBA!}Ab?X+x=MEH&(t|oVAU)7WOa&*m z=oEvMb_U&bvMPi{xOiA%BnX5Xeo8Ny)=!Cwa>);}Y_GM9Wa5>$PwyZb2l9>@djUEp$3T1r>MlRWovUccI+lm69(p<{s zyF}2W#8M#v+W5b)w0OiE$VlS)7sUdg7UgS z<#C8!=Nw`qVuC!{pN#U>&!V(;!uAc+f@RH++$IKeTTSNNKMJuyEl%dKEJ6|2PNxrs zjk|%*D^{fHPB)caD0VA-7Z2k(CHHBRNIeAq<0O({A=;i!OBzf&#(rDz%sXe7P^|SQ zdM$dc!RQ#BsW6#?KKOXp>2@aBW5EY?Vhr*?!0RvT09~J;x6M5na`UeN)0RI_j&u{X zZ-h$#E#a)0l@38ae0)tNwu{A3B4&&YD;>&Wf$LT&IY}5ZxHId^UZ4 zf!STW_3zL4A>+Ba>3*~f%xwK{V9eOBGI?1_YV$y;)qY)K*(gnL8mc;o*u4t`67^;^ zs!ycElcY$J1A6As#n#1krEKy=i`+uKARq!FpeJN&xa8Fbs4D_Am6$`Of}@Fi-H07J zZk?)4$n0ia(*EfCPUq2FD;6Yg3pjN-7zUx^rtajax8S2TtO6o^F;n769kf!Uc)DkG z_x1ocO{OP}_`Hy*o9B49f$dJguy*_y!}yVF*C9ok6y-bXT!C7#qK{h~{TI?d3;sa% zw}v6SY`9q>g1F%3x8f#0#l7TqwWq+`+B@51EyE|nROtS3*yK1|_>&IB1Zqd4a+GUa z+j-9ssDW}ph~9tS2=aDguU_N1khWV=b3cQIbHcc5hFu+ePNGMJU}`g{ZBKG> zV(Lv0$waf-N}*Q}d^TwHOD>hTI~PFT#)x2wCNPR7IgaJPl$_V@*^)cTsFf&ZR0r-( z@YTNsuP4<-J$Nff&|EWYd&#p!Bxq&EVC}&)L||c*uIWPRmNt)sM|_Z~dO@MH;)+!# z(fX^^8}ppVU;a9^AU6|+QU`0$ZsZS8FT+-NmzU0(Sz~EU&@m|S(;##5}!Z=Q@>e)uYib%_m4F$JZ zC_-5W(l)H8WR&)erV0-yNi)&TH@yMvPvf_Hp0`dRxVYPGN$HC zL1fa7hR1w4DS6F`!-6v6Qy4)zu)Wboe8Ov@Z8r564vf9U6o~1latG9{QBCB9r;1u1 zCSRegmcyZ32cbx6HLZ)+CS1|{8#yC7ueCneowmA{`B4v22vu6pe~OU;#L{2U%ix|v zj_U*J`gn}m6NSTLz6KF-GG8gOI=_QjGzquaO!#4i6LmhxWE@;M3R>WhTujYoJK4f> z#@%RH_U58Y%}wJcV9WvIkStu{BBMWNYk3xgg~}Ggl4GKJs+qIK8=v(H9qxp)WJ9sdQU(8+`xF1F zhz6ZXfssuceR4A-W+w9ENySCWzcw%=A9;+;{w$KpjfEJ1^Nd|hz_a9f2wkYE<47Z#Lk+m&8#tA38j~3^N^}83+-;vy79E4?B!%6) zqYfE#?NPVIbp@Q0ZtO7EdU7>bGMoyIVwR7iHk zmG(DKgro`nJyd9-5b3h1e6`y{gVKqsXi2NgM(KI4;xf!y7o{{K2q%%cGZOLd3 zdexy&FIwY-_jFn5=7h_ACpz;Y_u>j@Wn%5T>8Qf&P|0WHuwX^pH})0HJ{e{?FgHa= za~D|7C>pCzp|*{wIJ~0~sid5|L!-Tp(?Z2&6=C+!^XNrPCBNkPSxd@z=tD}~C_fx2 z0W^W!iM433jiJ$6#mP{x$m#0Yiz>)g}hIaWkzTmUE=(&eY=epeE8EbsYK5bY~|vk*cQCRnFg zpHYuc33)132<_2OM!seVgsl6~8NM(Go(dLR%i#RRV?&Hy(+|5IT+H1rMiDoqT@5BE zHv~x%YGvau_5V^P1m~4*ScKiP)ADHE zX_c3$e?QyUaVLtI8S}E$m7W#Af$H`l4pr=#FIuxxhr&q>i6Dj|c z_Qb0S3Hc8Qo;Rw&jlKhJcBu5q3Wd9l4Nzry=lAC`6LQ_un3Y!B6P{PYk|jLSl+FsE ztGs!oDNvjnDyL{{Z)EkruqGVl!?{}tm-Gg0RIeh%&$_z?RjnpEg9b8el{XoA8@mhS zb;z|+PvzbhoZedar1?r5T&**r3F;X)Tx8V@$7J1TKGS&EkPi2$lI~1bX zzZ{j{pV6CWUmo!8v~=y~qp2(RcqF3olQ5Ufe-L!2%lLH9`hKCs6{+%4$B7W;TAwc;vtstF<{yOH>&32Rf z?cf+H zwK6DM_8O@tUH-g(1>R+nH`#gOROBeNj9z&?9o%*OpFB;lCLBo{wxA&^s z^n-I9{QO^6(x4zj zvb)TcI6Uyzh8>w|5IkiTWw4UL@8k5`=!+h)hrazyE(1ye1l~{|3L;&=5UpaT>~YjiTy~ zfO|WSy^zfBUZ{ZZuC+H(?3bX0a#l#q-A3I8H|NbL;e(y%!H3TwyAhFJ4e}z+GAfpt%PC#<{Iqir0V9?`@Tvm1)q!@{G{CcRY^g%J_u zaJzPSqP}L=xU#_U+ z*W_O>Qfc{7qE~g2A(rsZd#6t9JZPZ>&%0*?)N$(vgg?1sscXgQPgtCkm5)-kS}=KC z3@F7tCg-bt*TEgtGhWyDFsBV9?zyEC7Y&vaE!OaUVv1Kn#Dqg1UM^%r1Os!4_Z21p z)*W}6k$?-?k6_uX6SrP(mnBS65`t@3Tz}-`!OjD`ek}ZkaZ{x%icwjYdoLeR#ZmS|{FJJZ4(k86AIG z-5oiVt;}XKzCQ-vG&)l;H`)qhR%TcO?>;UISab~&s~58QR)<^Ic056+ECZyNap z9I+29mj2<{CF-PJpZ28fpDG>2w|P|!rBUs}eK zzuBqV4=K0QbheZd*fbc2RUBiHd!Yq@MJ>sWVFe|2$1-$`AXHQQ(UQZG*D5mCV>oG6 zDho`XM+5Zctr#a`$%-3@egkR13dV%WcRY~?}8nUI{h=_Rtej=v}=RX zx?R3!H-QsI2U}AEf7|cve77hvQZ-sU3+P(*nA~+R9TQjmwMIP)$4HwB*H*(!80A_p zqlV{l)VN=3#HnnoB{3Xn)ZNO9(ic)WH1N&`?`bTsICi-?w8x$UO}u^r5r%Hvn&+3i z4u(b-gGpLj*a}_E&wsy+cYB-rs6~+LzcyRp8$5jVx-<3^Y;6RyXLpq;AzP5H*WkEu zDYI(vCu?vpFsiVzSQXcZz_uLNW72NGeKQT5;Tc2t#Y@xmd(NNEv-h4R0_(ZJJTKZ( zicqhia`WqJJdb}nENQMY;ClQ<$$e}K`ArA2XS@!5yQ1|(PUjD2MoZm4UX^y{0uP^T zIq=y9TWnn@ibCGDtyAJO^EN!^pW{47y0pa$HX=tQMri+3Q}N+MYk`7}(kYTJ6R7yJ zs?wz!9lSgFobYYqH1o>552Xq$ILUYO$Ukn{s7RX(r!k`@>wc|00AoVnPQ0bc zE>67JSwmo{qfROoC&2YPLbbwxop+0TIm(IPy3CRlBp~@Y29aa~5QV z-b9>VOI0^X1!${uu4ScY+kMct@kIa}{e#WeO(?6&5hUiyM9;7^G|j*L*nWLsQ7Mx= zF($lEId)tXheyu*r?9imFiK5%RyY$@wc1ovKf^$OHlW0R2*^U&$)3?nFrUlIchzun z9E%MP-+z-_NoQ=(lCfls$ozU7d*5-AHt#rsyiL3fec+hb?Aw&AJ~%>+&$jq;iKc>A%^=3e}^9CR)bUi#iNqDDdm}rdHxfj^RpP zkl@W$GEfsAGk}|s{Q?CUFD4v7g+`U1_ctv{Yroeh z!b~=a^E>x_;vb9+N}2@7>j*h?1(9yQ{=theNNS;eEb{=k^?+CEefXC^i@H)y^FCxZ zY|28dV1UX4LX%+E!dGelJ*G=;d}D}cq$lpq2e@OH5`38 z>j#&;tlc^)yXc&e9z6%MY$|v2vn){cCid1&#HrrR$3i)doeNRpd*Mmpq z!>EVYMwB5VO218}Gb!8b4&UREf_NaWq!kA-_IOgKJE&%YvZT2Z9VCqEjhLT2)p&w- zNCD(~umzYg0rEb=Kg7e5RU8+}+=8v%>=#n&&QSUD$`a&sc_*0Tv8K2Jd&`>Ky1G0acS`3zxB$3;oQ^jG=GP{9<%;jspo2vIAij?X{C)=MoiWtQtai0@2p?6-U%6-LU4r91= z^4?GHC()dXmpVPCp_rxfXo}Q6ly=tyZ?kLQUqWf>X7ptlJggKL1uw;kj8vzZhE%U zNKt-b)${$7N$Fn;si~CnnFe!49nzppH&{;Ii$oZ497E!C?6GF#|5ikQV+A-bQpH@p z!-P=d7UB`&gDaGZezlTalXc^TR7IT*kkb3kNl_gtwy8)5HU#kugF8Vdpbd5Ao|JRG z==q{cX7tzX3m&!@?2@LSbM9Ke<6cFgt@ojGgyED1$xRFrp2HZVCj`c#A@))F2~_u0 zsixUW(h1Tmo!K80Bd~%bLSeuUjfG_3$lbpLycCTs=&|JUem?TrBH&l-;4k0Bx4r=y ze}G{n{`2;(A-{=RuYPof@K0!|2MUY9=$}sxx%VL|);~{}ka3a`5d1aSZoSG}NcN$= za@ZeFYm9s~Cn@XW*nf+jjIpyDvZ2GB60yywMl%unm=PZAU(N~@Bo~1PD$|=}jCZB& zz57&s=eXHy77JGLy|+FFDe9s|j0lV=a9th= zg&$KJH#j%qG@+x>?QcPB5ZUVY2Xtw34z}v0Jv)vW=(y%oa%D?gc1la~hO%mh3!NVi z71wEaHNj3#hhF@Hi_6Q>imd8cHo6cupl!bWXFx*yZ?6q)CwKz7r-G0=p-iSL#j5F% zjyml$S3qPW5HJ{ZA>bV`n#SWm+qBrv#9jAUy3@NJ=h|E`LcT>n7E09{`{HmzN%k51B-&M>wFR*?Qk(@BD1j(IG+06poe!4%Mf!r zZu7*a$!W#`%bR?P|3=a2XxIPJXuq)P+#G8BN3Uviuzdv8;t$*A%19bE&2zf;YdPkP zmB#c*$&vZ$(IXiXIbDjOB1^xax-_y34KqFMgr<@?06p-e5QEqnJ;0B6#+CL@sMhLj z>F7q3UUj0B~3apLvdU`|9K4KKeTH0y_f#4P)F;-3yZ~x*4ZG)L%`ACt;93zPE z|HVVz0;b^V5b?Fcxtb_&Z2epqeEGlp;Aj%*agtAMdZ^aD<|iq6a(;iujO`HaN_j=_ zE1)e=#95#~MUAD?G{x^Jr-je3*QE=X1T9+%XuU$@T!0UoA^jkU9fk`I)K+Eg`@xg@ zHI7!pO9-XP)Ej0ky}G9CHonf}dD&@XZh(%^9f%%cbZ1pjH7?DGalfS>0%1`kRU30h zM{0+NF)+Ekso0z=Qvi3c^$Mp`XCFS%tQ8Y2Y!nrikz%Kw_+Tk4N`0(-6smc&&|(>e zBL-g%92)R@2fa`qh;|h976UiQ%r%_%L=(zIQIeerLKFQdBybCG$D~GZqT=61hekT~ zq%WIUiqD!I(B%4WjbC3aafo_5!xtCs>$Rh2FLqGcIm=vDhwiTIt&bO;e&Mh6z01}_ zKg<1Csrk1u-7jFgc79a0Q|Ne08r$~q-*Gt}+7P8KUj-c;dd^iBN};Yzl?ohC_|1$F zxGDGgrQkvlel-QDT68>1*LXW(uxVxECv`&6nd!>|)=~^bxLwCXh7bQk(b2YI;>MRB zDs!wNyk>5lEXt1G4|{XF}7pHU72&%62uzujxO*C5*WGFf}Pt%$lK}t%&o`l`p~n+_#>B z`I}JZLRcbEg7*OW2(7FdOirW2TA24GYqG`7CXN3(xSGEd;Y7&ILdmTS{Ca}(G2riT z%6|^DaUB5P`}6DiFXEPo7d+}wsM^#gK z@fQJsdERcnEzg~b{_|l++#(w;&qum`DqrZ?OCR^!- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + + // Updates border properties (e.g., type, width, color) of the specified + style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders."); + } + }); 'Word.BorderCollection:class': - >- // Link to full sample: @@ -18732,6 +18765,19 @@ currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); await context.sync(); }); +'Word.DocumentProperties:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml + + + await Word.run(async (context) => { + const builtInProperties = context.document.properties; + builtInProperties.load("*"); // Let's get all! + + await context.sync(); + console.log(JSON.stringify(builtInProperties, null, 4)); + }); 'Word.DocumentPropertyType:enum': - >- // Link to full sample: @@ -20804,6 +20850,27 @@ await context.sync(); }); +'Word.RangeCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + + + // Does a basic text search and highlights matches in the document. + + await Word.run(async (context) => { + const results = context.document.body.search("Online"); + results.load("length"); + + await context.sync(); + + // Let's traverse the search results and highlight matches. + for (let i = 0; i < results.items.length; i++) { + results.items[i].font.highlightColor = "yellow"; + } + + await context.sync(); + }); 'Word.RangeLocation:enum': - >- // Link to full sample: From 5f7e3bcaddb675e42866ea85d7ae7b069f9564c2 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 17 May 2024 10:42:47 -0700 Subject: [PATCH 054/156] [Word] (custom XML part) Expand to include CustomXmlPartScopedCollection (#880) * [Word] (custom XML part) Expand to include CustomXmlPartScopedCollection * Fix for online * Update samples/word/50-document/manage-custom-xml-part-ns.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Rerun yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../manage-custom-xml-part-ns.yaml | 45 ++++++++++++---- snippet-extractor-metadata/word.xlsx | Bin 24848 -> 24932 bytes snippet-extractor-output/snippets.yaml | 49 +++++++++++++++++- 3 files changed, 82 insertions(+), 12 deletions(-) diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 92d323f5f..c786c0ad5 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -10,6 +10,7 @@ script: $("#add-custom-xml-part").on("click", () => tryCatch(addCustomXmlPart)); $("#query").on("click", () => tryCatch(query)); $("#get-namespace").on("click", () => tryCatch(getNamespace)); + $("#get-by-namespace").on("click", () => tryCatch(getByNamespaceUri)); $("#replace-custom-xml-part").on("click", () => tryCatch(replace)); $("#insert-attribute").on("click", () => tryCatch(insertAttribute)); $("#insert-element").on("click", () => tryCatch(insertElement)); @@ -40,7 +41,7 @@ script: async function query() { // Original XML: JuanHongSally - + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { const settings = context.document.settings; @@ -69,7 +70,7 @@ script: async function getNamespace() { // Original XML: JuanHongSally - + // Gets the namespace URI from a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -90,9 +91,25 @@ script: }); } + async function getByNamespaceUri() { + // Original XML: JuanHongSally + + // Gets the custom XML parts with the specified namespace URI. + await Word.run(async (context) => { + const namespaceUri = "http://schemas.contoso.com/review/1.0"; + console.log(`Specified namespace URI: ${namespaceUri}`); + const scopedCustomXmlParts : Word.CustomXmlPartScopedCollection = + context.document.customXmlParts.getByNamespace(namespaceUri); + scopedCustomXmlParts.load("items"); + await context.sync(); + + console.log(`Number of custom XML parts found with this namespace: ${!scopedCustomXmlParts.items ? 0 : scopedCustomXmlParts.items.length}`); + }); + } + async function replace() { // Original XML: JuanHongSally - + // Replaces a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -124,7 +141,7 @@ script: async function insertAttribute() { // Original XML: JuanHongSally - + // Inserts an attribute into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -154,7 +171,7 @@ script: async function insertElement() { // Original XML: JuanHongSally - + // Inserts an element into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -184,7 +201,7 @@ script: async function deleteCustomXmlPart() { // Original XML: JuanHongSally - + // Deletes a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -208,7 +225,10 @@ script: await context.sync(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); - console.error(`This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, readableXml); + console.error( + `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, + readableXml + ); } } else { console.warn("Didn't find custom XML part to delete."); @@ -242,19 +262,22 @@ template:

Try it out

+ + + + Insert attribute + diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index c043b78926acd892912b8961380824476e341408..2175c7818cae4fb6f877d60e5cafebbbcdeaa2cd 100644 GIT binary patch delta 16078 zcmY*=Wl$YK(=P6IaCdiig1fuBL(t%o#e)S1=iu({1eZW?x8QCGF2M6ap6QuR>WAL%hpyK_L{8YPZmWTTf?5EZA`$||ZdshTpYxjELjI{WAg6^W zRhpFJS7cRwccx$=$hLszY*dxPz3sh7hj^KqRl0&2u7n;$w%X0iymcL2GIUH9kf{j> z4XdYQrcS)WK5v+>S=%tFo@A#M+99v$^2DcH{oqJxk?rzRbDDo{Tr@FuT9seROyxZY4RE_(j8aiPK|QSZt)ts*_9BR zKnScYw55bh$nBQ_ZuhyO+|o24h55%s8@IqV?Tei_yzP9})XK-*QB z(IcqqA^rpBzrCDsEOLf`-sds?SAZDt-&51%>k{`Lvv`rxDhk21iq`VR+XDmPbeHk&2X!$K$dj>Kn zwNd-HM3HExjs3XewaVl9n!hlOnZJ0UxAFU5?V;*VUS5EM&ob%`($GMiCd6eX^m8yi zmB?o0WAF#5u#K6ZKH=aZuU_MteTgJLKjPhyCJ*6j7dJGx;mwinzc>3;UpP&RdA4ju zm{oo}029#Vbi2bp9r##LnQyy`R}c`c)mt((;px1+kRHN}VV&*U_#V;0AOYMa9uyuJ z6j%0W=n-ZpsE-0*cQi_1)OC#$E9wIN2?Oq8k=;M^;D>TN!XGM!j%-IK8ytMul;T$W z;QNF>bWCW3u26>3vpie>#M5?un(5h~t|ICF=DmSY%0H~cy5%n0>X{M|Q;N6s?qk-K zR>QRT^YhQ%mmRgE?}pF@VG*nQUbZegm%%^vDKoBgVEJCPnb|T10rl=1)uK?mS_Qq& zxNsR98RbXcIA`uTbqrB3cm@TqodP2q%F|_E?C6L;l`4M5RO9a6B{mH!uD(gj|CHLsXswNo;x5~B=S=(={Zv#SBDn>BI+4ZI@bL-;&mDD{uDDn% zAGKuBWfw;ce&nM8`u^qIHh(8+RpzwDDw7VLPxLN3UA%EaBw(*HaU^9}Ws|kT9y(Z| zRb{Rrf>&!;Raf$w6%>)(K(s0#p2$x9PXhII@aNjq%JjNvroAc(<4S3x`NBC)^g$(F zjvq3+T_7>ypd~`o9-qXg+@GGhRIpnzC|y%+Uy{#E*JJu?-5~*%Gl`u{bf}y@pN$ZE zxEyYVxfnjen*oI78(f^ZL@{Zlii^*fNJ>6f@eD{$e{LIH|1b)y7HR0mT&ooDPx3^p8fN}A+n>usg^~kOJrmpcuHZ8a!v*VO%{KKaAPAe-fMbKE|S@pfP z=IH{!j@Zm%P_RK)fAp%a`;-}vQOOGs(;e469DErFB7_wKC7W>sr>GfAl*PKZh|Z#M zW&OISvQR_LEB#9TJsg5z3HdOfR3cEI$#V?0%uZd0HPS!LS&WvfK|Ndu2;BG@_9db{ z4DIh&=drUyUu?HF7FW4Np9$H|yU`2jeiKO`%6|_fb;Z`dv|?EV9u$s(AMYS3(oTwf zh{8RAsDCMzZ!x&Z6rFxHsiK@1){eVg^IyPd#mD1gr^81iMuP@l6lw%K*7TVF3gG@8 zGCmM#)LUKP%1qqZ*}cm5nOM8`(tqKX{!H;7(0HEF;@S z-C0q>RbG`!PrI+xi8{Kxf)F`==&p(v^9S9x(9LWjKG{F2uv?Y>mslmkS*90N#fHw* zX;e;5L;LZ=xI4n=K~Enrw=ZY8A&Q-(f zm#e<I)r^By1ihME8 zqJKy3MWj1&=s^O>$VizzR<)u3tR91z?8baYl^zMK+Zf>e6Oxgv$5ugbwb-iR@hl4Z zpBwfIakV3VG5D@c)oPrf$6l7i>oBgIEtw-D85^`FKOQAghcO4uw{$EM%?S195kIsj z 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 Tg&2&u5%|D@4#CXyKZgDfYxsmv delta 16011 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index e4e291944..7c41ca2a2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -17876,7 +17876,10 @@ await context.sync(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); - console.error(`This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, readableXml); + console.error( + `This is strange. The XML part with the id ${xmlPartIDSetting.value} wasn't deleted:`, + readableXml + ); } } else { console.warn("Didn't find custom XML part to delete."); @@ -18289,6 +18292,28 @@ await context.sync(); }); +'Word.CustomXmlPartCollection#getByNamespace:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Original XML: JuanHongSally + + + // Gets the custom XML parts with the specified namespace URI. + + await Word.run(async (context) => { + const namespaceUri = "http://schemas.contoso.com/review/1.0"; + console.log(`Specified namespace URI: ${namespaceUri}`); + const scopedCustomXmlParts : Word.CustomXmlPartScopedCollection = + context.document.customXmlParts.getByNamespace(namespaceUri); + scopedCustomXmlParts.load("items"); + await context.sync(); + + console.log(`Number of custom XML parts found with this namespace: ${!scopedCustomXmlParts.items ? 0 : scopedCustomXmlParts.items.length}`); + }); 'Word.CustomXmlPartCollection#getItem:member(1)': - >- // Link to full sample: @@ -18358,6 +18383,28 @@ console.warn("Didn't find custom XML part to query."); } }); +'Word.CustomXmlPartScopedCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + + + // Original XML: JuanHongSally + + + // Gets the custom XML parts with the specified namespace URI. + + await Word.run(async (context) => { + const namespaceUri = "http://schemas.contoso.com/review/1.0"; + console.log(`Specified namespace URI: ${namespaceUri}`); + const scopedCustomXmlParts : Word.CustomXmlPartScopedCollection = + context.document.customXmlParts.getByNamespace(namespaceUri); + scopedCustomXmlParts.load("items"); + await context.sync(); + + console.log(`Number of custom XML parts found with this namespace: ${!scopedCustomXmlParts.items ? 0 : scopedCustomXmlParts.items.length}`); + }); 'Word.Document#addStyle:member(1)': - >- // Link to full sample: From 55d1fb248995e4e96eef324e9a8b4f9b170de10d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 17 May 2024 10:50:37 -0700 Subject: [PATCH 055/156] [Word] Add type to help clarify mappings --- samples/word/25-paragraph/search.yaml | 4 ++-- .../word/30-properties/get-built-in-properties.yaml | 2 +- snippet-extractor-output/snippets.yaml | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 5d851551f..97138feab 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -15,7 +15,7 @@ script: async function basicSearch() { // Does a basic text search and highlights matches in the document. await Word.run(async (context) => { - const results = context.document.body.search("Online"); + const results : Word.RangeCollection = context.document.body.search("Online"); results.load("length"); await context.sync(); @@ -33,7 +33,7 @@ script: // Does a wildcard search and highlights matches in the document. await Word.run(async (context) => { // Construct a wildcard expression and set matchWildcards to true in order to use wildcards. - const results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); + const results : Word.RangeCollection = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); results.load("length"); await context.sync(); diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 6160ca9ac..828092608 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -12,7 +12,7 @@ script: async function getProperties() { await Word.run(async (context) => { - const builtInProperties = context.document.properties; + const builtInProperties : Word.DocumentProperties = context.document.properties; builtInProperties.load("*"); // Let's get all! await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7c41ca2a2..0b048ba6b 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15725,7 +15725,7 @@ // Does a basic text search and highlights matches in the document. await Word.run(async (context) => { - const results = context.document.body.search("Online"); + const results : Word.RangeCollection = context.document.body.search("Online"); results.load("length"); await context.sync(); @@ -15746,7 +15746,7 @@ await Word.run(async (context) => { // Construct a wildcard expression and set matchWildcards to true in order to use wildcards. - const results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); + const results : Word.RangeCollection = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); results.load("length"); await context.sync(); @@ -18735,7 +18735,7 @@ await Word.run(async (context) => { - const builtInProperties = context.document.properties; + const builtInProperties : Word.DocumentProperties = context.document.properties; builtInProperties.load("*"); // Let's get all! await context.sync(); @@ -18819,7 +18819,7 @@ await Word.run(async (context) => { - const builtInProperties = context.document.properties; + const builtInProperties : Word.DocumentProperties = context.document.properties; builtInProperties.load("*"); // Let's get all! await context.sync(); @@ -20906,7 +20906,7 @@ // Does a basic text search and highlights matches in the document. await Word.run(async (context) => { - const results = context.document.body.search("Online"); + const results : Word.RangeCollection = context.document.body.search("Online"); results.load("length"); await context.sync(); From 69b729fedf12c89f65a2e00f77d6cee92dad141f Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 20 May 2024 15:08:05 -0700 Subject: [PATCH 056/156] [Outlook] (requirement set) Prepare snippets for Mailbox 1.14 release (#877) --- playlists-prod/outlook.yaml | 99 ++++++++++-------- playlists/outlook.yaml | 99 ++++++++++-------- .../close-async.yaml | 6 +- .../outlook/25-item-save-and-close/close.yaml | 1 + .../outlook/25-item-save-and-close/save.yaml | 1 + .../get-conversation-index.yaml | 8 +- .../get-eml-format.yaml | 8 +- .../get-in-reply-to.yaml | 8 +- .../get-item-class-async.yaml | 14 +-- .../get-message-properties.yaml | 5 +- .../get-set-sensitivity-level.yaml | 79 ++++++++++++++ ...s-apis.yaml => get-set-isalldayevent.yaml} | 41 +------- snippet-extractor-metadata/outlook.xlsx | Bin 24637 -> 24570 bytes snippet-extractor-output/snippets.yaml | 44 ++++---- view-prod/outlook.json | 15 +-- view/outlook.json | 15 +-- 16 files changed, 259 insertions(+), 184 deletions(-) rename samples/outlook/{99-preview-apis => 25-item-save-and-close}/close-async.yaml (95%) rename samples/outlook/{99-preview-apis => 90-other-item-apis}/get-conversation-index.yaml (94%) rename samples/outlook/{99-preview-apis => 90-other-item-apis}/get-eml-format.yaml (93%) rename samples/outlook/{99-preview-apis => 90-other-item-apis}/get-in-reply-to.yaml (93%) rename samples/outlook/{99-preview-apis => 90-other-item-apis}/get-item-class-async.yaml (85%) create mode 100644 samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml rename samples/outlook/99-preview-apis/{calendar-properties-apis.yaml => get-set-isalldayevent.yaml} (58%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 01a4037da..74310b4df 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -97,6 +97,15 @@ group: Item Save And Close api_set: Mailbox: '1.3' +- id: outlook-close-async + name: Close the current message and discard changes (Message Compose) + fileName: close-async.yaml + description: Closes the current message and discards any unsaved changes when specified. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close-async.yaml + group: Item Save And Close + api_set: + Mailbox: '1.14' - id: outlook-item-save-and-close-save name: Save the item fileName: save.yaml @@ -754,56 +763,34 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml group: Other Item APIs api_set: - Mailbox: '1.13' -- id: outlook-calendar-properties-apis - name: Work with calendar properties APIs (Compose) - fileName: calendar-properties-apis.yaml - description: >- - Gets and sets isAllDayEvent and sensitivity properties of an appointment in - Compose mode. + Mailbox: '1.14' +- id: outlook-other-item-apis-get-set-sensitivity-level + name: Get and set the sensitivity level (Appointment Organizer) + fileName: get-set-sensitivity-level.yaml + description: Gets and sets the sensitivity level of an appointment being composed. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-close-async - name: Close the current message and discard changes (Message Compose) - fileName: close-async.yaml - description: Closes the current message and discards any unsaved changes when specified. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-set-displayed-body-subject - name: Temporarily set the body or subject displayed in a message (Message Read) - fileName: set-displayed-body-subject.yaml - description: >- - Temporarily sets the content displayed in the body or subject of a message - in read mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml + group: Other Item APIs api_set: - Mailbox: preview + Mailbox: '1.14' - id: outlook-get-eml-format name: Get the Base64-encoded EML format of a message (Message Read) fileName: get-eml-format.yaml description: Gets the Base64-encoded EML format of a message in read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-eml-format.yaml + group: Other Item APIs api_set: - Mailbox: preview -- id: outlook-get-item-class-async - name: Get item class (Compose) - fileName: get-item-class-async.yaml - description: Retrieves the item class property of the message being composed. + Mailbox: '1.14' +- id: outlook-get-in-reply-to + name: Get the ID of the message being replied to (Message Compose) + fileName: get-in-reply-to.yaml + description: Retrieves the ID of the message being replied to by the current message. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-in-reply-to.yaml + group: Other Item APIs api_set: - Mailbox: preview + Mailbox: '1.14' - id: outlook-get-conversation-index name: Get the position of a message in a conversation (Message Compose) fileName: get-conversation-index.yaml @@ -811,16 +798,36 @@ Retrieves the Base64-encoded position of the current message in a conversation thread. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-index.yaml + group: Other Item APIs + api_set: + Mailbox: '1.14' +- id: outlook-get-item-class-async + name: Get item class (Message Compose) + fileName: get-item-class-async.yaml + description: Retrieves the item class property of the message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml + group: Other Item APIs + api_set: + Mailbox: '1.14' +- id: outlook-get-set-isalldayevent + name: Get and set the isAllDayEvent property (Appointment Organizer) + fileName: get-set-isalldayevent.yaml + description: Gets and sets the isAllDayEvent property of an appointment being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml group: Preview APIs api_set: Mailbox: preview -- id: outlook-get-in-reply-to - name: Get the ID of the message being replied to (Message Compose) - fileName: get-in-reply-to.yaml - description: Retrieves the ID of the message being replied to by the current message. +- id: outlook-set-displayed-body-subject + name: Temporarily set the body or subject displayed in a message (Message Read) + fileName: set-displayed-body-subject.yaml + description: >- + Temporarily sets the content displayed in the body or subject of a message + in read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml group: Preview APIs api_set: Mailbox: preview \ No newline at end of file diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 5199001bb..a5d0ad58a 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -97,6 +97,15 @@ group: Item Save And Close api_set: Mailbox: '1.3' +- id: outlook-close-async + name: Close the current message and discard changes (Message Compose) + fileName: close-async.yaml + description: Closes the current message and discards any unsaved changes when specified. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/25-item-save-and-close/close-async.yaml + group: Item Save And Close + api_set: + Mailbox: '1.14' - id: outlook-item-save-and-close-save name: Save the item fileName: save.yaml @@ -754,56 +763,34 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-message-properties.yaml group: Other Item APIs api_set: - Mailbox: '1.13' -- id: outlook-calendar-properties-apis - name: Work with calendar properties APIs (Compose) - fileName: calendar-properties-apis.yaml - description: >- - Gets and sets isAllDayEvent and sensitivity properties of an appointment in - Compose mode. + Mailbox: '1.14' +- id: outlook-other-item-apis-get-set-sensitivity-level + name: Get and set the sensitivity level (Appointment Organizer) + fileName: get-set-sensitivity-level.yaml + description: Gets and sets the sensitivity level of an appointment being composed. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-close-async - name: Close the current message and discard changes (Message Compose) - fileName: close-async.yaml - description: Closes the current message and discards any unsaved changes when specified. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-set-displayed-body-subject - name: Temporarily set the body or subject displayed in a message (Message Read) - fileName: set-displayed-body-subject.yaml - description: >- - Temporarily sets the content displayed in the body or subject of a message - in read mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml + group: Other Item APIs api_set: - Mailbox: preview + Mailbox: '1.14' - id: outlook-get-eml-format name: Get the Base64-encoded EML format of a message (Message Read) fileName: get-eml-format.yaml description: Gets the Base64-encoded EML format of a message in read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-eml-format.yaml + group: Other Item APIs api_set: - Mailbox: preview -- id: outlook-get-item-class-async - name: Get item class (Compose) - fileName: get-item-class-async.yaml - description: Retrieves the item class property of the message being composed. + Mailbox: '1.14' +- id: outlook-get-in-reply-to + name: Get the ID of the message being replied to (Message Compose) + fileName: get-in-reply-to.yaml + description: Retrieves the ID of the message being replied to by the current message. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-item-class-async.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-in-reply-to.yaml + group: Other Item APIs api_set: - Mailbox: preview + Mailbox: '1.14' - id: outlook-get-conversation-index name: Get the position of a message in a conversation (Message Compose) fileName: get-conversation-index.yaml @@ -811,16 +798,36 @@ Retrieves the Base64-encoded position of the current message in a conversation thread. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-conversation-index.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-index.yaml + group: Other Item APIs + api_set: + Mailbox: '1.14' +- id: outlook-get-item-class-async + name: Get item class (Message Compose) + fileName: get-item-class-async.yaml + description: Retrieves the item class property of the message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-async.yaml + group: Other Item APIs + api_set: + Mailbox: '1.14' +- id: outlook-get-set-isalldayevent + name: Get and set the isAllDayEvent property (Appointment Organizer) + fileName: get-set-isalldayevent.yaml + description: Gets and sets the isAllDayEvent property of an appointment being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml group: Preview APIs api_set: Mailbox: preview -- id: outlook-get-in-reply-to - name: Get the ID of the message being replied to (Message Compose) - fileName: get-in-reply-to.yaml - description: Retrieves the ID of the message being replied to by the current message. +- id: outlook-set-displayed-body-subject + name: Temporarily set the body or subject displayed in a message (Message Read) + fileName: set-displayed-body-subject.yaml + description: >- + Temporarily sets the content displayed in the body or subject of a message + in read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-in-reply-to.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml group: Preview APIs api_set: Mailbox: preview diff --git a/samples/outlook/99-preview-apis/close-async.yaml b/samples/outlook/25-item-save-and-close/close-async.yaml similarity index 95% rename from samples/outlook/99-preview-apis/close-async.yaml rename to samples/outlook/25-item-save-and-close/close-async.yaml index 78269c37f..ccb79e045 100644 --- a/samples/outlook/99-preview-apis/close-async.yaml +++ b/samples/outlook/25-item-save-and-close/close-async.yaml @@ -4,7 +4,7 @@ name: Close the current message and discard changes (Message Compose) description: Closes the current message and discards any unsaved changes when specified. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.14' script: content: | $("#close-async").on("click", closeAsync); @@ -51,8 +51,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/25-item-save-and-close/close.yaml b/samples/outlook/25-item-save-and-close/close.yaml index 6cbbb7599..05cab2d8c 100644 --- a/samples/outlook/25-item-save-and-close/close.yaml +++ b/samples/outlook/25-item-save-and-close/close.yaml @@ -1,3 +1,4 @@ +order: 1 id: outlook-item-save-and-close-close name: Close the item description: Closes the item (compose mode) diff --git a/samples/outlook/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml index db0b7fa35..1bf3625dd 100644 --- a/samples/outlook/25-item-save-and-close/save.yaml +++ b/samples/outlook/25-item-save-and-close/save.yaml @@ -1,3 +1,4 @@ +order: 3 id: outlook-item-save-and-close-save name: Save the item description: Saves the item (compose mode) diff --git a/samples/outlook/99-preview-apis/get-conversation-index.yaml b/samples/outlook/90-other-item-apis/get-conversation-index.yaml similarity index 94% rename from samples/outlook/99-preview-apis/get-conversation-index.yaml rename to samples/outlook/90-other-item-apis/get-conversation-index.yaml index a57a12ba1..dc6f29e24 100644 --- a/samples/outlook/99-preview-apis/get-conversation-index.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-index.yaml @@ -1,10 +1,10 @@ -order: 6 +order: 27 id: outlook-get-conversation-index name: Get the position of a message in a conversation (Message Compose) description: Retrieves the Base64-encoded position of the current message in a conversation thread. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.14' script: content: | $("#get-conversation-index").click(getConversationIndex); @@ -55,8 +55,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/99-preview-apis/get-eml-format.yaml b/samples/outlook/90-other-item-apis/get-eml-format.yaml similarity index 93% rename from samples/outlook/99-preview-apis/get-eml-format.yaml rename to samples/outlook/90-other-item-apis/get-eml-format.yaml index a89221a6a..a29564664 100644 --- a/samples/outlook/99-preview-apis/get-eml-format.yaml +++ b/samples/outlook/90-other-item-apis/get-eml-format.yaml @@ -1,10 +1,10 @@ -order: 4 +order: 25 id: outlook-get-eml-format name: Get the Base64-encoded EML format of a message (Message Read) description: Gets the Base64-encoded EML format of a message in read mode. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.14' script: content: | $("#get-eml-format").on("click", getEmlFormat); @@ -48,8 +48,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/99-preview-apis/get-in-reply-to.yaml b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml similarity index 93% rename from samples/outlook/99-preview-apis/get-in-reply-to.yaml rename to samples/outlook/90-other-item-apis/get-in-reply-to.yaml index 42288212f..15103a28a 100644 --- a/samples/outlook/99-preview-apis/get-in-reply-to.yaml +++ b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml @@ -1,10 +1,10 @@ -order: 7 +order: 26 id: outlook-get-in-reply-to name: Get the ID of the message being replied to (Message Compose) description: Retrieves the ID of the message being replied to by the current message. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.14' script: content: | $("#get-in-reply-to").click(getInReplyTo); @@ -48,8 +48,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/99-preview-apis/get-item-class-async.yaml b/samples/outlook/90-other-item-apis/get-item-class-async.yaml similarity index 85% rename from samples/outlook/99-preview-apis/get-item-class-async.yaml rename to samples/outlook/90-other-item-apis/get-item-class-async.yaml index bdf3a9fb2..e5fdbac70 100644 --- a/samples/outlook/99-preview-apis/get-item-class-async.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-async.yaml @@ -1,16 +1,16 @@ -order: 5 +order: 28 id: outlook-get-item-class-async -name: Get item class (Compose) +name: Get item class (Message Compose) description: Retrieves the item class property of the message being composed. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.14' script: content: | $("#get-item-class-async").click(getItemClassAsync); function getItemClassAsync() { - // This snippet returns the Exchange Web Services item class property (PR_MESSAGE_CLASS) of the current mail item. + // This snippet returns the Exchange Web Services item class property (PR_MESSAGE_CLASS) of the current message. // The API call is only supported on a message being composed. Office.context.mailbox.item.getItemClassAsync((asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -18,7 +18,7 @@ script: return; } - console.log("Item class of the current mail item: " + asyncResult.value); + console.log("Item class of the current message: " + asyncResult.value); }); } language: typescript @@ -50,8 +50,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-message-properties.yaml b/samples/outlook/90-other-item-apis/get-message-properties.yaml index 8ab2db71a..80bf15538 100644 --- a/samples/outlook/90-other-item-apis/get-message-properties.yaml +++ b/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -4,7 +4,7 @@ name: 'Get properties of selected messages (Message Compose, Message Read)' description: Gets the properties of multiple selected messages. host: OUTLOOK api_set: - Mailbox: '1.13' + Mailbox: '1.14' script: content: | Office.onReady(() => { @@ -29,9 +29,12 @@ script: asyncResult.value.forEach((message) => { console.log(`Item ID: ${message.itemId}`); + console.log(`Conversation ID: ${message.conversationId}`); + console.log(`Internet message ID: ${message.internetMessageId}`); console.log(`Subject: ${message.subject}`); console.log(`Item type: ${message.itemType}`); console.log(`Item mode: ${message.itemMode}`); + console.log(`Has attachment: ${message.hasAttachment}`); }); }); } diff --git a/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml new file mode 100644 index 000000000..eabcba3cc --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -0,0 +1,79 @@ +order: 24 +id: outlook-other-item-apis-get-set-sensitivity-level +name: Get and set the sensitivity level (Appointment Organizer) +description: Gets and sets the sensitivity level of an appointment being composed. +host: OUTLOOK +api_set: + Mailbox: '1.14' +script: + content: | + $("#getSensitivity").on("click", getSensitivity); + $("#setSensitivityPrivate").on("click", setSensitivityPrivate); + + function getSensitivity() { + Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Sensitivity: " + asyncResult.value); + } else { + console.log("Failed to get sensitivity: " + JSON.stringify(asyncResult.error)); + } + }); + } + + function setSensitivityPrivate() { + Office.context.mailbox.item.sensitivity.setAsync( + Office.MailboxEnums.AppointmentSensitivityType.Private, + function callback(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); + } else { + console.log("Successfully set appointment sensitivity."); + } + } + ); + } + language: typescript +template: + content: |- +
+

This sample shows how to get and set the sensitivity level of an appointment being composed. +

+ Required mode: Appointment Organizer +

+

+
+ +
+ + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/99-preview-apis/calendar-properties-apis.yaml b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml similarity index 58% rename from samples/outlook/99-preview-apis/calendar-properties-apis.yaml rename to samples/outlook/99-preview-apis/get-set-isalldayevent.yaml index 0071ca0fe..ccc6c0809 100644 --- a/samples/outlook/99-preview-apis/calendar-properties-apis.yaml +++ b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -1,7 +1,7 @@ order: 1 -id: outlook-calendar-properties-apis -name: Work with calendar properties APIs (Compose) -description: Gets and sets isAllDayEvent and sensitivity properties of an appointment in Compose mode. +id: outlook-get-set-isalldayevent +name: Get and set the isAllDayEvent property (Appointment Organizer) +description: Gets and sets the isAllDayEvent property of an appointment being composed. host: OUTLOOK api_set: Mailbox: preview @@ -9,8 +9,6 @@ script: content: | $("#getIsAllDayEvent").on("click", getIsAllDayEvent); $("#setIsAllDayEventTrue").on("click", setIsAllDayEventTrue); - $("#getSensitivity").on("click", getSensitivity); - $("#setSensitivityConfidential").on("click", setSensitivityConfidential); function getIsAllDayEvent() { Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { @@ -31,34 +29,11 @@ script: } }); } - - function getSensitivity() { - Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Sensitivity: " + asyncResult.value); - } else { - console.log("Failed to get sensitivity: " + JSON.stringify(asyncResult.error)); - } - }); - } - - function setSensitivityConfidential() { - Office.context.mailbox.item.sensitivity.setAsync( - Office.MailboxEnums.AppointmentSensitivityType.Confidential, - function callback(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); - } else { - console.log("Successfully set appointment sensitivity."); - } - } - ); - } language: typescript template: content: |-
-

This sample shows how to get and set the isAllDayEvent and sensitivity properties of an appointment in compose mode. +

This sample shows how to get and set the isAllDayEvent property of an appointment being composed.

Required mode: Appointment Organizer

@@ -71,12 +46,6 @@ template: - -
language: html @@ -104,4 +73,4 @@ libraries: | @types/core-js jquery@3.1.1 - @types/jquery@3.3.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index e5955e6d78f105057903e6f96e0cca320d9b47a2..072de58ca36158f02979222180e3d7d95f384528 100644 GIT binary patch delta 14652 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { @@ -8506,7 +8506,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml Office.context.mailbox.item.isAllDayEvent.setAsync(true, @@ -8899,7 +8899,7 @@ 'Office.AppointmentCompose#sensitivity:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { @@ -8911,11 +8911,11 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml Office.context.mailbox.item.sensitivity.setAsync( - Office.MailboxEnums.AppointmentSensitivityType.Confidential, + Office.MailboxEnums.AppointmentSensitivityType.Private, function callback(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); @@ -10458,7 +10458,7 @@ 'Office.IsAllDayEvent#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { @@ -10471,7 +10471,7 @@ 'Office.IsAllDayEvent#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml Office.context.mailbox.item.isAllDayEvent.setAsync(true, @@ -10860,9 +10860,12 @@ asyncResult.value.forEach((message) => { console.log(`Item ID: ${message.itemId}`); + console.log(`Conversation ID: ${message.conversationId}`); + console.log(`Internet message ID: ${message.internetMessageId}`); console.log(`Subject: ${message.subject}`); console.log(`Item type: ${message.itemType}`); console.log(`Item mode: ${message.itemMode}`); + console.log(`Has attachment: ${message.hasAttachment}`); }); }); 'Office.Mailbox#getUserIdentityTokenAsync:member(1)': @@ -11077,11 +11080,11 @@ 'Office.MailboxEnums.AppointmentSensitivityType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml Office.context.mailbox.item.sensitivity.setAsync( - Office.MailboxEnums.AppointmentSensitivityType.Confidential, + Office.MailboxEnums.AppointmentSensitivityType.Private, function callback(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); @@ -12016,7 +12019,7 @@ 'Office.MessageCompose#closeAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close-async.yaml // This snippet closes the current message being composed and discards any @@ -12189,7 +12192,7 @@ 'Office.MessageCompose#getConversationIndexAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-index.yaml // This snippet returns the Base64-encoded position of the current message @@ -12214,11 +12217,11 @@ 'Office.MessageCompose#getItemClassAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml // This snippet returns the Exchange Web Services item class property - (PR_MESSAGE_CLASS) of the current mail item. + (PR_MESSAGE_CLASS) of the current message. // The API call is only supported on a message being composed. @@ -12228,7 +12231,7 @@ return; } - console.log("Item class of the current mail item: " + asyncResult.value); + console.log("Item class of the current message: " + asyncResult.value); }); 'Office.MessageCompose#getItemIdAsync:member(2)': - >- @@ -12324,7 +12327,7 @@ 'Office.MessageCompose#inReplyTo:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-in-reply-to.yaml // This snippet gets the ID of the message being replied to by the current @@ -12922,7 +12925,7 @@ 'Office.MessageRead#getAsFileAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-eml-format.yaml Office.context.mailbox.item.getAsFileAsync((asyncResult) => { @@ -13951,15 +13954,18 @@ asyncResult.value.forEach((message) => { console.log(`Item ID: ${message.itemId}`); + console.log(`Conversation ID: ${message.conversationId}`); + console.log(`Internet message ID: ${message.internetMessageId}`); console.log(`Subject: ${message.subject}`); console.log(`Item type: ${message.itemType}`); console.log(`Item mode: ${message.itemMode}`); + console.log(`Has attachment: ${message.hasAttachment}`); }); }); 'Office.Sensitivity#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { @@ -13972,11 +13978,11 @@ 'Office.Sensitivity#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml Office.context.mailbox.item.sensitivity.setAsync( - Office.MailboxEnums.AppointmentSensitivityType.Confidential, + Office.MailboxEnums.AppointmentSensitivityType.Private, function callback(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 7a8ab96cf..8773e99a2 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -9,6 +9,7 @@ "outlook-item-body-prepend-text-to-item-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-to-item-body.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-on-send.yaml", "outlook-item-save-and-close-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close-async.yaml", "outlook-item-save-and-close-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/save.yaml", "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", @@ -79,11 +80,11 @@ "outlook-other-item-apis-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml", "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml", "outlook-other-item-apis-get-message-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", - "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", - "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-eml-format.yaml", - "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-item-class-async.yaml", - "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-conversation-index.yaml", - "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-in-reply-to.yaml" + "outlook-other-item-apis-get-set-sensitivity-level": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml", + "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-eml-format.yaml", + "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-in-reply-to.yaml", + "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-index.yaml", + "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml", + "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", + "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index f2b210499..5e06b795d 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -9,6 +9,7 @@ "outlook-item-body-prepend-text-to-item-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/prepend-text-to-item-body.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/prepend-text-on-send.yaml", "outlook-item-save-and-close-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/25-item-save-and-close/close.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/25-item-save-and-close/close-async.yaml", "outlook-item-save-and-close-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/25-item-save-and-close/save.yaml", "outlook-recipients-and-attendees-get-from-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml", "outlook-recipients-and-attendees-get-from-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", @@ -79,11 +80,11 @@ "outlook-other-item-apis-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/session-data-apis.yaml", "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/delay-message-delivery.yaml", "outlook-other-item-apis-get-message-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-message-properties.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", - "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml", - "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-eml-format.yaml", - "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-item-class-async.yaml", - "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-conversation-index.yaml", - "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-in-reply-to.yaml" + "outlook-other-item-apis-get-set-sensitivity-level": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml", + "outlook-get-eml-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-eml-format.yaml", + "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-in-reply-to.yaml", + "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-index.yaml", + "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-async.yaml", + "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", + "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file From 0e2966430d3c3ae5d8d13edc115c581f23308523 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 29 May 2024 12:39:50 -0700 Subject: [PATCH 057/156] [Outlook] Update snippets for attachments and custom properties APIs (#884) * Update links and clean up snippets * Map snippet to Office.CustomProperties.saveAsync --- playlists-prod/outlook.yaml | 2 +- playlists/outlook.yaml | 2 +- .../load-set-get-save.yaml | 98 ++-- .../prepend-text-to-item-body.yaml | 2 +- .../20-item-body/replace-selected-text.yaml | 2 +- .../40-attachments/attachments-compose.yaml | 192 ++++--- .../55-display-items/display-new-message.yaml | 6 +- .../display-reply-with-attachments.yaml | 24 +- snippet-extractor-metadata/outlook.xlsx | Bin 24570 -> 24677 bytes snippet-extractor-output/snippets.yaml | 543 ++++++++++-------- 10 files changed, 489 insertions(+), 382 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 74310b4df..e01967dea 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -385,7 +385,7 @@ api_set: Mailbox: '1.9' - id: outlook-display-items-display-reply-with-attachments - name: 'Create a reply, with attachments' + name: Create a reply with attachments fileName: display-reply-with-attachments.yaml description: Opens a reply message forms and adds sample attachments. rawUrl: >- diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a5d0ad58a..9e2b0fac3 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -385,7 +385,7 @@ api_set: Mailbox: '1.9' - id: outlook-display-items-display-reply-with-attachments - name: 'Create a reply, with attachments' + name: Create a reply with attachments fileName: display-reply-with-attachments.yaml description: Opens a reply message forms and adds sample attachments. rawUrl: >- diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index 3a12f3b83..8c3d77bf7 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10,88 +10,106 @@ script: $("#load").on("click", load); $("#get").on("click", get); + $("#get-all").on("click", getAll); $("#set").on("click", set); $("#remove").on("click", remove); $("#save").on("click", save); - + function load() { - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); } function get() { - const propertyName = $("#propertyName").val(); + const propertyName = $("#get-property-name").val(); const propertyValue = customProps.get(propertyName); - $("#propertyValue").val(propertyValue); console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); } + function getAll() { + let allCustomProps; + if (Office.context.requirements.isSetSupported("Mailbox", "1.9")) { + allCustomProps = customProps.getAll(); + } else { + allCustomProps = customProps["rawData"]; + } + + console.log(allCustomProps); + } + function set() { - const propertyName = $("#propertyName").val(); - const propertyValue = $("#propertyValue").val(); + const propertyName = $("#set-property-name").val(); + const propertyValue = $("#property-value").val(); customProps.set(propertyName, propertyValue); console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); } function remove() { - const propertyName = $("#propertyName").val(); + const propertyName = $("#remove-property-name").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); } function save() { - customProps.saveAsync(function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + customProps.saveAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`saveAsync failed with message ${result.error.message}`); - } else { - console.log(`Custom properties saved with status: ${result.status}`); + return; } + + console.log(`Custom properties saved with status: ${result.status}`); }); } language: typescript template: - content: | + content: |-
-

This sample shows how to set, save, and get add-in's per-item properties that can be accessed the next time the add-in is opened for the same item.

+

This sample shows how to set, save, and get the custom per-item properties of an add-in.

@@ -120,4 +138,4 @@ libraries: | @types/core-js jquery@3.1.1 - @types/jquery@3.3.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index e8a7d28b6..22e4de7b0 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -12,7 +12,7 @@ script: function prependText() { /* This snippet adds text to the beginning of the message or appointment's body. - When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. + When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ const text = $("#text-field").val(); diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index 8958cde5c..f3d109d4b 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -12,7 +12,7 @@ script: function replaceSelection() { /* This snippet replaces selected text in a message or appointment's body with specified text. - If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. + If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ const text = $("#text-field").val(); diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index 14c6f2d0f..c86a5719f 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -7,127 +7,139 @@ api_set: script: content: | $("#add").on("click", add); - $("#addItemAttachment").on("click", addItemAttachment); $("#addBase64").on("click", addBase64); $("#get").on("click", get); $("#remove").on("click", remove); function add() { - const attachmentUrl = $("#attachmentUrl").val(); - Office.context.mailbox.item.addFileAttachmentAsync( - attachmentUrl, - getFileName(attachmentUrl), - { "asyncContext" : { var1: 1, var2: true } }, - function(result) { console.log(result); }); - } - - function addItemAttachment() { - const attachmentItemId = $("#attachmentItemId").val(); - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); + const attachmentUrl = $("#attachmentUrl") + .val() + .toString(); + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { isInline: false }, + (result) => { + console.log(result); + } + ); } function addBase64() { - base64String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + const base64String = + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + base64String, + "logo.png", + { isInline: false }, + (result) => { + console.log(result); + } + ); } function get() { - Office.context.mailbox.item.getAttachmentsAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (let i = 0; i < result.value.length; i++) { - const attachment = result.value[i]; - console.log("ID: " + attachment.id + "\n" + - "Name: " + attachment.name + "\n" + - "Size: " + attachment.size + "\n" + - "isInline: " + attachment.isInline); - switch (attachment.attachmentType) { - case Office.MailboxEnums.AttachmentType.Cloud: - console.log("Attachment type: Attachment is stored in a cloud location."); - break; - case Office.MailboxEnums.AttachmentType.File: - console.log("Attachment type: Attachment is a file."); - break; - case Office.MailboxEnums.AttachmentType.Item: - console.log("Attachment type: Attachment is an Exchange item."); - break; - } - } - } - else { - console.log("No attachments on this message."); - } + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; } - }); + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); + } + } else { + console.log("No attachments on this message."); + } + }); } function remove() { - Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId").val(), - { asyncContext : null }, - function(result) - { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`${result.error.message}`); - } else { - console.log(`Attachment removed successfully.`); - } - } - ); + Office.context.mailbox.item.removeAttachmentAsync( + $("#attachmentId") + .val() + .toString(), + (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + console.log(`Attachment removed successfully.`); + } + ); } function getFileName(url) { - const lastIndex = url.lastIndexOf('/'); - if (lastIndex >= 0) { - return url.substring(lastIndex + 1); - } - return url; + const lastIndex = url.lastIndexOf("/"); + if (lastIndex >= 0) { + return url.substring(lastIndex + 1); + } + return url; } language: typescript template: - content: | + content: |-
-

This sample shows how to add, get, and remove attachments from a message or an appointment in Compose mode.

-

Required mode: Item Compose

+

This sample shows how to add, get, and remove attachments from a message or an appointment in Compose mode.

+

Required mode: Item Compose

-

Try it out

-
- - +

Try it out

+
+

ADD

+ +
+ +
- -
- - -
- - - -
- - +
+

REMOVE

+
+ +
-
diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 8f619651e..c4053d058 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -20,7 +20,7 @@ script: { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] @@ -40,12 +40,12 @@ script: { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index ab7faa8ce..bfcf8495a 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -1,6 +1,6 @@ order: 6 id: outlook-display-items-display-reply-with-attachments -name: 'Create a reply, with attachments' +name: Create a reply with attachments description: Opens a reply message forms and adds sample attachments. host: OUTLOOK api_set: @@ -12,32 +12,34 @@ script: function run() { Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", + htmlBody: "This is a reply with an inline image and an item attachment.
", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ], - options: { asyncContext: null }, - callback: function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); + return; } + + console.log("Created reply with attachments."); } }); } function runAsync() { - // The async version is only available starting with requirement set 1.9, - // and provides a callback when the new appointment form has been created. + // The async version is only available starting with requirement set 1.9. + // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", + htmlBody: "This is a reply with an inline image and an item attachment.
", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 072de58ca36158f02979222180e3d7d95f384528..aee6413fbd323959e806172af5c37710c7a360e3 100644 GIT binary patch delta 15627 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 delta 15507 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 { + console.log(result); + } + ); 'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - base64String = - "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; - + const base64String = + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + base64String, + "logo.png", + { isInline: false }, + (result) => { + console.log(result); + } + ); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -8118,19 +8124,6 @@ } } ); -'Office.AppointmentCompose#addItemAttachmentAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - - - const attachmentItemId = $("#attachmentItemId").val(); - - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); 'Office.AppointmentCompose#categories:member': - >- // Link to full sample: @@ -8371,34 +8364,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getAttachmentsAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (let i = 0; i < result.value.length; i++) { - const attachment = result.value[i]; - console.log("ID: " + attachment.id + "\n" + - "Name: " + attachment.name + "\n" + - "Size: " + attachment.size + "\n" + - "isInline: " + attachment.isInline); - switch (attachment.attachmentType) { - case Office.MailboxEnums.AttachmentType.Cloud: - console.log("Attachment type: Attachment is stored in a cloud location."); - break; - case Office.MailboxEnums.AttachmentType.File: - console.log("Attachment type: Attachment is a file."); - break; - case Office.MailboxEnums.AttachmentType.Item: - console.log("Attachment type: Attachment is an Exchange item."); - break; - } - } - } - else { - console.log("No attachments on this message."); - } + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; + } + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); } + } else { + console.log("No attachments on this message."); + } }); 'Office.AppointmentCompose#getItemIdAsync:member(2)': - >- @@ -8555,21 +8561,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.AppointmentCompose#location:member': - >- @@ -8829,16 +8828,17 @@ Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId").val(), - { asyncContext : null }, - function(result) - { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`${result.error.message}`); - } else { - console.log(`Attachment removed successfully.`); - } + $("#attachmentId") + .val() + .toString(), + (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; } + + console.log(`Attachment removed successfully.`); + } ); 'Office.AppointmentCompose#requiredAttendees:member': - >- @@ -9177,16 +9177,18 @@ Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", + htmlBody: "This is a reply with an inline image and an item attachment.
", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ], - options: { asyncContext: null }, - callback: function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); + return; } + + console.log("Created reply with attachments."); } }); 'Office.AppointmentRead#displayReplyFormAsync:member(1)': @@ -9206,19 +9208,19 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9, + // The async version is only available starting with requirement set 1.9. - // and provides a callback when the new appointment form has been created. + // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", + htmlBody: "This is a reply with an inline image and an item attachment.
", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); @@ -9529,21 +9531,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.AppointmentRead#location:member': - >- @@ -9848,7 +9843,7 @@ /* This snippet adds text to the beginning of the message or appointment's body. - When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. + When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ const text = $("#text-field").val(); @@ -9950,7 +9945,7 @@ /* This snippet replaces selected text in a message or appointment's body with specified text. - If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. + If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ const text = $("#text-field").val(); @@ -10107,34 +10102,62 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#propertyName").val(); + const propertyName = $("#get-property-name").val(); const propertyValue = customProps.get(propertyName); - $("#propertyValue").val(propertyValue); - console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); +'Office.CustomProperties#getAll:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + + + let allCustomProps; + + if (Office.context.requirements.isSetSupported("Mailbox", "1.9")) { + allCustomProps = customProps.getAll(); + } else { + allCustomProps = customProps["rawData"]; + } + + + console.log(allCustomProps); 'Office.CustomProperties#remove:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#propertyName").val(); + const propertyName = $("#remove-property-name").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); +'Office.CustomProperties#saveAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + + + customProps.saveAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(`saveAsync failed with message ${result.error.message}`); + return; + } + + console.log(`Custom properties saved with status: ${result.status}`); + }); 'Office.CustomProperties#set:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#propertyName").val(); + const propertyName = $("#set-property-name").val(); - const propertyValue = $("#propertyValue").val(); + const propertyValue = $("#property-value").val(); customProps.set(propertyName, propertyValue); @@ -10751,7 +10774,7 @@ { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] @@ -10776,12 +10799,12 @@ { type: "file", name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + url: "https://i.imgur.com/9S36xvA.jpg", isInline: true } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); @@ -11130,34 +11153,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getAttachmentsAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (let i = 0; i < result.value.length; i++) { - const attachment = result.value[i]; - console.log("ID: " + attachment.id + "\n" + - "Name: " + attachment.name + "\n" + - "Size: " + attachment.size + "\n" + - "isInline: " + attachment.isInline); - switch (attachment.attachmentType) { - case Office.MailboxEnums.AttachmentType.Cloud: - console.log("Attachment type: Attachment is stored in a cloud location."); - break; - case Office.MailboxEnums.AttachmentType.File: - console.log("Attachment type: Attachment is a file."); - break; - case Office.MailboxEnums.AttachmentType.Item: - console.log("Attachment type: Attachment is an Exchange item."); - break; - } - } - } - else { - console.log("No attachments on this message."); - } + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; + } + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); } + } else { + console.log("No attachments on this message."); + } }); 'Office.MailboxEnums.CategoryColor:enum': - >- @@ -11803,27 +11839,33 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - const attachmentUrl = $("#attachmentUrl").val(); - + const attachmentUrl = $("#attachmentUrl") + .val() + .toString(); Office.context.mailbox.item.addFileAttachmentAsync( - attachmentUrl, - getFileName(attachmentUrl), - { "asyncContext" : { var1: 1, var2: true } }, - function(result) { console.log(result); }); + attachmentUrl, + getFileName(attachmentUrl), + { isInline: false }, + (result) => { + console.log(result); + } + ); 'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - base64String = - "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; - + const base64String = + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + base64String, + "logo.png", + { isInline: false }, + (result) => { + console.log(result); + } + ); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -11854,19 +11896,6 @@ } } ); -'Office.MessageCompose#addItemAttachmentAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - - - const attachmentItemId = $("#attachmentItemId").val(); - - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); 'Office.MessageCompose#bcc:member': - >- // Link to full sample: @@ -12140,34 +12169,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getAttachmentsAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (let i = 0; i < result.value.length; i++) { - const attachment = result.value[i]; - console.log("ID: " + attachment.id + "\n" + - "Name: " + attachment.name + "\n" + - "Size: " + attachment.size + "\n" + - "isInline: " + attachment.isInline); - switch (attachment.attachmentType) { - case Office.MailboxEnums.AttachmentType.Cloud: - console.log("Attachment type: Attachment is stored in a cloud location."); - break; - case Office.MailboxEnums.AttachmentType.File: - console.log("Attachment type: Attachment is a file."); - break; - case Office.MailboxEnums.AttachmentType.Item: - console.log("Attachment type: Attachment is an Exchange item."); - break; - } - } - } - else { - console.log("No attachments on this message."); - } + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; + } + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); } + } else { + console.log("No attachments on this message."); + } }); 'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- @@ -12397,21 +12439,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.MessageCompose#notificationMessages:member': - >- @@ -12519,16 +12554,17 @@ Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId").val(), - { asyncContext : null }, - function(result) - { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`${result.error.message}`); - } else { - console.log(`Attachment removed successfully.`); - } + $("#attachmentId") + .val() + .toString(), + (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; } + + console.log(`Attachment removed successfully.`); + } ); 'Office.MessageCompose#sensitivityLabel:member': - >- @@ -12834,16 +12870,18 @@ Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", + htmlBody: "This is a reply with an inline image and an item attachment.
", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ], - options: { asyncContext: null }, - callback: function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); + return; } + + console.log("Created reply with attachments."); } }); 'Office.MessageRead#displayReplyFormAsync:member(1)': @@ -12863,19 +12901,19 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9, + // The async version is only available starting with requirement set 1.9. - // and provides a callback when the new appointment form has been created. + // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", + htmlBody: "This is a reply with an inline image and an item attachment.
", attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } ] }, - function(asyncResult) { + (asyncResult) => { console.log(JSON.stringify(asyncResult)); } ); @@ -13221,21 +13259,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - const dataKey = Object.keys(customProps)[0]; - const data = customProps[dataKey]; - for (let propertyName in data) - { - let propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { + Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + return; } + + customProps = result.value; + console.log("Loaded the CustomProperties object."); }); 'Office.MessageRead#location:member': - >- @@ -13897,6 +13928,50 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); +'Office.ReplyFormAttachment:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // The async version is only available starting with requirement set 1.9. + + // It provides a callback when the new appointment form has been created. + + Office.context.mailbox.item.displayReplyFormAsync( + { + htmlBody: "This is a reply with an inline image and an item attachment.
", + attachments: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, + { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } + ] + }, + (asyncResult) => { + console.log(JSON.stringify(asyncResult)); + } + ); +'Office.ReplyFormData:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // The async version is only available starting with requirement set 1.9. + + // It provides a callback when the new appointment form has been created. + + Office.context.mailbox.item.displayReplyFormAsync( + { + htmlBody: "This is a reply with an inline image and an item attachment.
", + attachments: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, + { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } + ] + }, + (asyncResult) => { + console.log(JSON.stringify(asyncResult)); + } + ); 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: From 51b93b9837e822630454ac6f255e7ec24edb15e0 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 30 May 2024 14:26:58 -0700 Subject: [PATCH 058/156] [Excel] (Workbook) Add sample for built-in Excel functions (#885) * [Excel] (Workbook) Add sample for built-in Excel functions * Update metadata file * Adjust sample, add comments * Run yarn start * Fix typo, run yarn start --- playlists-prod/excel.yaml | 9 ++ playlists/excel.yaml | 9 ++ .../workbook-built-in-functions.yaml | 127 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 28057 -> 28252 bytes snippet-extractor-output/snippets.yaml | 57 ++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 204 insertions(+) create mode 100644 samples/excel/50-workbook/workbook-built-in-functions.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 881400e33..9a3f0428b 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1133,6 +1133,15 @@ group: Workbook api_set: ExcelAPI: '1.13' +- id: excel-workbook-built-in-function + name: Use built-in Excel functions + fileName: workbook-built-in-functions.yaml + description: Use the VLOOKUP and SUM built-in Excel functions. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml + group: Workbook + api_set: + ExcelAPI: '1.2' - id: excel-worksheet-active-worksheet name: Active worksheet fileName: active-worksheet.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 79660637e..b10fa4406 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1133,6 +1133,15 @@ group: Workbook api_set: ExcelAPI: '1.13' +- id: excel-workbook-built-in-function + name: Use built-in Excel functions + fileName: workbook-built-in-functions.yaml + description: Use the VLOOKUP and SUM built-in Excel functions. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-built-in-functions.yaml + group: Workbook + api_set: + ExcelAPI: '1.2' - id: excel-worksheet-active-worksheet name: Active worksheet fileName: active-worksheet.yaml diff --git a/samples/excel/50-workbook/workbook-built-in-functions.yaml b/samples/excel/50-workbook/workbook-built-in-functions.yaml new file mode 100644 index 000000000..bb72c4349 --- /dev/null +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -0,0 +1,127 @@ +order: 10 +id: excel-workbook-built-in-function +name: Use built-in Excel functions +description: Use the VLOOKUP and SUM built-in Excel functions. +host: EXCEL +api_set: + ExcelAPI: '1.2' +script: + content: | + $("#setup").on("click", () => tryCatch(setup)); + $("#call-vlookup").on("click", () => tryCatch(callVlookup)); + $("#nest-functions").on("click", () => tryCatch(nestFunctions)); + + async function callVlookup() { + await Excel.run(async (context) => { + // This function uses VLOOKUP to find data in the "Wrench" row on the worksheet. + let range = context.workbook.worksheets.getItem("Sample").getRange("A1:D4"); + + // Get the value in the second column in the "Wrench" row. + let unitSoldInNov = context.workbook.functions.vlookup("Wrench", range, 2, false); + unitSoldInNov.load("value"); + + await context.sync(); + console.log(" Number of wrenches sold in November = " + unitSoldInNov.value); + }); + } + + async function nestFunctions() { + await Excel.run(async (context) => { + // This function uses VLOOKUP to find data in the "Wrench" row + // on the worksheet, and then it uses SUM to combine the values. + let range = context.workbook.worksheets.getItem("Sample").getRange("A1:D4"); + + // Get the values in the second, third, and fourth columns in the "Wrench" row, + // and combine those values with SUM. + let sumOfTwoLookups = context.workbook.functions.sum( + context.workbook.functions.vlookup("Wrench", range, 2, false), + context.workbook.functions.vlookup("Wrench", range, 3, false), + context.workbook.functions.vlookup("Wrench", range, 4, false) + ); + sumOfTwoLookups.load("value"); + + await context.sync(); + console.log(" Number of wrenches sold in November, December, and January = " + sumOfTwoLookups.value); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const expensesTable = sheet.tables.add("A1:D1", true /*hasHeaders*/); + expensesTable.getHeaderRowRange().values = [["Product", "November", "December", "January"]]; + + expensesTable.rows.add(null /*add at the end*/, [ + ["Hammer", "23", "18", "17"], + ["Wrench", "12", "11", "14"], + ["Saw", "5", "15", "19"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + sheet.getRange("A1").select(); + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample shows how to use and nest the built-in Excel functions VLOOKUP and SUM. The sample uses VLOOKUP to return data, and then it uses SUM to combine data returned by VLOOKUP.

+
+ +
+

Setup

+ +

Try it out

+

Use VLOOKUP to return the number of wrenches sold in November.

+ +

Use VLOOKUP to find the number of wrenches sold in November, December, and January, and then use SUM to combine the three values.

+ +
+ language: html +style: + content: | + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index a64ede47b533d060776371fe2c0ee2af7cd56ffb..0daeeb2d254f73ce314a6906e19ff6d3f47aba49 100644 GIT binary patch delta 18584 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 QAXnS~AF4bL#pAp9f60v_$N&HU delta 18416 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml + + + await Excel.run(async (context) => { + // This function uses VLOOKUP to find data in the "Wrench" row on the worksheet. + let range = context.workbook.worksheets.getItem("Sample").getRange("A1:D4"); + + // Get the value in the second column in the "Wrench" row. + let unitSoldInNov = context.workbook.functions.vlookup("Wrench", range, 2, false); + unitSoldInNov.load("value"); + + await context.sync(); + console.log(" Number of wrenches sold in November = " + unitSoldInNov.value); + }); +'Excel.Functions#vlookup:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml + + + await Excel.run(async (context) => { + // This function uses VLOOKUP to find data in the "Wrench" row on the worksheet. + let range = context.workbook.worksheets.getItem("Sample").getRange("A1:D4"); + + // Get the value in the second column in the "Wrench" row. + let unitSoldInNov = context.workbook.functions.vlookup("Wrench", range, 2, false); + unitSoldInNov.load("value"); + + await context.sync(); + console.log(" Number of wrenches sold in November = " + unitSoldInNov.value); + }); +'Excel.Functions#sum:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml + + + await Excel.run(async (context) => { + // This function uses VLOOKUP to find data in the "Wrench" row + // on the worksheet, and then it uses SUM to combine the values. + let range = context.workbook.worksheets.getItem("Sample").getRange("A1:D4"); + + // Get the values in the second, third, and fourth columns in the "Wrench" row, + // and combine those values with SUM. + let sumOfTwoLookups = context.workbook.functions.sum( + context.workbook.functions.vlookup("Wrench", range, 2, false), + context.workbook.functions.vlookup("Wrench", range, 3, false), + context.workbook.functions.vlookup("Wrench", range, 4, false) + ); + sumOfTwoLookups.load("value"); + + await context.sync(); + console.log(" Number of wrenches sold in November, December, and January = " + sumOfTwoLookups.value); + }); 'Excel.GeometricShapeType:enum': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 303a72725..3ff4c77a9 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -117,6 +117,7 @@ "excel-workbook-data-protection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml", + "excel-workbook-built-in-function": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/active-worksheet.yaml", "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml", diff --git a/view/excel.json b/view/excel.json index ddc6200cd..7f9d59fff 100644 --- a/view/excel.json +++ b/view/excel.json @@ -117,6 +117,7 @@ "excel-workbook-data-protection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/data-protection.yaml", "excel-workbook-save-and-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-save-and-close.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml", + "excel-workbook-built-in-function": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-built-in-functions.yaml", "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/active-worksheet.yaml", "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-auto-filter.yaml", From 6052160844587d59de852fd99bbc9cdb3c5bd29d Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 6 Jun 2024 11:57:29 -0700 Subject: [PATCH 059/156] [Outlook] Add toString method (#887) --- samples/outlook/20-item-body/prepend-text-on-send.yaml | 2 +- samples/outlook/20-item-body/prepend-text-to-item-body.yaml | 2 +- samples/outlook/20-item-body/replace-selected-text.yaml | 2 +- snippet-extractor-output/snippets.yaml | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/outlook/20-item-body/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml index 06a78fe37..2a3d04550 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -11,7 +11,7 @@ script: function prependOnSend() { // This snippet prepends text to the beginning of the message or appointment's body once it's sent. - const text = $("#text-field").val(); + const text = $("#text-field").val().toString(); // It's recommended to call getTypeAsync and pass its returned value to the options.coercionType parameter of the prependOnSendAsync call. Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index 22e4de7b0..09699360f 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -14,7 +14,7 @@ script: When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val(); + const text = $("#text-field").val().toString(); // It's recommended to call getTypeAsync and pass its returned value to the options.coercionType parameter of the prependAsync call. Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index f3d109d4b..536af4ce1 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -14,7 +14,7 @@ script: If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val(); + const text = $("#text-field").val().toString(); // It's recommended to call getTypeAsync and pass its returned value to the options.coercionType parameter of the prependAsync call. Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0a2db22c7..fc1c9c67c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9903,7 +9903,7 @@ When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val(); + const text = $("#text-field").val().toString(); // It's recommended to call getTypeAsync and pass its returned value to the @@ -9934,7 +9934,7 @@ // This snippet prepends text to the beginning of the message or appointment's body once it's sent. - const text = $("#text-field").val(); + const text = $("#text-field").val().toString(); // It's recommended to call getTypeAsync and pass its returned value to the @@ -10005,7 +10005,7 @@ If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val(); + const text = $("#text-field").val().toString(); // It's recommended to call getTypeAsync and pass its returned value to the From d0f3fb03d9244a5badb8bdb943c242a6c9604461 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 10 Jun 2024 07:42:01 -0700 Subject: [PATCH 060/156] [Word] (annotations) Include popup action (#875) * [Word] (annotations) Include popup action * Remove popup handler from 1.7 version * promote to 1.8 --- playlists-prod/word.yaml | 2 +- playlists/word.yaml | 2 +- .../word/50-document/manage-annotations.yaml | 37 ++- snippet-extractor-metadata/word.xlsx | Bin 24932 -> 25082 bytes snippet-extractor-output/snippets.yaml | 225 ++++++++++++++++-- 5 files changed, 238 insertions(+), 28 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index e26645577..df80daabb 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -478,7 +478,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml group: Document api_set: - WordApi: '1.7' + WordApi: '1.8' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 31fd28bbc..96d9ef792 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -478,7 +478,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml group: Document api_set: - WordApi: '1.7' + WordApi: '1.8' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 70eb3c5ad..44178458f 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -5,7 +5,7 @@ description: Shows how to leverage the Writing Assistance API to manage annotati author: cbouzmsft host: WORD api_set: - WordApi: '1.7' + WordApi: '1.8' script: content: | $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); @@ -29,6 +29,7 @@ script: eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); await context.sync(); @@ -58,30 +59,41 @@ script: // Adds annotations to the selected paragraph. await Word.run(async (context) => { const paragraph = context.document.getSelection().paragraphs.getFirst(); + const options: Word.CritiquePopupOptions = { + brandingTextResourceId: "PG.TabLabel", + subtitleResourceId: "PG.HelpCommand.TipTitle", + titleResourceId: "PG.HelpCommand.Label", + suggestions: ["suggestion 1", "suggestion 2", "suggestion 3"] + }; const critique1 = { colorScheme: Word.CritiqueColorScheme.red, start: 1, - length: 3 + length: 3, + popupOptions: options }; const critique2 = { colorScheme: Word.CritiqueColorScheme.green, start: 6, - length: 1 + length: 1, + popupOptions: options }; const critique3 = { colorScheme: Word.CritiqueColorScheme.blue, start: 10, - length: 3 + length: 3, + popupOptions: options }; const critique4 = { colorScheme: Word.CritiqueColorScheme.lavender, start: 14, - length: 3 + length: 3, + popupOptions: options }; const critique5 = { colorScheme: Word.CritiqueColorScheme.berry, start: 18, - length: 10 + length: 10, + popupOptions: options }; const annotationSet: Word.AnnotationSet = { critiques: [critique1, critique2, critique3, critique4, critique5] @@ -231,6 +243,19 @@ script: }); } + async function onPopupActionHandler(args: Word.AnnotationPopupActionEventArgs) { + await Word.run(async (context) => { + let message = `AnnotationPopupAction: ID ${args.id} = `; + if (args.action === "Accept") { + message += `Accepted: ${args.critiqueSuggestion}`; + } else { + message += "Rejected"; + } + + console.log(message); + }); + } + async function deregisterEventHandlers() { // Deregisters event handlers. await Word.run(async (context) => { diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 2175c7818cae4fb6f877d60e5cafebbbcdeaa2cd..c7ea870529abb6e5f9358470379bdbbb6230ee63 100644 GIT binary patch delta 16216 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 cdP=tuKNOx;%Bv9{E<1v-d~EiM)#>iYeRRjg7! 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 F{vQczcijL0 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fc1c9c67c..ce2c5e88d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15271,6 +15271,7 @@ eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); await context.sync(); @@ -15330,6 +15331,7 @@ eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); await context.sync(); @@ -15366,6 +15368,7 @@ eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); await context.sync(); @@ -15393,6 +15396,46 @@ } }); } +'Word.AnnotationPopupActionEventArgs:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); + + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + async function onPopupActionHandler(args: + Word.AnnotationPopupActionEventArgs) { + await Word.run(async (context) => { + let message = `AnnotationPopupAction: ID ${args.id} = `; + if (args.action === "Accept") { + message += `Accepted: ${args.critiqueSuggestion}`; + } else { + message += "Rejected"; + } + + console.log(message); + }); + } 'Word.AnnotationRemovedEventArgs:interface': - >- // Link to full sample: @@ -15409,6 +15452,7 @@ eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); await context.sync(); @@ -15436,30 +15480,41 @@ await Word.run(async (context) => { const paragraph = context.document.getSelection().paragraphs.getFirst(); + const options: Word.CritiquePopupOptions = { + brandingTextResourceId: "PG.TabLabel", + subtitleResourceId: "PG.HelpCommand.TipTitle", + titleResourceId: "PG.HelpCommand.Label", + suggestions: ["suggestion 1", "suggestion 2", "suggestion 3"] + }; const critique1 = { colorScheme: Word.CritiqueColorScheme.red, start: 1, - length: 3 + length: 3, + popupOptions: options }; const critique2 = { colorScheme: Word.CritiqueColorScheme.green, start: 6, - length: 1 + length: 1, + popupOptions: options }; const critique3 = { colorScheme: Word.CritiqueColorScheme.blue, start: 10, - length: 3 + length: 3, + popupOptions: options }; const critique4 = { colorScheme: Word.CritiqueColorScheme.lavender, start: 14, - length: 3 + length: 3, + popupOptions: options }; const critique5 = { colorScheme: Word.CritiqueColorScheme.berry, start: 18, - length: 10 + length: 10, + popupOptions: options }; const annotationSet: Word.AnnotationSet = { critiques: [critique1, critique2, critique3, critique4, critique5] @@ -17733,30 +17788,41 @@ await Word.run(async (context) => { const paragraph = context.document.getSelection().paragraphs.getFirst(); + const options: Word.CritiquePopupOptions = { + brandingTextResourceId: "PG.TabLabel", + subtitleResourceId: "PG.HelpCommand.TipTitle", + titleResourceId: "PG.HelpCommand.Label", + suggestions: ["suggestion 1", "suggestion 2", "suggestion 3"] + }; const critique1 = { colorScheme: Word.CritiqueColorScheme.red, start: 1, - length: 3 + length: 3, + popupOptions: options }; const critique2 = { colorScheme: Word.CritiqueColorScheme.green, start: 6, - length: 1 + length: 1, + popupOptions: options }; const critique3 = { colorScheme: Word.CritiqueColorScheme.blue, start: 10, - length: 3 + length: 3, + popupOptions: options }; const critique4 = { colorScheme: Word.CritiqueColorScheme.lavender, start: 14, - length: 3 + length: 3, + popupOptions: options }; const critique5 = { colorScheme: Word.CritiqueColorScheme.berry, start: 18, - length: 10 + length: 10, + popupOptions: options }; const annotationSet: Word.AnnotationSet = { critiques: [critique1, critique2, critique3, critique4, critique5] @@ -17855,30 +17921,97 @@ await Word.run(async (context) => { const paragraph = context.document.getSelection().paragraphs.getFirst(); + const options: Word.CritiquePopupOptions = { + brandingTextResourceId: "PG.TabLabel", + subtitleResourceId: "PG.HelpCommand.TipTitle", + titleResourceId: "PG.HelpCommand.Label", + suggestions: ["suggestion 1", "suggestion 2", "suggestion 3"] + }; + const critique1 = { + colorScheme: Word.CritiqueColorScheme.red, + start: 1, + length: 3, + popupOptions: options + }; + const critique2 = { + colorScheme: Word.CritiqueColorScheme.green, + start: 6, + length: 1, + popupOptions: options + }; + const critique3 = { + colorScheme: Word.CritiqueColorScheme.blue, + start: 10, + length: 3, + popupOptions: options + }; + const critique4 = { + colorScheme: Word.CritiqueColorScheme.lavender, + start: 14, + length: 3, + popupOptions: options + }; + const critique5 = { + colorScheme: Word.CritiqueColorScheme.berry, + start: 18, + length: 10, + popupOptions: options + }; + const annotationSet: Word.AnnotationSet = { + critiques: [critique1, critique2, critique3, critique4, critique5] + }; + + const annotationIds = paragraph.insertAnnotations(annotationSet); + + await context.sync(); + + console.log("Annotations inserted:", annotationIds.value); + }); +'Word.CritiquePopupOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + // Adds annotations to the selected paragraph. + + await Word.run(async (context) => { + const paragraph = context.document.getSelection().paragraphs.getFirst(); + const options: Word.CritiquePopupOptions = { + brandingTextResourceId: "PG.TabLabel", + subtitleResourceId: "PG.HelpCommand.TipTitle", + titleResourceId: "PG.HelpCommand.Label", + suggestions: ["suggestion 1", "suggestion 2", "suggestion 3"] + }; const critique1 = { colorScheme: Word.CritiqueColorScheme.red, start: 1, - length: 3 + length: 3, + popupOptions: options }; const critique2 = { colorScheme: Word.CritiqueColorScheme.green, start: 6, - length: 1 + length: 1, + popupOptions: options }; const critique3 = { colorScheme: Word.CritiqueColorScheme.blue, start: 10, - length: 3 + length: 3, + popupOptions: options }; const critique4 = { colorScheme: Word.CritiqueColorScheme.lavender, start: 14, - length: 3 + length: 3, + popupOptions: options }; const critique5 = { colorScheme: Word.CritiqueColorScheme.berry, start: 18, - length: 10 + length: 10, + popupOptions: options }; const annotationSet: Word.AnnotationSet = { critiques: [critique1, critique2, critique3, critique4, critique5] @@ -18769,6 +18902,46 @@ console.log("No changes are being tracked."); } }); +'Word.Document#onAnnotationPopupAction:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + // Registers event handlers. + + await Word.run(async (context) => { + eventContexts[0] = context.document.onParagraphAdded.add(paragraphChanged); + eventContexts[1] = context.document.onParagraphChanged.add(paragraphChanged); + + eventContexts[2] = context.document.onAnnotationClicked.add(onClickedHandler); + eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); + eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); + eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); + + await context.sync(); + + console.log("Event handlers registered."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + async function onPopupActionHandler(args: + Word.AnnotationPopupActionEventArgs) { + await Word.run(async (context) => { + let message = `AnnotationPopupAction: ID ${args.id} = `; + if (args.action === "Accept") { + message += `Accepted: ${args.critiqueSuggestion}`; + } else { + message += "Rejected"; + } + + console.log(message); + }); + } 'Word.Document#onContentControlAdded:member': - >- // Link to full sample: @@ -20117,30 +20290,41 @@ await Word.run(async (context) => { const paragraph = context.document.getSelection().paragraphs.getFirst(); + const options: Word.CritiquePopupOptions = { + brandingTextResourceId: "PG.TabLabel", + subtitleResourceId: "PG.HelpCommand.TipTitle", + titleResourceId: "PG.HelpCommand.Label", + suggestions: ["suggestion 1", "suggestion 2", "suggestion 3"] + }; const critique1 = { colorScheme: Word.CritiqueColorScheme.red, start: 1, - length: 3 + length: 3, + popupOptions: options }; const critique2 = { colorScheme: Word.CritiqueColorScheme.green, start: 6, - length: 1 + length: 1, + popupOptions: options }; const critique3 = { colorScheme: Word.CritiqueColorScheme.blue, start: 10, - length: 3 + length: 3, + popupOptions: options }; const critique4 = { colorScheme: Word.CritiqueColorScheme.lavender, start: 14, - length: 3 + length: 3, + popupOptions: options }; const critique5 = { colorScheme: Word.CritiqueColorScheme.berry, start: 18, - length: 10 + length: 10, + popupOptions: options }; const annotationSet: Word.AnnotationSet = { critiques: [critique1, critique2, critique3, critique4, critique5] @@ -20490,6 +20674,7 @@ eventContexts[3] = context.document.onAnnotationHovered.add(onHoveredHandler); eventContexts[4] = context.document.onAnnotationInserted.add(onInsertedHandler); eventContexts[5] = context.document.onAnnotationRemoved.add(onRemovedHandler); + eventContexts[6] = context.document.onAnnotationPopupAction.add(onPopupActionHandler); await context.sync(); From 14513859d200e529c61e11ef7468add6b1968ab9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 11 Jun 2024 13:39:16 -0700 Subject: [PATCH 061/156] [Admin] (Word) Minor cleanup --- samples/word/50-document/manage-fields.yaml | 6 +++--- snippet-extractor-output/snippets.yaml | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index 8d1d705c7..749c31cf5 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -19,7 +19,7 @@ script: async function rangeInsertDateField() { // Inserts a Date field before selection. await Word.run(async (context) => { - var range = context.document.getSelection().getRange(); + const range = context.document.getSelection().getRange(); const field = range.insertField(Word.InsertLocation.before, Word.FieldType.date, '\\@ "M/d/yyyy h:mm am/pm"', true); @@ -90,7 +90,7 @@ script: async function getSelectedFieldAndUpdate() { // Gets and updates the first field in the selection. await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); + let field = context.document.getSelection().fields.getFirstOrNullObject(); field.load(["code", "result", "type", "locked"]); await context.sync(); @@ -115,7 +115,7 @@ script: async function getFieldAndLockOrUnlock() { // Gets the first field in the selection and toggles between setting it to locked or unlocked. await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); + let field = context.document.getSelection().fields.getFirstOrNullObject(); field.load(["code", "result", "type", "locked"]); await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ce2c5e88d..89456a762 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -19245,7 +19245,7 @@ // Gets and updates the first field in the selection. await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); + let field = context.document.getSelection().fields.getFirstOrNullObject(); field.load(["code", "result", "type", "locked"]); await context.sync(); @@ -19274,7 +19274,7 @@ // Gets and updates the first field in the selection. await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); + let field = context.document.getSelection().fields.getFirstOrNullObject(); field.load(["code", "result", "type", "locked"]); await context.sync(); @@ -19344,7 +19344,7 @@ locked or unlocked. await Word.run(async (context) => { - var field = context.document.getSelection().fields.getFirstOrNullObject(); + let field = context.document.getSelection().fields.getFirstOrNullObject(); field.load(["code", "result", "type", "locked"]); await context.sync(); @@ -19492,7 +19492,7 @@ // Inserts a Date field before selection. await Word.run(async (context) => { - var range = context.document.getSelection().getRange(); + const range = context.document.getSelection().getRange(); const field = range.insertField(Word.InsertLocation.before, Word.FieldType.date, '\\@ "M/d/yyyy h:mm am/pm"', true); @@ -21118,7 +21118,7 @@ // Inserts a Date field before selection. await Word.run(async (context) => { - var range = context.document.getSelection().getRange(); + const range = context.document.getSelection().getRange(); const field = range.insertField(Word.InsertLocation.before, Word.FieldType.date, '\\@ "M/d/yyyy h:mm am/pm"', true); From 8b96d67d24f5ff3ee5456f92ed56a63c2986549f Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 11 Jun 2024 14:35:58 -0700 Subject: [PATCH 062/156] [Word] (tracked changes) Clean up and mappings (#891) --- .../50-document/manage-tracked-changes.yaml | 42 ++++---- snippet-extractor-metadata/word.xlsx | Bin 25082 -> 25091 bytes snippet-extractor-output/snippets.yaml | 98 +++++++++++++----- 3 files changed, 94 insertions(+), 46 deletions(-) diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 81c2cf641..a72015098 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -19,8 +19,8 @@ script: async function getAllTrackedChanges() { // Gets all tracked changes. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); trackedChanges.load(); await context.sync(); @@ -31,12 +31,12 @@ script: async function getFirstTrackedChangeRange() { // Gets the range of the first tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - const trackedChange = trackedChanges.getFirst(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); await context.sync(); - const range = trackedChange.getRange(); + const range: Word.Range = trackedChange.getRange(); range.load(); await context.sync(); @@ -47,14 +47,14 @@ script: async function getNextTrackedChange() { // Gets the next (second) tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); await context.sync(); - const trackedChange = trackedChanges.getFirst(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); await context.sync(); - const nextTrackedChange = trackedChange.getNext(); + const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); await context.sync(); nextTrackedChange.load(); @@ -67,9 +67,9 @@ script: async function acceptFirstTrackedChange() { // Accepts the first tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - const trackedChange = trackedChanges.getFirst(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); trackedChange.load(); await context.sync(); @@ -82,13 +82,13 @@ script: async function rejectFirstTrackedChange() { // Rejects the first tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - const trackedChange = trackedChanges.getFirst(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); trackedChange.load(); await context.sync(); - console.log("First tracked change:, trackedChange); + console.log("First tracked change:", trackedChange); trackedChange.reject(); console.log("Rejected the first tracked change."); }); @@ -97,8 +97,8 @@ script: async function acceptAllTrackedChanges() { // Accepts all tracked changes. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); trackedChanges.acceptAll(); console.log("Accepted all tracked changes."); }); @@ -107,8 +107,8 @@ script: async function rejectAllTrackedChanges() { // Rejects all tracked changes. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); trackedChanges.rejectAll(); console.log("Rejected all tracked changes."); }); diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index c7ea870529abb6e5f9358470379bdbbb6230ee63..145e2e26d63cbda6c75447160eb1eff07da1a36f 100644 GIT binary patch delta 14696 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 F{69<@swe;e delta 14658 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 Msp0Mo|AX+q0J&Ryga7~l diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 89456a762..71ff1e79f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15687,8 +15687,8 @@ // Gets all tracked changes. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); trackedChanges.load(); await context.sync(); @@ -22095,6 +22095,30 @@ $("#right-cell-margin").val(tableStyle.rightCellMargin); $("#cell-spacing").val(tableStyle.cellSpacing); }); +'Word.TrackedChange:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + + // Gets the next (second) tracked change. + + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + await context.sync(); + + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); + await context.sync(); + + const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); + await context.sync(); + + nextTrackedChange.load(); + await context.sync(); + + console.log(nextTrackedChange); + }); 'Word.TrackedChange#accept:member(1)': - >- // Link to full sample: @@ -22104,9 +22128,9 @@ // Accepts the first tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - const trackedChange = trackedChanges.getFirst(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); trackedChange.load(); await context.sync(); @@ -22123,14 +22147,14 @@ // Gets the next (second) tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); await context.sync(); - const trackedChange = trackedChanges.getFirst(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); await context.sync(); - const nextTrackedChange = trackedChange.getNext(); + const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); await context.sync(); nextTrackedChange.load(); @@ -22147,12 +22171,12 @@ // Gets the range of the first tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - const trackedChange = trackedChanges.getFirst(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); await context.sync(); - const range = trackedChange.getRange(); + const range: Word.Range = trackedChange.getRange(); range.load(); await context.sync(); @@ -22167,13 +22191,13 @@ // Rejects the first tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - const trackedChange = trackedChanges.getFirst(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); trackedChange.load(); await context.sync(); - console.log("First tracked change:, trackedChange); + console.log("First tracked change:", trackedChange); trackedChange.reject(); console.log("Rejected the first tracked change."); }); @@ -22186,8 +22210,8 @@ // Accepts all tracked changes. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); trackedChanges.acceptAll(); console.log("Accepted all tracked changes."); }); @@ -22200,12 +22224,12 @@ // Gets the range of the first tracked change. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); - const trackedChange = trackedChanges.getFirst(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); await context.sync(); - const range = trackedChange.getRange(); + const range: Word.Range = trackedChange.getRange(); range.load(); await context.sync(); @@ -22220,11 +22244,35 @@ // Rejects all tracked changes. await Word.run(async (context) => { - const body = context.document.body; - const trackedChanges = body.getTrackedChanges(); + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); trackedChanges.rejectAll(); console.log("Rejected all tracked changes."); }); +'Word.TrackedChangeType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + + // Gets the next (second) tracked change. + + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + await context.sync(); + + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); + await context.sync(); + + const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); + await context.sync(); + + nextTrackedChange.load(); + await context.sync(); + + console.log(nextTrackedChange); + }); 'Word.VerticalAlignment:enum': - >- // Link to full sample: From 45ac9c6ae455cefc28e30df997b269b8c0233d2b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 12 Jun 2024 09:45:41 -0700 Subject: [PATCH 063/156] [Word] (tracked changes) Minor update --- samples/word/50-document/manage-tracked-changes.yaml | 2 +- snippet-extractor-output/snippets.yaml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index a72015098..0abfd36a8 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -57,7 +57,7 @@ script: const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); await context.sync(); - nextTrackedChange.load(); + nextTrackedChange.load(["author", "date", "text", "type"]); await context.sync(); console.log(nextTrackedChange); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 71ff1e79f..244e8a934 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -22114,7 +22114,7 @@ const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); await context.sync(); - nextTrackedChange.load(); + nextTrackedChange.load(["author", "date", "text", "type"]); await context.sync(); console.log(nextTrackedChange); @@ -22157,7 +22157,7 @@ const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); await context.sync(); - nextTrackedChange.load(); + nextTrackedChange.load(["author", "date", "text", "type"]); await context.sync(); console.log(nextTrackedChange); @@ -22268,7 +22268,7 @@ const nextTrackedChange: Word.TrackedChange = trackedChange.getNext(); await context.sync(); - nextTrackedChange.load(); + nextTrackedChange.load(["author", "date", "text", "type"]); await context.sync(); console.log(nextTrackedChange); From 239bc8e9ff64f33ab82dde53e0a8d59095da3341 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 12 Jun 2024 16:02:19 -0700 Subject: [PATCH 064/156] [Word] (comments) Expand to include contentRange (#892) --- samples/word/50-document/manage-comments.yaml | 50 +++---- .../word/99-preview-apis/manage-comments.yaml | 30 ++-- snippet-extractor-metadata/word.xlsx | Bin 25091 -> 25222 bytes snippet-extractor-output/snippets.yaml | 131 +++++++++++++----- 4 files changed, 141 insertions(+), 70 deletions(-) diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 17c2152e9..a059d4062 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -23,7 +23,7 @@ script: const text = $("#comment-text") .val() .toString(); - const comment = context.document.getSelection().insertComment(text); + const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. comment.load(); @@ -39,7 +39,7 @@ script: const text = $("#edit-comment-text") .val() .toString(); - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -59,16 +59,16 @@ script: const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); } @@ -76,7 +76,7 @@ script: async function toggleResolvedStatusOfFirstCommentInSelection() { // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -87,33 +87,36 @@ script: // If the comment is active, set as resolved. // If it's resolved, set resolved to false. const resolvedBefore = comment.resolved; + console.log(`Comment Resolved status (before): ${resolvedBefore}`); comment.resolved = !resolvedBefore; - comment.load(); + comment.load("resolved"); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`, comment); + console.log(`Comment Resolved status (after): ${comment.resolved}`); }); } async function getFirstCommentRange() { // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); } async function getCommentsInSelection() { // Gets the comments in the selected content. await Word.run(async (context) => { - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); // Load objects to log in the console. comments.load(); @@ -133,14 +136,14 @@ script: .delete(); await context.sync(); - console.log("Comment deleted"); + console.log("Comment deleted."); }); } async function getComments() { // Gets the comments in the document body. await Word.run(async (context) => { - const comments = context.document.body.getComments(); + const comments: Word.CommentCollection = context.document.body.getComments(); // Load objects to log in the console. comments.load(); @@ -191,7 +194,8 @@ template:

Try it out

-

First, select content in document body.

+

Manage comments in selection

+

Select content in document body before proceeding.

@@ -203,42 +207,38 @@ template:

-

-

-

-

+

Manage comments in document body

- diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index 85305a279..84d544585 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -23,7 +23,7 @@ script: async function registerEventHandlers() { // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -44,7 +44,7 @@ script: const text = $("#comment-text") .val() .toString(); - const comment = context.document.getSelection().insertComment(text); + const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. comment.load(); @@ -60,7 +60,7 @@ script: const text = $("#edit-comment-text") .val() .toString(); - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -80,7 +80,7 @@ script: const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -97,7 +97,7 @@ script: async function toggleResolvedStatusOfFirstCommentInSelection() { // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -107,33 +107,37 @@ script: // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. - comment.resolved = !comment.resolved; - comment.load(); + const resolvedBefore = comment.resolved; + console.log(`Comment Resolved status (before): ${resolvedBefore}`); + comment.resolved = !resolvedBefore; + comment.load("resolved"); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`, comment); + console.log(`Comment Resolved status (after): ${comment.resolved}`); }); } async function getFirstCommentRange() { // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); } async function getCommentsInSelection() { // Gets the comments in the selected content. await Word.run(async (context) => { - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); // Load objects to log in the console. comments.load(); @@ -160,7 +164,7 @@ script: async function getComments() { // Gets the comments in the document body. await Word.run(async (context) => { - const comments = context.document.body.getComments(); + const comments: Word.CommentCollection = context.document.body.getComments(); // Load objects to log in the console. comments.load(); diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 145e2e26d63cbda6c75447160eb1eff07da1a36f..7ba5d4257619144b3b1ba9561be76a3e45417e90 100644 GIT binary patch delta 17460 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 DY75a& delta 17319 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%0Asa*!C$A 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 PMNN)QQf2!a3sM3Am{OA6 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 244e8a934..2064586f3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15626,7 +15626,7 @@ // Gets the comments in the document body. await Word.run(async (context) => { - const comments = context.document.body.getComments(); + const comments: Word.CommentCollection = context.document.body.getComments(); // Load objects to log in the console. comments.load(); @@ -16111,7 +16111,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16144,7 +16144,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16178,7 +16178,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16211,7 +16211,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16244,7 +16244,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16790,6 +16790,26 @@ await Word.run(async (context) => { context.document.close(Word.CloseBehavior.save); }); +'Word.Comment:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + + // Sets a comment on the selected content. + + await Word.run(async (context) => { + const text = $("#comment-text") + .val() + .toString(); + const comment: Word.Comment = context.document.getSelection().insertComment(text); + + // Load object to log in the console. + comment.load(); + await context.sync(); + + console.log("Comment inserted:", comment); + }); 'Word.Comment#delete:member(1)': - >- // Link to full sample: @@ -16806,7 +16826,7 @@ .delete(); await context.sync(); - console.log("Comment deleted"); + console.log("Comment deleted."); }); 'Word.Comment#getRange:member(1)': - >- @@ -16817,15 +16837,17 @@ // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); 'Word.Comment#reply:member(1)': - >- @@ -16839,16 +16861,16 @@ const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); 'Word.Comment#content:member': @@ -16863,7 +16885,7 @@ const text = $("#edit-comment-text") .val() .toString(); - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -16875,6 +16897,27 @@ console.log("Comment content changed:", comment); }); +'Word.Comment#contentRange:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + + // Gets the range of the first comment in the selected content. + + await Word.run(async (context) => { + const comment: Word.Comment = context.document + .getSelection() + .getComments() + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); + }); 'Word.Comment#resolved:member': - >- // Link to full sample: @@ -16884,7 +16927,7 @@ // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { - const comment = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() .getFirst(); @@ -16895,11 +16938,12 @@ // If the comment is active, set as resolved. // If it's resolved, set resolved to false. const resolvedBefore = comment.resolved; + console.log(`Comment Resolved status (before): ${resolvedBefore}`); comment.resolved = !resolvedBefore; - comment.load(); + comment.load("resolved"); await context.sync(); - console.log(`Comment Resolved status: ${comment.resolved}`, comment); + console.log(`Comment Resolved status (after): ${comment.resolved}`); }); 'Word.CommentChangeType:enum': - >- @@ -16910,7 +16954,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -16944,15 +16988,17 @@ // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const range = context.document + const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst() - .getRange(); + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); range.load("text"); await context.sync(); console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); }); 'Word.CommentCollection#items:member': - >- @@ -16966,18 +17012,39 @@ const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); +'Word.CommentContentRange:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + + // Gets the range of the first comment in the selected content. + + await Word.run(async (context) => { + const comment: Word.Comment = context.document + .getSelection() + .getComments() + .getFirst(); + const range: Word.Range = comment.getRange(); + comment.load("contentRange"); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + console.log("Comment content range:", comment.contentRange); + }); 'Word.CommentDetail:interface': - >- // Link to full sample: @@ -16987,7 +17054,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -17020,7 +17087,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -17057,16 +17124,16 @@ const text = $("#reply-text") .val() .toString(); - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { const reply = firstActiveComment.reply(text); - console.log("Reply added"); + console.log("Reply added."); } else { - console.log("No active comment was found in the selection so couldn't reply."); + console.log("No active comment was found in the selection, so couldn't reply."); } }); 'Word.CompareTarget:enum': @@ -19177,7 +19244,7 @@ // Registers event handlers. await Word.run(async (context) => { - const body = context.document.body; + const body: Word.Body = context.document.body; body.track(); await context.sync(); @@ -20961,7 +21028,7 @@ // Gets the comments in the selected content. await Word.run(async (context) => { - const comments = context.document.getSelection().getComments(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); // Load objects to log in the console. comments.load(); @@ -21067,7 +21134,7 @@ const text = $("#comment-text") .val() .toString(); - const comment = context.document.getSelection().insertComment(text); + const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. comment.load(); From 015a041622755eb3dd295a07e0114d63632c0544 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 13 Jun 2024 13:33:05 -0700 Subject: [PATCH 065/156] [Word] (comments) Expand to include ReplyCollection (#894) --- samples/word/50-document/manage-comments.yaml | 89 +++++++--- .../word/99-preview-apis/manage-comments.yaml | 89 +++++++--- snippet-extractor-metadata/word.xlsx | Bin 25222 -> 25305 bytes snippet-extractor-output/snippets.yaml | 163 ++++++++++++------ 4 files changed, 243 insertions(+), 98 deletions(-) diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index a059d4062..f50930ea5 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -11,8 +11,9 @@ script: $("#edit").on("click", () => tryCatch(editFirstCommentInSelection)); $("#reply").on("click", () => tryCatch(replyToFirstActiveCommentInSelection)); $("#resolve").on("click", () => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); - $("#range").on("click", () => tryCatch(getFirstCommentRange)); + $("#range").on("click", () => tryCatch(getFirstCommentRangeInSelection)); $("#get-comments-in-selection").on("click", () => tryCatch(getCommentsInSelection)); + $("#get-replies-to-first-comment-in-selection").on("click", () => tryCatch(getRepliesToFirstCommentInSelection)); $("#delete").on("click", () => tryCatch(deleteFirstCommentInSelection)); $("#get-comments").on("click", () => tryCatch(getComments)); $("#setup").on("click", () => tryCatch(setup)); @@ -34,22 +35,28 @@ script: } async function editFirstCommentInSelection() { - // Edits the first comment in the selected content. + // Edits the first active comment in the selected content. await Word.run(async (context) => { const text = $("#edit-comment-text") .val() .toString(); - const comment: Word.Comment = context.document - .getSelection() - .getComments() - .getFirst(); - comment.content = text; + const comments: Word.CommentCollection = context.document.getSelection().getComments(); + comments.load("items"); + await context.sync(); + + const firstActiveComment: Word.Comment = comments.items.find((item) => item.resolved !== true); + if (!firstActiveComment) { + console.warn("No active comment was found in the selection, so couldn't edit."); + return; + } + + firstActiveComment.content = text; // Load object to log in the console. - comment.load(); + firstActiveComment.load(); await context.sync(); - console.log("Comment content changed:", comment); + console.log("Comment content changed:", firstActiveComment); }); } @@ -63,12 +70,12 @@ script: comments.load("items"); await context.sync(); - const firstActiveComment = comments.items.find((item) => item.resolved !== true); + const firstActiveComment: Word.Comment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { - const reply = firstActiveComment.reply(text); + const reply: Word.CommentReply = firstActiveComment.reply(text); console.log("Reply added."); } else { - console.log("No active comment was found in the selection, so couldn't reply."); + console.warn("No active comment was found in the selection, so couldn't reply."); } }); } @@ -79,10 +86,15 @@ script: const comment: Word.Comment = context.document .getSelection() .getComments() - .getFirst(); + .getFirstOrNullObject(); comment.load("resolved"); await context.sync(); + if (comment.isNullObject) { + console.warn("No comments in the selection, so nothing to toggle."); + return; + } + // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. @@ -96,20 +108,23 @@ script: }); } - async function getFirstCommentRange() { + async function getFirstCommentRangeInSelection() { // Gets the range of the first comment in the selected content. await Word.run(async (context) => { - const comment: Word.Comment = context.document - .getSelection() - .getComments() - .getFirst(); - const range: Word.Range = comment.getRange(); + const comment: Word.Comment = context.document.getSelection().getComments().getFirstOrNullObject(); comment.load("contentRange"); + const range: Word.Range = comment.getRange(); range.load("text"); await context.sync(); + if (comment.isNullObject) { + console.warn("No comments in the selection, so no range to get."); + return; + } + console.log(`Comment location: ${range.text}`); - console.log("Comment content range:", comment.contentRange); + const contentRange: Word.CommentContentRange = comment.contentRange; + console.log("Comment content range:", contentRange); }); } @@ -126,16 +141,35 @@ script: }); } + async function getRepliesToFirstCommentInSelection() { + // Gets the replies to the first comment in the selected content. + await Word.run(async (context) => { + const comment: Word.Comment = context.document.getSelection().getComments().getFirstOrNullObject(); + comment.load("replies"); + await context.sync(); + + if (comment.isNullObject) { + console.warn("No comments in the selection, so no replies to get."); + return; + } + + const replies: Word.CommentReplyCollection = comment.replies; + console.log("Replies to the first comment:", replies); + }); + } + async function deleteFirstCommentInSelection() { // Deletes the first comment in the selected content. await Word.run(async (context) => { - context.document - .getSelection() - .getComments() - .getFirst() - .delete(); + const comment: Word.Comment = context.document.getSelection().getComments().getFirstOrNullObject(); + comment.delete(); await context.sync(); + if (comment.isNullObject) { + console.warn("No comments in the selection, so nothing to delete."); + return; + } + console.log("Comment deleted."); }); } @@ -232,6 +266,11 @@ template: Get comments

+

+ +

+

+ +

+

+ +
+

Try it out

+ + + + + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index ef202b11138529d6fce9f315013fc735c844ab72..5c4453980b5cecc311221003fba40d2eb56a641f 100644 GIT binary patch delta 16098 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml + + + // Logs the current change tracking states of the content controls. + + await Word.run(async (context) => { + let trackAddedArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.added]; + let trackDeletedArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.deleted]; + let trackNormalArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.normal]; + + let addedContentControls = context.document.body.getContentControls().getByChangeTrackingStates(trackAddedArray); + let deletedContentControls = context.document.body + .getContentControls() + .getByChangeTrackingStates(trackDeletedArray); + let normalContentControls = context.document.body.getContentControls().getByChangeTrackingStates(trackNormalArray); + + addedContentControls.load(); + deletedContentControls.load(); + normalContentControls.load(); + await context.sync(); + + console.log(`Number of content controls in Added state: ${addedContentControls.items.length}`); + console.log(`Number of content controls in Deleted state: ${deletedContentControls.items.length}`); + console.log(`Number of content controls in Normal state: ${normalContentControls.items.length}`); + }); 'Word.ChangeTrackingVersion:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 0b0a3d3d3..e58d24847 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -10,6 +10,7 @@ "word-content-controls-content-control-onexited-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml", "word-content-controls-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml", "word-content-controls-insert-and-change-checkbox-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml", + "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml", diff --git a/view/word.json b/view/word.json index 3a4944169..cad827457 100644 --- a/view/word.json +++ b/view/word.json @@ -10,6 +10,7 @@ "word-content-controls-content-control-onexited-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onexited-event.yaml", "word-content-controls-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-ondeleted-event.yaml", "word-content-controls-insert-and-change-checkbox-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml", + "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/insert-list.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/organize-list.yaml", From 9348dbec531ae81695549f43d088bb9e52e61a68 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 27 Jun 2024 16:14:10 -0700 Subject: [PATCH 074/156] [Word] (content controls) Add for ComboBox and DropDownList types (#910) --- playlists-prod/word.yaml | 18 ++ playlists/word.yaml | 18 ++ ...-and-change-combo-box-content-control.yaml | 231 +++++++++++++++++ ...-change-dropdown-list-content-control.yaml | 233 ++++++++++++++++++ view-prod/word.json | 2 + view/word.json | 2 + 6 files changed, 504 insertions(+) create mode 100644 samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml create mode 100644 samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index de2ca1685..ab5fc76e7 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -515,6 +515,24 @@ group: Preview APIs api_set: WordApi: '1.8' +- id: word-insert-and-change-combo-box-content-control + name: Manage combo box content controls + fileName: insert-and-change-combo-box-content-control.yaml + description: 'Inserts, updates, and deletes combo box content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + group: Preview APIs + api_set: + WordApi: '1.9' +- id: word-insert-and-change-dropdown-list-content-control + name: Manage dropdown list content controls + fileName: insert-and-change-dropdown-list-content-control.yaml + description: 'Inserts, updates, and deletes dropdown list content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + group: Preview APIs + api_set: + WordApi: '1.9' - id: word-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 6e53e4acd..b7b2d39a3 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -515,6 +515,24 @@ group: Preview APIs api_set: WordApi: '1.8' +- id: word-insert-and-change-combo-box-content-control + name: Manage combo box content controls + fileName: insert-and-change-combo-box-content-control.yaml + description: 'Inserts, updates, and deletes combo box content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + group: Preview APIs + api_set: + WordApi: '1.9' +- id: word-insert-and-change-dropdown-list-content-control + name: Manage dropdown list content controls + fileName: insert-and-change-dropdown-list-content-control.yaml + description: 'Inserts, updates, and deletes dropdown list content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + group: Preview APIs + api_set: + WordApi: '1.9' - id: word-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml diff --git a/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml b/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml new file mode 100644 index 000000000..b798fbeb3 --- /dev/null +++ b/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml @@ -0,0 +1,231 @@ +id: word-insert-and-change-combo-box-content-control +name: Manage combo box content controls +description: 'Inserts, updates, and deletes combo box content controls.' +host: WORD +api_set: + WordApi: '1.9' +script: + content: | + $("#insert-control").on("click", () => tryCatch(insertComboBoxContentControl)); + $("#add-item").on("click", () => tryCatch(addItemToComboBoxContentControl)); + $("#delete-list").on("click", () => tryCatch(deleteListFromComboBoxContentControl)); + $("#delete-control").on("click", () => tryCatch(deleteComboBoxContentControl)); + $("#setup").on("click", () => tryCatch(setup)); + + async function insertComboBoxContentControl() { + // Places a combo box content control at the end of the selection. + await Word.run(async (context) => { + let selection = context.document.getSelection(); + selection.getRange(Word.RangeLocation.end).insertContentControl(Word.ContentControlType.comboBox); + await context.sync(); + + console.log("Combo box content control inserted at the end of the selection."); + }); + } + + async function addItemToComboBoxContentControl() { + // Adds the provided list item to the first combo box content control in the selection. + await Word.run(async (context) => { + const listItem = $("#item-to-add") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,comboBoxContentControl"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,comboBoxContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.comboBoxContentControl.addListItem(listItem); + await context.sync(); + + console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + }); + } + + async function deleteListFromComboBoxContentControl() { + // Deletes the list items from first combo box content control found in the selection. + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,comboBoxContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,comboBoxContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log(`About to delete the list from the combo box content control with ID: ${selectedContentControl.id}`); + selectedContentControl.comboBoxContentControl.deleteAllListItems(); + await context.sync(); + + console.log("Deleted the list from the combo box content control."); + }); + } + + async function deleteComboBoxContentControl() { + // Deletes the first combo box content control found in the selection. + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log(`About to delete combo box content control with id: ${selectedContentControl.id}`); + selectedContentControl.delete(false); + await context.sync(); + + console.log("Deleted combo box content control."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph.", "Start"); + body.insertParagraph("Inserting another paragraph.", "Start"); + body.insertParagraph( + "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", + "Start" + ); + body.paragraphs + .getLast() + .insertText( + "Use add-in commands to extend the Word UI and launch task panes that run JavaScript that interacts with the content in a Word document. Any code that you can run in a browser can run in a Word add-in. Add-ins that interact with content in a Word document create requests to act on Word objects and synchronize object state.", + "Replace" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + if (error.code === Word.ErrorCodes.itemNotFound) { + console.warn("No combo box content control is currently selected."); + } else { + console.error(error); + } + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to insert, change, and delete combo box content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+

+ Insert a combo box content control after selected text. + +

+

+

Add a unique list item to the first combo box content control found in your selected + content. +
+ + + +

+

+ Delete all list items from the first combo box content control found in your selected content. + +

+

+ Delete the first combo box content control found in your selected content. + +

+
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml b/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml new file mode 100644 index 000000000..dc2f60b72 --- /dev/null +++ b/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml @@ -0,0 +1,233 @@ +id: word-insert-and-change-dropdown-list-content-control +name: Manage dropdown list content controls +description: 'Inserts, updates, and deletes dropdown list content controls.' +host: WORD +api_set: + WordApi: '1.9' +script: + content: | + $("#insert-control").on("click", () => tryCatch(insertDropdownListContentControl)); + $("#add-item").on("click", () => tryCatch(addItemToDropdownListContentControl)); + $("#delete-list").on("click", () => tryCatch(deleteListFromDropdownListContentControl)); + $("#delete-control").on("click", () => tryCatch(deleteDropdownListContentControl)); + $("#setup").on("click", () => tryCatch(setup)); + + async function insertDropdownListContentControl() { + // Places a dropdown list content control at the end of the selection. + await Word.run(async (context) => { + let selection = context.document.getSelection(); + selection.getRange(Word.RangeLocation.end).insertContentControl(Word.ContentControlType.dropDownList); + await context.sync(); + + console.log("Dropdown list content control inserted at the end of the selection."); + }); + } + + async function addItemToDropdownListContentControl() { + // Adds the provided list item to the first dropdown list content control in the selection. + await Word.run(async (context) => { + const listItem = $("#item-to-add") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,dropDownListContentControl"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,dropDownListContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.dropDownListContentControl.addListItem(listItem); + await context.sync(); + + console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + }); + } + + async function deleteListFromDropdownListContentControl() { + // Deletes the list items from first dropdown list content control found in the selection. + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,dropDownListContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,dropDownListContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log( + `About to delete the list from the dropdown list content control with ID: ${selectedContentControl.id}` + ); + selectedContentControl.dropDownListContentControl.deleteAllListItems(); + await context.sync(); + + console.log("Deleted the list from the dropdown list content control."); + }); + } + + async function deleteDropdownListContentControl() { + // Deletes the first dropdown list content control found in the selection. + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log(`About to delete dropdown list content control with id: ${selectedContentControl.id}`); + selectedContentControl.delete(false); + await context.sync(); + + console.log("Deleted dropdown list content control."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph.", "Start"); + body.insertParagraph("Inserting another paragraph.", "Start"); + body.insertParagraph( + "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", + "Start" + ); + body.paragraphs + .getLast() + .insertText( + "Use add-in commands to extend the Word UI and launch task panes that run JavaScript that interacts with the content in a Word document. Any code that you can run in a browser can run in a Word add-in. Add-ins that interact with content in a Word document create requests to act on Word objects and synchronize object state.", + "Replace" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + if (error.code === Word.ErrorCodes.itemNotFound) { + console.warn("No dropdown list content control is currently selected."); + } else { + console.error(error); + } + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to insert, change, and delete dropdown list content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+

+ Insert a dropdown list content control after selected text. + +

+

+

Add a unique list item to the first dropdown list content control found in your selected + content. +
+ + + +

+

+ Delete all list items from the first dropdown list content control found in your selected content. + +

+

+ Delete the first dropdown list content control found in your selected content. + +

+
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/word.json b/view-prod/word.json index e58d24847..684bee8bb 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -51,6 +51,8 @@ "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml", + "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", + "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml", diff --git a/view/word.json b/view/word.json index cad827457..5438300cb 100644 --- a/view/word.json +++ b/view/word.json @@ -51,6 +51,8 @@ "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/compare-documents.yaml", + "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", + "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml", From 98d129cda3f023e846922b15f45d3d7dbc932cd5 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 27 Jun 2024 16:48:20 -0700 Subject: [PATCH 075/156] [Word] Metadata mappings for lists content control objects (#912) --- snippet-extractor-metadata/word.xlsx | Bin 25478 -> 25871 bytes snippet-extractor-output/snippets.yaml | 276 +++++++++++++++++++++++++ 2 files changed, 276 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 5c4453980b5cecc311221003fba40d2eb56a641f..a2d86efa4ef1d237fb744ea57f8fa522c1629533 100644 GIT binary patch delta 18030 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 TS&9u)V$9?xDXMG@@gQpf`kr2N diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 669675b6f..6040022d3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -16980,6 +16980,101 @@ await Word.run(async (context) => { context.document.close(Word.CloseBehavior.save); }); +'Word.ComboBoxContentControl:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + + + // Places a combo box content control at the end of the selection. + + await Word.run(async (context) => { + let selection = context.document.getSelection(); + selection.getRange(Word.RangeLocation.end).insertContentControl(Word.ContentControlType.comboBox); + await context.sync(); + + console.log("Combo box content control inserted at the end of the selection."); + }); +'Word.ComboBoxContentControl#addListItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + + + // Adds the provided list item to the first combo box content control in the + selection. + + await Word.run(async (context) => { + const listItem = $("#item-to-add") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,comboBoxContentControl"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,comboBoxContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.comboBoxContentControl.addListItem(listItem); + await context.sync(); + + console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + }); +'Word.ComboBoxContentControl#deleteAllListItems:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + + + // Deletes the list items from first combo box content control found in the + selection. + + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,comboBoxContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,comboBoxContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log(`About to delete the list from the combo box content control with ID: ${selectedContentControl.id}`); + selectedContentControl.comboBoxContentControl.deleteAllListItems(); + await context.sync(); + + console.log("Deleted the list from the combo box content control."); + }); 'Word.Comment:class': - >- // Link to full sample: @@ -17521,6 +17616,90 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); +'Word.ContentControl#comboBoxContentControl:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + + + // Adds the provided list item to the first combo box content control in the + selection. + + await Word.run(async (context) => { + const listItem = $("#item-to-add") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,comboBoxContentControl"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,comboBoxContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.comboBoxContentControl.addListItem(listItem); + await context.sync(); + + console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + }); +'Word.ContentControl#dropDownListContentControl:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + + + // Adds the provided list item to the first dropdown list content control in + the selection. + + await Word.run(async (context) => { + const listItem = $("#item-to-add") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,dropDownListContentControl"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,dropDownListContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.dropDownListContentControl.addListItem(listItem); + await context.sync(); + + console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + }); 'Word.ContentControl#onDataChanged:member': - >- // Link to full sample: @@ -19495,6 +19674,103 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); +'Word.DropDownListContentControl:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + + + // Places a dropdown list content control at the end of the selection. + + await Word.run(async (context) => { + let selection = context.document.getSelection(); + selection.getRange(Word.RangeLocation.end).insertContentControl(Word.ContentControlType.dropDownList); + await context.sync(); + + console.log("Dropdown list content control inserted at the end of the selection."); + }); +'Word.DropDownListContentControl#addListItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + + + // Adds the provided list item to the first dropdown list content control in + the selection. + + await Word.run(async (context) => { + const listItem = $("#item-to-add") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,dropDownListContentControl"); + + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,dropDownListContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.dropDownListContentControl.addListItem(listItem); + await context.sync(); + + console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + }); +'Word.DropDownListContentControl#deleteAllListItems:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + + + // Deletes the list items from first dropdown list content control found in + the selection. + + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,dropDownListContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,dropDownListContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + console.log( + `About to delete the list from the dropdown list content control with ID: ${selectedContentControl.id}` + ); + selectedContentControl.dropDownListContentControl.deleteAllListItems(); + await context.sync(); + + console.log("Deleted the list from the dropdown list content control."); + }); 'Word.ErrorCodes:enum': - >- // Link to full sample: From 89b17c0ab4cda980ad26aaf0dcaf517a4532b2d2 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 28 Jun 2024 09:37:48 -0700 Subject: [PATCH 076/156] [Word] (content controls) Expand snippet to include setting and resetting state (#914) --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + .../insert-and-change-content-controls.yaml | 208 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 25871 -> 25979 bytes snippet-extractor-output/snippets.yaml | 71 ++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 299 insertions(+) create mode 100644 samples/word/99-preview-apis/insert-and-change-content-controls.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index ab5fc76e7..f36f2e1a7 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -524,6 +524,15 @@ group: Preview APIs api_set: WordApi: '1.9' +- id: word-insert-and-change-content-controls + name: Content control basics + fileName: insert-and-change-content-controls.yaml + description: 'Inserts, updates, and retrieves content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml + group: Preview APIs + api_set: + WordApi: '1.9' - id: word-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls fileName: insert-and-change-dropdown-list-content-control.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index b7b2d39a3..d1f90c5d0 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -524,6 +524,15 @@ group: Preview APIs api_set: WordApi: '1.9' +- id: word-insert-and-change-content-controls + name: Content control basics + fileName: insert-and-change-content-controls.yaml + description: 'Inserts, updates, and retrieves content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml + group: Preview APIs + api_set: + WordApi: '1.9' - id: word-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls fileName: insert-and-change-dropdown-list-content-control.yaml diff --git a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml new file mode 100644 index 000000000..8b3b46f77 --- /dev/null +++ b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -0,0 +1,208 @@ +id: word-insert-and-change-content-controls +name: Content control basics +description: 'Inserts, updates, and retrieves content controls.' +author: OfficeDev +host: WORD +api_set: + WordApi: '1.9' +script: + content: | + $("#insert-controls").on("click", () => tryCatch(insertContentControls)); + $("#change-controls").on("click", () => tryCatch(modifyContentControls)); + $("#set-state").on("click", () => tryCatch(setState)); + $("#reset-state").on("click", () => tryCatch(resetState)); + $("#setup").on("click", () => tryCatch(setup)); + + async function insertContentControls() { + // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags. + await Word.run(async (context) => { + let paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // Don't need any properties; just wrap each paragraph with a content control. + + await context.sync(); + + for (let i = 0; i < paragraphs.items.length; i++) { + let contentControl = paragraphs.items[i].insertContentControl(); + // For even, tag "even". + if (i % 2 === 0) { + contentControl.tag = "even"; + } else { + contentControl.tag = "odd"; + } + } + console.log("Content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); + } + + async function modifyContentControls() { + // Adds title and colors to odd and even content controls and changes their appearance. + await Word.run(async (context) => { + // Get the complete sentence (as range) associated with the insertion point. + let evenContentControls = context.document.contentControls.getByTag("even"); + let oddContentControls = context.document.contentControls.getByTag("odd"); + evenContentControls.load("length"); + oddContentControls.load("length"); + + await context.sync(); + + for (let i = 0; i < evenContentControls.items.length; i++) { + // Change a few properties and append a paragraph. + evenContentControls.items[i].set({ + color: "red", + title: "Odd ContentControl #" + (i + 1), + appearance: Word.ContentControlAppearance.tags + }); + evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); + } + + for (let j = 0; j < oddContentControls.items.length; j++) { + // Change a few properties and append a paragraph. + oddContentControls.items[j].set({ + color: "green", + title: "Even ContentControl #" + (j + 1), + appearance: "Tags" + }); + oddContentControls.items[j].insertHtml("This is an even content control", "End"); + } + + await context.sync(); + }); + } + + async function setState() { + // Sets the state of the first content control. + await Word.run(async (context) => { + const state = ($("#state-to-set").val() as unknown) as Word.ContentControlState; + let firstContentControl = context.document.contentControls.getFirstOrNullObject(); + await context.sync(); + + if (firstContentControl.isNullObject) { + console.warn("There are no content controls in this document."); + return; + } + + firstContentControl.setState(state); + firstContentControl.load("id"); + await context.sync(); + + console.log(`Set state of first content control with ID ${firstContentControl.id} to ${state}.`); + }); + } + + async function resetState() { + // Resets the state of the first content control. + await Word.run(async (context) => { + let firstContentControl = context.document.contentControls.getFirstOrNullObject(); + await context.sync(); + + if (firstContentControl.isNullObject) { + console.warn("There are no content controls in this document."); + return; + } + + firstContentControl.resetState(); + firstContentControl.load("id"); + await context.sync(); + + console.log(`Reset state of first content control with ID: ${firstContentControl.id}`); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph.", "Start"); + body.insertParagraph("Inserting another paragraph.", "Start"); + body.insertParagraph( + "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", + "Start" + ); + body.paragraphs + .getLast() + .insertText( + "Use add-in commands to extend the Word UI and launch task panes that run JavaScript that interacts with the content in a Word document. Any code that you can run in a browser can run in a Word add-in. Add-ins that interact with content in a Word document create requests to act on Word objects and synchronize object state.", + "Replace" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to insert content controls and change their properties. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ Insert content controls on each paragraph. + +

+ Modify content control appearance and content. + +

+ Set state of first content control. +
+ + + +

+ Reset state of first content control. + +

+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index a2d86efa4ef1d237fb744ea57f8fa522c1629533..6de06d568e1fcaa9c00a957b76cf3c7fee3f267b 100644 GIT binary patch delta 18103 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Πp|REgB3z9o_fh)KQx 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 delta 17959 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 VCJUz8GQEnO9FVHY#+e9G0suWKCh-6O diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 6040022d3..6d9b3d20f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -17532,6 +17532,29 @@ await context.sync(); } }); +'Word.ContentControl#resetState:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml + + + // Resets the state of the first content control. + + await Word.run(async (context) => { + let firstContentControl = context.document.contentControls.getFirstOrNullObject(); + await context.sync(); + + if (firstContentControl.isNullObject) { + console.warn("There are no content controls in this document."); + return; + } + + firstContentControl.resetState(); + firstContentControl.load("id"); + await context.sync(); + + console.log(`Reset state of first content control with ID: ${firstContentControl.id}`); + }); 'Word.ContentControl#set:member(1)': - >- // Link to full sample: @@ -17572,6 +17595,30 @@ await context.sync(); }); +'Word.ContentControl#setState:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml + + + // Sets the state of the first content control. + + await Word.run(async (context) => { + const state = ($("#state-to-set").val() as unknown) as Word.ContentControlState; + let firstContentControl = context.document.contentControls.getFirstOrNullObject(); + await context.sync(); + + if (firstContentControl.isNullObject) { + console.warn("There are no content controls in this document."); + return; + } + + firstContentControl.setState(state); + firstContentControl.load("id"); + await context.sync(); + + console.log(`Set state of first content control with ID ${firstContentControl.id} to ${state}.`); + }); 'Word.ContentControl#checkboxContentControl:member': - >- // Link to full sample: @@ -18257,6 +18304,30 @@ console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } +'Word.ContentControlState:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml + + + // Sets the state of the first content control. + + await Word.run(async (context) => { + const state = ($("#state-to-set").val() as unknown) as Word.ContentControlState; + let firstContentControl = context.document.contentControls.getFirstOrNullObject(); + await context.sync(); + + if (firstContentControl.isNullObject) { + console.warn("There are no content controls in this document."); + return; + } + + firstContentControl.setState(state); + firstContentControl.load("id"); + await context.sync(); + + console.log(`Set state of first content control with ID ${firstContentControl.id} to ${state}.`); + }); 'Word.ContentControlType:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 684bee8bb..5a0d62f2d 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -52,6 +52,7 @@ "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", + "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", diff --git a/view/word.json b/view/word.json index 5438300cb..b53060d32 100644 --- a/view/word.json +++ b/view/word.json @@ -52,6 +52,7 @@ "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", + "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", From 8e05cd8baec53b244d90a3bde146a3ee0186e63a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 1 Jul 2024 14:05:54 -0700 Subject: [PATCH 077/156] [Word] (content controls) Expand list snippets (#916) --- ...-and-change-combo-box-content-control.yaml | 112 +++++- ...-change-dropdown-list-content-control.yaml | 108 +++++- snippet-extractor-metadata/word.xlsx | Bin 25979 -> 26205 bytes snippet-extractor-output/snippets.yaml | 331 +++++++++++++++++- 4 files changed, 521 insertions(+), 30 deletions(-) diff --git a/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml b/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml index b798fbeb3..f15891798 100644 --- a/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml +++ b/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml @@ -8,6 +8,8 @@ script: content: | $("#insert-control").on("click", () => tryCatch(insertComboBoxContentControl)); $("#add-item").on("click", () => tryCatch(addItemToComboBoxContentControl)); + $("#get-items").on("click", () => tryCatch(getListFromComboBoxContentControl)); + $("#delete-item").on("click", () => tryCatch(deleteItemFromComboBoxContentControl)); $("#delete-list").on("click", () => tryCatch(deleteListFromComboBoxContentControl)); $("#delete-control").on("click", () => tryCatch(deleteComboBoxContentControl)); $("#setup").on("click", () => tryCatch(setup)); @@ -26,7 +28,7 @@ script: async function addItemToComboBoxContentControl() { // Adds the provided list item to the first combo box content control in the selection. await Word.run(async (context) => { - const listItem = $("#item-to-add") + const listItemText = $("#item-to-add") .val() .toString() .trim(); @@ -37,7 +39,76 @@ script: }) .getFirstOrNullObject(); selectedContentControl.load("id,comboBoxContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,comboBoxContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.comboBoxContentControl.addListItem(listItemText); + await context.sync(); + + console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); + }); + } + + async function getListFromComboBoxContentControl() { + // Gets the list items from the first combo box content control found in the selection. + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,comboBoxContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,comboBoxContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.comboBox) { + console.warn("No combo box content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + let selectedComboBox: Word.ComboBoxContentControl = selectedContentControl.comboBoxContentControl; + selectedComboBox.listItems.load("items"); + await context.sync(); + + const currentItems: Word.ContentControlListItemCollection = selectedComboBox.listItems; + console.log(`The list from the combo box content control with ID ${selectedContentControl.id}:`, currentItems); + }); + } + + async function deleteItemFromComboBoxContentControl() { + // Deletes the provided list item from the first combo box content control in the selection. + await Word.run(async (context) => { + const listItemText = $("#item-to-delete") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.comboBox] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,comboBoxContentControl"); await context.sync(); if (selectedContentControl.isNullObject) { @@ -53,10 +124,21 @@ script: } } - selectedContentControl.comboBoxContentControl.addListItem(listItem); + let selectedComboBox: Word.ComboBoxContentControl = selectedContentControl.comboBoxContentControl; + selectedComboBox.listItems.load("items/*"); + await context.sync(); + + let listItems: Word.ContentControlListItemCollection = selectedContentControl.comboBoxContentControl.listItems; + let itemToDelete: Word.ContentControlListItem = listItems.items.find((item) => item.displayText === listItemText); + if (!itemToDelete) { + console.warn(`List item doesn't exist in control with ID ${selectedContentControl.id}: ${listItemText}`); + return; + } + + itemToDelete.delete(); await context.sync(); - console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); } @@ -85,7 +167,7 @@ script: } } - console.log(`About to delete the list from the combo box content control with ID: ${selectedContentControl.id}`); + console.log(`About to delete the list from the combo box content control with ID ${selectedContentControl.id}`); selectedContentControl.comboBoxContentControl.deleteAllListItems(); await context.sync(); @@ -118,7 +200,7 @@ script: } } - console.log(`About to delete combo box content control with id: ${selectedContentControl.id}`); + console.log(`About to delete combo box content control with ID ${selectedContentControl.id}`); selectedContentControl.delete(false); await context.sync(); @@ -190,11 +272,27 @@ template: Add item

+

+ Get all list items from the first combo box content control found in your selected content. + +

+

+

Delete a list item from the first combo box content control found in your selected + content. +
+ + + +

Delete all list items from the first combo box content control found in your selected content. + Delete list +

Delete the first combo box content control found in your selected content. diff --git a/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml b/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml index dc2f60b72..b3b369c32 100644 --- a/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml +++ b/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml @@ -8,6 +8,8 @@ script: content: | $("#insert-control").on("click", () => tryCatch(insertDropdownListContentControl)); $("#add-item").on("click", () => tryCatch(addItemToDropdownListContentControl)); + $("#get-items").on("click", () => tryCatch(getListFromDropdownListContentControl)); + $("#delete-item").on("click", () => tryCatch(deleteItemFromDropdownListContentControl)); $("#delete-list").on("click", () => tryCatch(deleteListFromDropdownListContentControl)); $("#delete-control").on("click", () => tryCatch(deleteDropdownListContentControl)); $("#setup").on("click", () => tryCatch(setup)); @@ -26,7 +28,7 @@ script: async function addItemToDropdownListContentControl() { // Adds the provided list item to the first dropdown list content control in the selection. await Word.run(async (context) => { - const listItem = $("#item-to-add") + const listItemText = $("#item-to-add") .val() .toString() .trim(); @@ -37,7 +39,38 @@ script: }) .getFirstOrNullObject(); selectedContentControl.load("id,dropDownListContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,dropDownListContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + selectedContentControl.dropDownListContentControl.addListItem(listItemText); + await context.sync(); + + console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); + }); + } + async function getListFromDropdownListContentControl() { + // Gets the list items from the first dropdown list content control found in the selection. + await Word.run(async (context) => { + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,dropDownListContentControl"); await context.sync(); if (selectedContentControl.isNullObject) { @@ -53,10 +86,59 @@ script: } } - selectedContentControl.dropDownListContentControl.addListItem(listItem); + let selectedDropdownList: Word.DropDownListContentControl = selectedContentControl.dropDownListContentControl; + selectedDropdownList.listItems.load("items"); await context.sync(); - console.log(`List item ${listItem} added to control with ID: ${selectedContentControl.id}`); + const currentItems: Word.ContentControlListItemCollection = selectedDropdownList.listItems; + console.log(`The list from the dropdown list content control with ID ${selectedContentControl.id}:`, currentItems); + }); + } + + async function deleteItemFromDropdownListContentControl() { + // Deletes the provided list item from the first dropdown list content control in the selection. + await Word.run(async (context) => { + const listItemText = $("#item-to-delete") + .val() + .toString() + .trim(); + const selectedRange: Word.Range = context.document.getSelection(); + let selectedContentControl = selectedRange + .getContentControls({ + types: [Word.ContentControlType.dropDownList] + }) + .getFirstOrNullObject(); + selectedContentControl.load("id,dropDownListContentControl"); + await context.sync(); + + if (selectedContentControl.isNullObject) { + const parentContentControl: Word.ContentControl = selectedRange.parentContentControl; + parentContentControl.load("id,type,dropDownListContentControl"); + await context.sync(); + + if (parentContentControl.isNullObject || parentContentControl.type !== Word.ContentControlType.dropDownList) { + console.warn("No dropdown list content control is currently selected."); + return; + } else { + selectedContentControl = parentContentControl; + } + } + + let selectedDropdownList: Word.DropDownListContentControl = selectedContentControl.dropDownListContentControl; + selectedDropdownList.listItems.load("items/*"); + await context.sync(); + + let listItems: Word.ContentControlListItemCollection = selectedContentControl.dropDownListContentControl.listItems; + let itemToDelete: Word.ContentControlListItem = listItems.items.find((item) => item.displayText === listItemText); + if (!itemToDelete) { + console.warn(`List item doesn't exist in control with ID ${selectedContentControl.id}: ${listItemText}`) + return; + } + + itemToDelete.delete(); + await context.sync(); + + console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); } @@ -86,7 +168,7 @@ script: } console.log( - `About to delete the list from the dropdown list content control with ID: ${selectedContentControl.id}` + `About to delete the list from the dropdown list content control with ID ${selectedContentControl.id}` ); selectedContentControl.dropDownListContentControl.deleteAllListItems(); await context.sync(); @@ -120,7 +202,7 @@ script: } } - console.log(`About to delete dropdown list content control with id: ${selectedContentControl.id}`); + console.log(`About to delete dropdown list content control with ID ${selectedContentControl.id}`); selectedContentControl.delete(false); await context.sync(); @@ -192,6 +274,22 @@ template: Add item

+

+ Get all list items from the first dropdown list content control found in your selected content. + +

+

+

Delete a list item from the first dropdown list content control found in your selected + content. +
+ + + +

Delete all list items from the first dropdown list content control found in your selected content. +

+ + + + + + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + core-js@2.4.1/client/core.min.js + @types/core-js + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/99-preview-apis/manage-styles.yaml b/samples/word/99-preview-apis/manage-styles.yaml index 58f2b7ade..4145aaf6b 100644 --- a/samples/word/99-preview-apis/manage-styles.yaml +++ b/samples/word/99-preview-apis/manage-styles.yaml @@ -3,7 +3,7 @@ name: Manage styles description: This sample shows how to perform operations on the styles in the current document and how to add and delete custom styles. host: WORD api_set: - WordApi: '1.8' + WordApi: '1.9' script: content: | $("#count").on("click", () => tryCatch(getCount)); diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index c8248b07b653d404b29f6705fceef79712fa4c96..9a59673d38a44436ad68d1f159b6d694c42cdf0d 100644 GIT binary patch delta 18877 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 delta 18643 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index e51d3a1de..c5afc9984 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -21024,6 +21024,42 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); +'Word.ListBuiltInNumberStyle:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + + + // Gets the properties of the specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to get properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load("type"); + await context.sync(); + + if (style.isNullObject || style.type != Word.StyleType.list) { + console.warn(`There's no existing style with the name '${styleName}'. Or this isn't a list style.`); + } else { + // Load objects to log properties and their values in the console. + style.load(); + style.listTemplate.load(); + await context.sync(); + + console.log(`Properties of the '${styleName}' style:`, style); + + const listLevels = style.listTemplate.listLevels; + listLevels.load("items"); + await context.sync(); + + console.log(`List levels of the '${styleName}' style:`, listLevels); + } + }); 'Word.ListBullet:enum': - >- // Link to full sample: @@ -21131,6 +21167,78 @@ await context.sync(); }); +'Word.ListLevel:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + + + // Gets the properties of the specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to get properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load("type"); + await context.sync(); + + if (style.isNullObject || style.type != Word.StyleType.list) { + console.warn(`There's no existing style with the name '${styleName}'. Or this isn't a list style.`); + } else { + // Load objects to log properties and their values in the console. + style.load(); + style.listTemplate.load(); + await context.sync(); + + console.log(`Properties of the '${styleName}' style:`, style); + + const listLevels = style.listTemplate.listLevels; + listLevels.load("items"); + await context.sync(); + + console.log(`List levels of the '${styleName}' style:`, listLevels); + } + }); +'Word.ListLevelCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + + + // Gets the properties of the specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to get properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load("type"); + await context.sync(); + + if (style.isNullObject || style.type != Word.StyleType.list) { + console.warn(`There's no existing style with the name '${styleName}'. Or this isn't a list style.`); + } else { + // Load objects to log properties and their values in the console. + style.load(); + style.listTemplate.load(); + await context.sync(); + + console.log(`Properties of the '${styleName}' style:`, style); + + const listLevels = style.listTemplate.listLevels; + listLevels.load("items"); + await context.sync(); + + console.log(`List levels of the '${styleName}' style:`, listLevels); + } + }); 'Word.ListLevelType:enum': - >- // Link to full sample: @@ -21206,6 +21314,42 @@ await context.sync(); }); +'Word.ListTemplate:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + + + // Gets the properties of the specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to get properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load("type"); + await context.sync(); + + if (style.isNullObject || style.type != Word.StyleType.list) { + console.warn(`There's no existing style with the name '${styleName}'. Or this isn't a list style.`); + } else { + // Load objects to log properties and their values in the console. + style.load(); + style.listTemplate.load(); + await context.sync(); + + console.log(`Properties of the '${styleName}' style:`, style); + + const listLevels = style.listTemplate.listLevels; + listLevels.load("items"); + await context.sync(); + + console.log(`List levels of the '${styleName}' style:`, listLevels); + } + }); 'Word.LocationRelation:enum': - >- // Link to full sample: @@ -22706,6 +22850,42 @@ console.log(`Successfully updated font properties of the '${styleName}' style.`); } }); +'Word.Style#listTemplate:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + + + // Gets the properties of the specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to get properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load("type"); + await context.sync(); + + if (style.isNullObject || style.type != Word.StyleType.list) { + console.warn(`There's no existing style with the name '${styleName}'. Or this isn't a list style.`); + } else { + // Load objects to log properties and their values in the console. + style.load(); + style.listTemplate.load(); + await context.sync(); + + console.log(`Properties of the '${styleName}' style:`, style); + + const listLevels = style.listTemplate.listLevels; + listLevels.load("items"); + await context.sync(); + + console.log(`List levels of the '${styleName}' style:`, listLevels); + } + }); 'Word.Style#nameLocal:member': - >- // Link to full sample: @@ -23479,6 +23659,42 @@ console.log(nextTrackedChange); }); +'Word.TrailingCharacter:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + + + // Gets the properties of the specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to get properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load("type"); + await context.sync(); + + if (style.isNullObject || style.type != Word.StyleType.list) { + console.warn(`There's no existing style with the name '${styleName}'. Or this isn't a list style.`); + } else { + // Load objects to log properties and their values in the console. + style.load(); + style.listTemplate.load(); + await context.sync(); + + console.log(`Properties of the '${styleName}' style:`, style); + + const listLevels = style.listTemplate.listLevels; + listLevels.load("items"); + await context.sync(); + + console.log(`List levels of the '${styleName}' style:`, listLevels); + } + }); 'Word.VerticalAlignment:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 5a0d62f2d..37f0b1a50 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -55,6 +55,7 @@ "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" diff --git a/view/word.json b/view/word.json index b53060d32..e66ed8d05 100644 --- a/view/word.json +++ b/view/word.json @@ -55,6 +55,7 @@ "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", + "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-list-styles.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" From 7e0ae3561cb8835abe674cd1d0513c42f8c3be94 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 9 Jul 2024 12:01:20 -0700 Subject: [PATCH 080/156] [Word] (preview) Expand styles sample to include Shading (#922) --- .../word/99-preview-apis/manage-styles.yaml | 41 +++++- snippet-extractor-metadata/word.xlsx | Bin 26725 -> 26886 bytes snippet-extractor-output/snippets.yaml | 135 ++++++++++++++++++ 3 files changed, 173 insertions(+), 3 deletions(-) diff --git a/samples/word/99-preview-apis/manage-styles.yaml b/samples/word/99-preview-apis/manage-styles.yaml index 4145aaf6b..0dcb60284 100644 --- a/samples/word/99-preview-apis/manage-styles.yaml +++ b/samples/word/99-preview-apis/manage-styles.yaml @@ -13,6 +13,7 @@ script: $("#font-properties").on("click", () => tryCatch(setFontProperties)); $("#paragraph-format").on("click", () => tryCatch(setParagraphFormat)); $("#border-properties").on("click", () => tryCatch(setBorderProperties)); + $("#shading-properties").on("click", () => tryCatch(setShadingProperties)); $("#delete-style").on("click", () => tryCatch(deleteStyle)); async function getCount() { @@ -185,6 +186,35 @@ script: }); } + async function setShadingProperties() { + // Updates shading properties (e.g., texture, pattern colors) of the specified style. + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update shading properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const shading: Word.Shading = style.shading; + shading.load(); + await context.sync(); + + shading.backgroundPatternColor = "blue"; + shading.foregroundPatternColor = "yellow"; + shading.texture = Word.ShadingTextureType.darkTrellis; + + console.log("Updated shading."); + } + }); + } + async function deleteStyle() { // Deletes the custom style. await Word.run(async (context) => { @@ -228,8 +258,8 @@ template:

Get current number of styles

+ Get count +

Add a custom style

@@ -280,7 +310,12 @@ template:
Set outside border type to dashed, width to pt. 0.25, and color to green.
+ +

+

Set texture to DarkTrellis, foreground pattern color to yellow, and background pattern color to blue.
+

Delete custom style

diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 9a59673d38a44436ad68d1f159b6d694c42cdf0d..3cb09419f09670c55483cf8c0020346b3cf2e762 100644 GIT binary patch delta 18981 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 delta 18868 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 WRMC!vT- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + + // Updates shading properties (e.g., texture, pattern colors) of the + specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update shading properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const shading: Word.Shading = style.shading; + shading.load(); + await context.sync(); + + shading.backgroundPatternColor = "blue"; + shading.foregroundPatternColor = "yellow"; + shading.texture = Word.ShadingTextureType.darkTrellis; + + console.log("Updated shading."); + } + }); +'Word.ShadingTextureType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + + // Updates shading properties (e.g., texture, pattern colors) of the + specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update shading properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const shading: Word.Shading = style.shading; + shading.load(); + await context.sync(); + + shading.backgroundPatternColor = "blue"; + shading.foregroundPatternColor = "yellow"; + shading.texture = Word.ShadingTextureType.darkTrellis; + + console.log("Updated shading."); + } + }); 'Word.Style#delete:member(1)': - >- // Link to full sample: @@ -22822,6 +22890,39 @@ console.log(`Successfully deleted custom style '${styleName}'.`); } }); +'Word.Style#borders:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + + // Updates border properties (e.g., type, width, color) of the specified + style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update border properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const borders: Word.BorderCollection = style.borders; + borders.load("items"); + await context.sync(); + + borders.outsideBorderType = Word.BorderType.dashed; + borders.outsideBorderWidth = Word.BorderWidth.pt025; + borders.outsideBorderColor = "green"; + console.log("Updated outside borders."); + } + }); 'Word.Style#font:member': - >- // Link to full sample: @@ -22949,6 +23050,40 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); +'Word.Style#shading:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + + + // Updates shading properties (e.g., texture, pattern colors) of the + specified style. + + await Word.run(async (context) => { + const styleName = $("#style-name").val() as string; + if (styleName == "") { + console.warn("Enter a style name to update shading properties."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else { + const shading: Word.Shading = style.shading; + shading.load(); + await context.sync(); + + shading.backgroundPatternColor = "blue"; + shading.foregroundPatternColor = "yellow"; + shading.texture = Word.ShadingTextureType.darkTrellis; + + console.log("Updated shading."); + } + }); 'Word.StyleCollection#getByNameOrNullObject:member(1)': - >- // Link to full sample: From 60a376cdea23712e8681c2ae8b625b7188e15606 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:58:36 -0700 Subject: [PATCH 081/156] [PowerPoint] (Shapes) Add PowerPoint snippet for shape selection by type (#905) * Add powerpoint snippet for shape selection by type * Additional mapping * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Run yarn start with review suggestions --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/powerpoint.yaml | 9 ++ playlists/powerpoint.yaml | 9 ++ .../powerpoint/shapes/get-shapes-by-type.yaml | 148 ++++++++++++++++++ snippet-extractor-metadata/powerpoint.xlsx | Bin 13612 -> 13554 bytes snippet-extractor-output/snippets.yaml | 132 ++++++++++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 7 files changed, 300 insertions(+) create mode 100644 samples/powerpoint/shapes/get-shapes-by-type.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 3bfa5ef68..b49e82491 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -69,6 +69,15 @@ group: Shapes api_set: PowerPointApi: '1.5' +- id: powerpoint-shapes-get-shapes-by-type + name: Select shapes by type + fileName: get-shapes-by-type.yaml + description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + group: Shapes + api_set: + PowerPointApi: '1.4' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 0f2e5ad78..753885a9c 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -69,6 +69,15 @@ group: Shapes api_set: PowerPointApi: '1.5' +- id: powerpoint-shapes-get-shapes-by-type + name: Select shapes by type + fileName: get-shapes-by-type.yaml + description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml + group: Shapes + api_set: + PowerPointApi: '1.4' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml new file mode 100644 index 000000000..770e0581a --- /dev/null +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -0,0 +1,148 @@ +order: 3 +id: powerpoint-shapes-get-shapes-by-type +name: Select shapes by type +description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' +host: POWERPOINT +api_set: + PowerPointApi: '1.4' +script: + content: | + $("#setup").on("click", () => tryCatch(setup)); + $("#change-lines").on("click", () => tryCatch(changeLines)); + $("#change-geometric-shapes").on("click", () => tryCatch(changeGeometricShapes)); + + async function changeLines() { + // Changes the dash style of every line in the slide. + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the dash style for shapes of the type `line`. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; + } + }); + await context.sync(); + }); + } + + async function changeGeometricShapes() { + // Changes the transparency of every geometric shape in the slide. + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the shape transparency to be halfway transparent. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.geometricShape) { + shape.fill.transparency = 0.5; + } + }); + await context.sync(); + }); + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Create shapes of different types. + const shapes = context.presentation.slides.getItemAt(0).shapes; + + // Create geometric shapes. + shapes.addGeometricShape(PowerPoint.GeometricShapeType.diamond, { + left: 100, + top: 100, + height: 150, + width: 150 + }); + shapes.addGeometricShape(PowerPoint.GeometricShapeType.octagon, { + left: 400, + top: 300, + height: 150, + width: 150 + }); + + // Create lines. + shapes.addLine(PowerPoint.ConnectorType.elbow, { + left: 400, + top: 150, + height: 20, + width: 150 + }); + shapes.addLine(PowerPoint.ConnectorType.curve, { + left: 100, + top: 300, + height: 150, + width: 20 + }); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +

+

This sample shows how select and change shapes based on their types.

+
+ +
+

Setup

+

Create some shapes in a new, blank presentation.

+

+ + +

+

Try it out

+

+ +

+ +

+

+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 5a00a35b2154e1278338f4943ff7fa6283ab7493..93e9517e267d71f9ab02a7cb574543501637aedf 100644 GIT binary patch delta 5465 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 Hcf@}ID6k;) delta 5450 zcmZ9QWmFqXv&VzGOVQ#IG=$*AJ!r7vQo*G-C57Nn9D=(ScPmheyA;&zafzFthug-ia=!HTvKxw`>CV!&oXT$L@)smuxzo8lcN!s z-%eu-!^I9Qg#z(R2v$q(pw=9eD3_8{-d0byLRgtmi%C!N>XZb()3`2+&*#TnBTSiC zmb)OJlgEf#xl#NH+f<{k#9=&Zfmh~5LuAZu@`lu-5f?39F^+?_$yD* zVfl?=#vhq{auv?CR_P#LOzR@0=+qV%o$i8X#dRsbT+I3gAjK&3(Aq7DTW5I>r{y}_ zN=>Q_Y@-=nu{B&YOA3mXAScz%aEZX^plX$uWpK{JDW(Ig?!ME@CG)=5*DlGRb-&N8 zD7fBl@InwWUZ=)2Y9|rjKe0a(@E7-4IAYFh%}K|YTD{16Z(lOCDrEMeVTSR7J$vYoGCQ-2D!cTFC;b~QT{75QTx z6NE6<*oOKDBbL8f9AR#3O;bK#t|RWUCX_W`gYOr z@wG2i7#?2V5M6V_-f`$SOrCxCsgBSe1Um}b6NuX~%p%QJ1mH_{MJGK%V; zKkozL&?hvSpNWqnUePT5n)jtG!9FcU6T}!H38!2pn`{(Z5cz_Qt(3E$=I*lb#y^d> zes+PHYnmSP$lwRC$GJOQG!`07#P;M@=?o0JM^@`F=NH8W1@I5i7@2IA?YSVe@hKX> zxPqv-XJ%7``&a-#7&p=dp9^8=&mltU%v@y)G%l9Z+vl4c5JRbO%~~qyD)GCbmk9KF zRbBw?68LlTG%=oI!SF^gN0v7Kch-Qc0?w={MZu4)iGZQbs9?w|-9VEA0P% zcEq0fnE&!zZau_IUqL>7M)8G7F%Ch^uSZnBXSE_V^L_P~EP7qMmhow%-qH(DNwGor zY9#SeEzQtrT{jTUP?0gIy=+p-g&#m6=-e;(BF{u~VZ@m2`)33Kg|Y=&HO6bI*VAawZ84MX7KvF#n(?pwjYOG5Hdp_=Vh#RPN z$NJzd`@wUfgB%fb1d>|>OcN`3Q;*7vg5q8i^51e8hxUO3%wMRSI5d%#iEsC8!AENW zFlE^lSpDNqR}Q6>kKv*zE$2iJbWeY!@aYNg&z597<+dV8~Pa9k2g!{kUKCE^Zfl z^6`~ikoHS&%X}KSzPR7MJHFYzzdyTeK6ZZk-SU0&$f(tV`}5<>=f{VIO>M7Ci@5gj zbBSw>;Fbt_h_%0ngJa(sz0f?1S5UWUoyMFe#ez+r{u$Q<>s?9r9-%TA&Buk+wwCIU z1F(>VV0<+cQMzRqg86AU0`Sg3!M0XJQ5>ap1dHUgk^Y|s9wWV za1>tT zxF|vE-Q1@oWVRy1!DXs0EkchMuzSbbY<|ch`u%1*am#4W- zS+~IMqFd&25x2zr=RSKpPtIU7TW)3b04I~1J)tXG(=Hrs3R0-CTP(V1fLTC_VQxe+ z!b8QXuKyX{L}(vsn?EOcrWfWg_8mUQbl8yQMhw$j}%E%i59cDxjRWW(F zBd;dr#f67@>bv^Tm1Cs5$EQ1Orfgj>;qmGV(5pYJ`Y@NdL58Im`l+t37r-ax110Gm zPaGh65?{uLeN>!1YqY7-FyQ{QNEKe5seG%QK-8cqVt>B&y?1c05eMH7j1qk4mkY-^ z?ZQg!!hYlWZSiC+&G=gFRJk5RSLOxKp&jnQs&ZuC z56=!PfD7fpsozK=c6+`>A=$W&%wZ>C!d_R1ZR2{;0d%dAJ7_*zj_9*CFnvZBC@ty? z6a$E9*)VPzJ7-k_EoMag2=XddKhFz1x>u8!j%yU6*$w7R$dBw|OCX$$WK?$&hqI!q zCPq#@b=yv?E9zj0?t_F^#QmEs^kA_zp1IFFS$CwiA; zutkPA;TKyhyC?}E5Rdgh34<-={bTJ;4_ofW;)3i@kEeS*`ocT;kq7K{rX#lsR2K&8 za8aI{XwlzuQDpU*cnDUTam_Oo_Yooj4QbX=-qNKZqUYhbxD&%tDZV7ku0U=Gq$)m7 zX;q0>WRMy!)FShkR31p$B=M>whOHC_ zIFG|_BT9KG3j*KM>Xs-i5d$#)V)a6HN4K_zs$KmMAs0}?fNk|RBC zDY2&OHGO*PM@Ow6TwsWX2QmmY!kQpGB^(U^5Wxok2>wc>k0Zak$9u=O?tDH@j;jVH zQJcc#{`?ox*k9luRI_4&58nz>r-mNtqyaDV>$Vjt`D6`BG)Et=o~vs9{Cvol4ot#K zR2iK1?sUH#Ub_k^gqKT{yb0W_z-Hlcm;-$Vo*aAYg9b|l6@){$Rq;L`^63379`AL3 zq@#UmF@X}GVlPqnIE*=ygqeLQ4)SkzcbV3u44(SqPF?9UJD|<{JE*br7=%e`sXxhwlvO0T=t6;m+Lf#FM37O zZ#{={XqHIzn-~+WzRv7H8>yNob1cX57i;eJy)-e+{jd1&>)RHbT zMtif`Yv#G!`uaG=p58L>@uS>TNHFVwRr*3CcMN_A;fo#CMC{*MreqWI8B4EuNun7# zMC(wW9d2YGGH~ z=)A(h935+`{fuTFE`?R2{P77jCMPEUn?1M-|VO%sssh!rWr(%qM7YGDoI^N+Mm z!D~%mOw!gdS|wp9sdM3mY^Ns~l&<`9mo?tpH77MV8o%L&+)SgM2cBAT4w*;Q%KTxiBpd!{YulC8?(#0g?Si(%g{O6Dp!v?>gd_@1!WC(dIV*l=*0C1WW=P zYzY0d-*^4ERQJnRDDUSpt};ye=F-*Br+r=rdePy99kLtsn0YzeT)iqJue4-aia?j{Z#dWIY`JL}-nDtqdQ>y}ueiGiz=uOSF8>yVLC< zH^ZowTEUoY&i}H4D=KmKcHedc-XFaaro(yb)3z(B9^?!1Vno1GD0~`EFU)8FhXPkT z>52@~qPXR%_ZSXF$ZAET@Dp&3C)j?Q)~I zO=g}^xXH$)&D&j5tTTN*b-|L~oz}u^HioGrMui(1>Xci;jaiBE2wu8n z5%TlRpuefcn!9;_8cz{Gn<7m4-SP=LRaM$=&x$J|(>)C?g$j zE`W7Za}SZh|Sg+rj(FuKL z+9kjqBEjAHxk+=0-3BxLnaB2=YLKqfQp*NvSgxW|$vFW+Hif6~Of@!F9uUnBQyWo} zCyTy>2X>IGw|?aAO48E~@s0GK-%`J>66an#}(c>$>tDl;c^Z=br{!t#7mp zFkR=HZ5Ens{Deo{C*SPKQNUqShVn1a3L-tJd<)Z_6!%aIVB!IS=UYl1+JdS-XB#;% zlU4&v;bCL7;a;T6($Ud1+LhV8<_aqVhlqI`dqbmPJMKtJ<^!$UaK1F53ru&MTt!fo z(-?vcPp*q^mq0Iu2)>13@Mwk6QHgqNS)iGrjJNb1Hk&kQTSS!Vt4^_E_@!V=^X+mZ z^sZBaBDSZxhOSP0sadyiqwv64dW?nX%#bge@F*LZT44jnhof(G{&{jMDJoh~*4azz zz1U;ESzg=+Qn@Ts-~O-?3Ng`ZT!l%lsg_TK~8R zr#jYx)c~U~q!)cQYY@P}iiuH17C=?wqxd>#|Rk;7{fBZTDe!p6L>x7NB+6 zPb7YqkVVi9I{ykr!*?Zor%KET(?^xF)9Iyi4e@KSk(c`TE6OK9@RWD=)ftiYkWUIZ zU7&azUVznzY#0!|bp#v&EEiLFrag}*VREn{xsueOypEuMETc)mr?gX-9T>&6MBm{s z3~q&r@xE5!Hn6~cUbOE)>j(CYlp2*v)Ai_YQ9o;DI?IT&$^j+4)2>ZI$zsN?rxVal zNV+XeQZ#CK`JuN#Yas;-fsfZjaIwhn^r5EWy(hoB;ap33?j2(2&3g3V(Tr z3S$gOVGClk&Z(tve@nW*S2_3he&;uM^mTa+gwHKeKH#kFPc#LVSSS^1T9K({$n+ue+;~Ljwt_&g~!WXWOf4 ziQBTt-9%I-dg6)@W=;Svm(i|Mr1`mit4yG$shYU~jgAL;RLat!2D3do7usY=d3P(S z&4|=sMmnvW6OqlWv6(t9B&n9B3s;JcR@7 z52(B@pJQO-pCl&(Q5Jeb4F2D_E_&^t)a0FTmm75NE|f_X7t&p=>;d#|qV z$-ma*nzzAv$|7)?{wT{k9s0N%-aq4_7Yyq`TCzTRt~oIUPdDsxK$ z+r)gahq^dkKhW81JDr`R)o4?ai4y?{Htn8k8NRUbj*1f=?SBxqThsm&{=_yg6F=6I zwk7a32?S=(LGe2pT}ycQ-|tD!ZG`!Mri%yxO%x{Nga9w?zw;UZfa-5G{#|-VO0Xh| zC(;zmPW#`m`L7o$G8@cD`)`i}0LcF}{yjA!7s0Zq?aas=W;UdZAQ#FU(m_z1_CHGT zmtOBM{`yjLKT;JUg`$d#fJmZZ@gWBxY?$l< H|9Jclv^plt diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a7e82d65a..b094afe34 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14818,6 +14818,28 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); +'PowerPoint.Shape#type:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the transparency of every geometric shape in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the shape transparency to be halfway transparent. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.geometricShape) { + shape.fill.transparency = 0.5; + } + }); + await context.sync(); + }); 'PowerPoint.Shape#width:member': - >- // Link to full sample: @@ -14944,6 +14966,28 @@ console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); }); +'PowerPoint.ShapeCollection#load:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the transparency of every geometric shape in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the shape transparency to be halfway transparent. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.geometricShape) { + shape.fill.transparency = 0.5; + } + }); + await context.sync(); + }); 'PowerPoint.ShapeFill#setSolidColor:member(1)': - >- // Link to full sample: @@ -14962,6 +15006,28 @@ }); await context.sync(); }); +'PowerPoint.ShapeFill#transparency:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the transparency of every geometric shape in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the shape transparency to be halfway transparent. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.geometricShape) { + shape.fill.transparency = 0.5; + } + }); + await context.sync(); + }); 'PowerPoint.ShapeFont#color:member': - >- // Link to full sample: @@ -14975,6 +15041,72 @@ textRange.font.color = "green"; await context.sync(); }); +'PowerPoint.ShapeLineDashStyle:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the dash style of every line in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the dash style for shapes of the type `line`. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; + } + }); + await context.sync(); + }); +'PowerPoint.ShapeLineFormat#dashStyle:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the dash style of every line in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the dash style for shapes of the type `line`. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; + } + }); + await context.sync(); + }); +'PowerPoint.ShapeType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the dash style of every line in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the dash style for shapes of the type `line`. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; + } + }); + await context.sync(); + }); 'PowerPoint.Slide#delete:member(1)': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index b5321196c..fc79f895f 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -7,6 +7,7 @@ "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", + "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index 2dddac939..66d395397 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -7,6 +7,7 @@ "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", + "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", From b2492b04bcc4e6456e5d8102fa5dbe57750ee32c Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 16 Jul 2024 09:48:29 -0700 Subject: [PATCH 082/156] [Word] Additional Range mappings --- snippet-extractor-metadata/word.xlsx | Bin 26886 -> 26941 bytes snippet-extractor-output/snippets.yaml | 46 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 3cb09419f09670c55483cf8c0020346b3cf2e762..9490679feaf25346f8a42f97cf9a28ce337a6a0c 100644 GIT binary patch delta 19075 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + + + await Word.run(async (context) => { + // Get the complete sentence (as range) associated with the insertion point. + const sentences: Word.RangeCollection = context.document + .getSelection() + .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); + sentences.load("$none"); + await context.sync(); + + // Expand the range to the end of the paragraph to get all the complete sentences. + const sentencesToTheEndOfParagraph: Word.RangeCollection = sentences.items[0] + .getRange() + .expandTo( + context.document + .getSelection() + .paragraphs.getFirst() + .getRange(Word.RangeLocation.end) + ) + .getTextRanges(["."], false /* Don't trim spaces*/); + sentencesToTheEndOfParagraph.load("text"); + await context.sync(); + + for (let i = 0; i < sentencesToTheEndOfParagraph.items.length; i++) { + console.log(sentencesToTheEndOfParagraph.items[i].text); + } + }); 'Word.Range#getComments:member(1)': - >- // Link to full sample: @@ -22448,6 +22479,21 @@ console.log("Deleted checkbox content control."); }); +'Word.Range#getRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + + + // Places a dropdown list content control at the end of the selection. + + await Word.run(async (context) => { + let selection = context.document.getSelection(); + selection.getRange(Word.RangeLocation.end).insertContentControl(Word.ContentControlType.dropDownList); + await context.sync(); + + console.log("Dropdown list content control inserted at the end of the selection."); + }); 'Word.Range#getReviewedText:member(1)': - >- // Link to full sample: From 8399cf4175e5c04ab98b1de46a8ab98dc8ca1a7b Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:52:31 -0700 Subject: [PATCH 083/156] [Outlook] (contextual) Retire entity-based contextual snippets (#924) * Retire entity-based contextual snippets * Apply suggestions from code review Co-authored-by: Elizabeth Samuel --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 30 +- playlists/outlook.yaml | 30 +- .../basic-entities.yaml | 101 ------ .../contextual.yaml | 89 ------ .../selected.yaml | 124 -------- .../outlook/75-regex-matches/contextual.yaml | 92 ++++++ snippet-extractor-metadata/outlook.xlsx | Bin 24677 -> 24305 bytes snippet-extractor-output/snippets.yaml | 297 +----------------- view-prod/outlook.json | 4 +- view/outlook.json | 4 +- 10 files changed, 116 insertions(+), 655 deletions(-) delete mode 100644 samples/outlook/75-entities-and-regex-matches/basic-entities.yaml delete mode 100644 samples/outlook/75-entities-and-regex-matches/contextual.yaml delete mode 100644 samples/outlook/75-entities-and-regex-matches/selected.yaml create mode 100644 samples/outlook/75-regex-matches/contextual.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index e01967dea..466af2543 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -446,33 +446,13 @@ group: Mime Headers api_set: Mailbox: '1.8' -- id: outlook-entities-and-regex-matches-basic-entities - name: Entities (Item Read) - fileName: basic-entities.yaml - description: Gets extracted entities. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - group: Entities And Regex Matches - api_set: - Mailbox: '1.1' -- id: outlook-entities-and-regex-matches-contextual - name: 'Entities and Regex matches (Item Read, contextual)' +- id: outlook-regex-matches-contextual + name: 'Get regex matches (Item Read, contextual)' fileName: contextual.yaml - description: >- - Gets extracted entities and regex matches when the add-in is opened as a - contextual add-in. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - group: Entities And Regex Matches - api_set: - Mailbox: '1.1' -- id: outlook-entities-and-regex-matches-selected - name: 'Selected entities and Regex matches (Item Read, contextual)' - fileName: selected.yaml - description: Gets selected entities and regex matches. + description: Gets regex matches when the add-in is opened as a contextual add-in. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - group: Entities And Regex Matches + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml + group: Regex Matches api_set: Mailbox: '1.6' - id: outlook-tokens-and-service-calls-ids-and-urls diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 9e2b0fac3..20fad5933 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -446,33 +446,13 @@ group: Mime Headers api_set: Mailbox: '1.8' -- id: outlook-entities-and-regex-matches-basic-entities - name: Entities (Item Read) - fileName: basic-entities.yaml - description: Gets extracted entities. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - group: Entities And Regex Matches - api_set: - Mailbox: '1.1' -- id: outlook-entities-and-regex-matches-contextual - name: 'Entities and Regex matches (Item Read, contextual)' +- id: outlook-regex-matches-contextual + name: 'Get regex matches (Item Read, contextual)' fileName: contextual.yaml - description: >- - Gets extracted entities and regex matches when the add-in is opened as a - contextual add-in. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/contextual.yaml - group: Entities And Regex Matches - api_set: - Mailbox: '1.1' -- id: outlook-entities-and-regex-matches-selected - name: 'Selected entities and Regex matches (Item Read, contextual)' - fileName: selected.yaml - description: Gets selected entities and regex matches. + description: Gets regex matches when the add-in is opened as a contextual add-in. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/selected.yaml - group: Entities And Regex Matches + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-regex-matches/contextual.yaml + group: Regex Matches api_set: Mailbox: '1.6' - id: outlook-tokens-and-service-calls-ids-and-urls diff --git a/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml b/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml deleted file mode 100644 index 5c54cbbc5..000000000 --- a/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml +++ /dev/null @@ -1,101 +0,0 @@ -id: outlook-entities-and-regex-matches-basic-entities -name: Entities (Item Read) -description: Gets extracted entities. -host: OUTLOOK -api_set: - Mailbox: '1.1' -script: - content: | - $("#getEntities").on("click", getEntities); - $("#getEntitiesByType").on("click", getEntitiesByType); - - function getEntities() { - const entities = Office.context.mailbox.item.getEntities(); - let entityTypesFound = 0; - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - if (entityTypesFound == 0) - { - console.log("No entities found on this item."); - } - } - - function getEntitiesByType() { - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); - } - language: typescript -template: - content: | -
-

This sample shows how to get extracted entities.

-

Required mode: Item Read

-
- -
-

Try it out

- - -
- language: html -style: - content: | - section.samples { - margin-top: 20px; - } - - section.samples .ms-Button, section.setup .ms-Button { - display: block; - margin-bottom: 5px; - margin-left: 20px; - min-width: 80px; - } - language: css -libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 diff --git a/samples/outlook/75-entities-and-regex-matches/contextual.yaml b/samples/outlook/75-entities-and-regex-matches/contextual.yaml deleted file mode 100644 index 54479ddcc..000000000 --- a/samples/outlook/75-entities-and-regex-matches/contextual.yaml +++ /dev/null @@ -1,89 +0,0 @@ -id: outlook-entities-and-regex-matches-contextual -name: 'Entities and Regex matches (Item Read, contextual)' -description: Gets extracted entities and regex matches when the add-in is opened as a contextual add-in. -host: OUTLOOK -api_set: - Mailbox: '1.1' -script: - content: | - $("#getFilteredEntitiesByName").on("click", getFilteredEntitiesByName); - $("#getRegExMatches").on("click", getRegExMatches); - $("#getRegExMatchesByName").on("click", getRegExMatchesByName); - - function getFilteredEntitiesByName() { - // This API would only work when you click on highlighted physical address that has the word "Way" in it. - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); - } - - function getRegExMatches() { - // This API would only work when you click on highlighted word "ScriptLab". - console.log(Office.context.mailbox.item.getRegExMatches()); - } - - function getRegExMatchesByName() { - // This API would only work when you click on highlighted word "ScriptLab". - console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); - } - - /* - This add-in declares extension point manifest rules copied below. To see it activated contextually - for address entity, try running it on an email that has "1 Microsoft Way, Redmond, WA 98052" in its content; - for regex match, try running it on an email that has "ScriptLab" in its content. - - Note: The following only applies when your add-in uses an XML manifest. Entities and contextual add-ins aren't supported when a Teams manifest for Office Add-ins (preview)(https://learn.microsoft.com/office/dev/add-ins/develop/json-manifest-overview) is in use. - - - - - - - - */ - language: typescript -template: - content: | -
- -
-

Tip: Try this out as a contextual add-in.

- - - -
- language: html -style: - content: | - section.samples { - margin-top: 20px; - } - - section.samples .ms-Button, section.setup .ms-Button { - display: block; - margin-bottom: 5px; - margin-left: 20px; - min-width: 80px; - } - language: css -libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 diff --git a/samples/outlook/75-entities-and-regex-matches/selected.yaml b/samples/outlook/75-entities-and-regex-matches/selected.yaml deleted file mode 100644 index 470812823..000000000 --- a/samples/outlook/75-entities-and-regex-matches/selected.yaml +++ /dev/null @@ -1,124 +0,0 @@ -id: outlook-entities-and-regex-matches-selected -name: 'Selected entities and Regex matches (Item Read, contextual)' -description: Gets selected entities and regex matches. -host: OUTLOOK -api_set: - Mailbox: '1.6' -script: - content: | - $("#getSelectedEntities").on("click", getSelectedEntities); - $("#getSelectedRegExMatches").on("click", getSelectedRegExMatches); - - function getSelectedEntities() { - const entities = Office.context.mailbox.item.getSelectedEntities(); - let entityTypesFound = 0; - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - if (entityTypesFound == 0) - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); - } - } - - function getSelectedRegExMatches() { - const matches = Office.context.mailbox.item.getSelectedRegExMatches(); - if (matches) { - console.log(matches); - } - else { - console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); - } - } - - /* - This add-in declares extension point manifest rules copied below. To see it activated contextually - for address entity, try running it on an email that has "1 Microsoft Way, Redmond, WA 98052" in its content; - for regex match, try running it on an email that has "ScriptLab" in its content. - - Note: The following only applies when your add-in uses an XML manifest. Entities and contextual add-ins aren't supported when a Teams manifest for Office Add-ins (preview)(https://learn.microsoft.com/office/dev/add-ins/develop/json-manifest-overview) is in use. - - - - - - - - */ - language: typescript -template: - content: | -
-

This sample shows how to get selected entities and regex matches.

-

Note: Entities and contextual add-ins only support the use of an XML manifest. These features aren't supported when your add-in uses a - Teams manifest for Office Add-ins (preview).

-

Required mode: Item Read

-
- -
-

Tip: Try this out as a contextual add-in.

- - -
- language: html -style: - content: | - section.samples { - margin-top: 20px; - } - - section.samples .ms-Button, section.setup .ms-Button { - display: block; - margin-bottom: 5px; - margin-left: 20px; - min-width: 80px; - } - language: css -libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 diff --git a/samples/outlook/75-regex-matches/contextual.yaml b/samples/outlook/75-regex-matches/contextual.yaml new file mode 100644 index 000000000..b9729d915 --- /dev/null +++ b/samples/outlook/75-regex-matches/contextual.yaml @@ -0,0 +1,92 @@ +id: outlook-regex-matches-contextual +name: 'Get regex matches (Item Read, contextual)' +description: Gets regex matches when the add-in is opened as a contextual add-in. +host: OUTLOOK +api_set: + Mailbox: '1.6' +script: + content: | + $("#getRegExMatches").on("click", getRegExMatches); + $("#getRegExMatchesByName").on("click", getRegExMatchesByName); + $("#getSelectedRegExMatches").on("click", getSelectedRegExMatches); + + function getRegExMatches() { + // This API only works when you click on the highlighted word "ScriptLab". + console.log(Office.context.mailbox.item.getRegExMatches()); + } + + function getRegExMatchesByName() { + // This API only works when you click on the highlighted word "ScriptLab". + console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); + } + + function getSelectedRegExMatches() { + const matches = Office.context.mailbox.item.getSelectedRegExMatches(); + if (matches) { + console.log(matches); + } else { + console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); + } + } + + /* This add-in declares extension point manifest rules copied below. + For regex match, try running it on an email that has "ScriptLab" in its content. + Note: The following only applies when your add-in uses an XML manifest. Contextual add-ins aren't supported when a unified app manifest for Microsoft 365 (https://learn.microsoft.com/office/dev/add-ins/develop/unified-manifest-overview) is in use. + + + + + + */ + language: typescript +template: + content: |- +
+

This sample shows how to get regex matches.

+

Note: Contextual add-ins only support the use of an XML manifest. This feature isn't supported when your + add-in uses a + unified app manifest + for Microsoft 365.

+

Required mode: Item Read, contextual add-in

+
+ +
+

Tip: Try this out as a contextual add-in.

+ + + +
+ language: html +style: + content: | + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index aee6413fbd323959e806172af5c37710c7a360e3..eade7d06c066ee08cd691b2165fe47ba61fa275f 100644 GIT binary patch delta 15241 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 Q)e`yiso?%;{x{}-0kO8bvH$=8 delta 15585 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
2VV_mJ5+(g$-&n!rVC(|bny3l*v0sa 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 Qf)?nH0X3|x?tdZue+n>T- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - const entities = Office.context.mailbox.item.getEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.log("No entities found on this item."); - } -'Office.AppointmentRead#getEntitiesByType:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); -'Office.AppointmentRead#getFilteredEntitiesByName:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - - - // This API would only work when you click on highlighted physical address - that has the word "Way" in it. - - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); 'Office.AppointmentRead#getRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); 'Office.AppointmentRead#getRegExMatchesByName:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.AppointmentRead#getSelectedEntities:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - - - const entities = Office.context.mailbox.item.getSelectedEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); - } 'Office.AppointmentRead#getSelectedRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { console.log(matches); - } - - else { + } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } 'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': @@ -11393,13 +11260,6 @@ ); } }); -'Office.MailboxEnums.EntityType:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); 'Office.MailboxEnums.ItemNotificationMessageType:enum': - >- // Link to full sample: @@ -13053,168 +12913,35 @@ // Log the attachment type and its contents to the console. item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } -'Office.MessageRead#getEntities:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - const entities = Office.context.mailbox.item.getEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.log("No entities found on this item."); - } -'Office.MessageRead#getEntitiesByType:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - - - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); -'Office.MessageRead#getFilteredEntitiesByName:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - - - // This API would only work when you click on highlighted physical address - that has the word "Way" in it. - - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); 'Office.MessageRead#getRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); 'Office.MessageRead#getRegExMatchesByName:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml - // This API would only work when you click on highlighted word "ScriptLab". + // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.MessageRead#getSelectedEntities:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - - - const entities = Office.context.mailbox.item.getSelectedEntities(); - - let entityTypesFound = 0; - - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } - - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } - - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } - - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } - - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } - - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } - - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - - if (entityTypesFound == 0) - - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); - } 'Office.MessageRead#getSelectedRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { console.log(matches); - } - - else { + } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } 'Office.MessageRead#getSharedPropertiesAsync:member(2)': diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 8773e99a2..b05153dfc 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -46,9 +46,7 @@ "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", - "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", - "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml", - "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml", + "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", diff --git a/view/outlook.json b/view/outlook.json index 5e06b795d..db8f7ca00 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -46,9 +46,7 @@ "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml", "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", - "outlook-entities-and-regex-matches-basic-entities": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", - "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/contextual.yaml", - "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/selected.yaml", + "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-regex-matches/contextual.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", From a1f3aa89b24ca9d1935251685601c723f11aeb66 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:50:55 -0700 Subject: [PATCH 084/156] [Outlook] (new Outlook on Windows) Remove preview string (#927) --- samples/outlook/35-notifications/add-getall-remove.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 7d1b45f36..6ecb320b3 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -141,7 +141,7 @@ template:
  • You can add a maximum of five notifications per mail item.
  • You can only add one insight notification to a mail item.
  • -
  • In Outlook on the web and in new Outlook on Windows (preview), you can only add an insight notification to an item in compose mode.
  • +
  • In Outlook on the web and in new Outlook on Windows, you can only add an insight notification to an item in compose mode.
+ Get count +

-

Add a new style

-
Name the style using letters. Can include digits. Examples: NewName, newname1
+

Add a custom style

+
Give the style an alphanumeric name. Must start with a letter. Examples: NewName, newname1

@@ -248,14 +307,24 @@ template: +

+

Set outside border type to dashed, width to pt. 0.25, and color to green.
+ +

+

Set texture to DarkTrellis, foreground pattern color to yellow, and background pattern color to blue.
+ -

Delete custom style

-

- - - +

Delete custom style

+

+ + + language: html style: diff --git a/samples/word/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml deleted file mode 100644 index 79c93c928..000000000 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ /dev/null @@ -1,120 +0,0 @@ -id: word-insert-and-get-pictures -name: Use inline pictures -description: Inserts and gets inline pictures. -author: OfficeDev -host: WORD -api_set: - WordApi: '1.9' -script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#insert").on("click", () => tryCatch(insertImage)); - $("#get").on("click", () => tryCatch(getImage)); - - async function insertImage() { - // Inserts an image anchored to the last paragraph. - await Word.run(async (context) => { - context.document.body.paragraphs - .getLast() - .insertParagraph("", "After") - .insertInlinePictureFromBase64(base64Image, "End"); - - await context.sync(); - }); - } - - async function getImage() { - // Gets the first image in the document. - await Word.run(async (context) => { - const firstPicture: Word.InlinePicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height, imageFormat"); - - await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); - // Get the image encoded as Base64. - const base64 = firstPicture.getBase64ImageSrc(); - - await context.sync(); - console.log(base64.value); - }); - } - - async function setup() { - // Sets up by adding a dummy paragraph. - await Word.run(async (context) => { - const body: Word.Body = context.document.body; - body.clear(); - body.insertParagraph( - "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", - "End" - ); - body.paragraphs - .getLast() - .insertText( - "Use add-in commands to extend the Word UI and launch task panes that run JavaScript that interacts with the content in a Word document. Any code that you can run in a browser can run in a Word add-in. Add-ins that interact with content in a Word document create requests to act on Word objects and synchronize object state.", - "End" - ); - }); - } - - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { - try { - await callback(); - } catch (error) { - // Note: In a production add-in, you'd want to notify the user through your add-in's UI. - console.error(error); - } - } - - const base64Image = - "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEFCAIAAABCdiZrAAAACXBIWXMAAAsSAAALEgHS3X78AAAgAElEQVR42u2dzW9bV3rGn0w5wLBTRpSACAUDmDRowGoj1DdAtBA6suksZmtmV3Qj+i8w3XUB00X3pv8CX68Gswq96aKLhI5bCKiM+gpVphIa1qQBcQbyQB/hTJlpOHUXlyEvD885vLxfvCSfH7KIJVuUrnif+z7nPOd933v37h0IIWQe+BEvASGEgkUIIRQsQggFixBCKFiEEELBIoRQsAghhIJFCCEULEIIBYsQQihYhBBCwSKEULAIIYSCRQghFCxCCAWLEEIoWIQQQsEihCwQCV4CEgDdJvYM9C77f9x8gkyJV4UEznvs6U780rvAfgGdg5EPbr9CyuC1IbSEJGa8KopqBWC/gI7Fa0MoWCROHJZw/lxWdl3isITeBa8QoWCRyOk2JR9sVdF+qvwnnQPsF+SaRSEjFCwSCr0LNCo4rYkfb5s4vj/h33YOcFSWy59VlIsgIRQs4pHTGvYMdJvIjupOx5Ir0Tjtp5K/mTKwXsSLq2hUWG0R93CXkKg9oL0+ldnFpil+yhlicIM06NA2cXgXySyuV7Fe5CUnFCziyQO2qmg8BIDUDWzVkUiPfHY8xOCGT77EWkH84FEZbx4DwOotbJpI5nj5CQWLTOMBj8votuRqBWDP8KJWABIr2KpLwlmHpeHKff4BsmXxFQmhYBGlBxzoy7YlljxOcfFAMottS6JH+4Xh69IhEgoWcesBNdVQozLyd7whrdrGbSYdIqFgkQkecMD4epO9QB4I46v4tmbtGeK3QYdIKFhE7gEHjO/odSzsfRzkS1+5h42q+MGOhf2CuPlIh0goWPSAogcccP2RJHI1riP+kQYdVK9Fh0goWPSAk82a5xCDG4zPJaWTxnvSIVKwKFj0gEq1go8QgxtUQQeNZtEhUrB4FZbaA9pIN+98hhhcatbNpqRoGgRKpdAhUrDIMnpAjVrpJSNApK/uRi7pEClYZIk84KDGGQ+IBhhicMP6HRg1ycedgVI6RELBWl4POFCr8VWkszpe3o76G1aFs9ws+dMhUrDIInvAAeMB0ZBCDG6QBh2kgVI6RAoWWRYPqBEI9+oQEtKgg3sNpUOkYJGF8oADxgOioUauXKIKOkxV99EhUrDIgnhAG+mCUQQhBpeaNb4JgOn3AegQKVhkvj2gjXRLLrIQgxtUQYdpNYsOkYJF5tUDarQg4hCDS1u3VZd83IOw0iFSsMiceUCNWp3WYH0Wx59R6ls9W1c6RAoWmQ8PaCNdz55hiMEN4zsDNhMDpXSIFCwylx5Qo1a9C3yVi69a2ajCWZ43NOkQKVgkph5wwHi+KQ4hBs9SC9+RMTpEChaJlwfUFylWEafP5uMKqIIOPv0sHSIFi8TFAzpLiXxF/KCbdetEGutFUSa6TXQsdKypv42UgZQhfrWOhbO6q8nPqqCD/zU4OkQKFpm9B7SRbrTpQwzJHNaL/VHyiRVF0dfC2xpOzMnKlUgjW0amhGRW/ZM+w5sqzuqTNWtb9nKBZDLoEClYZGYe0EYaENWHGDaquHJv5CPnz/H9BToWkjmsFkTdOX0GS22p1ovYNEdUr9vCeR3dJlIG1gojn2o8RKPiRX+D0iw6RAoWmYEH1HioiQZqq47VW32dalUlfi1fQf7ByEdUQpMpYfOJ46UPcFweKaMSaWyaWL8z/Mibxzgqe3G4CC6pT4dIwSLReUCNWrkJMdjh8sMSuk1d3bReRGb3hy97iS/SEl+5bQ0LqM4B9gvytaptC6kbwz++vD3ZG0r3EBDoWUg6RAoWCd0D9isXReTKTYghZbhdUB/UYlKV2TSHitZtYc9QrqynDGy/GnGg+4XJr779ShJ0gNdAKR3i/PAjXoIZe8BGBS+uhqtWAF4VXUWu3G//ORVqdVRiEumhWgFoVHT7gB1LnFAvVaJxYZJ+qx/XRuo1X0+RFqzPsF/QFZuEgrVcHnDPCGbFylnajN/wAZZvqgpR8IzO275tTvjnwl/4sORC6C9xWJLoYCKNrbpuR3Jazp/jxdUJmksoWIvvAfcLsD4LuLfn5hOJhWlVQ+lyNZDFcUl636GY5/Wpyzo3FRZ+WBeT1JhpGDVlIMMbjYfYM3Ba4zuXgkUPGBD5B5Kl6LaJ4/uh/CCDTvDjW4ROxZm4gj7+dwZLY24067AkF9OtesCaRYdIwaIHDIzMrmSzv2NNTgl4fLlSXw6kjs8pWN+FfHu3n8p/xpSBjWrwL0eHSMGiB/TL+h1JnNJ+xTA6MawXh1ogTWA5S5tvLS8vMVUM6s1j+TKZEASjQ6RgkVl6wH4pcUM+zs8qBq9WyRyMGozP+5J0/nzygrrLSkS4ONPmNg/vyr1npiQG9+kQKVhkBh5woFbSI8EuQwxTkS1j2xoG0zsHeBVcRsl/RNMqyoMOG9WRjAUd4pzD4GhoHjDsMIEqchX48JuUgU1zJN+kSa4D+LnjHfXiqqsa5Oejb8J/fs9TAZjFtiXXvgADpaqXZsqUFRY94NRq1agErFbrRWzVR9Tq9JlOrWy75NncCf982n+o+sYCDJTSIVKw6AGnRhoQbZsBv3S+MlyxAtC7xPF9WMUJDsi5M+gmVCWImpvolorOgXzTMPBAKR0iBWvuPWB4+4CiWj2Rz3MPcFSXHb90NmawbWDLRVZAc2pHZTkF2fWDKugQRqBUCvcQKVj0gI6qRxYQtfvGBIUdvHQ2fmk/VR7fk5Q5jr+2fmfygrpTfM+fu8qa6lEFHcIIlGocolWkQwwcLrr79oBB9YRxg7SDXbDjJISue71LHJWnrno+vRh+BX2Xq2QOO6+Hf3TTXsYl43M3BhVcZFNjEyvIluUNvAgrrIX1gINqRdpvM0C1EhatbBvowaM5neOVe/L2VX176/jip88CUysAhyV5SRheoFRSfV+i8RAvckH+XKyweBW8qNWeEelEP1XkKqgQw3j/T3sxyNv6cSKNm02xA3KrOvLV1gq4Xh1u3vUusWcE7KESK7jZlHvSoDqU+q/4CAUrItomWtUoRvup1KpRCWxb0KiNqFXvcoreWCem/ETh+ILRYJnvJzlxz+7wrt/l9qkuHUIIrMk9bxaZEjIltl2mYMWDjoVWFae1sAouVeQq2LUYZwfRaVG1dR9PnKp802EpxG016TCOgZsOb6tk9RayZVZVFKwZ8cff4b/+Htcq8sd17wInJt5UA17SUqnVWR0vbwf5Qn5KgPO6bo0mU0K2LJetbgtvqjgxQw8uqcbthDH+OrHS/5FV19MuJDXreoSCFQC9C3yxisQK8hVk1dteZ3W8qQY2VFm68OF/emj0JNJ430DKQCKN3gU6FrrNSHf9VaMrfI68F+ynXVKpkhxndRyX0TlQzv4hFKyABWuwMPGROWxiJ6kdmmibaJu+7gTpPRbgDbZsqJa9/T8AMrvIlnWx/m4Tx+XhY4yC5RXGGjzRbeHlbd3ZsWQO+Qp2mth84nFtSBoQtS0M1cobqqCD50BpMovrj/Dpufyk1OBXZueKgyq6KVjEI/bZMf3ef6aErTp2XiOzO8UtIe0gCuCoHMWm5MLWyJfK09HTdihdvwPjc+w0J4wvbJv4KhfF2VIKFnHLm8f4KjfhkF0yh00TN5vYfDJ510wVED0qR7ENv7Sa5SZQmlhB/gF2XsOoTdj+O6tjz8Dh3Tlbaow9XMNy/153rGGpDIJ+Ycv5bm6bcvVR5YaiPFCy8Kze6s+4lj4VpIHS1Vv4sORqa09YrlL5fa5hUbBmLFiDd/am6Soi0LtAqzqyMK9Sq8BDDEQVdMBooDSxgvXihAV14RfqxgBSsChYcREsmyv3lImtcU5raJs4q8sjV/MYYpgLrj9SxlP2C/iuiXxFl1EYL4GPym5/TRQsCla8BKu/3qFNbLl80a9yVKuwUIWzpmKQrnIPBcsrXHQPT+AucXzf70l91lahclT2FV7tNmEV8fI2t24jI8FLEC52Ysv9wpbAtsVLGNNy2+VyFWGFNX+4SWyReYHpKgrWUuAmsUXiDNNVFKwlsxJBLGyRGVh7LlfFAq5hzeTd38LL27oo0ABpnykSIG766pzWYH3GS0XBWvJr7yLg8/1F1J18l4pk1lXuhM1CaQkJPixN/jvXKlGMpVpa8u7CvSkj9CGshIIV92e7tOvxeBXGhGFIrN6Sp0ZPa5Jw1gfsdEzBWmbGb4BuE4d3JbdKtszHe1jllZTjsqTBvJtymFCwFpbxpRM77nAouzE+MnnBAiazK++rYZ9Flw4B4mODgrWkpG5I1nHf1gDFrPa1gveRNmQc+5jnOL2L/pDqzoGkN2mArpChFgrWXD3eS5J38KDJjDTKsMG4aaDlrXTjr1UdJkJPTLpCChYBAEmzSqcHOX8utySZXV65AFBFGezjgULBS1dIwaIflDzehVVeVZHFiIN/VFEGoZtVtyUxbtwrpGDNDb3fheUH26Z4Nq3bkhw5TKT9dtciqihDtynpWN2mK6RgzS/vemH5QemU9kZF0tohX6Er8VteSTmWPQlOZa5w4gwRQsFaZD/Yu5APLOhdyvs6XOfqu+faVhFlOKsrfwXjRRZHzFOwlumeKbkqr2xaVUmOdL3IiEPA5ZXmhPn4b2edy1gUrOVh/O2uaY/Vu2TEITi1eiCPMrRNnD9XC9Yz0Zgnc3SFFKxl9YPd5oT+Su2nkgQjIw7TklhR7ldMbOBzQldIwVpOxu+Z8SWScY7K8iKLEQf3bFTlUYZWdZjXVT4zTLrCGD16eAlm6QfdCJZ9WEdYLbYjDmG3FU/mRqoJD90EV3+Ga//o5aUPS77m2QiFrbQm6l24+ok6B+g2R0pj2xWy9SgFa6HV6o74kO9Ykx/vNsdlyficfGVkanRIgpV/4Euw3v/E4xZBMheYYKn2VZ0HcfS0quK6YaaE4/t8U9MSLlN55X4aRedAXouxVZab54Q0ytBtTnH933KvkIJFwdIEGsaRVjeZEiMOHsurRmWKyTfdlrj1wb1CCtZy+cHT2nSjorotuWbFvMj6w6/xhxN81xL/G/zsvY7ks384wfdBDHBURRmkB3EmukIBHpOaBVzDmlF55Wa5ffyeyZZF4VsrILM79e0XGb/5JX7zS8nHt+r92rDz79gvhPPWVkcZpF0S9cgTpHf51maFtQSCpTqOo0d1WCfPQRUyVFGGs7ouKaq5+IJmJdJYv8PLTMFaDj/ojcZDyd5ZMkd7IqKKMsDHqEcGsihYS+oHT0zvX016v3FQhYBqrV1/EGeCKxw7pkPBomAtGokV8W3dbXq/Z6A4rMNpYE5Wb8mjDPA9SZuucOb3Ey9B6OVVUH5wwFEZW3Xxg5kSTkxfUmjj/MrCdz7+ovpvclxYo2HTVKqVz5xtqyo6zfWil+VIQsGaGz/4xnevBelhHQD5Cl7eDqA88fCpcX6cns0Fv3JPHmUQWrZ7Y/yYDvcKaQkX2Q+6P46j5+uS5IN2xCEO9C7xrTWbC36toiyOpgq+KS25SVfICmtpyqsTM5ivbA/7HN8Iy1emjqQKOGu0lIHrj+SfEhD+5mFJ0t85AlQDJrrNwA6Kt01xuZCukIK1sILlIS+qolGRLJDZEQc/N6dmxqfmU85dufbTANbpPKCa3wXfa+3Co6JjIWX4coWzWt2jJSRT+EGftc/4nSNdlMmWo86R5ivDg3XdlryBVwR8ZCrVIdiTACdjrnBaJx7g24CCRcIqrwKvO1pVifNKpCPtoZwyRlrQfD0jM6iJMgQuoEyQUrAWX7B6F8ELVu8S38jMTqYUXS8BZ4ag8VBnGyP7NgQb6z/qMX7ZhV/lepGnoyhYMeP/vouRHxzw5rG80V0008CcZrBzEORS0VSoogxQDBz0D6fpULAWSrAi8IPDukYmE2uF0LfbBTPooQVCIGiiDG0zrEbG7ac8pkPBWiCEwEG3GeLOd/up3IiFXWQ5Xdjx/ZntfKmiDEC4FR9dIQVrQUhmxQXgsLf5pXem0JE9PDN4/jyAELnnS62JMoTa8P7EpCukYC0EH4QZv5JiH9YZJ6SIg9MM9i5nZgY1VWQgB3EmXnNh9ZCCRcGaSz4cvYE7VhQjoaSHdUKKODjNYIDzuKZl9ZZSI76pRJF1oiukYC2CH3TGoBHccRw99mGdcQKPODjN4Omz2YTabVRa3G3izeMovoHxc+wssihYc+8H30Z1Szcq8tBmgKvv8TGDmV3xweC8DtEwPk2HgkXBmm8/eFoLd+lXuH+kCzcBRhycZtAqzibUDiCxoiyvzuqRjuQQyuf1Ilu/UrDm2Q9G7Jikh3WCKrKcZvDN41BC7X/+NzBq+Nk3yurJZnx6UPTllap8/oBFFgVrfv1gxILVu5QfnUvmcOWe3y8+CBB0DuRHgvyI1F//Cp9+i7/6Bdbv4E/zuv5/yayyH3QYB3EmVrXCr/jDEu8DCtZ8+sG2OYNz+e2n8m27a76ngQ3+eYDtrlZv9UXqp3+BRMrVP9FUi1/PQiwEwUoZdIUULPrBaZAeoAtqUEXj4SzbOWmiDG0zuuVC4bcsyDddIQVrDhCO43iblhrMLfRMmSP1+fCP4ITz//4WHUuZ7dpQJ0VndfR6vHkDXSEFa/4E68Sc5Tejuns/Mn3dmVY4tUOvg9//J379C/zbTdQ/wN7HcsHSRBla1dmUV3SFFKy5JHVD7HAS9nEcPefP5YZ0rTDd8BtBBIMKtf/oJwDwP/+N869w/Hf44n3861/iP/4WFy+U/0QTZfB/EGe9qOyo5bKkFa4MXWE4sKd7OOVVtxnFcRw9x2X5cs+miRdXXX2Fb62RwRMB5hga/4Df/2o6+dNEGfwfxLle7ddEnqOwp7WRY9gfliJK27PCIh4f0YJDmTmqwzruIw69C5zVh/8FyG//aTq10nRl8H8QJ1/pq1VmVzKIyCXCpaYrpGDNkx98W4vFN3ZUlucPrlXm7JhueE2vEukRKfS8kdo5EDdPPWsfoWBF6gfP6gEvAKcM5Cv9/zIl5a0rKZEu5bVeUBGHaFi9pbz5/R/E2aiOaHcy611oTkwKVti89+7dO14Fd49QC3sfyz+183qkwjosBXacba2AfEVcJrdlSHUKR9SmFdxsyjXuRW6WO2vu+eRL5USc/YKvaHvKwPYriZV+kfPy1ZJZ7Iz63D1DuZT5c953rLBi4gcDyYsmc9g08cmXkk29xAryD3CzqbyNBXVTzbnyE3GIrnrdVf6YpzW/B3Gc247dVl++PRdZ3Za40qf5OrM6N07Boh8U7yKfO1a2VO28njCeM7GCT750dWupDuv4iThEQ2JFZ119TsRZL478+F+Xhsthnv2ysPSu6TbzLYc/U7BmgvCm9Bm/ShnYtiRS1TlA4yEaD3H+fEQQN5+46imq2q3fqMb62mbLyvld/g/iOM8k2mcDBl/Tc5ElFNfJXHQDIilYxIVa3Rm5o3wex0kZ2KqL+3ftp3hxFXsGGhU0Ktgv4Is0Xt4eytaVe5MrAlXT95Qx9Zj1yNBEGXoXk+c5pwydZR5EGWzXPCjWfBZZvUvxicWldwrWbHjXm1xe+Vy92jRH1KpzgL2P5U3Tz+ojp2TyD5SVyADV9r+wTRYfNFGGVnWC706kYdTwyZfYqktkS4gytKrDKzxw9EEVWexBSsGaDb3fTRYsP3lRofl65wD7BV1fBGFH302RJbWrwt0bEzRRBjcHca79UECt3pLIllOju60RKXd+cW9F1umzkQV1ukIKVoz8oLME8Hkcx6l9vUvsFyZvJDnv29XC5JdQFVlOfxSf8krFUXlCeZXMiWLnlC3BBY+30BqUb56LrBO6QgpWHAUr0OV2Z49NVUJdoGMNb103iqNq+o7wx0RPV2yqowzd5uSMW7eJPUOymDiQLWc1NL6057/Icr9XSChY8ypYmnUQvWYNcBPLUk3WEfb4Z0ggUYZuE1YR1meSWmxgBp1r7SrF8VZkdQ5Glh2TubjHRyhYS+cHO5bfXXan9LhPFTrvBDfHiVWHdRCbiIMmynBWn24T9rSGr3LKo9HfXygX9Z11nLciS7jIbOlHwYpXeeW/PcP3DpHSz4xRlVQu+x84N8WcxCHikFjR7QB4OOdsByBe3pYsLyaz2H6FTVOuj4PX8lZkveVeIQUrzoI10cQl0hNaxDkrLDfbdon0yMKT+0Mqvcv4Rhw2qsqqx89BnLM69gx5CZzZxc5ryev6LLKEGauJdGCjISlYxK8fnHgcZ72Im01dh1+MtsfL7E7OVW1UR/bLT8wpvn/VYZ3ZRhxSN3S1jM+DOGuF4b6EcFoAwJV7uNkUk1+DqtlbkSUU3SyyKFhzU14Zn/crF826eO9iZP9r09S1kcmWR+zb6bOpl/xVh3VmGHHQ7FT6b9k+qJJ6l3hVxJ4h7jYOjpQPtKljDWs6D0UWE6QUrFiQWBl53gpCI7d7Pyyg6B/UDUer39Vb2KpLNCuRxkYV1x+NfHEPjX1Vh3Uwo4jD+h2lmvufiOM85m235ek2cVjCy9uizUysYPMJdn6QLT8rWcI0HbpCCtZ8lFdOd5C6oSuy7LvIaZGcD/y1AjIlbFsjDY57l97HmqpM1kwiDvryymcDDLuNcrclbpKe1bFfwOFd8esns9h80k9s+SmyGMgKGjbwc81ZvT+Rwfh85J3npodcIo2bzb4rPH+O/cIEQRQOFWqe4frjOxPZfCIvHAY/bDTkHyjlwE6BBjVAO5nTLd7lH8i+gdbQIx/endp6f3o+LJN7F/hitf//mq6EhBVWkH7QqVbdpqutK2d4WjO7eFCyfZVD4+GEgz7+1QrqoMBaIbqIw8QoQ1BqBXXyw3adL65KfpvOFT2fK1l0hRSsOfCD475m05zwdLXvnz0DL66i8VByx3YOsGcEMDJeOPo7UvVENahCE2VwcxAnQLpN7Bfw8rZygd/DShb3CilYMRKsN67Xp3sXw/Upu1mopn2KfXzXqGHnNfIPROGwTWVQM01VveGTuSgiDvoog+cpgT69/4scju8HU9kJx3TWi3M2ryhmcA1rmvexVcSnjntbM5ZCxaY5YrXsjaSOhY6FRBopA8kcUoauIUnjod8tM0kxpVhC6l0o85ZBoVnKiXgdTeJV09iojvy+vM2nEC6vPaOEa1gUrNAFq22OpNWPyl5GeAqa5Z7z52hUAh5oOkAY/DOgbeLwbmjl6h0Yak/tcyJOYDWggY1qf9vUw6I7xqbpnNZgfUbBoiWM3A96a89wWJrabpw+w8vb2C+EpVZQr75nSiFGHDRRhrYZC7Wy6+j9AqzPvKRzB3WZc7WRrpAVVhRc/AvSPxOfk37sxnoRawUkc0ikJR6w28J5HWd1nNYiGgm1/Up+cigka3blnq4/xLzMTPT2wx6WkCmxwqJghcnvj/DTDXElItgVk/cNAPjWms3QOjtbr6oKA/5h1eNdAbSqOL6/UG+exMrI6udpDYk0BYuCFSZ//B3+5M/6/9+7wFe5IPNBMUG1sBJsehPA9Ue6iTgLeW2FvHHHcttEiDjgGpZrBmqFIKalxhPVYZ1gIw6a+V0I4iBOPBEie1QrCtbM3nwLQ+dAua6cLQfWxeEjU/mpbhONh4t5bdtPOZ6egjULuk1f01JjjqrpeyLtfYC7k9VburWbwCNmfM5RsFheLbQcqyfrCJMTvaFpu9qxIj2IEz0nJu8eClb0tf2iv+1Uh3Xgu1XWlXu6TqpH5QW/sOfPAztQRcEiruhYvqalzgW9S3yjsGZrBe/9BhIruKZ2fGf1uCRFWZ5TsFjVzxlvHitrAc9FluawN3y3bGd5TsEiEt4uzRNStf6dzMkb3enRRxna5uLXrf0K/SCApkAULOK2nl+k8yITaoGnyqOL2fLUp+E+Mr2II4t0QsHyJVhLhUpH7L4r7pkYZViex8BSFekULApWpGgm60wVcdCom7N59JLQbXHp3TMJXgK3vOvBqKF3gY6FbhPdJr5rLn5p8HVppJeTk+tVV10c9ONjF/UgzshNtoKUgR+nkTKGbRqJJ3j42f8Ds4luEx2rr2XfX6BjLdRNqJqsA8AqTgj967sydJt4cXWh3gypG8M2DKsFAGzJQMGaE2wzdV7v/3/vYl43wpJZbFty0ZmoOJr5XQiha02U1+QnOSRz/ZbWdmsgTWiDULDmkt5Fv93VfPlKje40KsrjykJr4HFBn23Lds9ujoaOgkVfGWtfqXF2mvZVQgcogZi0bKebo2CRBfSVmo7G0gahmv6lsy2v6OYoWMuL7ewiftPPyleqJutA1oJd1SFe9fcXz83ZD5vvmlPPXiUUrBBpm8Pooz1gZmAr7LtlYXylZiqXUDFldnVtZAIfHTZbN6e67IkVZMvIllm+UbDiR6uKRkWuDs5HfTI39CPz6Cs10/QGa1L6KIOf4ayzdXNTFbaZXWxUKVUUrBhjh7bdJyHt289pW+LvKzUrU4OIgz7KoNlVjJub8ybxmV3kK9xJpGDNj2wdlX3Fi2LuKzV7f0dlvK3pogzjW4rxdHOef3H5CvcWKVhzSLeJ43KQrd/j4yuTOeUqsl21ae7YjoXT2tyUk1N51Y9MShUFa845q6NRCTdtNFtfGc9rjgiDIMks8hXuA1KwFojTGo7LUcfZZ+srI3Nz3/3g6aKP2nITkIK1yLRNHJVnHF6fua/06eZsVYrDYaYr93CtQqmiYC00024jRkZMfKUtSQM3B8RxLAU3ASlYSydb31Tw5vEcfKsh+cqZuznPV2OjyhHzFKylpNtEozKXzVXc+8p4ujkPpG7gepWbgBSspSeCbcRoGA+LzkX3GDdmmZuAsXpc8hLMkrUC1uo4q+Pr0nINYpiLQjJb1kX2ySzgEIp4yNZOE5tPkMzyYsSlYLzZpFpRsIiaTAnbFvIPph75R4L8Lexi5/WEIdWEgkUAIJFGvoKbTS+jlYlPVm9h5zU2TUYWKFhketnaeY3MLi9GRFL1yZfYqlOqKFjEK8kcNk1sv+qHoUgoFzmLzSfYqjOyQMEiQZAysFXHJ19OMWaZuCpjV3D9EXbYv5iCRQJnrYBti9uIgUmVvYzBIcUAAAIqSURBVAmYLfNiULBIaGRK2GlyG9HfNdzFtsVNQAoWiYrBNiJlayq4CUjBIjMyNWnkK9i2uI3oVqq4CUjBIjPG3kbcec1tRPUlysL4nJuAFCwSJ9mytxEpWyNF6Ao2n2CnqZyXQShYZGasFbBV5zZiX6rsTUDmFShYJNbY24jXHy3venxmt39omZuAFCwyH2TLy7iNuH6nvwlIqaJgkXmzRcu0jWhvAho1bgJSsMg8M9hGXL+zoD9gtp9X4CYgBYssjmwZtUXbRrQPLe80KVUULLKI2NuIxudzv41obwJuW9wEpGCRRWe92O/FPKfr8VfucROQgkWWjExp/rYR7c7FG1VKFQWLLB+DXszx30a0NwF5aJlQsChb/W3EeMpW6gY3AQkFi4xipx9itY1obwJuW5QqIj5keQkIEJuRrhxfSlhhkSlka4YjXTm+lFCwyNREP9KV40sJBYv4sGY/bCNeuRfuC63ewvYrbgISChYJQrY2qmFtIw46F6cMXmlCwSIBEfhIV44vJRQsEi6BjHTl+FJCwSLR4XmkK8eXEgoWmQ3TjnTl+FJCwSIzZjDSVQPHl5JAee/du3e8CsQX3Sa6Y730pB8khIJFCKElJIQQChYhhFCwCCEULEIIoWARQggFixBCwSKEEAoWIYRQsAghFCxCCKFgEUIIBYsQQsEihBAKFiGEULAIIRQsQgihYBFCCAWLEELBIoQQChYhhILFS0AIoWARQkjA/D87uqZQTj7xTgAAAABJRU5ErkJggg=="; - language: typescript -template: - content: |- -

- This sample demonstrates how to insert and get inline pictures in a document. -
- -
-

Set up

- -
- -
-

Try it out

-

- -

- language: html -style: - content: |- - section.samples { - margin-top: 20px; - } - - section.samples .ms-Button, section.setup .ms-Button { - display: block; - margin-bottom: 5px; - margin-left: 20px; - min-width: 80px; - } - language: css -libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview - - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/word/99-preview-apis/manage-styles.yaml b/samples/word/99-preview-apis/manage-styles.yaml deleted file mode 100644 index 0dcb60284..000000000 --- a/samples/word/99-preview-apis/manage-styles.yaml +++ /dev/null @@ -1,350 +0,0 @@ -id: word-manage-styles -name: Manage styles -description: This sample shows how to perform operations on the styles in the current document and how to add and delete custom styles. -host: WORD -api_set: - WordApi: '1.9' -script: - content: | - $("#count").on("click", () => tryCatch(getCount)); - $("#add-style").on("click", () => tryCatch(addStyle)); - $("#properties").on("click", () => tryCatch(getProperties)); - $("#apply-style").on("click", () => tryCatch(applyStyle)); - $("#font-properties").on("click", () => tryCatch(setFontProperties)); - $("#paragraph-format").on("click", () => tryCatch(setParagraphFormat)); - $("#border-properties").on("click", () => tryCatch(setBorderProperties)); - $("#shading-properties").on("click", () => tryCatch(setShadingProperties)); - $("#delete-style").on("click", () => tryCatch(deleteStyle)); - - async function getCount() { - // Gets the number of available styles stored with the document. - await Word.run(async (context) => { - const styles: Word.StyleCollection = context.document.getStyles(); - const count = styles.getCount(); - await context.sync(); - - console.log(`Number of styles: ${count.value}`); - }); - } - - async function addStyle() { - // Adds a new style. - await Word.run(async (context) => { - const newStyleName = $("#new-style-name").val() as string; - if (newStyleName == "") { - console.warn("Enter a style name to add."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(newStyleName); - style.load(); - await context.sync(); - - if (!style.isNullObject) { - console.warn( - `There's an existing style with the same name '${newStyleName}'! Please provide another style name.` - ); - return; - } - - const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; - context.document.addStyle(newStyleName, newStyleType); - await context.sync(); - - console.log(newStyleName + " has been added to the style list."); - }); - } - - async function getProperties() { - // Gets the properties of the specified style. - await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; - if (styleName == "") { - console.warn("Enter a style name to get properties."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - style.font.load(); - style.paragraphFormat.load(); - await context.sync(); - - console.log(`Properties of the '${styleName}' style:`, style); - } - }); - } - - async function applyStyle() { - // Applies the specified style to a paragraph. - await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; - if (styleName == "") { - console.warn("Enter a style name to apply."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else if (style.type != Word.StyleType.paragraph) { - console.log(`The '${styleName}' style isn't a paragraph style.`); - } else { - const body: Word.Body = context.document.body; - body.clear(); - body.insertParagraph( - "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", - "Start" - ); - const paragraph: Word.Paragraph = body.paragraphs.getFirst(); - paragraph.style = style.nameLocal; - console.log(`'${styleName}' style applied to first paragraph.`); - } - }); - } - - async function setFontProperties() { - // Updates font properties (e.g., color, size) of the specified style. - await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; - if (styleName == "") { - console.warn("Enter a style name to update font properties."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - const font: Word.Font = style.font; - font.color = "#FF0000"; - font.size = 20; - console.log(`Successfully updated font properties of the '${styleName}' style.`); - } - }); - } - - async function setParagraphFormat() { - // Sets certain aspects of the specified style's paragraph format e.g., the left indent size and the alignment. - await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; - if (styleName == "") { - console.warn("Enter a style name to update its paragraph format."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - style.paragraphFormat.leftIndent = 30; - style.paragraphFormat.alignment = Word.Alignment.centered; - console.log(`Successfully the paragraph format of the '${styleName}' style.`); - } - }); - } - - async function setBorderProperties() { - // Updates border properties (e.g., type, width, color) of the specified style. - await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; - if (styleName == "") { - console.warn("Enter a style name to update border properties."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - const borders: Word.BorderCollection = style.borders; - borders.load("items"); - await context.sync(); - - borders.outsideBorderType = Word.BorderType.dashed; - borders.outsideBorderWidth = Word.BorderWidth.pt025; - borders.outsideBorderColor = "green"; - console.log("Updated outside borders."); - } - }); - } - - async function setShadingProperties() { - // Updates shading properties (e.g., texture, pattern colors) of the specified style. - await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; - if (styleName == "") { - console.warn("Enter a style name to update shading properties."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - const shading: Word.Shading = style.shading; - shading.load(); - await context.sync(); - - shading.backgroundPatternColor = "blue"; - shading.foregroundPatternColor = "yellow"; - shading.texture = Word.ShadingTextureType.darkTrellis; - - console.log("Updated shading."); - } - }); - } - - async function deleteStyle() { - // Deletes the custom style. - await Word.run(async (context) => { - const styleName = $("#style-name-to-delete").val() as string; - if (styleName == "") { - console.warn("Enter a style name to delete."); - return; - } - - const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); - style.load(); - await context.sync(); - - if (style.isNullObject) { - console.warn(`There's no existing style with the name '${styleName}'.`); - } else { - style.delete(); - console.log(`Successfully deleted custom style '${styleName}'.`); - } - }); - } - - // Default helper for invoking an action and handling errors. - async function tryCatch(callback) { - try { - await callback(); - } catch (error) { - // Note: In a production add-in, you'd want to notify the user through your add-in's UI. - console.error(error); - } - } - language: typescript -template: - content: |- -
- This sample demonstrates how to manage styles. -
- -
-

Try it out

-

-

Get current number of styles

- -

- -

Add a custom style

-
Give the style an alphanumeric name. Must start with a letter. Examples: NewName, newname1
-

- - -

-

- - -

- - -

Use custom style

- - -

- -

- - -

Update custom style

- - -

-

Set font color to red and font size to 20.
- -

-

Set paragraph left indent size to 30 and alignment to center.
- -

-

Set outside border type to dashed, width to pt. 0.25, and color to green.
- -

-

Set texture to DarkTrellis, foreground pattern color to yellow, and background pattern color to blue.
- - -

Delete custom style

-

- - - -

- language: html -style: - content: |- - section.samples { - margin-top: 20px; - } - - section.samples .ms-Button, section.setup .ms-Button { - display: block; - margin-bottom: 5px; - margin-left: 20px; - min-width: 80px; - } - language: css -libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css - core-js@2.4.1/client/core.min.js - @types/core-js - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 9490679feaf25346f8a42f97cf9a28ce337a6a0c..927eee6296d1c28a51eb9a06895595a5d7831103 100644 GIT binary patch delta 16406 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%0AZW=)Dl~C;w4$Eu* zIFN6D_gkyQKc?54+sLJ9*0_0Yfpa08=%2JEEk&i(=~tNFfR@$MtL2E{+05YN8K-D4 zyXMTHqOIX(hnd5`;}sa6GP?B0p#0gZvHC3CE4dDstZKJHF2Y+gkMY6)&V|pjJsfTT zK}lhunyT37&?p%p%81BN0@Xi%zs3jALjRFtOiveEyu9kZCVjnJO+DTCdlS(do!5M~ zJum?qHeBzgsA4bva`h|?2JO>*wzYV94~9If_#%q|l|3#S^8KQ2oN@Ls9hG~Lh~<3& zg@xpBdYX>F$)oSRdu3E`4Z}+<Emzk#Qj zfsr@>%*pH(AOT9R5)>a$*ncux9uw>}4+OzJ)N$;Sa}#4APkToFat_{EUuBqk+`C4j&9HqodYH>R8g?B64HtNWqH+IV!VZ zV9Rexd;UH~c{nQZ78`aJO|iEZuoPSQHkVw$A$1;M7x%@!Lf#aa z1?2V57;^IJk;u}CKwzb%v@MtbMTQBg4g{a=7vvDiZW7oELUSi2<)^C4CUgEX*3g%HJW^x_R25rR0B6eWa^Qm2F^?57K--TUp1 z15|faDRk%XRq!+sx7|pH)b-R;vuu>Ko@U%#R?s&55(T9m$e#j0q7SoFlbWSJ2u#bt zSJF|NeJj9FE4}hHQVP$Ao2iR{QkOWM@#2Ge?oq;nx@12dj0Kb0=*z`aN2m}dl=)-( znc{}fE@S%E%qb^n<*q@bn!O%Rf={H`Mp(ZNQb7B$0>+KOJ%K=D4c45tvD5 zml7qUw^UsU1Q4u1-?&fq#0!zqT#Gk_Tz)XpdV2o~l#@OZ+kYV=`tho~lo0)HYLp}7 z+)pNoh?5l->WCsA5|ri2A}yunZJ=L?Oo-BpF~F-ci9wH%$nMeJi-8e?f~a~7JeqO= z`yy?GZT|ZEX3YC3VnCR_ALHw+g21coq|}CAWt=wD_#$Dvk~nuP!`Vlgij;dbKmbsW ztz;R@Q@el#Uk$u=Q_TWDc7~||+ggPT^Br@g@2RS+7nzi24`>bc`0W(;jUJZ`bQ`X3UA=B%YSXS2ut2gWnutIC2S&0}m(3n{_p7Q*pURQeHKlPRO{Rg3#rGdO^rdIvcy4~mU^{@j_cvY=!I^?L zrd?^)UP~op@0nE1&XbF`#C-TPqH}Lxx|vPF1ppH5XtEaayT^|@vK9W z4)$=cyinRNE@HEo(06Ex!jY!h5CPbZ++?9tl0OJ@cua$b9)*8X)~aClF8JPr9E^7Diq-G&l5UNC9fDQ7$3VR8Bq@`#I*OX$f>}rk zUvJ-JuLrd`hTu{)BA2@yAD~$VcJUU_Z{eGOoFN?Yw-}vZw8MO zf#lj)Y4KFZoI$iKN&|f+qPq2IJ2$&Y-&8EXgm{+u`!ss*nmK6kWgt)~wOI=(28=-+ z6brP-MEkaEZU`8DzvCOY`=P*ESqo60-Y0^>ccK|p0d8EQA6A5MLW=dHtHKrKC{|ja$#I8&e z9duN*=bq+Tk-?liTg_zw!P_xdP6?xhTgKJr&JQ+e~pD!MF+XKZ z-?aRor^+k*OZDEbk{m(^HXt)}bZjC86#F#<7WbJr8c}#*?^7szRMk+cB_CX=bH1c; zKIfgDdx;#*&>td6Mli%#JtzM~%T^&t1Lm(QK z=YBA>i^rJ~(>v326<~fdc~G?r%ww&;v$Mb-1#z-2gF-BLfc{frlQw)ij?;urRD?L~ z33PEXUGskZTBeDtzu~mfY9zfr9Ue>Pz0!`0C-NUp-g}*UvdS_D+CjG?^55M6g{Axi zgl`fe3WyJ!Nj@@T09ul7XdER>Ne*E2pvQZ@-2<_ZYPdu4{MnILN6hk z)R`nxf&<^2st6x@8-lW%l$l6|@+-TiJTVW~2=V5ky|H9ou8#SzbFa?-3QPVc4hyQq zST3Uy2+jEfD1X*3sJ7 z0^Xncl2moiGnSGuJP)rTlHN(-mO~_h%biBZ2WzV5VfO2-34K%((tS$10<%vKDkm#A zThVGv@ve@(-Q<8aeI2O^0?Uv%Uoemz(_B;>@El45MW-$8K~>YRdD5{)Bx~S_Wb{{% zH4T96uQ7*15%>m`z#>kb%{t|idB$5kF#&=O3b7r}&^@gf=sdNaNXqLrkt}3^Id(N+ ztNWWh5Ld-!*IZe7&S>rf7C-(t8d}KO$k?#nRr-#b=2RiA^f$*N#NtVhV4bxqbKP2z ziVG%BdN(?Qt=$}0AkO|mQ3!2of`8(V1dlW12We!C6KF+}w|Z6Eq=XzY4Yt(Y-ysg&%#L`j~#2S<*H>aHKUzNdeNCR{KoCuy-e1!bF-A>DYH)*W+)|ogL zDGFx>>vbqY!ej+Ow5R)=^91V6s!*z0XxDweK7L;N(!&Cavz&&_R`1d=`{_1IAeXklJK!&W#ERLQ3>2aMIP?~bt!8Q0*^Bv zrZ7|D`3bA(U0u%o!Lg9hhT4*#_$VX8V+RFC6adNPhEXMfozma*@rm?4?6f_RFR_O8 z=LVuiTv}*JC)}fG$MkUHyQ5KD8vP58L{wdz`6!GHAcPtdMaZP5rb`i+QA8jL18Ma^ zn4GueV>p}UQUx|75g*C%LGh?*++mCF2~1uoU`s#@~cr+V>|kTS&-fuC6^esZ7=QhXh87F&={Rwddd|6PkxF@H!7?z z=&p+_54YJL3lEtGafGh`VJl~{OosK)e3;l-h#3+=&?hC3RWG>sxT(*1hNr714af-Y zr$E1O2JGO(hK)|$kX%DN-sL@e&(r^)KDHxtr#Z{cin^45ZOl46jT zW!#Z`*Bfmd*+~Rn{53l%Ui3F96?SP1#`Jx*QmXYaNBg1qbe4<-1q=^1NTrj9?QIlC z@|r8E9H4#(+IEU$7~3a(Pr%cS1;tMLq-e$$9%jVmEA)DdXruVKU{S!aVjZ|4<}SV| z7SbQz;q#pTw9Ryu+OKi@m{`kHCcLgPV!5AWq1;tBsSn*YR>7Bf7*USlfJNtX11$B) zyRO^c8pufk9jDlsnsR}n1`-I{MJW|wBfN; z_$_qxKUY|GR|#3^pT3Ai!m6mN8Om0fhb1#Pe7ZkJmB6`3(|pP}S0-Xvr{0uil&(QC zY@tCr-^wM|={0{aY2EW+mSlv`@h8#Me;`ids2z02WUb5E+qcP5$>Wedi}#m*nSl~fz?PYyWi2JOu1>0NPe|(J0gFlSH=e;GV1~2zHiWZwNF=cqze{onFjkvg2I7{5mbkJJWTbsU!gAhoCS{ z*uIOTTFbyYusBeQV;jgT?^8Pr*HJc1vNs1~qyNT;Xw_`~gNcW})edS+i!kbU%1g zPoeDQyU>uI#jd9Fe#0{XX+>yC{fyRp?>AT1-brHaO&*0)WvGf`(iHiTp9ywO`p!b< z5{O^=HoK%T_&vE$_o6gAZndtbcV*h$gj7LYAtkXN_O)d(cES*Z+ybL8Bje96&z&#UsLeU$I?VAqm3rLrXi$Zt_IIo>ixt(EM%l6)}8 z!N>C5lVG%N!k-Dm=pJ6^c`Aj~zoe!0XT+?wf7@~F`bS@$8bf=puEx47yO;Y{Tz4b$ zxpV_-W5y{F4^hI{yhN_Y=HgOz_JmM@0`}`Wk{5ZC-#`f3th!`}z zhZhIIPAV%XPhxN#b~53g-3E$DcL-dYe0ux{ak`j!K4yB3~e- z5eg;_Xww>%PPQWss&6aV!#y`TiWyD^suYyP-$| z!#PJ47ygCmbc#4={dJbSkIJy#`?{|%h;FSdy}eWU1Q@}ov!#~xX-n{fbiP*6(4c4q zQWP2H4IP`dLVv5Z1FkK^o^ik0@rvjM3E;2-F9m*-g=V+o`v!^-F^+em>1{|Y_-5(Y zJ2V!{vND`3zH2ZtxO)Q_pBJMc;W)m6>rc3&;rrceoW(~s8C!SbO}N}K6AXk|3$XOL z`>mKpO%>C{7mYK+v6$VSB@3Bl%Kd9bKZi1aB=eKr&?-qx=yl~fY!Qe^u@3E$kR{}L zNb1Lu-I*kF!fTO#cR!O1Z3lk0Jm4TljX3Z8x+2TK#RBscF~VmhH!?kLOxMD)ESp`| zd_`QEX*hz1;8EqVux-=p5ZdD1s1>YelymL;LHGHM3a<*55N{y2;+;hoy%Y1cI_V6b zwQJaqouq>?H4PAXSdh%bgma8yD777EHKcAlQqWJ2;ER=geGx(<5pgv7Kf6BqTIX^; zr-J+52pF31-r;>Cn9*PWfJmSsNU}Z;-t^U91E7cD z`4D^n0m+<&5k9373L-1>Ax2nKYhx6+YIa^) zEw58Lt@Wob*-WJbXFXaeigz+0?0(V-;9TcOw%}b~>LNLXaFqp=F9I$c)LKSMu&=Xv z;8BqW15NRFkdup!y%r+o5t$rbbJxtFKNa00=f>ZQni}|sF+#-L)8OOQZ^QtfvwB!T z3@b@1+7R6oOL4%~iQc(jt2-EfNVm<((TAODnlFUX<7z6v9!sRM4gUUXHPVGG|fdKrj&w@J+f7|)!^#9aIz5iGPEYR zKB*8?cFCPNlRG!RC;z2-3ZEN;=m;I<3oR`T21fRg+;A9s4Il( z`yu|&v$ir4q}1C=T++>lX8%Cx5_A$P z+~`YyYCyL|BA&eh1H=e(QfRB8^%6<)S-@{}c$vrDoEFAH!sTQ=nK5NrMR@B&g-Xat za-6_7gdY)J>(jrVYxL6aj)K4Hq&`b$xM6a!vH0jrjEsMuX0QH1yWq1!f#o*i5$sEb zEA=*Pz4DL0Mz|q5Y)b^jZyqm))?qJClYeVr&-Y_5$Os6HRN_1U7(;Bvk@xGDBPId@ z&g;2$Z%3|=9zKp%A34399NYDbTz(4>2hvTw08dS(nNn@2l43;SV~|$4ffRN6N(GJ# z?c|^@qg1akK9JF-nUdq(Z&#tJv^f`NqWXL=aaU3?!s2pbRHYgVV*Kgh)EKAW=l0rO zRLpNZ1p_LWT6xH@>Ag>P2Vaddkr};2WmFLGWyox8#sf*@TbBspufD7hA+luaP*W{d zI2GN*{LwRF{8_*s|CeA$2bfT|IRQi5cqe}OP?zYRfK$y{xcjG0qdRl1ts0KGfL(?= zf-TqsAJ?VCKJboC4)nw;jY~50+{JWdT>A8lKKGZ2!WcjhW&@Jy#AY2S5DM6Q$m5jD zkdG15%9POA%_derk2?xyoqCJ^o&KFT;7(fS8o(=N|E1+w)Vm)Wgb_2^o~TmMEp-5N zS7YF2G2KGrGkjw|Co;||>g{Ha%K5vHwiMs*&1ZJJ$=zRmf!Gx`wN0ObE7&~g#id3|W4X8A>W}BTS!|2n z;x?c6$raxmZh`BWb`BhMC-6+@nv&3*rPq|&WC~QwHn`W?c@a#Q2K`^gW65EEe zOOrl?W7Zohk%V=%aRj(xhI5 zJE{IV_5F4AVmN3qa3FdwEqd=!h5ZHfzi=gtGu8f{k=HiqnT!c#NA)|NnE0M73Kb@J z^2$|H*D*6yZ3*4; z`Bw5ibPVYhxv@#TTGaNQ^(pBBut1t;`Yxy*Jre+pN9_tD|d{=8bho% zc6s=7NoTOfZ+8^X`{$GS>RI zoYKuq8X#MZfQA)CDaTR!XiH!W`)d%=YDRawK#B2T(C=LnSVXD^Nehb=v|_eqxc?=h z!T=?-6Jt8eaS@-3c9AIW2WlIni=Ra*R)3&juG!cn&6M>#j0!EtrrZ@HB}$rEZ8B5> z=QNodwO{e=-Dmed0Z&*dO&B6iyj@*H8FV;uZ?zt_xUxF=Y^!H}lOY7x!9p?o4SK&n zNkQ+Y7}>jTur<PR$_ON<3yX-gZ|1>kdeem!<%*nLYagStuC0|;j{JzD z^>LXeY>j)$6t|{K@54L-U@`(Pr+;DrwM}N_n8{hsDZDpC*w(jcUNkw{8?HlAZq6by0tRQ%|5Q)?T_# zXn}&N1$eSDq4HiQu@@Ww37m|i(?<*i@k=9G$-g7Y&LLc<`?dA728($M&=?&=ChM{y z-0aLmS#MgJXg^fT{UT0E?TqQ_<;&{FhY*N_YtG((L%d-i(sW2u%7vz}uBjHh31o3G zEvynr3T@Asqui!6GRuRwo?BgFpi2nbYSPG8HT@*r@|4jZ5HjvQ?Q@7BKh-}ReAkSn z{jzp`u!mbl^7o=_1ty3g9yvUFQ}RK(svxv&GFo>Zg+X)j+u*XJXG+_&K4uQ$EbGGnpEO7`8Oo0BGs?V!<$a&_z$!I8?Ph0GmQY{k=`I!+Bi}JLfS2sreTa zo&6hc&qLKAglq4Q+WRq|GG827dss)mPhBYuOhvI5b#RCe4_rhv!=~l?zwIqQ+VHj2 z+E`>zImBg49g|*g{d8t&*`m7+(oEu`YGv_+TvrlVqr&|2(3m94Pi&+lY5l2vJeL@w z{wA5}{yMS0qNSbJ69vdX>6LGf zkcW6OHJWtRu}BWiT9b9-2R(?XyipIDM=qPcPhn{jlV z7!X`XC~@--B@yCm+4_MRaU~_ESVWB6u$JC{3<=IhL0vXbVF-C?$Nk(u#^o_OT#o5g z_M|fO<3kg1htQ9kCi2g!zvL#0VmB^`9y@(~_Z4ukR{tp>j1sb@tp)@JyBdTHg-c=~ zujrPLMfAFS+n%p}JYPT^eh6LQQoJnM+ufrFBIka-`k0l{Jks}}Q;s5T#0dg{lnQ5a z`;J*(BnXTxJqg&YYYaucFwNMJPs%E}Q#LNqWWJuPK-v44`x1Xd_CJBjwq^!s|0}Y7 zz$*BEM=UE_8zGJ-ms&GZ{lAd?6}A8G%OH8r8c6+raDy}g0`dQ!^gqu>NHQLjG+D%k z4e3TNnM|K4IrjCH;9WA$JJ#esHf)Fm$ym11h&9Qow(L~@xmFDk0l^*#0fFHE5;L8g ZVk?2Dm;B3C9FaJgz>XP>&+0#d{|^#Q*Z%+j delta 16401 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 { const firstPicture: Word.InlinePicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); + firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -16431,7 +16431,7 @@ 'Word.Border:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16464,7 +16464,7 @@ 'Word.BorderCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16497,7 +16497,7 @@ 'Word.BorderCollection#outsideBorderColor:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16530,7 +16530,7 @@ 'Word.BorderCollection#outsideBorderType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16563,7 +16563,7 @@ 'Word.BorderCollection#outsideBorderWidth:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -16631,7 +16631,7 @@ 'Word.BorderWidth:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -17401,7 +17401,7 @@ 'Word.CompareTarget:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml // Compares the current document with a specified external document. @@ -19403,7 +19403,7 @@ const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; context.document.addStyle(newStyleName, newStyleType); await context.sync(); - + console.log(newStyleName + " has been added to the style list."); }); 'Word.Document#close:member(1)': @@ -19422,7 +19422,7 @@ 'Word.Document#compare:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml // Compares the current document with a specified external document. @@ -19518,7 +19518,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml - // Gets the number of styles. + // Gets the number of available styles stored with the document. await Word.run(async (context) => { const styles: Word.StyleCollection = context.document.getStyles(); @@ -19530,7 +19530,7 @@ 'Word.Document#importStylesFromJson:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml // Imports styles from JSON. @@ -19927,7 +19927,7 @@ 'Word.DocumentCompareOptions:interface': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml // Compares the current document with a specified external document. @@ -20537,7 +20537,7 @@ 'Word.ImageFormat:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml // Gets the first image in the document. @@ -20564,10 +20564,10 @@ await Word.run(async (context) => { const firstPicture: Word.InlinePicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); + firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -20593,7 +20593,7 @@ 'Word.InlinePicture#imageFormat:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml // Gets the first image in the document. @@ -20620,10 +20620,10 @@ await Word.run(async (context) => { const firstPicture: Word.InlinePicture = context.document.body.inlinePictures.getFirst(); - firstPicture.load("width, height"); + firstPicture.load("width, height, imageFormat"); await context.sync(); - console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`, `Image format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -20886,7 +20886,7 @@ 'Word.ListBuiltInNumberStyle:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21029,7 +21029,7 @@ 'Word.ListLevel:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21065,7 +21065,7 @@ 'Word.ListLevelCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21176,7 +21176,7 @@ 'Word.ListTemplate:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -21380,7 +21380,7 @@ 'Word.OutlineLevel:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml // Imports styles from JSON. @@ -22704,7 +22704,7 @@ 'Word.Shading:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates shading properties (e.g., texture, pattern colors) of the @@ -22738,7 +22738,7 @@ 'Word.ShadingTextureType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates shading properties (e.g., texture, pattern colors) of the @@ -22798,7 +22798,7 @@ 'Word.Style#borders:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates border properties (e.g., type, width, color) of the specified @@ -22859,7 +22859,7 @@ 'Word.Style#listTemplate:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. @@ -22958,7 +22958,7 @@ 'Word.Style#shading:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml // Updates shading properties (e.g., texture, pattern colors) of the @@ -23018,7 +23018,7 @@ const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; context.document.addStyle(newStyleName, newStyleType); await context.sync(); - + console.log(newStyleName + " has been added to the style list."); }); 'Word.StyleCollection#getCount:member(1)': @@ -23027,7 +23027,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml - // Gets the number of styles. + // Gets the number of available styles stored with the document. await Word.run(async (context) => { const styles: Word.StyleCollection = context.document.getStyles(); @@ -23488,7 +23488,7 @@ 'Word.TableStyle:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml // Gets the table style properties and displays them in the form. @@ -23702,7 +23702,7 @@ 'Word.TrailingCharacter:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml // Gets the properties of the specified style. diff --git a/view-prod/word.json b/view-prod/word.json index 37f0b1a50..c3af24568 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -13,6 +13,7 @@ "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml", + "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml", "word-paragraph-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml", "word-paragraph-insert-line-and-page-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml", @@ -33,6 +34,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml", "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml", @@ -48,15 +50,11 @@ "word-document-get-external-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", + "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", - "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml", - "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-list-styles.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", - "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-styles.yaml", - "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-custom-style.yaml" + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index e66ed8d05..fc36e63cc 100644 --- a/view/word.json +++ b/view/word.json @@ -13,6 +13,7 @@ "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/insert-list.yaml", + "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/manage-list-styles.yaml", "word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/organize-list.yaml", "word-paragraph-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml", "word-paragraph-insert-line-and-page-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-line-and-page-breaks.yaml", @@ -33,6 +34,7 @@ "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/compare-location.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-formatting.yaml", + "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-custom-style.yaml", "word-document-manage-body": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-body.yaml", "word-document-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml", "word-document-insert-external-document": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-external-document.yaml", @@ -48,15 +50,11 @@ "word-document-get-external-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/get-external-styles.yaml", "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", + "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", - "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/compare-documents.yaml", "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", - "word-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-get-pictures.yaml", - "word-lists-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-list-styles.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", - "word-manage-styles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-styles.yaml", - "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-custom-style.yaml" + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file From af277afe1a4af281d46e45596126fd82e89abc02 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 29 Aug 2024 12:02:28 -0700 Subject: [PATCH 086/156] [PowerPoint] [Word] Map snippets at class/enum level (#931) --- snippet-extractor-metadata/powerpoint.xlsx | Bin 13554 -> 13927 bytes snippet-extractor-metadata/word.xlsx | Bin 26937 -> 27549 bytes snippet-extractor-output/snippets.yaml | 747 +++++++++++++++++++++ 3 files changed, 747 insertions(+) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 93e9517e267d71f9ab02a7cb574543501637aedf..b026df301c9895d2451556e867e015b994737620 100644 GIT binary patch delta 5935 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 diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 927eee6296d1c28a51eb9a06895595a5d7831103..530eac3d29ed6019a1f7d501f49508e6718535a9 100644 GIT binary patch delta 15365 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 bTL{Cn8zoFx2*G%mCZJo=BBXr%kLLdYO~^eb delta 14720 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml + + await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. const presentation = context.presentation; @@ -14443,6 +14464,28 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); +'PowerPoint.Shape:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the transparency of every geometric shape in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the shape transparency to be halfway transparent. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.geometricShape) { + shape.fill.transparency = 0.5; + } + }); + await context.sync(); + }); 'PowerPoint.Shape#fill:member': - >- // Link to full sample: @@ -14595,6 +14638,28 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); +'PowerPoint.ShapeCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Changes the transparency of every geometric shape in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the shape transparency to be halfway transparent. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.geometricShape) { + shape.fill.transparency = 0.5; + } + }); + await context.sync(); + }); 'PowerPoint.ShapeCollection#addGeometricShape:member(1)': - >- // Link to full sample: @@ -14699,6 +14764,28 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + // Changes the transparency of every geometric shape in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the shape transparency to be halfway transparent. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.geometricShape) { + shape.fill.transparency = 0.5; + } + }); + await context.sync(); + }); +'PowerPoint.ShapeFill:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + // Changes the transparency of every geometric shape in the slide. await PowerPoint.run(async (context) => { @@ -14755,6 +14842,19 @@ }); await context.sync(); }); +'PowerPoint.ShapeFont:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + + + // Sets the color of the selected text range to green. + + await PowerPoint.run(async (context) => { + const textRange = context.presentation.getSelectedTextRange(); + textRange.font.color = "green"; + await context.sync(); + }); 'PowerPoint.ShapeFont#color:member': - >- // Link to full sample: @@ -14774,6 +14874,28 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + // Changes the dash style of every line in the slide. + + await PowerPoint.run(async (context) => { + // Get the type of shape for every shape in the collection. + const shapes = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type"); + await context.sync(); + + // Change the dash style for shapes of the type `line`. + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.line) { + shape.lineFormat.dashStyle = PowerPoint.ShapeLineDashStyle.dashDot; + } + }); + await context.sync(); + }); +'PowerPoint.ShapeLineFormat:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + // Changes the dash style of every line in the slide. await PowerPoint.run(async (context) => { @@ -14834,6 +14956,20 @@ }); await context.sync(); }); +'PowerPoint.Slide:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Reselects shapes that were saved previously. + + await PowerPoint.run(async (context) => { + const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); + await context.sync(); + slide1.setSelectedShapes(savedShapeSelection); + await context.sync(); + }); 'PowerPoint.Slide#delete:member(1)': - >- // Link to full sample: @@ -14889,6 +15025,26 @@ slide1.setSelectedShapes([shape1.id, shape2.id]); await context.sync(); }); +'PowerPoint.SlideCollection#add:member(class)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + + + const chosenMaster = $("#master-id").val() as string; + + const chosenLayout = $("#layout-id").val() as string; + + + await PowerPoint.run(async function(context) { + // Create a new slide using an existing master slide and layout. + const newSlideOptions: PowerPoint.AddSlideOptions = { + slideMasterId: chosenMaster, /* An ID from `Presentation.slideMasters`. */ + layoutId: chosenLayout /* An ID from `SlideMaster.layouts`. */ + }; + context.presentation.slides.add(newSlideOptions); + await context.sync(); + }); 'PowerPoint.SlideCollection#add:member(1)': - >- // Link to full sample: @@ -14936,12 +15092,58 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); +'PowerPoint.SlideLayout:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + + + await PowerPoint.run(async function(context) { + // Load information about all the slide masters and associated layouts. + const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + await context.sync(); + + // Log the name and ID of each slide master. + for (let i = 0; i < slideMasters.items.length; i++) { + console.log("Master name: " + slideMasters.items[i].name); + console.log("Master ID: " + slideMasters.items[i].id); + + // Log the name and ID of each slide layout in the slide master. + const layoutsInMaster = slideMasters.items[i].layouts; + for (let j = 0; j < layoutsInMaster.items.length; j++) { + console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); + } + } + }); 'PowerPoint.SlideLayout#id:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + await PowerPoint.run(async function(context) { + // Load information about all the slide masters and associated layouts. + const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + await context.sync(); + + // Log the name and ID of each slide master. + for (let i = 0; i < slideMasters.items.length; i++) { + console.log("Master name: " + slideMasters.items[i].name); + console.log("Master ID: " + slideMasters.items[i].id); + + // Log the name and ID of each slide layout in the slide master. + const layoutsInMaster = slideMasters.items[i].layouts; + for (let j = 0; j < layoutsInMaster.items.length; j++) { + console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); + } + } + }); +'PowerPoint.SlideLayoutCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + + await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); @@ -14965,6 +15167,29 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + await PowerPoint.run(async function(context) { + // Load information about all the slide masters and associated layouts. + const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + await context.sync(); + + // Log the name and ID of each slide master. + for (let i = 0; i < slideMasters.items.length; i++) { + console.log("Master name: " + slideMasters.items[i].name); + console.log("Master ID: " + slideMasters.items[i].id); + + // Log the name and ID of each slide layout in the slide master. + const layoutsInMaster = slideMasters.items[i].layouts; + for (let j = 0; j < layoutsInMaster.items.length; j++) { + console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); + } + } + }); +'PowerPoint.SlideMaster:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + + await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); @@ -14988,6 +15213,29 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + await PowerPoint.run(async function(context) { + // Load information about all the slide masters and associated layouts. + const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + await context.sync(); + + // Log the name and ID of each slide master. + for (let i = 0; i < slideMasters.items.length; i++) { + console.log("Master name: " + slideMasters.items[i].name); + console.log("Master ID: " + slideMasters.items[i].id); + + // Log the name and ID of each slide layout in the slide master. + const layoutsInMaster = slideMasters.items[i].layouts; + for (let j = 0; j < layoutsInMaster.items.length; j++) { + console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); + } + } + }); +'PowerPoint.SlideMasterCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml + + await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); @@ -15028,6 +15276,30 @@ } } }); +'PowerPoint.TagCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + + + await PowerPoint.run(async function(context) { + let selectedSlideIndex = await getSelectedSlideIndex(); + + // Decrement because the getSelectedSlideByIndex method is 1-based, + // but the getItemAt method is 0-based. + selectedSlideIndex = selectedSlideIndex - 1; + const slide = context.presentation.slides.getItemAt(selectedSlideIndex); + slide.tags.add("CUSTOMER_TYPE", "Premium"); + + await context.sync(); + + const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + audienceTag.load("key, value"); + + await context.sync(); + + console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); + }); 'PowerPoint.TagCollection#add:member(1)': - >- // Link to full sample: @@ -15089,6 +15361,19 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); +'PowerPoint.TextRange:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + + + // Sets the color of the selected text range to green. + + await PowerPoint.run(async (context) => { + const textRange = context.presentation.getSelectedTextRange(); + textRange.font.color = "green"; + await context.sync(); + }); 'PowerPoint.TextRange#font:member': - >- // Link to full sample: @@ -15150,6 +15435,35 @@ textRange.setSelected(); await context.sync(); }); +'PowerPoint.TextVerticalAlignment:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + + // This function gets the collection of shapes on the first slide, + + // and adds a brace pair, {}, to the collection, while specifying its + + // location and size. Then it names the shape, sets its text and font + + // color, and centers it inside the braces. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.slides.getItemAt(0).shapes; + const braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { + left: 100, + top: 400, + height: 50, + width: 150 + }); + braces.name = "Braces"; + braces.textFrame.textRange.text = "Shape text"; + braces.textFrame.textRange.font.color = "purple"; + braces.textFrame.verticalAlignment = PowerPoint.TextVerticalAlignment.middleCentered; + + return context.sync(); + }); 'Word.Alignment:enum': - >- // Link to full sample: @@ -15172,6 +15486,33 @@ body.paragraphs.getFirst().alignment = "Left"; body.paragraphs.getLast().alignment = Word.Alignment.left; }); +'Word.Annotation:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + // Accepts the first annotation found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph: Word.Paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations: Word.AnnotationCollection = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + for (let i = 0; i < annotations.items.length; i++) { + const annotation: Word.Annotation = annotations.items[i]; + + if (annotation.state === Word.AnnotationState.created) { + console.log(`Accepting ID ${annotation.id}...`); + annotation.critiqueAnnotation.accept(); + + await context.sync(); + break; + } + } + }); 'Word.Annotation#delete:member(1)': - >- // Link to full sample: @@ -15574,6 +15915,30 @@ } } }); +'Word.Application#createDocument:member(class)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + + + // Updates the text of the current document with the text from another + document passed in as a Base64-encoded string. + + await Word.run(async (context) => { + // Use the Base64-encoded string representation of the selected .docx file. + const externalDoc: Word.DocumentCreated = context.application.createDocument(externalDocument); + await context.sync(); + + const externalDocBody: Word.Body = externalDoc.body; + externalDocBody.load("text"); + await context.sync(); + + // Insert the external document's text at the beginning of the current document's body. + const externalDocBodyText = externalDocBody.text; + const currentDocBody: Word.Body = context.document.body; + currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); + await context.sync(); + }); 'Word.Application#createDocument:member(1)': - >- // Link to full sample: @@ -17214,6 +17579,30 @@ ); }); } +'Word.CommentCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + + + // Replies to the first active comment in the selected content. + + await Word.run(async (context) => { + const text = $("#reply-text") + .val() + .toString(); + const comments: Word.CommentCollection = context.document.getSelection().getComments(); + comments.load("items"); + await context.sync(); + + const firstActiveComment: Word.Comment = comments.items.find((item) => item.resolved !== true); + if (firstActiveComment) { + const reply: Word.CommentReply = firstActiveComment.reply(text); + console.log("Reply added."); + } else { + console.warn("No active comment was found in the selection, so couldn't reply."); + } + }); 'Word.CommentCollection#getFirstOrNullObject:member(1)': - >- // Link to full sample: @@ -17927,6 +18316,24 @@ await context.sync(); }); +'Word.ContentControlCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml + + + await Word.run(async (context) => { + const contentControls: Word.ContentControlCollection = context.document.contentControls.getByTag("customer"); + contentControls.load("text"); + + await context.sync(); + + for (let i = 0; i < contentControls.items.length; i++) { + contentControls.items[i].insertText("Fabrikam", "Replace"); + } + + await context.sync(); + }); 'Word.ContentControlCollection#getByTag:member(1)': - >- // Link to full sample: @@ -18511,6 +18918,29 @@ console.log("Annotations inserted:", annotationIds.value); }); +'Word.CritiqueAnnotation:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml + + + // Gets annotations found in the selected paragraph. + + await Word.run(async (context) => { + const paragraph: Word.Paragraph = context.document.getSelection().paragraphs.getFirst(); + const annotations: Word.AnnotationCollection = paragraph.getAnnotations(); + annotations.load("id,state,critiqueAnnotation"); + + await context.sync(); + + console.log("Annotations found:"); + + for (let i = 0; i < annotations.items.length; i++) { + const annotation: Word.Annotation = annotations.items[i]; + + console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); + } + }); 'Word.CritiqueAnnotation#accept:member(1)': - >- // Link to full sample: @@ -18706,6 +19136,20 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + await Word.run(async (context) => { + const properties: Word.CustomPropertyCollection = context.document.properties.customProperties; + properties.load("key,type,value"); + + await context.sync(); + for (let i = 0; i < properties.items.length; i++) + console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); + }); +'Word.CustomPropertyCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + + await Word.run(async (context) => { const properties: Word.CustomPropertyCollection = context.document.properties.customProperties; properties.load("key,type,value"); @@ -18751,6 +19195,32 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); +'Word.CustomXmlPart:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + + // Adds a custom XML part. + + await Word.run(async (context) => { + const originalXml = + "JuanHongSally"; + const customXmlPart: Word.CustomXmlPart = context.document.customXmlParts.add(originalXml); + customXmlPart.load("id"); + const xmlBlob = customXmlPart.getXml(); + + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + console.log("Added custom XML part:", readableXml); + + // Store the XML part's ID in a setting so the ID is available to other functions. + const settings: Word.SettingCollection = context.document.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); + + await context.sync(); + }); 'Word.CustomXmlPart#delete:member(1)': - >- // Link to full sample: @@ -20211,6 +20681,26 @@ console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } +'Word.Field:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + + + // Gets the first field in the document. + + await Word.run(async (context) => { + const field: Word.Field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result", "locked", "type", "data", "kind"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("This document has no fields."); + } else { + console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); + } + }); 'Word.Field#delete:member(1)': - >- // Link to full sample: @@ -20417,6 +20907,30 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); +'Word.FieldCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + + + // Gets all fields in the document body. + + await Word.run(async (context) => { + const fields: Word.FieldCollection = context.document.body.fields.load("items"); + + await context.sync(); + + if (fields.items.length === 0) { + console.log("No fields in this document."); + } else { + fields.load(["code", "result"]); + await context.sync(); + + for (let i = 0; i < fields.items.length; i++) { + console.log(`Field ${i + 1}'s code: ${fields.items[i].code}`, `Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); + } + } + }); 'Word.FieldCollection#getFirstOrNullObject:member(1)': - >- // Link to full sample: @@ -20994,6 +21508,38 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); +'Word.ListItem:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + + + // This example starts a new list with the second paragraph. + + await Word.run(async (context) => { + const paragraphs: Word.ParagraphCollection = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Start new list using the second paragraph. + const list: Word.List = paragraphs.items[1].startNewList(); + list.load("$none"); + + await context.sync(); + + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item at the start of the list", "Start"); + const paragraph: Word.Paragraph = list.insertParagraph("New list item at the end of the list (set to list level 5)", "End"); + + // Set up list level for the list item. + paragraph.listItem.level = 4; + + // To add paragraphs outside the list, use Before or After. + list.insertParagraph("New paragraph goes after (not part of the list)", "After"); + + await context.sync(); + }); 'Word.ListItem#level:member': - >- // Link to full sample: @@ -21233,6 +21779,27 @@ const locationValue: Word.LocationRelation = comparedLocation.value; console.log(`Location of the first paragraph in relation to the second paragraph: ${locationValue}`); }); +'Word.NoteItem:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + + // Gets the text of the referenced footnote. + + await Word.run(async (context) => { + const footnotes: Word.NoteItemCollection = context.document.body.footnotes; + footnotes.load("items/body"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + const mark = (referenceNumber as number) - 1; + const footnoteBody: Word.Range = footnotes.items[mark].body.getRange(); + footnoteBody.load("text"); + await context.sync(); + + console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); + }); 'Word.NoteItem#delete:member(1)': - >- // Link to full sample: @@ -21339,6 +21906,20 @@ console.log(`Body type of note: ${item.body.type}`); }); +'Word.NoteItemCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + + // Gets the first footnote in the document body and select its reference + mark. + + await Word.run(async (context) => { + const reference: Word.Range = context.document.body.footnotes.getFirst().reference; + reference.select(); + console.log("The first footnote is selected."); + }); 'Word.NoteItemCollection#getFirst:member(1)': - >- // Link to full sample: @@ -21392,6 +21973,20 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); +'Word.Paragraph:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + + + await Word.run(async (context) => { + // The collection of paragraphs of the current selection returns the full paragraphs contained in it. + const paragraph: Word.Paragraph = context.document.getSelection().paragraphs.getFirst(); + paragraph.load("text"); + + await context.sync(); + console.log(paragraph.text); + }); 'Word.Paragraph#getRange:member(1)': - >- // Link to full sample: @@ -21893,6 +22488,22 @@ console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } +'Word.ParagraphCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + + + // Inserts an image anchored to the last paragraph. + + await Word.run(async (context) => { + context.document.body.paragraphs + .getLast() + .insertParagraph("", "After") + .insertInlinePictureFromBase64(base64Image, "End"); + + await context.sync(); + }); 'Word.ParagraphCollection#getFirst:member(1)': - >- // Link to full sample: @@ -22572,6 +23183,37 @@ await context.sync(); }); +'Word.Setting:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + + // Adds a new custom setting or + + // edits the value of an existing one. + + await Word.run(async (context) => { + const key = $("#key") + .val() + .toString(); + + if (key == "") { + console.error("Key shouldn't be empty."); + return; + } + + const value = $("#value") + .val() + .toString(); + + const settings: Word.SettingCollection = context.document.settings; + const setting: Word.Setting = settings.add(key, value); + setting.load(); + await context.sync(); + + console.log("Setting added or edited:", setting); + }); 'Word.Setting#key:member': - >- // Link to full sample: @@ -22769,6 +23411,41 @@ console.log("Updated shading."); } }); +'Word.Style:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + + + // Applies the specified style to a paragraph. + + await Word.run(async (context) => { + const styleName = $("#style-name-to-use").val() as string; + if (styleName == "") { + console.warn("Enter a style name to apply."); + return; + } + + const style: Word.Style = context.document.getStyles().getByNameOrNullObject(styleName); + style.load(); + await context.sync(); + + if (style.isNullObject) { + console.warn(`There's no existing style with the name '${styleName}'.`); + } else if (style.type != Word.StyleType.paragraph) { + console.log(`The '${styleName}' style isn't a paragraph style.`); + } else { + const body: Word.Body = context.document.body; + body.clear(); + body.insertParagraph( + "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", + "Start" + ); + const paragraph: Word.Paragraph = body.paragraphs.getFirst(); + paragraph.style = style.nameLocal; + console.log(`'${styleName}' style applied to first paragraph.`); + } + }); 'Word.Style#delete:member(1)': - >- // Link to full sample: @@ -22989,6 +23666,21 @@ console.log("Updated shading."); } }); +'Word.StyleCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml + + + // Gets the number of available styles stored with the document. + + await Word.run(async (context) => { + const styles: Word.StyleCollection = context.document.getStyles(); + const count = styles.getCount(); + await context.sync(); + + console.log(`Number of styles: ${count.value}`); + }); 'Word.StyleCollection#getByNameOrNullObject:member(1)': - >- // Link to full sample: @@ -23201,6 +23893,23 @@ await context.sync(); }); +'Word.TableBorder:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + + // Gets border details about the first table in the document. + + await Word.run(async (context) => { + const firstTable: Word.Table = context.document.body.tables.getFirst(); + const borderLocation = Word.BorderLocation.top; + const border: Word.TableBorder = firstTable.getBorder(borderLocation); + border.load(["type", "color", "width"]); + await context.sync(); + + console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); + }); 'Word.TableBorder#color:member': - >- // Link to full sample: @@ -23392,6 +24101,24 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); +'Word.TableRow:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + + // Gets content alignment details about the first cell of the first table in + the document. + + await Word.run(async (context) => { + const firstTable: Word.Table = context.document.body.tables.getFirst(); + const firstTableRow: Word.TableRow = firstTable.rows.getFirst(); + const firstCell: Word.TableCell = firstTableRow.cells.getFirst(); + firstCell.load(["horizontalAlignment", "verticalAlignment"]); + await context.sync(); + + console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); + }); 'Word.TableRow#getBorder:member(1)': - >- // Link to full sample: @@ -23627,6 +24354,26 @@ trackedChange.reject(); console.log("Rejected the first tracked change."); }); +'Word.TrackedChangeCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml + + + // Gets the range of the first tracked change. + + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + const trackedChanges: Word.TrackedChangeCollection = body.getTrackedChanges(); + const trackedChange: Word.TrackedChange = trackedChanges.getFirst(); + await context.sync(); + + const range: Word.Range = trackedChange.getRange(); + range.load(); + await context.sync(); + + console.log("range.text: " + range.text); + }); 'Word.TrackedChangeCollection#acceptAll:member(1)': - >- // Link to full sample: From 32ac5d65ea059b1fabbf8926690289771d7dc23d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 29 Aug 2024 12:40:23 -0700 Subject: [PATCH 087/156] [PowerPoint] [Word] Fix typos --- snippet-extractor-metadata/powerpoint.xlsx | Bin 13927 -> 13891 bytes snippet-extractor-metadata/word.xlsx | Bin 27549 -> 27520 bytes snippet-extractor-output/snippets.yaml | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index b026df301c9895d2451556e867e015b994737620..db60e01cea6059a16bd60aa01d2662184020b1e5 100644 GIT binary patch delta 4452 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 F;XgR7By0cx delta 4522 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 o3-~8zuKy_t{?(ZjC=8!- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -15915,7 +15915,7 @@ } } }); -'Word.Application#createDocument:member(class)': +'Word.Application:class': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml From 75101a1e987d8f78834a1c8a02ed777882a2a189 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 18 Sep 2024 14:59:03 -0700 Subject: [PATCH 088/156] [PowerPoint] Add types (#934) --- playlists-prod/powerpoint.yaml | 19 +- playlists/powerpoint.yaml | 19 +- .../powerpoint/basics/basic-api-call-js.yaml | 5 +- .../powerpoint/basics/basic-api-call-ts.yaml | 5 +- .../basics/basic-common-api-call.yaml | 2 +- .../document/create-presentation.yaml | 2 +- samples/powerpoint/shapes/get-set-shapes.yaml | 22 +- .../powerpoint/shapes/get-shapes-by-type.yaml | 4 +- samples/powerpoint/shapes/shapes.yaml | 43 +- .../slide-management/add-slides.yaml | 4 +- .../slide-management/get-set-slides.yaml | 14 +- .../slide-management/get-slide-metadata.yaml | 2 +- .../slide-management/insert-slides.yaml | 4 +- samples/powerpoint/tags/tags.yaml | 22 +- .../powerpoint/text/get-set-textrange.yaml | 25 +- snippet-extractor-metadata/powerpoint.xlsx | Bin 13891 -> 14139 bytes snippet-extractor-output/snippets.yaml | 413 +++++++++++++----- 17 files changed, 407 insertions(+), 198 deletions(-) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index b49e82491..173fd9f1f 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -1,19 +1,21 @@ - id: powerpoint-basics-basic-api-call-ts name: Basic API call (TypeScript) fileName: basic-api-call-ts.yaml - description: Performs a basic PowerPoint API call using TypeScript + description: Performs a basic PowerPoint API call using TypeScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-api-call-ts.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-api-call-js name: Basic API call (JavaScript) fileName: basic-api-call-js.yaml - description: Performs a basic PowerPoint API call using JavaScript + description: Performs a basic PowerPoint API call using JavaScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-api-call-js.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -24,7 +26,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-common-api-call.yaml group: Basics api_set: - Selection: 1.1 + Selection: '1.1' - id: powerpoint-create-presentation name: Create presentation fileName: create-presentation.yaml @@ -35,7 +37,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/document/create-presentation.yaml group: Document api_set: - PowerPoint: 1.1 + PowerPoint: '1.1' - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml @@ -85,7 +87,8 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml group: Shapes - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-add-slides name: Add slides to a presentation fileName: add-slides.yaml @@ -107,7 +110,7 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slide(s).' + description: 'Gets the title, index, and ID of the selected slides.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 753885a9c..601310029 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -1,19 +1,21 @@ - id: powerpoint-basics-basic-api-call-ts name: Basic API call (TypeScript) fileName: basic-api-call-ts.yaml - description: Performs a basic PowerPoint API call using TypeScript + description: Performs a basic PowerPoint API call using TypeScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-api-call-ts.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-api-call-js name: Basic API call (JavaScript) fileName: basic-api-call-js.yaml - description: Performs a basic PowerPoint API call using JavaScript + description: Performs a basic PowerPoint API call using JavaScript. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-api-call-js.yaml group: Basics - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -24,7 +26,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-common-api-call.yaml group: Basics api_set: - Selection: 1.1 + Selection: '1.1' - id: powerpoint-create-presentation name: Create presentation fileName: create-presentation.yaml @@ -35,7 +37,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/document/create-presentation.yaml group: Document api_set: - PowerPoint: 1.1 + PowerPoint: '1.1' - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml @@ -85,7 +87,8 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml group: Shapes - api_set: PowerPointApi '1.4' + api_set: + PowerPointApi: '1.4' - id: powerpoint-add-slides name: Add slides to a presentation fileName: add-slides.yaml @@ -107,7 +110,7 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slide(s).' + description: 'Gets the title, index, and ID of the selected slides.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index 3e9f4f31d..851297dde 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -1,9 +1,10 @@ order: 2 id: powerpoint-basics-basic-api-call-js name: Basic API call (JavaScript) -description: Performs a basic PowerPoint API call using JavaScript +description: Performs a basic PowerPoint API call using JavaScript. host: POWERPOINT -api_set: PowerPointApi '1.4' +api_set: + PowerPointApi: '1.4' script: content: | $("#run").on("click", () => tryCatch(run)); diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 37a27057d..45a2a18db 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -1,9 +1,10 @@ order: 1 id: powerpoint-basics-basic-api-call-ts name: Basic API call (TypeScript) -description: Performs a basic PowerPoint API call using TypeScript +description: Performs a basic PowerPoint API call using TypeScript. host: POWERPOINT -api_set: PowerPointApi '1.4' +api_set: + PowerPointApi: '1.4' script: content: | $("#run").on("click", () => tryCatch(run)); diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index c1b11fb51..2043ebcf1 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -5,7 +5,7 @@ description: Executes a basic PowerPoint API call using the "common API" syntax author: OfficeDev host: POWERPOINT api_set: - Selection: 1.1 + Selection: '1.1' script: content: | $("#run").on("click", run); diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index 1133c3013..b460a6f93 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -4,7 +4,7 @@ description: 'Creates a new, empty presentation and creates a new presentation b author: OfficeDev host: POWERPOINT api_set: - PowerPoint: 1.1 + PowerPoint: '1.1' script: content: | $("#create-new-blank-presentation").on("click", () => tryCatch(createBlankPresentation)); diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 8e9209ba4..a34376075 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -19,7 +19,7 @@ script: // Gets the shapes you selected on the slide and displays their IDs on the task pane. await PowerPoint.run(async (context) => { let finalTable = ""; - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); finalTable += "
getSelectedShapes.getCount returned:" + shapeCount.value + "
"; @@ -44,9 +44,9 @@ script: const slide1 = context.presentation.slides.getItemAt(0); slide1.load("shapes"); await context.sync(); - const shapes = slide1.shapes; - const shape1 = shapes.getItemAt(0); - const shape2 = shapes.getItemAt(1); + const shapes: PowerPoint.ShapeCollection = slide1.shapes; + const shape1: PowerPoint.Shape = shapes.getItemAt(0); + const shape2: PowerPoint.Shape = shapes.getItemAt(1); shape1.load("id"); shape2.load("id"); await context.sync(); @@ -58,7 +58,7 @@ script: async function changeFill() { // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -76,7 +76,7 @@ script: await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -84,7 +84,7 @@ script: slides.items.map((slide) => { savedSlideSelection.push(slide.id); }); - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -97,7 +97,7 @@ script: async function loadShapeSelection() { // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedSlideSelection[0]); await context.sync(); slide1.setSelectedShapes(savedShapeSelection); await context.sync(); @@ -120,13 +120,13 @@ script: // Creates random shapes on the selected slide. await PowerPoint.run(async (context) => { let finalTable = ""; - const currentSlide = context.presentation.getSelectedSlides().getItemAt(0); + const currentSlide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); const maxNewShapeWidth = 200; const maxNewShapeHeight = 200; const minNewShapeWidth = 50; const minNewShapeHeight = 50; for (let i = 0; i < 20; i++) { - const rectangle = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); rectangle.height = getRandomBetween(minNewShapeWidth, maxNewShapeWidth); rectangle.width = getRandomBetween(minNewShapeHeight, maxNewShapeHeight); rectangle.left = getRandomBetween(0, slideWidth - rectangle.width); @@ -144,7 +144,7 @@ script: async function arrangeSelected() { // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 770e0581a..2c8607caa 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -15,7 +15,7 @@ script: // Changes the dash style of every line in the slide. await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -33,7 +33,7 @@ script: // Changes the transparency of every geometric shape in the slide. await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 9ca8e45ba..7e256a947 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -2,7 +2,8 @@ id: powerpoint-shapes name: 'Insert shape, line, and text box' description: 'Inserts geometric shapes, lines, and text boxes to a slide.' host: POWERPOINT -api_set: PowerPointApi '1.4' +api_set: + PowerPointApi: '1.4' script: content: | $("#create-hexagon").on("click", () => tryCatch(createHexagon)); @@ -18,14 +19,14 @@ script: // and adds a hexagon shape to the collection, while specifying its // location and size. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, - { - left: 100, - top: 100, - height: 150, - width: 150 - }); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); hexagon.name = "Hexagon"; await context.sync(); @@ -36,8 +37,8 @@ script: // This function gets the collection of shapes on the first slide, // gets the first shape in the collection, and resets its size. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const hexagon: PowerPoint.Shape = shapes.getItemAt(0); hexagon.height = 50; hexagon.width = 50; @@ -49,8 +50,8 @@ script: // This function gets the collection of shapes on the first slide, // gets the first shape in the collection, and resets its location. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const hexagon: PowerPoint.Shape = shapes.getItemAt(0); hexagon.top = 50; hexagon.left = 150; @@ -63,11 +64,11 @@ script: // and adds a line to the collection, while specifying its // start and end points. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; // For a line, left and top are the coordinates of the start point, // while height and width are the coordinates of the end point. - const line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line: PowerPoint.Shape = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -85,8 +86,8 @@ script: // and adds a text box to the collection, while specifying its text, // location, and size. Then it names the text box. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const textbox = shapes.addTextBox("Hello!", + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const textbox: PowerPoint.Shape = shapes.addTextBox("Hello!", { left: 100, top: 300, @@ -105,8 +106,8 @@ script: // location and size. Then it names the shape, sets its text and font // color, and centers it inside the braces. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const braces: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { left: 100, top: 400, height: 50, @@ -125,8 +126,8 @@ script: // This function gets the collection of shapes on the first slide, // and then iterates through them, deleting each one. await PowerPoint.run(async (context) => { - const slide = context.presentation.slides.getItemAt(0); - const shapes = slide.shapes; + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = slide.shapes; // Load all the shapes in the collection without loading their properties. shapes.load("items/$none"); diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 634c3c2a4..cd099bbbf 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -28,7 +28,7 @@ script: async function logSlideMasters() { await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -37,7 +37,7 @@ script: console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index ba5abe517..4b88a165b 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -23,7 +23,7 @@ script: const allSlidesCount = context.presentation.slides.getCount(); context.presentation.slides.load("items"); await context.sync(); - let allSlideItems = context.presentation.slides.items; + let allSlideItems: PowerPoint.Slide[] = context.presentation.slides.items; allSlideItems.map((slide, index) => { allSlidesList[slide.id] = `Slide ${index + 1}`; }); @@ -31,7 +31,7 @@ script: if ($("#id-check-usenative").is(":checked")) { context.presentation.load("tags"); } - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -51,7 +51,7 @@ script: await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -66,9 +66,9 @@ script: await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slide2 = context.presentation.slides.getItemAt(1); - const slide4 = context.presentation.slides.getItemAt(3); - const slide5 = context.presentation.slides.getItemAt(4); + const slide2: PowerPoint.Slide = context.presentation.slides.getItemAt(1); + const slide4: PowerPoint.Slide = context.presentation.slides.getItemAt(3); + const slide5: PowerPoint.Slide = context.presentation.slides.getItemAt(4); slide2.load("id"); slide4.load("id"); slide5.load("id"); @@ -91,7 +91,7 @@ script: let finalTable = ""; context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); await context.sync(); finalTable += "
getSelectedSlides.getCount returned:" + slideCount.value + "
"; diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index 832f1d030..7636d8435 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -1,7 +1,7 @@ order: 3 id: powerpoint-basics-get-slide-metadata name: Get slide metadata -description: 'Gets the title, index, and ID of the selected slide(s).' +description: 'Gets the title, index, and ID of the selected slides.' author: OfficeDev host: POWERPOINT api_set: {} diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 28a4950b4..1fb1a34d1 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -40,8 +40,8 @@ script: async function insertAfterSelectedSlide() { await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 08b0be75b..0c5c4fa5d 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -20,12 +20,12 @@ script: // Decrement because the getSelectedSlideByIndex method is 1-based, // but the getItemAt method is 0-based. selectedSlideIndex = selectedSlideIndex - 1; - const slide = context.presentation.slides.getItemAt(selectedSlideIndex); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(selectedSlideIndex); slide.tags.add("CUSTOMER_TYPE", "Premium"); await context.sync(); - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + const audienceTag: PowerPoint.Tag = slide.tags.getItem("CUSTOMER_TYPE"); audienceTag.load("key, value"); await context.sync(); @@ -56,7 +56,7 @@ script: async function deleteSlidesByAudience() { await PowerPoint.run(async function(context) { - const slides = context.presentation.slides; + const slides: PowerPoint.SlideCollection = context.presentation.slides; slides.load("tags/key, tags/value"); await context.sync(); @@ -64,7 +64,7 @@ script: for (let i = 0; i < slides.items.length; i++) { let currentSlide = slides.items[i]; for (let j = 0; j < currentSlide.tags.items.length; j++) { - let currentTag = currentSlide.tags.items[j]; + let currentTag: PowerPoint.Tag = currentSlide.tags.items[j]; if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") { currentSlide.delete(); } @@ -77,7 +77,7 @@ script: async function addMultipleSlideTags() { await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); slide.tags.add("OCEAN", "Indian"); slide.tags.add("PLANET", "Jupiter"); slide.tags.add("CONTINENT", "Antarctica"); @@ -96,13 +96,13 @@ script: async function addShapeTag() { await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); - const shape = slide.shapes.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shape: PowerPoint.Shape = slide.shapes.getItemAt(0); shape.tags.add("MOUNTAIN", "Denali"); await context.sync(); - const myShapeTag = shape.tags.getItem("MOUNTAIN"); + const myShapeTag: PowerPoint.Tag = shape.tags.getItem("MOUNTAIN"); myShapeTag.load("key, value"); await context.sync(); @@ -113,12 +113,12 @@ script: async function addPresentationTag() { await PowerPoint.run(async function (context) { - let presentationTags = context.presentation.tags; + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; presentationTags.add("COLOR", "blue"); await context.sync(); - const tag = presentationTags.getItem("COLOR"); + const tag: PowerPoint.Tag = presentationTags.getItem("COLOR"); tag.load("key, value"); await context.sync(); @@ -129,7 +129,7 @@ script: async function deletePresentationTag() { await PowerPoint.run(async function (context) { - let presentationTags = context.presentation.tags; + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; presentationTags.delete("COLOR"); diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index eb5263b48..63903e590 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -16,7 +16,7 @@ script: async function getSelectedTextRange() { // Gets the selected text range and prints data about the range on the task pane. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); try { await context.sync(); } catch (error) { @@ -48,24 +48,25 @@ script: $("#outputSpan").append(finalTable); }); } + async function setSelectedTextRange() { // Selects the first 10 characters of the selected shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); if (shapeCount.value !== 1) { console.warn("You must select only one shape with text in it."); return; } - const shape = shapes.getItemAt(0); - const textFrame = shape.textFrame.load("textRange,hasText"); + const shape: PowerPoint.Shape = shapes.getItemAt(0); + const textFrame: PowerPoint.TextFrame = shape.textFrame.load("textRange,hasText"); await context.sync(); if (textFrame.hasText != true) { console.warn("You must select only one shape with text in it."); return; } - const textRange = textFrame.textRange; + const textRange: PowerPoint.TextRange = textFrame.textRange; textRange.load("text"); await context.sync(); if (textRange.text.length < 10) { @@ -81,7 +82,7 @@ script: async function changeColor() { // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -97,7 +98,7 @@ script: let finalTable = ""; context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -106,14 +107,14 @@ script: savedTextSlideSelection.push(slide.id); }); - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); shapes.load("items"); await context.sync(); savedTextShapeSelection = []; shapes.items.map((shape) => { savedTextShapeSelection.push(shape.id); }); - const savedTextRange = context.presentation.getSelectedTextRangeOrNullObject(); + const savedTextRange: PowerPoint.TextRange = context.presentation.getSelectedTextRangeOrNullObject(); savedTextRange.load("start,length"); await context.sync(); if (savedTextRange.isNullObject) { @@ -128,9 +129,9 @@ script: async function loadTextSelection() { // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); - const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); - const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1: PowerPoint.Shape = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange: PowerPoint.TextRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); textRange.setSelected(); await context.sync(); }); diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index db60e01cea6059a16bd60aa01d2662184020b1e5..b1aceaaedda557635634443ca52b9685196f7d5e 100644 GIT binary patch delta 5425 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
2Y36Jh2B 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c98bce98c..b9b075a17 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14101,11 +14101,11 @@ // start and end points. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; // For a line, left and top are the coordinates of the start point, // while height and width are the coordinates of the end point. - const line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line: PowerPoint.Shape = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -14129,14 +14129,14 @@ // location and size. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, - { - left: 100, - top: 100, - height: 150, - width: 150 - }); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); hexagon.name = "Hexagon"; await context.sync(); @@ -14149,8 +14149,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14170,8 +14170,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14191,8 +14191,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14213,7 +14213,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14242,7 +14242,7 @@ await PowerPoint.run(async (context) => { let finalTable = ""; - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); finalTable += "
getSelectedShapes.getCount returned:" + shapeCount.value + "
"; @@ -14267,7 +14267,7 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -14275,7 +14275,7 @@ slides.items.map((slide) => { savedSlideSelection.push(slide.id); }); - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14299,7 +14299,7 @@ const allSlidesCount = context.presentation.slides.getCount(); context.presentation.slides.load("items"); await context.sync(); - let allSlideItems = context.presentation.slides.items; + let allSlideItems: PowerPoint.Slide[] = context.presentation.slides.items; allSlideItems.map((slide, index) => { allSlidesList[slide.id] = `Slide ${index + 1}`; }); @@ -14307,7 +14307,7 @@ if ($("#id-check-usenative").is(":checked")) { context.presentation.load("tags"); } - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -14333,7 +14333,7 @@ let finalTable = ""; context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); await context.sync(); finalTable += "
getSelectedSlides.getCount returned:" + slideCount.value + "
"; @@ -14360,7 +14360,7 @@ pane. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); try { await context.sync(); } catch (error) { @@ -14399,9 +14399,9 @@ // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); - const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); - const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1: PowerPoint.Shape = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange: PowerPoint.TextRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); textRange.setSelected(); await context.sync(); }); @@ -14413,8 +14413,8 @@ await PowerPoint.run(async function(context) { // Get the ID of the first selected slide. - const presentation = context.presentation; - const selected = presentation.getSelectedSlides().getItemAt(0); + const presentation: PowerPoint.Presentation = context.presentation; + const selected: PowerPoint.Slide = presentation.getSelectedSlides().getItemAt(0); selected.load("id"); await context.sync(); @@ -14448,9 +14448,9 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slide2 = context.presentation.slides.getItemAt(1); - const slide4 = context.presentation.slides.getItemAt(3); - const slide5 = context.presentation.slides.getItemAt(4); + const slide2: PowerPoint.Slide = context.presentation.slides.getItemAt(1); + const slide4: PowerPoint.Slide = context.presentation.slides.getItemAt(3); + const slide5: PowerPoint.Slide = context.presentation.slides.getItemAt(4); slide2.load("id"); slide4.load("id"); slide5.load("id"); @@ -14474,7 +14474,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14484,6 +14484,29 @@ shape.fill.transparency = 0.5; } }); + await context.sync(); + }); +'PowerPoint.Shape#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + + // This function gets the collection of shapes on the first slide, + + // and then iterates through them, deleting each one. + + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shapes: PowerPoint.ShapeCollection = slide.shapes; + + // Load all the shapes in the collection without loading their properties. + shapes.load("items/$none"); + + await context.sync(); + + shapes.items.forEach((shape) => shape.delete()); + await context.sync(); }); 'PowerPoint.Shape#fill:member': @@ -14495,7 +14518,7 @@ // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14513,7 +14536,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14541,7 +14564,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14569,7 +14592,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14598,7 +14621,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14619,7 +14642,7 @@ // Arranges the selected shapes in a line from left to right. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14638,6 +14661,31 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); +'PowerPoint.ShapeAddOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + + + // This function gets the collection of shapes on the first slide, + + // and adds a hexagon shape to the collection, while specifying its + + // location and size. Then it names the shape. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); + hexagon.name = "Hexagon"; + + await context.sync(); + }); 'PowerPoint.ShapeCollection:class': - >- // Link to full sample: @@ -14648,7 +14696,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14673,14 +14721,14 @@ // location and size. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, - { - left: 100, - top: 100, - height: 150, - width: 150 - }); + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 100, + height: 150, + width: 150 + }; + const hexagon: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, shapeOptions); hexagon.name = "Hexagon"; await context.sync(); @@ -14698,11 +14746,11 @@ // start and end points. Then it names the shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; // For a line, left and top are the coordinates of the start point, // while height and width are the coordinates of the end point. - const line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line: PowerPoint.Shape = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -14726,8 +14774,8 @@ // location, and size. Then it names the text box. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const textbox = shapes.addTextBox("Hello!", + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const textbox: PowerPoint.Shape = shapes.addTextBox("Hello!", { left: 100, top: 300, @@ -14745,13 +14793,13 @@ await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); - const shape = slide.shapes.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); + const shape: PowerPoint.Shape = slide.shapes.getItemAt(0); shape.tags.add("MOUNTAIN", "Denali"); await context.sync(); - const myShapeTag = shape.tags.getItem("MOUNTAIN"); + const myShapeTag: PowerPoint.Tag = shape.tags.getItem("MOUNTAIN"); myShapeTag.load("key, value"); await context.sync(); @@ -14768,7 +14816,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14790,7 +14838,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14802,6 +14850,33 @@ }); await context.sync(); }); +'PowerPoint.ShapeFill#foregroundColor:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Creates random shapes on the selected slide. + + await PowerPoint.run(async (context) => { + let finalTable = ""; + const currentSlide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const maxNewShapeWidth = 200; + const maxNewShapeHeight = 200; + const minNewShapeWidth = 50; + const minNewShapeHeight = 50; + for (let i = 0; i < 20; i++) { + const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + rectangle.height = getRandomBetween(minNewShapeWidth, maxNewShapeWidth); + rectangle.width = getRandomBetween(minNewShapeHeight, maxNewShapeHeight); + rectangle.left = getRandomBetween(0, slideWidth - rectangle.width); + rectangle.top = getRandomBetween(0, slideHeight - rectangle.height); + rectangle.fill.foregroundColor = generateRandomHexColor(); + } + finalTable += "Done
"; + $("#slide-tags").empty(); + $("#slide-tags").append(finalTable); + }); 'PowerPoint.ShapeFill#setSolidColor:member(1)': - >- // Link to full sample: @@ -14811,7 +14886,7 @@ // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); @@ -14830,7 +14905,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14851,7 +14926,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -14864,7 +14939,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -14878,7 +14953,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14900,7 +14975,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14922,7 +14997,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14934,6 +15009,50 @@ }); await context.sync(); }); +'PowerPoint.ShapeScopedCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Changes the selected shapes fill color to red. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + shape.fill.setSolidColor("red"); + }); + await context.sync(); + }); +'PowerPoint.ShapeScopedCollection#getCount:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Gets the shapes you selected on the slide and displays their IDs on the + task pane. + + await PowerPoint.run(async (context) => { + let finalTable = ""; + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + await context.sync(); + finalTable += "
getSelectedShapes.getCount returned:" + shapeCount.value + "
"; + finalTable += + "
"; + shapes.load("items"); + await context.sync(); + shapes.items.map((shape, index) => { + finalTable += ""; + }); + finalTable += "
IndexId
" + index + "" + shape.id + "
"; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); 'PowerPoint.ShapeType:enum': - >- // Link to full sample: @@ -14944,7 +15063,7 @@ await PowerPoint.run(async (context) => { // Get the type of shape for every shape in the collection. - const shapes = context.presentation.slides.getItemAt(0).shapes; + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; shapes.load("type"); await context.sync(); @@ -14965,7 +15084,7 @@ // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedSlideSelection[0]); await context.sync(); slide1.setSelectedShapes(savedShapeSelection); await context.sync(); @@ -14981,7 +15100,7 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slides = context.presentation.getSelectedSlides(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); await context.sync(); @@ -14998,7 +15117,7 @@ // Reselects shapes that were saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedSlideSelection[0]); await context.sync(); slide1.setSelectedShapes(savedShapeSelection); await context.sync(); @@ -15016,9 +15135,9 @@ const slide1 = context.presentation.slides.getItemAt(0); slide1.load("shapes"); await context.sync(); - const shapes = slide1.shapes; - const shape1 = shapes.getItemAt(0); - const shape2 = shapes.getItemAt(1); + const shapes: PowerPoint.ShapeCollection = slide1.shapes; + const shape1: PowerPoint.Shape = shapes.getItemAt(0); + const shape2: PowerPoint.Shape = shapes.getItemAt(1); shape1.load("id"); shape2.load("id"); await context.sync(); @@ -15076,9 +15195,9 @@ await PowerPoint.run(async (context) => { context.presentation.load("slides"); await context.sync(); - const slide2 = context.presentation.slides.getItemAt(1); - const slide4 = context.presentation.slides.getItemAt(3); - const slide5 = context.presentation.slides.getItemAt(4); + const slide2: PowerPoint.Slide = context.presentation.slides.getItemAt(1); + const slide4: PowerPoint.Slide = context.presentation.slides.getItemAt(3); + const slide5: PowerPoint.Slide = context.presentation.slides.getItemAt(4); slide2.load("id"); slide4.load("id"); slide5.load("id"); @@ -15100,7 +15219,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15109,7 +15228,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15123,7 +15242,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15132,7 +15251,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15146,7 +15265,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15155,7 +15274,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15169,7 +15288,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15178,7 +15297,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15192,7 +15311,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15201,7 +15320,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15215,7 +15334,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15224,7 +15343,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15238,7 +15357,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15247,7 +15366,7 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } @@ -15261,7 +15380,7 @@ await PowerPoint.run(async function(context) { // Load information about all the slide masters and associated layouts. - const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + const slideMasters: PowerPoint.SlideMasterCollection = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); await context.sync(); // Log the name and ID of each slide master. @@ -15270,12 +15389,58 @@ console.log("Master ID: " + slideMasters.items[i].id); // Log the name and ID of each slide layout in the slide master. - const layoutsInMaster = slideMasters.items[i].layouts; + const layoutsInMaster: PowerPoint.SlideLayoutCollection = slideMasters.items[i].layouts; for (let j = 0; j < layoutsInMaster.items.length; j++) { console.log(" Layout name: " + layoutsInMaster.items[j].name + " Layout ID: " + layoutsInMaster.items[j].id); } } }); +'PowerPoint.SlideScopedCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Saves which shapes are selected so that they can be reselected later. + + await PowerPoint.run(async (context) => { + context.presentation.load("slides"); + await context.sync(); + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + savedSlideSelection = []; + slides.items.map((slide) => { + savedSlideSelection.push(slide.id); + }); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + savedShapeSelection.push(shape.id); + }); + }); +'PowerPoint.Tag:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + + + await PowerPoint.run(async function (context) { + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; + presentationTags.add("COLOR", "blue"); + + await context.sync(); + + const tag: PowerPoint.Tag = presentationTags.getItem("COLOR"); + tag.load("key, value"); + + await context.sync(); + + console.log("Added key " + JSON.stringify(tag.key) + " with value " + JSON.stringify(tag.value)); + }); 'PowerPoint.TagCollection:class': - >- // Link to full sample: @@ -15288,12 +15453,12 @@ // Decrement because the getSelectedSlideByIndex method is 1-based, // but the getItemAt method is 0-based. selectedSlideIndex = selectedSlideIndex - 1; - const slide = context.presentation.slides.getItemAt(selectedSlideIndex); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(selectedSlideIndex); slide.tags.add("CUSTOMER_TYPE", "Premium"); await context.sync(); - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + const audienceTag: PowerPoint.Tag = slide.tags.getItem("CUSTOMER_TYPE"); audienceTag.load("key, value"); await context.sync(); @@ -15307,7 +15472,7 @@ await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(0); slide.tags.add("OCEAN", "Indian"); slide.tags.add("PLANET", "Jupiter"); slide.tags.add("CONTINENT", "Antarctica"); @@ -15329,7 +15494,7 @@ await PowerPoint.run(async function (context) { - let presentationTags = context.presentation.tags; + let presentationTags: PowerPoint.TagCollection = context.presentation.tags; presentationTags.delete("COLOR"); @@ -15349,18 +15514,52 @@ // Decrement because the getSelectedSlideByIndex method is 1-based, // but the getItemAt method is 0-based. selectedSlideIndex = selectedSlideIndex - 1; - const slide = context.presentation.slides.getItemAt(selectedSlideIndex); + const slide: PowerPoint.Slide = context.presentation.slides.getItemAt(selectedSlideIndex); slide.tags.add("CUSTOMER_TYPE", "Premium"); await context.sync(); - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + const audienceTag: PowerPoint.Tag = slide.tags.getItem("CUSTOMER_TYPE"); audienceTag.load("key, value"); await context.sync(); console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); +'PowerPoint.TextFrame:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + + + // Selects the first 10 characters of the selected shape. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + await context.sync(); + if (shapeCount.value !== 1) { + console.warn("You must select only one shape with text in it."); + return; + } + const shape: PowerPoint.Shape = shapes.getItemAt(0); + const textFrame: PowerPoint.TextFrame = shape.textFrame.load("textRange,hasText"); + await context.sync(); + if (textFrame.hasText != true) { + console.warn("You must select only one shape with text in it."); + return; + } + const textRange: PowerPoint.TextRange = textFrame.textRange; + textRange.load("text"); + await context.sync(); + if (textRange.text.length < 10) { + console.warn("You must select only one shape with at least 10 characters in it."); + return; + } + const textRange10 = textRange.getSubstring(0, 10); + textRange10.setSelected(); + await context.sync(); + }); 'PowerPoint.TextRange:class': - >- // Link to full sample: @@ -15370,7 +15569,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -15383,7 +15582,7 @@ // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); + const textRange: PowerPoint.TextRange = context.presentation.getSelectedTextRange(); textRange.font.color = "green"; await context.sync(); }); @@ -15396,21 +15595,21 @@ // Selects the first 10 characters of the selected shape. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); await context.sync(); if (shapeCount.value !== 1) { console.warn("You must select only one shape with text in it."); return; } - const shape = shapes.getItemAt(0); - const textFrame = shape.textFrame.load("textRange,hasText"); + const shape: PowerPoint.Shape = shapes.getItemAt(0); + const textFrame: PowerPoint.TextFrame = shape.textFrame.load("textRange,hasText"); await context.sync(); if (textFrame.hasText != true) { console.warn("You must select only one shape with text in it."); return; } - const textRange = textFrame.textRange; + const textRange: PowerPoint.TextRange = textFrame.textRange; textRange.load("text"); await context.sync(); if (textRange.text.length < 10) { @@ -15429,9 +15628,9 @@ // Sets the range selection to the range that was saved previously. await PowerPoint.run(async (context) => { - const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); - const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); - const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + const slide1: PowerPoint.Slide = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1: PowerPoint.Shape = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange: PowerPoint.TextRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); textRange.setSelected(); await context.sync(); }); @@ -15450,8 +15649,8 @@ // color, and centers it inside the braces. await PowerPoint.run(async (context) => { - const shapes = context.presentation.slides.getItemAt(0).shapes; - const braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const braces: PowerPoint.Shape = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { left: 100, top: 400, height: 50, From edfe801b73ee63f16c83b49bbfa4016627f04e99 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 24 Sep 2024 08:56:05 -0700 Subject: [PATCH 089/156] [PowerPoint] Add manage-hyperlinks (#936) * [PowerPoint] Add manage-hyperlinks * Tweak * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Run yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/powerpoint.yaml | 9 +++ playlists/powerpoint.yaml | 9 +++ .../preview-apis/manage-hyperlinks.yaml | 74 ++++++++++++++++++ snippet-extractor-metadata/powerpoint.xlsx | Bin 14139 -> 14265 bytes snippet-extractor-output/snippets.yaml | 38 +++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 7 files changed, 132 insertions(+) create mode 100644 samples/powerpoint/preview-apis/manage-hyperlinks.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 173fd9f1f..f83d1184f 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -54,6 +54,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml group: Images api_set: {} +- id: powerpoint-manage-hyperlinks + name: Get hyperlinks + fileName: manage-hyperlinks.yaml + description: Gets the hyperlinks found in a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + group: Preview APIs + api_set: + PowerPointApi: '1.6' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 601310029..208333651 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -54,6 +54,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml group: Images api_set: {} +- id: powerpoint-manage-hyperlinks + name: Get hyperlinks + fileName: manage-hyperlinks.yaml + description: Gets the hyperlinks found in a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + group: Preview APIs + api_set: + PowerPointApi: '1.6' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml diff --git a/samples/powerpoint/preview-apis/manage-hyperlinks.yaml b/samples/powerpoint/preview-apis/manage-hyperlinks.yaml new file mode 100644 index 000000000..ecff3e67f --- /dev/null +++ b/samples/powerpoint/preview-apis/manage-hyperlinks.yaml @@ -0,0 +1,74 @@ +id: powerpoint-manage-hyperlinks +name: Get hyperlinks +description: Gets the hyperlinks found in a slide. +host: POWERPOINT +api_set: + PowerPointApi: '1.6' +script: + content: | + $("#get-hyperlinks").on("click", () => tryCatch(getHyperlinks)); + + async function getHyperlinks() { + // Gets the hyperlinks found in the first selected slide. + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const hyperlinks: PowerPoint.HyperlinkCollection = slide.hyperlinks.load("address,screenTip"); + const hyperlinksCount = hyperlinks.getCount(); + await context.sync(); + + console.log(`${hyperlinksCount.value} hyperlinks found in first selected slide:`); + for (let link of hyperlinks.items) { + console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); + } + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

Demonstrates how to get the hyperlinks located in a slide.

+
+ +
+

Try it out

+

First, add at least one hyperlink to a slide then select at least one slide.

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index b1aceaaedda557635634443ca52b9685196f7d5e..a6d8a5117305c6deec9f852984e107c4b3eb2f01 100644 GIT binary patch delta 6164 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 Wk;a&UkKNCo;H07)xV1umE&c}+eyE-R delta 6007 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + + + // Gets the hyperlinks found in the first selected slide. + + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const hyperlinks: PowerPoint.HyperlinkCollection = slide.hyperlinks.load("address,screenTip"); + const hyperlinksCount = hyperlinks.getCount(); + await context.sync(); + + console.log(`${hyperlinksCount.value} hyperlinks found in first selected slide:`); + for (let link of hyperlinks.items) { + console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); + } + }); +'PowerPoint.HyperlinkCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + + + // Gets the hyperlinks found in the first selected slide. + + await PowerPoint.run(async (context) => { + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + const hyperlinks: PowerPoint.HyperlinkCollection = slide.hyperlinks.load("address,screenTip"); + const hyperlinksCount = hyperlinks.getCount(); + await context.sync(); + + console.log(`${hyperlinksCount.value} hyperlinks found in first selected slide:`); + for (let link of hyperlinks.items) { + console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); + } + }); 'PowerPoint.InsertSlideFormatting:enum': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index fc79f895f..f1ba45bb4 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -5,6 +5,7 @@ "powerpoint-create-presentation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/document/create-presentation.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml", + "powerpoint-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index 66d395397..bc13a10a0 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -5,6 +5,7 @@ "powerpoint-create-presentation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/document/create-presentation.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml", + "powerpoint-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/manage-hyperlinks.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", From 3f67f8d64dddf7fae88c8d64402bf7e76fb09a51 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:48:37 -0700 Subject: [PATCH 090/156] [Outlook] (delegate/shared) Update shared properties snippet (#938) * Update shared properties snippet * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Run script after applying suggestions --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 6 +- playlists/outlook.yaml | 6 +- .../get-shared-properties.yaml | 128 ++------ snippet-extractor-metadata/outlook.xlsx | Bin 24305 -> 24149 bytes snippet-extractor-output/snippets.yaml | 295 ++---------------- 5 files changed, 60 insertions(+), 375 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 466af2543..a9e6083dd 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -416,11 +416,11 @@ api_set: Mailbox: '1.13' - id: outlook-delegates-and-shared-folders-get-shared-properties - name: Perform an operation as delegate + name: Identify a shared folder or shared mailbox context fileName: get-shared-properties.yaml description: >- - Gets shared properties for an item, checks delegate permissions and performs - an operation as delegate. + Identifies whether the current mail item is in a shared folder or shared + mailbox by getting its properties. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml group: Delegates And Shared Folders diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 20fad5933..823cc6254 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -416,11 +416,11 @@ api_set: Mailbox: '1.13' - id: outlook-delegates-and-shared-folders-get-shared-properties - name: Perform an operation as delegate + name: Identify a shared folder or shared mailbox context fileName: get-shared-properties.yaml description: >- - Gets shared properties for an item, checks delegate permissions and performs - an operation as delegate. + Identifies whether the current mail item is in a shared folder or shared + mailbox by getting its properties. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml group: Delegates And Shared Folders diff --git a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml index 56bae1ba1..596f43789 100644 --- a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml +++ b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -1,127 +1,43 @@ id: outlook-delegates-and-shared-folders-get-shared-properties -name: Perform an operation as delegate -description: 'Gets shared properties for an item, checks delegate permissions and performs an operation as delegate.' +name: Identify a shared folder or shared mailbox context +description: Identifies whether the current mail item is in a shared folder or shared mailbox by getting its properties. host: OUTLOOK api_set: Mailbox: '1.8' script: content: | $("#get").on("click", get); - $("#run-message").on("click", runOnMessage); - $("#run-appointment").on("click", runOnAppointment); function get() { - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } - - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); - }); - } - - function runOnMessage() { - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on a message from a shared folder."); - return; - } - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function(result) { - if (result.status === Office.AsyncResultStatus.Succeeded && result.value !== "") { - Office.context.mailbox.item.getSharedPropertiesAsync( - { - // Pass auth token along. - asyncContext: result.value - }, - function(result2) { - let sharedProperties = result2.value; - let delegatePermissions = sharedProperties.delegatePermissions; - - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - const ewsId = Office.context.mailbox.item.itemId; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/messages/" + restId; - - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); - } - }); - } - - function runOnAppointment() { - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an appointment from a shared folder."); - return; - } - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function(result) { - if (result.status === Office.AsyncResultStatus.Succeeded && result.value !== "") { - Office.context.mailbox.item.getSharedPropertiesAsync( - { - // Pass auth token along. - asyncContext: result.value - }, - function(result2) { - let sharedProperties = result2.value; - let delegatePermissions = sharedProperties.delegatePermissions; - - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - const ewsId = Office.context.mailbox.item.itemId; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/events/" + restId; - - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); + Office.context.mailbox.item.getSharedPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error("The current folder or mailbox isn't shared."); + return; } + const sharedProperties = result.value; + console.log(`Owner: ${sharedProperties.owner}`); + console.log(`Permissions: ${sharedProperties.delegatePermissions}`); + console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); } language: typescript template: - content: | + content: |-
-

This sample shows how to perform an operation as delegate.

+

This sample shows how to identify if the current mail item is in a shared folder or shared mailbox. This is done + by getting the item's shared properties.

+

Required mode: Compose, Read

+

Note: If you're testing this in Message Compose mode in Outlook on web or on Windows (new or classic), you + must meet certain conditions to call the getSharedPropertiesAsync method. To learn more, see Implement shared folders and shared mailbox scenarios in an Outlook add-in.

-

Try it out on an item from a shared folder.

- - - +

Try it out on a message or appointment from a shared folder or shared mailbox.

+
language: html style: diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index eade7d06c066ee08cd691b2165fe47ba61fa275f..b2d860439b5ae7b344d5bdebea6800b138c4f209 100644 GIT binary patch delta 14190 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 G@_zvbpR+&! delta 14317 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8d852cf19..b30fcde65 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8498,61 +8498,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } - - - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); - }); -'Office.AppointmentCompose#getSharedPropertiesAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - - - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an appointment from a shared folder."); - return; - } - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, - function(result) { - if (result.status === Office.AsyncResultStatus.Succeeded && result.value !== "") { - Office.context.mailbox.item.getSharedPropertiesAsync( - { - // Pass auth token along. - asyncContext: result.value - }, - function(result2) { - let sharedProperties = result2.value; - let delegatePermissions = sharedProperties.delegatePermissions; - - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - const ewsId = Office.context.mailbox.item.itemId; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/events/" + restId; - - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); + Office.context.mailbox.item.getSharedPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error("The current folder or mailbox isn't shared."); + return; } + const sharedProperties = result.value; + console.log(`Owner: ${sharedProperties.owner}`); + console.log(`Permissions: ${sharedProperties.delegatePermissions}`); + console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); 'Office.AppointmentCompose#isAllDayEvent:member': - >- @@ -9370,61 +9324,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } - - - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); - }); -'Office.AppointmentRead#getSharedPropertiesAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - - - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an appointment from a shared folder."); - return; - } - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, - function(result) { - if (result.status === Office.AsyncResultStatus.Succeeded && result.value !== "") { - Office.context.mailbox.item.getSharedPropertiesAsync( - { - // Pass auth token along. - asyncContext: result.value - }, - function(result2) { - let sharedProperties = result2.value; - let delegatePermissions = sharedProperties.delegatePermissions; - - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - const ewsId = Office.context.mailbox.item.itemId; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/events/" + restId; - - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); + Office.context.mailbox.item.getSharedPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error("The current folder or mailbox isn't shared."); + return; } + const sharedProperties = result.value; + console.log(`Owner: ${sharedProperties.owner}`); + console.log(`Permissions: ${sharedProperties.delegatePermissions}`); + console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); 'Office.AppointmentRead#itemClass:member': - >- @@ -11213,53 +11121,6 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.DelegatePermissions:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - - - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an appointment from a shared folder."); - return; - } - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, - function(result) { - if (result.status === Office.AsyncResultStatus.Succeeded && result.value !== "") { - Office.context.mailbox.item.getSharedPropertiesAsync( - { - // Pass auth token along. - asyncContext: result.value - }, - function(result2) { - let sharedProperties = result2.value; - let delegatePermissions = sharedProperties.delegatePermissions; - - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - const ewsId = Office.context.mailbox.item.itemId; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/events/" + restId; - - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); - } - }); 'Office.MailboxEnums.ItemNotificationMessageType:enum': - >- // Link to full sample: @@ -12227,61 +12088,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } - - - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); - }); -'Office.MessageCompose#getSharedPropertiesAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - - - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on a message from a shared folder."); - return; - } - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, - function(result) { - if (result.status === Office.AsyncResultStatus.Succeeded && result.value !== "") { - Office.context.mailbox.item.getSharedPropertiesAsync( - { - // Pass auth token along. - asyncContext: result.value - }, - function(result2) { - let sharedProperties = result2.value; - let delegatePermissions = sharedProperties.delegatePermissions; - - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - const ewsId = Office.context.mailbox.item.itemId; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/messages/" + restId; - - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); + Office.context.mailbox.item.getSharedPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error("The current folder or mailbox isn't shared."); + return; } + const sharedProperties = result.value; + console.log(`Owner: ${sharedProperties.owner}`); + console.log(`Permissions: ${sharedProperties.delegatePermissions}`); + console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); 'Office.MessageCompose#inReplyTo:member': - >- @@ -12950,61 +12765,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } - - - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); - }); -'Office.MessageRead#getSharedPropertiesAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - - - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on a message from a shared folder."); - return; - } - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, - function(result) { - if (result.status === Office.AsyncResultStatus.Succeeded && result.value !== "") { - Office.context.mailbox.item.getSharedPropertiesAsync( - { - // Pass auth token along. - asyncContext: result.value - }, - function(result2) { - let sharedProperties = result2.value; - let delegatePermissions = sharedProperties.delegatePermissions; - - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - const ewsId = Office.context.mailbox.item.itemId; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/messages/" + restId; - - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); + Office.context.mailbox.item.getSharedPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error("The current folder or mailbox isn't shared."); + return; } + const sharedProperties = result.value; + console.log(`Owner: ${sharedProperties.owner}`); + console.log(`Permissions: ${sharedProperties.delegatePermissions}`); + console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); 'Office.MessageRead#internetMessageId:member': - >- From 0c327bdb58733f197439e055d7f12e7efda2abc2 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:28:22 -0700 Subject: [PATCH 091/156] [Outlook] (Office.SharedProperties) Map snippet (#939) --- snippet-extractor-metadata/outlook.xlsx | Bin 24149 -> 24230 bytes snippet-extractor-output/snippets.yaml | 16 ++++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index b2d860439b5ae7b344d5bdebea6800b138c4f209..ec1f5af947cd86b4df91c8bfd020537958ac6fe5 100644 GIT binary patch delta 14223 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + + + Office.context.mailbox.item.getSharedPropertiesAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error("The current folder or mailbox isn't shared."); + return; + } + const sharedProperties = result.value; + console.log(`Owner: ${sharedProperties.owner}`); + console.log(`Permissions: ${sharedProperties.delegatePermissions}`); + console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); + }); 'Office.Time#getAsync:member(2)': - >- // Link to full sample: From 64404ab27e461a48a06d665cd0baec2b5f31da8b Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:33:13 -0700 Subject: [PATCH 092/156] [Outlook] (EWS/REST) Update snippets (#943) * Update EWS and REST snippets * Update mapping * Map snippets * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Run script --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 53 +++-- playlists/outlook.yaml | 53 +++-- .../basic-rest-cors.yaml | 66 ------ .../get-icaluid-as-attendee.yaml | 10 +- .../get-icaluid-as-organizer.yaml | 12 +- .../ids-and-urls.yaml | 12 +- .../make-ews-request-async.yaml | 8 +- ...-message-using-make-ews-request-async.yaml | 8 +- .../user-callback-token.yaml | 22 +- .../user-identity-token.yaml | 17 +- .../item-id-compose.yaml | 21 +- snippet-extractor-metadata/outlook.xlsx | Bin 24230 -> 24064 bytes snippet-extractor-output/snippets.yaml | 188 ++++++------------ view-prod/outlook.json | 3 +- view/outlook.json | 3 +- 15 files changed, 184 insertions(+), 292 deletions(-) delete mode 100644 samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml rename samples/outlook/{85-tokens-and-service-calls => 90-other-item-apis}/item-id-compose.yaml (70%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index a9e6083dd..43f713f36 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -459,8 +459,8 @@ name: Endpoint URLs and item IDs fileName: ids-and-urls.yaml description: >- - Retrieves and displays REST and EWS endpoint URLs and item IDs, and converts - item IDs for different protocols. + Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item + IDs, and converts item IDs for different protocols. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml group: Tokens And Service Calls @@ -469,7 +469,9 @@ - id: outlook-tokens-and-service-calls-user-identity-token name: Get a user identity token fileName: user-identity-token.yaml - description: Gets a user identity token to use in authentication flows. + description: >- + Gets a user identity token to use for authentication flows in an Exchange + on-premises environment. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml group: Tokens And Service Calls @@ -479,24 +481,15 @@ name: Get a callback token fileName: user-callback-token.yaml description: >- - Gets a callback token to use for calling outlook services from add-in's - backend service. + Gets a callback token to call Outlook services from an add-in's backend + service. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml group: Tokens And Service Calls api_set: Mailbox: '1.1' -- id: outlook-tokens-and-service-calls-basic-rest-cors - name: Get a message using REST - fileName: basic-rest-cors.yaml - description: Gets a message using REST without any back-end code. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - group: Tokens And Service Calls - api_set: - Mailbox: '1.5' - id: outlook-tokens-and-service-calls-make-ews-request-async - name: Get a message using EWS + name: Get a message using Exchange Web Services (EWS) fileName: make-ews-request-async.yaml description: Gets a message using EWS without any back-end code. rawUrl: >- @@ -505,7 +498,7 @@ api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async - name: Send a message using EWS + name: Send a message using Exchange Web Services (EWS) fileName: send-message-using-make-ews-request-async.yaml description: Sends a message using EWS without any back-end code. rawUrl: >- @@ -514,11 +507,11 @@ api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-get-icaluid-as-organizer - name: Get an appointment's iCalUId as an organizer + name: Get an appointment's iCalUId as the organizer fileName: get-icaluid-as-organizer.yaml description: >- - Uses EWS to get an appointment's iCalUId value where the user is the - organizer. + Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where + the user is the organizer. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml group: Tokens And Service Calls @@ -528,22 +521,13 @@ name: Get an appointment's iCalUId as an attendee fileName: get-icaluid-as-attendee.yaml description: >- - Uses EWS to get an appointment's iCalUId value where the user is the - attendee. + Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where + the user is an attendee. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml group: Tokens And Service Calls api_set: Mailbox: '1.1' -- id: outlook-tokens-and-service-calls-item-id-compose - name: Get an item ID in compose mode - fileName: item-id-compose.yaml - description: 'Gets an item ID in compose mode, to use in certain delegate scenarios.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml - group: Tokens And Service Calls - api_set: - Mailbox: '1.8' - id: outlook-other-item-apis-get-subject-read name: Get the subject (Read) fileName: get-subject-read.yaml @@ -791,6 +775,15 @@ group: Other Item APIs api_set: Mailbox: '1.14' +- id: outlook-other-item-apis-item-id-compose + name: Get an item ID in compose mode + fileName: item-id-compose.yaml + description: Gets an item ID in compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml + group: Other Item APIs + api_set: + Mailbox: '1.8' - id: outlook-get-set-isalldayevent name: Get and set the isAllDayEvent property (Appointment Organizer) fileName: get-set-isalldayevent.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 823cc6254..dbd56894e 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -459,8 +459,8 @@ name: Endpoint URLs and item IDs fileName: ids-and-urls.yaml description: >- - Retrieves and displays REST and EWS endpoint URLs and item IDs, and converts - item IDs for different protocols. + Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item + IDs, and converts item IDs for different protocols. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml group: Tokens And Service Calls @@ -469,7 +469,9 @@ - id: outlook-tokens-and-service-calls-user-identity-token name: Get a user identity token fileName: user-identity-token.yaml - description: Gets a user identity token to use in authentication flows. + description: >- + Gets a user identity token to use for authentication flows in an Exchange + on-premises environment. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml group: Tokens And Service Calls @@ -479,24 +481,15 @@ name: Get a callback token fileName: user-callback-token.yaml description: >- - Gets a callback token to use for calling outlook services from add-in's - backend service. + Gets a callback token to call Outlook services from an add-in's backend + service. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml group: Tokens And Service Calls api_set: Mailbox: '1.1' -- id: outlook-tokens-and-service-calls-basic-rest-cors - name: Get a message using REST - fileName: basic-rest-cors.yaml - description: Gets a message using REST without any back-end code. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - group: Tokens And Service Calls - api_set: - Mailbox: '1.5' - id: outlook-tokens-and-service-calls-make-ews-request-async - name: Get a message using EWS + name: Get a message using Exchange Web Services (EWS) fileName: make-ews-request-async.yaml description: Gets a message using EWS without any back-end code. rawUrl: >- @@ -505,7 +498,7 @@ api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async - name: Send a message using EWS + name: Send a message using Exchange Web Services (EWS) fileName: send-message-using-make-ews-request-async.yaml description: Sends a message using EWS without any back-end code. rawUrl: >- @@ -514,11 +507,11 @@ api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-get-icaluid-as-organizer - name: Get an appointment's iCalUId as an organizer + name: Get an appointment's iCalUId as the organizer fileName: get-icaluid-as-organizer.yaml description: >- - Uses EWS to get an appointment's iCalUId value where the user is the - organizer. + Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where + the user is the organizer. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml group: Tokens And Service Calls @@ -528,22 +521,13 @@ name: Get an appointment's iCalUId as an attendee fileName: get-icaluid-as-attendee.yaml description: >- - Uses EWS to get an appointment's iCalUId value where the user is the - attendee. + Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where + the user is an attendee. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml group: Tokens And Service Calls api_set: Mailbox: '1.1' -- id: outlook-tokens-and-service-calls-item-id-compose - name: Get an item ID in compose mode - fileName: item-id-compose.yaml - description: 'Gets an item ID in compose mode, to use in certain delegate scenarios.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml - group: Tokens And Service Calls - api_set: - Mailbox: '1.8' - id: outlook-other-item-apis-get-subject-read name: Get the subject (Read) fileName: get-subject-read.yaml @@ -791,6 +775,15 @@ group: Other Item APIs api_set: Mailbox: '1.14' +- id: outlook-other-item-apis-item-id-compose + name: Get an item ID in compose mode + fileName: item-id-compose.yaml + description: Gets an item ID in compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/item-id-compose.yaml + group: Other Item APIs + api_set: + Mailbox: '1.8' - id: outlook-get-set-isalldayevent name: Get and set the isAllDayEvent property (Appointment Organizer) fileName: get-set-isalldayevent.yaml diff --git a/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml b/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml deleted file mode 100644 index 06f7192b6..000000000 --- a/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml +++ /dev/null @@ -1,66 +0,0 @@ -order: 5 -id: outlook-tokens-and-service-calls-basic-rest-cors -name: Get a message using REST -description: Gets a message using REST without any back-end code. -host: OUTLOOK -api_set: - Mailbox: '1.5' -script: - content: | - $("#run").on("click", run); - - function run() { - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { - const ewsId = Office.context.mailbox.item.itemId; - const token = result.value; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - const getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - const xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); - }); - } - language: typescript -template: - content: | -
-

This sample shows how to get a message using REST, without any back-end code.

-
- -
-

Try it out

- -
- language: html -style: - content: | - section.samples { - margin-top: 20px; - } - - section.samples .ms-Button, section.setup .ms-Button { - display: block; - margin-bottom: 5px; - margin-left: 20px; - min-width: 80px; - } - language: css -libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml index 7d16d13a0..0b86a6280 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -1,7 +1,7 @@ order: 9 id: outlook-tokens-and-service-calls-get-icaluid-as-attendee name: Get an appointment's iCalUId as an attendee -description: Uses EWS to get an appointment's iCalUId value where the user is the attendee. +description: Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where the user is an attendee. host: OUTLOOK api_set: Mailbox: '1.1' @@ -44,13 +44,17 @@ script: template: content: |
-

This sample shows how to get an appointment's iCalUId value if the user is the attendee.

+

This sample uses Exchange Web Services (EWS) to get an appointment's iCalUId value if the user is an attendee.

+

Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. + In Exchange Online environments, use nested app authentication (NAA) + to get an access token. Then, use Microsoft Graph to get the iCalUId property. +

Try it out

language: html diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml index add1fe594..646c83a60 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml @@ -1,7 +1,7 @@ order: 8 id: outlook-tokens-and-service-calls-get-icaluid-as-organizer -name: Get an appointment's iCalUId as an organizer -description: Uses EWS to get an appointment's iCalUId value where the user is the organizer. +name: Get an appointment's iCalUId as the organizer +description: Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where the user is the organizer. host: OUTLOOK api_set: Mailbox: '1.3' @@ -51,11 +51,15 @@ script: template: content: |
-

This sample shows how to get an appointment's iCalUId value if the user is the organizer.

+

This sample uses Exchange Web Services (EWS) to get an appointment's iCalUId value if the user is the organizer.

+

Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. + In Exchange Online environments, use nested app authentication (NAA) + to get an access token. Then, use Microsoft Graph to get the iCalUId property. +

language: html style: diff --git a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml index ce0d9ea8f..33bd7be6a 100644 --- a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-tokens-and-service-calls-ids-and-urls name: Endpoint URLs and item IDs -description: 'Retrieves and displays REST and EWS endpoint URLs and item IDs, and converts item IDs for different protocols.' +description: 'Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item IDs, and converts item IDs for different protocols.' host: OUTLOOK api_set: Mailbox: '1.5' @@ -10,14 +10,16 @@ script: $("#run").on("click", run); function run() { + // Get the EWS URL and EWS item ID. console.log("EWS URL: " + Office.context.mailbox.ewsUrl); const ewsId = Office.context.mailbox.item.itemId; console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - console.log("REST URL: " + Office.context.mailbox.restUrl); + // Convert the EWS item ID to a REST-formatted ID. const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); console.log("REST item ID: " + restId); + // Convert the REST-formatted ID back to an EWS-formatted ID. const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); } @@ -25,7 +27,11 @@ script: template: content: |
-

This sample shows how to retrieve REST and EWS endpoint URLs and item IDs, and convert item IDs for different protocols.

+

This sample shows how to retrieve the EWS endpoint URL and item IDs, and convert item IDs for different protocols.

+

Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. + In Exchange Online environments, use nested app authentication (NAA) + to get an access token. +

diff --git a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml index 5d4023808..6a038fde1 100644 --- a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml @@ -1,6 +1,6 @@ order: 6 id: outlook-tokens-and-service-calls-make-ews-request-async -name: Get a message using EWS +name: Get a message using Exchange Web Services (EWS) description: Gets a message using EWS without any back-end code. host: OUTLOOK api_set: @@ -25,7 +25,7 @@ script: ' ' + ''; - Office.context.mailbox.makeEwsRequestAsync(request, function (result) { + Office.context.mailbox.makeEwsRequestAsync(request, (result) => { console.log(result); }); } @@ -34,6 +34,10 @@ template: content: |

This sample shows how to get a message using EWS, without any back-end code.

+

Important: This API is only supported in Exchange on-premises environments. + In Exchange Online environments, use nested app authentication (NAA) + to get an access token. Then, use Microsoft Graph to get the message. +

diff --git a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml index 8c991a666..00c511e85 100644 --- a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml @@ -1,6 +1,6 @@ order: 7 id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async -name: Send a message using EWS +name: Send a message using Exchange Web Services (EWS) description: Sends a message using EWS without any back-end code. host: OUTLOOK api_set: @@ -28,7 +28,7 @@ script: ' '+ ''; - Office.context.mailbox.makeEwsRequestAsync(request, function (result) { + Office.context.mailbox.makeEwsRequestAsync(request, (result) => { console.log(result); }); } @@ -37,6 +37,10 @@ template: content: |

This sample shows how to send a message using EWS, without any back-end code.

+

Important: This API is only supported in Exchange on-premises environments. + In Exchange Online environments, use nested app authentication (NAA) + to get an access token. Then, use Microsoft Graph to send the message. +

diff --git a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml index 800b810e2..4e617eef2 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -1,34 +1,40 @@ order: 4 id: outlook-tokens-and-service-calls-user-callback-token name: Get a callback token -description: Gets a callback token to use for calling outlook services from add-in's backend service. +description: Gets a callback token to call Outlook services from an add-in's backend service. host: OUTLOOK api_set: Mailbox: '1.1' script: content: | $("#run").on("click", run); - + function run() { - Office.context.mailbox.getCallbackTokenAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + Office.context.mailbox.getCallbackTokenAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Token retrieval failed with message: ${result.error.message}`); - } else { - console.log(result.value); + return; } + + console.log(result.value); }); } language: typescript template: content: |
-

This sample shows how to get a callback token to use for calling outlook services from add-in's backend service.

+

This sample shows how to get a callback token to call Outlook services from an add-in's backend service.

+

Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. + Additionally, the Outlook REST v2.0 endpoint has been deprecated. Use + nested app authentication (NAA) + to get an access token instead. +

Try it out

language: html diff --git a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml index e6c8633e9..4533fd922 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -1,7 +1,7 @@ order: 3 id: outlook-tokens-and-service-calls-user-identity-token name: Get a user identity token -description: Gets a user identity token to use in authentication flows. +description: Gets a user identity token to use for authentication flows in an Exchange on-premises environment. host: OUTLOOK api_set: Mailbox: '1.1' @@ -10,12 +10,13 @@ script: $("#run").on("click", run); function run() { - Office.context.mailbox.getUserIdentityTokenAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Token retrieval failed with message: ${result.error.message}`); - } else { - console.log(result.value); + Office.context.mailbox.getUserIdentityTokenAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(`Token retrieval failed with message: ${result.error.message}`) + return; } + + console.log(result.value); }); } language: typescript @@ -23,6 +24,10 @@ template: content: |

This sample shows how to get a user identity token to use in authentication flows.

+

Important: This API is only supported in Exchange on-premises environments. + In Exchange Online environments, use nested app authentication (NAA) + to get an access token. +

diff --git a/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml b/samples/outlook/90-other-item-apis/item-id-compose.yaml similarity index 70% rename from samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml rename to samples/outlook/90-other-item-apis/item-id-compose.yaml index fd0bd0a1e..902fbb258 100644 --- a/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml +++ b/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -1,7 +1,7 @@ -order: 10 -id: outlook-tokens-and-service-calls-item-id-compose +order: 29 +id: outlook-other-item-apis-item-id-compose name: Get an item ID in compose mode -description: 'Gets an item ID in compose mode, to use in certain delegate scenarios.' +description: Gets an item ID in compose mode. host: OUTLOOK api_set: Mailbox: '1.8' @@ -10,25 +10,28 @@ script: $("#run").on("click", run); function run() { - Office.context.mailbox.item.getItemIdAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + Office.context.mailbox.item.getItemIdAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`getItemIdAsync failed with message: ${result.error.message}`); - } else { - console.log(result.value); + return; } + + console.log(result.value); }); } language: typescript template: content: |
-

This sample shows how to get an item ID in compose mode, to use in delegate scenarios where the item can't be saved due to insufficient delegate permissions.

+

This sample shows how to get an item ID in compose mode.

+

Required mode: Compose

Try it out

+

Before you can get the item ID, you must first save the mail item.

language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index ec1f5af947cd86b4df91c8bfd020537958ac6fe5..b2bf92fcdd2b792b04ecb8eaeeef219e07a5d5e4 100644 GIT binary patch delta 13756 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�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 delta 13904 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml - Office.context.mailbox.item.getItemIdAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + Office.context.mailbox.item.getItemIdAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`getItemIdAsync failed with message: ${result.error.message}`); - } else { - console.log(result.value); + return; } + + console.log(result.value); }); 'Office.AppointmentCompose#getSelectedDataAsync:member(2)': - >- @@ -10387,6 +10388,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + // Get the EWS URL and EWS item ID. + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); const ewsId = Office.context.mailbox.item.itemId; @@ -10394,7 +10397,7 @@ console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - console.log("REST URL: " + Office.context.mailbox.restUrl); + // Convert the EWS item ID to a REST-formatted ID. const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); @@ -10402,36 +10405,20 @@ console.log("REST item ID: " + restId); + // Convert the REST-formatted ID back to an EWS-formatted ID. + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); 'Office.Mailbox#convertToRestId:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function - (result) { - const ewsId = Office.context.mailbox.item.itemId; - const token = result.value; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - const getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - const xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); - }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + // Get the EWS URL and EWS item ID. + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); const ewsId = Office.context.mailbox.item.itemId; @@ -10439,7 +10426,7 @@ console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - console.log("REST URL: " + Office.context.mailbox.restUrl); + // Convert the EWS item ID to a REST-formatted ID. const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); @@ -10447,6 +10434,8 @@ console.log("REST item ID: " + restId); + // Convert the REST-formatted ID back to an EWS-formatted ID. + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); @@ -10646,6 +10635,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + // Get the EWS URL and EWS item ID. + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); const ewsId = Office.context.mailbox.item.itemId; @@ -10653,7 +10644,7 @@ console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - console.log("REST URL: " + Office.context.mailbox.restUrl); + // Convert the EWS item ID to a REST-formatted ID. const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); @@ -10661,43 +10652,25 @@ console.log("REST item ID: " + restId); + // Convert the REST-formatted ID back to an EWS-formatted ID. + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#getCallbackTokenAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function - (result) { - const ewsId = Office.context.mailbox.item.itemId; - const token = result.value; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - const getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - const xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); - }); 'Office.Mailbox#getCallbackTokenAsync:member(2)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml - Office.context.mailbox.getCallbackTokenAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + Office.context.mailbox.getCallbackTokenAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Token retrieval failed with message: ${result.error.message}`); - } else { - console.log(result.value); + return; } + + console.log(result.value); }); 'Office.Mailbox#getSelectedItemsAsync:member(2)': - >- @@ -10729,12 +10702,13 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml - Office.context.mailbox.getUserIdentityTokenAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Token retrieval failed with message: ${result.error.message}`); - } else { - console.log(result.value); + Office.context.mailbox.getUserIdentityTokenAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(`Token retrieval failed with message: ${result.error.message}`) + return; } + + console.log(result.value); }); 'Office.Mailbox#makeEwsRequestAsync:member(1)': - >- @@ -10797,7 +10771,7 @@ ' '+ ''; - Office.context.mailbox.makeEwsRequestAsync(request, function (result) { + Office.context.mailbox.makeEwsRequestAsync(request, (result) => { console.log(result); }); 'Office.Mailbox#masterCategories:member': @@ -10856,51 +10830,6 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); -'Office.Mailbox#restUrl:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function - (result) { - const ewsId = Office.context.mailbox.item.itemId; - const token = result.value; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - const getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - const xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - - - console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - - const ewsId = Office.context.mailbox.item.itemId; - - console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - - - console.log("REST URL: " + Office.context.mailbox.restUrl); - - const restId = Office.context.mailbox.convertToRestId(ewsId, - Office.MailboxEnums.RestVersion.v2_0); - - console.log("REST item ID: " + restId); - - - const ewsId2 = Office.context.mailbox.convertToEwsId(restId, - Office.MailboxEnums.RestVersion.v2_0); - - console.log("EWS ID (from REST ID): " + ewsId2); 'Office.MailboxEnums.ActionType:enum': - >- // Link to full sample: @@ -11467,24 +11396,32 @@ 'Office.MailboxEnums.RestVersion:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function - (result) { - const ewsId = Office.context.mailbox.item.itemId; - const token = result.value; - const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - const getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - const xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); - }); + // Get the EWS URL and EWS item ID. + + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); + + const ewsId = Office.context.mailbox.item.itemId; + + console.log("EWS item ID: " + Office.context.mailbox.item.itemId); + + + // Convert the EWS item ID to a REST-formatted ID. + + const restId = Office.context.mailbox.convertToRestId(ewsId, + Office.MailboxEnums.RestVersion.v2_0); + + console.log("REST item ID: " + restId); + + + // Convert the REST-formatted ID back to an EWS-formatted ID. + + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, + Office.MailboxEnums.RestVersion.v2_0); + + console.log("EWS ID (from REST ID): " + ewsId2); 'Office.MailboxEnums.SourceProperty:enum': - >- // Link to full sample: @@ -12056,15 +11993,16 @@ 'Office.MessageCompose#getItemIdAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml - Office.context.mailbox.item.getItemIdAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { + Office.context.mailbox.item.getItemIdAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { console.error(`getItemIdAsync failed with message: ${result.error.message}`); - } else { - console.log(result.value); + return; } + + console.log(result.value); }); 'Office.MessageCompose#getSelectedDataAsync:member(2)': - >- diff --git a/view-prod/outlook.json b/view-prod/outlook.json index b05153dfc..21332af7f 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -50,12 +50,10 @@ "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", - "outlook-tokens-and-service-calls-basic-rest-cors": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml", "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml", "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml", "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml", "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml", - "outlook-tokens-and-service-calls-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml", @@ -83,6 +81,7 @@ "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-in-reply-to.yaml", "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-index.yaml", "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml", + "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index db8f7ca00..fa6113898 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -50,12 +50,10 @@ "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", - "outlook-tokens-and-service-calls-basic-rest-cors": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml", "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml", "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml", "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml", "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml", - "outlook-tokens-and-service-calls-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/set-selected-data.yaml", @@ -83,6 +81,7 @@ "outlook-get-in-reply-to": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-in-reply-to.yaml", "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-index.yaml", "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-async.yaml", + "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/item-id-compose.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file From 9d400f480073f8b63988f726cdd77378096417c8 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 21 Oct 2024 13:04:51 -0700 Subject: [PATCH 093/156] [All hosts] Update Office JS API and Fabric Core CDN URLs (#945) * Update Office JS API and Fabric Core CDN URLs * Update HTML files * Update another HTML file --- config/build.ts | 13 ++-- .../excel/20-chart/chart-title-ts.yaml | 12 ++-- .../excel/01-basics/basic-api-call-es5.yaml | 10 +-- samples/excel/01-basics/basic-api-call.yaml | 10 +-- .../01-basics/basic-common-api-call.yaml | 10 +-- .../excel/10-chart/chart-axis-formatting.yaml | 14 ++-- samples/excel/10-chart/chart-axis.yaml | 20 +++--- .../excel/10-chart/chart-bubble-chart.yaml | 12 ++-- .../10-chart/chart-create-several-charts.yaml | 12 ++-- samples/excel/10-chart/chart-data-source.yaml | 12 ++-- samples/excel/10-chart/chart-data-table.yaml | 12 ++-- samples/excel/10-chart/chart-formatting.yaml | 12 ++-- samples/excel/10-chart/chart-legend.yaml | 12 ++-- samples/excel/10-chart/chart-point.yaml | 12 ++-- .../excel/10-chart/chart-series-markers.yaml | 12 ++-- .../10-chart/chart-series-plotorder.yaml | 12 ++-- samples/excel/10-chart/chart-series.yaml | 14 ++-- .../excel/10-chart/chart-title-format.yaml | 12 ++-- samples/excel/10-chart/chart-trendlines.yaml | 18 ++--- .../excel/10-chart/create-doughnut-chart.yaml | 12 ++-- samples/excel/12-comment/comment-basics.yaml | 12 ++-- .../excel/12-comment/comment-mentions.yaml | 12 ++-- samples/excel/12-comment/comment-replies.yaml | 12 ++-- .../excel/12-comment/comment-resolution.yaml | 12 ++-- .../conditional-formatting-advanced.yaml | 12 ++-- .../conditional-formatting-basic.yaml | 12 ++-- .../16-custom-functions/basic-function.yaml | 2 +- .../custom-functions-errors.yaml | 2 +- .../data-types-custom-functions.yaml | 2 +- .../streaming-function.yaml | 2 +- .../volatile-function.yaml | 2 +- .../web-call-function.yaml | 2 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 12 ++-- .../test-xml-for-unique-namespace.yaml | 12 ++-- .../data-types-entity-attribution.yaml | 12 ++-- .../data-types-entity-icons.yaml | 12 ++-- .../data-types-entity-values.yaml | 12 ++-- .../data-types-error-values.yaml | 10 +-- .../data-types-formatted-number.yaml | 10 +-- .../20-data-types/data-types-references.yaml | 12 ++-- .../20-data-types/data-types-web-image.yaml | 12 ++-- .../22-data-validation/data-validation.yaml | 12 ++-- .../excel/26-document/custom-properties.yaml | 10 +-- .../26-document/get-file-in-slices-async.yaml | 14 ++-- samples/excel/26-document/properties.yaml | 18 ++--- .../30-events/data-change-event-details.yaml | 12 ++-- samples/excel/30-events/data-changed.yaml | 12 ++-- .../30-events/event-column-and-row-sort.yaml | 12 ++-- .../event-worksheet-single-click.yaml | 10 +-- .../30-events/events-chart-activated.yaml | 12 ++-- ...vents-chartcollection-added-activated.yaml | 12 ++-- .../events-comment-event-handler.yaml | 12 ++-- .../30-events/events-disable-events.yaml | 12 ++-- .../30-events/events-formula-changed.yaml | 10 +-- .../excel/30-events/events-table-changed.yaml | 18 ++--- .../events-tablecollection-changed.yaml | 14 ++-- .../30-events/events-workbook-activated.yaml | 10 +-- ...nts-workbook-and-worksheet-collection.yaml | 12 ++-- .../events-worksheet-protection.yaml | 10 +-- samples/excel/30-events/events-worksheet.yaml | 14 ++-- .../30-events/selection-changed-events.yaml | 14 ++-- .../create-and-remove-named-item.yaml | 10 +-- .../34-named-item/update-named-item.yaml | 10 +-- .../pivottable-calculations.yaml | 14 ++-- .../pivottable-create-and-modify.yaml | 20 +++--- .../pivottable-filters-and-summaries.yaml | 20 +++--- .../pivottable-get-pivottables.yaml | 14 ++-- .../pivottable-pivotfilters.yaml | 14 ++-- .../38-pivottable/pivottable-pivotlayout.yaml | 12 ++-- .../38-pivottable/pivottable-refresh.yaml | 12 ++-- .../38-pivottable/pivottable-slicer.yaml | 12 ++-- .../38-pivottable/pivottable-source-data.yaml | 12 ++-- samples/excel/42-range/cell-properties.yaml | 12 ++-- samples/excel/42-range/dynamic-arrays.yaml | 12 ++-- samples/excel/42-range/formatting.yaml | 12 ++-- .../42-range/insert-delete-clear-range.yaml | 12 ++-- samples/excel/42-range/outline.yaml | 12 ++-- samples/excel/42-range/precedents.yaml | 12 ++-- samples/excel/42-range/range-areas.yaml | 10 +-- samples/excel/42-range/range-auto-fill.yaml | 12 ++-- samples/excel/42-range/range-copyfrom.yaml | 12 ++-- samples/excel/42-range/range-dependents.yaml | 12 ++-- .../42-range/range-direct-dependents.yaml | 12 ++-- samples/excel/42-range/range-find.yaml | 12 ++-- .../excel/42-range/range-get-range-edge.yaml | 12 ++-- samples/excel/42-range/range-hyperlink.yaml | 12 ++-- .../excel/42-range/range-merged-ranges.yaml | 12 ++-- .../excel/42-range/range-relationships.yaml | 12 ++-- .../42-range/range-remove-duplicates.yaml | 12 ++-- .../42-range/range-text-orientation.yaml | 12 ++-- samples/excel/42-range/selected-range.yaml | 10 +-- samples/excel/42-range/set-get-values.yaml | 12 ++-- samples/excel/42-range/style.yaml | 22 +++--- samples/excel/42-range/used-range.yaml | 12 ++-- .../44-shape/shape-create-and-delete.yaml | 12 ++-- samples/excel/44-shape/shape-groups.yaml | 12 ++-- samples/excel/44-shape/shape-images.yaml | 12 ++-- samples/excel/44-shape/shape-lines.yaml | 12 ++-- .../excel/44-shape/shape-move-and-order.yaml | 12 ++-- samples/excel/44-shape/shape-textboxes.yaml | 12 ++-- .../add-rows-and-columns-to-a-table.yaml | 12 ++-- .../46-table/convert-range-to-table.yaml | 12 ++-- samples/excel/46-table/create-table.yaml | 10 +-- samples/excel/46-table/filter-data.yaml | 12 ++-- samples/excel/46-table/formatting.yaml | 12 ++-- .../excel/46-table/get-data-from-table.yaml | 12 ++-- ...get-visible-range-of-a-filtered-table.yaml | 12 ++-- samples/excel/46-table/import-json-data.yaml | 10 +-- samples/excel/46-table/resize-table.yaml | 12 ++-- samples/excel/46-table/sort-data.yaml | 12 ++-- .../create-get-change-delete-settings.yaml | 10 +-- .../excel/50-workbook/create-workbook.yaml | 10 +-- .../50-workbook/culture-info-date-time.yaml | 12 ++-- samples/excel/50-workbook/culture-info.yaml | 12 ++-- .../excel/50-workbook/data-protection.yaml | 12 ++-- .../workbook-built-in-functions.yaml | 10 +-- .../50-workbook/workbook-calculation.yaml | 12 ++-- .../50-workbook/workbook-get-active-cell.yaml | 10 +-- .../workbook-insert-external-worksheets.yaml | 10 +-- .../50-workbook/workbook-save-and-close.yaml | 10 +-- .../excel/54-worksheet/active-worksheet.yaml | 12 ++-- .../add-delete-rename-move-worksheet.yaml | 10 +-- samples/excel/54-worksheet/gridlines.yaml | 10 +-- .../excel/54-worksheet/list-worksheets.yaml | 10 +-- ...rence-worksheets-by-relative-position.yaml | 12 ++-- samples/excel/54-worksheet/tab-color.yaml | 10 +-- .../54-worksheet/worksheet-auto-filter.yaml | 12 ++-- .../excel/54-worksheet/worksheet-copy.yaml | 12 ++-- .../54-worksheet/worksheet-find-all.yaml | 12 ++-- .../54-worksheet/worksheet-freeze-panes.yaml | 12 ++-- .../54-worksheet/worksheet-page-layout.yaml | 12 ++-- .../54-worksheet/worksheet-range-cell.yaml | 12 ++-- .../54-worksheet/worksheet-visibility.yaml | 12 ++-- .../90-scenarios/currency-converter.yaml | 14 ++-- .../90-scenarios/multiple-property-set.yaml | 12 ++-- .../performance-optimization.yaml | 14 ++-- .../excel/90-scenarios/report-generation.yaml | 10 +-- .../90-scenarios/working-with-dates.yaml | 12 ++-- .../excel/99-just-for-fun/color-wheel.yaml | 10 +-- samples/excel/99-just-for-fun/gradient.yaml | 72 ++++++++++--------- .../99-just-for-fun/path-finder-game.yaml | 12 ++-- samples/excel/99-just-for-fun/patterns.yaml | 12 ++-- samples/excel/99-just-for-fun/tetrominos.yaml | 16 ++--- samples/excel/default.yaml | 6 +- samples/onenote/default.yaml | 6 +- .../10-roaming-settings/roaming-settings.yaml | 10 +-- .../load-set-get-save.yaml | 10 +-- .../20-item-body/add-inline-base64-image.yaml | 10 +-- .../20-item-body/append-text-on-send.yaml | 10 +-- .../outlook/20-item-body/get-body-format.yaml | 10 +-- .../20-item-body/get-selected-data.yaml | 10 +-- .../20-item-body/prepend-text-on-send.yaml | 10 +-- .../prepend-text-to-item-body.yaml | 10 +-- .../20-item-body/replace-selected-text.yaml | 10 +-- .../25-item-save-and-close/close-async.yaml | 10 +-- .../outlook/25-item-save-and-close/close.yaml | 10 +-- .../outlook/25-item-save-and-close/save.yaml | 10 +-- .../get-all-attendees.yaml | 10 +-- .../get-cc-message-read.yaml | 10 +-- .../get-from-message-compose.yaml | 10 +-- .../get-from-message-read.yaml | 10 +-- ...tional-attendees-appointment-attendee.yaml | 10 +-- .../get-organizer-appointment-attendee.yaml | 10 +-- .../get-organizer-appointment-organizer.yaml | 10 +-- ...quired-attendees-appointment-attendee.yaml | 10 +-- .../get-sender-message-read.yaml | 10 +-- .../get-set-bcc-message-compose.yaml | 10 +-- .../get-set-cc-message-compose.yaml | 10 +-- ...ional-attendees-appointment-organizer.yaml | 10 +-- ...uired-attendees-appointment-organizer.yaml | 10 +-- .../get-set-to-message-compose.yaml | 10 +-- .../get-to-message-read.yaml | 10 +-- .../35-notifications/add-getall-remove.yaml | 10 +-- .../40-attachments/attachments-compose.yaml | 10 +-- .../get-attachment-content.yaml | 10 +-- .../40-attachments/get-attachments-read.yaml | 10 +-- .../45-categories/work-with-categories.yaml | 10 +-- .../work-with-master-categories.yaml | 10 +-- .../50-recurrence/get-recurrence-read.yaml | 10 +-- .../outlook/50-recurrence/get-series-id.yaml | 10 +-- ...-set-recurrence-appointment-organizer.yaml | 10 +-- .../display-existing-appointment.yaml | 10 +-- .../display-existing-message.yaml | 10 +-- .../display-new-appointment.yaml | 10 +-- .../55-display-items/display-new-message.yaml | 10 +-- .../55-display-items/display-reply-forms.yaml | 10 +-- .../display-reply-with-attachments.yaml | 10 +-- .../sensitivity-label.yaml | 10 +-- .../sensitivity-labels-catalog.yaml | 10 +-- .../get-shared-properties.yaml | 10 +-- .../get-internet-headers-message-read.yaml | 10 +-- ...stom-internet-headers-message-compose.yaml | 10 +-- .../outlook/75-regex-matches/contextual.yaml | 10 +-- .../get-icaluid-as-attendee.yaml | 10 +-- .../get-icaluid-as-organizer.yaml | 8 +-- .../ids-and-urls.yaml | 10 +-- .../make-ews-request-async.yaml | 10 +-- ...-message-using-make-ews-request-async.yaml | 10 +-- .../user-callback-token.yaml | 10 +-- .../user-identity-token.yaml | 10 +-- .../delay-message-delivery.yaml | 10 +-- ...d-remove-enhancedlocation-appointment.yaml | 10 +-- .../get-conversation-id-message.yaml | 10 +-- .../get-conversation-index.yaml | 10 +-- .../get-date-time-created-read.yaml | 10 +-- .../get-date-time-modified-read.yaml | 10 +-- .../get-diagnostic-information.yaml | 10 +-- .../90-other-item-apis/get-eml-format.yaml | 10 +-- .../90-other-item-apis/get-end-read.yaml | 10 +-- .../90-other-item-apis/get-in-reply-to.yaml | 10 +-- .../get-internet-message-id-read.yaml | 10 +-- .../get-item-class-async.yaml | 10 +-- .../get-item-class-read.yaml | 10 +-- .../90-other-item-apis/get-item-type.yaml | 10 +-- .../90-other-item-apis/get-location-read.yaml | 10 +-- .../get-message-properties.yaml | 10 +-- .../get-normalized-subject-read.yaml | 10 +-- .../get-set-end-appointment-organizer.yaml | 10 +-- ...et-set-location-appointment-organizer.yaml | 10 +-- .../get-set-sensitivity-level.yaml | 10 +-- .../get-set-start-appointment-organizer.yaml | 10 +-- .../get-set-subject-compose.yaml | 10 +-- .../90-other-item-apis/get-start-read.yaml | 10 +-- .../90-other-item-apis/get-subject-read.yaml | 10 +-- .../90-other-item-apis/item-id-compose.yaml | 10 +-- .../90-other-item-apis/session-data-apis.yaml | 10 +-- .../90-other-item-apis/set-selected-data.yaml | 10 +-- .../work-with-client-signatures.yaml | 10 +-- .../get-set-isalldayevent.yaml | 8 +-- .../set-displayed-body-subject.yaml | 8 +-- samples/outlook/default.yaml | 6 +- .../powerpoint/basics/basic-api-call-js.yaml | 8 +-- .../powerpoint/basics/basic-api-call-ts.yaml | 8 +-- .../basics/basic-common-api-call.yaml | 6 +- samples/powerpoint/default.yaml | 6 +- .../document/create-presentation.yaml | 10 +-- samples/powerpoint/images/insert-image.yaml | 8 +-- samples/powerpoint/images/insert-svg.yaml | 10 +-- .../preview-apis/manage-hyperlinks.yaml | 8 +-- .../scenarios/searches-wikipedia-api.yaml | 14 ++-- samples/powerpoint/shapes/get-set-shapes.yaml | 10 +-- .../powerpoint/shapes/get-shapes-by-type.yaml | 10 +-- samples/powerpoint/shapes/shapes.yaml | 10 +-- .../slide-management/add-slides.yaml | 10 +-- .../slide-management/get-set-slides.yaml | 10 +-- .../slide-management/get-slide-metadata.yaml | 8 +-- .../slide-management/insert-slides.yaml | 10 +-- samples/powerpoint/tags/tags.yaml | 10 +-- .../powerpoint/text/get-set-textrange.yaml | 10 +-- .../project/basics/basic-common-api-call.yaml | 6 +- samples/project/default.yaml | 6 +- samples/web/default.yaml | 4 +- .../word/01-basics/basic-api-call-es5.yaml | 8 +-- samples/word/01-basics/basic-api-call.yaml | 8 +-- .../word/01-basics/basic-common-api-call.yaml | 8 +-- .../content-control-onadded-event.yaml | 12 ++-- .../content-control-ondatachanged-event.yaml | 12 ++-- .../content-control-ondeleted-event.yaml | 12 ++-- .../content-control-onentered-event.yaml | 12 ++-- .../content-control-onexited-event.yaml | 12 ++-- ...tent-control-onselectionchanged-event.yaml | 12 ++-- .../get-change-tracking-states.yaml | 12 ++-- ...t-and-change-checkbox-content-control.yaml | 12 ++-- .../insert-and-change-content-controls.yaml | 12 ++-- .../15-images/insert-and-get-pictures.yaml | 12 ++-- samples/word/20-lists/insert-list.yaml | 12 ++-- samples/word/20-lists/manage-list-styles.yaml | 10 +-- samples/word/20-lists/organize-list.yaml | 12 ++-- .../get-paragraph-on-insertion-point.yaml | 12 ++-- samples/word/25-paragraph/get-text.yaml | 12 ++-- samples/word/25-paragraph/get-word-count.yaml | 12 ++-- .../25-paragraph/insert-formatted-text.yaml | 10 +-- .../insert-header-and-footer.yaml | 12 ++-- .../insert-in-different-locations.yaml | 12 ++-- .../insert-line-and-page-breaks.yaml | 12 ++-- samples/word/25-paragraph/onadded-event.yaml | 10 +-- .../word/25-paragraph/onchanged-event.yaml | 12 ++-- .../word/25-paragraph/ondeleted-event.yaml | 12 ++-- .../25-paragraph/paragraph-properties.yaml | 12 ++-- samples/word/25-paragraph/search.yaml | 12 ++-- .../get-built-in-properties.yaml | 10 +-- ...read-write-custom-document-properties.yaml | 10 +-- samples/word/35-ranges/compare-location.yaml | 12 ++-- samples/word/35-ranges/scroll-to-range.yaml | 12 ++-- .../split-words-of-first-paragraph.yaml | 12 ++-- .../word/40-tables/manage-custom-style.yaml | 28 ++++---- samples/word/40-tables/manage-formatting.yaml | 12 ++-- samples/word/40-tables/table-cell-access.yaml | 12 ++-- .../word/50-document/compare-documents.yaml | 10 +-- .../word/50-document/get-external-styles.yaml | 10 +-- .../50-document/insert-external-document.yaml | 10 +-- .../50-document/insert-section-breaks.yaml | 12 ++-- .../word/50-document/manage-annotations.yaml | 12 ++-- samples/word/50-document/manage-body.yaml | 12 ++-- .../50-document/manage-change-tracking.yaml | 12 ++-- samples/word/50-document/manage-comments.yaml | 12 ++-- .../manage-custom-xml-part-ns.yaml | 10 +-- .../50-document/manage-custom-xml-part.yaml | 10 +-- samples/word/50-document/manage-fields.yaml | 12 ++-- .../word/50-document/manage-footnotes.yaml | 12 ++-- samples/word/50-document/manage-settings.yaml | 10 +-- samples/word/50-document/manage-styles.yaml | 10 +-- .../50-document/manage-tracked-changes.yaml | 14 ++-- samples/word/50-document/save-close.yaml | 10 +-- samples/word/90-scenarios/doc-assembly.yaml | 10 +-- .../90-scenarios/multiple-property-set.yaml | 12 ++-- ...-and-change-combo-box-content-control.yaml | 10 +-- .../insert-and-change-content-controls.yaml | 10 +-- ...-change-dropdown-list-content-control.yaml | 10 +-- .../word/99-preview-apis/manage-comments.yaml | 10 +-- samples/word/default.yaml | 6 +- 311 files changed, 1731 insertions(+), 1724 deletions(-) diff --git a/config/build.ts b/config/build.ts index 43cbe3392..059400106 100644 --- a/config/build.ts +++ b/config/build.ts @@ -170,8 +170,8 @@ async function processSnippets(processedSnippets: Dictionary reference.trim()); - if (libs.indexOf('office-ui-fabric-js@1.4.0/dist/css/fabric.min.css') >= 0) { - if (libs.indexOf('office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css') <= 0) { + if (libs.indexOf('office-ui-fabric-core@11.1.0/dist/css/fabric.min.css') >= 0) { + if (libs.indexOf('office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css') <= 0) { throw new Error('Fabric reference is specified, without a reference to a corresponding "fabric.components.min.css". Please add this second Fabric reference as well.'); } } @@ -220,7 +220,7 @@ async function processSnippets(processedSnippets: Dictionary= 0; - const canonicalOfficeJsReference = 'https://appsforoffice.microsoft.com/lib/1/hosted/office.js'; + const canonicalOfficeJsReference = 'https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js'; const betaOfficeJsReference = 'https://appsforoffice.microsoft.com/lib/beta/hosted/office.js'; const officeDTS = '@types/office-js'; const betaOfficeDTS = '@types/office-js-preview'; @@ -363,11 +363,12 @@ async function processSnippets(processedSnippets: Dictionary +

This sample shows how to set and get the title of a chart using the Excel JavaScript API.

-
+

Set up

-
+

Try it out

-
+

Try it out

-
+
@@ -157,11 +157,11 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index e26227d29..de744e337 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -170,43 +170,43 @@ script: language: typescript template: content: |- -
+

This sample shows how to get, set, and remove axis unit, label and title in a chart.

-
+

Set up

-
+

Try it out

-
+
-
+
-
+
-
+
@@ -226,11 +226,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index 63dfc66aa..4ac73275c 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -117,18 +117,18 @@ script: language: typescript template: content: |- -
+

This sample shows how to create a bubble chart, with each chart series (or bubble) representing a single table row.

-
+

Set up

-
+

Try it out

-
+

Try it out

-
+

Try it out

Log information to the console about the data source of the chart series Frames.

-
+

Try it out

-
+

Try it out

-
+

Try it out

-
+

Try it out

-
+

Try it out

-
+

Try it out

-
+

Try it out

-
+
@@ -141,11 +141,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index a0419af38..0100df1c0 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -107,18 +107,18 @@ script: language: typescript template: content: |+ -
+

This sample shows how to adjust format a chart's title.

-
+

Set up

-
+

Try it out

-
+

Try it out

-
+
-
+
-
+
@@ -189,11 +189,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index b0d0c83dd..e1e0ac6eb 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -103,18 +103,18 @@ script: language: typescript template: content: |- -
+

This sample shows how to create a doughnut chart.

-
+

Set up

-
+

Try it out

-
+

Try it out

To better view the comment changes, open the Comments pane by selecting Show Comments from the Review tab.

-
+

Try it out

To better view the comment changes, open the Comments pane by selecting Show Comments from the Review tab.

@@ -89,11 +89,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/12-comment/comment-replies.yaml b/samples/excel/12-comment/comment-replies.yaml index a586ca33a..2b6bbe10f 100644 --- a/samples/excel/12-comment/comment-replies.yaml +++ b/samples/excel/12-comment/comment-replies.yaml @@ -103,16 +103,16 @@ script: language: typescript template: content: |- -

+

This sample shows how to add, edit, and remove comment replies.

-
+

Setup

-
+

Try it out

To better view the comment changes, open the Comments pane by selecting Show Comments from the Review tab.

-
+

Try it out

To better view the comment changes, open the Comments pane by selecting Show Comments from the Review tab.

@@ -100,11 +100,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index e5ae71812..750e5cbac 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -179,19 +179,19 @@ script: language: typescript template: content: | -

+

This sample shows how to use priorities to work with conditional formatting of ranges when more than one conditional format applies to some cells.

-
+

Set up

-
+

Try it out

-
+

Try it out

-
+

XML part display

@@ -146,11 +146,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index 5e7e8b78a..0279a0ff5 100644 --- a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -91,11 +91,11 @@ script: language: typescript template: content: |+ -
+

This sample shows how to determine if there is just one XML part for a specified namespace.

-
+

Try it out

Press the "Create XML part" button to create and display Contoso's Reviewer metadata. Press it more than once if you want to set up an error situation.

-
+

XML part display

@@ -132,11 +132,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index 31d8718dd..d7a9efe17 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -189,16 +189,16 @@ script: language: typescript template: content: |- -
+

This sample shows how to set data provider attributions on entity values in the card layout. The data is aggregated from three different data providers, and three attributions are displayed.

-
+

Set up

-
+

Try it out

-
+

Run sample

-
+

Try it out

-
+

Try it out

To see referenced entities within an entity, take the following steps.

    @@ -332,11 +332,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 8ec69c613..64cf933a0 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -121,12 +121,12 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to work with the web image data type. Insert an image into the selected cell and then retrieve information about that image.

    -
    +

    Set up

    Add a new worksheet and then enter the URL and alt text for an image of your choice.

    -
    +

    Try it out

    Select the cell you want to insert the web image into, and then select the Insert image button.

    -
    +

    Try it out

    Press Require approved name and then click on a cell in the Baby Name column and use the drop down to enter an approved value.

    -
    +

    Try it out

    -
    +

    Create a new workbook

    -
    +
    -
    +
    -
    +
    -
    +
    @@ -174,11 +174,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index bcecb8ad8..98aada662 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -70,17 +70,17 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to use table changed events.

    -
    +

    Setup

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Click the button to register handlers for the pie chart's activated and deactivated events. Then click the chart to activate it. Watch the console. Finally, click the cylinder chart to deactivate the pie chart.

    -
    +

    Try it out

    Click the button to register and use handlers for the worksheet's ChartCollection events.

    -
    +

    Try it out

    In addition to hovering over a cell, you can view comment changes in the Comments pane by selecting Show Comments from the Review tab.

    -
    +

    Try it out

    The handlers update the "Grand Total" cell when events are fired (and enabled). Try editing the cells or refreshing the data with events enabled and disabled.

    -
    +

    Try it out

    -
    +

    Changing data in a table triggers the data changed event. You can change the data manually or programmatically.

    -
    +
    -
    +

    Changing a range selection in a table triggers the table onSelectionChanged event. You can change selection manually or programmatically.

    -
    +

    Try it out

    -
    +

    Changing data in tables triggers the data changed event. You can change the data manually or programmatically.

    @@ -225,11 +225,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index 7874fdca1..03db0d53a 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -69,10 +69,10 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to register a worksheet protection change event handler. Once the event handler is registered, you can enable and disable worksheet protection for the current worksheet. When worksheet protection is enabled, the current worksheet can't be edited.

    -
    +

    Try it out

    -
    +

    Try it out

    -

    Selection Changed

    +

    Selection Changed

    @@ -221,11 +221,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index e18f1ca89..eb8611711 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -102,11 +102,11 @@ script: language: typescript template: content: |+ -
    +

    This sample shows how to register and use event handlers for table onChanged and onSelectionChanged events.

    -
    +

    Set up

    -
    +

    Try it out

    -
    +

    The console will log the addresses reported by the different onSelectionChanged events. Change the cell or cells selected in the worksheet to see the results. Try selecting single cells, multiple cells, and multiple discontiguous cells.

    @@ -147,11 +147,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index 1e78a206e..f7576b8cb 100644 --- a/samples/excel/34-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -183,11 +183,11 @@ script: language: typescript template: content: | -
    +

    This sample shows how to create, access, and delete named items.

    -
    +

    Setup

    -
    +

    Try it out

    -
    +

    Clean up

    -
    +

    Try it out

    -
    +

    Create the PivotTable

    -
    +

    Adjust the PivotTable

    -
    +

    Adjust formatting

    -
    +

    Delete the PivotTable

    -
    +

    Try it out

    -
    +

    Change functions

    -
    +

    Filtering

    After pressing the "Enable filter" button, manually select the classification filter for the PivotTable -

    +

    Data Manipulation

    -
    +

    Clean up

    -
    +

    Try it out

    -
    +
    @@ -186,11 +186,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index ed4c13e1a..b4530456f 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -253,22 +253,22 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to filter PivotTables with the different PivotFilters.

    -
    +

    Set up

    -
    +

    Try it out

    -
    +

    Filters

    Manual filter

    -
    +

    Try it out

    -
    +

    Try it out

    Add a row to the table, then refresh the PivotTable. Note that the PivotTable doesn't automatically refresh.

    -
    +

    Try it out

    Add the slicer, then try out the formatting and filtering options.

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Cell D3 has dependents across worksheets.

    -
    +

    Try it out

    Cells in the 'E' column have direct dependents on the same worksheet. Cells in the 'F' column have direct dependents on another worksheet.

    -
    +

    Try it out

    Enter text to search for in the box below and press Find text or Find text with null check to display the found text's address in the console.

    @@ -158,11 +158,11 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index 5b000608b..f569750e6 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -170,17 +170,17 @@ script: language: typescript template: content: |- -

    +

    This sample shows how to select the edges of the used range, based on the currently selected range.

    -
    +

    Set up

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Add new style will throw an error if the style has already been added.

    -
    +
    -
    +
    -
    +
    -
    +
    -
    +

    Clean up

    Delete new style throws an error if the style doesn't exist (that is, hasn't been added). Deleting the style also causes the other buttons using the style to fail.

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Select an image file (JPEG or PNG).

    @@ -128,11 +128,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index 507c1c295..f5010b2db 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -161,10 +161,10 @@ script: language: typescript template: content: |- -

    +

    This sample shows how to create and modify line shapes.

    -
    +

    Setup

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Press the following buttons in order, so rows and columns of appropriate sizes are added.

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    @@ -132,11 +132,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/50-workbook/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml index 30b64044d..f7526946b 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -108,18 +108,18 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to apply the cultural settings APIs to help normalize data.

    -
    +

    Setup

    -
    +

    Try it out

    -
    +

    Try it out

    Protect without password

    @@ -252,11 +252,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/50-workbook/workbook-built-in-functions.yaml b/samples/excel/50-workbook/workbook-built-in-functions.yaml index bb72c4349..8a33f3e3f 100644 --- a/samples/excel/50-workbook/workbook-built-in-functions.yaml +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -80,11 +80,11 @@ script: language: typescript template: content: |- -

    +

    This sample shows how to use and nest the built-in Excel functions VLOOKUP and SUM. The sample uses VLOOKUP to return data, and then it uses SUM to combine data returned by VLOOKUP.

    -
    +

    Setup

    -
    +

    Try it out

    Calculation events

    @@ -187,11 +187,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index 457ff2206..ab987ccbd 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -35,11 +35,11 @@ script: language: typescript template: content: | -
    +

    This sample shows how to get the active cell of the entire workbook.

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Select any of the three worksheets for 2015, 1016, or 2017 and press the button to compare the tax due on the current sheet with the previous sheet.

    -
    +

    Try it out

    Add two filters. One shows only the top half of sales and the other shows only fruits that end with the letter 'e'.

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    In Excel, choose View > Page Layout, then observe the page layout changes as you press the following buttons.

    @@ -203,11 +203,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 775dc432a..96c0319e2 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -102,18 +102,18 @@ script: language: typescript template: content: | -
    +

    This sample shows how to get a range or a cell in a worksheet.

    -
    +

    Set up

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    The currency conversion is provided by exchangeratesapi.io which uses exchange rate data published by the European Central Bank. Click "Convert"

    @@ -182,10 +182,10 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js jquery@3.1.1 diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index dc8d014f3..9d005cbe6 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -95,18 +95,18 @@ script: language: typescript template: content: | -
    +

    This sample shows how to format a range.

    -
    +

    Set up

    -
    +

    Try it out

    -
    +

    Performance settings

    -
    +

    Try it out

    -
    +

    Try it out

    + -

    Size - (width x height) -

    - +

    Size + (width x height) +

    + - + -
    -
    - Uses the Spectrum color picker, and the TinyColor libraries. +
    +
    + Uses the Spectrum color picker, and the TinyColor libraries. +
    -
    +
    language: html style: content: |- @@ -207,11 +211,11 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/99-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml index 27513ae68..d0ed350b2 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -175,12 +175,12 @@ script: language: typescript template: content: | -
    +

    Check whether there is a path from left to right, moving forward one cell at a time (and only straight or diagonally).

    Set up

    -
    +
    Circle density (%)
    @@ -222,11 +222,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 82333b40b..37266ccc2 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -155,14 +155,14 @@ script: language: typescript template: content: |- -

    Draw colorful patterns

    +

    Draw colorful patterns

    -
    +
    Choose size:
    -
    +
    @@ -189,11 +189,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 515ab5cb4..f8c88d412 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -646,28 +646,28 @@ script: template: content: |-
    -
    +

    This sample lets you repeatedly stack tetrominos, which are represented by Shapes. Select a background image (or leave blank for the default) and Start!. The controls will then be displayed.

    -
    +

    Select Background Image

    -
    +

    -

    language: html style: @@ -785,11 +785,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 32c8a1e03..e8a58676c 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -50,11 +50,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 50a3a4c84..0382801b7 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -48,11 +48,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index f08ab07ad..9eb635514 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -37,11 +37,11 @@ script: language: typescript template: content: | -
    +

    This sample shows how to set, save, and get add-in properties that can be accessed the next time the add-in is opened.

    -
    +

    Try it out

    @@ -76,11 +76,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index 8c3d77bf7..1c8c4e79c 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -70,11 +70,11 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to set, save, and get the custom per-item properties of an add-in.

    -
    +

    Try it out

    First load the CustomProperties object of the mail item.

    @@ -128,11 +128,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml index 27a8eec47..ffb703cd3 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -43,12 +43,12 @@ script: language: typescript template: content: |- -
    +

    This sample adds an inline Base64 image to the body of the message or appointment being composed.

    Required mode: Compose

    -
    +

    Try it out

    @@ -66,11 +66,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml index b26f7bcae..67c349a94 100644 --- a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -34,11 +34,11 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to get and set the start date and time of an appointment in Compose mode.

    Required mode: Appointment Organizer

    -
    +

    Try it out

    @@ -107,10 +107,10 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js jquery@3.1.1 diff --git a/samples/outlook/90-other-item-apis/set-selected-data.yaml b/samples/outlook/90-other-item-apis/set-selected-data.yaml index 4442411b8..baa5c050f 100644 --- a/samples/outlook/90-other-item-apis/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -21,12 +21,12 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to replace the selected text in the item body or subject/title.

    Required mode: Compose

    -
    +

    Try it out

    Select text in the item body or subject then push the Replace selected text button.

    @@ -66,8 +66,8 @@ libraries: | https://appsforoffice.microsoft.com/lib/beta/hosted/office.js @types/office-js-preview - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml index a84e6a97b..faa5debbf 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -44,13 +44,13 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to temporarily set the content displayed in the body or subject of a message in read mode.

    Required mode: Message Read

    -
    +

    Try it out

    @@ -87,8 +87,8 @@ libraries: | https://appsforoffice.microsoft.com/lib/beta/hosted/office.js @types/office-js-preview - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/outlook/default.yaml b/samples/outlook/default.yaml index b8092cb5c..f338af07c 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -33,11 +33,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index 851297dde..2a14f6c5d 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -39,7 +39,7 @@ script: language: typescript template: content: |- -
    +
    This sample executes a code snippet that adds a text box to the first slide in the presentation.
-
+

Result

@@ -222,11 +222,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index a34376075..903a7cb70 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -177,11 +177,11 @@ script: language: typescript template: content: | -
+

This sample shows how to get selected shapes, and how to select and change specific shapes.

-
+

Try it out


@@ -214,11 +214,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 2c8607caa..593f80644 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -96,11 +96,11 @@ script: language: typescript template: content: |- -
+

This sample shows how select and change shapes based on their types.

-
+

Setup

Create some shapes in a new, blank presentation.

@@ -135,11 +135,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 7e256a947..e9d57a18a 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -152,11 +152,11 @@ script: language: typescript template: content: |- -

+

This sample shows how to create, resize, move, and delete shapes.

-
+

Try it out

Begin by deleting all shapes that are currently on the slide.

@@ -217,11 +217,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index cd099bbbf..e1772d8df 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -57,11 +57,11 @@ script: language: typescript template: content: |- -

+

This sample shows how to add a slide and optionally to specify the slide master and layout of the slide.

-
+

Try it out

On the Home ribbon, open the New Slide drop down menu to see the slide masters and slide layouts in the presentation. Be sure there are at least two slide masters. To add a master, see +

This sample shows how to get selected slides, and how to select specific slides.

-
+

Try it out


@@ -165,11 +165,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index 7636d8435..446fd639e 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -23,7 +23,7 @@ script: language: typescript template: content: |- -
+

Demonstrates how to get slide metadata.

Select one or more slides and click Get slide metadata to get the ID, title, and index of the slide(s).

@@ -46,11 +46,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 1fb1a34d1..7816f9633 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -68,11 +68,11 @@ script: language: typescript template: content: |- -
+

This sample shows how to insert slides from another presentation into the current presentation.

-
+

Try it out

    @@ -110,11 +110,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 0c5c4fa5d..c7ff37dd9 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -151,10 +151,10 @@ script: language: typescript template: content: |- -
    +

    These snippets show how to use tags with the presentation and its slides and shapes.

    -
    +

    Try it out

    1. Add several slides to the deck. Add content to each so they are visually distinct in the thumbnail pane.

    @@ -206,11 +206,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index 63903e590..6a3075502 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -149,10 +149,10 @@ script: language: typescript template: content: | -
    +

    This sample shows how to get selected text, and how to select specific text.

    -
    +

    Try it out


    @@ -183,11 +183,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index 3b73ebcef..f41fdb59c 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -31,11 +31,11 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/project/default.yaml b/samples/project/default.yaml index 0d31b13fb..6b1016a30 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -38,11 +38,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/web/default.yaml b/samples/web/default.yaml index 470013de6..12d365a1d 100644 --- a/samples/web/default.yaml +++ b/samples/web/default.yaml @@ -32,8 +32,8 @@ style: } language: css libraries: | - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 4ae9817f8..d903c38f9 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -35,7 +35,7 @@ script: language: typescript template: content: |- -
    +
    This sample executes a code snippet that prints the selected text to the console. Make sure to enter and select text before clicking "Print selection".
    -
    +

    Try it out

    Register event handler.
    -
    +

    Try it out

    1. Insert content controls.
    -
    +

    Try it out

    Insert content controls.
    -
    +

    Try it out

    1. Insert content controls.
    -
    +

    Try it out

    1. Insert content controls.
    -
    +

    Try it out

    1. Insert content controls.
    -
    +

    Try it out

    -
    +

    Try it out

    Insert checkbox content controls on each paragraph. @@ -235,11 +235,11 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index a0abbf080..28d1abfee 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -101,18 +101,18 @@ script: language: typescript template: content: |- -

    +
    This sample demonstrates how to insert and change content control properties.
    -
    +

    Set up

    -
    +

    Try it out

    Insert content controls on each paragraph.
    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Select an insertion point in the document.

    -
    +

    Try it out

    -
    +

    Try it out

    Get the word/term count.

    @@ -123,11 +123,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 8205a7f4c..a3be43cd4 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -76,11 +76,11 @@ script: language: typescript template: content: |- -

    +
    This sample shows how to insert basic formatted text and apply built-in styles.
    -
    +

    Try it out

    -
    +

    Try it out

    Apply to all pages

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Compare location of first paragraph with location of second paragraph

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Update custom style

    @@ -391,7 +391,7 @@ template:
    -
    +

    @@ -400,7 +400,7 @@ template:
    -
    +

    @@ -409,7 +409,7 @@ template:
    -
    +

    @@ -418,7 +418,7 @@ template:
    -
    +

    @@ -427,7 +427,7 @@ template:
    -
    +

    @@ -436,7 +436,7 @@ template:
    -
    +

    Delete custom style

    @@ -446,7 +446,7 @@ template:
    -
    +

    Import styles from JSON string

    -
    +

    Try it out

    Table formatting

    @@ -232,11 +232,11 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 7f0efc2f4..122a4f1b5 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -49,18 +49,18 @@ script: language: typescript template: content: |- -

    +
    This sample demonstrates how to get a cell from a table.
    -
    +

    Set up

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    -
    +

    Try it out

    Get current change tracking mode

    -
    +

    Try it out

    Manage comments in selection

    Select content in document body before proceeding.

    @@ -298,11 +298,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index a01980cae..0ee6ebbae 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -253,12 +253,12 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to add, query, replace, edit, and delete a custom XML part in a document.

    Note: For your production add-in, make sure to create and host your own XML schema.

    -
    +

    Try it out

    -
    +

    Try it out

    Insert fields

    First, select some text.

    @@ -239,11 +239,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index d27f13d68..85eaa494d 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -167,18 +167,18 @@ script: language: typescript template: content: |- -
    +

    This sample shows basic operations using footnotes.

    -
    +

    Set up

    -
    +

    Try it out

    Insert footnote

    1. Select text in the document.

    @@ -239,11 +239,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 5e82a4940..1264bfdea 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -77,13 +77,13 @@ script: language: typescript template: content: |- -
    +

    This sample shows how to add, edit, get, and delete custom settings on a document. Settings created by an add-in can only be managed by that add-in.

    -
    +

    Try it out

    Add a new setting, or edit an existing one

    @@ -121,11 +121,11 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index fa52a3810..95a1ba8d8 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -250,11 +250,11 @@ script: language: typescript template: content: |- -
    +
    This sample demonstrates how to manage styles.
    -
    +

    Try it out

    Get current number of styles

    @@ -341,10 +341,10 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js @types/office-js - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js jquery@3.1.1 diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 0abfd36a8..908027c8a 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -149,18 +149,18 @@ script: language: typescript template: content: |- -
    +
    This sample shows how to manage tracked changes.
    -
    +

    Set up

    -
    +

    Try it out

    -
    +

    First, choose the Add sample text button.

    -
    +

    Try it out

    Set the styling of the first paragraph.

    -
    +

    Try it out

    Insert a combo box content control after selected text. @@ -319,8 +319,8 @@ libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js @types/office-js-preview - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml index 8b3b46f77..70b694d4a 100644 --- a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml +++ b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -141,18 +141,18 @@ script: language: typescript template: content: |- -

    +
    This sample demonstrates how to insert content controls and change their properties.
    -
    +

    Set up

    -
    +

    Try it out

    Insert content controls on each paragraph.
    -
    +

    Try it out

    Insert a dropdown list content control after selected text. @@ -321,8 +321,8 @@ libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js @types/office-js-preview - office-ui-fabric-js@1.4.0/dist/css/fabric.min.css - office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index e4278b07e..b3eeefb61 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -267,21 +267,21 @@ script: language: typescript template: content: |- -

    +

    This sample shows operations on comments and how to use comment events.

    Important: Comment events APIs are currently in preview. If this snippet doesn't work, try using Word on a different platform.

    -
    +

    Set up

    -
    +

    Try it out

    language: html diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index b9f9eb4ab..60b28fddc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9597,7 +9597,7 @@ mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { - // Insert the Base64 image to the beginning of the body. + // Insert the Base64-encoded image to the beginning of the body. const options = { isInline: true, asyncContext: bodyResult.value }; mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { if (attachResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9606,7 +9606,7 @@ mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline Base64 image added to the body."); + console.log("Inline Base64-encoded image added to the body."); } else { console.log(setResult.error.message); } @@ -9665,7 +9665,7 @@ mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { - // Insert the Base64 image to the beginning of the body. + // Insert the Base64-encoded image to the beginning of the body. const options = { isInline: true, asyncContext: bodyResult.value }; mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { if (attachResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9674,7 +9674,7 @@ mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline Base64 image added to the body."); + console.log("Inline Base64-encoded image added to the body."); } else { console.log(setResult.error.message); } @@ -9784,7 +9784,7 @@ mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { - // Insert the Base64 image to the beginning of the body. + // Insert the Base64-encoded image to the beginning of the body. const options = { isInline: true, asyncContext: bodyResult.value }; mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { if (attachResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9793,7 +9793,7 @@ mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline Base64 image added to the body."); + console.log("Inline Base64-encoded image added to the body."); } else { console.log(setResult.error.message); } From 49971e70fd41a20b26c44035c57930686f39f3f6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 29 Oct 2024 11:09:48 -0700 Subject: [PATCH 096/156] [PowerPoint] (1.6) Promote snippets for GA release (#941) * [PowerPoint] (1.6) Promote snippets for GA release * Updates --- playlists-prod/powerpoint.yaml | 18 +++++++++--------- playlists/powerpoint.yaml | 18 +++++++++--------- .../manage-hyperlinks.yaml | 6 +++--- snippet-extractor-metadata/powerpoint.xlsx | Bin 14265 -> 14220 bytes snippet-extractor-output/snippets.yaml | 4 ++-- view-prod/powerpoint.json | 2 +- view/powerpoint.json | 2 +- 7 files changed, 25 insertions(+), 25 deletions(-) rename samples/powerpoint/{preview-apis => hyperlinks}/manage-hyperlinks.yaml (94%) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index f83d1184f..543434d41 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -38,6 +38,15 @@ group: Document api_set: PowerPoint: '1.1' +- id: powerpoint-hyperlinks-manage-hyperlinks + name: Get hyperlinks + fileName: manage-hyperlinks.yaml + description: Gets the hyperlinks found in a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml + group: Hyperlinks + api_set: + PowerPointApi: '1.6' - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml @@ -54,15 +63,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml group: Images api_set: {} -- id: powerpoint-manage-hyperlinks - name: Get hyperlinks - fileName: manage-hyperlinks.yaml - description: Gets the hyperlinks found in a slide. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml - group: Preview APIs - api_set: - PowerPointApi: '1.6' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 208333651..72f4c2f59 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -38,6 +38,15 @@ group: Document api_set: PowerPoint: '1.1' +- id: powerpoint-hyperlinks-manage-hyperlinks + name: Get hyperlinks + fileName: manage-hyperlinks.yaml + description: Gets the hyperlinks found in a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml + group: Hyperlinks + api_set: + PowerPointApi: '1.6' - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml @@ -54,15 +63,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml group: Images api_set: {} -- id: powerpoint-manage-hyperlinks - name: Get hyperlinks - fileName: manage-hyperlinks.yaml - description: Gets the hyperlinks found in a slide. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/manage-hyperlinks.yaml - group: Preview APIs - api_set: - PowerPointApi: '1.6' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml diff --git a/samples/powerpoint/preview-apis/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml similarity index 94% rename from samples/powerpoint/preview-apis/manage-hyperlinks.yaml rename to samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index ba17ab9e7..eff37c9dc 100644 --- a/samples/powerpoint/preview-apis/manage-hyperlinks.yaml +++ b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -1,4 +1,4 @@ -id: powerpoint-manage-hyperlinks +id: powerpoint-hyperlinks-manage-hyperlinks name: Get hyperlinks description: Gets the hyperlinks found in a slide. host: POWERPOINT @@ -61,8 +61,8 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index a6d8a5117305c6deec9f852984e107c4b3eb2f01..4c6d50cb6874357cbe9580841f63e005de69da1a 100644 GIT binary patch delta 5436 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 delta 5506 zcmZ8lbyQT{`W}Yv96&$@WN1-91SE$pK^=ya96-83+9M%I$4DyD-Q6XEAT=No(j|lR zNB8CXes|rwe)s&b*I8%3`+48>?DyH{oF~e;$+;3qh|iInTUd@ZAmjnMekZ(D=Tk+L zA;fg-CuMXWhW!bvuB4?FGM8<}4g0a>?=MvwVNYS%iwcq`4;$7!(0B;f`MMx5d1T|C~Y0V zQ#ED{+GbJBIE^(XT=8PZKC{>pf-S^53}{lsmRg>w=`K<8`vbV$JF+?EJY`wBD581p z(I5`7pjYesCRG;-8-}%x0OprvvAnKQq6xiG%{@6<@rb*A+;PSqJzK#7si>!Mk0g^0 zqH96Ak9;`Jl79PPi7g=xN-gROa<;Jqa;%}$#DjAty%wj=wY7^^cCO@fP8;+@fipe! zZ6<+AThgLUQNaF6jaUX@^1xutBNk1^jF7J}^tP6MkxgMWB12O0CTy>Squk{rjoZ)d zGHF+XEx3z!YoU*)q9sjQN4;O00`=23hRSo1uHQV4q^%{7=ppX4=Y;cgsAM+g7D34I zZfuL(StqHnyuLII{D{SJfzdR%laY3Ti2WkeAn5bD0YIhLg+g7tQFMTICoDgyR}(y{ zrc>#HX%Z?ALqCL`;f#mQ*@b>u5N&l#4gC$x6%78ccA)d`H&8}=3|(4jC8or#Mj ze%=4ozsonE?6C4>`YN32!b!rFW8rnOiP?oVoA{A5YUB#vfB?OQO2y|=cm?jgv7mqp zEU~ewKugRG5JkJNAu+)?pjt;6@?pG-eUa2Dx-@-%VoMB!HW#F;c|h_AOmX*)Or|Oc z2(%#&0x^QnRU%C2a58=XUZACeBo^5S`=^qm;Guf9!ec8^^3O;FvE5$9 zFT7?QxCS?kCsmj^J<)gOG3r-#L<+hP>&g!f+?hgm73DO^e^)dBtv|Wb%oJRLiVKV- zQHa|2`UhzrbAoA}RZd^!$48XgmtIiieefZCm%-T4&l@!ZK-66FbCVMH<5@hObUXl< zp5lHV&Ye7>{Gw=^xtKbGWAc3e0uj+`t?M7ixf^0-o#L3Bw(V^Yw}5t$(EKv9W<&k$ zjAtmhA*TlwALHZ%aJ{H+d^tZCRRHw;Y+V&Mf0z;^ekO$PfB z%n`?UCz)B?d+*~n<$3CF7vxns2+_zuc(1njDz{hFUuE*Ur|~O>blX|A4d8je(1g zEg2MIv6K&`50mLZ9QWtR zI}2V!zNwEwQLGsJ&<(t4yH`7-dwVkDIlJN`RJRY)lK2ON5Z__QvK27nZv#WdHeP{1BO$-wID&EvwW*z zbRJnsS(NR}w5br8{m>@isH8E3w~jayA)6b~?o&F#RhB(6#>tccAr#7^2O|&Je>wxh z0-oYBj$_O9U8EVmf5A5OTp6_O9>SHN2&Dz#32QVGiuK$FT_!bHWgaQ^tKw-GX@Wb3;xe^>gaUcsG5 zmk~m2+JE41B^E?mw_TBfrzoJt4Yk=jeyp>lMyW+$je7n%KcfAIeum?Vqb1v*^C8H= zSTNelQiGwRgI(`FW6?lc9Kpb|9QH%?~`kRMnsg99ASQhKc_lv*D; zN#E08(6W}*$V4_VmoxVstHVXb@VqzdQ}Hd$8wZMit{&Lvqa!j>v}JLM)m@NFWIeQQ zyH;unPPMr@pSnLu5I)yIx$E6fgd5#878NU1>){$K(gaEOi=tU|*z~k;)N*thQAEGT zsooA>>$4!mp0XJBVF56?@?=)^(aEBBZ?G??WKo5FP7XO*%?;}SwWd(_EEEr7{Y3Ot zDMYqgac67jWsX9i4FWHS!2UREnaJ1W9tKgyRyY$dT(*`4hlRtXhCP`V=TtWS;^?^Q zlzxZAjHx|P>9uAcyq)u4G~Pj8cC#N*W*W+U^gGP2TRSEJe1k){tVlVc=~E-h#B=Mx z9*J@(^Koo?wr4M=o2Rc3H14< zJ>muGf;QPMc|+s~FB(?+TLeTh1ZB8KmhzfUX# zqwhEu=~Z)_tm@S(tL)IJ@lnOP3&0AV^-u%%i#R~i%^VGn3LoH!tH;S%+lpiPV$9U; z;$T;enF=W+8i{uu<60CW-K{oF$I76$^~$Z$HI6Q2YCMEtR%!gJtC1{nlv=M6^Z2Nm zgkj&rXt2+%Av^rpyQO@}=9*M)vgxBT=q5^9rMf#RDON4||{Kitd8qc~bx?gqrW z3W#^ECnA1gyVR~+S{Gwa<4QP2f7|6@-1gFHbxUt0`9a_Ja8j^O+V_I6SRLb*o4d?A zF|PfVbuJQf2WgLbsmr-X7oQLT6zFR|!}*iAm0K-!>Gyqc0XIGuyuHH05eO-%%Gbp` z#4db>*CFezbWpap1pkBacbh(io>H%`JRBsqtJWD*pp0PvV}_i|GtX129S!V)W(&Dq z_Hh2AACvwVqbGNqJUoP>U=SNgGJM_H?xbcy4BB+#Z(P7i$fGY>rgD}~CX0|euljIR zn%7N7&G&BLthNhVt)gPXlLH3Tp~sE zC>2n48YXbtT-*Q-c`=$?j3payL0d7e_@Ae_)eeg-1VBub(UTc&atde+xF*y_9lJhP`CW#GvuATX;LV^)+b*O>1$LRm`BZ;0KS)$HO%xPM1VmB zQx6yy1ac<=fyi&)!rl%K-93C9tlS@XJ37qj_B+i8QnfK)WvN>E4IP^5*?9}M3yClU z_zB=P1dSE#(!J*&_#3btUOfHvW4SNgN+?C2thV|byi%2DcEDHhE4I(KjJhJFl57CKM(JL<{V9NOc6i7_R=3u;=VNXx#--r1rXfMip3F72QRbp98N5@7?he^CAyGur@bja@saFNec9yN?pTA zCx{w{LXDx*CaDznfZp|eKfmV7R7gVo?*Q@>%FAr!8b+YSu+6}se5^CoucYZwItF79 zQW8z8HCZymW$Yc;a4qA@Zn7uiLCM4d1DZ>pwBGYoea!~=)%SRdY;1Trf@;6bGIS04 zF`s`%Ye_An4)@Kbj&Nn6L*G=UYU=5kGsQH9jrglbO`cpp8Tu0_lS7HWr%Fxy(a)-a zMBx2cfGx4|FMYldfXV*za|4vtd(=nXYGj=Z1fu)5Mr_R8tSq%X+-#k!|B*_R-cZbp zI9dBcjF+Il9c6ieEF)bcOi4oN7wFMUX8%sM%FkC0S=FnFDI2Sf#|Gz?d8->yD%p>u z4Pmkfm~6!7wzduAYw`)Tob|KFb!#7jX5qT=A*ma`20mbZHB}+YJ}WBJ=M7$Rhq2U| z#c!5ZmL+pi&eRvO17kV@9$%!zq-_$mqPOwJ3LMoZUsBcC<5X&|4b;>eRMR5X4Xh}b z*3U`~4x}V)&K7VUgrXU&D-L=F`+LY37}UkZ_+5qguew~k@u$+7XZ3$1XUJIr;S{L! zvZMgY#&Tei>E&s4YqODBq7Av~{F^c_fmx=!>*flxnxl&?TLz<+K^sqh`c23C;uxMd z8m58V*JiFImgG)WnkQP~;=qu-zzNZ7QWCxpiIlItZD$nqVh9T%5W@pDZiBr724x=} zE}j>Y+;M6WI2tsfrRg^L>Cq_VQJ50vU`eq2G(SKz6_SV*K|T+03U?j1e0nbFE^ON{ z;SjUjomL%dt6i5Zn?77Nnfcti)iqd9J%{W`Z1)-#m+_Arf5{^6Yi;UDDw!|QHe>X; zFk|&}BfH8am`sUF@a`b_uC;t4^-r-;*c;JyYq54~3z66Z1MGMR-*INPk-{u*DDG?kwArae`MR6o@ootgq(J0tkE3ch#!>~BcVA|A;OJF7$)A&u_m zP<&qP?;fp@%$EkAV|p4|1r2{}THLp;Yz5Y{$F55?x^JfXkc9 z5gl%6doYw>^Q%>yaYW9OMc!3v#Vt6O^B=?JCyg}` zGpqr?jY3OGX^0`;w2f>edWn&BtTPMXte+2Uo2}1IoTPO@b!SsU>wkTn65F%rtyNaA zu;u-IM@DLvUAevSYk7EnH73ai;hkjoIsqld;z&#?`02ZR>lkJLJ>;4@(vaqXg^|IcR!#Kt1*^ ziZx?Q^dem%z?&&FrNxj{EQo$6a zu)mg@MH8Nw0%_zEQ9up(A}q$a3hx`9J6S{Lb4o=IMG_gdqhaJ-xC<_|e^!nCYOC<;D3KH$hQN+Q+sG-Rs<^0cVF}(M(Cja}YwLWsr8u z#U*$rf-II4_)U;fqWO^Q-GWU|>C5xA3Jt0g!U|KY3i15Vr~({M=FaxIIIr_Y_ljL$ z1dPjzo!wm6fRk5q2Rn3_GvxNVL-Uu|>i!ZC-VckiW=}0kNa^L}+<)&4K5QBRRQ5^# zF?$*W3<&=1PeMcxc- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml // Gets the hyperlinks found in the first selected slide. @@ -13923,7 +13923,7 @@ 'PowerPoint.HyperlinkCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml // Gets the hyperlinks found in the first selected slide. diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index f1ba45bb4..6563b54a1 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -3,9 +3,9 @@ "powerpoint-basics-basic-api-call-js": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-api-call-js.yaml", "powerpoint-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-common-api-call.yaml", "powerpoint-create-presentation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/document/create-presentation.yaml", + "powerpoint-hyperlinks-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml", - "powerpoint-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/manage-hyperlinks.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index bc13a10a0..7f1b28742 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -3,9 +3,9 @@ "powerpoint-basics-basic-api-call-js": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-api-call-js.yaml", "powerpoint-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-common-api-call.yaml", "powerpoint-create-presentation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/document/create-presentation.yaml", + "powerpoint-hyperlinks-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml", "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml", - "powerpoint-manage-hyperlinks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/manage-hyperlinks.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", From 150cc9c5b8b96aefb40618f6934faf0445b1cbbd Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 18 Nov 2024 08:08:26 -0800 Subject: [PATCH 097/156] [Word] (1.9) Release (#949) --- playlists-prod/word.yaml | 36 +++++++++--------- playlists/word.yaml | 36 +++++++++--------- .../get-change-tracking-states.yaml | 2 +- ...-and-change-combo-box-content-control.yaml | 7 ++-- ...-change-dropdown-list-content-control.yaml | 7 ++-- snippet-extractor-metadata/word.xlsx | Bin 27520 -> 27526 bytes snippet-extractor-output/snippets.yaml | 30 +++++++-------- view-prod/word.json | 4 +- view/word.json | 4 +- 9 files changed, 64 insertions(+), 62 deletions(-) rename samples/word/{99-preview-apis => 10-content-controls}/insert-and-change-combo-box-content-control.yaml (98%) rename samples/word/{99-preview-apis => 10-content-controls}/insert-and-change-dropdown-list-content-control.yaml (98%) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index d5164def8..2a5ca8870 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -111,6 +111,24 @@ group: Content Controls api_set: WordApi: '1.7' +- id: word-content-controls-insert-and-change-combo-box-content-control + name: Manage combo box content controls + fileName: insert-and-change-combo-box-content-control.yaml + description: 'Inserts, updates, and deletes combo box content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml + group: Content Controls + api_set: + WordApi: '1.9' +- id: word-content-controls-insert-and-change-dropdown-list-content-control + name: Manage dropdown list content controls + fileName: insert-and-change-dropdown-list-content-control.yaml + description: 'Inserts, updates, and deletes dropdown list content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml + group: Content Controls + api_set: + WordApi: '1.9' - id: word-content-controls-get-change-tracking-states name: Get change tracking states of content controls fileName: get-change-tracking-states.yaml @@ -535,15 +553,6 @@ group: Scenarios api_set: WordApi: '1.3' -- id: word-insert-and-change-combo-box-content-control - name: Manage combo box content controls - fileName: insert-and-change-combo-box-content-control.yaml - description: 'Inserts, updates, and deletes combo box content controls.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml - group: Preview APIs - api_set: - WordApi: '1.9' - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml @@ -553,15 +562,6 @@ group: Preview APIs api_set: WordApi: '1.9' -- id: word-insert-and-change-dropdown-list-content-control - name: Manage dropdown list content controls - fileName: insert-and-change-dropdown-list-content-control.yaml - description: 'Inserts, updates, and deletes dropdown list content controls.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml - group: Preview APIs - api_set: - WordApi: '1.9' - id: word-manage-comments name: Manage comments fileName: manage-comments.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index b5bcbf36e..77f149b77 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -111,6 +111,24 @@ group: Content Controls api_set: WordApi: '1.7' +- id: word-content-controls-insert-and-change-combo-box-content-control + name: Manage combo box content controls + fileName: insert-and-change-combo-box-content-control.yaml + description: 'Inserts, updates, and deletes combo box content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml + group: Content Controls + api_set: + WordApi: '1.9' +- id: word-content-controls-insert-and-change-dropdown-list-content-control + name: Manage dropdown list content controls + fileName: insert-and-change-dropdown-list-content-control.yaml + description: 'Inserts, updates, and deletes dropdown list content controls.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml + group: Content Controls + api_set: + WordApi: '1.9' - id: word-content-controls-get-change-tracking-states name: Get change tracking states of content controls fileName: get-change-tracking-states.yaml @@ -535,15 +553,6 @@ group: Scenarios api_set: WordApi: '1.3' -- id: word-insert-and-change-combo-box-content-control - name: Manage combo box content controls - fileName: insert-and-change-combo-box-content-control.yaml - description: 'Inserts, updates, and deletes combo box content controls.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml - group: Preview APIs - api_set: - WordApi: '1.9' - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml @@ -553,15 +562,6 @@ group: Preview APIs api_set: WordApi: '1.9' -- id: word-insert-and-change-dropdown-list-content-control - name: Manage dropdown list content controls - fileName: insert-and-change-dropdown-list-content-control.yaml - description: 'Inserts, updates, and deletes dropdown list content controls.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml - group: Preview APIs - api_set: - WordApi: '1.9' - id: word-manage-comments name: Manage comments fileName: manage-comments.yaml diff --git a/samples/word/10-content-controls/get-change-tracking-states.yaml b/samples/word/10-content-controls/get-change-tracking-states.yaml index 9bfca816d..928ae2f78 100644 --- a/samples/word/10-content-controls/get-change-tracking-states.yaml +++ b/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 11 id: word-content-controls-get-change-tracking-states name: Get change tracking states of content controls description: Gets change tracking states of content controls. diff --git a/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml similarity index 98% rename from samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml rename to samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml index 47d422f0b..91c6cb700 100644 --- a/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -1,4 +1,5 @@ -id: word-insert-and-change-combo-box-content-control +order: 9 +id: word-content-controls-insert-and-change-combo-box-content-control name: Manage combo box content controls description: 'Inserts, updates, and deletes combo box content controls.' host: WORD @@ -316,8 +317,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml similarity index 98% rename from samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml rename to samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml index 9c4a76147..d4d9282d6 100644 --- a/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -1,4 +1,5 @@ -id: word-insert-and-change-dropdown-list-content-control +order: 10 +id: word-content-controls-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls description: 'Inserts, updates, and deletes dropdown list content controls.' host: WORD @@ -318,8 +319,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index f90deca3f99556a171c72f0f0370ddf80c5195ac..0867a4eb57643bd032635be3c3b3e2a946e57466 100644 GIT binary patch delta 17315 zcmY&Z;r?hxGF-3jgz+}&Yt4FuQV?(P;WxVsbF-SzN(|JAvjsx?*J zPgk$0)jfU-5FrZ?)he(sgOY*@h>?-N?QnZS30Z4V_ zmP0KbY!^gSh4w8^0Y8$m@tHCgQZk>?Kc|_{Y7GD2|0yuio|(g|P!?Kd%H;G(XF=3E z5&3KhbR!d=3r}YK-TWchNxGDjjt3BE4qe2T_mHYRd=kG9$U~#5$Wi+aw@x_~K+1tF zH?H1pbRRn1V7~H}-7usQTpmHwLECI97DB=qf$v2bqsw#b4x`24x`x9Q|AT8o648Jy zo+HlAqBAs8P_0|7zU&4+;m#a&$1tVYzhz~_`SW{J5>~rDU8R2y-5MmZeH-9jvGA>0 zvVDLencBlUdM~+-`mV4sc@(=*f!DkdXW}%qNuyN?FVrESU2xPmWiPVvAZGmRyCn=VNR8vFStGhLRgQz6 za^_}qe9LAXMagDAQDfP8Y5Zq1!pizi#AX(H=?d&r;Y@{+YD+-|!7d(rnZ^p6dv)0Qs#WTAQ;S~LHlm{e-N!}k;@MHw>5 zfhkLkB$Xo`scWRqJ6YCjc?i-+o2VBsP2%(8?p9Y{;{{>Cb+ia9kT9Op&#N(Y#-A-A z0qy9s*4Tm~qu&tq$_ZC$)kyU$ZsXg3Y_c;;5nX;Boh@-lt>M)0fB)Ik5igS?Alyz1 zQ=$PpZg0FlP5?gdZ&e%bcggQh8}IuH@3#vZNgHoB1HjuGA+Q6yuB_MrPhBH-&jN3! zz-!kz@OJqNcpKn7IQ8Es1&a>r%Y=PUJvDEp$1 zn80gAzc(k80D`98Ip}NFyq^M$cGl$|mj3dUA}{eTPTGs?`x~}7w|2K^PsG5e%>ZXJ z3?A(wB`hW>vaiYL?q<<((8kL8cE&>6Qq4lpA@BTx-vZ3@PJ_|x@z0iaJ$>Ee_Xceo z9?6t(jnTT18(HOQ1!Nj={Lz%Qjm|c`SF0vQ*BHhO-)92*YJ)61m7m-xOk)_{F1pVD zGuZK_`$GR;yt*e6jYiF&Z2XZh1tu5E6+o7!%1PMQfw#88tl;J0y=2O*yWVr2;O$iSF>-LtG-8Kze zzOgU!Kdf)Eegs|8vLwI?mT@n}WvXUvf9|H{XbrrX*W^rsYbn_rpe(*I)izmXdJ)I} zP0YEwu&S(X_fLalr!asJU&Rv&x$)&w=H>^eYtPYM+b-G|I~uM<({vHZZ=PeK9nqZi zlNnre%@iRJh~`)~TKyH|ANa%9Y0*7JCMv4Q3%p2)L(DPqxeelDup4-Y<~Pu0aN`c7 z7{N`?NXwm<5;*cSn?twO$_Cre<~Mw>BIKZM_=S? zScx15qO?$^kLKqHp>Q9Zo3 z@$rm({vTYKG)p;x;88WPXc^hDz@nj7;@3xk-M{yJ)voBY)IGH{4-VY{WO2uJ`u&p~ zdL9T#+LsVtO$+N(SK8ZMDGu3$n`j<}0DaI96n)BG#f+U=dv@0y$z_w-%vp!1`2u&m z24qaD)fE%N8yiP@_P#bP$G23%Kb0-l>rLWt8ZZL<`s4;j)taQ(U2yx)*}bkNn4uL@ z;~+he6)WXutNQM}JBbn9bF&8b<&UW`bV|H4x2nIUs1Y|;`@kA5+g~GpO=|!iR<%1( zxUGj$c@3@VdrKGK8fZ43gC&Yp8%(xyGQPNOy~H^$301Kv+@4`wX7viL^m~Q-vGuef zxbFzq^gK#bXcn8YEpbV{%8|20zXd{g-1Md|a`6iH%qQ*9KD}7{8h@^mqQT#!{PY@1 zn~Z$-PuChml5cHefdUP>yWj2|$}XG8yXu`gPFI9AnB_*fU8yiUSe7C@L4x7K-0U?Fblao-ZX&41V= zKp6Vqs|&RJcs!dZg(z%dXcTMym|Rbr`BPnz41xh4t*YDF`ewZgC*671ll7Ts z`*ItKI#t0j{)qdpu1^5JNi?6({mlGGBX(*qcy>)}g=Dq#BUaNI#EmZ$+xISo$w4VO9dyElG!Iih+Q<+1)adJdpMFj_WHp8!n{3tuJSlJs=QgIE_Cey_*l%(i z-NUzL)&Czd?Ps+iQWe^=O1FYStKSm=A;ogAv)3gg~M?D16Od3@)g%m=A$y3 z_$YTh9}Ks;&-t3>Z|vJ;Uu@4;@n@>g#8tb05q#y|(T_pKnE#P=(<*o$zs_QD$9$nyVv_MGtkrM7j$j|0{S({|%1Rii47<;A4vOuFuG1^jT>mM1 z94b&_t-U6D@k5&jeslqDsC086lq2>pO~~1OnF0sjEA!Z!asc7V@{nkkc(DqMz!O_+ z22BWk*GmijOtbX#7&}8ovi|~{YU!p#SBOeU3ee2^bVGQYGB2iQdfJaa{fw0(jQO&I z=KtdL;0Cd#tH@thJGPZ-@pj^YMa*Nz^3@x({E}LH4%x~Vk5Vq{Rd|4f0&8kE8w(v`4T1)G( z77&!vKE?__>k(Tb{=7MoHptqK@c;GZFkk(s|B}dK;vlKZq}j2oEdHq*DV|@n~B-gzFe*c6Rt_Ns6;wVo~;kflCt1 zv|spjYgmtpt37s6=3nr-{sPXk1x^}|d_C45WhH0AzETDV(Ikm0VBD47SU?^$Tt_?; z7;^nbShfF0SgWgPc0Ru}!%<8K?>QzEIzq=P7WDL^QFHE7eZGPG?@c46_z6eY4>m^( zpSrykw=6sVa5!B`1krwMJ9V%zp8A6Kb-;Z~Z|~nlIY>4M0HZt|&Gv>VzMpt9a>JD_ zyIYdqdeJ+qs1w?ff2rD5ym@LM2p#}4S3Sy>Uqg~G`G{%qHJS#O5&2!11V%nrnl2NYh)Go;hg$WdTC{|GFJ8R0WV<} z1&{=MGBf3RK$_`0d^dxY&RUJS8}fHwQFkSXU#m=GNAfG}QUT3x=IZ+Cm z^Z!lFm_CuWw7Y7FZ6K~1D%6}=3#-;DR z7?Q*AIu5grl*M;w6(TO2P$GN`m*RQ??wM*cmZxy3?b@U&X{~NmRwk)KIwaX*-4pTJ zEXWspF(@;_u=;$K+_Ic3{AglR#xd`Do+@VkcYo9t-LG*BSW^^)GV)%;Q8@c6{_Y@# z^I-ro(f!x~_J=kYd_hK#UOC~RXrN#bUooml#D@_y~ zHtQV8$#7qmrY4XrDNJr*`yJ^9FOlPH^k0dy30KyC%i6z*Ee>5V7g9E^&6F^#&@RPJ z%f9sKB^gV(b@o%$f3R?nX zg8tCL@ZG3>L3S@E>QYv+Q_=su=(hI#3QX;01-c!k?iAG+|32AEMTHbV1(F=Oog-A+ zgO3h8j1{O5|_76bqv7d%7UgIiKvx?0E2mT&91;Yk+QaO#>H=J1!Xx@ zgOy>zg|TbM?6kOcTTW3bP5GWN75-1)o1i2$a;c4sCQCw-xQcrW6BH`vuv_#p6F&9P zkK!*YF-7VWF0j0q(>zo?{hU-wU>1d?oP*0-H#>?5IXkijfsjon0e?JHgad3@6g1wL zQ?s0IX0^1ZDjXBNHV7VCUQK8nw&T;))Xq7%l*#c~TvSDQT+t9L3Gl7Ni%%%uF*mnUu+KeK_no?PNJpT}@~l4wci^eRV!a+H(fjbM>Z^+*FmKn2dNeLVe!N3{ zIbktk-*XnJSG;-4ta_QI2o7c`n-hgV*Ub*B$twpsQ-&W&X-l2fo#E$tD-Y1LnN2FO zxf1p&ljWvf7Z!IVuW|P%#v=VQ%B>6!9_9Jh%|-~Dt@@enwbH!q;Vm=E^qL0u4m}K? z`}n>2xFIV#mMXA-kW9BX;u0~{$~g}?%M$OuCh&D!isQIF*+0t(Llo7Ha}I95FZ;}K zAwivhhVQOyBDS+1OI4$bGudV7^U^0vOv?9p`c%{qrGHRn-3N z78qT@E?!6Ut+3%E45o&Jy{)B2D5{`9u*}Q_%_8Rt7VAL**;wtFzXG^e@-6tNvNGCr z)X!k}H50LYO`>-MV))ke-@aJ{LH8)# zuRLwYkOt9MGbocc!Y8(mE-XZ~=K1xv_=HDZ3yWB=j@d7!9m6!p-rZ28l(u((B672D zP^?_7z*gOGbv z;VyX6*NpDqHRTW%EG9%vssnf3KW4nGAeAbS-44*->+5xika+_tp502+y_koCx zpmyM=XT_7`;6+yX8hqL@fF|7Ej!m_IWCfi~g&+;!yX*rR3(qfH>;&BGcVCy>o%yMC zh5I|)Zmt*oD&!9^gRVAO*WB8hx+|AAoS!u_>_}$pR{_f!-X(RSOV8vC|exS)G32cg%Nz#rc%6o z57_{;T7)Pvr?j`5MhDbN(!d}qfv`&8w|eJS)4r5Gb_n*{hCyZ%Az&Zr(N&u_Urmy0F}rc>6mySD`3t#@4=`_v`FD%yeDQ=6nv#tU%kdNpi^+qW!JBCU(Vc*51L$Ua*--1s-7gwMUIl=#V?s2Y%!CRd!{Rp=D> z31O}q3uoaYN=3j4pDe-hpCyFo1i|3h7Xz6>tD&n$D&7+VksOyWNbjV7z_CAFa)Fm- zduiFm8k+Zl&G8#2oQ<{urm{ZVT!JgF9u0#E3-+H7_EDHtlMe5}Au!c)r}vF~VZ!jP z|B`{_Nb9n*=-1rrMpiVh)UC_xpx7;;;`NdW#n?OVJJS$GbcC&(Mj`^rux+8QvyOec z4_u~3cJhABUr0ppi%Q!VfS>?(kit#R%|;U)GTf<^l^~c6hmjbIOBKtP7z_=~|Lo`Y zn+iD$T^g4u=xB^6C--VZMb$&pLa_RwowfuU0m`vH4Zl;)6D~Wcu)G?mR|T5OZ5s zN&DoBq~95W0;s5Xa^i0Q{J>ll&OT@l~=40jXuhQ=?KvM1MiwGmc zL9n`s!&yjb8bF+aG<4w${(%yLwtF^3g`^>$fRJCs>p1Z6$h684P+!K7ikUHOp#g&VH@S0gWTmoe|G9-~ko}JZo9L}t zT#UVlUZd%EeZOgUoWl@R*7)IyYMI63H15a&_O`keo*KEZb)U6R@$R}>oPi1~xZN9F zJ1tii>-8|?BiE?hIPoUP3iE>NrAuy}LskV?8&Y2u2Dk_!w9;#HT)$8+qxiouC4ws0 zZDxrG1ZA+RE;8=9qjLr>Cr9@RM~)18>B~B9)Fd59D3=F9RZ1HMBtiWN0aLeXdx5R` z`&pl}W`BkL+F%^u7D2$|isS_vtf>%M0|VF@+)|1nFWRS65XBVG-2iifSHP7F0%Ue8rL%A;wv3p7LV`3tF&x6ODCBLY;S5Hhye&c3EOO}j zLV)UqQKsA<{+6>4KhsapLUKx|FPG!17=_5T=%tS#3-oBjHc>FMEJQ#BJQWfoyu(A# z!@W;$8zmk#u6Q==Dnw#gwa&&&Gf_|{bm=huuU-g6ROmqyVN`h)3~2IrMoPS{?x4~~ z+#wiZQHrwl0VmW1N?}xR{h`{TOD_f7bFc!RkWyeK>as|cBhiFVieZdFM1XyoWdJA$ zH6$>%u_2GVT?HokFdUc~_Bcp@OCy?uT^7ksw|&tS#~nx{oJRF~y?o)w;dCHqc6SpsL%E9vdDE-go{h` z_6mWxKh{LrG3X=p-5~gY?B5p;ND4xJ@#$kr798)Pj?v0nWB_6|5nPOuwTj2DxTWM0 zQz8)M?CP{b4w7mUWe{_eGBd^h94vx}s3>{M)5TB&K%+GtNNjw>!8`JX0+J5CMSv<}oRBA+B$Lk;=0Kf`SZ$2FgIPux6sV3Hqv_e&6wU9{P z5yQ`|gvzS68S}%jWL=)H+Z2CS2D_LEV6sg@@KmJ0%dw;2%q{PtyrLkw46Z>zJN#?0q-}}Ov^u&T<;-Yea;8_SiueyY-LG76A1x+TXe-( zz>Y&f+vc+%tC$SK26nV%FmY)zjsmg&e}jjSyb=N@B-{9ozww_BqC2`Ba}qfh$y>6j zq9q(spU234A=Fy2S+2H0MKy6uS0NX$xrKye&re&m$%EIf8(&V&i;0m*Lw6(w!$3Q_ zcM=GHP{mOp6wyts5O~nLNn6x4X$DAGMa*g3iFD4QV$oKNo>&-fWw0J*l4AR4-mHo` zjS#|nP7d~$gj4_BZ6R0rW;Duz{l*Vl9jIpNMTN-2?5^b!L-giZRhd#Asf{Rtn^&Bb zp+*1g_%FncUkmr95+g_xQ6mH$br1zZo5syK#pZk1B-11aM=?O8{RN0JHUR;j>C@xE z3;~h}#3(;S236F!OerFoyf4n8Lx+19CVvCs1h!E8u7axo+iN*6?)Z^fC~ADUF#7}x znOd{fqLm;5y7@^3TOj{l^kP@1w3QgrHDM@kIz^1 z-du7=d#yVic%~IX>9z$-P+Vw1rH>jDbXdW5W6xPrd3Y?6t1<7xmyX?*sffH&FNu=v zpE3nf&rMc^(K+Dztjxh6!XUkD@5wGA-z*N+48f{A7zoAJ5~5n9j0pG9Y7FxpCiSf( zA$#=hbP2*zR#Tlp;NIc(P98G(1vYc3IIv9!)hGr9f#VQ0nF;>O1>yH-5^tB~qkOGs z9=-|$=c09YxbU_700I{n^xi2&yyAHzw8pBY(qFH7;D6i)@Igm+K{3N}Y2RCjXB!8- zb`8sX@><_!I}xR$gB7`{(Mx#vTXX8t^ZKB!ihLVlmlwT!XT=-sJk=iPt!t3 z{xmi)s5tAp-LJlx!zuMsGo_1Cz5B}(fGMM_o*)=`fCJcw0N?Cv+t0$^*)61pLln#2 zZ_bWI8*V_NmYX^VQcDM#NcD5EFk^|mBzEI4d}-KHM}=sii^oXk_q3i9ZiJll-izME z301c5PU&{OM^<*%`)qx^=Sjo#)i1yiX&QnRu4y6(^WZcR?8vnqKLmXv)l zL2{Ke06QksAe!*!O$;zcjZYTGNjo2bK+!1|DpH4n0B#PF<#gKA33GO_gy68kuS&gE zwm}@hIg0b~#m;0e*tL=-b^PxQL(C1zYa&WuR3i7cAkQ2^NF6%YHpJJHyI! zcx!!UjSfiDe^!Ev9ipaA7yZuOd7x*Cmgd?1#wyzYva~w7B&=HSJIV|w-(tGfg>Wq} z99B_T7mF8DIo!!Hz7{3-qwetoskmvuQ7`3FlYbSqc`|aa7+VcO*fHD0gUU8&0I2|g zU{Jj^y7}Cn70m1_2mB3eWEGj>kMy8~;W4ulgi(tnO3S!MZ`?WSjR}g`vZ+2vKVKQ* zby2&NEUZ?g5Sc?U!Nm-JEFZ{j+#^_N8jdQ?3zuc)SHVZZs85^&#TeU{%5s@qZuQjp zX7PemApzNKGwBSaS%KM05{l(HL{tD<&>V!di+X73JF@_8;R7k$$_|o6DjMsnq!DXc zC@gp^QW_Wb+Q>XIjm*k93R;EVo=9o3E_xss#ft2sf&U}*Y-JqADnGPDCTP=2=~Obx zYPF*RiN0fD{!uP(esB(dsgcs5i@hfWTLT>bZub;bW`7xMFFV)&)~&XFum?<2mqd(? zDj=qYM=>i9X>R`_+m%vU+PW=b63GS^M4nC9bk^KX%kTypTRNr&)I1aM<(&mu{v^0* z7kprs>tRWU4zQg){zUAOrZSml3uBT~<`Qgwj zX0s%jOtxwXqK8&x$3GCR8+JWweyxj!BcWiuwV2{+CXKBoCA98O!>lYq;VRjq# z-6v%pivudq@tPT-G&j~`a?Z6hTDJ$er>EmFY8umc@1>agjX}rr4&tvg;OYyXvmSiD zLaa}L%<--%6xn<3c|_Q>1WNiU1HMp@P9yowTkkw;*r4CDeRH)G;DB$&fufwz_dLf< z0PS34OD23$O;z`qC&0pvtVQ8owyhI7<_gi-ncP<{!>n!UyQ<0_5BG1uSvOEj=n@tK zY=R7Ox`M;b1Li@Sxzw6vKfacA*V5E4ZE`aByeU5; zwy1|ICKw&=4-I%zT#NqnWr_|{%Zqt}I{)_jRGyF!4FfK`B>ZsFRKY}#zamDb>HWl+ z*3z6EySit-K>kHsAy^N!pxY10tjQC|O5#2yplWi@slfXTNRqn_NQOOQ4kZ|7DV`M# zI19P;V-JoSa#G{n!;`zGeIv(AvBeRlt(GkN+zYZ0Jw=k9xsmCT=?m`7rg%xdZQ=Oi z!|k&3U2?M^H`H)4FkR+Kzt1~(A_{pNhg38qcAyWGlg@p z0aak4%~#!PsSm59`N89&F)u{$y-I})zUm zfHLs`P@xt@-VT&@Vm`}!P!LYazmWVGl6@(9MV3zq$Ntwbcqa}yF;CKI-}QwOq9Jyz zJX~%iEa^)UDWL6h23<3{y4%?~L`IPUP>Fwk*Ov;KCi?SM<$K~AUd$>4Vy9w->r=my zK+o{mj(L#&ct24}PGEK<3E`7|%3rsJiX~Q{dTop*giPJhBBSP*Y={IUlU3Q9@~yJT zktfIiKh6xTCQ;`HnJ|Fhd9x$+Q*5n>HCJ&{hHlsQ&LCqI_IfRDS#`iT?Nx55oJ_F7 zmvZNWxhRjK5#{EUyLQO0zZ<==Zx|!D&CQjq4taz9_74dVB#RZn@_${=>G81n#e@K$ z4?)Rq*0^cXSJIr^KL(*49nx}+CIWW&24>S?5<4NOQp@6FYn;OtrtZycB}u$o)w;Qd zri$p1T1o2!$s*@w3k2kX8lSF(&EJ~`(?1u983b!-J)=umyudOSJ@02%=4LrSQk5CI zJqSt$kjqI`6CnhE_F-MHU(t2CUjVol0xilL`D3edTB$_3)GT7c+7Pk@$Q;GAWS4e6 zsZMBBPOv3Z>!-Ei6*gh*Nih@?PG&zEVKUb9A`=7p!^9BA0~b#aA(^)42Gd^rAVj0e z6x6=khq&u{8%o?MuTsak3bg(x(`P4@?&E-)OElCJVW!38y8+BB>59nS0R?_Hxya{< z>XqCb0W=|f3?v)2qV=)1E!^)0OH&Hk=Rw2pvTnlXjLcd~~PdN~oLF*?mY);8?&aD?6a2p4cEWbEx~|^EfEIVTQ=X5Z8Hx5Kz;2B!|EI{^ zG}OI)?b~7hhrJdV)u1?I$5AZ;eoZ{NI^#Pd#H!L8Wrm$on4MZ2?CWQ-|d&pdmGpS2gk994U-$PCHz5B z*znK>SX{jt=d&o#RDX(1`z?B*bBj)EL+W*DJaOO(;&9>mX>0e}-z%91t0iXjZBqBQ zBGF!dvyXx-&vraT0b?jnx-|M;!GllrpCH*wUSVl&#RHLZD9Dh2v}(i6pS`%~jwJ_% z-~>5KuzA~Zm)?0-*#`cfknx1%?EDz zt`n=;+LR;JA@w@0H>8oAeQH`q1vQf@M*R1iQgbHZfe^BQ%5Y_7*V2j79YS;^u~Kpb zfolZ3tLC}62u<+febyWyUd(NR9iRMH8@#lyEhV*zRgX1H{C}GDJn8P?rr)whXCkqD zH$o~$F_!fHxD~`@t$7fOk{5w>uR_9&&)Fd9sMmHPGiO4UDwU#D&YWF_DwcBXQ8-00 zilDXC1WV!p=^MvWi7$7Qr5@v+hECJQ49`w)kSw$5S_|yZ#8FAKV!So)!o_1U*4`P# zcLiyz>a6|HRQmZ>`;F^6v^*Q-CYo!5oD2t3&JwM3av^RE+07euqb6=?vGlVLAgTgk zSn~)3)&96c&1g|IV-9w^P$_|>7gvij2+GoM2zxOg3?emI<(p)UwM^0I2yUFw$6OQo z-Q*@atk_w=4^u4l%h(l^zeaDrkYJp5j8IWe0dS$ybJjGto+W*I?}51R!~0pJ63 zn>L;xA*ml#t9Q8QKR(`qvT_*Oq$P~&+0DMr`-)nnStpX$%N+lRKzMmABKmn9Lz zEExfre{cNlZrbRdh2x%A^0mZ@jw4{F&}x|@dtFRjl7y)UMk(-04_nV{9OW&+?iosy z*(n%eWV6e#4S_SkEt=I*6I25G$vrtQ-CK-^LeK}*2pKmtjiFClX%^jR!NDkjgc2)a zad{f|8D_^QE`^f|9=QNf9um(2k%btYkKO4vkzjprK(;l5de()-zD!O5JOHUvtP7E^ zd$n+xfwUN7KEh4DEKC&<5ZAs_C$>>k;VS4yfGCR?bVOi|IMi6KTuT>}OGOpB>O64z z-PGa<^0!vd#|cWC53zHjgLI_{c?(t+)+4tPoe!igCJ}OeC!`Xnbm@0!lZ>cj9(k5P z=2AF>3cc&@;Y>m2G~Nh?5>R&?ol$3P3U{X?Z;adbx#<)A`erD!iPVodlf` z1S)-NW(BMme(-MQ*I?+cHiP4sxt>EMF^(fzlX=Fs#2rTR6`T<;zG#^M7h-3H?q2R7)m3!5S;!RDJ2{LaA8vBW~QRVyFf zjQSxe?-SfEZo71)Ys5?<_JNp_bUiWA9W;wXb>Lu_{A{fGki6Hb;USHQh~a{cPOU># zbgn4Fm7$=Jd538sfWq&}GVduA^#AFqzYw7z!p!eeen|G4WPEoZ2H!xht?9k|UAVU? zg@^QUCH)2i-*Xcxa&Y}+(hNcv=0g~idOmx>3vV{B#8PaPMlI&~7Q(rk5Huo7a^lv@&=h0iaeMr|%k8)%;0>y_dSGt9+8zRhfm%6DVV2Zmnkd?|s z!gor(T9w*)C0eW0xCqFlG#hB+WKxhFJYlGZ$@-T9@Nzo#8j4+Ibd4e7^0Cx$0*7(? zG~~s=n!IoW_?RzLVFvJK-t(_N(;8K0F_-$SU zt1?Xl;P7D%7VWy8+~iy5&ftA$K*rm+=z<@e&)3Fm8DSxFvycj|YOm^3ndf}nf!#Ss z#aCOx?;M&^9nhK0roGdVzh$W##hqGhLd`5abk4y)B%6#grs;?iI3HA%ngY3h?Rz;S zH}cA5*{$&7j1Zr>4EpjaVhEaWyoN)Tx#iXYO&027r7y{aX60kyFwY1|s&GkUA#KTMtL%`+ zZ#vEBnX;0UGL{gS_%l2?=rGdJ-ecZ^&9km2p|DzipXE+fqB<)=Q1+wJk7Qsa9}9c| z45}?&-f=swHr^MTN-~ly)MYv9DDAk9bY2|_emTa!GZB>;bg*i2!=fNVtBr#WtL*X{ z9_a1(p=K*;W-)_|+r{fH4tEbHx7|}ZAjG1-nilktYIoNF*0U0Wm-Dv#F&j?2H#vR8e=m2MZ3W}D=~#v( zo_50BaFSyQhzBax)=iZquYY7rzYxuSicTF(&U|CIZw(DVM_*aj%@htGIL_(0yfG$T z*|oy+R@df8{sgNn-WXn*(b4Ip!a+7)Lx7H}@J9Vly6jFieiQQjqp$w_y7( z_W%9N@D5SuB`}W&FV~89K8gearNnE=umfxLj~q2kUOp;h+-f3`G-8yOK2MND6iS<$~#bW>_e_4x?_T^%!ki{DaLFS&)i z;mNyQ_4IPWtm}QvVx^T7N4qKOm-;vxz{h0~nW(jY>Q<=4c0(JbyN~=<&p>JO15nj# z{8q54mGyEsQ$(mR@1aUah-s?KlX71q007?gC1vl{v!fiZ7c;*G%!+JWT#v?0x$RbF zFx*@{1CTl|&aa~Ozp{NdxI%Cl(M57wTelWax}0!1&%j$nl({)wgQ7(%QjFVW0k$f%VaYxOMI z7OzM;D@=MgE>&~#h{ofpfJrU4bk?hm3Y=Rjck0ZU^o?yg8XzoovyJ??rk{>m;9ic< zRD-_2VDRjnCD7Z^{Q>)4q>*ZdPZ<4ZTsl7uGX)!+h~wqKA@lr0syn2ybbwAJYDjOK>$nu%L!cG>@|ibDI0f-{2e zD}hXVvbMbXZ1uYJO~-TTf=I83*xXx!zf@bhEv%UR3XHF6USv?~xfgi) zCKviyST(ijK$92nwEa6FN;7Ty>S8m-eW*iIG;b|(SZs*8sgjBZFIo%aca%;Nql}~B z&6HnOCdo;P(0cx2zoy9IidPCWhsUQ*vkeJc8Ktc=G0{#Tb*Y#pYdhxbwHaKeGbj2s zXl7!v7)|SAF(7NN3QVL+^VolZ4RwigIfJnyykbJ4`sVf5N<>YrtI#(8*OY-5Gxgqu z@Lk=|y`U(VcRiw#7u}NDbHyCz)KVb6B+$=Zz%;7FT>}kigYG0|_{W-mYd1ij7`z>C zp}gZxIkIepsJh?COlNEV39Up+z{<5psuur{yU%B>(3XXm9{?wyoneGU{}?%47|yT% ziY2$||8tmNO^4vsQ0~&v%h{qAm&%n?FfCG}g!cNNqX&WJKz4k{?z7~Nl$y&_nCwk7x4 zS<6RxVv*E#Ac5oV3K4DQzo&fuVHV< zF(NXlTL0tV>km?g3i$&S_G(PjJ#;?dzUt+UFA@QG3I=K_cNp5jZT*rc+p{ghB>P0H z6{}KHp0EcPGT@B1%r6)bHXxjRWu?Fu&#DR?H{c$Rg_{D>MQiY5mg48-Omlx*2kjxq|xKr(@W4 zVXb!i*Lo4+yi(9&{$DshEFQ8E!=Lmm_`!`r)AMtzq3+o8*g{|EA}SEq22sy1vt&1Y z-fK<#K@e1im0>;wwSg)7iI*{6Qo|=Mi*_6mf)J*y$qGaO@=SS;!||bX>GIQl5S? zS&2|OB8hJQP-9iWcteYwAMtOFCf2v#+-r0IN~ukxKGlA>ZWwnI6XobqjBaK4qVH!^ zKiNM+0#(ujj9Puo1l`L9kD#aR zdedj6kYB(tSdy}&Jt0injG)E%k$i<%xI|DFf*1Ceq4)G}d(KjvRYf__8q*_GA@t_P?EYI(#5d;doO1B$Ml`pd{p@@by4?Pk@5C$i8%c++xI&j=;Ud z;FFYQaKQrhop${OQSxd|IF&xo}Tue2s$A z8FpdxoLI^@bhyE2#!R;R+Dj+3-ovLE!zmRO&Xs#qdXq3?s|~qDJbB5TRH^$%a^Ml! z6Q%0{d9WY54?@fvvYM#$-y%uFblK*Cd09Tq_YF_?`mC>D5=0k8Wx$uf(0hZa(qhrb z8x>cVSjCU34Q$EoCBhAsd*&f50|;?z`g*<6=!wM@iGnAy78?BTb#q*mWsR;ge}6G@ z|160CR#XdOn>wVvd}ZQWKd;aT1Ql5G+Fxo@5TCV4UD%|rjkcZLXfFNe{#OWcD@v~A zfZC+oMExu5t$>zU0Q_iMcX%=a-Qw?psgND7_Sl9?Nx24(r7DCfYi?m8pegmmv+OtP z0`bnOKaS zbJQNS`!k@Uh@zc@Xsu~$o?Vy9hWJe?0TF?LjRqs zgQ#1j@;PcyczI0vf{TW+VR5r453}CN&_M|9mshwZ^GHc89zIEc7#Peo|fMO$@kOEcK1N6Su$UMJN=`}?FH=T1ZBB!IzqWRi|R0D&QI`K zq0T-MiNM7-T^!K__!*{K`lQwEL6ZE}&ua9EBn+6YQnG}-*O7}7oBt}?6V1gDP5!}r zFW>#U4ab**eru0(^hPazE(f8oH){0E@fdrQA#_=q;%a`)O#4Dc^M%a7&cS_}Pk2)O z%p?J`=CXR+%*l}d@2}Wj%=Ewu+4;heXhP-smx?6g8y&vevj^~=3YL-MkTc3;ntfkv#d@(eC68QV&k0C{_2*? z`3afoMZZES9$u_imTz*;&%(*z&ELN=*Tc=9mefuatr3}#FB~uQ-z@rW`Bvlk_dZul zPyLpx5^HDYRxd2{cE*wG#{xP#^vgY$?-!9sS-ifXp(a#-XOVhyx6==!t?TDZe6m2m zC|A#-Y~i&H{4!e{ZwA$#4|#j6+dRxNY{A9}qCL02_w4yw!L)_#hfh>Zvamo;rpd^?^uX>$k%5`7u<2yIw)6fUe*b#8RN7Q0bhkF2hCl1_vj0C>?>yC%6aROH*C2d$ zoCMeYi(Qf1zn#86Md4k4-2O|h!h2>fZg1eIF}iiWFzlWhfB#Xgr=C8~6crPVbSH88 zJ}cSwBV%*So&3q)cq^-Z#3vc$c79ys!7;Z|NmB59gWdP1?@!b-fpO@}%G6?9I$1kYK?dHZ zc4S}>LDs|I;XOItTWoS|rWTW1JDxvTYd?Cx>LKu{ETFj06BQEI@kz delta 17333 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

    P<*2D-2h4#h*+B%-m3d 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 35fa286ca..cb46ec1d9 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -17204,7 +17204,7 @@ 'Word.ComboBoxContentControl:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml // Places a combo box content control at the end of the selection. @@ -17219,7 +17219,7 @@ 'Word.ComboBoxContentControl#addListItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml // Adds the provided list item to the first combo box content control in the @@ -17260,7 +17260,7 @@ 'Word.ComboBoxContentControl#deleteAllListItems:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml // Deletes the list items from first combo box content control found in the @@ -17298,7 +17298,7 @@ 'Word.ComboBoxContentControl#listItems:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml // Deletes the provided list item from the first combo box content control @@ -17962,7 +17962,7 @@ 'Word.ContentControl#comboBoxContentControl:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml // Adds the provided list item to the first combo box content control in the @@ -18003,7 +18003,7 @@ 'Word.ContentControl#dropDownListContentControl:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Adds the provided list item to the first dropdown list content control in @@ -18540,7 +18540,7 @@ 'Word.ContentControlListItem:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Deletes the provided list item from the first dropdown list content @@ -18592,7 +18592,7 @@ 'Word.ContentControlListItem#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml // Deletes the provided list item from the first combo box content control @@ -18644,7 +18644,7 @@ 'Word.ContentControlListItem#displayText:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Deletes the provided list item from the first dropdown list content @@ -18696,7 +18696,7 @@ 'Word.ContentControlListItemCollection:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml // Gets the list items from the first combo box content control found in the @@ -20470,7 +20470,7 @@ 'Word.DropDownListContentControl:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Places a dropdown list content control at the end of the selection. @@ -20485,7 +20485,7 @@ 'Word.DropDownListContentControl#addListItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Adds the provided list item to the first dropdown list content control in @@ -20526,7 +20526,7 @@ 'Word.DropDownListContentControl#deleteAllListItems:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Deletes the list items from first dropdown list content control found in @@ -20566,7 +20566,7 @@ 'Word.DropDownListContentControl#listItems:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Deletes the provided list item from the first dropdown list content @@ -22817,7 +22817,7 @@ 'Word.Range#getRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml // Places a dropdown list content control at the end of the selection. diff --git a/view-prod/word.json b/view-prod/word.json index c3af24568..7fb26adf6 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -10,6 +10,8 @@ "word-content-controls-content-control-onexited-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml", "word-content-controls-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml", "word-content-controls-insert-and-change-checkbox-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml", + "word-content-controls-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml", + "word-content-controls-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml", "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml", @@ -53,8 +55,6 @@ "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", - "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", - "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index fc36e63cc..e31edb7b7 100644 --- a/view/word.json +++ b/view/word.json @@ -10,6 +10,8 @@ "word-content-controls-content-control-onexited-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onexited-event.yaml", "word-content-controls-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-ondeleted-event.yaml", "word-content-controls-insert-and-change-checkbox-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml", + "word-content-controls-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml", + "word-content-controls-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml", "word-content-controls-get-change-tracking-states": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/get-change-tracking-states.yaml", "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/15-images/insert-and-get-pictures.yaml", "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/insert-list.yaml", @@ -53,8 +55,6 @@ "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", - "word-insert-and-change-combo-box-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-combo-box-content-control.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", - "word-insert-and-change-dropdown-list-content-control": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-dropdown-list-content-control.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file From 466a1f98a7c1331168926d7184d33f3fd802c9a5 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 21 Nov 2024 08:57:09 -0800 Subject: [PATCH 098/156] [Outlook] Update minimum supported requirement sets (#952) --- playlists-prod/outlook.yaml | 4 ++-- playlists/outlook.yaml | 4 ++-- samples/outlook/40-attachments/attachments-compose.yaml | 2 +- .../get-shared-properties.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 3831993f0..06645f7c6 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -273,7 +273,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml group: Attachments api_set: - Mailbox: '1.1' + Mailbox: '1.8' - id: outlook-attachments-get-attachment-content name: Get attachment content fileName: get-attachment-content.yaml @@ -425,7 +425,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml group: Delegates And Shared Folders api_set: - Mailbox: '1.8' + Mailbox: '1.13' - id: outlook-mime-headers-get-internet-headers-message-read name: Get internet headers fileName: get-internet-headers-message-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index b40c8f50c..b344b28bb 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -273,7 +273,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/attachments-compose.yaml group: Attachments api_set: - Mailbox: '1.1' + Mailbox: '1.8' - id: outlook-attachments-get-attachment-content name: Get attachment content fileName: get-attachment-content.yaml @@ -425,7 +425,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml group: Delegates And Shared Folders api_set: - Mailbox: '1.8' + Mailbox: '1.13' - id: outlook-mime-headers-get-internet-headers-message-read name: Get internet headers fileName: get-internet-headers-message-read.yaml diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index bd327161d..b09a9bcb3 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -3,7 +3,7 @@ name: Manipulate attachments (Item Compose) description: 'Adds, gets, and removes attachments from a message or an appointment in Compose mode.' host: OUTLOOK api_set: - Mailbox: '1.1' + Mailbox: '1.8' script: content: | $("#add").on("click", add); diff --git a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml index af2859ac3..40b854420 100644 --- a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml +++ b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -3,7 +3,7 @@ name: Identify a shared folder or shared mailbox context description: Identifies whether the current mail item is in a shared folder or shared mailbox by getting its properties. host: OUTLOOK api_set: - Mailbox: '1.8' + Mailbox: '1.13' script: content: | $("#get").on("click", get); From fb7577e22975b5b02a4fd1097b0454ac33f559a8 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 13 Dec 2024 14:54:03 -0800 Subject: [PATCH 099/156] [Admin] Add auto-publish workflow (#954) --- .github/workflows/auto-publish.yml | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/auto-publish.yml diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml new file mode 100644 index 000000000..875e0ad82 --- /dev/null +++ b/.github/workflows/auto-publish.yml @@ -0,0 +1,40 @@ +name: auto-publish +run-name: Automatically publish snippets +on: + schedule: + - cron: '00 23 * * FRI' + - cron: '15 10 * * TUE' + - cron: '15 10 * * THU' +jobs: + auto-publish: + runs-on: ubuntu-latest + permissions: + contents: write + defaults: + run: + shell: bash + working-directory: ./ + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Check out main + run: | + echo "Checking out main branch" + git config user.name github-actions + git config user.email github-actions@github.com + git checkout main + - name: Check out prod + run: | + echo "Checking out prod branch" + git checkout prod + - name: Merge from main into prod + run: | + echo "Merging from main to prod" + git merge main + - name: Push changes + run: | + echo "Pushing changes to prod branch" + git push origin prod + From 98d8213c30107153406d72c5f70cbc19a9e5a881 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 13 Dec 2024 15:08:54 -0800 Subject: [PATCH 100/156] workflow - tweak schedule for test --- .github/workflows/auto-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml index 875e0ad82..e21d50411 100644 --- a/.github/workflows/auto-publish.yml +++ b/.github/workflows/auto-publish.yml @@ -2,7 +2,7 @@ name: auto-publish run-name: Automatically publish snippets on: schedule: - - cron: '00 23 * * FRI' + - cron: '15 23 * * FRI' - cron: '15 10 * * TUE' - cron: '15 10 * * THU' jobs: From 9fb7fb0317e64e78cdedb7e15ec387533f4dc005 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 13 Dec 2024 15:23:07 -0800 Subject: [PATCH 101/156] workflow - tweak schedule for test --- .github/workflows/auto-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml index e21d50411..a3fb3473c 100644 --- a/.github/workflows/auto-publish.yml +++ b/.github/workflows/auto-publish.yml @@ -2,7 +2,7 @@ name: auto-publish run-name: Automatically publish snippets on: schedule: - - cron: '15 23 * * FRI' + - cron: '25 23 * * FRI' - cron: '15 10 * * TUE' - cron: '15 10 * * THU' jobs: From 9d8af38f806a2820b3a48d253c9ad61c20c67619 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 13 Dec 2024 15:25:59 -0800 Subject: [PATCH 102/156] workflow - tweak schedule for test --- .github/workflows/auto-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml index a3fb3473c..ad55f913b 100644 --- a/.github/workflows/auto-publish.yml +++ b/.github/workflows/auto-publish.yml @@ -2,7 +2,7 @@ name: auto-publish run-name: Automatically publish snippets on: schedule: - - cron: '25 23 * * FRI' + - cron: '30 23 * * FRI' - cron: '15 10 * * TUE' - cron: '15 10 * * THU' jobs: From 06b9191a82dbd59c06ce3820f1f04906738eb75d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 13 Dec 2024 15:37:05 -0800 Subject: [PATCH 103/156] workflow - tweak schedule for test --- .github/workflows/auto-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml index ad55f913b..596cfe3aa 100644 --- a/.github/workflows/auto-publish.yml +++ b/.github/workflows/auto-publish.yml @@ -2,7 +2,7 @@ name: auto-publish run-name: Automatically publish snippets on: schedule: - - cron: '30 23 * * FRI' + - cron: '40 23 * * FRI' - cron: '15 10 * * TUE' - cron: '15 10 * * THU' jobs: From b685b04f0de5ad13c7c2beff9f0e0715753b37c0 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 13 Dec 2024 15:47:43 -0800 Subject: [PATCH 104/156] workflow - update schedule --- .github/workflows/auto-publish.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml index 596cfe3aa..72a284cc6 100644 --- a/.github/workflows/auto-publish.yml +++ b/.github/workflows/auto-publish.yml @@ -2,7 +2,6 @@ name: auto-publish run-name: Automatically publish snippets on: schedule: - - cron: '40 23 * * FRI' - cron: '15 10 * * TUE' - cron: '15 10 * * THU' jobs: From 49f4ca02656467ebc02de969dc3a00af86ba243f Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 16 Dec 2024 14:09:52 -0800 Subject: [PATCH 105/156] [Word] (insert external doc) Check for platform-specific reqt. set (#955) --- .../50-document/insert-external-document.yaml | 5 +++++ snippet-extractor-output/snippets.yaml | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index e3dda0385..b90258712 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -20,6 +20,11 @@ script: const externalDoc: Word.DocumentCreated = context.application.createDocument(externalDocument); await context.sync(); + if (!Office.context.requirements.isSetSupported("WordApiHiddenDocument", "1.3")) { + console.warn("The WordApiHiddenDocument 1.3 requirement set isn't supported on this client so can't proceed. Try this action on a platform that supports this requirement set."); + return; + } + const externalDocBody: Word.Body = externalDoc.body; externalDocBody.load("text"); await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index cb46ec1d9..7a0f38531 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15926,6 +15926,11 @@ const externalDoc: Word.DocumentCreated = context.application.createDocument(externalDocument); await context.sync(); + if (!Office.context.requirements.isSetSupported("WordApiHiddenDocument", "1.3")) { + console.warn("The WordApiHiddenDocument 1.3 requirement set isn't supported on this client so can't proceed. Try this action on a platform that supports this requirement set."); + return; + } + const externalDocBody: Word.Body = externalDoc.body; externalDocBody.load("text"); await context.sync(); @@ -15950,6 +15955,11 @@ const externalDoc: Word.DocumentCreated = context.application.createDocument(externalDocument); await context.sync(); + if (!Office.context.requirements.isSetSupported("WordApiHiddenDocument", "1.3")) { + console.warn("The WordApiHiddenDocument 1.3 requirement set isn't supported on this client so can't proceed. Try this action on a platform that supports this requirement set."); + return; + } + const externalDocBody: Word.Body = externalDoc.body; externalDocBody.load("text"); await context.sync(); @@ -20430,6 +20440,11 @@ const externalDoc: Word.DocumentCreated = context.application.createDocument(externalDocument); await context.sync(); + if (!Office.context.requirements.isSetSupported("WordApiHiddenDocument", "1.3")) { + console.warn("The WordApiHiddenDocument 1.3 requirement set isn't supported on this client so can't proceed. Try this action on a platform that supports this requirement set."); + return; + } + const externalDocBody: Word.Body = externalDoc.body; externalDocBody.load("text"); await context.sync(); From 0dcc3d3d96ae1a3b335d5f1891fbfc9283550475 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 27 Dec 2024 08:50:41 -0800 Subject: [PATCH 106/156] Revert change to Office JS URL (#956) --- config/build.ts | 2 +- private-samples/excel/20-chart/chart-title-ts.yaml | 2 +- samples/excel/01-basics/basic-api-call-es5.yaml | 2 +- samples/excel/01-basics/basic-api-call.yaml | 2 +- samples/excel/01-basics/basic-common-api-call.yaml | 2 +- samples/excel/10-chart/chart-axis-formatting.yaml | 2 +- samples/excel/10-chart/chart-axis.yaml | 2 +- samples/excel/10-chart/chart-bubble-chart.yaml | 2 +- samples/excel/10-chart/chart-create-several-charts.yaml | 2 +- samples/excel/10-chart/chart-data-source.yaml | 2 +- samples/excel/10-chart/chart-data-table.yaml | 2 +- samples/excel/10-chart/chart-formatting.yaml | 2 +- samples/excel/10-chart/chart-legend.yaml | 2 +- samples/excel/10-chart/chart-point.yaml | 2 +- samples/excel/10-chart/chart-series-markers.yaml | 2 +- samples/excel/10-chart/chart-series-plotorder.yaml | 2 +- samples/excel/10-chart/chart-series.yaml | 2 +- samples/excel/10-chart/chart-title-format.yaml | 2 +- samples/excel/10-chart/chart-trendlines.yaml | 2 +- samples/excel/10-chart/create-doughnut-chart.yaml | 2 +- samples/excel/12-comment/comment-basics.yaml | 2 +- samples/excel/12-comment/comment-mentions.yaml | 2 +- samples/excel/12-comment/comment-replies.yaml | 2 +- samples/excel/12-comment/comment-resolution.yaml | 2 +- .../conditional-formatting-advanced.yaml | 2 +- .../14-conditional-formatting/conditional-formatting-basic.yaml | 2 +- samples/excel/16-custom-functions/basic-function.yaml | 2 +- samples/excel/16-custom-functions/custom-functions-errors.yaml | 2 +- .../excel/16-custom-functions/data-types-custom-functions.yaml | 2 +- samples/excel/16-custom-functions/streaming-function.yaml | 2 +- samples/excel/16-custom-functions/volatile-function.yaml | 2 +- samples/excel/16-custom-functions/web-call-function.yaml | 2 +- .../create-set-get-and-delete-custom-xml-parts.yaml | 2 +- .../18-custom-xml-parts/test-xml-for-unique-namespace.yaml | 2 +- samples/excel/20-data-types/data-types-entity-attribution.yaml | 2 +- samples/excel/20-data-types/data-types-entity-icons.yaml | 2 +- samples/excel/20-data-types/data-types-entity-values.yaml | 2 +- samples/excel/20-data-types/data-types-error-values.yaml | 2 +- samples/excel/20-data-types/data-types-formatted-number.yaml | 2 +- samples/excel/20-data-types/data-types-references.yaml | 2 +- samples/excel/20-data-types/data-types-web-image.yaml | 2 +- samples/excel/22-data-validation/data-validation.yaml | 2 +- samples/excel/26-document/custom-properties.yaml | 2 +- samples/excel/26-document/get-file-in-slices-async.yaml | 2 +- samples/excel/26-document/properties.yaml | 2 +- samples/excel/30-events/data-change-event-details.yaml | 2 +- samples/excel/30-events/data-changed.yaml | 2 +- samples/excel/30-events/event-column-and-row-sort.yaml | 2 +- samples/excel/30-events/event-worksheet-single-click.yaml | 2 +- samples/excel/30-events/events-chart-activated.yaml | 2 +- .../excel/30-events/events-chartcollection-added-activated.yaml | 2 +- samples/excel/30-events/events-comment-event-handler.yaml | 2 +- samples/excel/30-events/events-disable-events.yaml | 2 +- samples/excel/30-events/events-formula-changed.yaml | 2 +- samples/excel/30-events/events-table-changed.yaml | 2 +- samples/excel/30-events/events-tablecollection-changed.yaml | 2 +- samples/excel/30-events/events-workbook-activated.yaml | 2 +- .../30-events/events-workbook-and-worksheet-collection.yaml | 2 +- samples/excel/30-events/events-worksheet-protection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- samples/excel/30-events/selection-changed-events.yaml | 2 +- samples/excel/34-named-item/create-and-remove-named-item.yaml | 2 +- samples/excel/34-named-item/update-named-item.yaml | 2 +- samples/excel/38-pivottable/pivottable-calculations.yaml | 2 +- samples/excel/38-pivottable/pivottable-create-and-modify.yaml | 2 +- .../excel/38-pivottable/pivottable-filters-and-summaries.yaml | 2 +- samples/excel/38-pivottable/pivottable-get-pivottables.yaml | 2 +- samples/excel/38-pivottable/pivottable-pivotfilters.yaml | 2 +- samples/excel/38-pivottable/pivottable-pivotlayout.yaml | 2 +- samples/excel/38-pivottable/pivottable-refresh.yaml | 2 +- samples/excel/38-pivottable/pivottable-slicer.yaml | 2 +- samples/excel/38-pivottable/pivottable-source-data.yaml | 2 +- samples/excel/42-range/cell-properties.yaml | 2 +- samples/excel/42-range/dynamic-arrays.yaml | 2 +- samples/excel/42-range/formatting.yaml | 2 +- samples/excel/42-range/insert-delete-clear-range.yaml | 2 +- samples/excel/42-range/outline.yaml | 2 +- samples/excel/42-range/precedents.yaml | 2 +- samples/excel/42-range/range-areas.yaml | 2 +- samples/excel/42-range/range-auto-fill.yaml | 2 +- samples/excel/42-range/range-copyfrom.yaml | 2 +- samples/excel/42-range/range-dependents.yaml | 2 +- samples/excel/42-range/range-direct-dependents.yaml | 2 +- samples/excel/42-range/range-find.yaml | 2 +- samples/excel/42-range/range-get-range-edge.yaml | 2 +- samples/excel/42-range/range-hyperlink.yaml | 2 +- samples/excel/42-range/range-merged-ranges.yaml | 2 +- samples/excel/42-range/range-relationships.yaml | 2 +- samples/excel/42-range/range-remove-duplicates.yaml | 2 +- samples/excel/42-range/range-text-orientation.yaml | 2 +- samples/excel/42-range/selected-range.yaml | 2 +- samples/excel/42-range/set-get-values.yaml | 2 +- samples/excel/42-range/style.yaml | 2 +- samples/excel/42-range/used-range.yaml | 2 +- samples/excel/44-shape/shape-create-and-delete.yaml | 2 +- samples/excel/44-shape/shape-groups.yaml | 2 +- samples/excel/44-shape/shape-images.yaml | 2 +- samples/excel/44-shape/shape-lines.yaml | 2 +- samples/excel/44-shape/shape-move-and-order.yaml | 2 +- samples/excel/44-shape/shape-textboxes.yaml | 2 +- samples/excel/46-table/add-rows-and-columns-to-a-table.yaml | 2 +- samples/excel/46-table/convert-range-to-table.yaml | 2 +- samples/excel/46-table/create-table.yaml | 2 +- samples/excel/46-table/filter-data.yaml | 2 +- samples/excel/46-table/formatting.yaml | 2 +- samples/excel/46-table/get-data-from-table.yaml | 2 +- .../excel/46-table/get-visible-range-of-a-filtered-table.yaml | 2 +- samples/excel/46-table/import-json-data.yaml | 2 +- samples/excel/46-table/resize-table.yaml | 2 +- samples/excel/46-table/sort-data.yaml | 2 +- .../excel/50-workbook/create-get-change-delete-settings.yaml | 2 +- samples/excel/50-workbook/create-workbook.yaml | 2 +- samples/excel/50-workbook/culture-info-date-time.yaml | 2 +- samples/excel/50-workbook/culture-info.yaml | 2 +- samples/excel/50-workbook/data-protection.yaml | 2 +- samples/excel/50-workbook/workbook-built-in-functions.yaml | 2 +- samples/excel/50-workbook/workbook-calculation.yaml | 2 +- samples/excel/50-workbook/workbook-get-active-cell.yaml | 2 +- .../excel/50-workbook/workbook-insert-external-worksheets.yaml | 2 +- samples/excel/50-workbook/workbook-save-and-close.yaml | 2 +- samples/excel/54-worksheet/active-worksheet.yaml | 2 +- .../excel/54-worksheet/add-delete-rename-move-worksheet.yaml | 2 +- samples/excel/54-worksheet/gridlines.yaml | 2 +- samples/excel/54-worksheet/list-worksheets.yaml | 2 +- .../54-worksheet/reference-worksheets-by-relative-position.yaml | 2 +- samples/excel/54-worksheet/tab-color.yaml | 2 +- samples/excel/54-worksheet/worksheet-auto-filter.yaml | 2 +- samples/excel/54-worksheet/worksheet-copy.yaml | 2 +- samples/excel/54-worksheet/worksheet-find-all.yaml | 2 +- samples/excel/54-worksheet/worksheet-freeze-panes.yaml | 2 +- samples/excel/54-worksheet/worksheet-page-layout.yaml | 2 +- samples/excel/54-worksheet/worksheet-range-cell.yaml | 2 +- samples/excel/54-worksheet/worksheet-visibility.yaml | 2 +- samples/excel/90-scenarios/currency-converter.yaml | 2 +- samples/excel/90-scenarios/multiple-property-set.yaml | 2 +- samples/excel/90-scenarios/performance-optimization.yaml | 2 +- samples/excel/90-scenarios/report-generation.yaml | 2 +- samples/excel/90-scenarios/working-with-dates.yaml | 2 +- samples/excel/99-just-for-fun/color-wheel.yaml | 2 +- samples/excel/99-just-for-fun/gradient.yaml | 2 +- samples/excel/99-just-for-fun/path-finder-game.yaml | 2 +- samples/excel/99-just-for-fun/patterns.yaml | 2 +- samples/excel/99-just-for-fun/tetrominos.yaml | 2 +- samples/excel/default.yaml | 2 +- samples/onenote/default.yaml | 2 +- samples/outlook/10-roaming-settings/roaming-settings.yaml | 2 +- .../outlook/15-item-custom-properties/load-set-get-save.yaml | 2 +- samples/outlook/20-item-body/add-inline-base64-image.yaml | 2 +- samples/outlook/20-item-body/append-text-on-send.yaml | 2 +- samples/outlook/20-item-body/get-body-format.yaml | 2 +- samples/outlook/20-item-body/get-selected-data.yaml | 2 +- samples/outlook/20-item-body/prepend-text-on-send.yaml | 2 +- samples/outlook/20-item-body/prepend-text-to-item-body.yaml | 2 +- samples/outlook/20-item-body/replace-selected-text.yaml | 2 +- samples/outlook/25-item-save-and-close/close-async.yaml | 2 +- samples/outlook/25-item-save-and-close/close.yaml | 2 +- samples/outlook/25-item-save-and-close/save.yaml | 2 +- .../outlook/30-recipients-and-attendees/get-all-attendees.yaml | 2 +- .../30-recipients-and-attendees/get-cc-message-read.yaml | 2 +- .../30-recipients-and-attendees/get-from-message-compose.yaml | 2 +- .../30-recipients-and-attendees/get-from-message-read.yaml | 2 +- .../get-optional-attendees-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-organizer.yaml | 2 +- .../get-required-attendees-appointment-attendee.yaml | 2 +- .../30-recipients-and-attendees/get-sender-message-read.yaml | 2 +- .../get-set-bcc-message-compose.yaml | 2 +- .../30-recipients-and-attendees/get-set-cc-message-compose.yaml | 2 +- .../get-set-optional-attendees-appointment-organizer.yaml | 2 +- .../get-set-required-attendees-appointment-organizer.yaml | 2 +- .../30-recipients-and-attendees/get-set-to-message-compose.yaml | 2 +- .../30-recipients-and-attendees/get-to-message-read.yaml | 2 +- samples/outlook/35-notifications/add-getall-remove.yaml | 2 +- samples/outlook/40-attachments/attachments-compose.yaml | 2 +- samples/outlook/40-attachments/get-attachment-content.yaml | 2 +- samples/outlook/40-attachments/get-attachments-read.yaml | 2 +- samples/outlook/45-categories/work-with-categories.yaml | 2 +- samples/outlook/45-categories/work-with-master-categories.yaml | 2 +- samples/outlook/50-recurrence/get-recurrence-read.yaml | 2 +- samples/outlook/50-recurrence/get-series-id.yaml | 2 +- .../50-recurrence/get-set-recurrence-appointment-organizer.yaml | 2 +- .../outlook/55-display-items/display-existing-appointment.yaml | 2 +- samples/outlook/55-display-items/display-existing-message.yaml | 2 +- samples/outlook/55-display-items/display-new-appointment.yaml | 2 +- samples/outlook/55-display-items/display-new-message.yaml | 2 +- samples/outlook/55-display-items/display-reply-forms.yaml | 2 +- .../55-display-items/display-reply-with-attachments.yaml | 2 +- samples/outlook/60-sensitivity-label/sensitivity-label.yaml | 2 +- .../60-sensitivity-label/sensitivity-labels-catalog.yaml | 2 +- .../65-delegates-and-shared-folders/get-shared-properties.yaml | 2 +- .../70-mime-headers/get-internet-headers-message-read.yaml | 2 +- .../manage-custom-internet-headers-message-compose.yaml | 2 +- samples/outlook/75-regex-matches/contextual.yaml | 2 +- .../85-tokens-and-service-calls/get-icaluid-as-attendee.yaml | 2 +- .../85-tokens-and-service-calls/get-icaluid-as-organizer.yaml | 2 +- samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml | 2 +- .../85-tokens-and-service-calls/make-ews-request-async.yaml | 2 +- .../send-message-using-make-ews-request-async.yaml | 2 +- .../85-tokens-and-service-calls/user-callback-token.yaml | 2 +- .../85-tokens-and-service-calls/user-identity-token.yaml | 2 +- samples/outlook/90-other-item-apis/delay-message-delivery.yaml | 2 +- .../get-add-remove-enhancedlocation-appointment.yaml | 2 +- .../outlook/90-other-item-apis/get-conversation-id-message.yaml | 2 +- samples/outlook/90-other-item-apis/get-conversation-index.yaml | 2 +- .../outlook/90-other-item-apis/get-date-time-created-read.yaml | 2 +- .../outlook/90-other-item-apis/get-date-time-modified-read.yaml | 2 +- .../outlook/90-other-item-apis/get-diagnostic-information.yaml | 2 +- samples/outlook/90-other-item-apis/get-eml-format.yaml | 2 +- samples/outlook/90-other-item-apis/get-end-read.yaml | 2 +- samples/outlook/90-other-item-apis/get-in-reply-to.yaml | 2 +- .../90-other-item-apis/get-internet-message-id-read.yaml | 2 +- samples/outlook/90-other-item-apis/get-item-class-async.yaml | 2 +- samples/outlook/90-other-item-apis/get-item-class-read.yaml | 2 +- samples/outlook/90-other-item-apis/get-item-type.yaml | 2 +- samples/outlook/90-other-item-apis/get-location-read.yaml | 2 +- samples/outlook/90-other-item-apis/get-message-properties.yaml | 2 +- .../outlook/90-other-item-apis/get-normalized-subject-read.yaml | 2 +- .../90-other-item-apis/get-set-end-appointment-organizer.yaml | 2 +- .../get-set-location-appointment-organizer.yaml | 2 +- .../outlook/90-other-item-apis/get-set-sensitivity-level.yaml | 2 +- .../90-other-item-apis/get-set-start-appointment-organizer.yaml | 2 +- samples/outlook/90-other-item-apis/get-set-subject-compose.yaml | 2 +- samples/outlook/90-other-item-apis/get-start-read.yaml | 2 +- samples/outlook/90-other-item-apis/get-subject-read.yaml | 2 +- samples/outlook/90-other-item-apis/item-id-compose.yaml | 2 +- samples/outlook/90-other-item-apis/session-data-apis.yaml | 2 +- samples/outlook/90-other-item-apis/set-selected-data.yaml | 2 +- .../outlook/90-other-item-apis/work-with-client-signatures.yaml | 2 +- samples/outlook/default.yaml | 2 +- samples/powerpoint/basics/basic-api-call-js.yaml | 2 +- samples/powerpoint/basics/basic-api-call-ts.yaml | 2 +- samples/powerpoint/basics/basic-common-api-call.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- samples/powerpoint/document/create-presentation.yaml | 2 +- samples/powerpoint/hyperlinks/manage-hyperlinks.yaml | 2 +- samples/powerpoint/images/insert-image.yaml | 2 +- samples/powerpoint/images/insert-svg.yaml | 2 +- samples/powerpoint/scenarios/searches-wikipedia-api.yaml | 2 +- samples/powerpoint/shapes/get-set-shapes.yaml | 2 +- samples/powerpoint/shapes/get-shapes-by-type.yaml | 2 +- samples/powerpoint/shapes/shapes.yaml | 2 +- samples/powerpoint/slide-management/add-slides.yaml | 2 +- samples/powerpoint/slide-management/get-set-slides.yaml | 2 +- samples/powerpoint/slide-management/get-slide-metadata.yaml | 2 +- samples/powerpoint/slide-management/insert-slides.yaml | 2 +- samples/powerpoint/tags/tags.yaml | 2 +- samples/powerpoint/text/get-set-textrange.yaml | 2 +- samples/project/basics/basic-common-api-call.yaml | 2 +- samples/project/default.yaml | 2 +- samples/word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- samples/word/01-basics/basic-common-api-call.yaml | 2 +- .../word/10-content-controls/content-control-onadded-event.yaml | 2 +- .../content-control-ondatachanged-event.yaml | 2 +- .../10-content-controls/content-control-ondeleted-event.yaml | 2 +- .../10-content-controls/content-control-onentered-event.yaml | 2 +- .../10-content-controls/content-control-onexited-event.yaml | 2 +- .../content-control-onselectionchanged-event.yaml | 2 +- .../word/10-content-controls/get-change-tracking-states.yaml | 2 +- .../insert-and-change-checkbox-content-control.yaml | 2 +- .../insert-and-change-combo-box-content-control.yaml | 2 +- .../10-content-controls/insert-and-change-content-controls.yaml | 2 +- .../insert-and-change-dropdown-list-content-control.yaml | 2 +- samples/word/15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 2 +- samples/word/20-lists/manage-list-styles.yaml | 2 +- samples/word/20-lists/organize-list.yaml | 2 +- samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml | 2 +- samples/word/25-paragraph/get-text.yaml | 2 +- samples/word/25-paragraph/get-word-count.yaml | 2 +- samples/word/25-paragraph/insert-formatted-text.yaml | 2 +- samples/word/25-paragraph/insert-header-and-footer.yaml | 2 +- samples/word/25-paragraph/insert-in-different-locations.yaml | 2 +- samples/word/25-paragraph/insert-line-and-page-breaks.yaml | 2 +- samples/word/25-paragraph/onadded-event.yaml | 2 +- samples/word/25-paragraph/onchanged-event.yaml | 2 +- samples/word/25-paragraph/ondeleted-event.yaml | 2 +- samples/word/25-paragraph/paragraph-properties.yaml | 2 +- samples/word/25-paragraph/search.yaml | 2 +- samples/word/30-properties/get-built-in-properties.yaml | 2 +- .../30-properties/read-write-custom-document-properties.yaml | 2 +- samples/word/35-ranges/compare-location.yaml | 2 +- samples/word/35-ranges/scroll-to-range.yaml | 2 +- samples/word/35-ranges/split-words-of-first-paragraph.yaml | 2 +- samples/word/40-tables/manage-custom-style.yaml | 2 +- samples/word/40-tables/manage-formatting.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- samples/word/50-document/compare-documents.yaml | 2 +- samples/word/50-document/get-external-styles.yaml | 2 +- samples/word/50-document/insert-external-document.yaml | 2 +- samples/word/50-document/insert-section-breaks.yaml | 2 +- samples/word/50-document/manage-annotations.yaml | 2 +- samples/word/50-document/manage-body.yaml | 2 +- samples/word/50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- samples/word/50-document/manage-custom-xml-part-ns.yaml | 2 +- samples/word/50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- samples/word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- samples/word/50-document/manage-tracked-changes.yaml | 2 +- samples/word/50-document/save-close.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- samples/word/90-scenarios/multiple-property-set.yaml | 2 +- samples/word/default.yaml | 2 +- 306 files changed, 306 insertions(+), 306 deletions(-) diff --git a/config/build.ts b/config/build.ts index 059400106..678cbe254 100644 --- a/config/build.ts +++ b/config/build.ts @@ -220,7 +220,7 @@ async function processSnippets(processedSnippets: Dictionary= 0; - const canonicalOfficeJsReference = 'https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js'; + const canonicalOfficeJsReference = 'https://appsforoffice.microsoft.com/lib/1/hosted/office.js'; const betaOfficeJsReference = 'https://appsforoffice.microsoft.com/lib/beta/hosted/office.js'; const officeDTS = '@types/office-js'; const betaOfficeDTS = '@types/office-js-preview'; diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 8c1033dae..25e06c787 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -130,7 +130,7 @@ style: language: css libraries: | // Office.js - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js // CSS Libraries office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index c0a56afb4..d5c3fc8e0 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -60,7 +60,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 09fb99340..48c4cd645 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -61,7 +61,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 796f8147c..fee0cc213 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -52,7 +52,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index 5b0abb97c..e2df678f1 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -157,7 +157,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index de744e337..2dbd1eadf 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -226,7 +226,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index 4ac73275c..26267ebf9 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -153,7 +153,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index 4640f5dd2..a9c77544c 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -322,7 +322,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index a0718392b..c89e78930 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -114,7 +114,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml index cd4e84386..527ff2b00 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -153,7 +153,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index e4fb2448b..a26e6d685 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -212,7 +212,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index 9673970eb..f96b6ec81 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -132,7 +132,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index ca708f5b8..f79c6ae8c 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -118,7 +118,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 61100ffe7..34e1c652f 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -113,7 +113,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 6e522b338..8340b85e7 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -124,7 +124,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 3b95c2cff..7fc17349f 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -141,7 +141,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 0100df1c0..dce065858 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -149,7 +149,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 02e173627..9fe36a845 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -189,7 +189,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index e1e0ac6eb..1589de91c 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -139,7 +139,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/12-comment/comment-basics.yaml b/samples/excel/12-comment/comment-basics.yaml index 420412bbf..c71d69548 100644 --- a/samples/excel/12-comment/comment-basics.yaml +++ b/samples/excel/12-comment/comment-basics.yaml @@ -130,7 +130,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/12-comment/comment-mentions.yaml b/samples/excel/12-comment/comment-mentions.yaml index fba455834..875d8c4a7 100644 --- a/samples/excel/12-comment/comment-mentions.yaml +++ b/samples/excel/12-comment/comment-mentions.yaml @@ -89,7 +89,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/12-comment/comment-replies.yaml b/samples/excel/12-comment/comment-replies.yaml index 2b6bbe10f..e207fe89d 100644 --- a/samples/excel/12-comment/comment-replies.yaml +++ b/samples/excel/12-comment/comment-replies.yaml @@ -151,7 +151,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/12-comment/comment-resolution.yaml b/samples/excel/12-comment/comment-resolution.yaml index 6b5bcaa14..295b7385a 100644 --- a/samples/excel/12-comment/comment-resolution.yaml +++ b/samples/excel/12-comment/comment-resolution.yaml @@ -100,7 +100,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 750e5cbac..012ef4e80 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -225,7 +225,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index c69152ed1..0fbb291df 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -342,7 +342,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/16-custom-functions/basic-function.yaml b/samples/excel/16-custom-functions/basic-function.yaml index 3194e8ce9..c085f87e1 100644 --- a/samples/excel/16-custom-functions/basic-function.yaml +++ b/samples/excel/16-custom-functions/basic-function.yaml @@ -18,6 +18,6 @@ script: } language: typescript libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js core-js@2.4.1/client/core.min.js \ No newline at end of file diff --git a/samples/excel/16-custom-functions/custom-functions-errors.yaml b/samples/excel/16-custom-functions/custom-functions-errors.yaml index 127176c1a..e1f5582b1 100644 --- a/samples/excel/16-custom-functions/custom-functions-errors.yaml +++ b/samples/excel/16-custom-functions/custom-functions-errors.yaml @@ -33,6 +33,6 @@ script: } language: typescript libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js core-js@2.4.1/client/core.min.js \ No newline at end of file diff --git a/samples/excel/16-custom-functions/data-types-custom-functions.yaml b/samples/excel/16-custom-functions/data-types-custom-functions.yaml index 459a04b0d..a5ebdbab6 100644 --- a/samples/excel/16-custom-functions/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -327,7 +327,7 @@ script: ]; language: typescript libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index 2a0914847..1e9740051 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -28,6 +28,6 @@ script: } language: typescript libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/volatile-function.yaml b/samples/excel/16-custom-functions/volatile-function.yaml index 2858f4ed2..68438aefc 100644 --- a/samples/excel/16-custom-functions/volatile-function.yaml +++ b/samples/excel/16-custom-functions/volatile-function.yaml @@ -17,6 +17,6 @@ script: } language: typescript libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/web-call-function.yaml b/samples/excel/16-custom-functions/web-call-function.yaml index cd2d2da2f..faf57fbdb 100644 --- a/samples/excel/16-custom-functions/web-call-function.yaml +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -28,6 +28,6 @@ script: } language: typescript libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js core-js@2.4.1/client/core.min.js \ No newline at end of file diff --git a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index 1317b247f..dcaf6a955 100644 --- a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -146,7 +146,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index 0279a0ff5..60a15efe9 100644 --- a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -132,7 +132,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index d7a9efe17..ded226769 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -221,7 +221,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/20-data-types/data-types-entity-icons.yaml b/samples/excel/20-data-types/data-types-entity-icons.yaml index 46f6ec979..89a06fafc 100644 --- a/samples/excel/20-data-types/data-types-entity-icons.yaml +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/20-data-types/data-types-entity-values.yaml b/samples/excel/20-data-types/data-types-entity-values.yaml index d4792406c..f41cfe5d3 100644 --- a/samples/excel/20-data-types/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -601,7 +601,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/20-data-types/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index b728fe804..ec1c9eeb6 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -106,7 +106,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/20-data-types/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml index 35bbc5b13..a8ca4bc9c 100644 --- a/samples/excel/20-data-types/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -144,7 +144,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/20-data-types/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml index 12324bab8..37f5673fd 100644 --- a/samples/excel/20-data-types/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -332,7 +332,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 64cf933a0..3a6d8134d 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -187,7 +187,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index d6eeef522..f1b981609 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -179,7 +179,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index 79f40918b..332f28ad1 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -131,7 +131,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/26-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml index 635269759..f5288dfbe 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -203,7 +203,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 33d1c55a0..210f2208f 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -174,7 +174,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 98aada662..3a9724380 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -103,7 +103,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index c06ca44b8..4671c08a4 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/event-column-and-row-sort.yaml b/samples/excel/30-events/event-column-and-row-sort.yaml index cfbe9d923..cf7cbf654 100644 --- a/samples/excel/30-events/event-column-and-row-sort.yaml +++ b/samples/excel/30-events/event-column-and-row-sort.yaml @@ -195,7 +195,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml index 040716c50..dda6ab02e 100644 --- a/samples/excel/30-events/event-worksheet-single-click.yaml +++ b/samples/excel/30-events/event-worksheet-single-click.yaml @@ -64,7 +64,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index e52230fc1..26e0b06c4 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -169,7 +169,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 52f69d3ce..8e62d8909 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -150,7 +150,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 7c93c9d66..19daffab1 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -168,7 +168,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 8f108feb9..9dfb2dfca 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -174,7 +174,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index ab63491cd..6c10c734b 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -118,7 +118,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 5f492e97b..10dbe4a25 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -164,7 +164,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index a89249d7f..eaf9a1362 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -157,7 +157,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml index 0cc221ea1..63fc16bf2 100644 --- a/samples/excel/30-events/events-workbook-activated.yaml +++ b/samples/excel/30-events/events-workbook-activated.yaml @@ -67,7 +67,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml index a16ecb91d..19b0ec0f8 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -225,7 +225,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index 03db0d53a..a05efca9d 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -98,7 +98,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 9ef3fe796..63ab3d364 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -221,7 +221,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index eb8611711..8950cfb0b 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -147,7 +147,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index f7576b8cb..d4c24ffbd 100644 --- a/samples/excel/34-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -225,7 +225,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index ee9c7d502..d70a75135 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -123,7 +123,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 83f508cfe..a105bd44d 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -200,7 +200,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index c74946a22..384a24b55 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -265,7 +265,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 34316aa2a..ff5a613ee 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -222,7 +222,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml index 1c8206321..5b210d91b 100644 --- a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml +++ b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -186,7 +186,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index b4530456f..b11672afe 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -315,7 +315,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml index 67dd27b52..e691f2ccb 100644 --- a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -310,7 +310,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-refresh.yaml b/samples/excel/38-pivottable/pivottable-refresh.yaml index 39326ca78..18990777d 100644 --- a/samples/excel/38-pivottable/pivottable-refresh.yaml +++ b/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -127,7 +127,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 05b64743f..05f37c4b8 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -201,7 +201,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index fdcf8b201..f477ead82 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -122,7 +122,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 9356ff2df..373060786 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -181,7 +181,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/dynamic-arrays.yaml b/samples/excel/42-range/dynamic-arrays.yaml index 467ab9d97..89ecaaa0a 100644 --- a/samples/excel/42-range/dynamic-arrays.yaml +++ b/samples/excel/42-range/dynamic-arrays.yaml @@ -172,7 +172,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 05549e179..859c9621e 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -111,7 +111,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index c1e11736d..4bda94935 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -124,7 +124,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/outline.yaml b/samples/excel/42-range/outline.yaml index 998aeaa1f..25b6bb2af 100644 --- a/samples/excel/42-range/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -227,7 +227,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 3a47fc243..81a41ae32 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -202,7 +202,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index 155ef03f4..91f2cce7f 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -171,7 +171,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-auto-fill.yaml b/samples/excel/42-range/range-auto-fill.yaml index 577adb579..4d9918c69 100644 --- a/samples/excel/42-range/range-auto-fill.yaml +++ b/samples/excel/42-range/range-auto-fill.yaml @@ -143,7 +143,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 45e31c10c..f196ba4ce 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -212,7 +212,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-dependents.yaml b/samples/excel/42-range/range-dependents.yaml index 757014d57..56dad1fd7 100644 --- a/samples/excel/42-range/range-dependents.yaml +++ b/samples/excel/42-range/range-dependents.yaml @@ -161,7 +161,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml index 09c8469e2..b929a80b2 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -156,7 +156,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 09f6fc1a8..e447eceb7 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -158,7 +158,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index f569750e6..89154fa83 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -219,7 +219,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index fec482f26..74d0b975d 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -314,7 +314,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml index a9b0e4cfa..9f38bbbb6 100644 --- a/samples/excel/42-range/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -126,7 +126,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 443b66d5d..3c02d9d80 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -249,7 +249,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index fb5a10d5c..e2a182d4a 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -120,7 +120,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index b11747de3..9c6cc34ae 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -114,7 +114,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 3c1bb8016..de07de00d 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -74,7 +74,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index b4534894e..c6647d0ca 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -231,7 +231,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index 48378cd3d..f322a2d58 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -222,7 +222,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 670065580..542ddab5b 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -136,7 +136,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index f5c3114e9..524efc7d6 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -129,7 +129,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index 6d8c12dac..743bac069 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -144,7 +144,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index 3deaa5f4a..e02210f49 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -128,7 +128,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index f5010b2db..396bdf0b5 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -218,7 +218,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index e904b5b21..a5e6c3d1b 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -159,7 +159,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 81dedd58f..12e7bcdee 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -134,7 +134,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml index 1488d6253..14d38ec3d 100644 --- a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml @@ -166,7 +166,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 73a077454..c0e31603c 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -92,7 +92,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index 72f212113..2b4f00bc9 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -77,7 +77,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index 6cf709b48..e55d41ca1 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -123,7 +123,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 88b9e10d7..87e629d4f 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -99,7 +99,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 40fac42d1..7620680aa 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -114,7 +114,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml index b3458cfe4..33af4d50e 100644 --- a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml @@ -137,7 +137,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 8e2a842f9..35786a451 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -140,7 +140,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/resize-table.yaml b/samples/excel/46-table/resize-table.yaml index 162c4d06f..dd3dbec90 100644 --- a/samples/excel/46-table/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -95,7 +95,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index dc15959d7..59213a2c2 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -106,7 +106,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml index 043315cea..51f102ebf 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -108,7 +108,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index c9d152dbf..e3df092fb 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -79,7 +79,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml index 9ba369860..d460268f5 100644 --- a/samples/excel/50-workbook/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -132,7 +132,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml index f7526946b..92c0950c2 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -146,7 +146,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index 4ddaf5ab5..a1156ca55 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -252,7 +252,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/workbook-built-in-functions.yaml b/samples/excel/50-workbook/workbook-built-in-functions.yaml index 8a33f3e3f..e3a260e1c 100644 --- a/samples/excel/50-workbook/workbook-built-in-functions.yaml +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -114,7 +114,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/workbook-calculation.yaml b/samples/excel/50-workbook/workbook-calculation.yaml index fb4967455..5c19fab32 100644 --- a/samples/excel/50-workbook/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -187,7 +187,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index ab987ccbd..3d452bd3c 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -60,7 +60,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index f6cbe45f0..04b0599b4 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -88,7 +88,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/50-workbook/workbook-save-and-close.yaml b/samples/excel/50-workbook/workbook-save-and-close.yaml index c4ff5885f..c2bf8e546 100644 --- a/samples/excel/50-workbook/workbook-save-and-close.yaml +++ b/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -82,7 +82,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index ca4ddcf49..7cf4c4c3b 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -119,7 +119,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml index 14f48f6f8..2bc16606d 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -138,7 +138,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index 167fca8ec..a33001240 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -73,7 +73,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index 9f41e12f4..82cf87258 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -66,7 +66,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml index 87a38faa2..686ff762f 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -157,7 +157,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index e4ebf005a..8c0b98681 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -102,7 +102,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index bc98cb85e..c3659372e 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -207,7 +207,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 5a699a751..3e69dfe43 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -98,7 +98,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index 053bad9b0..f41caa788 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -140,7 +140,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index 18cfb5237..94395c76e 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -172,7 +172,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index 8f14bcb14..597ad0518 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -203,7 +203,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 96c0319e2..b9a2c8040 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -143,7 +143,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index f1c6845c4..821aa6009 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -118,7 +118,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml index 59daa071b..f5cf82a87 100644 --- a/samples/excel/90-scenarios/currency-converter.yaml +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -182,7 +182,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index 9d005cbe6..7efba6254 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -130,7 +130,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index bfbc05da3..e18915c09 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -185,7 +185,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 20b150b8e..5a5da5e99 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -145,7 +145,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 9878a372d..cf7563e58 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -130,7 +130,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index 4b4f52b0e..6417065de 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -145,7 +145,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index a82bbd62b..11a3b84fa 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -211,7 +211,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/99-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml index d0ed350b2..0602b549d 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -222,7 +222,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 37266ccc2..e29e1f0a0 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -189,7 +189,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index f8c88d412..7f025bfd2 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -785,7 +785,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index e8a58676c..27bfc38f6 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -50,7 +50,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 0382801b7..6c419de50 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -48,7 +48,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 9eb635514..30d3b22fa 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -76,7 +76,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index 1c8c4e79c..c772c4025 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -128,7 +128,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml index b86169eed..11074d407 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -69,7 +69,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/20-item-body/append-text-on-send.yaml b/samples/outlook/20-item-body/append-text-on-send.yaml index 7cdda638f..e768d32a4 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -66,7 +66,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/20-item-body/get-body-format.yaml b/samples/outlook/20-item-body/get-body-format.yaml index ef8e58cd1..af52a05ae 100644 --- a/samples/outlook/20-item-body/get-body-format.yaml +++ b/samples/outlook/20-item-body/get-body-format.yaml @@ -49,7 +49,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml index dc6ea3ce2..0aee0b8f7 100644 --- a/samples/outlook/20-item-body/get-selected-data.yaml +++ b/samples/outlook/20-item-body/get-selected-data.yaml @@ -50,7 +50,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/20-item-body/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml index 9e7fa7f1b..f20f8639d 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -66,7 +66,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index 0875e7129..ab8438edf 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -68,7 +68,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index 568298014..06ea6cb38 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -72,7 +72,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/25-item-save-and-close/close-async.yaml b/samples/outlook/25-item-save-and-close/close-async.yaml index f308763c8..674ab7b12 100644 --- a/samples/outlook/25-item-save-and-close/close-async.yaml +++ b/samples/outlook/25-item-save-and-close/close-async.yaml @@ -51,7 +51,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/25-item-save-and-close/close.yaml b/samples/outlook/25-item-save-and-close/close.yaml index f0b8c091c..daec136ae 100644 --- a/samples/outlook/25-item-save-and-close/close.yaml +++ b/samples/outlook/25-item-save-and-close/close.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml index 5493cfdf4..cc5e032c8 100644 --- a/samples/outlook/25-item-save-and-close/save.yaml +++ b/samples/outlook/25-item-save-and-close/save.yaml @@ -47,7 +47,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml index 98823ed82..a586403fb 100644 --- a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -118,7 +118,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml index 9a4ea06dd..c09157c3a 100644 --- a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml @@ -45,7 +45,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml index accfe94c9..f36fb67a2 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -48,7 +48,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml index b65ad8dda..3cf67cb86 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml @@ -43,7 +43,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml index 0e969a6e9..fed07d770 100644 --- a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml @@ -51,7 +51,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml index 079248e48..3bedc8929 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml @@ -42,7 +42,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml index 647c5e16a..155db1b15 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -48,7 +48,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml index aa144d4cd..74b2f4227 100644 --- a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml @@ -51,7 +51,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml index 699e365f4..4d92516ef 100644 --- a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml @@ -42,7 +42,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml index 6e12ea844..7f945e4ab 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -73,7 +73,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml index 6bd62eed1..5d183929f 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -73,7 +73,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml index ff8c64b47..6b487a1d6 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -79,7 +79,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml index bfc67f95f..c6d80e8e3 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -79,7 +79,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml index 5155be62d..beba09e5e 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -73,7 +73,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml index 3713a6a14..67512875c 100644 --- a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -80,7 +80,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index c76c00564..2bbec1504 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -192,7 +192,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index b09a9bcb3..c557d2757 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -158,7 +158,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index fa30b735c..5cd62d50f 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index ce46b045d..b2a2f60ff 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -41,7 +41,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index 1627d760b..1a27e0edc 100644 --- a/samples/outlook/45-categories/work-with-categories.yaml +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -109,7 +109,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index 7cc730cfe..affc0154f 100644 --- a/samples/outlook/45-categories/work-with-master-categories.yaml +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -89,7 +89,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index 592a0e7e4..d2565b90f 100644 --- a/samples/outlook/50-recurrence/get-recurrence-read.yaml +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -49,7 +49,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/50-recurrence/get-series-id.yaml b/samples/outlook/50-recurrence/get-series-id.yaml index de482c80a..cf975f140 100644 --- a/samples/outlook/50-recurrence/get-series-id.yaml +++ b/samples/outlook/50-recurrence/get-series-id.yaml @@ -48,7 +48,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml index c710d26bd..3a6061e37 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -93,7 +93,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index 676d08577..570791575 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -62,7 +62,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index 78837a042..afebe6f63 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -62,7 +62,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 122a64606..60c7f18ef 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -82,7 +82,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 3cc7c4a23..2cb258e7c 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -81,7 +81,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index e3ab6a78a..ace941dc9 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -74,7 +74,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index c0e1636b1..1163b5954 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -75,7 +75,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml index 93d0c8d6e..6d2b1206c 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -88,7 +88,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml index 6784a4f01..8dee81ff0 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -71,7 +71,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml index 40b854420..dccbb1d83 100644 --- a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml +++ b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -54,7 +54,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml index d68f00e9b..af91e6505 100644 --- a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml +++ b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -62,7 +62,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml index 03acb511b..9b93155a8 100644 --- a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml +++ b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -93,7 +93,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/75-regex-matches/contextual.yaml b/samples/outlook/75-regex-matches/contextual.yaml index 468f2361c..40918affc 100644 --- a/samples/outlook/75-regex-matches/contextual.yaml +++ b/samples/outlook/75-regex-matches/contextual.yaml @@ -79,7 +79,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml index 29844b3c0..8b2cf4938 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -72,7 +72,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml index fa894d07a..8ac65f4b0 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml @@ -76,7 +76,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml index 3554d5389..d7b4df2ac 100644 --- a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -55,7 +55,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml index c884b2be9..df2c26980 100644 --- a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml @@ -61,7 +61,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml index 7c8d56692..227e2cd0b 100644 --- a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml @@ -64,7 +64,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml index c629df0d8..9e342b5f6 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -52,7 +52,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml index 5ee1cc96d..169118cd9 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -51,7 +51,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml index fb2d9add5..b58289c80 100644 --- a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml +++ b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -109,7 +109,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml index 224dde397..b18fd4901 100644 --- a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml +++ b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml index fe09e4a7e..520c48474 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-conversation-index.yaml b/samples/outlook/90-other-item-apis/get-conversation-index.yaml index dfde09e69..e7f797ce5 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-index.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-index.yaml @@ -55,7 +55,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml index f9737ec77..f3df0a996 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml index 8f57ec3d9..aa4d4ff5a 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml index df218e563..f38085cd7 100644 --- a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml +++ b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -62,7 +62,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-eml-format.yaml b/samples/outlook/90-other-item-apis/get-eml-format.yaml index bbc644545..befaf386c 100644 --- a/samples/outlook/90-other-item-apis/get-eml-format.yaml +++ b/samples/outlook/90-other-item-apis/get-eml-format.yaml @@ -48,7 +48,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-end-read.yaml b/samples/outlook/90-other-item-apis/get-end-read.yaml index 5ecf03fad..baae2d29a 100644 --- a/samples/outlook/90-other-item-apis/get-end-read.yaml +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-in-reply-to.yaml b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml index 0aa9c286f..305ceb6c0 100644 --- a/samples/outlook/90-other-item-apis/get-in-reply-to.yaml +++ b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml @@ -48,7 +48,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml index 9ac5c60c4..00cc493ae 100644 --- a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml +++ b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-class-async.yaml b/samples/outlook/90-other-item-apis/get-item-class-async.yaml index 6eaa618e9..7f6c6e57c 100644 --- a/samples/outlook/90-other-item-apis/get-item-class-async.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-async.yaml @@ -50,7 +50,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-class-read.yaml b/samples/outlook/90-other-item-apis/get-item-class-read.yaml index 3ffb5f9d2..dbcf7045c 100644 --- a/samples/outlook/90-other-item-apis/get-item-class-read.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-type.yaml b/samples/outlook/90-other-item-apis/get-item-type.yaml index 2908d7964..1f1395635 100644 --- a/samples/outlook/90-other-item-apis/get-item-type.yaml +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -47,7 +47,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-location-read.yaml b/samples/outlook/90-other-item-apis/get-location-read.yaml index 527a6c6a1..cc8bb5694 100644 --- a/samples/outlook/90-other-item-apis/get-location-read.yaml +++ b/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-message-properties.yaml b/samples/outlook/90-other-item-apis/get-message-properties.yaml index 823aef4f9..3e97154ed 100644 --- a/samples/outlook/90-other-item-apis/get-message-properties.yaml +++ b/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -69,7 +69,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml index ae9463b04..19e517b81 100644 --- a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml index 7f6406320..1c926f13f 100644 --- a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml @@ -69,7 +69,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml index a1bb80b59..1f787673e 100644 --- a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -61,7 +61,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml index 5599e3f12..cc9182936 100644 --- a/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml +++ b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -66,7 +66,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml index 67c349a94..83eb6cadb 100644 --- a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -62,7 +62,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml index 7d9a57941..8a3b2ed7b 100644 --- a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml +++ b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -61,7 +61,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-start-read.yaml b/samples/outlook/90-other-item-apis/get-start-read.yaml index c6c9a3e46..8e4aef094 100644 --- a/samples/outlook/90-other-item-apis/get-start-read.yaml +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/get-subject-read.yaml b/samples/outlook/90-other-item-apis/get-subject-read.yaml index 117129950..ad8357475 100644 --- a/samples/outlook/90-other-item-apis/get-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-subject-read.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/item-id-compose.yaml b/samples/outlook/90-other-item-apis/item-id-compose.yaml index 0b01c082b..93cea2473 100644 --- a/samples/outlook/90-other-item-apis/item-id-compose.yaml +++ b/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -49,7 +49,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/session-data-apis.yaml b/samples/outlook/90-other-item-apis/session-data-apis.yaml index d59ddb9fd..25a93185a 100644 --- a/samples/outlook/90-other-item-apis/session-data-apis.yaml +++ b/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/set-selected-data.yaml b/samples/outlook/90-other-item-apis/set-selected-data.yaml index baa5c050f..196522028 100644 --- a/samples/outlook/90-other-item-apis/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -48,7 +48,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml index 210aa7e81..7cbaccb5a 100644 --- a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml +++ b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -137,7 +137,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/outlook/default.yaml b/samples/outlook/default.yaml index f338af07c..215d8fa86 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -33,7 +33,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index 2a14f6c5d..440196ff2 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -60,7 +60,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index c63c13f6e..0b3db65ff 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -60,7 +60,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index 46d295927..869630269 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -40,7 +40,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index e86a53323..7b3f697fc 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -38,7 +38,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index 481c61256..d2aba3d06 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -73,7 +73,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index eff37c9dc..37790cb38 100644 --- a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml +++ b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -61,7 +61,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index f0d1912fd..9c4a0af2e 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -54,7 +54,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/images/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml index beb7aa18a..fb17d3eb0 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -58,7 +58,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index b3b3cc0d3..01b78f9df 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -222,7 +222,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 903a7cb70..c7c18a673 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -214,7 +214,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 593f80644..112edce73 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -135,7 +135,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index e9d57a18a..7310e0336 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -217,7 +217,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index e1772d8df..e69f9354f 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -102,7 +102,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index 208197486..4d359b9d8 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -165,7 +165,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index 446fd639e..f84c6043b 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -46,7 +46,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 7816f9633..a8b8d30d0 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -110,7 +110,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index c7ff37dd9..4153e3973 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -206,7 +206,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index 6a3075502..74659b759 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -183,7 +183,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index f41fdb59c..e069060b8 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -31,7 +31,7 @@ style: /* Your style goes here */ language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/project/default.yaml b/samples/project/default.yaml index 6b1016a30..7f5b087a5 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -38,7 +38,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index d903c38f9..0886ad057 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -56,7 +56,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 0fe8313f5..4128b7967 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -57,7 +57,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index f5d73d949..c71ebb2e5 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -43,7 +43,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 6e700143a..47fd52025 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -131,7 +131,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 727773776..8e7df83e6 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -149,7 +149,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index 767d4f7aa..535ecd315 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -169,7 +169,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index d306cbbed..a1e2e93cb 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -149,7 +149,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index 34bfbba89..242550f03 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -150,7 +150,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 9b628a304..7f04b743d 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -148,7 +148,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/get-change-tracking-states.yaml b/samples/word/10-content-controls/get-change-tracking-states.yaml index 928ae2f78..59c3e7901 100644 --- a/samples/word/10-content-controls/get-change-tracking-states.yaml +++ b/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -162,7 +162,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml index 5c0d11a97..b0c0589e3 100644 --- a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -235,7 +235,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml index 91c6cb700..a0660bfaf 100644 --- a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -317,7 +317,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index 28d1abfee..ae89ef06a 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -138,7 +138,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml index d4d9282d6..cb99d13e3 100644 --- a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -319,7 +319,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 5cf88581c..1c3c3e08a 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 362f4c5bd..22237ea74 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -108,7 +108,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/20-lists/manage-list-styles.yaml b/samples/word/20-lists/manage-list-styles.yaml index b6ec1e90b..7816bab24 100644 --- a/samples/word/20-lists/manage-list-styles.yaml +++ b/samples/word/20-lists/manage-list-styles.yaml @@ -106,7 +106,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index bdae4ea6f..28eaa77ab 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -136,7 +136,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index 69032b5d5..19cc3ced4 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -116,7 +116,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index 93914ea3b..ebd2d19e3 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -96,7 +96,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 2ff326007..91478aa3f 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -123,7 +123,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index a3be43cd4..fc7c89344 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index 79af32d30..320453f83 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -185,7 +185,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 43728f436..8fb6815ce 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -151,7 +151,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml index bccf781f3..526be67a2 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -95,7 +95,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index b1ec4aa9b..40005f4e1 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -114,7 +114,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index 99eb9b070..e092435e3 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -116,7 +116,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index f3f17c979..671d4375d 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -116,7 +116,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 3ff8798e3..bdb6cb63b 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -150,7 +150,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 6eb205b34..05a6f12aa 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -113,7 +113,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 0e9c99c9e..2c2623d67 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -58,7 +58,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/30-properties/read-write-custom-document-properties.yaml b/samples/word/30-properties/read-write-custom-document-properties.yaml index eac42034c..83b263137 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -85,7 +85,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml index e34701b22..d639dc4df 100644 --- a/samples/word/35-ranges/compare-location.yaml +++ b/samples/word/35-ranges/compare-location.yaml @@ -120,7 +120,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index e7a3c759c..a113fde70 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -95,7 +95,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/35-ranges/split-words-of-first-paragraph.yaml b/samples/word/35-ranges/split-words-of-first-paragraph.yaml index b01ffe2a0..430b3e437 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -95,7 +95,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/40-tables/manage-custom-style.yaml b/samples/word/40-tables/manage-custom-style.yaml index 27508035a..04c59688f 100644 --- a/samples/word/40-tables/manage-custom-style.yaml +++ b/samples/word/40-tables/manage-custom-style.yaml @@ -472,7 +472,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index b00988d0e..23b2855b5 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -232,7 +232,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 122a4f1b5..2651321bc 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -81,7 +81,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/compare-documents.yaml b/samples/word/50-document/compare-documents.yaml index 0d77309a9..3293fe2d7 100644 --- a/samples/word/50-document/compare-documents.yaml +++ b/samples/word/50-document/compare-documents.yaml @@ -70,7 +70,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/get-external-styles.yaml b/samples/word/50-document/get-external-styles.yaml index b7bc8fd07..58ca438e6 100644 --- a/samples/word/50-document/get-external-styles.yaml +++ b/samples/word/50-document/get-external-styles.yaml @@ -80,7 +80,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index b90258712..88ff98280 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -118,7 +118,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index 802d400af..17cfcb8e6 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -132,7 +132,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 7feb2f49f..608efce9d 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -355,7 +355,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index fb22b206b..959431138 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -410,7 +410,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 58496cd80..c3699f641 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -141,7 +141,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index de1e5eeba..b630ddcfd 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -298,7 +298,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 0ee6ebbae..ba6380115 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -300,7 +300,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index f13e4e813..cfa578145 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -208,7 +208,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index c663ffc3d..b900205d9 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -239,7 +239,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 85eaa494d..6d714c2ac 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -239,7 +239,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 1264bfdea..2dc50e3f5 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -121,7 +121,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 95a1ba8d8..daf6afd8c 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -341,7 +341,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 908027c8a..31796b541 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -205,7 +205,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 2af9a390d..c32ee5cbe 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -133,7 +133,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 86d7b6556..1aeeaaf67 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -165,7 +165,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index 41c1674c6..dd87b0b93 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -107,7 +107,7 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css diff --git a/samples/word/default.yaml b/samples/word/default.yaml index cf3c1fbfb..afde4ef92 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -50,7 +50,7 @@ style: } language: css libraries: | - https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css From 03094039f245d0808f653c2ce42bcf9aa3290ff9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 16 Jan 2025 08:37:46 -0800 Subject: [PATCH 107/156] [Word] (Annotations) Need M365 subscription (#958) --- samples/word/50-document/manage-annotations.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 608efce9d..53abf9e82 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -301,6 +301,7 @@ template: content: |-

    This sample demonstrates how to manage annotations and use annotation events.

    +

    Important: You need a Microsoft 365 subscription in order to use Annotation APIs. See GitHub issue 4953 for more information.

    From bd237bfaeccdd37b832ac4e2516e1275e5328063 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 22 Jan 2025 15:41:56 -0800 Subject: [PATCH 108/156] [Excel] (Data types) Switch to licensed images (#957) --- .github/images/chili-peppers.jpg | Bin 0 -> 163107 bytes .github/images/crustacean.jpg | Bin 0 -> 240043 bytes .github/images/dried-legume.jpg | Bin 0 -> 276074 bytes .github/images/fruit.jpg | Bin 0 -> 187147 bytes .github/images/green-leaf.jpg | Bin 0 -> 245023 bytes .../data-types-entity-values.yaml | 37 +++++++----------- 6 files changed, 15 insertions(+), 22 deletions(-) create mode 100644 .github/images/chili-peppers.jpg create mode 100644 .github/images/crustacean.jpg create mode 100644 .github/images/dried-legume.jpg create mode 100644 .github/images/fruit.jpg create mode 100644 .github/images/green-leaf.jpg diff --git a/.github/images/chili-peppers.jpg b/.github/images/chili-peppers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4645d4e040c803f237c93fce2a02cb32a4f20882 GIT binary patch literal 163107 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

    *x(#R1T5via+$e%v_ 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≦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

    vL#>$jZTk$QkdpN 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%0DyTgMNJ4lDYsNIc09a_h5SPNbe3tsAsU7@xkZWbL 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�PR4yF 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

    n8K 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%0DC=j z-_!0qxAw5m?fe_zb@(~p?+a?$qJ4|)O{>{o8wf1r$qe^1DDvNFBN0jR@t&h2@wVef zxQk4@)9$uPZRGoGR}lty<&TJ`*)9NZK1RsTPWAfB@k{oY_|xJ)3V5Nk`%MSJ8a9(0 zFetpU^Yt$><$wXUyF`z-=Ts`~g1)$~%FRPtlTp_!Jk@#Pg$=dM!=pzeqJA7WB#)I& zQ~)qLS6wM<%TCt(j~5y5`_sMu07Hb(EdKzt_3Ldv%4uRUuIQ5iiYd#1p8G+s(2oP? z8c)Li00--qz9-Rgd{t{4T5{Zi%?-S}wmN_h-p?oc3i4lu-vIT=FI!NvytK475r%t< zlw$JC+-$W>bxeP(ZZde{zRizJ(!LycW>1KJ6mD*BFJXxzvU{Jnii2u^nED9OSCVTi zO#Q6lp!7!A3?!*3RjU*K(aiBKpYW#qS=;z`al5;^QM6~}i#+6Z;!AIDk#5a`x^8qzd- zc$P(BBqaG#vX$Y>rcMFv-o2g;drQ$ZZ8B{dbo+IINX!hMAdGNZ)9YWGU$u{d{9oa} ziO5`gby9 zxxzmenMu&)yrR70i6t9h+Hz9NSV!opNoqikWUk5FHikF08C(Y0)-?WqGb%SVk{xY#taPwq`MznC(fV1PlX=W1rH#sQ4v$ z;k|Cjw5@ScPqEsYv|R30X8WU#;=EE@IXqC-I=!mO@#?nGμu7_%uQHVorye+lR- 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

    _milGtE8Iwe?RP@IL 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

    language: html style: From a034dfc07b4f34366a416a405e04fdf7d06d147d Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 31 Jan 2025 09:27:21 -0800 Subject: [PATCH 110/156] Add a sample highlighting the perf benefits of the correlated objects pattern (#959) --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + .../correlated-objects-pattern.yaml | 171 ++++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 5 files changed, 191 insertions(+) create mode 100644 samples/word/90-scenarios/correlated-objects-pattern.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 2a5ca8870..0a4b1d017 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -553,6 +553,15 @@ group: Scenarios api_set: WordApi: '1.3' +- id: word-scenarios-correlated-objects-pattern + name: Correlated objects pattern + fileName: correlated-objects-pattern.yaml + description: Shows the performance benefits of avoiding `context.sync` calls in a loop. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/correlated-objects-pattern.yaml + group: Scenarios + api_set: + WordApi: '1.4' - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 77f149b77..a934f0e69 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -553,6 +553,15 @@ group: Scenarios api_set: WordApi: '1.3' +- id: word-scenarios-correlated-objects-pattern + name: Correlated objects pattern + fileName: correlated-objects-pattern.yaml + description: Shows the performance benefits of avoiding `context.sync` calls in a loop. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/correlated-objects-pattern.yaml + group: Scenarios + api_set: + WordApi: '1.4' - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml diff --git a/samples/word/90-scenarios/correlated-objects-pattern.yaml b/samples/word/90-scenarios/correlated-objects-pattern.yaml new file mode 100644 index 000000000..fa175aa6f --- /dev/null +++ b/samples/word/90-scenarios/correlated-objects-pattern.yaml @@ -0,0 +1,171 @@ +order: 3 +id: word-scenarios-correlated-objects-pattern +name: Correlated objects pattern +description: Shows the performance benefits of avoiding `context.sync` calls in a loop. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.4' +script: + content: | + $("#replace-placeholders").on("click", () => tryCatch(replacePlaceholders)); $("#replace-placeholders-slow").on("click", () => tryCatch(replacePlaceholdersSlow)); $("#setup").on("click", () => tryCatch(setup)); $("#add-lots-of-text").on("click", () => tryCatch(addLotsOfText)); + const jobMapping = [ + { job: "{Coordinator}", person: "Sally" }, + { job: "{Deputy}", person: "Bob" }, + { job: "{Manager}", person: "Kim" } + ]; + async function replacePlaceholders() { + Word.run(async (context) => { + const startTime = Date.now(); + let count = 0; + + // Find the locations of all the placeholder strings. + const allSearchResults = []; + for (let i = 0; i < jobMapping.length; i++) { + let options = Word.SearchOptions.newObject(context); + options.matchWildcards = false; + let searchResults = context.document.body.search(jobMapping[i].job, options); + searchResults.load('items'); + let correlatedSearchResult = { + rangesMatchingJob: searchResults, + personAssignedToJob: jobMapping[i].person + } + allSearchResults.push(correlatedSearchResult); + } + + // Sync to load those locations in the add-in. + await context.sync() + + // Replace the placeholder text at the known locations. + for (let i = 0; i < allSearchResults.length; i++) { + let correlatedObject = allSearchResults[i]; + + for (let j = 0; j < correlatedObject.rangesMatchingJob.items.length; j++) { + let targetRange = correlatedObject.rangesMatchingJob.items[j]; + let name = correlatedObject.personAssignedToJob; + targetRange.insertText(name, Word.InsertLocation.replace); + count++; + } + } + + await context.sync(); + console.log(`Replacing ${count} placeholders with the correlated objects pattern took ${Date.now() - startTime} milliseconds.`); + console.log() + }); + } + async function replacePlaceholdersSlow() { + Word.run(async (context) => { + const startTime = Date.now(); + let count = 0; + + // The context.sync calls in the loops will degrade performance. + for (let i = 0; i < jobMapping.length; i++) { + let options = Word.SearchOptions.newObject(context); + options.matchWildcards = false; + let searchResults = context.document.body.search(jobMapping[i].job, options); + searchResults.load('items'); + + await context.sync(); + + for (let j = 0; j < searchResults.items.length; j++) { + searchResults.items[j].insertText(jobMapping[i].person, Word.InsertLocation.replace); + count++; + await context.sync(); + } + } + console.log(`Replacing ${count} placeholders with in-loop sync statements took ${Date.now() - startTime} milliseconds.`); + }); + } + async function setup(timesToAddText: number = 1) { + await Word.run(async (context) => { + console.log("Setup beginning..."); + const body: Word.Body = context.document.body; + body.clear(); + while (timesToAddText > 0) { + body.insertParagraph( + "This defines the roles of {Coordinator}, {Deputy}, {Manager}.", + Word.InsertLocation.end + ); + body.insertParagraph( + "{Coordinator}: Oversees daily operations and ensures projects run smoothly by coordinating between different teams and resources.", + Word.InsertLocation.end + ); + body.insertParagraph( + "{Deputy}: Assists and supports senior management, often stepping in to make decisions or manage tasks in {Manager}'s absence.", + Word.InsertLocation.end + ); + body.insertParagraph( + "{Manager}: Leads the team, setting goals, planning strategies, and making decisions to achieve organizational objectives.", + Word.InsertLocation.end + ); + timesToAddText--; + } + await context.sync(); + console.log("Setup complete."); + }); + } + async function addLotsOfText() { + // Add the setup text 100 times. + setup(100); + } + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
    +

    This sample demonstrates the performance optimization gained from the correlated objects pattern. For more information, see Avoid using the context.sync method in loops.

    +
    + +
    +

    Setup

    +

    Use Setup to create a basic text block with some placeholders. Use More text to create a longer text block to better see performance distinctions.

    + +
    + +
    +

    Replace placeholder text

    + + +
    + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/word.json b/view-prod/word.json index 7fb26adf6..91af0634e 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -55,6 +55,7 @@ "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", + "word-scenarios-correlated-objects-pattern": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/correlated-objects-pattern.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index e31edb7b7..3d5b2bafa 100644 --- a/view/word.json +++ b/view/word.json @@ -55,6 +55,7 @@ "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/compare-documents.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", + "word-scenarios-correlated-objects-pattern": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/correlated-objects-pattern.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file From e9cade9764369bfdc0d4f45d6a5891351ada22ba Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 20 Feb 2025 10:14:44 -0800 Subject: [PATCH 111/156] [Outlook] (attachment) Update snippet (#962) --- .../20-item-body/add-inline-base64-image.yaml | 81 ++++++---- snippet-extractor-metadata/outlook.xlsx | Bin 24119 -> 24042 bytes snippet-extractor-output/snippets.yaml | 147 +++++++++--------- 3 files changed, 125 insertions(+), 103 deletions(-) diff --git a/samples/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml index 11074d407..d21f32e66 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -6,38 +6,60 @@ host: OUTLOOK api_set: Mailbox: '1.8' script: - content: | - $("#add-image").on("click", addImage); + content: |- + $("#prepend-image").on("click", prependImage); + $("#append-image").on("click", appendImage); + + const base64String = + "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAnUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN0S+bUAAAAMdFJOUwAQIDBAUI+fr7/P7yEupu8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVGhD7dfLdoMwDEVR6Cspzf9/b20QYOthS5Zn0Z2kVdY6O2WULrFYLBaLxd5ur4mDZD14b8ogWS/dtxV+dmx9ysA2QUj9TQRWv5D7HyKwuIW9n0vc8tkpHP0W4BOg3wQ8wtlvA+PC1e8Ao8Ld7wFjQtHvAiNC2e8DdqHqKwCrUPc1gE1AfRVgEXBfB+gF0lcCWoH2tYBOYPpqQCNwfT3QF9i+AegJfN8CtAWhbwJagtS3AbIg9o2AJMh9M5C+SVGBvx6zAfmT0r+Bv8JMwP4kyFPir+cswF5KL3WLv14zAFBCLf56Tw9cparFX4upgaJUtPhrOS1QlY5W+vWTXrGgBFB/b72ev3/0igUdQPppP/nfowfKUUEFcP207y/yxKmgAYQ+PywoAFOfCH3A2MdCFzD3kdADBvq10AGG+pXQBgb7pdAEhvuF0AIc/VtoAK7+JciAs38KIuDugyAC/v4hiMCE/i7IwLRBsh68N2WQjMVisVgs9i5bln8LGScNcCrONQAAAABJRU5ErkJggg=="; + + function prependImage() { + // Insert the Base64-encoded image to the beginning of the body. + Office.context.mailbox.item.addFileAttachmentFromBase64Async(base64String, "sample.png", { isInline: true }, (attachmentResult) => { + if (attachmentResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to attach file: ${attachmentResult.error.message}`); + return; + } + + Office.context.mailbox.item.body.prependAsync('', { coercionType: Office.CoercionType.Html }, (prependResult) => { + if (prependResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to prepend image to body: ${attachmentResult.error.message}`); + return; + } - function addImage() { - const mailItem = Office.context.mailbox.item; - const base64String = - "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAnUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN0S+bUAAAAMdFJOUwAQIDBAUI+fr7/P7yEupu8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVGhD7dfLdoMwDEVR6Cspzf9/b20QYOthS5Zn0Z2kVdY6O2WULrFYLBaLxd5ur4mDZD14b8ogWS/dtxV+dmx9ysA2QUj9TQRWv5D7HyKwuIW9n0vc8tkpHP0W4BOg3wQ8wtlvA+PC1e8Ao8Ld7wFjQtHvAiNC2e8DdqHqKwCrUPc1gE1AfRVgEXBfB+gF0lcCWoH2tYBOYPpqQCNwfT3QF9i+AegJfN8CtAWhbwJagtS3AbIg9o2AJMh9M5C+SVGBvx6zAfmT0r+Bv8JMwP4kyFPir+cswF5KL3WLv14zAFBCLf56Tw9cparFX4upgaJUtPhrOS1QlY5W+vWTXrGgBFB/b72ev3/0igUdQPppP/nfowfKUUEFcP207y/yxKmgAYQ+PywoAFOfCH3A2MdCFzD3kdADBvq10AGG+pXQBgb7pdAEhvuF0AIc/VtoAK7+JciAs38KIuDugyAC/v4hiMCE/i7IwLRBsh68N2WQjMVisVgs9i5bln8LGScNcCrONQAAAABJRU5ErkJggg=="; + console.log("Inline Base64-encoded image added to the beginning of the body."); + }) + }); + } + function appendImage() { // Get the current body of the message or appointment. - mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { - if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { - // Insert the Base64-encoded image to the beginning of the body. - const options = { isInline: true, asyncContext: bodyResult.value }; - mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { - if (attachResult.status === Office.AsyncResultStatus.Succeeded) { - let body = attachResult.asyncContext; - body = body.replace("

    ", `

    `); + Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, (bodyResult) => { + if (bodyResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to get body: ${bodyResult.error.message}`); + return; + } + + // Add the Base64-encoded image to the end of the body. + const options = { isInline: true, asyncContext: bodyResult.value }; + Office.context.mailbox.item.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { + if (attachResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to attach file: ${attachResult.error.message}`); + return; + } - mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { - if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline Base64-encoded image added to the body."); - } else { - console.log(setResult.error.message); - } - }); - } else { - console.log(attachResult.error.message); + let body = attachResult.asyncContext; + body += ''; + + Office.context.mailbox.item.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { + if (setResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to set body: ${setResult.error.message}`); + return; } + + console.log("Inline Base64-encoded image added to the end of the body."); }); - } else { - console.log(bodyResult.error.message); - } + }); }); } language: typescript @@ -50,8 +72,11 @@ template:

    Try it out

    - +
    language: html diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 837a9fdf5fc4179d358f5a7f1e9361610269070f..f03e7f59d9abc4664be058475d80eedbd9089931 100644 GIT binary patch delta 12005 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 OjBY@U1kw7>i2n~4(zqJ{ delta 12159 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 Qt`*m1K#L@*`=1&AAKpRj1^@s6 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7a0f38531..e4ad134d2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9588,36 +9588,35 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml - const mailItem = Office.context.mailbox.item; + // Get the current body of the message or appointment. - const base64String = - "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAnUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN0S+bUAAAAMdFJOUwAQIDBAUI+fr7/P7yEupu8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVGhD7dfLdoMwDEVR6Cspzf9/b20QYOthS5Zn0Z2kVdY6O2WULrFYLBaLxd5ur4mDZD14b8ogWS/dtxV+dmx9ysA2QUj9TQRWv5D7HyKwuIW9n0vc8tkpHP0W4BOg3wQ8wtlvA+PC1e8Ao8Ld7wFjQtHvAiNC2e8DdqHqKwCrUPc1gE1AfRVgEXBfB+gF0lcCWoH2tYBOYPpqQCNwfT3QF9i+AegJfN8CtAWhbwJagtS3AbIg9o2AJMh9M5C+SVGBvx6zAfmT0r+Bv8JMwP4kyFPir+cswF5KL3WLv14zAFBCLf56Tw9cparFX4upgaJUtPhrOS1QlY5W+vWTXrGgBFB/b72ev3/0igUdQPppP/nfowfKUUEFcP207y/yxKmgAYQ+PywoAFOfCH3A2MdCFzD3kdADBvq10AGG+pXQBgb7pdAEhvuF0AIc/VtoAK7+JciAs38KIuDugyAC/v4hiMCE/i7IwLRBsh68N2WQjMVisVgs9i5bln8LGScNcCrONQAAAABJRU5ErkJggg=="; + Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, + (bodyResult) => { + if (bodyResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to get body: ${bodyResult.error.message}`); + return; + } - // Get the current body of the message or appointment. + // Add the Base64-encoded image to the end of the body. + const options = { isInline: true, asyncContext: bodyResult.value }; + Office.context.mailbox.item.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { + if (attachResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to attach file: ${attachResult.error.message}`); + return; + } - mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { - if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { - // Insert the Base64-encoded image to the beginning of the body. - const options = { isInline: true, asyncContext: bodyResult.value }; - mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { - if (attachResult.status === Office.AsyncResultStatus.Succeeded) { - let body = attachResult.asyncContext; - body = body.replace("

    ", `

    `); - - mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { - if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline Base64-encoded image added to the body."); - } else { - console.log(setResult.error.message); - } - }); - } else { - console.log(attachResult.error.message); + let body = attachResult.asyncContext; + body += ''; + + Office.context.mailbox.item.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { + if (setResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to set body: ${setResult.error.message}`); + return; } + + console.log("Inline Base64-encoded image added to the end of the body."); }); - } else { - console.log(bodyResult.error.message); - } + }); }); 'Office.Body#appendOnSendAsync:member(1)': - >- @@ -9656,36 +9655,35 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml - const mailItem = Office.context.mailbox.item; + // Get the current body of the message or appointment. - const base64String = - "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAnUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN0S+bUAAAAMdFJOUwAQIDBAUI+fr7/P7yEupu8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVGhD7dfLdoMwDEVR6Cspzf9/b20QYOthS5Zn0Z2kVdY6O2WULrFYLBaLxd5ur4mDZD14b8ogWS/dtxV+dmx9ysA2QUj9TQRWv5D7HyKwuIW9n0vc8tkpHP0W4BOg3wQ8wtlvA+PC1e8Ao8Ld7wFjQtHvAiNC2e8DdqHqKwCrUPc1gE1AfRVgEXBfB+gF0lcCWoH2tYBOYPpqQCNwfT3QF9i+AegJfN8CtAWhbwJagtS3AbIg9o2AJMh9M5C+SVGBvx6zAfmT0r+Bv8JMwP4kyFPir+cswF5KL3WLv14zAFBCLf56Tw9cparFX4upgaJUtPhrOS1QlY5W+vWTXrGgBFB/b72ev3/0igUdQPppP/nfowfKUUEFcP207y/yxKmgAYQ+PywoAFOfCH3A2MdCFzD3kdADBvq10AGG+pXQBgb7pdAEhvuF0AIc/VtoAK7+JciAs38KIuDugyAC/v4hiMCE/i7IwLRBsh68N2WQjMVisVgs9i5bln8LGScNcCrONQAAAABJRU5ErkJggg=="; + Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, + (bodyResult) => { + if (bodyResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to get body: ${bodyResult.error.message}`); + return; + } - // Get the current body of the message or appointment. + // Add the Base64-encoded image to the end of the body. + const options = { isInline: true, asyncContext: bodyResult.value }; + Office.context.mailbox.item.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { + if (attachResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to attach file: ${attachResult.error.message}`); + return; + } - mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { - if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { - // Insert the Base64-encoded image to the beginning of the body. - const options = { isInline: true, asyncContext: bodyResult.value }; - mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { - if (attachResult.status === Office.AsyncResultStatus.Succeeded) { - let body = attachResult.asyncContext; - body = body.replace("

    ", `

    `); - - mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { - if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline Base64-encoded image added to the body."); - } else { - console.log(setResult.error.message); - } - }); - } else { - console.log(attachResult.error.message); + let body = attachResult.asyncContext; + body += ''; + + Office.context.mailbox.item.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { + if (setResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to set body: ${setResult.error.message}`); + return; } + + console.log("Inline Base64-encoded image added to the end of the body."); }); - } else { - console.log(bodyResult.error.message); - } + }); }); 'Office.Body#getTypeAsync:member(1)': - >- @@ -9775,36 +9773,35 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml - const mailItem = Office.context.mailbox.item; + // Get the current body of the message or appointment. - const base64String = - "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAnUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN0S+bUAAAAMdFJOUwAQIDBAUI+fr7/P7yEupu8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVGhD7dfLdoMwDEVR6Cspzf9/b20QYOthS5Zn0Z2kVdY6O2WULrFYLBaLxd5ur4mDZD14b8ogWS/dtxV+dmx9ysA2QUj9TQRWv5D7HyKwuIW9n0vc8tkpHP0W4BOg3wQ8wtlvA+PC1e8Ao8Ld7wFjQtHvAiNC2e8DdqHqKwCrUPc1gE1AfRVgEXBfB+gF0lcCWoH2tYBOYPpqQCNwfT3QF9i+AegJfN8CtAWhbwJagtS3AbIg9o2AJMh9M5C+SVGBvx6zAfmT0r+Bv8JMwP4kyFPir+cswF5KL3WLv14zAFBCLf56Tw9cparFX4upgaJUtPhrOS1QlY5W+vWTXrGgBFB/b72ev3/0igUdQPppP/nfowfKUUEFcP207y/yxKmgAYQ+PywoAFOfCH3A2MdCFzD3kdADBvq10AGG+pXQBgb7pdAEhvuF0AIc/VtoAK7+JciAs38KIuDugyAC/v4hiMCE/i7IwLRBsh68N2WQjMVisVgs9i5bln8LGScNcCrONQAAAABJRU5ErkJggg=="; + Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, + (bodyResult) => { + if (bodyResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to get body: ${bodyResult.error.message}`); + return; + } - // Get the current body of the message or appointment. + // Add the Base64-encoded image to the end of the body. + const options = { isInline: true, asyncContext: bodyResult.value }; + Office.context.mailbox.item.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { + if (attachResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to attach file: ${attachResult.error.message}`); + return; + } - mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { - if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { - // Insert the Base64-encoded image to the beginning of the body. - const options = { isInline: true, asyncContext: bodyResult.value }; - mailItem.addFileAttachmentFromBase64Async(base64String, "sample.png", options, (attachResult) => { - if (attachResult.status === Office.AsyncResultStatus.Succeeded) { - let body = attachResult.asyncContext; - body = body.replace("

    ", `

    `); - - mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { - if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline Base64-encoded image added to the body."); - } else { - console.log(setResult.error.message); - } - }); - } else { - console.log(attachResult.error.message); + let body = attachResult.asyncContext; + body += ''; + + Office.context.mailbox.item.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { + if (setResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Failed to set body: ${setResult.error.message}`); + return; } + + console.log("Inline Base64-encoded image added to the end of the body."); }); - } else { - console.log(bodyResult.error.message); - } + }); }); 'Office.Body#setSelectedDataAsync:member(1)': - >- From e4afc31483f16d478367c088bb8b2ebfbfad038b Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 24 Feb 2025 11:02:26 -0800 Subject: [PATCH 112/156] [Outlook] (Message Compose) Map code sample (#963) --- snippet-extractor-metadata/outlook.xlsx | Bin 24042 -> 24127 bytes snippet-extractor-output/snippets.yaml | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index f03e7f59d9abc4664be058475d80eedbd9089931..65cbe59013c294ec43d9d6ce5d81063213fe39b0 100644 GIT binary patch delta 15075 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index e4ad134d2..fb8dd6767 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11582,6 +11582,23 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); +'Office.MessageCompose:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + + + const attachmentUrl = $("#attachmentUrl") + .val() + .toString(); + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { isInline: false }, + (result) => { + console.log(result); + } + ); 'Office.MessageCompose#addFileAttachmentAsync:member(1)': - >- // Link to full sample: From 864521f9fb6955e24556f574e3dd628ce6b2eb90 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 26 Feb 2025 07:14:56 -0800 Subject: [PATCH 113/156] Note Script Lab size restrictions in readme (#964) --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 07ac86706..a0e9602b7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 1. Clone your fork to your development computer. 1. Ensure that you have Node, version 6.10+, installed. (To check the version run the command `node -v`.) 1. Install `yarn` as a global package `npm install yarn --global`. -1. Be sure your CLI is in the root of the office-js-snippets repo and run `yarn install`. (It is similar to `npm install`.) +1. Be sure your CLI is in the root of the office-js-snippets repo and run `yarn install`. (It's similar to `npm install`.) 1. Set up the original \OfficeDev\office-js-snippets as the upstream repo for your local repo by following the steps in [Configuring a remote for a fork](https://help.github.com/articles/configuring-a-remote-for-a-fork/). 1. If you'll be using Visual Studio Code as your editor, install the [TSLint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) extension for Visual Studio Code. @@ -22,7 +22,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr > For the git tasks in this procedure, the instructions assume that you're using a CLI. You are welcome to use a GUI git client. Consult the client's help to learn how to carry out the same tasks. -1. Create a snippet using [Script Lab](https://github.com/OfficeDev/script-lab/blob/master/README.md#what-is). Ensure that the name and description are what you want to be shown publicly. Use standard TypeScript indentation. Improper indentation can cause a failure of the build that you run in a later step. See also the [**Style guidelines**](#style-guidelines) section below. +1. Create a snippet using [Script Lab](https://github.com/OfficeDev/script-lab/blob/master/README.md#what-is). Ensure that the name and description are what you want to be shown publicly. Make sure to keep your snippet small. Use standard TypeScript indentation. Improper indentation can cause a failure of the build that you run in a later step. See also the [**Style guidelines**](#style-guidelines) and [**Size restrictions**](#size-restrictions) sections below. 1. Choose the Share icon, and then choose **Copy to Clipboard**. 1. Paste the contents into a text editor. 1. Near the top of the file, you will see the line `api_set: {}`. This needs to be changed to specify the host API version of the most recently added API that is used in your snippet. For example, if the snippet is for Excel and it uses some APIs that were introduced in Excel API 1.3, some in 1.4, and some in 1.5, then you need to specify `ExcelApi 1.5` as the value of the `api_set` property. Put a line break and four spaces before the value and no {} characters. To continue the example, when you're done the property would look like this: @@ -130,6 +130,14 @@ A few style rules to observe: - Don't forget the semicolons. - `Libraries` in snippets must have a specific version. Eg. `jquery@3.1.1`. +## Size restrictions + +Script Lab is designed for you to play with small code samples. Generally, a snippet should be at most a few hundred lines and a few thousand characters. + +Your snippet can use hard-coded data. A small amount of data (say, a few hundred characters) is OK to hard code in Script Lab. However, for larger pieces of data, we recommend that you store those externally then load them at runtime with a command like `fetch`. + +Keep your snippets and hard-coded data small since storing several large snippets could exceed Script Lab's storage and cause issues when loading Script Lab. + ## Debugging the build script - The scripts for building/validating the snippets are under the `config` folder -- in particular, under `build.ts`. From f8c6cc93f0cf63c6d451779c0cc2f077a4502ea4 Mon Sep 17 00:00:00 2001 From: ndeleuze <107273303+ndeleuze@users.noreply.github.com> Date: Tue, 11 Mar 2025 15:15:03 -0500 Subject: [PATCH 114/156] [Outlook] Adding code snippet example of the new sendAsync API (#950) * Adding code snippet example of the new sendAsync API to send message and appointments * Adding yaml file * Update samples/outlook/99-preview-apis/send-async.yaml Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> * Update samples/outlook/99-preview-apis/send-async.yaml Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --------- Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/outlook.yaml | 9 +++ playlists/outlook.yaml | 9 +++ .../outlook/99-preview-apis/send-async.yaml | 60 +++++++++++++++++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 5 files changed, 80 insertions(+) create mode 100644 samples/outlook/99-preview-apis/send-async.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 06645f7c6..b42d82df3 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -793,6 +793,15 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-send-async + name: Send the current message or appointment (Compose) + fileName: send-async.yaml + description: Send the current message or appointment. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/send-async.yaml + group: Preview APIs + api_set: + Mailbox: preview - id: outlook-set-displayed-body-subject name: Temporarily set the body or subject displayed in a message (Message Read) fileName: set-displayed-body-subject.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index b344b28bb..4a898620c 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -793,6 +793,15 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-send-async + name: Send the current message or appointment (Compose) + fileName: send-async.yaml + description: Send the current message or appointment. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/send-async.yaml + group: Preview APIs + api_set: + Mailbox: preview - id: outlook-set-displayed-body-subject name: Temporarily set the body or subject displayed in a message (Message Read) fileName: set-displayed-body-subject.yaml diff --git a/samples/outlook/99-preview-apis/send-async.yaml b/samples/outlook/99-preview-apis/send-async.yaml new file mode 100644 index 000000000..c0e784ce3 --- /dev/null +++ b/samples/outlook/99-preview-apis/send-async.yaml @@ -0,0 +1,60 @@ +order: 2 +id: outlook-send-async +name: Send the current message or appointment (Compose) +description: Sends the current message or appointment. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#send-async").on("click", sendAsync); + + function sendAsync() { + // This snippet sends the current message or appointment being composed. + Office.context.mailbox.item.sendAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + }); + } + language: typescript +template: + content: |- +

    +

    This sample shows how to programmatically send the current message or appointment being composed.

    +

    Required mode: Compose

    +
    + +
    +

    Try it out

    + +
    + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 21332af7f..0a37b9b00 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -83,5 +83,6 @@ "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml", "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", + "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/send-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index fa6113898..b8933c5dc 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -83,5 +83,6 @@ "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-async.yaml", "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/item-id-compose.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", + "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/send-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file From 237d11e4d10062399962c674184f232090fb78b9 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 17 Mar 2025 14:33:08 -0700 Subject: [PATCH 115/156] [Outlook] Code snippet updates (#966) * Remove sendAsync snippet from preview * Update reply form snippet * Update attachments snippet --- playlists-prod/outlook.yaml | 20 +- playlists/outlook.yaml | 20 +- .../40-attachments/get-attachments-read.yaml | 16 +- .../display-reply-with-attachments.yaml | 174 +++++- .../send-async.yaml | 8 +- snippet-extractor-metadata/outlook.xlsx | Bin 24127 -> 24428 bytes snippet-extractor-output/snippets.yaml | 522 ++++++++++++++++-- view-prod/outlook.json | 2 +- view/outlook.json | 2 +- 9 files changed, 669 insertions(+), 95 deletions(-) rename samples/outlook/{99-preview-apis => 90-other-item-apis}/send-async.yaml (93%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index b42d82df3..0b4c9e5b8 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -387,7 +387,7 @@ - id: outlook-display-items-display-reply-with-attachments name: Create a reply with attachments fileName: display-reply-with-attachments.yaml - description: Opens a reply message forms and adds sample attachments. + description: Opens a reply or reply-all message form and adds sample attachments. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml group: Display Items @@ -784,6 +784,15 @@ group: Other Item APIs api_set: Mailbox: '1.8' +- id: outlook-send-async + name: Send the current message or appointment (Compose) + fileName: send-async.yaml + description: Sends the current message or appointment. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml + group: Other Item APIs + api_set: + Mailbox: '1.15' - id: outlook-get-set-isalldayevent name: Get and set the isAllDayEvent property (Appointment Organizer) fileName: get-set-isalldayevent.yaml @@ -793,15 +802,6 @@ group: Preview APIs api_set: Mailbox: preview -- id: outlook-send-async - name: Send the current message or appointment (Compose) - fileName: send-async.yaml - description: Send the current message or appointment. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/send-async.yaml - group: Preview APIs - api_set: - Mailbox: preview - id: outlook-set-displayed-body-subject name: Temporarily set the body or subject displayed in a message (Message Read) fileName: set-displayed-body-subject.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 4a898620c..63c47e294 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -387,7 +387,7 @@ - id: outlook-display-items-display-reply-with-attachments name: Create a reply with attachments fileName: display-reply-with-attachments.yaml - description: Opens a reply message forms and adds sample attachments. + description: Opens a reply or reply-all message form and adds sample attachments. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-with-attachments.yaml group: Display Items @@ -784,6 +784,15 @@ group: Other Item APIs api_set: Mailbox: '1.8' +- id: outlook-send-async + name: Send the current message or appointment (Compose) + fileName: send-async.yaml + description: Sends the current message or appointment. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/send-async.yaml + group: Other Item APIs + api_set: + Mailbox: '1.15' - id: outlook-get-set-isalldayevent name: Get and set the isAllDayEvent property (Appointment Organizer) fileName: get-set-isalldayevent.yaml @@ -793,15 +802,6 @@ group: Preview APIs api_set: Mailbox: preview -- id: outlook-send-async - name: Send the current message or appointment (Compose) - fileName: send-async.yaml - description: Send the current message or appointment. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/send-async.yaml - group: Preview APIs - api_set: - Mailbox: preview - id: outlook-set-displayed-body-subject name: Temporarily set the body or subject displayed in a message (Message Read) fileName: set-displayed-body-subject.yaml diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index b2a2f60ff..5c158a457 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -9,8 +9,20 @@ script: $("#run").on("click", run); function run() { - const attachments = Office.context.mailbox.item.attachments; - console.log(attachments); + const item = Office.context.mailbox.item; + + if (item.attachments.length > 0) { + for (let i = 0; i < item.attachments.length; i++) { + const attachment = item.attachments[i]; + console.log(`${i+1}. Name: ${attachment.name}`); + console.log(`ID: ${attachment.id}`); + console.log(`Type: ${attachment.attachmentType}`); + console.log(`Inline content: ${attachment.isInline}`); + console.log(`Size: ${attachment.size}`); + } + } else { + console.log("This mail item doesn't contain any attachments."); + } } language: typescript template: diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index 1163b5954..91b1ae33b 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -1,46 +1,167 @@ order: 6 id: outlook-display-items-display-reply-with-attachments name: Create a reply with attachments -description: Opens a reply message forms and adds sample attachments. +description: Opens a reply or reply-all message form and adds sample attachments. host: OUTLOOK api_set: Mailbox: '1.9' script: content: | - $("#run").on("click", run); - $("#run-async").on("click", runAsync); + $("#reply").on("click", reply); + $("#reply-async").on("click", replyAsync); + $("#reply-all").on("click", replyAll); + $("#reply-all-async").on("click", replyAllAsync); - function run() { + function reply() { + // Define attachments. + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + // Create the reply with attachments. Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ], + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment], callback: (result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); return; } - console.log("Created reply with attachments."); + console.log("Created a reply with attachments."); } }); } - function runAsync() { - // The async version is only available starting with requirement set 1.9. + function replyAll() { + // Define attachments. + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + // Create the reply with attachments. + Office.context.mailbox.item.displayReplyAllForm({ + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment], + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + + console.log("Created a reply-all form with attachments."); + } + }); + } + + function replyAsync() { + // Define attachments. + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + // The async version was introduced in requirement set 1.9. // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] }, (asyncResult) => { - console.log(JSON.stringify(asyncResult)); + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created reply with attachments."); + } + ); + } + + function replyAllAsync() { + // Define attachments. + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + // The async version was introduced in requirement set 1.9. + // It provides a callback when the new appointment form has been created. + Office.context.mailbox.item.displayReplyAllFormAsync( + { + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] + }, + (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created a reply-all form with attachments."); } ); } @@ -49,16 +170,23 @@ template: content: |-

    This sample shows how to create a reply message and add an inline image attachment and an item attachment.

    +

    Required mode: Compose

    Try it out

    - + + + -
    language: html style: diff --git a/samples/outlook/99-preview-apis/send-async.yaml b/samples/outlook/90-other-item-apis/send-async.yaml similarity index 93% rename from samples/outlook/99-preview-apis/send-async.yaml rename to samples/outlook/90-other-item-apis/send-async.yaml index c0e784ce3..b17568ace 100644 --- a/samples/outlook/99-preview-apis/send-async.yaml +++ b/samples/outlook/90-other-item-apis/send-async.yaml @@ -1,10 +1,10 @@ -order: 2 +order: 30 id: outlook-send-async name: Send the current message or appointment (Compose) description: Sends the current message or appointment. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.15' script: content: | $("#send-async").on("click", sendAsync); @@ -47,8 +47,8 @@ style: } language: css libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js office-ui-fabric-core@11.1.0/dist/css/fabric.min.css office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 65cbe59013c294ec43d9d6ce5d81063213fe39b0..3f36c4a53710ec22de921837b7e58fdcababd6ac 100644 GIT binary patch delta 14477 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 CQH=or delta 14223 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fb8dd6767..149d6a577 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8908,6 +8908,20 @@ console.error(`saveAsync failed with message ${result.error.message}`); } }); +'Office.AppointmentCompose#sendAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml + + + // This snippet sends the current message or appointment being composed. + + Office.context.mailbox.item.sendAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + }); 'Office.AppointmentCompose#sensitivity:member': - >- // Link to full sample: @@ -9062,9 +9076,21 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml - const attachments = Office.context.mailbox.item.attachments; + const item = Office.context.mailbox.item; - console.log(attachments); + + if (item.attachments.length > 0) { + for (let i = 0; i < item.attachments.length; i++) { + const attachment = item.attachments[i]; + console.log(`${i+1}. Name: ${attachment.name}`); + console.log(`ID: ${attachment.id}`); + console.log(`Type: ${attachment.attachmentType}`); + console.log(`Inline content: ${attachment.isInline}`); + console.log(`Size: ${attachment.size}`); + } + } else { + console.log("This mail item doesn't contain any attachments."); + } 'Office.AppointmentRead#categories:member': - >- // Link to full sample: @@ -9163,6 +9189,50 @@ Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with some bold text."); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // Create the reply with attachments. + + Office.context.mailbox.item.displayReplyAllForm({ + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment], + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + + console.log("Created a reply-all form with attachments."); + } + }); 'Office.AppointmentRead#displayReplyAllFormAsync:member(1)': - >- // Link to full sample: @@ -9175,6 +9245,54 @@ ) { console.log(JSON.stringify(asyncResult)); }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // The async version was introduced in requirement set 1.9. + + // It provides a callback when the new appointment form has been created. + + Office.context.mailbox.item.displayReplyAllFormAsync( + { + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] + }, + (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created a reply-all form with attachments."); + } + ); 'Office.AppointmentRead#displayReplyForm:member(1)': - >- // Link to full sample: @@ -9188,19 +9306,43 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // Create the reply with attachments. + Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ], + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment], callback: (result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); return; } - console.log("Created reply with attachments."); + console.log("Created a reply with attachments."); } }); 'Office.AppointmentRead#displayReplyFormAsync:member(1)': @@ -9220,20 +9362,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9. + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // The async version was introduced in requirement set 1.9. // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] }, (asyncResult) => { - console.log(JSON.stringify(asyncResult)); + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created reply with attachments."); } ); 'Office.AppointmentRead#end:member': @@ -9582,6 +9751,27 @@ console.log(`Subject: ${Office.context.mailbox.item.subject}`); +'Office.AttachmentDetails:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml + + + const item = Office.context.mailbox.item; + + + if (item.attachments.length > 0) { + for (let i = 0; i < item.attachments.length; i++) { + const attachment = item.attachments[i]; + console.log(`${i+1}. Name: ${attachment.name}`); + console.log(`ID: ${attachment.id}`); + console.log(`Type: ${attachment.attachmentType}`); + console.log(`Inline content: ${attachment.isInline}`); + console.log(`Size: ${attachment.size}`); + } + } else { + console.log("This mail item doesn't contain any attachments."); + } 'Office.Body:interface': - >- // Link to full sample: @@ -12287,6 +12477,20 @@ console.log(`Attachment removed successfully.`); } ); +'Office.MessageCompose#sendAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml + + + // This snippet sends the current message or appointment being composed. + + Office.context.mailbox.item.sendAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + }); 'Office.MessageCompose#sensitivityLabel:member': - >- // Link to full sample: @@ -12412,15 +12616,48 @@ console.error(asyncResult.error); } }); +'Office.MessageRead:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml + + + const item = Office.context.mailbox.item; + + + if (item.attachments.length > 0) { + for (let i = 0; i < item.attachments.length; i++) { + const attachment = item.attachments[i]; + console.log(`${i+1}. Name: ${attachment.name}`); + console.log(`ID: ${attachment.id}`); + console.log(`Type: ${attachment.attachmentType}`); + console.log(`Inline content: ${attachment.isInline}`); + console.log(`Size: ${attachment.size}`); + } + } else { + console.log("This mail item doesn't contain any attachments."); + } 'Office.MessageRead#attachments:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml - const attachments = Office.context.mailbox.item.attachments; + const item = Office.context.mailbox.item; + - console.log(attachments); + if (item.attachments.length > 0) { + for (let i = 0; i < item.attachments.length; i++) { + const attachment = item.attachments[i]; + console.log(`${i+1}. Name: ${attachment.name}`); + console.log(`ID: ${attachment.id}`); + console.log(`Type: ${attachment.attachmentType}`); + console.log(`Inline content: ${attachment.isInline}`); + console.log(`Size: ${attachment.size}`); + } + } else { + console.log("This mail item doesn't contain any attachments."); + } 'Office.MessageRead#categories:member': - >- // Link to full sample: @@ -12565,6 +12802,50 @@ Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with some bold text."); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // Create the reply with attachments. + + Office.context.mailbox.item.displayReplyAllForm({ + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment], + callback: (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + + console.log("Created a reply-all form with attachments."); + } + }); 'Office.MessageRead#displayReplyAllFormAsync:member(1)': - >- // Link to full sample: @@ -12577,6 +12858,54 @@ ) { console.log(JSON.stringify(asyncResult)); }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + + + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // The async version was introduced in requirement set 1.9. + + // It provides a callback when the new appointment form has been created. + + Office.context.mailbox.item.displayReplyAllFormAsync( + { + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] + }, + (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created a reply-all form with attachments."); + } + ); 'Office.MessageRead#displayReplyForm:member(1)': - >- // Link to full sample: @@ -12590,19 +12919,43 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // Create the reply with attachments. + Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "https://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ], + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment], callback: (result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.error(`Action failed with message ${result.error.message}`); return; } - console.log("Created reply with attachments."); + console.log("Created a reply with attachments."); } }); 'Office.MessageRead#displayReplyFormAsync:member(1)': @@ -12622,20 +12975,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9. + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // The async version was introduced in requirement set 1.9. // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] }, (asyncResult) => { - console.log(JSON.stringify(asyncResult)); + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created reply with attachments."); } ); 'Office.MessageRead#end:member': @@ -13476,20 +13856,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9. + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // The async version was introduced in requirement set 1.9. // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] }, (asyncResult) => { - console.log(JSON.stringify(asyncResult)); + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created reply with attachments."); } ); 'Office.ReplyFormData:interface': @@ -13498,20 +13905,47 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // The async version is only available starting with requirement set 1.9. + // Define attachments. + + const base64Attachment = { + base64file: + "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", + inLine: true, + name: "script_lab.png", + type: Office.MailboxEnums.AttachmentType.Base64 + }; + + const fileAttachment = { + inLine: true, + name: "dog.jpg", + type: Office.MailboxEnums.AttachmentType.File, + url: "https://i.imgur.com/9S36xvA.jpg" + }; + + const itemAttachment = { + itemId: Office.context.mailbox.item.itemId, + name: "test_email.msg", + type: Office.MailboxEnums.AttachmentType.Item + }; + + + // The async version was introduced in requirement set 1.9. // It provides a callback when the new appointment form has been created. Office.context.mailbox.item.displayReplyFormAsync( { - htmlBody: "This is a reply with an inline image and an item attachment.
    ", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", inLine: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] + htmlBody: + "This is a reply with an inline Base64-encoded attachment, an inline image, and an item attachment.

    ", + attachments: [base64Attachment, fileAttachment, itemAttachment] }, (asyncResult) => { - console.log(JSON.stringify(asyncResult)); + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.error(`Action failed with message ${asyncResult.error.message}`); + return; + } + + console.log("Created reply with attachments."); } ); 'Office.RoamingSettings#get:member(1)': diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 0a37b9b00..0319b1591 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -82,7 +82,7 @@ "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-index.yaml", "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml", "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml", + "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", - "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/send-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index b8933c5dc..42644a3a8 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -82,7 +82,7 @@ "outlook-get-conversation-index": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-index.yaml", "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-async.yaml", "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/item-id-compose.yaml", + "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/send-async.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", - "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/send-async.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file From bd1e7c3b6949f1c02282f3b4e5700af032970f74 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 19 Mar 2025 11:16:57 -0700 Subject: [PATCH 116/156] [Outlook] (notifications) Fix referenced icon in sample (#967) --- .../35-notifications/add-getall-remove.yaml | 6 ++--- snippet-extractor-output/snippets.yaml | 24 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 2bbec1504..edb03421c 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -33,7 +33,7 @@ script: { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: false }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); @@ -46,7 +46,7 @@ script: { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: true }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); @@ -60,7 +60,7 @@ script: const details = { type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, message: "This is an insight notification with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", actions: [ { actionText: "Open insight", diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 149d6a577..c6068d527 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8639,7 +8639,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: false }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -8657,7 +8657,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: true }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -9588,7 +9588,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: false }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -9606,7 +9606,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: true }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -11070,7 +11070,7 @@ const details = { type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, message: "This is an insight notification with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", actions: [ { actionText: "Open insight", @@ -12389,7 +12389,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: false }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -12407,7 +12407,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: true }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -13236,7 +13236,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: false }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -13254,7 +13254,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: true }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -13432,7 +13432,7 @@ const details = { type: Office.MailboxEnums.ItemNotificationMessageType.InsightMessage, message: "This is an insight notification with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", actions: [ { actionText: "Open insight", @@ -13495,7 +13495,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: false }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -13513,7 +13513,7 @@ { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, - icon: "icon1", + icon: "PG.Icon.16", persistent: true }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, From 9e1d205b2e122fa0ba7d739f7e1358cefc534ae8 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 19 Mar 2025 11:36:23 -0700 Subject: [PATCH 117/156] [Outlook] (item multi-select) Create code snippet for loadItemByIdAsync method (#968) * Add loadItemByIdAsync snippet * Apply suggestion from review Co-authored-by: Elizabeth Samuel --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 9 + playlists/outlook.yaml | 9 + .../get-loaded-message-properties.yaml | 154 ++++++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 24428 -> 24519 bytes snippet-extractor-output/snippets.yaml | 31 ++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 7 files changed, 205 insertions(+) create mode 100644 samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 0b4c9e5b8..5a6387387 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -793,6 +793,15 @@ group: Other Item APIs api_set: Mailbox: '1.15' +- id: outlook-other-item-apis-get-loaded-message-properties + name: 'Get properties of a loaded message (Message Compose, Message Read)' + fileName: get-loaded-message-properties.yaml + description: Gets the properties of the currently loaded message. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml + group: Other Item APIs + api_set: + Mailbox: '1.15' - id: outlook-get-set-isalldayevent name: Get and set the isAllDayEvent property (Appointment Organizer) fileName: get-set-isalldayevent.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 63c47e294..264640e55 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -793,6 +793,15 @@ group: Other Item APIs api_set: Mailbox: '1.15' +- id: outlook-other-item-apis-get-loaded-message-properties + name: 'Get properties of a loaded message (Message Compose, Message Read)' + fileName: get-loaded-message-properties.yaml + description: Gets the properties of the currently loaded message. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml + group: Other Item APIs + api_set: + Mailbox: '1.15' - id: outlook-get-set-isalldayevent name: Get and set the isAllDayEvent property (Appointment Organizer) fileName: get-set-isalldayevent.yaml diff --git a/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml b/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml new file mode 100644 index 000000000..0415aabc9 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml @@ -0,0 +1,154 @@ +order: 31 +id: outlook-other-item-apis-get-loaded-message-properties +name: 'Get properties of a loaded message (Message Compose, Message Read)' +description: Gets the properties of the currently loaded message. +host: OUTLOOK +api_set: + Mailbox: '1.15' +script: + content: | + let list; + + Office.onReady((info) => { + if (info.host === Office.HostType.Outlook) { + list = document.getElementById("selected-items"); + + // Register an event handler to identify when messages are selected. + Office.context.mailbox.addHandlerAsync(Office.EventType.SelectedItemsChanged, run, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + console.log("Event handler added."); + }); + + run(); + } + }); + + function run() { + // Clear the list of previously selected messages, if any. + clearList(list); + + // Get the subject line and sender's email address of each selected message and log them to a list in the task pane. + Office.context.mailbox.getSelectedItemsAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + const selectedItems = asyncResult.value; + + getItemInfo(selectedItems); + }); + } + + // Gets the subject line and sender's email address of each selected message. + async function getItemInfo(selectedItems) { + for (const item of selectedItems) { + addToList(item.subject); + await getSenderEmailAddress(item); + } + } + + // Gets the sender's email address of each selected message. + async function getSenderEmailAddress(item) { + const itemId = item.itemId; + await new Promise((resolve) => { + Office.context.mailbox.loadItemByIdAsync(itemId, (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + + const loadedItem = result.value; + const sender = loadedItem.from.emailAddress; + appendToListItem(sender); + + // Unload the current message before processing another selected message. + loadedItem.unloadAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + resolve(); + }); + }); + }); + } + + // Clears the list in the task pane. + function clearList(list) { + while (list.firstChild) { + list.removeChild(list.firstChild); + } + } + + // Adds an item to a list in the task pane. + function addToList(item) { + const listItem = document.createElement("li"); + listItem.textContent = item; + list.appendChild(listItem); + } + + // Appends data to the last item of the list in the task pane. + function appendToListItem(data) { + const listItem = list.lastChild; + listItem.textContent += ` (${data})`; + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get the properties of the currently loaded message.

    +

    Required mode: Message Compose, Message Read

    +
    +
    +

    Try it out

    +
      +
    1. +

      Turn on the Reading Pane in Outlook. For guidance, see Use + and configure the Reading Pane to preview messages.

      +
    2. +
    3. +

      Select a message from your mailbox. To select multiple messages, hold Ctrl (Windows) while + selecting each message. You can select a maximum of 100 messages at a time.

      +
    4. +
    +

    The subject and email address of the sender are automatically logged to the "Selected messages" section of the + task pane.

    +

    To learn more about the item multi-select feature, see Activate + your Outlook add-in on multiple messages.

    +

    Selected messages

    +
      +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 3f36c4a53710ec22de921837b7e58fdcababd6ac..82e39008fa08ab7a41be90ee12292607226ba1d8 100644 GIT binary patch delta 15310 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c6068d527..07dbe8d11 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10934,6 +10934,37 @@ console.log(result.value); }); +'Office.Mailbox#loadItemByIdAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml + + + async function getSenderEmailAddress(item) { + const itemId = item.itemId; + await new Promise((resolve) => { + Office.context.mailbox.loadItemByIdAsync(itemId, (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + + const loadedItem = result.value; + const sender = loadedItem.from.emailAddress; + appendToListItem(sender); + + // Unload the current message before processing another selected message. + loadedItem.unloadAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + resolve(); + }); + }); + }); + } 'Office.Mailbox#makeEwsRequestAsync:member(1)': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 0319b1591..d9564fc71 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -83,6 +83,7 @@ "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml", "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml", "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml", + "outlook-other-item-apis-get-loaded-message-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 42644a3a8..bdd41f2b7 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -83,6 +83,7 @@ "outlook-get-item-class-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-async.yaml", "outlook-other-item-apis-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/item-id-compose.yaml", "outlook-send-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/send-async.yaml", + "outlook-other-item-apis-get-loaded-message-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml", "outlook-get-set-isalldayevent": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml", "outlook-set-displayed-body-subject": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml" } \ No newline at end of file From 7cdbf47ed955bb7cea2f066753612df620b69b5d Mon Sep 17 00:00:00 2001 From: wandyezj Date: Fri, 21 Mar 2025 16:01:58 -0700 Subject: [PATCH 118/156] Add script to bulk edit samples (#969) --- scripts/.gitattributes | 24 ++ scripts/.gitignore | 1 + scripts/README.md | 27 ++ scripts/config/prettier.json | 8 + scripts/package-lock.json | 249 ++++++++++++++++++ scripts/package.json | 23 ++ scripts/src/RawPlaylist.ts | 3 + scripts/src/RawPlaylistItem.ts | 8 + scripts/src/RawSample.ts | 20 ++ scripts/src/SampleTypes.ts | 0 scripts/src/main.ts | 118 +++++++++ scripts/src/parseRawPlaylist.ts | 7 + scripts/src/parseRawSample.ts | 7 + scripts/src/transformCss.ts | 3 + scripts/src/transformHtml.ts | 3 + scripts/src/transformLibraries.ts | 63 +++++ scripts/src/transformSample.ts | 31 +++ scripts/src/transformTypeScript.ts | 50 ++++ scripts/src/utils/capitalize.ts | 18 ++ scripts/src/utils/decapitalize.ts | 10 + scripts/src/utils/directoryFileNames.ts | 15 ++ scripts/src/utils/equivalentLists.ts | 20 ++ scripts/src/utils/indent.ts | 46 ++++ scripts/src/utils/isFile.ts | 11 + scripts/src/utils/joinWords.ts | 12 + scripts/src/utils/lineSplit.ts | 10 + .../src/utils/listWithoutDuplicateElements.ts | 11 + scripts/src/utils/mergeWithDefaults.ts | 18 ++ scripts/src/utils/pascalCase.ts | 12 + scripts/src/utils/readFileJson.ts | 14 + scripts/src/utils/readFileList.ts | 12 + scripts/src/utils/readFileText.ts | 19 ++ scripts/src/utils/standardizeNewlines.ts | 7 + scripts/src/utils/writeFileJson.ts | 19 ++ scripts/src/utils/writeFileList.ts | 11 + scripts/src/utils/writeFileText.ts | 12 + scripts/tsconfig.json | 71 +++++ 37 files changed, 993 insertions(+) create mode 100644 scripts/.gitattributes create mode 100644 scripts/.gitignore create mode 100644 scripts/README.md create mode 100644 scripts/config/prettier.json create mode 100644 scripts/package-lock.json create mode 100644 scripts/package.json create mode 100644 scripts/src/RawPlaylist.ts create mode 100644 scripts/src/RawPlaylistItem.ts create mode 100644 scripts/src/RawSample.ts create mode 100644 scripts/src/SampleTypes.ts create mode 100644 scripts/src/main.ts create mode 100644 scripts/src/parseRawPlaylist.ts create mode 100644 scripts/src/parseRawSample.ts create mode 100644 scripts/src/transformCss.ts create mode 100644 scripts/src/transformHtml.ts create mode 100644 scripts/src/transformLibraries.ts create mode 100644 scripts/src/transformSample.ts create mode 100644 scripts/src/transformTypeScript.ts create mode 100644 scripts/src/utils/capitalize.ts create mode 100644 scripts/src/utils/decapitalize.ts create mode 100644 scripts/src/utils/directoryFileNames.ts create mode 100644 scripts/src/utils/equivalentLists.ts create mode 100644 scripts/src/utils/indent.ts create mode 100644 scripts/src/utils/isFile.ts create mode 100644 scripts/src/utils/joinWords.ts create mode 100644 scripts/src/utils/lineSplit.ts create mode 100644 scripts/src/utils/listWithoutDuplicateElements.ts create mode 100644 scripts/src/utils/mergeWithDefaults.ts create mode 100644 scripts/src/utils/pascalCase.ts create mode 100644 scripts/src/utils/readFileJson.ts create mode 100644 scripts/src/utils/readFileList.ts create mode 100644 scripts/src/utils/readFileText.ts create mode 100644 scripts/src/utils/standardizeNewlines.ts create mode 100644 scripts/src/utils/writeFileJson.ts create mode 100644 scripts/src/utils/writeFileList.ts create mode 100644 scripts/src/utils/writeFileText.ts create mode 100644 scripts/tsconfig.json diff --git a/scripts/.gitattributes b/scripts/.gitattributes new file mode 100644 index 000000000..638b85721 --- /dev/null +++ b/scripts/.gitattributes @@ -0,0 +1,24 @@ +* text=auto +.gitattributes text +*.css text eol=lf +*.html text eol=lf +*.js text eol=lf +*.json text eol=lf +*.xml text eol=lf +*.kql text eol=lf +*.lock text eol=lf +*.md text eol=lf +*.ts text eol=lf +*.tsx text eol=lf +*.txt text eol=lf +*.yaml text eol=lf +*.yml text eol=lf +.npmrc text eol=lf + +*.cs text eol=crlf +*.sln text eol=crlf +*.csproj text eol=crlf + + +*.png binary +*.jpg binary \ No newline at end of file diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 000000000..dbf082131 --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1 @@ +node_modules/* \ No newline at end of file diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 000000000..be81caa85 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,27 @@ +# Scripts + +These scripts used to help maintain this repository. + +## Setup + +> npm install + +## Edit Script + +This script is used to bulk edit samples. + +To run this script: + +> npm run edit + +The edit targets all prod samples listed in `playlists-prod` and all default samples. + +Under the src folder the transform* files contain the specific JavaScript transforms that will run. + +To develop new transforms: + +1. Make changes the transform* functions +2. Run the transforms (npm run edit) +3. Check using the git diff to make sure the changes are what you expect +4. If you don't like the changes run the following in the **samples** folder: + > git checkout -- * diff --git a/scripts/config/prettier.json b/scripts/config/prettier.json new file mode 100644 index 000000000..f485b3e4c --- /dev/null +++ b/scripts/config/prettier.json @@ -0,0 +1,8 @@ +{ + "trailingComma": "all", + "arrowParens": "always", + "endOfLine": "lf", + "proseWrap": "preserve", + "printWidth": 100, + "tabWidth": 4 +} \ No newline at end of file diff --git a/scripts/package-lock.json b/scripts/package-lock.json new file mode 100644 index 000000000..25f3bb4a1 --- /dev/null +++ b/scripts/package-lock.json @@ -0,0 +1,249 @@ +{ + "name": "scripts", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "scripts", + "version": "0.0.0", + "license": "Unlicense", + "devDependencies": { + "@types/node": "^18.19.80", + "prettier": "^3.5.3", + "ts-node": "^10.9.2", + "typescript": "^5.8.2", + "yaml": "^2.7.0" + }, + "engines": { + "node": ">=18.0", + "npm": ">=10.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.80", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.80.tgz", + "integrity": "sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + } +} diff --git a/scripts/package.json b/scripts/package.json new file mode 100644 index 000000000..455d76af6 --- /dev/null +++ b/scripts/package.json @@ -0,0 +1,23 @@ +{ + "name": "scripts", + "version": "0.0.0", + "description": "Scripts to transform samples", + "private": true, + "engines": { + "node": ">=18.0", + "npm": ">=10.0" + }, + "scripts": { + "edit": "ts-node src/main.ts", + "style": "prettier --config ./config/prettier.json --write \"@(src|test|scripts)/**/*.@(ts|tsx|js|md|html|css|json)\"" + }, + "author": "wandyezj", + "license": "Unlicense", + "devDependencies": { + "@types/node": "^18.19.80", + "prettier": "^3.5.3", + "ts-node": "^10.9.2", + "typescript": "^5.8.2", + "yaml": "^2.7.0" + } +} diff --git a/scripts/src/RawPlaylist.ts b/scripts/src/RawPlaylist.ts new file mode 100644 index 000000000..0f3f4495c --- /dev/null +++ b/scripts/src/RawPlaylist.ts @@ -0,0 +1,3 @@ +import type { RawPlaylistItem } from "./RawPlaylistItem"; + +export type RawPlaylist = RawPlaylistItem[]; diff --git a/scripts/src/RawPlaylistItem.ts b/scripts/src/RawPlaylistItem.ts new file mode 100644 index 000000000..0e9cc280f --- /dev/null +++ b/scripts/src/RawPlaylistItem.ts @@ -0,0 +1,8 @@ +/** + * YAML + */ +export interface RawPlaylistItem { + name: string; + description: string; + rawUrl: string; +} diff --git a/scripts/src/RawSample.ts b/scripts/src/RawSample.ts new file mode 100644 index 000000000..147d8d4c4 --- /dev/null +++ b/scripts/src/RawSample.ts @@ -0,0 +1,20 @@ +/** + * YAML + */ +export interface RawSample { + name: string; + description: string; + script: { + content: string; + language: string; + }; + template: { + content: string; + language: string; + }; + style: { + content: string; + language: string; + }; + libraries: string; +} diff --git a/scripts/src/SampleTypes.ts b/scripts/src/SampleTypes.ts new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/src/main.ts b/scripts/src/main.ts new file mode 100644 index 000000000..d03c0eb22 --- /dev/null +++ b/scripts/src/main.ts @@ -0,0 +1,118 @@ +// +// main entry point for the application +// + +import * as fs from "fs"; +import { readFileText } from "./utils/readFileText"; +import { parseRawPlaylist } from "./parseRawPlaylist"; +import { parseRawSample } from "./parseRawSample"; +import { transformRawSample } from "./transformSample"; +import yaml from "yaml"; + +console.log("Start edit sample yaml"); + +// (1) Read the playlist YAML file from sample +// (2) Read each sample YAML file +// (3) Pase the YAML file +// (4) Transform the YAML file +// (5) Write the YAML file over the original file + +const sampleDirectory = "../samples"; +const playlistDirectory = "../playlists-prod"; + +// +// Get sample files +// + +const playlistFiles = fs.readdirSync(playlistDirectory); +console.log(`Playlist files: + ${playlistFiles.join("\n ")}`); + +const playlists = playlistFiles.map((file) => { + const filePath = `${playlistDirectory}/${file}`; + const fileText = readFileText(filePath); + const playlist = parseRawPlaylist(fileText); + return playlist; +}); + +const playlistSamplePaths = playlists + .map((playlist) => { + const sampleFilePaths = playlist.map((item) => { + const { rawUrl } = item; + + // flip raw url to the file path + // https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/project/basics/basic-common-api-call.yaml + const filePath = rawUrl.replace( + "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/", + "../", + ); + return filePath; + }); + + return sampleFilePaths; + }) + .flat(); + +const defaultSamplePaths = fs.readdirSync(sampleDirectory).map((file) => { + const filePath = `${sampleDirectory}/${file}/default.yaml`; + return filePath; +}); + +const samplePaths = [...defaultSamplePaths, ...playlistSamplePaths]; + +console.log(`Sample files: + ${samplePaths.join("\n ")}`); + +// Check that all of the sample files exist +const checkSampleFiles = samplePaths.map((path) => { + const present = fs.existsSync(path); + return { present, path }; +}); + +const missingSampleFiles = checkSampleFiles + .filter(({ present }) => !present) + .map(({ path }) => path); + +if (missingSampleFiles.length > 0) { + console.log("=".repeat(80)); + console.error(`Missing sample files: + ${missingSampleFiles.join("\n")}`); +} + +// +// Transform each sample file +// +console.log("=".repeat(80)); +console.log("Transforming sample files..."); +const transformSampleSuccess = samplePaths.map((path) => { + console.log(`${path}`); + let success = true; + try { + const fileText = readFileText(path); + const sample = parseRawSample(fileText); + const transformedSample = transformRawSample(path, sample); + + const transformedSampleYaml = yaml.stringify(transformedSample, { + indent: 4, + singleQuote: true, + }); + + fs.writeFileSync(path, transformedSampleYaml); + console.log(`success`); + } catch (error) { + console.error(`ERROR\n${error}`); + success = false; + } + + return { + path, + success, + }; +}); + +const transformSampleErrors = transformSampleSuccess.filter(({ success }) => !success); +if (transformSampleErrors.length > 0) { + console.log("=".repeat(80)); + console.log(`Error: Transforming sample files: + ${transformSampleErrors.map((x) => x.path).join("\n ")}`); +} diff --git a/scripts/src/parseRawPlaylist.ts b/scripts/src/parseRawPlaylist.ts new file mode 100644 index 000000000..da3fd72a1 --- /dev/null +++ b/scripts/src/parseRawPlaylist.ts @@ -0,0 +1,7 @@ +import yaml from "yaml"; +import type { RawPlaylist } from "./RawPlaylist"; + +export function parseRawPlaylist(data: string): RawPlaylist { + const items = yaml.parse(data) as RawPlaylist; + return items; +} diff --git a/scripts/src/parseRawSample.ts b/scripts/src/parseRawSample.ts new file mode 100644 index 000000000..d8765c7c6 --- /dev/null +++ b/scripts/src/parseRawSample.ts @@ -0,0 +1,7 @@ +import yaml from "yaml"; +import type { RawSample } from "./RawSample"; + +export function parseRawSample(data: string): RawSample { + const rawSample = yaml.parse(data) as RawSample; + return rawSample; +} diff --git a/scripts/src/transformCss.ts b/scripts/src/transformCss.ts new file mode 100644 index 000000000..c52849def --- /dev/null +++ b/scripts/src/transformCss.ts @@ -0,0 +1,3 @@ +export function transformCss(data: string): string { + return data; +} diff --git a/scripts/src/transformHtml.ts b/scripts/src/transformHtml.ts new file mode 100644 index 000000000..4b0449df7 --- /dev/null +++ b/scripts/src/transformHtml.ts @@ -0,0 +1,3 @@ +export function transformHtml(data: string): string { + return data.replace(/\n\n/g, "\n").trim(); +} diff --git a/scripts/src/transformLibraries.ts b/scripts/src/transformLibraries.ts new file mode 100644 index 000000000..1b6c34511 --- /dev/null +++ b/scripts/src/transformLibraries.ts @@ -0,0 +1,63 @@ +/** + * Transform library references. + * - Remove jquery & core-js + * - Reference CDN for office.js types + * - Directly reference unpkg for npm packages + * @returns transformed libraries + */ +export function transformLibraries(data: string): string { + function getLinkFromPackageReference(packageReference: string): string | undefined { + const reg = /^(?.*)@(?\d+\.\d+\.\d+)\/(?.*)$/; + const groups = reg.exec(packageReference)?.groups; + if (groups === undefined) { + return packageReference; + } + + const { packageName, packageVersion, packageFile } = groups; + + return `https://unpkg.com/${packageName}@${packageVersion}/${packageFile}`; + } + + const cleanLibraries = data + .split("\n") + .map((line) => { + line = line.trim(); + + // Empty line + if (line === "") { + return ""; + } + + // Comment + if (line.startsWith("//") || line.startsWith("#")) { + return line; + } + + // direct reference + if (line.startsWith("https://") || line.startsWith("http://")) { + return line; + } + + // office.js + if (line === "@types/office-js") { + return `https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts`; + } + + // Remove packages + const packageNamesIgnore = ["jquery", "@types/jquery", "core-js", "@types/core-js"]; + const isExcluded = packageNamesIgnore.some((packageName) => + line.startsWith(packageName), + ); + if (isExcluded) { + return undefined; + } + + // npm reference + const link = getLinkFromPackageReference(line); + return link; + }) + .filter((line) => line !== undefined) as string[]; + + const cleanData = cleanLibraries.join("\n").replace(/\n\n\n/, "\n\n"); + return cleanData; +} diff --git a/scripts/src/transformSample.ts b/scripts/src/transformSample.ts new file mode 100644 index 000000000..643b9fe22 --- /dev/null +++ b/scripts/src/transformSample.ts @@ -0,0 +1,31 @@ +import { RawSample } from "./RawSample"; +import { transformCss } from "./transformCss"; +import { transformHtml } from "./transformHtml"; +import { transformLibraries } from "./transformLibraries"; +import { transformTypeScript } from "./transformTypeScript"; + +export function transformRawSample(id: string, rawSample: RawSample): RawSample { + const typescriptRaw = rawSample?.script?.content; + const htmlRaw = rawSample?.template?.content; + const cssRaw = rawSample?.style?.content; + const librariesRaw = rawSample?.libraries; + + if ([typescriptRaw, htmlRaw, cssRaw, librariesRaw].some((content) => content === undefined)) { + console.log(`ERROR: Empty content [${rawSample.name}] ${id}`); + // happens for custom functions + return rawSample; + } + + const typescriptContent = transformTypeScript(typescriptRaw).trim(); + const htmlContent = transformHtml(htmlRaw).trim(); + const cssContent = transformCss(cssRaw).trim(); + const librariesContent = transformLibraries(librariesRaw).trim(); + + // Update the raw sample with the transformed content + rawSample.script.content = typescriptContent; + rawSample.template.content = htmlContent; + rawSample.style.content = cssContent; + rawSample.libraries = librariesContent; + + return rawSample; +} diff --git a/scripts/src/transformTypeScript.ts b/scripts/src/transformTypeScript.ts new file mode 100644 index 000000000..1a8e025b2 --- /dev/null +++ b/scripts/src/transformTypeScript.ts @@ -0,0 +1,50 @@ +/** + * Transform TypeScript code. + * - remove JQuery handlers + * - Add Office on ready. + */ +export function transformTypeScript(data: string): string { + // remove jquery + // $("#id").on("click", () => tryCatch(handler));`; + const jqueryReg = /^\$\("#(?.*)"\)\.on\("click", \(\) => tryCatch\((?.*)\)\);$/; + + // Outlook specific + // $("#id").on("click", handler); + const jqueryAlt = /^\$\("#(?.*)"\)\.on\("click", (?.*)\);$/; + // $("#id").click(handler); + const jqueryAlt2 = /^\$\("#(?.*)"\)\.click\((?.*)\);$/; + + const cleanData = data + .split("\n") + .map((line) => { + const trimLine = line.trim(); + + if (trimLine.startsWith("$")) { + // JQuery + const match = jqueryReg.exec(trimLine); + if (match !== null) { + const groups = match?.groups; + if (groups) { + const { id, handler } = groups; + return `document.getElementById("${id}").addEventListener("click", () => tryCatch(${handler}));`; + } + } + + const matchAlt = jqueryAlt.exec(trimLine) || jqueryAlt2.exec(trimLine); + if (matchAlt !== null) { + const groups = matchAlt?.groups; + if (groups) { + const { id, handler } = groups; + return `document.getElementById("${id}").addEventListener("click", ${handler});`; + } + } + } + + return line; + }) + .join("\n"); + + const code = cleanData; + + return code; +} diff --git a/scripts/src/utils/capitalize.ts b/scripts/src/utils/capitalize.ts new file mode 100644 index 000000000..30198b274 --- /dev/null +++ b/scripts/src/utils/capitalize.ts @@ -0,0 +1,18 @@ +/** + * uppercases the first character in a string. + * in the case that the first character in the string can not be upper cased (for example a white space character or an empty string) the string is unmodified. + * @param word - string to capitalize + * @returns the string with it's first character upper cased. + * + */ +export function capitalize(word: string): string { + if (!word || word.length === 0) { + return word; + } + + if (word.length === 1) { + return word.toUpperCase(); + } + + return word.substring(0, 1).toUpperCase() + word.substring(1); +} diff --git a/scripts/src/utils/decapitalize.ts b/scripts/src/utils/decapitalize.ts new file mode 100644 index 000000000..35c7ed38c --- /dev/null +++ b/scripts/src/utils/decapitalize.ts @@ -0,0 +1,10 @@ +/** + * decapitalize a string + * @param string - string to decapitalize + */ +export function decapitalize(string: string): string { + if (string.length === 0) { + return string; + } + return string.charAt(0).toLowerCase() + string.slice(1); +} diff --git a/scripts/src/utils/directoryFileNames.ts b/scripts/src/utils/directoryFileNames.ts new file mode 100644 index 000000000..f05b3e725 --- /dev/null +++ b/scripts/src/utils/directoryFileNames.ts @@ -0,0 +1,15 @@ +import { readdirSync } from "fs"; +import { isFile } from "./isFile"; +import { join } from "path"; + +/** + * retrieves the file names present in the directory + * @param path - path of the directory to get the files in + * @returns list of file names in the directory + */ +export function directoryFileNames(path: string): string[] { + const all = readdirSync(path); + const files = all.filter((file: string) => isFile(join(path, file))); + // paths are sorted because determinism is convenient for testing and reproduction of issues. + return files.sort(); +} diff --git a/scripts/src/utils/equivalentLists.ts b/scripts/src/utils/equivalentLists.ts new file mode 100644 index 000000000..8cce71c17 --- /dev/null +++ b/scripts/src/utils/equivalentLists.ts @@ -0,0 +1,20 @@ +/** + * checks if two lists have the same values in the same order using the default comparison operator. + * + * @param a - a list + * @param b - a list + * @returns true if both lists have the same values in the same order. + */ +export function equivalentLists(a: string[], b: string[]): boolean { + if (a.length !== b.length) { + return false; + } + + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + + return true; +} diff --git a/scripts/src/utils/indent.ts b/scripts/src/utils/indent.ts new file mode 100644 index 000000000..abbb1f32a --- /dev/null +++ b/scripts/src/utils/indent.ts @@ -0,0 +1,46 @@ +import { lineSplit } from "./lineSplit"; +import { mergeWithDefaults } from "./mergeWithDefaults"; + +/** + * describe a single level of indent + */ +export interface IndentOptions { + /** + * the value to use for the indent + * default of four spaces + */ + value: string; + + /** + * the number of the value to use for a single level of indent + * default of 1 + */ + count: number; + + /** + * the number of times to indent + * default of 1 + */ + level: number; +} + +const defaultIndent: IndentOptions = { + value: " ", + count: 4, + level: 1, +}; + +/** + * indent all lines with the specified level of indent. + * @param string - string to indent + * @param indent - indent options + * @returns a version of the string indented according to the indent options + */ +export function indent(string: string, indent: Partial = defaultIndent): string { + const settings: IndentOptions = mergeWithDefaults(indent, defaultIndent); + + const indentString = settings.value.repeat(settings.count).repeat(settings.level); + + // this also indents any empty lines + return indentString + lineSplit(string).join(`\n${indentString}`); +} diff --git a/scripts/src/utils/isFile.ts b/scripts/src/utils/isFile.ts new file mode 100644 index 000000000..d38c56869 --- /dev/null +++ b/scripts/src/utils/isFile.ts @@ -0,0 +1,11 @@ +import { lstatSync } from "fs"; + +/** + * is the path a file? + * + * @param path - path to test + * @returns true when the path is a file + */ +export function isFile(path: string): boolean { + return lstatSync(path).isFile(); +} diff --git a/scripts/src/utils/joinWords.ts b/scripts/src/utils/joinWords.ts new file mode 100644 index 000000000..be3b3b81d --- /dev/null +++ b/scripts/src/utils/joinWords.ts @@ -0,0 +1,12 @@ +import { capitalize } from "./capitalize"; + +/** + * splits on whitespaces and -, capitalizes words, and joins them + * @param words + */ +export function joinWords(words: string): string { + return words + .split(/(\s|-)/) + .map((word) => capitalize(word)) + .join(""); +} diff --git a/scripts/src/utils/lineSplit.ts b/scripts/src/utils/lineSplit.ts new file mode 100644 index 000000000..0332f14d9 --- /dev/null +++ b/scripts/src/utils/lineSplit.ts @@ -0,0 +1,10 @@ +import { standardizeNewlines } from "./standardizeNewlines"; + +/** + * split a string into a list of lines + * @param string - string to split + * @returns list of the individual lines in the string + */ +export function lineSplit(string: string): string[] { + return standardizeNewlines(string).split("\n"); +} diff --git a/scripts/src/utils/listWithoutDuplicateElements.ts b/scripts/src/utils/listWithoutDuplicateElements.ts new file mode 100644 index 000000000..da57f3363 --- /dev/null +++ b/scripts/src/utils/listWithoutDuplicateElements.ts @@ -0,0 +1,11 @@ +/** + * creates list without duplicates from an original list, comparing using the default comparison operator, keeping only the first occurrence. + * @param original - list to + * @returns new list without the duplicates present in the original + */ +export function listWithoutDuplicateElements(original: readonly T[]): T[] { + // only take the first item + return original.filter( + (value: T, index: number, array: readonly T[]) => array.indexOf(value) === index, + ); +} diff --git a/scripts/src/utils/mergeWithDefaults.ts b/scripts/src/utils/mergeWithDefaults.ts new file mode 100644 index 000000000..859a83758 --- /dev/null +++ b/scripts/src/utils/mergeWithDefaults.ts @@ -0,0 +1,18 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/** + * create a new object that ensure all default properties are present + * @param original - original object + * @param defaults - default object + */ +export function mergeWithDefaults(original: Partial, defaults: T): T { + const o: any = original; + const d: any = defaults; + const merge: any = {}; //shallowCopyOwnProperties(original); + + Object.getOwnPropertyNames(defaults).forEach((name) => { + merge[name] = Object.getOwnPropertyDescriptor(o, name) ? o[name] : d[name]; + }); + + return merge; +} diff --git a/scripts/src/utils/pascalCase.ts b/scripts/src/utils/pascalCase.ts new file mode 100644 index 000000000..715c1bcb2 --- /dev/null +++ b/scripts/src/utils/pascalCase.ts @@ -0,0 +1,12 @@ +import { joinWords } from "./joinWords"; +import { capitalize } from "./capitalize"; + +/** + * PascalCase + * splits on spaces and capitalizes words in between + * @param string - string to pascalCase + */ +export function pascalCase(string: string): string { + string = joinWords(string); + return capitalize(string); +} diff --git a/scripts/src/utils/readFileJson.ts b/scripts/src/utils/readFileJson.ts new file mode 100644 index 000000000..39f722bc7 --- /dev/null +++ b/scripts/src/utils/readFileJson.ts @@ -0,0 +1,14 @@ +import { readFileText } from "./readFileText"; + +/** + * Read a file that contains JSON and turn it into an object + * + * Note: no validation is done on the data. + * + * @param path - path to the JSON file + */ +export function readFileJson(path: string): T { + const data: string = readFileText(path); + const object: T = JSON.parse(data); + return object; +} diff --git a/scripts/src/utils/readFileList.ts b/scripts/src/utils/readFileList.ts new file mode 100644 index 000000000..05e5ce413 --- /dev/null +++ b/scripts/src/utils/readFileList.ts @@ -0,0 +1,12 @@ +import { lineSplit } from "./lineSplit"; +import { listWithoutDuplicateElements } from "./listWithoutDuplicateElements"; +import { readFileText } from "./readFileText"; + +/** + * reads lines from a file and removes the ones that are whitespace. + * @param path - path to read the file from + */ +export function readFileList(path: string): string[] { + const data: string = readFileText(path); + return listWithoutDuplicateElements(lineSplit(data)); +} diff --git a/scripts/src/utils/readFileText.ts b/scripts/src/utils/readFileText.ts new file mode 100644 index 000000000..a9060c643 --- /dev/null +++ b/scripts/src/utils/readFileText.ts @@ -0,0 +1,19 @@ +import { standardizeNewlines } from "./standardizeNewlines"; +import { readFileSync } from "fs"; + +/** + * Read utf-8 file and transform to standard new lines. + * @param path - path of the file to read + */ +export function readFileText(path: string): string { + let string: string = readFileSync(path, "utf-8"); + + // remove the BOM + // https://en.wikipedia.org/wiki/Byte_order_mark + // The BOM is generally unexpected in text files and causes JSON.parse to fail. + // U+FEFF is the Byte Order Mark for UTF-8 + string = string.replace(/^\uFEFF/, ""); + + const clean = standardizeNewlines(string); + return clean; +} diff --git a/scripts/src/utils/standardizeNewlines.ts b/scripts/src/utils/standardizeNewlines.ts new file mode 100644 index 000000000..6bc516e82 --- /dev/null +++ b/scripts/src/utils/standardizeNewlines.ts @@ -0,0 +1,7 @@ +/** + * standardize newlines to proper unix line endings + * @param string - string to standardize + */ +export function standardizeNewlines(string: string): string { + return string.replace(/\r/gm, ""); +} diff --git a/scripts/src/utils/writeFileJson.ts b/scripts/src/utils/writeFileJson.ts new file mode 100644 index 000000000..1b35c6cb4 --- /dev/null +++ b/scripts/src/utils/writeFileJson.ts @@ -0,0 +1,19 @@ +import { writeFileText } from "./writeFileText"; + +/** + * Transform a data object to a string and write it to the specified path. + * @param path - path to write the file to + * @param object - object to transform to JSON and write + */ +export function writeFileJson(path: string, object: object): void { + const json: string = JSON.stringify(object, undefined, 4); + + // add new line at end of file if it doesn't exist + let data = json; + if (!data.endsWith("\n")) { + data += "\n"; + } + + // write file + writeFileText(path, data); +} diff --git a/scripts/src/utils/writeFileList.ts b/scripts/src/utils/writeFileList.ts new file mode 100644 index 000000000..317655174 --- /dev/null +++ b/scripts/src/utils/writeFileList.ts @@ -0,0 +1,11 @@ +import { writeFileText } from "./writeFileText"; + +/** + * write a list to a file + * @param path - path to write the file to + * @param list - string list to write to the file + */ +export function writeFileList(path: string, list: readonly string[]): void { + const joined: string = list.join("\n"); + writeFileText(path, joined); +} diff --git a/scripts/src/utils/writeFileText.ts b/scripts/src/utils/writeFileText.ts new file mode 100644 index 000000000..7ca1fb6eb --- /dev/null +++ b/scripts/src/utils/writeFileText.ts @@ -0,0 +1,12 @@ +import { writeFileSync } from "fs"; +import { standardizeNewlines } from "./standardizeNewlines"; + +/** + * write data to path with standard newlines. + * @param path - file path + * @param data - string data to write + */ +export function writeFileText(path: string, string: string): void { + const clean = standardizeNewlines(string); + writeFileSync(path, clean); +} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 000000000..937ffabe1 --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,71 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + "moduleResolution": "node", + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + //"jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */, + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +} \ No newline at end of file From c9ed7652d09491b40bc32c2f2601a92576aadaed Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 24 Mar 2025 10:38:42 -0700 Subject: [PATCH 119/156] [All hosts] Remove library dependencies from snippets (#970) * Run script to remove library dependencies * Run yarn script --- .../excel/01-basics/basic-api-call-es5.yaml | 21 +- samples/excel/01-basics/basic-api-call.yaml | 19 +- .../01-basics/basic-common-api-call.yaml | 23 +- .../excel/10-chart/chart-axis-formatting.yaml | 26 +- samples/excel/10-chart/chart-axis.yaml | 34 +-- .../excel/10-chart/chart-bubble-chart.yaml | 28 +- .../10-chart/chart-create-several-charts.yaml | 48 ++-- samples/excel/10-chart/chart-data-source.yaml | 24 +- samples/excel/10-chart/chart-data-table.yaml | 26 +- samples/excel/10-chart/chart-formatting.yaml | 26 +- samples/excel/10-chart/chart-legend.yaml | 24 +- samples/excel/10-chart/chart-point.yaml | 30 +-- .../excel/10-chart/chart-series-markers.yaml | 22 +- .../10-chart/chart-series-plotorder.yaml | 24 +- samples/excel/10-chart/chart-series.yaml | 25 +- .../excel/10-chart/chart-title-format.yaml | 31 +-- samples/excel/10-chart/chart-trendlines.yaml | 33 +-- .../excel/10-chart/create-doughnut-chart.yaml | 24 +- samples/excel/12-comment/comment-basics.yaml | 28 +- .../excel/12-comment/comment-mentions.yaml | 20 +- samples/excel/12-comment/comment-replies.yaml | 28 +- .../excel/12-comment/comment-resolution.yaml | 24 +- .../conditional-formatting-advanced.yaml | 30 +-- .../conditional-formatting-basic.yaml | 38 ++- .../16-custom-functions/basic-function.yaml | 2 +- .../streaming-function.yaml | 2 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 29 +- .../test-xml-for-unique-namespace.yaml | 27 +- .../data-types-entity-attribution.yaml | 24 +- .../data-types-entity-icons.yaml | 18 +- .../data-types-entity-values.yaml | 20 +- .../data-types-error-values.yaml | 22 +- .../data-types-formatted-number.yaml | 24 +- .../20-data-types/data-types-references.yaml | 26 +- .../20-data-types/data-types-web-image.yaml | 31 +-- .../22-data-validation/data-validation.yaml | 28 +- .../excel/26-document/custom-properties.yaml | 28 +- .../26-document/get-file-in-slices-async.yaml | 26 +- samples/excel/26-document/properties.yaml | 36 +-- .../30-events/data-change-event-details.yaml | 23 +- samples/excel/30-events/data-changed.yaml | 22 +- .../30-events/event-column-and-row-sort.yaml | 34 +-- .../event-worksheet-single-click.yaml | 17 +- .../30-events/events-chart-activated.yaml | 24 +- ...vents-chartcollection-added-activated.yaml | 22 +- .../events-comment-event-handler.yaml | 28 +- .../30-events/events-disable-events.yaml | 22 +- .../30-events/events-formula-changed.yaml | 22 +- .../excel/30-events/events-table-changed.yaml | 40 +-- .../events-tablecollection-changed.yaml | 33 +-- .../30-events/events-workbook-activated.yaml | 19 +- ...nts-workbook-and-worksheet-collection.yaml | 36 +-- .../events-worksheet-protection.yaml | 22 +- samples/excel/30-events/events-worksheet.yaml | 33 +-- .../30-events/selection-changed-events.yaml | 29 +- .../create-and-remove-named-item.yaml | 29 +- .../34-named-item/update-named-item.yaml | 21 +- .../pivottable-calculations.yaml | 29 +- .../pivottable-create-and-modify.yaml | 36 +-- .../pivottable-filters-and-summaries.yaml | 40 +-- .../pivottable-get-pivottables.yaml | 27 +- .../pivottable-pivotfilters.yaml | 36 +-- .../38-pivottable/pivottable-pivotlayout.yaml | 39 ++- .../38-pivottable/pivottable-refresh.yaml | 25 +- .../38-pivottable/pivottable-slicer.yaml | 35 +-- .../38-pivottable/pivottable-source-data.yaml | 24 +- samples/excel/42-range/cell-properties.yaml | 24 +- samples/excel/42-range/dynamic-arrays.yaml | 28 +- samples/excel/42-range/formatting.yaml | 28 +- .../42-range/insert-delete-clear-range.yaml | 30 +-- samples/excel/42-range/outline.yaml | 32 +-- samples/excel/42-range/precedents.yaml | 32 +-- samples/excel/42-range/range-areas.yaml | 31 +-- samples/excel/42-range/range-auto-fill.yaml | 28 +- samples/excel/42-range/range-copyfrom.yaml | 32 +-- samples/excel/42-range/range-dependents.yaml | 28 +- .../42-range/range-direct-dependents.yaml | 26 +- samples/excel/42-range/range-find.yaml | 24 +- .../excel/42-range/range-get-range-edge.yaml | 31 +-- samples/excel/42-range/range-hyperlink.yaml | 30 +-- .../excel/42-range/range-merged-ranges.yaml | 24 +- .../excel/42-range/range-relationships.yaml | 32 +-- .../42-range/range-remove-duplicates.yaml | 28 +- .../42-range/range-text-orientation.yaml | 28 +- samples/excel/42-range/selected-range.yaml | 25 +- samples/excel/42-range/set-get-values.yaml | 45 ++-- samples/excel/42-range/style.yaml | 42 +-- samples/excel/42-range/used-range.yaml | 28 +- .../44-shape/shape-create-and-delete.yaml | 26 +- samples/excel/44-shape/shape-groups.yaml | 26 +- samples/excel/44-shape/shape-images.yaml | 24 +- samples/excel/44-shape/shape-lines.yaml | 34 +-- .../excel/44-shape/shape-move-and-order.yaml | 30 +-- samples/excel/44-shape/shape-textboxes.yaml | 28 +- .../add-rows-and-columns-to-a-table.yaml | 30 +-- .../46-table/convert-range-to-table.yaml | 26 +- samples/excel/46-table/create-table.yaml | 23 +- samples/excel/46-table/filter-data.yaml | 28 +- samples/excel/46-table/formatting.yaml | 26 +- .../excel/46-table/get-data-from-table.yaml | 28 +- ...get-visible-range-of-a-filtered-table.yaml | 32 +-- samples/excel/46-table/import-json-data.yaml | 24 +- samples/excel/46-table/resize-table.yaml | 22 +- samples/excel/46-table/sort-data.yaml | 26 +- .../create-get-change-delete-settings.yaml | 25 +- .../excel/50-workbook/create-workbook.yaml | 19 +- .../50-workbook/culture-info-date-time.yaml | 26 +- samples/excel/50-workbook/culture-info.yaml | 28 +- .../excel/50-workbook/data-protection.yaml | 36 +-- .../workbook-built-in-functions.yaml | 25 +- .../50-workbook/workbook-calculation.yaml | 35 +-- .../50-workbook/workbook-get-active-cell.yaml | 21 +- .../workbook-insert-external-worksheets.yaml | 19 +- .../50-workbook/workbook-save-and-close.yaml | 25 +- .../excel/54-worksheet/active-worksheet.yaml | 26 +- .../add-delete-rename-move-worksheet.yaml | 29 +- samples/excel/54-worksheet/gridlines.yaml | 26 +- .../excel/54-worksheet/list-worksheets.yaml | 23 +- ...rence-worksheets-by-relative-position.yaml | 28 +- samples/excel/54-worksheet/tab-color.yaml | 27 +- .../54-worksheet/worksheet-auto-filter.yaml | 34 +-- .../excel/54-worksheet/worksheet-copy.yaml | 22 +- .../54-worksheet/worksheet-find-all.yaml | 22 +- .../54-worksheet/worksheet-freeze-panes.yaml | 32 +-- .../54-worksheet/worksheet-page-layout.yaml | 32 +-- .../54-worksheet/worksheet-range-cell.yaml | 32 +-- .../54-worksheet/worksheet-visibility.yaml | 26 +- .../90-scenarios/currency-converter.yaml | 23 +- .../90-scenarios/multiple-property-set.yaml | 26 +- .../performance-optimization.yaml | 34 +-- .../excel/90-scenarios/report-generation.yaml | 19 +- .../90-scenarios/working-with-dates.yaml | 29 +- .../excel/99-just-for-fun/color-wheel.yaml | 25 +- samples/excel/99-just-for-fun/gradient.yaml | 26 +- .../99-just-for-fun/path-finder-game.yaml | 25 +- samples/excel/99-just-for-fun/patterns.yaml | 26 +- samples/excel/99-just-for-fun/tetrominos.yaml | 18 +- samples/excel/default.yaml | 20 +- samples/onenote/default.yaml | 20 +- .../10-roaming-settings/roaming-settings.yaml | 25 +- .../load-set-get-save.yaml | 29 +- .../20-item-body/add-inline-base64-image.yaml | 19 +- .../20-item-body/append-text-on-send.yaml | 19 +- .../outlook/20-item-body/get-body-format.yaml | 19 +- .../20-item-body/get-selected-data.yaml | 19 +- .../20-item-body/prepend-text-on-send.yaml | 19 +- .../prepend-text-to-item-body.yaml | 19 +- .../20-item-body/replace-selected-text.yaml | 19 +- .../25-item-save-and-close/close-async.yaml | 21 +- .../outlook/25-item-save-and-close/close.yaml | 23 +- .../outlook/25-item-save-and-close/save.yaml | 23 +- .../get-all-attendees.yaml | 17 +- .../get-cc-message-read.yaml | 19 +- .../get-from-message-compose.yaml | 21 +- .../get-from-message-read.yaml | 19 +- ...tional-attendees-appointment-attendee.yaml | 19 +- .../get-organizer-appointment-attendee.yaml | 19 +- .../get-organizer-appointment-organizer.yaml | 19 +- ...quired-attendees-appointment-attendee.yaml | 19 +- .../get-sender-message-read.yaml | 19 +- .../get-set-bcc-message-compose.yaml | 21 +- .../get-set-cc-message-compose.yaml | 21 +- ...ional-attendees-appointment-organizer.yaml | 21 +- ...uired-attendees-appointment-organizer.yaml | 21 +- .../get-set-to-message-compose.yaml | 21 +- .../get-to-message-read.yaml | 19 +- .../35-notifications/add-getall-remove.yaml | 35 +-- .../40-attachments/attachments-compose.yaml | 27 +- .../get-attachment-content.yaml | 21 +- .../40-attachments/get-attachments-read.yaml | 23 +- .../45-categories/work-with-categories.yaml | 23 +- .../work-with-master-categories.yaml | 23 +- .../50-recurrence/get-recurrence-read.yaml | 19 +- .../outlook/50-recurrence/get-series-id.yaml | 19 +- ...-set-recurrence-appointment-organizer.yaml | 21 +- .../display-existing-appointment.yaml | 25 +- .../display-existing-message.yaml | 27 +- .../display-new-appointment.yaml | 23 +- .../55-display-items/display-new-message.yaml | 25 +- .../55-display-items/display-reply-forms.yaml | 27 +- .../display-reply-with-attachments.yaml | 25 +- .../sensitivity-label.yaml | 21 +- .../sensitivity-labels-catalog.yaml | 21 +- .../get-shared-properties.yaml | 21 +- .../get-internet-headers-message-read.yaml | 18 +- ...stom-internet-headers-message-compose.yaml | 22 +- .../outlook/75-regex-matches/contextual.yaml | 25 +- .../get-icaluid-as-attendee.yaml | 23 +- .../get-icaluid-as-organizer.yaml | 21 +- .../ids-and-urls.yaml | 23 +- .../make-ews-request-async.yaml | 23 +- ...-message-using-make-ews-request-async.yaml | 23 +- .../user-callback-token.yaml | 23 +- .../user-identity-token.yaml | 23 +- .../delay-message-delivery.yaml | 29 +- ...d-remove-enhancedlocation-appointment.yaml | 22 +- .../get-conversation-id-message.yaml | 18 +- .../get-conversation-index.yaml | 19 +- .../get-date-time-created-read.yaml | 18 +- .../get-date-time-modified-read.yaml | 18 +- .../get-diagnostic-information.yaml | 17 +- .../90-other-item-apis/get-eml-format.yaml | 19 +- .../90-other-item-apis/get-end-read.yaml | 18 +- .../90-other-item-apis/get-in-reply-to.yaml | 19 +- .../get-internet-message-id-read.yaml | 18 +- .../get-item-class-async.yaml | 19 +- .../get-item-class-read.yaml | 18 +- .../90-other-item-apis/get-item-type.yaml | 18 +- .../get-loaded-message-properties.yaml | 16 +- .../90-other-item-apis/get-location-read.yaml | 18 +- .../get-message-properties.yaml | 16 +- .../get-normalized-subject-read.yaml | 18 +- .../get-set-end-appointment-organizer.yaml | 20 +- ...et-set-location-appointment-organizer.yaml | 20 +- .../get-set-sensitivity-level.yaml | 21 +- .../get-set-start-appointment-organizer.yaml | 20 +- .../get-set-subject-compose.yaml | 20 +- .../90-other-item-apis/get-start-read.yaml | 18 +- .../90-other-item-apis/get-subject-read.yaml | 18 +- .../90-other-item-apis/item-id-compose.yaml | 23 +- .../90-other-item-apis/send-async.yaml | 17 +- .../90-other-item-apis/session-data-apis.yaml | 24 +- .../90-other-item-apis/set-selected-data.yaml | 19 +- .../work-with-client-signatures.yaml | 27 +- .../get-set-isalldayevent.yaml | 19 +- .../set-displayed-body-subject.yaml | 19 +- samples/outlook/default.yaml | 20 +- .../powerpoint/basics/basic-api-call-js.yaml | 18 +- .../powerpoint/basics/basic-api-call-ts.yaml | 18 +- .../basics/basic-common-api-call.yaml | 20 +- samples/powerpoint/default.yaml | 20 +- .../document/create-presentation.yaml | 19 +- .../hyperlinks/manage-hyperlinks.yaml | 21 +- samples/powerpoint/images/insert-image.yaml | 17 +- samples/powerpoint/images/insert-svg.yaml | 17 +- .../scenarios/searches-wikipedia-api.yaml | 22 +- samples/powerpoint/shapes/get-set-shapes.yaml | 35 +-- .../powerpoint/shapes/get-shapes-by-type.yaml | 24 +- samples/powerpoint/shapes/shapes.yaml | 39 +-- .../slide-management/add-slides.yaml | 27 +- .../slide-management/get-set-slides.yaml | 29 +- .../slide-management/get-slide-metadata.yaml | 19 +- .../slide-management/insert-slides.yaml | 21 +- samples/powerpoint/tags/tags.yaml | 37 +-- .../powerpoint/text/get-set-textrange.yaml | 30 +-- .../project/basics/basic-common-api-call.yaml | 23 +- samples/project/default.yaml | 20 +- samples/web/default.yaml | 18 +- .../word/01-basics/basic-api-call-es5.yaml | 16 +- samples/word/01-basics/basic-api-call.yaml | 16 +- .../word/01-basics/basic-common-api-call.yaml | 20 +- .../content-control-onadded-event.yaml | 24 +- .../content-control-ondatachanged-event.yaml | 24 +- .../content-control-ondeleted-event.yaml | 26 +- .../content-control-onentered-event.yaml | 24 +- .../content-control-onexited-event.yaml | 24 +- ...tent-control-onselectionchanged-event.yaml | 24 +- .../get-change-tracking-states.yaml | 28 +- ...t-and-change-checkbox-content-control.yaml | 26 +- ...-and-change-combo-box-content-control.yaml | 30 +-- .../insert-and-change-content-controls.yaml | 22 +- ...-change-dropdown-list-content-control.yaml | 30 +-- .../15-images/insert-and-get-pictures.yaml | 24 +- samples/word/20-lists/insert-list.yaml | 20 +- samples/word/20-lists/manage-list-styles.yaml | 18 +- samples/word/20-lists/organize-list.yaml | 22 +- .../get-paragraph-on-insertion-point.yaml | 22 +- samples/word/25-paragraph/get-text.yaml | 22 +- samples/word/25-paragraph/get-word-count.yaml | 22 +- .../25-paragraph/insert-formatted-text.yaml | 19 +- .../insert-header-and-footer.yaml | 30 +-- .../insert-in-different-locations.yaml | 28 +- .../insert-line-and-page-breaks.yaml | 22 +- samples/word/25-paragraph/onadded-event.yaml | 25 +- .../word/25-paragraph/onchanged-event.yaml | 26 +- .../word/25-paragraph/ondeleted-event.yaml | 24 +- .../25-paragraph/paragraph-properties.yaml | 30 +-- samples/word/25-paragraph/search.yaml | 22 +- .../get-built-in-properties.yaml | 15 +- ...read-write-custom-document-properties.yaml | 19 +- samples/word/35-ranges/compare-location.yaml | 24 +- samples/word/35-ranges/scroll-to-range.yaml | 22 +- .../split-words-of-first-paragraph.yaml | 24 +- .../word/40-tables/manage-custom-style.yaml | 52 ++-- samples/word/40-tables/manage-formatting.yaml | 35 +-- samples/word/40-tables/table-cell-access.yaml | 20 +- .../word/50-document/compare-documents.yaml | 19 +- .../word/50-document/get-external-styles.yaml | 15 +- .../50-document/insert-external-document.yaml | 21 +- .../50-document/insert-section-breaks.yaml | 26 +- .../word/50-document/manage-annotations.yaml | 34 +-- samples/word/50-document/manage-body.yaml | 46 ++-- .../50-document/manage-change-tracking.yaml | 26 +- samples/word/50-document/manage-comments.yaml | 38 ++- .../manage-custom-xml-part-ns.yaml | 33 +-- .../50-document/manage-custom-xml-part.yaml | 27 +- samples/word/50-document/manage-fields.yaml | 36 +-- .../word/50-document/manage-footnotes.yaml | 38 ++- samples/word/50-document/manage-settings.yaml | 23 +- samples/word/50-document/manage-styles.yaml | 35 +-- .../50-document/manage-tracked-changes.yaml | 34 +-- samples/word/50-document/save-close.yaml | 29 +- .../correlated-objects-pattern.yaml | 20 +- samples/word/90-scenarios/doc-assembly.yaml | 25 +- .../90-scenarios/multiple-property-set.yaml | 22 +- .../insert-and-change-content-controls.yaml | 24 +- .../word/99-preview-apis/manage-comments.yaml | 40 ++- samples/word/default.yaml | 20 +- scripts/.gitattributes | 24 -- scripts/.gitignore | 1 - scripts/README.md | 27 -- scripts/config/prettier.json | 8 - scripts/package-lock.json | 249 ------------------ scripts/package.json | 23 -- scripts/src/RawPlaylist.ts | 3 - scripts/src/RawPlaylistItem.ts | 8 - scripts/src/RawSample.ts | 20 -- scripts/src/SampleTypes.ts | 0 scripts/src/main.ts | 118 --------- scripts/src/parseRawPlaylist.ts | 7 - scripts/src/parseRawSample.ts | 7 - scripts/src/transformCss.ts | 3 - scripts/src/transformHtml.ts | 3 - scripts/src/transformLibraries.ts | 63 ----- scripts/src/transformSample.ts | 31 --- scripts/src/transformTypeScript.ts | 50 ---- scripts/src/utils/capitalize.ts | 18 -- scripts/src/utils/decapitalize.ts | 10 - scripts/src/utils/directoryFileNames.ts | 15 -- scripts/src/utils/equivalentLists.ts | 20 -- scripts/src/utils/indent.ts | 46 ---- scripts/src/utils/isFile.ts | 11 - scripts/src/utils/joinWords.ts | 12 - scripts/src/utils/lineSplit.ts | 10 - .../src/utils/listWithoutDuplicateElements.ts | 11 - scripts/src/utils/mergeWithDefaults.ts | 18 -- scripts/src/utils/pascalCase.ts | 12 - scripts/src/utils/readFileJson.ts | 14 - scripts/src/utils/readFileList.ts | 12 - scripts/src/utils/readFileText.ts | 19 -- scripts/src/utils/standardizeNewlines.ts | 7 - scripts/src/utils/writeFileJson.ts | 19 -- scripts/src/utils/writeFileList.ts | 11 - scripts/src/utils/writeFileText.ts | 12 - scripts/tsconfig.json | 71 ----- 345 files changed, 2672 insertions(+), 5973 deletions(-) delete mode 100644 scripts/.gitattributes delete mode 100644 scripts/.gitignore delete mode 100644 scripts/README.md delete mode 100644 scripts/config/prettier.json delete mode 100644 scripts/package-lock.json delete mode 100644 scripts/package.json delete mode 100644 scripts/src/RawPlaylist.ts delete mode 100644 scripts/src/RawPlaylistItem.ts delete mode 100644 scripts/src/RawSample.ts delete mode 100644 scripts/src/SampleTypes.ts delete mode 100644 scripts/src/main.ts delete mode 100644 scripts/src/parseRawPlaylist.ts delete mode 100644 scripts/src/parseRawSample.ts delete mode 100644 scripts/src/transformCss.ts delete mode 100644 scripts/src/transformHtml.ts delete mode 100644 scripts/src/transformLibraries.ts delete mode 100644 scripts/src/transformSample.ts delete mode 100644 scripts/src/transformTypeScript.ts delete mode 100644 scripts/src/utils/capitalize.ts delete mode 100644 scripts/src/utils/decapitalize.ts delete mode 100644 scripts/src/utils/directoryFileNames.ts delete mode 100644 scripts/src/utils/equivalentLists.ts delete mode 100644 scripts/src/utils/indent.ts delete mode 100644 scripts/src/utils/isFile.ts delete mode 100644 scripts/src/utils/joinWords.ts delete mode 100644 scripts/src/utils/lineSplit.ts delete mode 100644 scripts/src/utils/listWithoutDuplicateElements.ts delete mode 100644 scripts/src/utils/mergeWithDefaults.ts delete mode 100644 scripts/src/utils/pascalCase.ts delete mode 100644 scripts/src/utils/readFileJson.ts delete mode 100644 scripts/src/utils/readFileList.ts delete mode 100644 scripts/src/utils/readFileText.ts delete mode 100644 scripts/src/utils/standardizeNewlines.ts delete mode 100644 scripts/src/utils/writeFileJson.ts delete mode 100644 scripts/src/utils/writeFileList.ts delete mode 100644 scripts/src/utils/writeFileText.ts delete mode 100644 scripts/tsconfig.json diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index d5c3fc8e0..e2baf785a 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -7,8 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: | - $("#run").on("click", () => tryCatch(run)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); function run() { return Excel.run(function (context) { @@ -33,11 +33,10 @@ script: } language: typescript template: - content: | + content: |-

      This sample demonstrates basic Excel API calls.

      -

      Try it out

      Select some cells in the worksheet, then press Highlight selected range.

      @@ -59,15 +58,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 48c4cd645..86ddf8c87 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -7,8 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: | - $("#run").on("click", () => tryCatch(run)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { @@ -38,7 +38,6 @@ template:

      This sample demonstrates basic Excel API calls.

      -

      Try it out

      Select some cells in the worksheet, then press Highlight selected range.

      @@ -60,15 +59,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index fee0cc213..539bee657 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -7,8 +7,8 @@ host: EXCEL api_set: Selection: 1.1 script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.document.getSelectedDataAsync( @@ -24,11 +24,10 @@ script: } language: typescript template: - content: | + content: |-

      This sample uses the Common APIs compatible with Office 2013.

      -

      Try it out

      Select a cell in the worksheet and press Write to console to see the contents of that cell in the console.

      @@ -39,7 +38,7 @@ template:
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -51,15 +50,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index e2df678f1..d82d312b1 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -6,10 +6,10 @@ host: EXCEL api_set: ExcelApi: '1.8' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#format-horizontal-axis").on("click", () => tryCatch(formatHorizontalAxis)); - $("#format-vertical-axis").on("click", () => tryCatch(formatVerticalAxis)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("format-horizontal-axis").addEventListener("click", () => tryCatch(formatHorizontalAxis)); + document.getElementById("format-vertical-axis").addEventListener("click", () => tryCatch(formatVerticalAxis)); async function formatHorizontalAxis() { await Excel.run(async (context) => { @@ -118,25 +118,21 @@ script: language: typescript template: content: |- -

      This sample shows how to format the vertical and horizontal axis in a chart.

      -

      Set up

      -

      Try it out

      -
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -158,13 +154,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index 2dbd1eadf..a9c093176 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.7' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#get-axis-unit").on("click", () => tryCatch(getAxisUnit)); - $("#change-axis-unit").on("click", () => tryCatch(changeAxisUnit)); - $("#remove-axis-label").on("click", () => tryCatch(removeAxisLabel)); - $("#show-axis-label").on("click", () => tryCatch(showAxisLabel)); - $("#set-axis-title").on("click", () => tryCatch(setAxisTitle)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("get-axis-unit").addEventListener("click", () => tryCatch(getAxisUnit)); + document.getElementById("change-axis-unit").addEventListener("click", () => tryCatch(changeAxisUnit)); + document.getElementById("remove-axis-label").addEventListener("click", () => tryCatch(removeAxisLabel)); + document.getElementById("show-axis-label").addEventListener("click", () => tryCatch(showAxisLabel)); + document.getElementById("set-axis-title").addEventListener("click", () => tryCatch(setAxisTitle)); async function getAxisUnit() { await Excel.run(async (context) => { @@ -173,39 +173,33 @@ template:

      This sample shows how to get, set, and remove axis unit, label and title in a chart.

      -

      Set up

      -

      Try it out

      -
      -
      -
      -
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -225,15 +219,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index 26267ebf9..a9aa558ab 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -7,10 +7,11 @@ host: EXCEL api_set: ExcelApi: '1.12' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#create-bubble-chart").on("click", () => tryCatch(createBubbleChart)); - $("#get-chart-series-dimension-values").on("click", () => tryCatch(getChartSeriesDimensionValues)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("create-bubble-chart").addEventListener("click", () => tryCatch(createBubbleChart)); + document.getElementById("get-chart-series-dimension-values").addEventListener("click", () => tryCatch(getChartSeriesDimensionValues)); + async function createBubbleChart() { await Excel.run(async (context) => { /* @@ -57,6 +58,7 @@ script: await context.sync(); }); } + async function getChartSeriesDimensionValues() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); @@ -120,14 +122,12 @@ template:

      This sample shows how to create a bubble chart, with each chart series (or bubble) representing a single table row.

      -

      Set up

      -

      Try it out

      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -152,15 +152,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index a9c77544c..a8113bff5 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -7,17 +7,17 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#create-column-clustered-chart").on("click", () => tryCatch(createColumnClusteredChart)); - $("#create-line-chart").on("click", () => tryCatch(createLineChart)); - $("#create-xy-scatter-chart").on("click", () => tryCatch(createXYScatterChart)); - $("#create-area-chart").on("click", () => tryCatch(createAreaStackedChart)); - $("#create-radar-chart").on("click", () => tryCatch(createRadarFilledChart)); - $("#create-pie-chart").on("click", () => tryCatch(createPieChart)); - $("#create-3d-chart").on("click", () => tryCatch(create3DChart)); - $("#create-cylinder-chart").on("click", () => tryCatch(createCylinderChart)); - $("#create-bar-100-chart").on("click", () => tryCatch(createBar100Chart)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("create-column-clustered-chart").addEventListener("click", () => tryCatch(createColumnClusteredChart)); + document.getElementById("create-line-chart").addEventListener("click", () => tryCatch(createLineChart)); + document.getElementById("create-xy-scatter-chart").addEventListener("click", () => tryCatch(createXYScatterChart)); + document.getElementById("create-area-chart").addEventListener("click", () => tryCatch(createAreaStackedChart)); + document.getElementById("create-radar-chart").addEventListener("click", () => tryCatch(createRadarFilledChart)); + document.getElementById("create-pie-chart").addEventListener("click", () => tryCatch(createPieChart)); + document.getElementById("create-3d-chart").addEventListener("click", () => tryCatch(create3DChart)); + document.getElementById("create-cylinder-chart").addEventListener("click", () => tryCatch(createCylinderChart)); + document.getElementById("create-bar-100-chart").addEventListener("click", () => tryCatch(createBar100Chart)); async function createColumnClusteredChart() { await Excel.run(async (context) => { @@ -253,63 +253,53 @@ template:

      This sample shows how to create column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts.

      -

      Set up

      -

      Try it out

      -

      -

      -

      -

      -

      -

      -

      -

      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -321,15 +311,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index c89e78930..d4bb53742 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.15' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#log-chart-series-source").on("click", () => tryCatch(logChartSeriesSource)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("log-chart-series-source").addEventListener("click", () => tryCatch(logChartSeriesSource)); async function logChartSeriesSource() { // This function retrieves the data source information of a chart series in the Sample worksheet. @@ -84,7 +84,6 @@ template:

      This sample shows how to get information about the data source of a chart series.

      -

      Set up

      Add a product table and line chart to a sample worksheet.

      @@ -92,14 +91,13 @@ template: Add sample data
      -

      Try it out

      Log information to the console about the data source of the chart series Frames.

      -
      +
      language: html style: content: |- @@ -113,15 +111,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml index 527ff2b00..a48cae0f3 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -6,11 +6,11 @@ host: EXCEL api_set: ExcelApi: '1.14' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#create-column-clustered-chart").on("click", () => tryCatch(createColumnClusteredChart)); - $("#add-chart-data-table").on("click", () => tryCatch(addChartDataTable)); - $("#format-chart-data-table").on("click", () => tryCatch(formatChartDataTable)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("create-column-clustered-chart").addEventListener("click", () => tryCatch(createColumnClusteredChart)); + document.getElementById("add-chart-data-table").addEventListener("click", () => tryCatch(addChartDataTable)); + document.getElementById("format-chart-data-table").addEventListener("click", () => tryCatch(formatChartDataTable)); async function createColumnClusteredChart() { // This function creates a clustered column chart based on data from a table on @@ -117,7 +117,6 @@ template:

      This sample shows how to add a data table to a chart and then format that data table.

      -

      Set up

      -

      Try it out

      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -152,12 +150,8 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - core-js@2.4.1/client/core.min.js - @types/core-js - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index a26e6d685..5027e5948 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.8' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#format-chart").on("click", () => tryCatch(formatChart)); - $("#show-datalabels").on("click", () => tryCatch(dataLabels)); - $("#change-color").on("click", () => tryCatch(changeColor)); - $("#clear").on("click", () => tryCatch(clearChart)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("format-chart").addEventListener("click", () => tryCatch(formatChart)); + document.getElementById("show-datalabels").addEventListener("click", () => tryCatch(dataLabels)); + document.getElementById("change-color").addEventListener("click", () => tryCatch(changeColor)); + document.getElementById("clear").addEventListener("click", () => tryCatch(clearChart)); async function formatChart() { await Excel.run(async (context) => { @@ -174,14 +174,12 @@ template:

      This sample shows how to format different aspects of a chart.

      -

      Set up

      -

      Try it out

      -

      Try it out

      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -131,15 +129,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index f79c6ae8c..5eaef4fd7 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: |+ - $("#setup").on("click", () => tryCatch(setup)); - $("#set-chart-point-color").on("click", () => tryCatch(setChartPointColor)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("set-chart-point-color").addEventListener("click", () => tryCatch(setChartPointColor)); async function setChartPointColor() { await Excel.run(async (context) => { @@ -79,33 +79,27 @@ script: console.error(error); } } - - - language: typescript template: - content: |+ + content: |-

      This sample shows how to set chart point color.

      -

      Set up

      -

      Try it out

      - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -117,15 +111,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 34e1c652f..8405b89cd 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#set-markers").on("click", () => tryCatch(setMarkers)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("set-markers").addEventListener("click", () => tryCatch(setMarkers)); async function setMarkers() { await Excel.run(async (context) => { @@ -84,14 +84,12 @@ template:

      This sample shows how to set chart series marker properties.

      -

      Set up

      -

      Try it out

      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -114,13 +112,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 8340b85e7..40ff375f7 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#order-series-plot").on("click", () => tryCatch(addSeries)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("order-series-plot").addEventListener("click", () => tryCatch(addSeries)); async function addSeries() { await Excel.run(async (context) => { @@ -91,18 +91,16 @@ script: } language: typescript template: - content: | + content: |-

      This sample shows how to change the plot order of series in a chart.

      -

      Set up

      -

      Try it out

      -

      Try it out

      -
      -

      Try it out

      - language: html style: content: |- @@ -148,15 +145,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 9fe36a845..5edbd97b9 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: |+ - $("#setup").on("click", () => tryCatch(setup)); - $("#add-trendline").on("click", () => tryCatch(addTrendline)); - $("#get-trendline").on("click", () => tryCatch(getTrendline)); - $("#get-trendline-color").on("click", () => tryCatch(getTrendlineColor)); - $("#set-trendline-color").on("click", () => tryCatch(setTrendlineColor)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-trendline").addEventListener("click", () => tryCatch(addTrendline)); + document.getElementById("get-trendline").addEventListener("click", () => tryCatch(getTrendline)); + document.getElementById("get-trendline-color").addEventListener("click", () => tryCatch(getTrendlineColor)); + document.getElementById("set-trendline-color").addEventListener("click", () => tryCatch(setTrendlineColor)); async function addTrendline() { await Excel.run(async (context) => { @@ -134,36 +134,29 @@ script: console.error(error); } } - - - language: typescript template: content: |-

      This sample shows how to add, get, and format trendlines in a chart.

      -

      Set up

      -

      Try it out

      -
      -
      -

      Try it out

      -

      Try it out

      @@ -224,15 +222,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 0fbb291df..23f0d65e7 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -7,17 +7,17 @@ api_set: ExcelApi: '1.6' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#apply-color-scale-format").on("click", () => tryCatch(applyColorScaleFormat)); - $("#apply-preset-format").on("click", () => tryCatch(applyPresetFormat)); - $("#apply-databar-format").on("click", () => tryCatch(applyDataBarFormat)); - $("#apply-icon-set-format").on("click", () => tryCatch(applyIconSetFormat)); - $("#apply-text-format").on("click", () => tryCatch(applyTextFormat)); - $("#apply-cell-value-format").on("click", () => tryCatch(applyCellValueFormat)); - $("#apply-top-bottom-format").on("click", () => tryCatch(applyTopBottomFormat)); - $("#apply-custom-format").on("click", () => tryCatch(applyCustomFormat)); - $("#list-conditional-formats").on("click", () => tryCatch(listConditionalFormats)); - $("#clear-all-conditional-formats").on("click", () => tryCatch(clearAllConditionalFormats)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("apply-color-scale-format").addEventListener("click", () => tryCatch(applyColorScaleFormat)); + document.getElementById("apply-preset-format").addEventListener("click", () => tryCatch(applyPresetFormat)); + document.getElementById("apply-databar-format").addEventListener("click", () => tryCatch(applyDataBarFormat)); + document.getElementById("apply-icon-set-format").addEventListener("click", () => tryCatch(applyIconSetFormat)); + document.getElementById("apply-text-format").addEventListener("click", () => tryCatch(applyTextFormat)); + document.getElementById("apply-cell-value-format").addEventListener("click", () => tryCatch(applyCellValueFormat)); + document.getElementById("apply-top-bottom-format").addEventListener("click", () => tryCatch(applyTopBottomFormat)); + document.getElementById("apply-custom-format").addEventListener("click", () => tryCatch(applyCustomFormat)); + document.getElementById("list-conditional-formats").addEventListener("click", () => tryCatch(listConditionalFormats)); + document.getElementById("clear-all-conditional-formats").addEventListener("click", () => tryCatch(clearAllConditionalFormats)); async function applyColorScaleFormat() { await Excel.run(async (context) => { @@ -277,14 +277,12 @@ template:

      This sample shows how to apply conditional formatting to ranges.

      -

      Set up

      -

      Try it out

      @@ -341,15 +339,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/16-custom-functions/basic-function.yaml b/samples/excel/16-custom-functions/basic-function.yaml index c085f87e1..377ee85cb 100644 --- a/samples/excel/16-custom-functions/basic-function.yaml +++ b/samples/excel/16-custom-functions/basic-function.yaml @@ -20,4 +20,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js \ No newline at end of file + core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index 1e9740051..cdaf1ccb0 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -30,4 +30,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js + core-js@2.4.1/client/core.min.js \ No newline at end of file diff --git a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index dcaf6a955..09f9e3bed 100644 --- a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.5' script: - content: | - $("#create-custom-xml-part").on("click", () => tryCatch(createCustomXmlPart)); - $("#change-custom-xml-part").on("click", () => tryCatch(changeCustomXmlPart)); - $("#delete-custom-xml-part").on("click", () => tryCatch(deleteCustomXmlPart)); + content: |- + document.getElementById("create-custom-xml-part").addEventListener("click", () => tryCatch(createCustomXmlPart)); + document.getElementById("change-custom-xml-part").addEventListener("click", () => tryCatch(changeCustomXmlPart)); + document.getElementById("delete-custom-xml-part").addEventListener("click", () => tryCatch(deleteCustomXmlPart)); async function createCustomXmlPart() { await Excel.run(async (context) => { @@ -103,11 +103,10 @@ script: } language: typescript template: - content: |+ + content: |-

      This sample shows how to create, set, get, and delete custom XML parts in the file.

      -

      Try it out

      Press the button to create and display Contoso's Reviewer metadata.

      @@ -124,16 +123,14 @@ template:
      -

      XML part display

      - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -145,15 +142,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index 60a15efe9..b1ca11906 100644 --- a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.5' script: - content: | - $("#create-custom-xml-part").on("click", () => tryCatch(createCustomXmlPart)); - $("#test-for-unique-namespace").on("click", () => tryCatch(testForUniqueNamespace)); - $("#delete-all-custom-xml-parts").on("click", () => tryCatch(deleteAllCustomXmlParts)); + content: |- + document.getElementById("create-custom-xml-part").addEventListener("click", () => tryCatch(createCustomXmlPart)); + document.getElementById("test-for-unique-namespace").addEventListener("click", () => tryCatch(testForUniqueNamespace)); + document.getElementById("delete-all-custom-xml-parts").addEventListener("click", () => tryCatch(deleteAllCustomXmlParts)); async function createCustomXmlPart() { await Excel.run(async (context) => { @@ -90,11 +90,10 @@ script: } language: typescript template: - content: |+ + content: |-

      This sample shows how to determine if there is just one XML part for a specified namespace.

      -

      Try it out

      Press the "Create XML part" button to create and display Contoso's Reviewer metadata. Press it more than once if you want to set up an error situation.

      @@ -110,13 +109,11 @@ template: Delete all XML parts
      -

      XML part display

      - language: html style: content: |- @@ -131,15 +128,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index ded226769..46adc2e94 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.16' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#add-entities-to-table").on("click", () => tryCatch(addEntitiesToTable)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-entities-to-table").addEventListener("click", () => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { // This function retrieves data for each of the existing products in the table, @@ -205,10 +205,10 @@ template:

      To see the entity value's data attribution, click the icon to the left of the title in the Product column after selecting Add entity values.

      The data attribution appears as a logo in the bottom left corner of the entity card. Hover over the logo to see the name of the data provider. Click on the logo to visit the data provider's URL.

      -
      +
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -220,15 +220,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/20-data-types/data-types-entity-icons.yaml b/samples/excel/20-data-types/data-types-entity-icons.yaml index 89a06fafc..53cecd46b 100644 --- a/samples/excel/20-data-types/data-types-entity-icons.yaml +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.16' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#create-icons").on("click", () => tryCatch(createIcons)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("create-icons").addEventListener("click", () => tryCatch(createIcons)); // Retrieve the entity card icons enum. const iconNames = Excel.EntityCompactLayoutIcons; @@ -108,13 +108,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/20-data-types/data-types-entity-values.yaml b/samples/excel/20-data-types/data-types-entity-values.yaml index 2585f039d..9383863f7 100644 --- a/samples/excel/20-data-types/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -7,8 +7,8 @@ api_set: ExcelApi: '1.16' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#addEntitiesToTable").on("click", () => tryCatch(addEntitiesToTable)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("addEntitiesToTable").addEventListener("click", () => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { // This function retrieves data for each of the existing products in the table, @@ -581,7 +581,7 @@ template:
      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -593,15 +593,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/20-data-types/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index ec1c9eeb6..bcf1d28f6 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -6,10 +6,10 @@ host: EXCEL api_set: ExcelApi: '1.16' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#set-busy-error").on("click", () => tryCatch(setBusyError)); - $("#change-busy-error").on("click", () => tryCatch(changeBusyError)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("set-busy-error").addEventListener("click", () => tryCatch(setBusyError)); + document.getElementById("change-busy-error").addEventListener("click", () => tryCatch(changeBusyError)); async function setBusyError() { // This function sets the value of cell A1 to a #BUSY! error using data types. @@ -105,15 +105,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/20-data-types/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml index a8ca4bc9c..dd362a38a 100644 --- a/samples/excel/20-data-types/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -6,11 +6,11 @@ host: EXCEL api_set: ExcelApi: '1.16' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#set-formatted-number-date").on("click", () => tryCatch(setFormattedNumberDate)); - $("#set-formatted-number-currency").on("click", () => tryCatch(setFormattedNumberCurrency)); - $("#get-formatted-number").on("click", () => tryCatch(getFormattedNumber)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("set-formatted-number-date").addEventListener("click", () => tryCatch(setFormattedNumberDate)); + document.getElementById("set-formatted-number-currency").addEventListener("click", () => tryCatch(setFormattedNumberCurrency)); + document.getElementById("get-formatted-number").addEventListener("click", () => tryCatch(getFormattedNumber)); async function setFormattedNumberDate() { // This function creates a formatted number data type, @@ -143,15 +143,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/20-data-types/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml index 37f5673fd..89a45c742 100644 --- a/samples/excel/20-data-types/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.16' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#add-entities-to-table").on("click", () => tryCatch(addEntitiesToTable)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-entities-to-table").addEventListener("click", () => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { // This function creates entity values with references to other entity values. @@ -292,7 +292,7 @@ script: ]; language: typescript template: - content: | + content: |-

      This sample shows how to create entity values with references to other entity values. An entity value is a container for data, and this container can reference (or contain) other entities within the original entity. One entity can contain multiple additional entities.

      @@ -316,10 +316,10 @@ template:
    • To navigate back to the original Andrew Fuller entity, select the Back arrow in the top left corner of the entity card.

    You can also use the Extract to grid button in the card modal window, to the right of the Manager or Direct Reports fields, to add the referenced entities to the table in new columns.

    -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -331,15 +331,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 3a6d8134d..9beed0017 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.16' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#insert-image").on("click", () => tryCatch(insertImage)); - $("#retrieve-image-info").on("click", () => tryCatch(retrieveImageInfo)); - $("#open-image").on("click", () => tryCatch(openImage)); - $("#clear-form").on("click", () => tryCatch(clearForm)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("insert-image").addEventListener("click", () => tryCatch(insertImage)); + document.getElementById("retrieve-image-info").addEventListener("click", () => tryCatch(retrieveImageInfo)); + document.getElementById("open-image").addEventListener("click", () => tryCatch(openImage)); + document.getElementById("clear-form").addEventListener("click", () => tryCatch(clearForm)); async function insertImage() { // This function inserts a web image into the currently selected cell. @@ -125,7 +125,6 @@ template:

    This sample shows how to work with the web image data type. Insert an image into the selected cell and then retrieve information about that image.

    -

    Set up

    Add a new worksheet and then enter the URL and alt text for an image of your choice.

    @@ -137,24 +136,20 @@ template:
    -

    Try it out

    Select the cell you want to insert the web image into, and then select the Insert image button.

    -

    Select the cell containing the web image that you want to view the details of, and then select the Retrieve image details button. The image details will display here in the task pane, in the preceding Image URL and Alt text fields.

    -

    Select the cell with the image you want to view and then select the Open image in browser button. The image will open in a new web browser tab.

    -

    Clear the Image URL and Alt text fields in the task pane.

    -

    Try it out

    Press Require approved name and then click on a cell in the Baby Name column and use the drop down to enter an approved value.

    @@ -178,15 +176,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index 332f28ad1..90c3ab73d 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -6,11 +6,11 @@ host: EXCEL api_set: ExcelAPI: '1.12' script: - content: | - $("#set-custom-doc-property").on("click", () => tryCatch(setCustomDocProperty)); - $("#get-custom-doc-properties").on("click", () => tryCatch(getCustomDocProperties)); - $("#set-custom-worksheet-property").on("click", () => tryCatch(setCustomWorksheetProperty)); - $("#get-custom-worksheet-properties").on("click", () => tryCatch(getCustomWorksheetProperties)); + content: |- + document.getElementById("set-custom-doc-property").addEventListener("click", () => tryCatch(setCustomDocProperty)); + document.getElementById("get-custom-doc-properties").addEventListener("click", () => tryCatch(getCustomDocProperties)); + document.getElementById("set-custom-worksheet-property").addEventListener("click", () => tryCatch(setCustomWorksheetProperty)); + document.getElementById("get-custom-worksheet-properties").addEventListener("click", () => tryCatch(getCustomWorksheetProperties)); /* To learn how to view document properties in the UI, * see https://support.microsoft.com/office/21D604C2-481E-4379-8E54-1DD4622C6B75 @@ -93,12 +93,10 @@ template:

    This sample shows how to set and get custom properties at both the document level and the worksheet level.

    -

    Enter the key/value pairs for your custom properties.

    Key:

    Value:

    -

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -130,15 +128,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/26-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml index f5288dfbe..3371746d2 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.4' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#get-file").on("click", () => tryCatch(getCurrentFile)); - $("#new-workbook-from-file").on("click", () => tryCatch(newWorkbookFromFile)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("get-file").addEventListener("click", () => tryCatch(getCurrentFile)); + document.getElementById("new-workbook-from-file").addEventListener("click", () => tryCatch(newWorkbookFromFile)); function getCurrentFile() { const sliceSize = 4096; /*Bytes*/ @@ -153,18 +153,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get the Base64-encoded string that represents the current document. It uses the getFileAsync() method to read the file in slices and then joins all slices back together to form the complete file.

    -

    Set up

    -

    Try it out

    -

    Create a new workbook

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -204,15 +201,10 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - core-js@2.4.1/client/core.min.js - @types/core-js + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - jquery@3.1.1 - @types/jquery@3.3.1 - https://unpkg.com/base64-js@1.2.1/base64js.min.js + https://unpkg.com/base64-js@1.2.1/base64js.min.js \ No newline at end of file diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 210f2208f..41deb4f44 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#set-doc-properties").on("click", () => tryCatch(setDocProperties)); - $("#get-doc-properties").on("click", () => tryCatch(getDocProperties)); - $("#set-custom-doc-properties").on("click", () => tryCatch(setCustomDocProperties)); - $("#get-custom-doc-properties").on("click", () => tryCatch(getCustomDocProperties)); - $("#get-count-custom-doc-properties").on("click", () => tryCatch(getCountCustomDocProperties)); + content: |- + document.getElementById("set-doc-properties").addEventListener("click", () => tryCatch(setDocProperties)); + document.getElementById("get-doc-properties").addEventListener("click", () => tryCatch(getDocProperties)); + document.getElementById("set-custom-doc-properties").addEventListener("click", () => tryCatch(setCustomDocProperties)); + document.getElementById("get-custom-doc-properties").addEventListener("click", () => tryCatch(getCustomDocProperties)); + document.getElementById("get-count-custom-doc-properties").addEventListener("click", () => tryCatch(getCountCustomDocProperties)); async function setDocProperties() { await Excel.run(async (context) => { @@ -123,45 +123,39 @@ script: } language: typescript template: - content: |+ + content: |-

    This sample shows how to set and get document properties.

    -

    Try it out

    -
    -
    -
    -
    - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -173,15 +167,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 3a9724380..d395f6c0c 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#register-handler").on("click", () => tryCatch(registerChangeEventHandler)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-handler").addEventListener("click", () => tryCatch(registerChangeEventHandler)); async function registerChangeEventHandler() { await Excel.run(async (context) => { @@ -73,7 +73,6 @@ template:

    This sample shows how to use table changed events.

    -

    Setup

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -102,15 +101,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 4671c08a4..6bf0e7f7b 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#register-data-changed-handler").on("click", () => tryCatch(registerDataChangedHandler)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-data-changed-handler").addEventListener("click", () => tryCatch(registerDataChangedHandler)); async function registerDataChangedHandler() { await Excel.run(async (context) => { @@ -78,14 +78,12 @@ template:

    This sample shows how to register and use a handler for the data-changed event.

    -

    Set up

    -

    Try it out

    -

    Try it out

    -

    Try it out

    Click the button to register handlers for the pie chart's activated and deactivated events. Then click the chart to activate it. Watch the console. Finally, click the cylinder chart to deactivate the pie chart.

    @@ -168,15 +166,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 8e62d8909..49c754f27 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -7,9 +7,9 @@ api_set: ExcelApi: '1.8' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#register-chartcollection-handlers").on("click", () => tryCatch(registerChartCollectionHandlers)); - $("#add-chart").on("click", () => tryCatch(createPieChart)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-chartcollection-handlers").addEventListener("click", () => tryCatch(registerChartCollectionHandlers)); + document.getElementById("add-chart").addEventListener("click", () => tryCatch(createPieChart)); async function registerChartCollectionHandlers() { await Excel.run(async (context) => { @@ -113,14 +113,12 @@ template:

    This sample shows how to register and use handlers for the ChartCollection onAdded, onDeleted, onActivated, and onDeactivated events.

    -

    Set up

    -

    Try it out

    Click the button to register and use handlers for the worksheet's ChartCollection events.

    @@ -149,15 +147,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 19daffab1..fbf4d77d1 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelAPI: '1.12' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); - $("#add-comment").on("click", () => tryCatch(addComment)); - $("#edit-comment").on("click", () => tryCatch(editComment)); - $("#delete-comment").on("click", () => tryCatch(deleteComment)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); + document.getElementById("add-comment").addEventListener("click", () => tryCatch(addComment)); + document.getElementById("edit-comment").addEventListener("click", () => tryCatch(editComment)); + document.getElementById("delete-comment").addEventListener("click", () => tryCatch(deleteComment)); async function registerEventHandlers() { await Excel.run(async (context) => { @@ -152,7 +152,7 @@ template: -
    +
    language: html style: content: |- @@ -167,15 +167,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 9dfb2dfca..d7711daf1 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -6,11 +6,11 @@ host: EXCEL api_set: ExcelApi: '1.8' script: - content: | - $("#toggleEvents").on("click", () => tryCatch(toggleEvents)); - $("#setup").on("click", () => tryCatch(setup)); - $("#refreshData").on("click", () => tryCatch(addOrRefreshData)); - $("#registerSumChangedHandlers").on("click", () => tryCatch(registerSumChangedHandlers)); + content: |- + document.getElementById("toggleEvents").addEventListener("click", () => tryCatch(toggleEvents)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("refreshData").addEventListener("click", () => tryCatch(addOrRefreshData)); + document.getElementById("registerSumChangedHandlers").addEventListener("click", () => tryCatch(registerSumChangedHandlers)); async function toggleEvents() { await Excel.run(async (context) => { @@ -175,13 +175,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index 6c10c734b..89e3f9d1f 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -6,10 +6,10 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#register-formula-change-handler").on("click", () => tryCatch(registerFormulaChangeHandler)); - $("#trigger-formula-change").on("click", () => tryCatch(triggerFormulaChange)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-formula-change-handler").addEventListener("click", () => tryCatch(registerFormulaChangeHandler)); + document.getElementById("trigger-formula-change").addEventListener("click", () => tryCatch(triggerFormulaChange)); async function registerFormulaChangeHandler() { await Excel.run(async (context) => { @@ -117,15 +117,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 10dbe4a25..4f686e1ce 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: |+ - $("#setup").on("click", () => tryCatch(setup)); - $("#register-on-changed-handler").on("click", () => tryCatch(registerOnChangedHandler)); - $("#change-data").on("click", () => tryCatch(changeData)); - $("#register-on-selection-changed-handler").on("click", () => tryCatch(registerOnSelectionChangedHandler)); - $("#change-selection").on("click", () => tryCatch(changeSelection)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-on-changed-handler").addEventListener("click", () => tryCatch(registerOnChangedHandler)); + document.getElementById("change-data").addEventListener("click", () => tryCatch(changeData)); + document.getElementById("register-on-selection-changed-handler").addEventListener("click", () => tryCatch(registerOnSelectionChangedHandler)); + document.getElementById("change-selection").addEventListener("click", () => tryCatch(changeSelection)); async function registerOnChangedHandler() { await Excel.run(async (context) => { @@ -104,54 +104,44 @@ script: console.error(error); } } - - - language: typescript template: - content: |+ + content: |-

    This sample shows how to register and use event handlers for table onChanged and onSelectionChanged events.

    -

    Set up

    -

    Try it out

    -

    Changing data in a table triggers the data changed event. You can change the data manually or programmatically.

    -
    -

    Changing a range selection in a table triggers the table onSelectionChanged event. You can change selection manually or programmatically.

    - - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -163,15 +153,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index eaf9a1362..a382bcdf7 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -6,10 +6,10 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: |+ - $("#setup").on("click", () => tryCatch(setup)); - $("#register-on-changed-handler").on("click", () => tryCatch(registerOnChangedHandler)); - $("#change-data").on("click", () => tryCatch(changeData)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-on-changed-handler").addEventListener("click", () => tryCatch(registerOnChangedHandler)); + document.getElementById("change-data").addEventListener("click", () => tryCatch(changeData)); async function registerOnChangedHandler() { await Excel.run(async (context) => { @@ -111,40 +111,33 @@ script: console.error(error); } } - - - language: typescript template: - content: |+ + content: |-

    This sample shows how to register and use an event handler for table collection onChanged event.

    -

    Set up

    -

    Try it out

    -

    Changing data in tables triggers the data changed event. You can change the data manually or programmatically.

    - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -156,15 +149,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml index 63fc16bf2..72c944193 100644 --- a/samples/excel/30-events/events-workbook-activated.yaml +++ b/samples/excel/30-events/events-workbook-activated.yaml @@ -6,8 +6,8 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | - $("#register-event-handler").on("click", () => tryCatch(registerEventHandler)); + content: |- + document.getElementById("register-event-handler").addEventListener("click", () => tryCatch(registerEventHandler)); async function workbookActivated(event: Excel.WorkbookActivatedEventArgs) { await Excel.run(async (context) => { @@ -45,7 +45,6 @@ template:

    Once the event handler is registered, a notification prints to the console when the workbook is activated. Try switching to another application and then switching back to Excel to see the console notification.

    -

    Try it out

    -

    Activated/Deactivated

    -

    Settings

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -224,15 +220,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index a05efca9d..132db9fe9 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelAPI: '1.14' script: - content: | - $("#register-event").on("click", () => tryCatch(registerEvent)); - $("#change-protection").on("click", () => tryCatch(changeProtection)); + content: |- + document.getElementById("register-event").addEventListener("click", () => tryCatch(registerEvent)); + document.getElementById("change-protection").addEventListener("click", () => tryCatch(changeProtection)); async function registerEvent() { // This function registers an event handler for the onProtectionChanged event of a worksheet. @@ -82,7 +82,7 @@ template: -
    +
    language: html style: content: |- @@ -97,15 +97,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 63ab3d364..cbba6505e 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -8,16 +8,16 @@ api_set: ExcelApi: '1.7' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#register-on-selection-changed-handler").on("click", () => tryCatch(registerSelectionChangedHandler)); - $("#select-range").on("click", () => tryCatch(selectRange)); + document.getElementById("register-on-selection-changed-handler").addEventListener("click", () => tryCatch(registerSelectionChangedHandler)); + document.getElementById("select-range").addEventListener("click", () => tryCatch(selectRange)); - $("#register-on-changed-handler").on("click", () => tryCatch(registerOnChangedHandler)); - $("#register-onCalculated-handler").on("click", () => tryCatch(registerOnCalculatedHandler)); - $("#recalculate").on("click", () => tryCatch(recalculate)); + document.getElementById("register-on-changed-handler").addEventListener("click", () => tryCatch(registerOnChangedHandler)); + document.getElementById("register-onCalculated-handler").addEventListener("click", () => tryCatch(registerOnCalculatedHandler)); + document.getElementById("recalculate").addEventListener("click", () => tryCatch(recalculate)); - $("#delete-data").on("click", () => tryCatch(deleteData)); + document.getElementById("delete-data").addEventListener("click", () => tryCatch(deleteData)); async function registerSelectionChangedHandler() { await Excel.run(async (context) => { @@ -172,17 +172,14 @@ template:

    This sample shows how to register and use an event handler for the worksheet onSelectionChanged event.

    -

    Set up

    -

    Try it out

    -

    Selection Changed

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -220,15 +217,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index 8950cfb0b..7e8108677 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); async function registerEventHandlers() { await Excel.run(async (context) => { @@ -101,11 +101,10 @@ script: } language: typescript template: - content: |+ + content: |-

    This sample shows how to register and use event handlers for table onChanged and onSelectionChanged events.

    -

    Set up

    -

    Try it out

    -

    The console will log the addresses reported by the different onSelectionChanged events. Change the cell or cells selected in the worksheet to see the results. Try selecting single cells, multiple cells, and multiple discontiguous cells.

    - - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -146,15 +141,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index d4c24ffbd..5cf8f5325 100644 --- a/samples/excel/34-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -7,13 +7,13 @@ api_set: ExcelApi: '1.4' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#add-name-to-total").on("click", () => tryCatch(addNameToTotal)); - $("#add-name-to-header").on("click", () => tryCatch(addNameToHeader)); - $("#format-named-range").on("click", () => tryCatch(formatRangeByName)); - $("#remove-name").on("click", () => tryCatch(removeName)); - $("#list-named-items").on("click", () => tryCatch(listNamedItems)); + document.getElementById("add-name-to-total").addEventListener("click", () => tryCatch(addNameToTotal)); + document.getElementById("add-name-to-header").addEventListener("click", () => tryCatch(addNameToHeader)); + document.getElementById("format-named-range").addEventListener("click", () => tryCatch(formatRangeByName)); + document.getElementById("remove-name").addEventListener("click", () => tryCatch(removeName)); + document.getElementById("list-named-items").addEventListener("click", () => tryCatch(listNamedItems)); async function addNameToTotal() { await Excel.run(async (context) => { @@ -182,11 +182,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to create, access, and delete named items.

    -

    Setup

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -124,13 +123,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index a105bd44d..8fb52a748 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -8,11 +8,11 @@ api_set: ExcelApi: '1.8' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#deletePivot").on("click", () => tryCatch(deletePivot)); - $("#showPercentages").on("click", () => tryCatch(showPercentages)); - $("#showDifferenceFrom").on("click", () => tryCatch(showDifferenceFrom)); - $("#showSums").on("click", () => tryCatch(showSums)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("deletePivot").addEventListener("click", () => tryCatch(deletePivot)); + document.getElementById("showPercentages").addEventListener("click", () => tryCatch(showPercentages)); + document.getElementById("showDifferenceFrom").addEventListener("click", () => tryCatch(showDifferenceFrom)); + document.getElementById("showSums").addEventListener("click", () => tryCatch(showSums)); async function showPercentages() { await Excel.run(async (context) => { @@ -152,21 +152,19 @@ script: // Note: In a production add-in, you'd want to notify the user through your add-in's UI. console.error(error); } - } + } language: typescript template: content: |-

    This sample shows how to change the calculations of PivotTable data hierarchies.

    -

    Set up

    -

    Try it out

    -

    Clean up

    -

    Adjust the PivotTable

    -

    Adjust formatting

    -

    Delete the PivotTable

    -

    Try it out

    -

    Change functions

    -

    Filtering

    After pressing the "Enable filter" button, manually select the classification filter for the PivotTable -

    Data Manipulation

    -

    Clean up

    -

    Set up

    This creates a data sheet and two PivotTables in two different worksheets. @@ -151,11 +150,9 @@ template: Set up sample

    -

    Try it out

    -
    -

    Try it out

    -

    Filters

    Manual filter

    @@ -289,7 +286,6 @@ template: -

    PivotTable Status

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -126,15 +125,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 05f37c4b8..587b6562b 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -6,15 +6,15 @@ host: EXCEL api_set: ExcelApi: '1.10' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#add-pivot-table").on("click", () => tryCatch(addPivotTable)); - $("#add-slicer").on("click", () => tryCatch(addSlicer)); - $("#format-slicer").on("click", () => tryCatch(formatSlicer)); - $("#apply-style").on("click", () => tryCatch(applyStyle)); - $("#add-filters").on("click", () => tryCatch(addFilters)); - $("#remove-filters").on("click", () => tryCatch(removeFilters)); - $("#remove-slicer").on("click", () => tryCatch(removeSlicer)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-pivot-table").addEventListener("click", () => tryCatch(addPivotTable)); + document.getElementById("add-slicer").addEventListener("click", () => tryCatch(addSlicer)); + document.getElementById("format-slicer").addEventListener("click", () => tryCatch(formatSlicer)); + document.getElementById("apply-style").addEventListener("click", () => tryCatch(applyStyle)); + document.getElementById("add-filters").addEventListener("click", () => tryCatch(addFilters)); + document.getElementById("remove-filters").addEventListener("click", () => tryCatch(removeFilters)); + document.getElementById("remove-slicer").addEventListener("click", () => tryCatch(removeSlicer)); async function addSlicer() { await Excel.run(async (context) => { @@ -145,7 +145,6 @@ template:

    This sample shows how to work with a slicer on a PivotTable.

    -

    Setup

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -200,15 +199,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index f477ead82..2da0cde5e 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.15' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#get-pivottable-data-source").on("click", () => tryCatch(getPivotTableDataSource)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("get-pivottable-data-source").addEventListener("click", () => tryCatch(getPivotTableDataSource)); async function getPivotTableDataSource() { // This function logs information about the data source of a PivotTable. @@ -93,20 +93,18 @@ template:

    This sample shows how to get information about the data source of a PivotTable. It returns the type and string representation of the data source.

    Note: This sample works in Excel on Windows and Excel on the web. It doesn't work in Excel on Mac; this is a known issue.

    -

    Set up

    -

    Try it out

    -
    +
    language: html style: content: |- @@ -121,15 +119,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 373060786..700c067bf 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#set-cell-properties").on("click", () => tryCatch(setCellProperties)); - $("#get-cell-properties").on("click", () => tryCatch(getCellProperties)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("set-cell-properties").addEventListener("click", () => tryCatch(setCellProperties)); + document.getElementById("get-cell-properties").addEventListener("click", () => tryCatch(getCellProperties)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function setCellProperties() { await Excel.run(async (context) => { @@ -148,14 +148,12 @@ template:

    This sample shows how to format a range.

    -

    Set up

    -

    Try it out

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -171,15 +169,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index 859c9621e..f4f5a4a91 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -7,11 +7,11 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#set-font-and-fill-color").on("click", () => tryCatch(setFontAndFillColor)); - $("#set-number-format").on("click", () => tryCatch(setNumberFormat)); + document.getElementById("set-font-and-fill-color").addEventListener("click", () => tryCatch(setFontAndFillColor)); + document.getElementById("set-number-format").addEventListener("click", () => tryCatch(setNumberFormat)); async function setFontAndFillColor() { await Excel.run(async (context) => { @@ -75,18 +75,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to format a range.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -110,15 +108,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 4bda94935..7256c9820 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -7,12 +7,12 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#insert-range").on("click", () => tryCatch(insertRange)); - $("#delete-range").on("click", () => tryCatch(deleteRange)); - $("#clear-range").on("click", () => tryCatch(clearRange)); + document.getElementById("insert-range").addEventListener("click", () => tryCatch(insertRange)); + document.getElementById("delete-range").addEventListener("click", () => tryCatch(deleteRange)); + document.getElementById("clear-range").addEventListener("click", () => tryCatch(clearRange)); async function insertRange() { await Excel.run(async (context) => { @@ -85,18 +85,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to insert, delete and clear the contents of a range.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -123,15 +121,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/outline.yaml b/samples/excel/42-range/outline.yaml index 25b6bb2af..206088be3 100644 --- a/samples/excel/42-range/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -6,14 +6,14 @@ host: EXCEL api_set: ExcelApi: '1.10' script: - content: | - $("#setup-data").on("click", () => tryCatch(setupData)); - $("#setup-totals").on("click", () => tryCatch(setupTotals)); - $("#group-rows").on("click", () => tryCatch(groupRows)); - $("#group-columns").on("click", () => tryCatch(groupColumns)); - $("#collapse-outline").on("click", () => tryCatch(collapseOutline)); - $("#expand-outline").on("click", () => tryCatch(expandOutline)); - $("#ungroup").on("click", () => tryCatch(ungroup)); + content: |- + document.getElementById("setup-data").addEventListener("click", () => tryCatch(setupData)); + document.getElementById("setup-totals").addEventListener("click", () => tryCatch(setupTotals)); + document.getElementById("group-rows").addEventListener("click", () => tryCatch(groupRows)); + document.getElementById("group-columns").addEventListener("click", () => tryCatch(groupColumns)); + document.getElementById("collapse-outline").addEventListener("click", () => tryCatch(collapseOutline)); + document.getElementById("expand-outline").addEventListener("click", () => tryCatch(expandOutline)); + document.getElementById("ungroup").addEventListener("click", () => tryCatch(ungroup)); async function groupRows() { Excel.run(async (context) => { @@ -174,7 +174,6 @@ template:

    This sample shows how to group and ungroup rows and columns for an outline.

    -

    Set up

    -

    Try it out

    -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -201,15 +201,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index 91f2cce7f..4b08ddc0a 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -6,13 +6,13 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#reset").on("click", () => tryCatch(reset)); - $("#color-selected-ranges").on("click", () => tryCatch(colorSelectedRanges)); - $("#color-specified-ranges").on("click", () => tryCatch(colorSpecifiedRanges)); - $("#color-all-formula-ranges").on("click", () => tryCatch(colorAllFormulaRanges)); - $("#color-all-logical-text-ranges").on("click", () => tryCatch(colorAllLogicalAndTextRanges)); - $("#read-properties-specified-ranges").on("click", () => tryCatch(readPropertiesOfSpecifiedRanges)); + content: |- + document.getElementById("reset").addEventListener("click", () => tryCatch(reset)); + document.getElementById("color-selected-ranges").addEventListener("click", () => tryCatch(colorSelectedRanges)); + document.getElementById("color-specified-ranges").addEventListener("click", () => tryCatch(colorSpecifiedRanges)); + document.getElementById("color-all-formula-ranges").addEventListener("click", () => tryCatch(colorAllFormulaRanges)); + document.getElementById("color-all-logical-text-ranges").addEventListener("click", () => tryCatch(colorAllLogicalAndTextRanges)); + document.getElementById("read-properties-specified-ranges").addEventListener("click", () => tryCatch(readPropertiesOfSpecifiedRanges)); async function colorSelectedRanges() { await Excel.run(async (context) => { @@ -123,11 +123,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to apply actions simultaneously to multiple, discontiguous ranges. Some of these ranges are found using the Range object's getSpecialCells method.

    -

    Set up

    -

    Try it out

    -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -160,15 +160,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml index b929a80b2..339653430 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -6,11 +6,11 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#select-D3").on("click", () => tryCatch(selectD3)); - $("#select-E4").on("click", () => tryCatch(selectE4)); - $("#get-direct-dependents").on("click", () => tryCatch(getDirectDependents)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("select-D3").addEventListener("click", () => tryCatch(selectD3)); + document.getElementById("select-E4").addEventListener("click", () => tryCatch(selectE4)); + document.getElementById("get-direct-dependents").addEventListener("click", () => tryCatch(getDirectDependents)); /** Select a cell with direct dependents on the same worksheet. */ async function selectD3() { @@ -119,14 +119,12 @@ template:

    This sample shows how to find and highlight the dependents of the currently selected cell. Dependent cells contain formulas that refer to other cells.

    -

    Set up

    -

    Try it out

    Cells in the 'E' column have direct dependents on the same worksheet. Cells in the 'F' column have direct dependents on another worksheet.

    @@ -155,15 +153,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index e447eceb7..4b0c31b63 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -7,12 +7,12 @@ api_set: ExcelApi: '1.9' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#findText").on("click", () => tryCatch(findText)); - $("#findTextWithNullCheck").on("click", () => tryCatch(findTextWithNullCheck)); - $("#toggleComplete").on("click", () => tryCatch(toggleComplete)); - $("#toggleCase").on("click", () => tryCatch(toggleCase)); - $("#toggleDirection").on("click", () => tryCatch(toggleDirection)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("findText").addEventListener("click", () => tryCatch(findText)); + document.getElementById("findTextWithNullCheck").addEventListener("click", () => tryCatch(findTextWithNullCheck)); + document.getElementById("toggleComplete").addEventListener("click", () => tryCatch(toggleComplete)); + document.getElementById("toggleCase").addEventListener("click", () => tryCatch(toggleCase)); + document.getElementById("toggleDirection").addEventListener("click", () => tryCatch(toggleDirection)); let isCompleteMatchToggle = false; let isMatchCaseToggle = false; @@ -159,13 +159,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index e279163c5..1f28f89a2 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -6,14 +6,14 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#select-E9").on("click", () => tryCatch(selectE9)); - $("#select-D8-E9").on("click", () => tryCatch(selectD8E9)); - $("#get-range-edge-left").on("click", () => tryCatch(getRangeEdgeLeft)); - $("#get-range-edge-up").on("click", () => tryCatch(getRangeEdgeUp)); - $("#get-extended-range-right").on("click", () => tryCatch(getExtendedRangeRight)); - $("#get-extended-range-down").on("click", () => tryCatch(getExtendedRangeDown)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("select-E9").addEventListener("click", () => tryCatch(selectE9)); + document.getElementById("select-D8-E9").addEventListener("click", () => tryCatch(selectD8E9)); + document.getElementById("get-range-edge-left").addEventListener("click", () => tryCatch(getRangeEdgeLeft)); + document.getElementById("get-range-edge-up").addEventListener("click", () => tryCatch(getRangeEdgeUp)); + document.getElementById("get-extended-range-right").addEventListener("click", () => tryCatch(getExtendedRangeRight)); + document.getElementById("get-extended-range-down").addEventListener("click", () => tryCatch(getExtendedRangeDown)); async function getRangeEdgeLeft() { await Excel.run(async (context) => { @@ -179,7 +179,6 @@ template: Add sample data
    -

    Try it out

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -313,15 +311,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml index 9f38bbbb6..c43bd925a 100644 --- a/samples/excel/42-range/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -6,10 +6,10 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#create-merged-range").on("click", () => tryCatch(createMergedRange)); - $("#get-merged-range").on("click", () => tryCatch(getMergedRange)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("create-merged-range").addEventListener("click", () => tryCatch(createMergedRange)); + document.getElementById("get-merged-range").addEventListener("click", () => tryCatch(getMergedRange)); async function createMergedRange() { await Excel.run(async (context) => { @@ -95,14 +95,12 @@ template:

    This sample shows how to create and find merged ranges in a worksheet.

    -

    Set up

    -

    Try it out

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -248,15 +246,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index e2a182d4a..f89dbda7c 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -6,11 +6,11 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#delete-name").on("click", () => tryCatch(deleteName)); - $("#delete-distributor").on("click", () => tryCatch(deleteDistributor)); + document.getElementById("delete-name").addEventListener("click", () => tryCatch(deleteName)); + document.getElementById("delete-distributor").addEventListener("click", () => tryCatch(deleteDistributor)); async function deleteName() { await Excel.run(async (context) => { @@ -83,18 +83,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to remove rows with duplicate column values from a range.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -119,15 +117,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index 9c6cc34ae..d10058503 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#set-text-orientation").on("click", () => tryCatch(setTextOrientation)); - $("#get-text-orientation").on("click", () => tryCatch(getTextOrientation)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("set-text-orientation").addEventListener("click", () => tryCatch(setTextOrientation)); + document.getElementById("get-text-orientation").addEventListener("click", () => tryCatch(getTextOrientation)); async function setTextOrientation() { await Excel.run(async (context) => { @@ -75,18 +75,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to set and get the text orientation within a range.

    -

    Set up

    -

    Try it out

    @@ -101,7 +99,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -113,15 +111,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index de07de00d..6ae16734d 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: | - $("#get-selection").on("click", () => tryCatch(getSelection)); - $("#set-selection").on("click", () => tryCatch(setSelection)); + content: |- + document.getElementById("get-selection").addEventListener("click", () => tryCatch(getSelection)); + document.getElementById("set-selection").addEventListener("click", () => tryCatch(setSelection)); async function getSelection() { await Excel.run(async (context) => { @@ -45,11 +45,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get and set the currently selected range.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -73,15 +72,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index c6647d0ca..5e44ab46d 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -7,17 +7,17 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - - $("#set-value").on("click", () => tryCatch(setValue)); - $("#set-values").on("click", () => tryCatch(setValues)); - $("#set-formula").on("click", () => tryCatch(setFormula)); - $("#set-formulas").on("click", () => tryCatch(setFormulas)); - $("#set-formulas-r1c1").on("click", () => tryCatch(setFormulasR1C1)); - $("#get-values").on("click", () => tryCatch(getValues)); - $("#get-texts").on("click", () => tryCatch(getTexts)); - $("#get-formulas").on("click", () => tryCatch(getFormulas)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + document.getElementById("set-value").addEventListener("click", () => tryCatch(setValue)); + document.getElementById("set-values").addEventListener("click", () => tryCatch(setValues)); + document.getElementById("set-formula").addEventListener("click", () => tryCatch(setFormula)); + document.getElementById("set-formulas").addEventListener("click", () => tryCatch(setFormulas)); + document.getElementById("set-formulas-r1c1").addEventListener("click", () => tryCatch(setFormulasR1C1)); + document.getElementById("get-values").addEventListener("click", () => tryCatch(getValues)); + document.getElementById("get-texts").addEventListener("click", () => tryCatch(getTexts)); + document.getElementById("get-formulas").addEventListener("click", () => tryCatch(getFormulas)); async function setValue() { await Excel.run(async (context) => { @@ -173,21 +173,18 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to set and get values and formulas for a range.

    -

    Set up

    -

    Try it out

    - @@ -203,9 +200,7 @@ template: -
    - @@ -218,7 +213,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -230,15 +225,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index f322a2d58..67e2fdaaa 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -7,14 +7,14 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: |+ - $("#setup").on("click", () => tryCatch(setup)); - $("#add-new-style").on("click", () => tryCatch(addNewStyle)); - $("#apply-new-style").on("click", () => tryCatch(applyNewStyle)); - $("#apply-built-in-style").on("click", () => tryCatch(applyBuiltInStyle)); - $("#get-style-font").on("click", () => tryCatch(getStyleFontProperties)); - $("#get-style-alignment").on("click", () => tryCatch(getStyleAlignmentProperties)); - $("#delete-new-style").on("click", () => tryCatch(deleteNewStyle)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-new-style").addEventListener("click", () => tryCatch(addNewStyle)); + document.getElementById("apply-new-style").addEventListener("click", () => tryCatch(applyNewStyle)); + document.getElementById("apply-built-in-style").addEventListener("click", () => tryCatch(applyBuiltInStyle)); + document.getElementById("get-style-font").addEventListener("click", () => tryCatch(getStyleFontProperties)); + document.getElementById("get-style-alignment").addEventListener("click", () => tryCatch(getStyleAlignmentProperties)); + document.getElementById("delete-new-style").addEventListener("click", () => tryCatch(deleteNewStyle)); async function addNewStyle() { await Excel.run(async (context) => { @@ -151,23 +151,18 @@ script: console.error(error); } } - - - language: typescript template: - content: | + content: |-

    This sample shows how to add, apply, get and delete styles.

    -

    Set up

    -

    Try it out

    Add new style will throw an error if the style has already been added.

    @@ -175,31 +170,26 @@ template: Add new style
    -
    -
    -
    -
    -

    Clean up

    Delete new style throws an error if the style doesn't exist (that is, hasn't been added). Deleting the style also causes the other buttons using the style to fail.

    @@ -221,15 +211,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index 542ddab5b..d1761bbfe 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#try-create-chart-from-table").on("click", () => tryCatch(tryCreateChartFromEmptyTable)); - $("#fill-table").on("click", () => tryCatch(fillTable)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("try-create-chart-from-table").addEventListener("click", () => tryCatch(tryCreateChartFromEmptyTable)); + document.getElementById("fill-table").addEventListener("click", () => tryCatch(fillTable)); async function tryCreateChartFromEmptyTable() { await Excel.run(async (context) => { @@ -100,18 +100,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample creates a chart from a table, but only if there's data in the table.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -135,15 +133,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 524efc7d6..2c07a8a7f 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#createHexagon").on("click", () => tryCatch(createHexagon)); - $("#createTriangle").on("click", () => tryCatch(createTriangle)); - $("#createSmileyFace").on("click", () => tryCatch(createSmileyFace)); - $("#removeAll").on("click", () => tryCatch(removeAll)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("createHexagon").addEventListener("click", () => tryCatch(createHexagon)); + document.getElementById("createTriangle").addEventListener("click", () => tryCatch(createTriangle)); + document.getElementById("createSmileyFace").addEventListener("click", () => tryCatch(createSmileyFace)); + document.getElementById("removeAll").addEventListener("click", () => tryCatch(removeAll)); async function createHexagon() { await Excel.run(async (context) => { @@ -128,15 +128,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index 743bac069..aa3b2d605 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#createShapes").on("click", () => tryCatch(createShapes)); - $("#groupShapes").on("click", () => tryCatch(groupShapes)); - $("#moveGroup").on("click", () => tryCatch(moveGroup)); - $("#ungroupShapes").on("click", () => tryCatch(ungroupShapes)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("createShapes").addEventListener("click", () => tryCatch(createShapes)); + document.getElementById("groupShapes").addEventListener("click", () => tryCatch(groupShapes)); + document.getElementById("moveGroup").addEventListener("click", () => tryCatch(moveGroup)); + document.getElementById("ungroupShapes").addEventListener("click", () => tryCatch(ungroupShapes)); async function groupShapes() { await Excel.run(async (context) => { @@ -143,15 +143,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index e02210f49..e931e3fd3 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -6,12 +6,12 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); $("#selectedFile").on("change", () => tryCatch(readImageFromFile)); - $("#flipImage").on("click", () => tryCatch(flipImage)); - $("#getImageFormat").on("click", () => tryCatch(getImageFormat)); - $("#writeOutImageString").on("click", () => tryCatch(writeOutImageString)); + document.getElementById("flipImage").addEventListener("click", () => tryCatch(flipImage)); + document.getElementById("getImageFormat").addEventListener("click", () => tryCatch(getImageFormat)); + document.getElementById("writeOutImageString").addEventListener("click", () => tryCatch(writeOutImageString)); async function readImageFromFile() { const myFile = document.getElementById("selectedFile"); @@ -127,15 +127,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index 396bdf0b5..58577bab0 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -7,17 +7,17 @@ api_set: ExcelApi: '1.9' script: content: |- - $("#setup").on("click", () => tryCatch(setup)); - $("#createShapes").on("click", () => tryCatch(createShapes)); - $("#addStraightLine").on("click", () => tryCatch(addStraightLine)); - $("#addCurvedLine").on("click", () => tryCatch(addCurvedLine)); - $("#arrowLine").on("click", () => tryCatch(arrowLine)); - $("#diamondLine").on("click", () => tryCatch(diamondLine)); - $("#connectStraightLine").on("click", () => tryCatch(connectStraightLine)); - $("#disconnectStraightLine").on("click", () => tryCatch(disconnectStraightLine)); - $("#connectCurvedLine").on("click", () => tryCatch(connectCurvedLine)); - $("#disconnectCurvedLine").on("click", () => tryCatch(disconnectCurvedLine)); - $("#deleteLines").on("click", () => tryCatch(deleteLines)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("createShapes").addEventListener("click", () => tryCatch(createShapes)); + document.getElementById("addStraightLine").addEventListener("click", () => tryCatch(addStraightLine)); + document.getElementById("addCurvedLine").addEventListener("click", () => tryCatch(addCurvedLine)); + document.getElementById("arrowLine").addEventListener("click", () => tryCatch(arrowLine)); + document.getElementById("diamondLine").addEventListener("click", () => tryCatch(diamondLine)); + document.getElementById("connectStraightLine").addEventListener("click", () => tryCatch(connectStraightLine)); + document.getElementById("disconnectStraightLine").addEventListener("click", () => tryCatch(disconnectStraightLine)); + document.getElementById("connectCurvedLine").addEventListener("click", () => tryCatch(connectCurvedLine)); + document.getElementById("disconnectCurvedLine").addEventListener("click", () => tryCatch(disconnectCurvedLine)); + document.getElementById("deleteLines").addEventListener("click", () => tryCatch(deleteLines)); async function addStraightLine() { await Excel.run(async (context) => { @@ -219,13 +219,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index a5e6c3d1b..b674aded7 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -6,14 +6,14 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#moveLeft").on("click", () => tryCatch(moveLeft)); - $("#moveDown").on("click", () => tryCatch(moveDown)); - $("#rotate").on("click", () => tryCatch(rotate)); - $("#scaleUp").on("click", () => tryCatch(scaleUp)); - $("#moveZOrderDown").on("click", () => tryCatch(moveZOrderDown)); - $("#createShapes").on("click", () => tryCatch(createShapes)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("moveLeft").addEventListener("click", () => tryCatch(moveLeft)); + document.getElementById("moveDown").addEventListener("click", () => tryCatch(moveDown)); + document.getElementById("rotate").addEventListener("click", () => tryCatch(rotate)); + document.getElementById("scaleUp").addEventListener("click", () => tryCatch(scaleUp)); + document.getElementById("moveZOrderDown").addEventListener("click", () => tryCatch(moveZOrderDown)); + document.getElementById("createShapes").addEventListener("click", () => tryCatch(createShapes)); async function moveLeft() { await Excel.run(async (context) => { @@ -158,15 +158,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 12e7bcdee..412051e0e 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -6,13 +6,13 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#createGeometricShape").on("click", () => tryCatch(createGeometricShape)); - $("#createTextbox").on("click", () => tryCatch(createTextbox)); - $("#centerTextbox").on("click", () => tryCatch(centerTextbox)); - $("#autoSizeText").on("click", () => tryCatch(autoSizeText)); - $("#deleteText").on("click", () => tryCatch(deleteText)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("createGeometricShape").addEventListener("click", () => tryCatch(createGeometricShape)); + document.getElementById("createTextbox").addEventListener("click", () => tryCatch(createTextbox)); + document.getElementById("centerTextbox").addEventListener("click", () => tryCatch(centerTextbox)); + document.getElementById("autoSizeText").addEventListener("click", () => tryCatch(autoSizeText)); + document.getElementById("deleteText").addEventListener("click", () => tryCatch(deleteText)); async function createTextbox() { @@ -133,15 +133,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml index 14d38ec3d..4b5cf701f 100644 --- a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml @@ -7,12 +7,12 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#add-row").on("click", () => tryCatch(addRow)); - $("#add-column").on("click", () => tryCatch(addColumn)); - $("#add-calculated-column").on("click", () => tryCatch(addCalculatedColumn)); + document.getElementById("add-row").addEventListener("click", () => tryCatch(addRow)); + document.getElementById("add-column").addEventListener("click", () => tryCatch(addColumn)); + document.getElementById("add-calculated-column").addEventListener("click", () => tryCatch(addCalculatedColumn)); async function addRow() { await Excel.run(async (context) => { @@ -126,18 +126,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to add columns and rows to a table.

    -

    Set up

    -

    Try it out

    Press the following buttons in order, so rows and columns of appropriate sizes are added.

    @@ -153,7 +151,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -165,15 +163,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index c0e31603c..2476e7886 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#convert-range-to-table").on("click", () => tryCatch(convertRangeToTable)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("convert-range-to-table").addEventListener("click", () => tryCatch(convertRangeToTable)); async function convertRangeToTable() { await Excel.run(async (context) => { @@ -59,18 +59,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to convert a range to a table.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -91,15 +89,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index 2b4f00bc9..7c458bb57 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -7,8 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#create-table").on("click", () => tryCatch(createTable)); + content: |- + document.getElementById("create-table").addEventListener("click", () => tryCatch(createTable)); async function createTable() { await Excel.run(async (context) => { @@ -51,11 +51,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to create a table.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -76,15 +75,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index e55d41ca1..781dc4ac6 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#filter-table").on("click", () => tryCatch(filterTable)); - $("#clear-filters").on("click", () => tryCatch(clearFilters)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("filter-table").addEventListener("click", () => tryCatch(filterTable)); + document.getElementById("clear-filters").addEventListener("click", () => tryCatch(clearFilters)); async function filterTable() { await Excel.run(async (context) => { @@ -87,18 +87,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to filter the data in a table using different filter types.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -122,15 +120,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 87e629d4f..521c164d6 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#format-table").on("click", () => tryCatch(formatTable)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("format-table").addEventListener("click", () => tryCatch(formatTable)); async function formatTable() { await Excel.run(async (context) => { @@ -66,18 +66,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to format the different components of a table.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -98,15 +96,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 7620680aa..118e50b13 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#get-data-from-table").on("click", () => tryCatch(getData)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("get-data-from-table").addEventListener("click", () => tryCatch(getData)); async function getData() { await Excel.run(async (context) => { @@ -79,29 +79,25 @@ script: } language: typescript template: - content: |+ + content: |-

    This sample shows how to get data from a table and write it to the sheet.

    -

    Set up

    -

    Try it out

    - - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -113,15 +109,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml index 33af4d50e..027847e85 100644 --- a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml @@ -7,11 +7,11 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: |+ - $("#create-table").on("click", () => tryCatch(createTable)); - $("#filter-table").on("click", () => tryCatch(filterTable)); - $("#get-range").on("click", () => tryCatch(getRange)); - $("#get-visible-range").on("click", () => tryCatch(getVisibleRange)); + content: |- + document.getElementById("create-table").addEventListener("click", () => tryCatch(createTable)); + document.getElementById("filter-table").addEventListener("click", () => tryCatch(filterTable)); + document.getElementById("get-range").addEventListener("click", () => tryCatch(getRange)); + document.getElementById("get-visible-range").addEventListener("click", () => tryCatch(getVisibleRange)); async function getVisibleRange() { await Excel.run(async (context) => { @@ -94,14 +94,12 @@ script: console.error(error); } } - language: typescript template: - content: |+ + content: |-

    This sample shows how to filter the data in a table using different filter types.

    -

    Set up

    -

    Try it out

    - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -136,15 +132,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 35786a451..30e9bb971 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -7,8 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#import-json-data").on("click", () => tryCatch(importJsonData)); + content: |- + document.getElementById("import-json-data").addEventListener("click", () => tryCatch(importJsonData)); async function importJsonData() { await Excel.run(async (context) => { @@ -113,21 +113,19 @@ script: } language: typescript template: - content: |+ + content: |-

    This sample shows how to import json data into a new table.

    -

    Try it out

    - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -139,15 +137,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/46-table/resize-table.yaml b/samples/excel/46-table/resize-table.yaml index dd3dbec90..1001e0bf0 100644 --- a/samples/excel/46-table/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#resize-table").on("click", () => tryCatch(resizeTable)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("resize-table").addEventListener("click", () => tryCatch(resizeTable)); async function resizeTable() { await Excel.run(async (context) => { @@ -67,14 +67,12 @@ template:

    This sample shows how to resize a table.

    -

    Set up

    -

    Try it out

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -105,15 +103,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml index 51f102ebf..6c5dcc12d 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#create-setting").on("click", () => tryCatch(createSetting)); - $("#change-setting").on("click", () => tryCatch(changeSetting)); - $("#delete-setting").on("click", () => tryCatch(deleteSetting)); + content: |- + document.getElementById("create-setting").addEventListener("click", () => tryCatch(createSetting)); + document.getElementById("change-setting").addEventListener("click", () => tryCatch(changeSetting)); + document.getElementById("delete-setting").addEventListener("click", () => tryCatch(deleteSetting)); async function createSetting() { await Excel.run(async (context) => { @@ -77,7 +77,6 @@ template:

    This sample shows how to create, get, change, and delete settings in the workbook.

    -

    Try it out

    Press the button to create and display a setting.

    @@ -95,7 +94,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -107,15 +106,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index e3df092fb..5bb4f7f73 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -7,8 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.8' script: - content: | - $("#create-new-blank-workbook").on("click", () => tryCatch(createBlankWorkbook)); + content: |- + document.getElementById("create-new-blank-workbook").addEventListener("click", () => tryCatch(createBlankWorkbook)); $("#file").on("change", () => tryCatch(createWorkbookFromExisting)); async function createBlankWorkbook() { @@ -51,7 +51,6 @@ template:

    This sample shows how to create a new, empty workbook and how to create a new workbook by copying an existing one.

    -

    Try it out

    Create empty workbook

    @@ -78,15 +77,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml index d460268f5..cde8c9289 100644 --- a/samples/excel/50-workbook/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -6,10 +6,10 @@ host: EXCEL api_set: ExcelAPI: '1.12' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#display-date-time-setting").on("click", () => tryCatch(displayDateTimeSetting)); - $("#write-date-time-setting").on("click", () => tryCatch(writeDateTimeSetting)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("display-date-time-setting").addEventListener("click", () => tryCatch(displayDateTimeSetting)); + document.getElementById("write-date-time-setting").addEventListener("click", () => tryCatch(writeDateTimeSetting)); async function displayDateTimeSetting() { await Excel.run(async (context) => { @@ -116,10 +116,10 @@ template:

    -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -131,15 +131,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml index 92c0950c2..8de992922 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -6,11 +6,11 @@ host: EXCEL api_set: ExcelApi: '1.11' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#display-culture-info").on("click", () => tryCatch(displayCultureInfo)); - $("#write-decimal").on("click", () => tryCatch(writeDecimal)); - $("#write-big-number").on("click", () => tryCatch(writeBigNumber)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("display-culture-info").addEventListener("click", () => tryCatch(displayCultureInfo)); + document.getElementById("write-decimal").addEventListener("click", () => tryCatch(writeDecimal)); + document.getElementById("write-big-number").addEventListener("click", () => tryCatch(writeBigNumber)); async function displayCultureInfo() { await Excel.run(async (context) => { @@ -111,14 +111,12 @@ template:

    This sample shows how to apply the cultural settings APIs to help normalize data.

    -

    Setup

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -145,15 +143,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index a1156ca55..e22d27213 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -6,16 +6,16 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#protect-data-in-worksheet").on("click", () => tryCatch(protectDataInWorksheet)); - $("#unprotect-data-in-worksheet").on("click", () => tryCatch(unprotectDataInWorksheet)); - $("#protect-workbook-structure").on("click", () => tryCatch(protectWorkbookStructure)); - $("#unprotect-workbook-structure").on("click", () => tryCatch(unprotectWorkbookStructure)); - $("#password-protect-data-in-worksheet").on("click", () => tryCatch(passwordProtectDataInWorksheet)); - $("#password-unprotect-data-in-worksheet").on("click", () => tryCatch(passwordUnprotectDataInWorksheet)); - $("#password-protect-workbook-structure").on("click", () => tryCatch(passwordProtectWorkbookStructure)); - $("#password-unprotect-workbook-structure").on("click", () => tryCatch(passwordUnprotectWorkbookStructure)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("protect-data-in-worksheet").addEventListener("click", () => tryCatch(protectDataInWorksheet)); + document.getElementById("unprotect-data-in-worksheet").addEventListener("click", () => tryCatch(unprotectDataInWorksheet)); + document.getElementById("protect-workbook-structure").addEventListener("click", () => tryCatch(protectWorkbookStructure)); + document.getElementById("unprotect-workbook-structure").addEventListener("click", () => tryCatch(unprotectWorkbookStructure)); + document.getElementById("password-protect-data-in-worksheet").addEventListener("click", () => tryCatch(passwordProtectDataInWorksheet)); + document.getElementById("password-unprotect-data-in-worksheet").addEventListener("click", () => tryCatch(passwordUnprotectDataInWorksheet)); + document.getElementById("password-protect-workbook-structure").addEventListener("click", () => tryCatch(passwordProtectWorkbookStructure)); + document.getElementById("password-unprotect-workbook-structure").addEventListener("click", () => tryCatch(passwordUnprotectWorkbookStructure)); async function protectDataInWorksheet() { await Excel.run(async (context) => { @@ -178,14 +178,12 @@ template:

    This sample shows how to protect a worksheet's data and the workbook's structure.

    -

    Set up

    -

    Try it out

    Protect without password

    @@ -251,15 +249,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/workbook-built-in-functions.yaml b/samples/excel/50-workbook/workbook-built-in-functions.yaml index e3a260e1c..3490d043b 100644 --- a/samples/excel/50-workbook/workbook-built-in-functions.yaml +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -6,10 +6,10 @@ host: EXCEL api_set: ExcelAPI: '1.2' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#call-vlookup").on("click", () => tryCatch(callVlookup)); - $("#nest-functions").on("click", () => tryCatch(nestFunctions)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("call-vlookup").addEventListener("click", () => tryCatch(callVlookup)); + document.getElementById("nest-functions").addEventListener("click", () => tryCatch(nestFunctions)); async function callVlookup() { await Excel.run(async (context) => { @@ -83,7 +83,6 @@ template:

    This sample shows how to use and nest the built-in Excel functions VLOOKUP and SUM. The sample uses VLOOKUP to return data, and then it uses SUM to combine data returned by VLOOKUP.

    -

    Setup

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -113,15 +112,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/workbook-calculation.yaml b/samples/excel/50-workbook/workbook-calculation.yaml index 5c19fab32..2d3b8aaea 100644 --- a/samples/excel/50-workbook/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -6,14 +6,14 @@ host: EXCEL api_set: ExcelApi: '1.11' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#register-onCalculated-handler").on("click", () => tryCatch(registerOnCalculatedHandler)); - $("#recalculate-single").on("click", () => tryCatch(recalculateSingle)); - $("#recalculate-column").on("click", () => tryCatch(recalculateColumn)); - $("#manual-calculations").on("click", () => tryCatch(switchToManualCalculations)); - $("#automatic-calculations").on("click", () => tryCatch(switchToAutomaticCalculations)); - $("#force-calculation").on("click", () => tryCatch(forceCalculation)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("register-onCalculated-handler").addEventListener("click", () => tryCatch(registerOnCalculatedHandler)); + document.getElementById("recalculate-single").addEventListener("click", () => tryCatch(recalculateSingle)); + document.getElementById("recalculate-column").addEventListener("click", () => tryCatch(recalculateColumn)); + document.getElementById("manual-calculations").addEventListener("click", () => tryCatch(switchToManualCalculations)); + document.getElementById("automatic-calculations").addEventListener("click", () => tryCatch(switchToAutomaticCalculations)); + document.getElementById("force-calculation").addEventListener("click", () => tryCatch(forceCalculation)); async function registerOnCalculatedHandler() { await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -137,7 +137,6 @@ template:

    This sample shows how to use the calculation APIs.

    -

    Set up

    -

    Manual calculations

    Try switching to manual calculation, then editing the workbook.

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -186,15 +183,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index 3d452bd3c..66b67a49c 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -6,8 +6,8 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#get-active-cell").on("click", () => tryCatch(run)); + content: |- + document.getElementById("get-active-cell").addEventListener("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { @@ -34,11 +34,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get the active cell of the entire workbook.

    -

    Try it out

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -118,15 +116,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml index 2bc16606d..1c09d834a 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -7,11 +7,11 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: | - $("#add-worksheet").on("click", () => tryCatch(addWorksheet)); - $("#delete-worksheet").on("click", () => tryCatch(deleteWorksheet)); - $("#rename-worksheet").on("click", () => tryCatch(renameWorksheet)); - $("#move-worksheet").on("click", () => tryCatch(moveWorksheet)); + content: |- + document.getElementById("add-worksheet").addEventListener("click", () => tryCatch(addWorksheet)); + document.getElementById("delete-worksheet").addEventListener("click", () => tryCatch(deleteWorksheet)); + document.getElementById("rename-worksheet").addEventListener("click", () => tryCatch(renameWorksheet)); + document.getElementById("move-worksheet").addEventListener("click", () => tryCatch(moveWorksheet)); async function addWorksheet() { await Excel.run(async (context) => { @@ -103,11 +103,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to add, delete, rename and change the position of a worksheet.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -137,15 +136,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index a33001240..bc359b69d 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.8' script: - content: | - $("#hide-gridlines").on("click", () => tryCatch(hideGridlines)); - $("#show-gridlines").on("click", () => tryCatch(showGridlines)); + content: |- + document.getElementById("hide-gridlines").addEventListener("click", () => tryCatch(hideGridlines)); + document.getElementById("show-gridlines").addEventListener("click", () => tryCatch(showGridlines)); async function hideGridlines() { await Excel.run(async (context) => { @@ -41,11 +41,10 @@ script: } language: typescript template: - content: |+ + content: |-

    This sample shows how to hide and show gridlines within a worksheet.

    -

    Try it out

    @@ -57,10 +56,9 @@ template: Show gridlines
    - language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -72,15 +70,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index 82cf87258..d179c4d50 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -7,8 +7,8 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: | - $("#list-worksheets").on("click", () => tryCatch(listWorksheets)); + content: |- + document.getElementById("list-worksheets").addEventListener("click", () => tryCatch(listWorksheets)); async function listWorksheets() { await Excel.run(async (context) => { @@ -40,11 +40,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to list the names of the worksheets in the workbook.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -65,15 +64,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml index 686ff762f..3bf6f0473 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.5' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#compare-current-and-previous-year").on("click", () => tryCatch(compareCurrentWithPreviousTax)); - $("#compare-first-and-last-year").on("click", () => tryCatch(compareFirstWithMostRecentTaxRate)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("compare-current-and-previous-year").addEventListener("click", () => tryCatch(compareCurrentWithPreviousTax)); + document.getElementById("compare-first-and-last-year").addEventListener("click", () => tryCatch(compareFirstWithMostRecentTaxRate)); async function setup() { await Excel.run(async (context) => { @@ -119,18 +119,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get a reference to a sheet using its relative worksheet position.

    -

    Set up

    -

    Try it out

    Select any of the three worksheets for 2015, 1016, or 2017 and press the button to compare the tax due on the current sheet with the previous sheet.

    @@ -144,7 +142,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -156,15 +154,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 8c0b98681..11f1917e8 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -7,11 +7,11 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#set-tab-color-to-hex-color").on("click", () => tryCatch(setTabColorToHexColor)); - $("#set-tab-color-to-named-color").on("click", () => tryCatch(setTabColorToNamedColor)); - $("#set-tab-color-to-default-color").on("click", () => tryCatch(setTabColorToDefaultColor)); - $("#get-tab-color").on("click", () => tryCatch(getTabColor)); + content: |- + document.getElementById("set-tab-color-to-hex-color").addEventListener("click", () => tryCatch(setTabColorToHexColor)); + document.getElementById("set-tab-color-to-named-color").addEventListener("click", () => tryCatch(setTabColorToNamedColor)); + document.getElementById("set-tab-color-to-default-color").addEventListener("click", () => tryCatch(setTabColorToDefaultColor)); + document.getElementById("get-tab-color").addEventListener("click", () => tryCatch(getTabColor)); async function setTabColorToHexColor() { await Excel.run(async (context) => { @@ -68,7 +68,6 @@ template:

    This sample shows how to set and get the tab color of a worksheet.

    -

    Try it out

    @@ -89,7 +88,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -101,15 +100,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index c3659372e..a4e887a21 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -6,14 +6,14 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#add-percent-auto-filter").on("click", () => tryCatch(addPercentAutoFilter)); - $("#add-custom-auto-filter").on("click", () => tryCatch(addCustomAutoFilter)); - $("#randomize-data").on("click", () => tryCatch(randomizeData)); - $("#refresh-auto-filter").on("click", () => tryCatch(refreshAutoFilter)); - $("#clear-single-auto-filter").on("click", () => tryCatch(clearSingleAutoFilter)); - $("#remove-all-auto-filters").on("click", () => tryCatch(removeAllAutoFilters)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-percent-auto-filter").addEventListener("click", () => tryCatch(addPercentAutoFilter)); + document.getElementById("add-custom-auto-filter").addEventListener("click", () => tryCatch(addCustomAutoFilter)); + document.getElementById("randomize-data").addEventListener("click", () => tryCatch(randomizeData)); + document.getElementById("refresh-auto-filter").addEventListener("click", () => tryCatch(refreshAutoFilter)); + document.getElementById("clear-single-auto-filter").addEventListener("click", () => tryCatch(clearSingleAutoFilter)); + document.getElementById("remove-all-auto-filters").addEventListener("click", () => tryCatch(removeAllAutoFilters)); async function addPercentAutoFilter() { // This function adds a percentage AutoFilter to the active worksheet @@ -156,14 +156,12 @@ template:

    This sample shows how to work with an AutoFilter on a worksheet.

    -

    Setup

    -

    Try it out

    Add two filters. One shows only the top half of sales and the other shows only fruits that end with the letter 'e'.

    @@ -194,7 +192,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -206,15 +204,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 3e69dfe43..1fe3d9318 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -6,9 +6,9 @@ host: EXCEL api_set: ExcelApi: '1.7' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#copy-worksheet").on("click", () => tryCatch(run)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("copy-worksheet").addEventListener("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { @@ -69,14 +69,12 @@ template:

    This sample shows how to copy a worksheet.

    -

    Set up

    -

    Try it out

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -171,15 +169,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index 597ad0518..3d4a283ae 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -6,15 +6,15 @@ host: EXCEL api_set: ExcelApi: '1.9' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#setPageBreaks").on("click", () => tryCatch(setPageBreaks)); - $("#center").on("click", () => tryCatch(center)); - $("#setBlackAndWhite").on("click", () => tryCatch(setBlackAndWhite)); - $("#setPrintTitleRow").on("click", () => tryCatch(setPrintTitleRow)); - $("#setPrintArea").on("click", () => tryCatch(setPrintArea)); - $("#changeOrientation").on("click", () => tryCatch(changeOrientation)); - $("#setZoom").on("click", () => tryCatch(setZoom)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("setPageBreaks").addEventListener("click", () => tryCatch(setPageBreaks)); + document.getElementById("center").addEventListener("click", () => tryCatch(center)); + document.getElementById("setBlackAndWhite").addEventListener("click", () => tryCatch(setBlackAndWhite)); + document.getElementById("setPrintTitleRow").addEventListener("click", () => tryCatch(setPrintTitleRow)); + document.getElementById("setPrintArea").addEventListener("click", () => tryCatch(setPrintArea)); + document.getElementById("changeOrientation").addEventListener("click", () => tryCatch(changeOrientation)); + document.getElementById("setZoom").addEventListener("click", () => tryCatch(setZoom)); async function setPageBreaks() { await Excel.run(async (context) => { @@ -202,15 +202,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index b9a2c8040..a26ccb9e3 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -7,13 +7,13 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#get-used-range").on("click", () => tryCatch(getUsedRange)); - $("#get-entire-range").on("click", () => tryCatch(getEntireRange)); - $("#get-range").on("click", () => tryCatch(getRange)); - $("#get-cell").on("click", () => tryCatch(getCell)); + document.getElementById("get-used-range").addEventListener("click", () => tryCatch(getUsedRange)); + document.getElementById("get-entire-range").addEventListener("click", () => tryCatch(getEntireRange)); + document.getElementById("get-range").addEventListener("click", () => tryCatch(getRange)); + document.getElementById("get-cell").addEventListener("click", () => tryCatch(getCell)); async function getUsedRange() { await Excel.run(async (context) => { @@ -101,18 +101,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get a range or a cell in a worksheet.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -142,15 +140,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 821aa6009..928d8a2fe 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: | - $("#hide-worksheet").on("click", () => tryCatch(hideWorksheet)); - $("#unhide-worksheet").on("click", () => tryCatch(unhideWorksheet)); + content: |- + document.getElementById("hide-worksheet").addEventListener("click", () => tryCatch(hideWorksheet)); + document.getElementById("unhide-worksheet").addEventListener("click", () => tryCatch(unhideWorksheet)); async function hideWorksheet() { await Excel.run(async (context) => { @@ -82,18 +82,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to change the visbility of a worksheet.

    -

    Set up

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -117,15 +115,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml index f5cf82a87..a8ba2aa1b 100644 --- a/samples/excel/90-scenarios/currency-converter.yaml +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -7,7 +7,7 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | + content: |- /* * Copyright (c) Riwut Libinuko. All rights reserved. Licensed under the MIT license. */ @@ -17,8 +17,8 @@ script: let tableSetup: Record = {}; - $("#convert").on("click", () => tryCatch(convert)); - $("#setup").on("click", () => tryCatch(setupSample)); + document.getElementById("convert").addEventListener("click", () => tryCatch(convert)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setupSample)); /** Main converting function **/ async function convert() { @@ -141,25 +141,22 @@ script: } language: typescript template: - content: | + content: |-

    Simple Currency Converter

    -

    Simple currency converter shows how to read data from a transaction table, and uses currency converter API to calculate the amount in base currency.

    The code also performs table validation and identify if the table has predefined headers. You can try to to rearrange the the column, and see by yourself!

    -

    Set up

    -

    Try it out

    The currency conversion is provided by exchangeratesapi.io which uses @@ -183,12 +180,8 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - core-js@2.4.1/client/core.min.js - @types/core-js - jquery@3.1.1 - @types/jquery@3.3.1 - moment@2.18.1 + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + moment@2.18.1 moment-msdate@0.2.2 \ No newline at end of file diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index 7efba6254..e74a52b5c 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -7,10 +7,10 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#set-multiple-properties-with-object").on("click", () => tryCatch(setMultiplePropertiesWithObject)); - $("#copy-properties-from-range").on("click", () => tryCatch(copyPropertiesFromRange)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("set-multiple-properties-with-object").addEventListener("click", () => tryCatch(setMultiplePropertiesWithObject)); + document.getElementById("copy-properties-from-range").addEventListener("click", () => tryCatch(copyPropertiesFromRange)); async function setMultiplePropertiesWithObject() { await Excel.run(async (context) => { @@ -94,18 +94,16 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to format a range.

    -

    Set up

    -

    Try it out

    -

    Setup

    -

    Performance settings

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -129,18 +127,13 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - core-js@2.4.1/client/core.min.js - @types/core-js + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - jquery@3.1.1 - @types/jquery@3.3.1 - moment@2.18.1 + moment@2.18.1 moment-msdate@0.2.2 \ No newline at end of file diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index 6417065de..456c044bc 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#wheel").on("click", wheelGo); - $("#stop").on("click", wheelStop); + content: |- + document.getElementById("wheel").addEventListener("click", wheelGo); + document.getElementById("stop").addEventListener("click", wheelStop); let isStopped: boolean @@ -111,7 +111,7 @@ script: } language: typescript template: - content: |+ + content: |-

    Spin the rainbow wheel

    @@ -124,10 +124,9 @@ template: - language: html style: - content: | + content: |- h2:not(:first-child) { margin-top: 35px; } @@ -144,15 +143,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index 11a3b84fa..09b075b38 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -12,7 +12,7 @@ script: // Set up the click handler: const $drawButton = $("#draw-gradient").on("click", drawGradient); - $("#random").on("click", randomizeColors); + document.getElementById("random").addEventListener("click", randomizeColors); /** Click-handler for drawing the gradient */ async function drawGradient() { @@ -133,7 +133,6 @@ template:

    Color configuration

    -
    Top left
    @@ -151,20 +150,16 @@ template: Bottom right
    - -

    Size (width x height)

    - -
    Uses the Spectrum color picker, and the TinyColor libraries. @@ -212,19 +207,14 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - core-js@2.4.1/client/core.min.js - @types/core-js + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - jquery@3.1.1 - @types/jquery@3.3.1 - tinycolor2@1.4.1/tinycolor.js + https://unpkg.com/tinycolor2@1.4.1/tinycolor.js @types/tinycolor2 - spectrum-colorpicker@1.8.0/spectrum.js - spectrum-colorpicker@1.8.0/spectrum.css - @types/spectrum + https://unpkg.com/spectrum-colorpicker@1.8.0/spectrum.js + https://unpkg.com/spectrum-colorpicker@1.8.0/spectrum.css + @types/spectrum \ No newline at end of file diff --git a/samples/excel/99-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml index 0602b549d..6dd28e9a0 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -7,9 +7,9 @@ host: EXCEL api_set: ExcelApi: '1.4' script: - content: | - $("#setup").on("click", setup); - $("#repeat").on("click", repeat); + content: |- + document.getElementById("setup").addEventListener("click", setup); + document.getElementById("repeat").addEventListener("click", repeat); const $pruneTheGrid = $("#step-by-step").on("click", pruneTheGrid); const $allAtOnce = $("#all-at-once").on("click", allAtOnce); @@ -174,11 +174,10 @@ script: } language: typescript template: - content: | + content: |-

    Check whether there is a path from left to right, moving forward one cell at a time (and only straight or diagonally).

    -

    Set up

    Circle density (%)
    @@ -191,14 +190,12 @@ template:

    -

    Find the path:


    - @@ -221,15 +218,9 @@ style: margin-bottom: 0; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index e29e1f0a0..8e0f74ec5 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -8,9 +8,9 @@ api_set: ExcelApi: '1.4' script: content: |- - $("#squares").on("click", () => tryCatch(drawSquares)); - $("#spiral").on("click", () => tryCatch(drawSpiral)); - $("#decoration").on("click", () => tryCatch(drawDecoration)); + document.getElementById("squares").addEventListener("click", () => tryCatch(drawSquares)); + document.getElementById("spiral").addEventListener("click", () => tryCatch(drawSpiral)); + document.getElementById("decoration").addEventListener("click", () => tryCatch(drawDecoration)); async function drawSquares() { await Excel.run(async (context) => { @@ -156,30 +156,26 @@ script: template: content: |-

    Draw colorful patterns

    -
    Choose size:
    -


    -

    -
    language: html style: - content: | + content: |- h2:not(:first-child) { margin-top: 35px; } @@ -188,15 +184,9 @@ style: width: 100%; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 7f025bfd2..20b36299b 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -14,7 +14,7 @@ script: }); $("#selectedFile").on("change", () => tryCatch(readImageFromFile)); - $("#focusButton").on("click", () => tryCatch(focus)); + document.getElementById("focusButton").addEventListener("click", () => tryCatch(focus)); let backgroundPicture = getDefaultBackgroundPicture(); @@ -649,7 +649,6 @@ template:

    This sample lets you repeatedly stack tetrominos, which are represented by Shapes. Select a background image (or leave blank for the default) and Start!. The controls will then be displayed.

    -

    Select Background Image

    @@ -784,17 +783,12 @@ style: border: 1px solid black; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - core-js@2.4.1/client/core.min.js - @types/core-js + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - jquery@3.1.1 - @types/jquery@3.3.1 - https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js + https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js \ No newline at end of file diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 27bfc38f6..c68f87b37 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -6,8 +6,8 @@ host: EXCEL api_set: ExcelApi: '1.1' script: - content: | - $("#run").on("click", () => tryCatch(run)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { await Excel.run(async (context) => { @@ -31,7 +31,7 @@ script: } language: typescript template: - content: | + content: |- @@ -49,15 +49,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 6c419de50..603dd6062 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -6,8 +6,8 @@ host: ONENOTE api_set: OneNoteApi: '1.1' script: - content: | - $("#run").on("click", () => tryCatch(run)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { await OneNote.run(async (context) => { @@ -29,7 +29,7 @@ script: } language: typescript template: - content: | + content: |- @@ -47,15 +47,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 30d3b22fa..0e1bc28f1 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -5,10 +5,10 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get").on("click", get); - $("#set").on("click", set); - $("#save").on("click", save); + content: |- + document.getElementById("get").addEventListener("click", get); + document.getElementById("set").addEventListener("click", set); + document.getElementById("save").addEventListener("click", save); function get() { const settingName = $("#settingName").val(); @@ -36,11 +36,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to set, save, and get add-in properties that can be accessed the next time the add-in is opened.

    -

    Try it out

    @@ -75,15 +74,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index c772c4025..8cd1a84f4 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -5,15 +5,15 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | + content: |- let customProps; - $("#load").on("click", load); - $("#get").on("click", get); - $("#get-all").on("click", getAll); - $("#set").on("click", set); - $("#remove").on("click", remove); - $("#save").on("click", save); + document.getElementById("load").addEventListener("click", load); + document.getElementById("get").addEventListener("click", get); + document.getElementById("get-all").addEventListener("click", getAll); + document.getElementById("set").addEventListener("click", set); + document.getElementById("remove").addEventListener("click", remove); + document.getElementById("save").addEventListener("click", save); function load() { Office.context.mailbox.item.loadCustomPropertiesAsync((result) => { @@ -73,7 +73,6 @@ template:

    This sample shows how to set, save, and get the custom per-item properties of an add-in.

    -

    Try it out

    First load the This sample adds an inline Base64-encoded image to the body of the message or appointment being composed.

    Required mode: Compose

    -

    Try it out

    -

    Try it out

    Important: To use appendOnSendAsync, you must set AppendOnSend as an extended permission in the ExtendedPermissions manifest element. To learn more about append-on-send and its configuration, see Implement append-on-send in your Outlook add-in.

    @@ -65,15 +64,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/20-item-body/get-body-format.yaml b/samples/outlook/20-item-body/get-body-format.yaml index af52a05ae..b1cbc7506 100644 --- a/samples/outlook/20-item-body/get-body-format.yaml +++ b/samples/outlook/20-item-body/get-body-format.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-body-format").on("click", getBodyFormat); + content: |- + document.getElementById("get-body-format").addEventListener("click", getBodyFormat); function getBodyFormat() { // Get the mail item's body format (plain text or HTML) and log it to the console. @@ -27,7 +27,6 @@ template:

    This sample gets the message or appointment's body format (plain text or HTML).

    Required mode: Compose

    -

    Try it out

    -

    Try it out

    Select text in the item body or subject then push the Get selected text button.

    @@ -49,15 +48,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/20-item-body/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml index f20f8639d..32cb1a236 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.13' script: - content: | - $("#prepend-on-send").on("click", prependOnSend); + content: |- + document.getElementById("prepend-on-send").addEventListener("click", prependOnSend); function prependOnSend() { // This snippet prepends text to the beginning of the message or appointment's body once it's sent. @@ -38,7 +38,6 @@ template:

    This sample prepends text to the beginning of the message or appointment's body once it's sent.

    Required mode: Compose

    -

    Try it out

    Important: To use prependOnSendAsync, you must set AppendOnSend as an extended permission in the ExtendedPermissions manifest element. appendOnSendAsync and prependOnSendAsync both use the AppendOnSend extended permission. To learn more about prepend-on-send, see Prepend or append content to a message or appointment body on send.

    @@ -65,15 +64,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index ab8438edf..eae94ef5a 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#prepend").on("click", prependText); + content: |- + document.getElementById("prepend").addEventListener("click", prependText); function prependText() { /* This snippet adds text to the beginning of the message or appointment's body. @@ -41,7 +41,6 @@ template:

    This sample adds text to the beginning of the message or appointment's body.

    Required mode: Compose

    -

    Try it out

    @@ -67,15 +66,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index 06ea6cb38..cdd8b6b04 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#replace-selection").on("click", replaceSelection); + content: |- + document.getElementById("replace-selection").addEventListener("click", replaceSelection); function replaceSelection() { /* This snippet replaces selected text in a message or appointment's body with specified text. @@ -41,7 +41,6 @@ template:

    This sample replaces selected text in a message or appointment's body with specified text.

    Required mode: Compose

    -

    Try it out

      @@ -71,15 +70,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/25-item-save-and-close/close-async.yaml b/samples/outlook/25-item-save-and-close/close-async.yaml index 674ab7b12..109be2bbd 100644 --- a/samples/outlook/25-item-save-and-close/close-async.yaml +++ b/samples/outlook/25-item-save-and-close/close-async.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.14' script: - content: | - $("#close-async").on("click", closeAsync); + content: |- + document.getElementById("close-async").addEventListener("click", closeAsync); function closeAsync() { // This snippet closes the current message being composed and discards any unsaved changes when the optional property, discardItem, is set to true. @@ -24,12 +24,11 @@ script: } language: typescript template: - content: | + content: |-

      This sample shows how to close the current message being composed and discard any unsaved changes.

      Required mode: Message Compose

      -

      Try it out

      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -39,15 +38,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml index cc5e032c8..0acf244d8 100644 --- a/samples/outlook/25-item-save-and-close/save.yaml +++ b/samples/outlook/25-item-save-and-close/save.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.3' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.mailbox.item.saveAsync(function (result) { @@ -21,11 +21,10 @@ script: } language: typescript template: - content: | + content: |-

      This sample shows how to save the item in compose mode.

      -

      Try it out

      language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -46,15 +45,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml index a586403fb..0854d08d0 100644 --- a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -7,7 +7,7 @@ api_set: Mailbox: '1.7' script: content: |- - $("#get-attendees").on("click", getAttendees); + document.getElementById("get-attendees").addEventListener("click", getAttendees); function getAttendees() { // This snippet gets an appointment's required and optional attendees and groups them by their response. @@ -96,7 +96,6 @@ template:

      This sample shows how to get all appointment attendees and organize them by their response.

      Required mode: Appointment Organizer, Appointment Read

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    @@ -72,15 +71,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml index 5d183929f..a550e0b14 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -6,9 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-cc").on("click", getCc); - $("#set-cc").on("click", setCc); + content: |- + document.getElementById("get-cc").addEventListener("click", getCc); + document.getElementById("set-cc").addEventListener("click", setCc); function getCc() { Office.context.mailbox.item.cc.getAsync(function(asyncResult) { @@ -44,7 +44,6 @@ template:

    This sample shows how to get and set the Cc line recipients of the email.

    Required mode: Message Compose

    -

    Try it out

    @@ -72,15 +71,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml index 6b487a1d6..e8f961373 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -6,9 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-optional-attendees").on("click", getOptionalAttendees); - $("#set-optional-attendees").on("click", setOptionalAttendees); + content: |- + document.getElementById("get-optional-attendees").addEventListener("click", getOptionalAttendees); + document.getElementById("set-optional-attendees").addEventListener("click", setOptionalAttendees); function getOptionalAttendees() { Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { @@ -50,7 +50,6 @@ template:

    This sample shows how to get and set the optional attendees.

    Required mode: Appointment Organizer

    -

    Try it out

    @@ -78,15 +77,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml index c6d80e8e3..c7deebc20 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -6,9 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-required-attendees").on("click", getRequiredAttendees); - $("#set-required-attendees").on("click", setRequiredAttendees); + content: |- + document.getElementById("get-required-attendees").addEventListener("click", getRequiredAttendees); + document.getElementById("set-required-attendees").addEventListener("click", setRequiredAttendees); function getRequiredAttendees() { Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { @@ -50,7 +50,6 @@ template:

    This sample shows how to get and set the required attendees.

    Required mode: Appointment Organizer

    -

    Try it out

    @@ -78,15 +77,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml index beba09e5e..3164d9d20 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -6,9 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-to").on("click", getTo); - $("#set-to").on("click", setTo); + content: |- + document.getElementById("get-to").addEventListener("click", getTo); + document.getElementById("set-to").addEventListener("click", setTo); function getTo() { Office.context.mailbox.item.to.getAsync(function(asyncResult) { @@ -44,7 +44,6 @@ template:

    This sample shows how to get and set the To line recipients of the email.

    Required mode: Message Compose

    -

    Try it out

    @@ -72,15 +71,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml index 67512875c..37807769a 100644 --- a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get-to").on("click", getTo); + content: |- + document.getElementById("get-to").addEventListener("click", getTo); function getTo() { const msgTo = Office.context.mailbox.item.to; @@ -58,7 +58,6 @@ template:

    This sample shows how to get the To line recipients of the email.

    Required mode: Message Read

    -

    Try it out

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -52,15 +51,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index 1a27e0edc..6fcbcedc6 100644 --- a/samples/outlook/45-categories/work-with-categories.yaml +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -6,10 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.8' script: - content: | - $("#get-categories").on("click", getCategories); - $("#add-categories").on("click", addCategories); - $("#remove-categories").on("click", removeCategories); + content: |- + document.getElementById("get-categories").addEventListener("click", getCategories); + document.getElementById("add-categories").addEventListener("click", addCategories); + document.getElementById("remove-categories").addEventListener("click", removeCategories); function getCategories() { Office.context.mailbox.item.categories.getAsync(function(asyncResult) { @@ -81,7 +81,6 @@ template:

    This sample shows how to get, add, and remove categories assigned to the item.

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -
    +
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -61,15 +60,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 60c7f18ef..7b55e2860 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -6,9 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.9' script: - content: | - $("#run").on("click", run); - $("#run-async").on("click", runAsync); + content: |- + document.getElementById("run").addEventListener("click", run); + document.getElementById("run-async").addEventListener("click", runAsync); function run() { const start = new Date(); @@ -57,7 +57,6 @@ template:

    This sample shows how to display a new appointment and populate attendees, location, body, and a few other properties.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -81,15 +80,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 2cb258e7c..7ec9c407c 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -6,9 +6,9 @@ host: OUTLOOK api_set: Mailbox: '1.9' script: - content: | - $("#run").on("click", run); - $("#run-async").on("click", runAsync); + content: |- + document.getElementById("run").addEventListener("click", run); + document.getElementById("run-async").addEventListener("click", runAsync); function run() { Office.context.mailbox.displayNewMessageForm({ @@ -52,11 +52,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to display a new message, populate recipients, subject, and body, and add an inline image attachment.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -80,15 +79,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index ace941dc9..4f8dd7af6 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -6,11 +6,11 @@ host: OUTLOOK api_set: Mailbox: '1.9' script: - content: | - $("#display-reply-form").on("click", displayReplyForm); - $("#display-reply-form-async").on("click", displayReplyFormAsync); - $("#display-reply-all-form").on("click", displayReplyAllForm); - $("#display-reply-all-form-async").on("click", displayReplyAllFormAsync); + content: |- + document.getElementById("display-reply-form").addEventListener("click", displayReplyForm); + document.getElementById("display-reply-form-async").addEventListener("click", displayReplyFormAsync); + document.getElementById("display-reply-all-form").addEventListener("click", displayReplyAllForm); + document.getElementById("display-reply-all-form-async").addEventListener("click", displayReplyAllFormAsync); // The async version is only available starting with requirement set 1.9. function displayReplyForm() { @@ -42,7 +42,6 @@ template:

    This sample shows how to create reply or reply-all messages and populate the body of the reply.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -73,15 +72,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index 91b1ae33b..f6a140f8e 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -6,11 +6,11 @@ host: OUTLOOK api_set: Mailbox: '1.9' script: - content: | - $("#reply").on("click", reply); - $("#reply-async").on("click", replyAsync); - $("#reply-all").on("click", replyAll); - $("#reply-all-async").on("click", replyAllAsync); + content: |- + document.getElementById("reply").addEventListener("click", reply); + document.getElementById("reply-async").addEventListener("click", replyAsync); + document.getElementById("reply-all").addEventListener("click", replyAll); + document.getElementById("reply-all-async").addEventListener("click", replyAllAsync); function reply() { // Define attachments. @@ -172,7 +172,6 @@ template:

    This sample shows how to create a reply message and add an inline image attachment and an item attachment.

    Required mode: Compose

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out on a message or appointment from a shared folder or shared mailbox.

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -53,15 +52,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml index af91e6505..2c6432fe6 100644 --- a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml +++ b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -5,8 +5,8 @@ host: OUTLOOK api_set: Mailbox: '1.8' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.mailbox.item.getAllInternetHeadersAsync(function (asyncResult) { @@ -61,15 +61,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml index 9b93155a8..9a82619a5 100644 --- a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml +++ b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -5,10 +5,10 @@ host: OUTLOOK api_set: Mailbox: '1.8' script: - content: | - $("#set-custom-headers").on("click", setCustomHeaders); - $("#get-selected-custom-headers").on("click", getSelectedCustomHeaders); - $("#remove-selected-custom-headers").on("click", removeSelectedCustomHeaders); + content: |- + document.getElementById("set-custom-headers").addEventListener("click", setCustomHeaders); + document.getElementById("get-selected-custom-headers").addEventListener("click", getSelectedCustomHeaders); + document.getElementById("remove-selected-custom-headers").addEventListener("click", removeSelectedCustomHeaders); // Set custom internet headers. function setCustomHeaders() { @@ -92,15 +92,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/75-regex-matches/contextual.yaml b/samples/outlook/75-regex-matches/contextual.yaml index 40918affc..f83c31234 100644 --- a/samples/outlook/75-regex-matches/contextual.yaml +++ b/samples/outlook/75-regex-matches/contextual.yaml @@ -5,10 +5,10 @@ host: OUTLOOK api_set: Mailbox: '1.6' script: - content: | - $("#getRegExMatches").on("click", getRegExMatches); - $("#getRegExMatchesByName").on("click", getRegExMatchesByName); - $("#getSelectedRegExMatches").on("click", getSelectedRegExMatches); + content: |- + document.getElementById("getRegExMatches").addEventListener("click", getRegExMatches); + document.getElementById("getRegExMatchesByName").addEventListener("click", getRegExMatchesByName); + document.getElementById("getSelectedRegExMatches").addEventListener("click", getSelectedRegExMatches); function getRegExMatches() { // This API only works when you click on the highlighted word "ScriptLab". @@ -50,7 +50,6 @@ template: for Microsoft 365.

    Required mode: Item Read, contextual add-in

    -

    Tip: Try this out as a contextual add-in.

    @@ -66,7 +65,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -78,15 +77,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml index 8b2cf4938..c7cba1a0c 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { const ewsId = Office.context.mailbox.item.itemId; @@ -42,7 +42,7 @@ script: } language: typescript template: - content: | + content: |-

    This sample uses Exchange Web Services (EWS) to get an appointment's iCalUId value if the user is an attendee.

    Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. @@ -50,7 +50,6 @@ template: to get an access token. Then, use Microsoft Graph to get the iCalUId property.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -71,15 +70,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml index 8ac65f4b0..c0744d2be 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.3' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.mailbox.item.saveAsync((result) => { @@ -49,7 +49,7 @@ script: } language: typescript template: - content: | + content: |-

    This sample uses Exchange Web Services (EWS) to get an appointment's iCalUId value if the user is the organizer.

    Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. @@ -57,7 +57,6 @@ template: to get an access token. Then, use Microsoft Graph to get the iCalUId property.

    - @@ -75,15 +74,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml index d7b4df2ac..7b05c488c 100644 --- a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.5' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { // Get the EWS URL and EWS item ID. @@ -25,7 +25,7 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to retrieve the EWS endpoint URL and item IDs, and convert item IDs for different protocols.

    Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. @@ -33,7 +33,6 @@ template: to get an access token.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -54,15 +53,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml index df2c26980..1b023e5a6 100644 --- a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { const ewsId = Office.context.mailbox.item.itemId; @@ -31,7 +31,7 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get a message using EWS, without any back-end code.

    Important: This API is only supported in Exchange on-premises environments. @@ -39,7 +39,6 @@ template: to get an access token. Then, use Microsoft Graph to get the message.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -60,15 +59,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml index 227e2cd0b..e008862db 100644 --- a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { const request = ''+ @@ -34,7 +34,7 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to send a message using EWS, without any back-end code.

    Important: This API is only supported in Exchange on-premises environments. @@ -42,7 +42,6 @@ template: to get an access token. Then, use Microsoft Graph to send the message.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -63,15 +62,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml index 9e342b5f6..e7e7e9cb3 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.mailbox.getCallbackTokenAsync((result) => { @@ -21,7 +21,7 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get a callback token to call Outlook services from an add-in's backend service.

    Important: Exchange user identity and callback tokens are only supported in Exchange on-premises environments. @@ -30,7 +30,6 @@ template: to get an access token instead.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -51,15 +50,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml index 169118cd9..4ccdc8fd4 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.mailbox.getUserIdentityTokenAsync((result) => { @@ -21,7 +21,7 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get a user identity token to use in authentication flows.

    Important: This API is only supported in Exchange on-premises environments. @@ -29,7 +29,6 @@ template: to get an access token.

    -

    Try it out

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -50,15 +49,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml index b58289c80..186e35414 100644 --- a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml +++ b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -6,13 +6,13 @@ host: OUTLOOK api_set: Mailbox: '1.13' script: - content: | - $("#get-date").on("click", getDeliveryDate); - $("#set-time-five-minutes").on("click", () => computeDelay("set-time-five-minutes")); - $("#set-time-fifteen-minutes").on("click", () => computeDelay("set-time-fifteen-minutes")); - $("#set-time-thirty-minutes").on("click", () => computeDelay("set-time-thirty-minutes")); - $("#set-time-sixty-minutes").on("click", () => computeDelay("set-time-sixty-minutes")); - $("#set-time-one-day").on("click", () => computeDelay("set-time-one-day")); + content: |- + document.getElementById("get-date").addEventListener("click", getDeliveryDate); + document.getElementById("set-time-five-minutes").addEventListener("click", () => computeDelay("set-time-five-minutes")); + document.getElementById("set-time-fifteen-minutes").addEventListener("click", () => computeDelay("set-time-fifteen-minutes")); + document.getElementById("set-time-thirty-minutes").addEventListener("click", () => computeDelay("set-time-thirty-minutes")); + document.getElementById("set-time-sixty-minutes").addEventListener("click", () => computeDelay("set-time-sixty-minutes")); + document.getElementById("set-time-one-day").addEventListener("click", () => computeDelay("set-time-one-day")); let totalDelay = 0; @@ -69,7 +69,6 @@ template:

    This sample gets and sets the delivery date and time of a message in compose mode. To learn more about this API, see Manage the delivery date and time of a message.

    Required mode: Compose

    -

    Try it out

    @@ -108,15 +107,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml index b18fd4901..e03300997 100644 --- a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml +++ b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -6,10 +6,10 @@ host: OUTLOOK api_set: Mailbox: '1.8' script: - content: | - $("#get").on("click", get); - $("#add").on("click", add); - $("#remove").on("click", remove); + content: |- + document.getElementById("get").addEventListener("click", get); + document.getElementById("add").addEventListener("click", add); + document.getElementById("remove").addEventListener("click", remove); function get() { Office.context.mailbox.item.enhancedLocation.getAsync((result) => { @@ -106,15 +106,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml index 520c48474..047455858 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.1' script: - content: | - $("#get").on("click", get); + content: |- + document.getElementById("get").addEventListener("click", get); function get() { console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); @@ -39,15 +39,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/90-other-item-apis/get-conversation-index.yaml b/samples/outlook/90-other-item-apis/get-conversation-index.yaml index e7f797ce5..f3ed7d215 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-index.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-index.yaml @@ -6,8 +6,8 @@ host: OUTLOOK api_set: Mailbox: '1.14' script: - content: | - $("#get-conversation-index").click(getConversationIndex); + content: |- + document.getElementById("get-conversation-index").addEventListener("click", getConversationIndex); function getConversationIndex() { // This snippet returns the Base64-encoded position of the current message in a conversation thread (PR_CONVERSATION_INDEX). @@ -33,7 +33,6 @@ template:

    This sample shows how to get the Base64-encoded position of the current message in a conversation thread.

    Required mode: Message Compose

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -
    -

    Try it out

    -

    Try it out

    Select text in the item body or subject then push the Replace selected text button.

    @@ -47,15 +46,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml index 7cbaccb5a..8e8612592 100644 --- a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml +++ b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -6,12 +6,12 @@ host: OUTLOOK api_set: Mailbox: '1.10' script: - content: | - $("#isClientSignatureEnabled").on("click", isClientSignatureEnabled); - $("#disableClientSignature").on("click", disableClientSignature); - $("#getComposeType").on("click", getComposeType); - $("#setSignature").on("click", setSignature); - $("#setSignatureWithInlineImage").on("click", setSignatureWithInlineImage); + content: |- + document.getElementById("isClientSignatureEnabled").addEventListener("click", isClientSignatureEnabled); + document.getElementById("disableClientSignature").addEventListener("click", disableClientSignature); + document.getElementById("getComposeType").addEventListener("click", getComposeType); + document.getElementById("setSignature").addEventListener("click", setSignature); + document.getElementById("setSignatureWithInlineImage").addEventListener("click", setSignatureWithInlineImage); function isClientSignatureEnabled() { // Check if the client signature is currently enabled. @@ -99,7 +99,6 @@ template:

    -

    Try it out

    -
    -

    Try it out

    @@ -83,15 +82,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js @types/office-js-preview - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/outlook/default.yaml b/samples/outlook/default.yaml index 215d8fa86..7d8729c82 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -5,8 +5,8 @@ author: OfficeDev host: OUTLOOK api_set: null script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { const userProfile = Office.context.mailbox.userProfile; @@ -14,7 +14,7 @@ script: } language: typescript template: - content: | + content: |- @@ -32,15 +32,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index 440196ff2..a07f9456e 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -6,8 +6,8 @@ host: POWERPOINT api_set: PowerPointApi: '1.4' script: - content: | - $("#run").on("click", () => tryCatch(run)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); function run() { // This function gets the collection of shapes on the first slide, @@ -59,15 +59,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 0b3db65ff..2ca0fd607 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -6,8 +6,8 @@ host: POWERPOINT api_set: PowerPointApi: '1.4' script: - content: | - $("#run").on("click", () => tryCatch(run)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); const run: Function = async () => { // This function gets the collection of shapes on the first slide, @@ -59,15 +59,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index 869630269..c3107a43e 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -7,8 +7,8 @@ host: POWERPOINT api_set: Selection: '1.1' script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { @@ -21,7 +21,7 @@ script: } language: typescript template: - content: | + content: |- @@ -39,15 +39,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index 7b3f697fc..0a15973de 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -5,8 +5,8 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { @@ -19,7 +19,7 @@ script: } language: typescript template: - content: | + content: |- @@ -37,15 +37,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index d2aba3d06..6011dfb8b 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -6,8 +6,8 @@ host: POWERPOINT api_set: PowerPoint: '1.1' script: - content: | - $("#create-new-blank-presentation").on("click", () => tryCatch(createBlankPresentation)); + content: |- + document.getElementById("create-new-blank-presentation").addEventListener("click", () => tryCatch(createBlankPresentation)); $("#file").on("change", () => tryCatch(createPresentationFromExisting)); function createBlankPresentation() { @@ -45,7 +45,6 @@ template:

    This sample shows how to create a new, empty presentation and how to create a new presentation by copying an existing one.

    -

    Try it out

    Create empty presentation

    @@ -72,15 +71,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index 37790cb38..f8f486309 100644 --- a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml +++ b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -5,8 +5,8 @@ host: POWERPOINT api_set: PowerPointApi: '1.6' script: - content: | - $("#get-hyperlinks").on("click", () => tryCatch(getHyperlinks)); + content: |- + document.getElementById("get-hyperlinks").addEventListener("click", () => tryCatch(getHyperlinks)); async function getHyperlinks() { // Gets the hyperlinks found in the first selected slide. @@ -38,7 +38,6 @@ template:

    Demonstrates how to get the hyperlinks located in a slide.

    -

    Try it out

    First, add at least one hyperlink to a slide then select at least one slide.

    @@ -58,17 +57,11 @@ style: margin-bottom: 5px; margin-left: 20px; min-width: 80px; - } + } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index 9c4a0af2e..a42fb4a33 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -6,7 +6,7 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: | + content: |- $('#insert').on("click", run); function run() { @@ -35,7 +35,6 @@ template:

    Insert an image into the current slide.

    - @@ -53,15 +52,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/images/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml index fb17d3eb0..ced98b544 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -6,7 +6,7 @@ author: OfficeDev host: POWERPOINT api_set: {} script: - content: | + content: |- $('#insert').on("click", newImage); function newImage() { @@ -36,7 +36,6 @@ template:

    This sample shows how to insert an SVG image using an XML string as the source.

    -

    Try it out

    language: html style: content: |- @@ -221,17 +218,12 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - core-js@2.4.1/client/core.min.js - @types/core-js + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - jquery@3.1.1 - @types/jquery@3.3.1 https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js \ No newline at end of file diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index c7c18a673..3a6dc8d9f 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -6,14 +6,14 @@ host: POWERPOINT api_set: PowerPointApi: '1.5' script: - content: | - $("#getSelectedShapes").on("click", () => tryCatch(getSelectedShapes)); - $("#setSelectedShapes").on("click", () => tryCatch(setSelectedShapes)); - $("#changeFill").on("click", () => tryCatch(changeFill)); - $("#saveShapeSelection").on("click", () => tryCatch(saveShapeSelection)); - $("#loadShapeSelection").on("click", () => tryCatch(loadShapeSelection)); - $("#createShapes").on("click", () => tryCatch(createShapes)); - $("#arrangeSelected").on("click", () => tryCatch(arrangeSelected)); + content: |- + document.getElementById("getSelectedShapes").addEventListener("click", () => tryCatch(getSelectedShapes)); + document.getElementById("setSelectedShapes").addEventListener("click", () => tryCatch(setSelectedShapes)); + document.getElementById("changeFill").addEventListener("click", () => tryCatch(changeFill)); + document.getElementById("saveShapeSelection").addEventListener("click", () => tryCatch(saveShapeSelection)); + document.getElementById("loadShapeSelection").addEventListener("click", () => tryCatch(loadShapeSelection)); + document.getElementById("createShapes").addEventListener("click", () => tryCatch(createShapes)); + document.getElementById("arrangeSelected").addEventListener("click", () => tryCatch(arrangeSelected)); async function getSelectedShapes() { // Gets the shapes you selected on the slide and displays their IDs on the task pane. @@ -176,11 +176,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get selected shapes, and how to select and change specific shapes.

    -

    Try it out

    @@ -194,7 +193,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -213,15 +212,9 @@ style: transition: max-height 0.2s ease-out; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 112edce73..9bca1519a 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -6,10 +6,10 @@ host: POWERPOINT api_set: PowerPointApi: '1.4' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#change-lines").on("click", () => tryCatch(changeLines)); - $("#change-geometric-shapes").on("click", () => tryCatch(changeGeometricShapes)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("change-lines").addEventListener("click", () => tryCatch(changeLines)); + document.getElementById("change-geometric-shapes").addEventListener("click", () => tryCatch(changeGeometricShapes)); async function changeLines() { // Changes the dash style of every line in the slide. @@ -99,12 +99,10 @@ template:

    This sample shows how select and change shapes based on their types.

    -

    Setup

    Create some shapes in a new, blank presentation.

    - @@ -134,15 +132,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 7310e0336..8685c527e 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -5,14 +5,14 @@ host: POWERPOINT api_set: PowerPointApi: '1.4' script: - content: | - $("#create-hexagon").on("click", () => tryCatch(createHexagon)); - $("#shrink-hexagon").on("click", () => tryCatch(shrinkHexagon)); - $("#move-hexagon").on("click", () => tryCatch(moveHexagon)); - $("#create-line").on("click", () => tryCatch(createLine)); - $("#create-text-box").on("click", () => tryCatch(createTextBox)); - $("#create-shape-with-text").on("click", () => tryCatch(createShapeWithText)); - $("#remove-all").on("click", () => tryCatch(removeAll)); + content: |- + document.getElementById("create-hexagon").addEventListener("click", () => tryCatch(createHexagon)); + document.getElementById("shrink-hexagon").addEventListener("click", () => tryCatch(shrinkHexagon)); + document.getElementById("move-hexagon").addEventListener("click", () => tryCatch(moveHexagon)); + document.getElementById("create-line").addEventListener("click", () => tryCatch(createLine)); + document.getElementById("create-text-box").addEventListener("click", () => tryCatch(createTextBox)); + document.getElementById("create-shape-with-text").addEventListener("click", () => tryCatch(createShapeWithText)); + document.getElementById("remove-all").addEventListener("click", () => tryCatch(removeAll)); async function createHexagon() { // This function gets the collection of shapes on the first slide, @@ -155,7 +155,6 @@ template:

    This sample shows how to create, resize, move, and delete shapes.

    -

    Try it out

    Begin by deleting all shapes that are currently on the slide.

    @@ -165,20 +164,16 @@ template: Remove all shapes

    -

    Create, shrink, and move a shape.

    -

    -

    - @@ -186,21 +181,17 @@ template:

    Create other shapes.

    -

    -

    - -

    language: html style: @@ -216,15 +207,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index e69f9354f..74e68bd1e 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -6,9 +6,9 @@ host: POWERPOINT api_set: PowerPointApi: '1.3' script: - content: | - $("#slide-masters").on("click", () => tryCatch(logSlideMasters)); - $("#add-slide").on("click", () => tryCatch(addSlide)); + content: |- + document.getElementById("slide-masters").addEventListener("click", () => tryCatch(logSlideMasters)); + document.getElementById("add-slide").addEventListener("click", () => tryCatch(addSlide)); async function addSlide() { const chosenMaster = $("#master-id").val() as string; @@ -60,31 +60,26 @@ template:

    This sample shows how to add a slide and optionally to specify the slide master and layout of the slide.

    -

    Try it out

    On the Home ribbon, open the New Slide drop down menu to see the slide masters and slide layouts in the presentation. Be sure there are at least two slide masters. To add a master, see Use multiple slide masters in one presentation. The page will open in your browser.

    -

    Press Add slide to add a slide with the default layout of the default slide master to the end of the presentation.

    -

    Press Log slide masters info to log to the console a list of all the slide masters, their child layouts, and the IDs of the masters and the layouts.

    -

    Copy one of the slide master IDs from the console and enter it in the Master ID text box. (Example: 6147483651#7142061614)

    -

    Copy one of the layout IDs from the console, under the same master you choose above, and enter it in the Layout ID text box. (Example: 2147483651#3142061614)

    -

    Press Add slide again to add a slide with the corresponding master and layout.

    +
    language: html @@ -101,15 +96,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index 4d359b9d8..d797ed57b 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -7,11 +7,11 @@ api_set: PowerPointApi: '1.5' script: content: |- - $("#getSelectedSlides").on("click", () => tryCatch(getSelectedSlides)); - $("#setSelectedSlides").on("click", () => tryCatch(setSelectedSlides)); - $("#deleteSlides").on("click", () => tryCatch(deleteSlides)); - $("#saveSlideSelection").on("click", () => tryCatch(saveSlideSelection)); - $("#loadSlideSelection").on("click", () => tryCatch(loadSlideSelection)); + document.getElementById("getSelectedSlides").addEventListener("click", () => tryCatch(getSelectedSlides)); + document.getElementById("setSelectedSlides").addEventListener("click", () => tryCatch(setSelectedSlides)); + document.getElementById("deleteSlides").addEventListener("click", () => tryCatch(deleteSlides)); + document.getElementById("saveSlideSelection").addEventListener("click", () => tryCatch(saveSlideSelection)); + document.getElementById("loadSlideSelection").addEventListener("click", () => tryCatch(loadSlideSelection)); async function getSelectedSlides() { // Gets the selected slides and displays their IDs on the task pane. @@ -129,11 +129,10 @@ script: } language: typescript template: - content: | + content: |-

    This sample shows how to get selected slides, and how to select specific slides.

    -

    Try it out

    @@ -145,7 +144,7 @@ template:
    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -164,15 +163,9 @@ style: transition: max-height 0.2s ease-out; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index f84c6043b..1e86a7752 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -7,7 +7,7 @@ host: POWERPOINT api_set: {} script: content: |- - $("#get-slide-metadata").on("click", getSlideMetadata); + document.getElementById("get-slide-metadata").addEventListener("click", getSlideMetadata); function getSlideMetadata() { Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, @@ -27,7 +27,6 @@ template:

    Demonstrates how to get slide metadata.

    Select one or more slides and click Get slide metadata to get the ID, title, and index of the slide(s).

    - @@ -43,17 +42,11 @@ style: margin-bottom: 5px; margin-left: 20px; min-width: 80px; - } + } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 67e2b85ed..d247a007a 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -6,9 +6,9 @@ host: POWERPOINT api_set: PowerPointApi: '1.5' script: - content: | - $("#insert-all-slides").on("click", () => tryCatch(insertAllSlides)); - $("#insert-after-target-slide").on("click", () => tryCatch(insertAfterSelectedSlide)); + content: |- + document.getElementById("insert-all-slides").addEventListener("click", () => tryCatch(insertAllSlides)); + document.getElementById("insert-after-target-slide").addEventListener("click", () => tryCatch(insertAfterSelectedSlide)); $("#file").on("change", () => tryCatch(storeFileAsBase64)); let chosenFileBase64; @@ -71,7 +71,6 @@ template:

    This sample shows how to insert slides from another presentation into the current presentation.

    -

    Try it out

    @@ -109,15 +108,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 4153e3973..94b85c9c3 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -5,13 +5,13 @@ host: POWERPOINT api_set: PowerPointApi: '1.3' script: - content: | - $("#add-selected-slide-tag").on("click", () => tryCatch(addTagToSelectedSlide)); - $("#delete-slides-by-audience").on("click", () => tryCatch(deleteSlidesByAudience)); - $("#add-slide-tags").on("click", () => tryCatch(addMultipleSlideTags)); - $("#add-shape-tag").on("click", () => tryCatch(addShapeTag)); - $("#add-presentation-tag").on("click", () => tryCatch(addPresentationTag)); - $("#delete-presentation-tag").on("click", () => tryCatch(deletePresentationTag)); + content: |- + document.getElementById("add-selected-slide-tag").addEventListener("click", () => tryCatch(addTagToSelectedSlide)); + document.getElementById("delete-slides-by-audience").addEventListener("click", () => tryCatch(deleteSlidesByAudience)); + document.getElementById("add-slide-tags").addEventListener("click", () => tryCatch(addMultipleSlideTags)); + document.getElementById("add-shape-tag").addEventListener("click", () => tryCatch(addShapeTag)); + document.getElementById("add-presentation-tag").addEventListener("click", () => tryCatch(addPresentationTag)); + document.getElementById("delete-presentation-tag").addEventListener("click", () => tryCatch(deletePresentationTag)); async function addTagToSelectedSlide() { await PowerPoint.run(async function(context) { @@ -153,39 +153,30 @@ template: content: |-

    These snippets show how to use tags with the presentation and its slides and shapes.

    -

    Try it out

    -

    1. Add several slides to the deck. Add content to each so they are visually distinct in the thumbnail pane.

    -

    2. Select a single slide and press Add tag to tag the slide to be shown only to premium customers.

    -

    3. Repeat step 2 for another slide.

    -

    4. Press Delete premium customer slides to remove from the presentation slides that should only be shown to premium customers.

    -

    5. Press Add slide tags to add mulitiple tags to the first slide of the presentation.

    -

    6. Select the first slide and on the ribbon, navigate Insert > Illustrations > Shapes to add a shape to it. Press Add shape tag.

    -

    7. Press Add presentation tag.

    -

    8. Press Delete presentation tag.

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -182,15 +182,9 @@ style: transition: max-height 0.2s ease-out; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index e069060b8..f8d4d189a 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -7,8 +7,8 @@ host: PROJECT api_set: Selection: 1.1 script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { @@ -21,24 +21,17 @@ script: } language: typescript template: - content: | + content: |- language: html style: - content: | - /* Your style goes here */ + content: /* Your style goes here */ language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/project/default.yaml b/samples/project/default.yaml index 7f5b087a5..c73af1eeb 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -5,8 +5,8 @@ author: OfficeDev host: PROJECT api_set: {} script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { @@ -19,7 +19,7 @@ script: } language: typescript template: - content: | + content: |- @@ -37,15 +37,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/web/default.yaml b/samples/web/default.yaml index 12d365a1d..dba053526 100644 --- a/samples/web/default.yaml +++ b/samples/web/default.yaml @@ -5,15 +5,15 @@ author: OfficeDev host: WEB api_set: {} script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { console.log("Your code goes here"); } language: typescript template: - content: | + content: |- @@ -31,12 +31,6 @@ style: min-width: 80px; } language: css -libraries: | - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file +libraries: |- + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 0886ad057..a9cdf506b 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -8,7 +8,7 @@ api_set: WordApi: '1.1' script: content: |- - $("#run").on("click", () => tryCatch(run)); + document.getElementById("run").addEventListener("click", () => tryCatch(run)); function run() { return Word.run(function (context) { @@ -55,15 +55,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 4128b7967..6aab3ed8e 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -8,7 +8,7 @@ api_set: WordApi: '1.1' script: content: |- - $("#run").on("click", () => tryCatch(run)); + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { // Gets the current selection and changes the font color to red. @@ -56,15 +56,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index c71ebb2e5..d1b374d41 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -7,8 +7,8 @@ host: WORD api_set: Selection: 1.1 script: - content: | - $("#run").on("click", run); + content: |- + document.getElementById("run").addEventListener("click", run); function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, (asyncResult) => { @@ -21,7 +21,7 @@ script: } language: typescript template: - content: | + content: |-
    This sample executes a code snippet that prints the selected text to the console. Make sure to enter and select text before clicking "Print selection".
    @@ -42,15 +42,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 47fd52025..2ee82194f 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -6,11 +6,11 @@ host: WORD api_set: WordApi: '1.5' script: - content: | - $("#register-event-handler").on("click", () => tryCatch(registerEventHandler)); - $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); - $("#deregister-event-handler").on("click", () => tryCatch(deregisterEventHandler)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("register-event-handler").addEventListener("click", () => tryCatch(registerEventHandler)); + document.getElementById("insert-content-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("deregister-event-handler").addEventListener("click", () => tryCatch(deregisterEventHandler)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); let eventContext; @@ -93,14 +93,12 @@ template:
    This sample demonstrates how to use the onAdded event with content controls.
    -

    Set up

    -

    Try it out

    Register event handler. @@ -132,13 +130,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 8e7df83e6..976769d1a 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -6,11 +6,11 @@ host: WORD api_set: WordApi: '1.5' script: - content: | - $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-content-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); + document.getElementById("deregister-event-handlers").addEventListener("click", () => tryCatch(deregisterEventHandlers)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); let eventContexts = []; @@ -110,14 +110,12 @@ template:
    This sample demonstrates how to use the onDataChanged event on content controls.
    -

    Set up

    -

    Try it out

    1. Insert content controls. @@ -150,13 +148,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index 535ecd315..e98eec7af 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -6,12 +6,12 @@ host: WORD api_set: WordApi: '1.5' script: - content: | - $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); - $("#delete-content-control").on("click", () => tryCatch(deleteContentControl)); - $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-content-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); + document.getElementById("delete-content-control").addEventListener("click", () => tryCatch(deleteContentControl)); + document.getElementById("deregister-event-handlers").addEventListener("click", () => tryCatch(deregisterEventHandlers)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); let eventContexts = []; @@ -127,14 +127,12 @@ template:
    This sample demonstrates how to use the onDeleted event on content controls.
    -

    Set up

    -

    Try it out

    Insert content controls. @@ -170,13 +168,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index a1e2e93cb..4c7128dc0 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -6,11 +6,11 @@ host: WORD api_set: WordApi: '1.5' script: - content: | - $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-content-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); + document.getElementById("deregister-event-handlers").addEventListener("click", () => tryCatch(deregisterEventHandlers)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); let eventContexts = []; @@ -110,14 +110,12 @@ template:
    This sample demonstrates how to use the onEntered event on content controls.
    -

    Set up

    -

    Try it out

    1. Insert content controls. @@ -150,13 +148,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index 242550f03..c2e5b4eab 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -6,11 +6,11 @@ host: WORD api_set: WordApi: '1.5' script: - content: | - $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-content-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); + document.getElementById("deregister-event-handlers").addEventListener("click", () => tryCatch(deregisterEventHandlers)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); let eventContexts = []; @@ -110,14 +110,12 @@ template:
    This sample demonstrates how to use the onExited event on content controls.
    -

    Set up

    -

    Try it out

    1. Insert content controls. @@ -151,13 +149,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 7f04b743d..989a07ac1 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -6,11 +6,11 @@ host: WORD api_set: WordApi: '1.5' script: - content: | - $("#insert-content-controls").on("click", () => tryCatch(insertContentControls)); - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); - $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-content-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); + document.getElementById("deregister-event-handlers").addEventListener("click", () => tryCatch(deregisterEventHandlers)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); let eventContexts = []; @@ -109,14 +109,12 @@ template:
    This sample demonstrates how to use the onSelectionChanged event on content controls.
    -

    Set up

    -

    Try it out

    1. Insert content controls. @@ -149,13 +147,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/get-change-tracking-states.yaml b/samples/word/10-content-controls/get-change-tracking-states.yaml index 59c3e7901..b59d84146 100644 --- a/samples/word/10-content-controls/get-change-tracking-states.yaml +++ b/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -7,13 +7,13 @@ host: WORD api_set: WordApi: '1.5' script: - content: | - $("#turn-on-change-tracking").on("click", () => tryCatch(turnOnChangeTracking)); - $("#insert-content-control").on("click", () => tryCatch(insertContentControlOnLastParagraph)); - $("#delete-content-control").on("click", () => tryCatch(deleteFirstContentControl)); - $("#turn-off-change-tracking").on("click", () => tryCatch(turnOffChangeTracking)); - $("#log-change-tracking-states").on("click", () => tryCatch(logChangeTrackingStates)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("turn-on-change-tracking").addEventListener("click", () => tryCatch(turnOnChangeTracking)); + document.getElementById("insert-content-control").addEventListener("click", () => tryCatch(insertContentControlOnLastParagraph)); + document.getElementById("delete-content-control").addEventListener("click", () => tryCatch(deleteFirstContentControl)); + document.getElementById("turn-off-change-tracking").addEventListener("click", () => tryCatch(turnOffChangeTracking)); + document.getElementById("log-change-tracking-states").addEventListener("click", () => tryCatch(logChangeTrackingStates)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function turnOnChangeTracking() { // Turns on change tracking. @@ -121,14 +121,12 @@ template:
    This sample demonstrates how to insert and delete control controls then get their change tracking state.
    -

    Set up

    -

    Try it out

    -

    Try it out

    @@ -236,13 +234,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml index a0660bfaf..a0fee9f6f 100644 --- a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -6,14 +6,14 @@ host: WORD api_set: WordApi: '1.9' script: - content: | - $("#insert-control").on("click", () => tryCatch(insertComboBoxContentControl)); - $("#add-item").on("click", () => tryCatch(addItemToComboBoxContentControl)); - $("#get-items").on("click", () => tryCatch(getListFromComboBoxContentControl)); - $("#delete-item").on("click", () => tryCatch(deleteItemFromComboBoxContentControl)); - $("#delete-list").on("click", () => tryCatch(deleteListFromComboBoxContentControl)); - $("#delete-control").on("click", () => tryCatch(deleteComboBoxContentControl)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-control").addEventListener("click", () => tryCatch(insertComboBoxContentControl)); + document.getElementById("add-item").addEventListener("click", () => tryCatch(addItemToComboBoxContentControl)); + document.getElementById("get-items").addEventListener("click", () => tryCatch(getListFromComboBoxContentControl)); + document.getElementById("delete-item").addEventListener("click", () => tryCatch(deleteItemFromComboBoxContentControl)); + document.getElementById("delete-list").addEventListener("click", () => tryCatch(deleteListFromComboBoxContentControl)); + document.getElementById("delete-control").addEventListener("click", () => tryCatch(deleteComboBoxContentControl)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertComboBoxContentControl() { // Places a combo box content control at the end of the selection. @@ -247,14 +247,12 @@ template:

    This sample demonstrates how to insert, change, and delete combo box content controls.
    -

    Set up

    -

    Try it out

    @@ -318,13 +316,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index ae89ef06a..961b5d982 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -7,10 +7,10 @@ host: WORD api_set: WordApi: '1.1' script: - content: | - $("#insert-controls").on("click", () => tryCatch(insertContentControls)); - $("#change-controls").on("click", () => tryCatch(modifyContentControls)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("change-controls").addEventListener("click", () => tryCatch(modifyContentControls)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertContentControls() { // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags. @@ -104,14 +104,12 @@ template:

    This sample demonstrates how to insert and change content control properties.
    -

    Set up

    -

    Try it out

    Insert content controls on each paragraph. @@ -139,13 +137,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml index cb99d13e3..36532629e 100644 --- a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -6,14 +6,14 @@ host: WORD api_set: WordApi: '1.9' script: - content: | - $("#insert-control").on("click", () => tryCatch(insertDropdownListContentControl)); - $("#add-item").on("click", () => tryCatch(addItemToDropdownListContentControl)); - $("#get-items").on("click", () => tryCatch(getListFromDropdownListContentControl)); - $("#delete-item").on("click", () => tryCatch(deleteItemFromDropdownListContentControl)); - $("#delete-list").on("click", () => tryCatch(deleteListFromDropdownListContentControl)); - $("#delete-control").on("click", () => tryCatch(deleteDropdownListContentControl)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-control").addEventListener("click", () => tryCatch(insertDropdownListContentControl)); + document.getElementById("add-item").addEventListener("click", () => tryCatch(addItemToDropdownListContentControl)); + document.getElementById("get-items").addEventListener("click", () => tryCatch(getListFromDropdownListContentControl)); + document.getElementById("delete-item").addEventListener("click", () => tryCatch(deleteItemFromDropdownListContentControl)); + document.getElementById("delete-list").addEventListener("click", () => tryCatch(deleteListFromDropdownListContentControl)); + document.getElementById("delete-control").addEventListener("click", () => tryCatch(deleteDropdownListContentControl)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertDropdownListContentControl() { // Places a dropdown list content control at the end of the selection. @@ -249,14 +249,12 @@ template:
    This sample demonstrates how to insert, change, and delete dropdown list content controls.
    -

    Set up

    -

    Try it out

    @@ -320,13 +318,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 1c3c3e08a..ee39795ab 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -6,10 +6,10 @@ host: WORD api_set: WordApiDesktop: '1.1' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#insert").on("click", () => tryCatch(insertImage)); - $("#get").on("click", () => tryCatch(getImage)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("insert").addEventListener("click", () => tryCatch(insertImage)); + document.getElementById("get").addEventListener("click", () => tryCatch(getImage)); async function insertImage() { // Inserts an image anchored to the last paragraph. @@ -75,14 +75,12 @@ template:

    This sample demonstrates how to insert and get inline pictures in a document.
    -

    Set up

    -

    Try it out

    -

    Try it out

    -
    language: html style: @@ -107,10 +105,6 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - core-js@2.4.1/client/core.min.js - @types/core-js - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 28eaa77ab..ccfef74ef 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -7,10 +7,10 @@ host: WORD api_set: WordApi: '1.3' script: - content: | - $("#insert-list").on("click", () => tryCatch(insertOrganizeList)); - $("#get-list-props").on("click", () => tryCatch(getListProps)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-list").addEventListener("click", () => tryCatch(insertOrganizeList)); + document.getElementById("get-list-props").addEventListener("click", () => tryCatch(getListProps)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertOrganizeList() { // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. @@ -104,14 +104,12 @@ template:
    This sample demonstrates how to create and organize a list.
    -

    Set up

    -

    Try it out

    -

    Try it out

    Select an insertion point in the document.

    @@ -117,13 +115,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index ebd2d19e3..06c427331 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -7,9 +7,9 @@ host: WORD api_set: WordApi: '1.7' script: - content: | - $("#run").on("click", () => tryCatch(run)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function run() { await Word.run(async (context) => { @@ -67,14 +67,12 @@ template: Word.

    -

    Set up

    -

    Try it out

    -

    Try it out

    Get the word/term count. @@ -122,15 +120,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index fc7c89344..66b2fe227 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -8,9 +8,9 @@ api_set: WordApi: '1.1' script: content: |- - $("#add-text").on("click", () => tryCatch(addFormattedText)); - $("#add-paragraph").on("click", () => tryCatch(addFormattedParagraph)); - $("#add-preset").on("click", () => tryCatch(addPreStyledFormattedText)); + document.getElementById("add-text").addEventListener("click", () => tryCatch(addFormattedText)); + document.getElementById("add-paragraph").addEventListener("click", () => tryCatch(addFormattedParagraph)); + document.getElementById("add-preset").addEventListener("click", () => tryCatch(addPreStyledFormattedText)); async function addFormattedText() { await Word.run(async (context) => { @@ -79,7 +79,6 @@ template:
    This sample shows how to insert basic formatted text and apply built-in styles.
    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    -

    Try it out

    Compare location of first paragraph with location of second paragraph

    @@ -119,15 +117,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index a113fde70..bc4ec0029 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -7,10 +7,10 @@ host: WORD api_set: WordApi: '1.2' script: - content: | - $("#setup").on("click", () => tryCatch(setup)); - $("#scroll").on("click", () => tryCatch(scroll)); - $("#scroll-end").on("click", () => tryCatch(scrollEnd)); + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("scroll").addEventListener("click", () => tryCatch(scroll)); + document.getElementById("scroll-end").addEventListener("click", () => tryCatch(scrollEnd)); async function scroll() { await Word.run(async (context) => { @@ -63,14 +63,12 @@ template:
    This sample demonstrates how to scroll to a range.
    -

    Set up

    -

    Try it out

    -

    Try it out

    -

    Try it out

    Add a new table style

    @@ -362,7 +361,6 @@ template: Display style properties
    -

    Update custom style

    @@ -390,7 +387,6 @@ template: Set allowBreakAcrossPage property
    -
    @@ -399,7 +395,6 @@ template: Set top cell margin
    -
    @@ -408,7 +403,6 @@ template: Set bottom cell margin
    -
    @@ -417,7 +411,6 @@ template: Set left cell margin
    -
    @@ -426,7 +419,6 @@ template: Set right cell margin
    -
    @@ -435,7 +427,6 @@ template: Set cell spacing
    -

    Delete custom style

    @@ -445,7 +436,6 @@ template: Delete style
    -

    Import styles from JSON string

    language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -471,15 +461,9 @@ style: margin-bottom: 5px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index 23b2855b5..303649fb2 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -7,17 +7,17 @@ host: WORD api_set: WordApi: '1.3' script: - content: | - $("#get-table-alignment").on("click", () => tryCatch(getTableAlignment)); - $("#get-table-border").on("click", () => tryCatch(getTableBorder)); - $("#get-table-cell-padding").on("click", () => tryCatch(getTableCellPadding)); - $("#get-table-row-alignment").on("click", () => tryCatch(getTableRowAlignment)); - $("#get-table-row-border").on("click", () => tryCatch(getTableRowBorder)); - $("#get-table-row-cell-padding").on("click", () => tryCatch(getTableRowCellPadding)); - $("#get-table-cell-alignment").on("click", () => tryCatch(getTableCellAlignment)); - $("#get-table-cell-border").on("click", () => tryCatch(getTableCellBorder)); - $("#get-table-cell-cell-padding").on("click", () => tryCatch(getTableCellCellPadding)); - $("#setup").on("click", () => tryCatch(insertTable)); + content: |- + document.getElementById("get-table-alignment").addEventListener("click", () => tryCatch(getTableAlignment)); + document.getElementById("get-table-border").addEventListener("click", () => tryCatch(getTableBorder)); + document.getElementById("get-table-cell-padding").addEventListener("click", () => tryCatch(getTableCellPadding)); + document.getElementById("get-table-row-alignment").addEventListener("click", () => tryCatch(getTableRowAlignment)); + document.getElementById("get-table-row-border").addEventListener("click", () => tryCatch(getTableRowBorder)); + document.getElementById("get-table-row-cell-padding").addEventListener("click", () => tryCatch(getTableRowCellPadding)); + document.getElementById("get-table-cell-alignment").addEventListener("click", () => tryCatch(getTableCellAlignment)); + document.getElementById("get-table-cell-border").addEventListener("click", () => tryCatch(getTableCellBorder)); + document.getElementById("get-table-cell-cell-padding").addEventListener("click", () => tryCatch(getTableCellCellPadding)); + document.getElementById("setup").addEventListener("click", () => tryCatch(insertTable)); async function getTableAlignment() { // Gets alignment details about the first table in the document. @@ -171,7 +171,6 @@ template: This sample shows how to get various formatting details about a table, a table row, and a table cell, including borders, alignment, and cell padding.
    -

    Set up

    -

    Try it out

    You should also show the formatting marks to see the section indicators. To learn more, refer to Show or hide tab marks in Word

    -

    Try it out

    -

    Set up

    -

    Try it out

    -

    Try it out

    -

    Try it out

    Get current change tracking mode

    @@ -140,15 +138,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index b630ddcfd..7593ebb46 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -6,17 +6,17 @@ host: WORD api_set: WordApi: '1.4' script: - content: | - $("#insert").on("click", () => tryCatch(insertComment)); - $("#edit").on("click", () => tryCatch(editFirstCommentInSelection)); - $("#reply").on("click", () => tryCatch(replyToFirstActiveCommentInSelection)); - $("#resolve").on("click", () => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); - $("#range").on("click", () => tryCatch(getFirstCommentRangeInSelection)); - $("#get-comments-in-selection").on("click", () => tryCatch(getCommentsInSelection)); - $("#get-replies-to-first-comment-in-selection").on("click", () => tryCatch(getRepliesToFirstCommentInSelection)); - $("#delete").on("click", () => tryCatch(deleteFirstCommentInSelection)); - $("#get-comments").on("click", () => tryCatch(getComments)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert").addEventListener("click", () => tryCatch(insertComment)); + document.getElementById("edit").addEventListener("click", () => tryCatch(editFirstCommentInSelection)); + document.getElementById("reply").addEventListener("click", () => tryCatch(replyToFirstActiveCommentInSelection)); + document.getElementById("resolve").addEventListener("click", () => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); + document.getElementById("range").addEventListener("click", () => tryCatch(getFirstCommentRangeInSelection)); + document.getElementById("get-comments-in-selection").addEventListener("click", () => tryCatch(getCommentsInSelection)); + document.getElementById("get-replies-to-first-comment-in-selection").addEventListener("click", () => tryCatch(getRepliesToFirstCommentInSelection)); + document.getElementById("delete").addEventListener("click", () => tryCatch(deleteFirstCommentInSelection)); + document.getElementById("get-comments").addEventListener("click", () => tryCatch(getComments)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertComment() { // Sets a comment on the selected content. @@ -218,14 +218,12 @@ template:

    This sample shows basic operations using comments.

    -

    Set up

    -

    Try it out

    Manage comments in selection

    @@ -297,15 +295,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index ba6380115..84d012fdb 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -6,15 +6,15 @@ host: WORD api_set: WordApi: '1.4' script: - content: | - $("#add-custom-xml-part").on("click", () => tryCatch(addCustomXmlPart)); - $("#query").on("click", () => tryCatch(query)); - $("#get-namespace").on("click", () => tryCatch(getNamespace)); - $("#get-by-namespace").on("click", () => tryCatch(getByNamespaceUri)); - $("#replace-custom-xml-part").on("click", () => tryCatch(replace)); - $("#insert-attribute").on("click", () => tryCatch(insertAttribute)); - $("#insert-element").on("click", () => tryCatch(insertElement)); - $("#delete-custom-xml-part").on("click", () => tryCatch(deleteCustomXmlPart)); + content: |- + document.getElementById("add-custom-xml-part").addEventListener("click", () => tryCatch(addCustomXmlPart)); + document.getElementById("query").addEventListener("click", () => tryCatch(query)); + document.getElementById("get-namespace").addEventListener("click", () => tryCatch(getNamespace)); + document.getElementById("get-by-namespace").addEventListener("click", () => tryCatch(getByNamespaceUri)); + document.getElementById("replace-custom-xml-part").addEventListener("click", () => tryCatch(replace)); + document.getElementById("insert-attribute").addEventListener("click", () => tryCatch(insertAttribute)); + document.getElementById("insert-element").addEventListener("click", () => tryCatch(insertElement)); + document.getElementById("delete-custom-xml-part").addEventListener("click", () => tryCatch(deleteCustomXmlPart)); async function addCustomXmlPart() { // Adds a custom XML part. @@ -257,7 +257,6 @@ template:

    This sample shows how to add, query, replace, edit, and delete a custom XML part in a document.

    Note: For your production add-in, make sure to create and host your own XML schema.

    -

    Try it out

    -

    Try it out

    -

    Set up

    -

    Try it out

    Insert fields

    @@ -197,7 +195,6 @@ template: Insert Date field

    -

    Get and update fields

    -

    Delete fields

    -

    Try it out

    Insert footnote

    @@ -238,15 +236,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 2dc50e3f5..b80adc658 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -6,10 +6,10 @@ host: WORD api_set: WordApi: '1.4' script: - content: | - $("#add-edit-setting").on("click", () => tryCatch(addEditSetting)); - $("#get-all-settings").on("click", () => tryCatch(getAllSettings)); - $("#delete-all-settings").on("click", () => tryCatch(deleteAllSettings)); + content: |- + document.getElementById("add-edit-setting").addEventListener("click", () => tryCatch(addEditSetting)); + document.getElementById("get-all-settings").addEventListener("click", () => tryCatch(getAllSettings)); + document.getElementById("delete-all-settings").addEventListener("click", () => tryCatch(deleteAllSettings)); async function addEditSetting() { // Adds a new custom setting or @@ -82,7 +82,6 @@ template: can only be managed by that add-in.

    -

    Try it out

    Add a new setting, or edit an existing one

    @@ -120,15 +119,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index daf6afd8c..f798edc85 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -6,16 +6,16 @@ host: WORD api_set: WordApiDesktop: '1.1' script: - content: | - $("#count").on("click", () => tryCatch(getCount)); - $("#add-style").on("click", () => tryCatch(addStyle)); - $("#properties").on("click", () => tryCatch(getProperties)); - $("#apply-style").on("click", () => tryCatch(applyStyle)); - $("#font-properties").on("click", () => tryCatch(setFontProperties)); - $("#paragraph-format").on("click", () => tryCatch(setParagraphFormat)); - $("#border-properties").on("click", () => tryCatch(setBorderProperties)); - $("#shading-properties").on("click", () => tryCatch(setShadingProperties)); - $("#delete-style").on("click", () => tryCatch(deleteStyle)); + content: |- + document.getElementById("count").addEventListener("click", () => tryCatch(getCount)); + document.getElementById("add-style").addEventListener("click", () => tryCatch(addStyle)); + document.getElementById("properties").addEventListener("click", () => tryCatch(getProperties)); + document.getElementById("apply-style").addEventListener("click", () => tryCatch(applyStyle)); + document.getElementById("font-properties").addEventListener("click", () => tryCatch(setFontProperties)); + document.getElementById("paragraph-format").addEventListener("click", () => tryCatch(setParagraphFormat)); + document.getElementById("border-properties").addEventListener("click", () => tryCatch(setBorderProperties)); + document.getElementById("shading-properties").addEventListener("click", () => tryCatch(setShadingProperties)); + document.getElementById("delete-style").addEventListener("click", () => tryCatch(deleteStyle)); async function getCount() { // Gets the number of available styles stored with the document. @@ -253,7 +253,6 @@ template:
    This sample demonstrates how to manage styles.
    -

    Try it out

    @@ -262,7 +261,6 @@ template: Get count

    -

    Add a custom style

    Give the style an alphanumeric name. Must start with a letter. Examples: NewName, newname1

    @@ -281,7 +279,6 @@ template: -

    Use custom style

    @@ -293,7 +290,6 @@ template: -

    Update custom style

    @@ -317,7 +313,6 @@ template: -

    Delete custom style

    @@ -342,10 +337,6 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - core-js@2.4.1/client/core.min.js - @types/core-js - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 31796b541..f692ef0e9 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -6,15 +6,15 @@ host: WORD api_set: WordApi: '1.6' script: - content: | - $("#get-all-tracked-changes").on("click", () => tryCatch(getAllTrackedChanges)); - $("#get-first-tracked-change-range").on("click", () => tryCatch(getFirstTrackedChangeRange)); - $("#get-next-tracked-change").on("click", () => tryCatch(getNextTrackedChange)); - $("#accept-first-tracked-change").on("click", () => tryCatch(acceptFirstTrackedChange)); - $("#reject-first-tracked-change").on("click", () => tryCatch(rejectFirstTrackedChange)); - $("#accept-all-tracked-changes").on("click", () => tryCatch(acceptAllTrackedChanges)); - $("#reject-all-tracked-changes").on("click", () => tryCatch(rejectAllTrackedChanges)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("get-all-tracked-changes").addEventListener("click", () => tryCatch(getAllTrackedChanges)); + document.getElementById("get-first-tracked-change-range").addEventListener("click", () => tryCatch(getFirstTrackedChangeRange)); + document.getElementById("get-next-tracked-change").addEventListener("click", () => tryCatch(getNextTrackedChange)); + document.getElementById("accept-first-tracked-change").addEventListener("click", () => tryCatch(acceptFirstTrackedChange)); + document.getElementById("reject-first-tracked-change").addEventListener("click", () => tryCatch(rejectFirstTrackedChange)); + document.getElementById("accept-all-tracked-changes").addEventListener("click", () => tryCatch(acceptAllTrackedChanges)); + document.getElementById("reject-all-tracked-changes").addEventListener("click", () => tryCatch(rejectAllTrackedChanges)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function getAllTrackedChanges() { // Gets all tracked changes. @@ -152,14 +152,12 @@ template:

    This sample shows how to manage tracked changes.
    -

    Set up

    -

    Try it out

    -

    Replace placeholder text

    -

    Try it out

    -

    Try it out

    Set the styling of the first paragraph.

    @@ -108,13 +106,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml index 70b694d4a..d74455158 100644 --- a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml +++ b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -6,12 +6,12 @@ host: WORD api_set: WordApi: '1.9' script: - content: | - $("#insert-controls").on("click", () => tryCatch(insertContentControls)); - $("#change-controls").on("click", () => tryCatch(modifyContentControls)); - $("#set-state").on("click", () => tryCatch(setState)); - $("#reset-state").on("click", () => tryCatch(resetState)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("insert-controls").addEventListener("click", () => tryCatch(insertContentControls)); + document.getElementById("change-controls").addEventListener("click", () => tryCatch(modifyContentControls)); + document.getElementById("set-state").addEventListener("click", () => tryCatch(setState)); + document.getElementById("reset-state").addEventListener("click", () => tryCatch(resetState)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertContentControls() { // Traverses each paragraph of the document and wraps a content control on each with either a even or odd tags. @@ -144,14 +144,12 @@ template:
    This sample demonstrates how to insert content controls and change their properties.
    -

    Set up

    -

    Try it out

    Insert content controls on each paragraph. @@ -198,11 +196,5 @@ libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js @types/office-js-preview - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index b3eeefb61..679effec6 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -5,19 +5,19 @@ host: WORD api_set: WordApi: '1.9' script: - content: | - $("#register-event-handlers").on("click", () => tryCatch(registerEventHandlers)); - $("#insert").on("click", () => tryCatch(insertComment)); - $("#edit").on("click", () => tryCatch(editFirstCommentInSelection)); - $("#reply").on("click", () => tryCatch(replyToFirstActiveCommentInSelection)); - $("#resolve").on("click", () => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); - $("#range").on("click", () => tryCatch(getFirstCommentRangeInSelection)); - $("#get-comments-in-selection").on("click", () => tryCatch(getCommentsInSelection)); - $("#get-replies-to-first-comment-in-selection").on("click", () => tryCatch(getRepliesToFirstCommentInSelection)); - $("#delete").on("click", () => tryCatch(deleteFirstCommentInSelection)); - $("#get-comments").on("click", () => tryCatch(getComments)); - $("#deregister-event-handlers").on("click", () => tryCatch(deregisterEventHandlers)); - $("#setup").on("click", () => tryCatch(setup)); + content: |- + document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); + document.getElementById("insert").addEventListener("click", () => tryCatch(insertComment)); + document.getElementById("edit").addEventListener("click", () => tryCatch(editFirstCommentInSelection)); + document.getElementById("reply").addEventListener("click", () => tryCatch(replyToFirstActiveCommentInSelection)); + document.getElementById("resolve").addEventListener("click", () => tryCatch(toggleResolvedStatusOfFirstCommentInSelection)); + document.getElementById("range").addEventListener("click", () => tryCatch(getFirstCommentRangeInSelection)); + document.getElementById("get-comments-in-selection").addEventListener("click", () => tryCatch(getCommentsInSelection)); + document.getElementById("get-replies-to-first-comment-in-selection").addEventListener("click", () => tryCatch(getRepliesToFirstCommentInSelection)); + document.getElementById("delete").addEventListener("click", () => tryCatch(deleteFirstCommentInSelection)); + document.getElementById("get-comments").addEventListener("click", () => tryCatch(getComments)); + document.getElementById("deregister-event-handlers").addEventListener("click", () => tryCatch(deregisterEventHandlers)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); let eventContexts = []; @@ -273,14 +273,12 @@ template: Word on a different platform.

    -

    Set up

    -

    Try it out

    @@ -362,15 +360,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js @types/office-js-preview - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js - - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/word/default.yaml b/samples/word/default.yaml index afde4ef92..9d45b151a 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -6,8 +6,8 @@ host: WORD api_set: WordApi: '1.1' script: - content: | - $("#run").on("click", () => tryCatch(run)); + content: |- + document.getElementById("run").addEventListener("click", () => tryCatch(run)); async function run() { await Word.run(async (context) => { @@ -31,7 +31,7 @@ script: } language: typescript template: - content: | + content: |- @@ -49,15 +49,9 @@ style: min-width: 80px; } language: css -libraries: | +libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js - - office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - - core-js@2.4.1/client/core.min.js - @types/core-js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts - jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/scripts/.gitattributes b/scripts/.gitattributes deleted file mode 100644 index 638b85721..000000000 --- a/scripts/.gitattributes +++ /dev/null @@ -1,24 +0,0 @@ -* text=auto -.gitattributes text -*.css text eol=lf -*.html text eol=lf -*.js text eol=lf -*.json text eol=lf -*.xml text eol=lf -*.kql text eol=lf -*.lock text eol=lf -*.md text eol=lf -*.ts text eol=lf -*.tsx text eol=lf -*.txt text eol=lf -*.yaml text eol=lf -*.yml text eol=lf -.npmrc text eol=lf - -*.cs text eol=crlf -*.sln text eol=crlf -*.csproj text eol=crlf - - -*.png binary -*.jpg binary \ No newline at end of file diff --git a/scripts/.gitignore b/scripts/.gitignore deleted file mode 100644 index dbf082131..000000000 --- a/scripts/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/* \ No newline at end of file diff --git a/scripts/README.md b/scripts/README.md deleted file mode 100644 index be81caa85..000000000 --- a/scripts/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Scripts - -These scripts used to help maintain this repository. - -## Setup - -> npm install - -## Edit Script - -This script is used to bulk edit samples. - -To run this script: - -> npm run edit - -The edit targets all prod samples listed in `playlists-prod` and all default samples. - -Under the src folder the transform* files contain the specific JavaScript transforms that will run. - -To develop new transforms: - -1. Make changes the transform* functions -2. Run the transforms (npm run edit) -3. Check using the git diff to make sure the changes are what you expect -4. If you don't like the changes run the following in the **samples** folder: - > git checkout -- * diff --git a/scripts/config/prettier.json b/scripts/config/prettier.json deleted file mode 100644 index f485b3e4c..000000000 --- a/scripts/config/prettier.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "trailingComma": "all", - "arrowParens": "always", - "endOfLine": "lf", - "proseWrap": "preserve", - "printWidth": 100, - "tabWidth": 4 -} \ No newline at end of file diff --git a/scripts/package-lock.json b/scripts/package-lock.json deleted file mode 100644 index 25f3bb4a1..000000000 --- a/scripts/package-lock.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "name": "scripts", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "scripts", - "version": "0.0.0", - "license": "Unlicense", - "devDependencies": { - "@types/node": "^18.19.80", - "prettier": "^3.5.3", - "ts-node": "^10.9.2", - "typescript": "^5.8.2", - "yaml": "^2.7.0" - }, - "engines": { - "node": ">=18.0", - "npm": ">=10.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.19.80", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.80.tgz", - "integrity": "sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - } -} diff --git a/scripts/package.json b/scripts/package.json deleted file mode 100644 index 455d76af6..000000000 --- a/scripts/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "scripts", - "version": "0.0.0", - "description": "Scripts to transform samples", - "private": true, - "engines": { - "node": ">=18.0", - "npm": ">=10.0" - }, - "scripts": { - "edit": "ts-node src/main.ts", - "style": "prettier --config ./config/prettier.json --write \"@(src|test|scripts)/**/*.@(ts|tsx|js|md|html|css|json)\"" - }, - "author": "wandyezj", - "license": "Unlicense", - "devDependencies": { - "@types/node": "^18.19.80", - "prettier": "^3.5.3", - "ts-node": "^10.9.2", - "typescript": "^5.8.2", - "yaml": "^2.7.0" - } -} diff --git a/scripts/src/RawPlaylist.ts b/scripts/src/RawPlaylist.ts deleted file mode 100644 index 0f3f4495c..000000000 --- a/scripts/src/RawPlaylist.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { RawPlaylistItem } from "./RawPlaylistItem"; - -export type RawPlaylist = RawPlaylistItem[]; diff --git a/scripts/src/RawPlaylistItem.ts b/scripts/src/RawPlaylistItem.ts deleted file mode 100644 index 0e9cc280f..000000000 --- a/scripts/src/RawPlaylistItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * YAML - */ -export interface RawPlaylistItem { - name: string; - description: string; - rawUrl: string; -} diff --git a/scripts/src/RawSample.ts b/scripts/src/RawSample.ts deleted file mode 100644 index 147d8d4c4..000000000 --- a/scripts/src/RawSample.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * YAML - */ -export interface RawSample { - name: string; - description: string; - script: { - content: string; - language: string; - }; - template: { - content: string; - language: string; - }; - style: { - content: string; - language: string; - }; - libraries: string; -} diff --git a/scripts/src/SampleTypes.ts b/scripts/src/SampleTypes.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/scripts/src/main.ts b/scripts/src/main.ts deleted file mode 100644 index d03c0eb22..000000000 --- a/scripts/src/main.ts +++ /dev/null @@ -1,118 +0,0 @@ -// -// main entry point for the application -// - -import * as fs from "fs"; -import { readFileText } from "./utils/readFileText"; -import { parseRawPlaylist } from "./parseRawPlaylist"; -import { parseRawSample } from "./parseRawSample"; -import { transformRawSample } from "./transformSample"; -import yaml from "yaml"; - -console.log("Start edit sample yaml"); - -// (1) Read the playlist YAML file from sample -// (2) Read each sample YAML file -// (3) Pase the YAML file -// (4) Transform the YAML file -// (5) Write the YAML file over the original file - -const sampleDirectory = "../samples"; -const playlistDirectory = "../playlists-prod"; - -// -// Get sample files -// - -const playlistFiles = fs.readdirSync(playlistDirectory); -console.log(`Playlist files: - ${playlistFiles.join("\n ")}`); - -const playlists = playlistFiles.map((file) => { - const filePath = `${playlistDirectory}/${file}`; - const fileText = readFileText(filePath); - const playlist = parseRawPlaylist(fileText); - return playlist; -}); - -const playlistSamplePaths = playlists - .map((playlist) => { - const sampleFilePaths = playlist.map((item) => { - const { rawUrl } = item; - - // flip raw url to the file path - // https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/project/basics/basic-common-api-call.yaml - const filePath = rawUrl.replace( - "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/", - "../", - ); - return filePath; - }); - - return sampleFilePaths; - }) - .flat(); - -const defaultSamplePaths = fs.readdirSync(sampleDirectory).map((file) => { - const filePath = `${sampleDirectory}/${file}/default.yaml`; - return filePath; -}); - -const samplePaths = [...defaultSamplePaths, ...playlistSamplePaths]; - -console.log(`Sample files: - ${samplePaths.join("\n ")}`); - -// Check that all of the sample files exist -const checkSampleFiles = samplePaths.map((path) => { - const present = fs.existsSync(path); - return { present, path }; -}); - -const missingSampleFiles = checkSampleFiles - .filter(({ present }) => !present) - .map(({ path }) => path); - -if (missingSampleFiles.length > 0) { - console.log("=".repeat(80)); - console.error(`Missing sample files: - ${missingSampleFiles.join("\n")}`); -} - -// -// Transform each sample file -// -console.log("=".repeat(80)); -console.log("Transforming sample files..."); -const transformSampleSuccess = samplePaths.map((path) => { - console.log(`${path}`); - let success = true; - try { - const fileText = readFileText(path); - const sample = parseRawSample(fileText); - const transformedSample = transformRawSample(path, sample); - - const transformedSampleYaml = yaml.stringify(transformedSample, { - indent: 4, - singleQuote: true, - }); - - fs.writeFileSync(path, transformedSampleYaml); - console.log(`success`); - } catch (error) { - console.error(`ERROR\n${error}`); - success = false; - } - - return { - path, - success, - }; -}); - -const transformSampleErrors = transformSampleSuccess.filter(({ success }) => !success); -if (transformSampleErrors.length > 0) { - console.log("=".repeat(80)); - console.log(`Error: Transforming sample files: - ${transformSampleErrors.map((x) => x.path).join("\n ")}`); -} diff --git a/scripts/src/parseRawPlaylist.ts b/scripts/src/parseRawPlaylist.ts deleted file mode 100644 index da3fd72a1..000000000 --- a/scripts/src/parseRawPlaylist.ts +++ /dev/null @@ -1,7 +0,0 @@ -import yaml from "yaml"; -import type { RawPlaylist } from "./RawPlaylist"; - -export function parseRawPlaylist(data: string): RawPlaylist { - const items = yaml.parse(data) as RawPlaylist; - return items; -} diff --git a/scripts/src/parseRawSample.ts b/scripts/src/parseRawSample.ts deleted file mode 100644 index d8765c7c6..000000000 --- a/scripts/src/parseRawSample.ts +++ /dev/null @@ -1,7 +0,0 @@ -import yaml from "yaml"; -import type { RawSample } from "./RawSample"; - -export function parseRawSample(data: string): RawSample { - const rawSample = yaml.parse(data) as RawSample; - return rawSample; -} diff --git a/scripts/src/transformCss.ts b/scripts/src/transformCss.ts deleted file mode 100644 index c52849def..000000000 --- a/scripts/src/transformCss.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function transformCss(data: string): string { - return data; -} diff --git a/scripts/src/transformHtml.ts b/scripts/src/transformHtml.ts deleted file mode 100644 index 4b0449df7..000000000 --- a/scripts/src/transformHtml.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function transformHtml(data: string): string { - return data.replace(/\n\n/g, "\n").trim(); -} diff --git a/scripts/src/transformLibraries.ts b/scripts/src/transformLibraries.ts deleted file mode 100644 index 1b6c34511..000000000 --- a/scripts/src/transformLibraries.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Transform library references. - * - Remove jquery & core-js - * - Reference CDN for office.js types - * - Directly reference unpkg for npm packages - * @returns transformed libraries - */ -export function transformLibraries(data: string): string { - function getLinkFromPackageReference(packageReference: string): string | undefined { - const reg = /^(?.*)@(?\d+\.\d+\.\d+)\/(?.*)$/; - const groups = reg.exec(packageReference)?.groups; - if (groups === undefined) { - return packageReference; - } - - const { packageName, packageVersion, packageFile } = groups; - - return `https://unpkg.com/${packageName}@${packageVersion}/${packageFile}`; - } - - const cleanLibraries = data - .split("\n") - .map((line) => { - line = line.trim(); - - // Empty line - if (line === "") { - return ""; - } - - // Comment - if (line.startsWith("//") || line.startsWith("#")) { - return line; - } - - // direct reference - if (line.startsWith("https://") || line.startsWith("http://")) { - return line; - } - - // office.js - if (line === "@types/office-js") { - return `https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts`; - } - - // Remove packages - const packageNamesIgnore = ["jquery", "@types/jquery", "core-js", "@types/core-js"]; - const isExcluded = packageNamesIgnore.some((packageName) => - line.startsWith(packageName), - ); - if (isExcluded) { - return undefined; - } - - // npm reference - const link = getLinkFromPackageReference(line); - return link; - }) - .filter((line) => line !== undefined) as string[]; - - const cleanData = cleanLibraries.join("\n").replace(/\n\n\n/, "\n\n"); - return cleanData; -} diff --git a/scripts/src/transformSample.ts b/scripts/src/transformSample.ts deleted file mode 100644 index 643b9fe22..000000000 --- a/scripts/src/transformSample.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { RawSample } from "./RawSample"; -import { transformCss } from "./transformCss"; -import { transformHtml } from "./transformHtml"; -import { transformLibraries } from "./transformLibraries"; -import { transformTypeScript } from "./transformTypeScript"; - -export function transformRawSample(id: string, rawSample: RawSample): RawSample { - const typescriptRaw = rawSample?.script?.content; - const htmlRaw = rawSample?.template?.content; - const cssRaw = rawSample?.style?.content; - const librariesRaw = rawSample?.libraries; - - if ([typescriptRaw, htmlRaw, cssRaw, librariesRaw].some((content) => content === undefined)) { - console.log(`ERROR: Empty content [${rawSample.name}] ${id}`); - // happens for custom functions - return rawSample; - } - - const typescriptContent = transformTypeScript(typescriptRaw).trim(); - const htmlContent = transformHtml(htmlRaw).trim(); - const cssContent = transformCss(cssRaw).trim(); - const librariesContent = transformLibraries(librariesRaw).trim(); - - // Update the raw sample with the transformed content - rawSample.script.content = typescriptContent; - rawSample.template.content = htmlContent; - rawSample.style.content = cssContent; - rawSample.libraries = librariesContent; - - return rawSample; -} diff --git a/scripts/src/transformTypeScript.ts b/scripts/src/transformTypeScript.ts deleted file mode 100644 index 1a8e025b2..000000000 --- a/scripts/src/transformTypeScript.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Transform TypeScript code. - * - remove JQuery handlers - * - Add Office on ready. - */ -export function transformTypeScript(data: string): string { - // remove jquery - // $("#id").on("click", () => tryCatch(handler));`; - const jqueryReg = /^\$\("#(?.*)"\)\.on\("click", \(\) => tryCatch\((?.*)\)\);$/; - - // Outlook specific - // $("#id").on("click", handler); - const jqueryAlt = /^\$\("#(?.*)"\)\.on\("click", (?.*)\);$/; - // $("#id").click(handler); - const jqueryAlt2 = /^\$\("#(?.*)"\)\.click\((?.*)\);$/; - - const cleanData = data - .split("\n") - .map((line) => { - const trimLine = line.trim(); - - if (trimLine.startsWith("$")) { - // JQuery - const match = jqueryReg.exec(trimLine); - if (match !== null) { - const groups = match?.groups; - if (groups) { - const { id, handler } = groups; - return `document.getElementById("${id}").addEventListener("click", () => tryCatch(${handler}));`; - } - } - - const matchAlt = jqueryAlt.exec(trimLine) || jqueryAlt2.exec(trimLine); - if (matchAlt !== null) { - const groups = matchAlt?.groups; - if (groups) { - const { id, handler } = groups; - return `document.getElementById("${id}").addEventListener("click", ${handler});`; - } - } - } - - return line; - }) - .join("\n"); - - const code = cleanData; - - return code; -} diff --git a/scripts/src/utils/capitalize.ts b/scripts/src/utils/capitalize.ts deleted file mode 100644 index 30198b274..000000000 --- a/scripts/src/utils/capitalize.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * uppercases the first character in a string. - * in the case that the first character in the string can not be upper cased (for example a white space character or an empty string) the string is unmodified. - * @param word - string to capitalize - * @returns the string with it's first character upper cased. - * - */ -export function capitalize(word: string): string { - if (!word || word.length === 0) { - return word; - } - - if (word.length === 1) { - return word.toUpperCase(); - } - - return word.substring(0, 1).toUpperCase() + word.substring(1); -} diff --git a/scripts/src/utils/decapitalize.ts b/scripts/src/utils/decapitalize.ts deleted file mode 100644 index 35c7ed38c..000000000 --- a/scripts/src/utils/decapitalize.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * decapitalize a string - * @param string - string to decapitalize - */ -export function decapitalize(string: string): string { - if (string.length === 0) { - return string; - } - return string.charAt(0).toLowerCase() + string.slice(1); -} diff --git a/scripts/src/utils/directoryFileNames.ts b/scripts/src/utils/directoryFileNames.ts deleted file mode 100644 index f05b3e725..000000000 --- a/scripts/src/utils/directoryFileNames.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { readdirSync } from "fs"; -import { isFile } from "./isFile"; -import { join } from "path"; - -/** - * retrieves the file names present in the directory - * @param path - path of the directory to get the files in - * @returns list of file names in the directory - */ -export function directoryFileNames(path: string): string[] { - const all = readdirSync(path); - const files = all.filter((file: string) => isFile(join(path, file))); - // paths are sorted because determinism is convenient for testing and reproduction of issues. - return files.sort(); -} diff --git a/scripts/src/utils/equivalentLists.ts b/scripts/src/utils/equivalentLists.ts deleted file mode 100644 index 8cce71c17..000000000 --- a/scripts/src/utils/equivalentLists.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * checks if two lists have the same values in the same order using the default comparison operator. - * - * @param a - a list - * @param b - a list - * @returns true if both lists have the same values in the same order. - */ -export function equivalentLists(a: string[], b: string[]): boolean { - if (a.length !== b.length) { - return false; - } - - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - - return true; -} diff --git a/scripts/src/utils/indent.ts b/scripts/src/utils/indent.ts deleted file mode 100644 index abbb1f32a..000000000 --- a/scripts/src/utils/indent.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { lineSplit } from "./lineSplit"; -import { mergeWithDefaults } from "./mergeWithDefaults"; - -/** - * describe a single level of indent - */ -export interface IndentOptions { - /** - * the value to use for the indent - * default of four spaces - */ - value: string; - - /** - * the number of the value to use for a single level of indent - * default of 1 - */ - count: number; - - /** - * the number of times to indent - * default of 1 - */ - level: number; -} - -const defaultIndent: IndentOptions = { - value: " ", - count: 4, - level: 1, -}; - -/** - * indent all lines with the specified level of indent. - * @param string - string to indent - * @param indent - indent options - * @returns a version of the string indented according to the indent options - */ -export function indent(string: string, indent: Partial = defaultIndent): string { - const settings: IndentOptions = mergeWithDefaults(indent, defaultIndent); - - const indentString = settings.value.repeat(settings.count).repeat(settings.level); - - // this also indents any empty lines - return indentString + lineSplit(string).join(`\n${indentString}`); -} diff --git a/scripts/src/utils/isFile.ts b/scripts/src/utils/isFile.ts deleted file mode 100644 index d38c56869..000000000 --- a/scripts/src/utils/isFile.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { lstatSync } from "fs"; - -/** - * is the path a file? - * - * @param path - path to test - * @returns true when the path is a file - */ -export function isFile(path: string): boolean { - return lstatSync(path).isFile(); -} diff --git a/scripts/src/utils/joinWords.ts b/scripts/src/utils/joinWords.ts deleted file mode 100644 index be3b3b81d..000000000 --- a/scripts/src/utils/joinWords.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { capitalize } from "./capitalize"; - -/** - * splits on whitespaces and -, capitalizes words, and joins them - * @param words - */ -export function joinWords(words: string): string { - return words - .split(/(\s|-)/) - .map((word) => capitalize(word)) - .join(""); -} diff --git a/scripts/src/utils/lineSplit.ts b/scripts/src/utils/lineSplit.ts deleted file mode 100644 index 0332f14d9..000000000 --- a/scripts/src/utils/lineSplit.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { standardizeNewlines } from "./standardizeNewlines"; - -/** - * split a string into a list of lines - * @param string - string to split - * @returns list of the individual lines in the string - */ -export function lineSplit(string: string): string[] { - return standardizeNewlines(string).split("\n"); -} diff --git a/scripts/src/utils/listWithoutDuplicateElements.ts b/scripts/src/utils/listWithoutDuplicateElements.ts deleted file mode 100644 index da57f3363..000000000 --- a/scripts/src/utils/listWithoutDuplicateElements.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * creates list without duplicates from an original list, comparing using the default comparison operator, keeping only the first occurrence. - * @param original - list to - * @returns new list without the duplicates present in the original - */ -export function listWithoutDuplicateElements(original: readonly T[]): T[] { - // only take the first item - return original.filter( - (value: T, index: number, array: readonly T[]) => array.indexOf(value) === index, - ); -} diff --git a/scripts/src/utils/mergeWithDefaults.ts b/scripts/src/utils/mergeWithDefaults.ts deleted file mode 100644 index 859a83758..000000000 --- a/scripts/src/utils/mergeWithDefaults.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -/** - * create a new object that ensure all default properties are present - * @param original - original object - * @param defaults - default object - */ -export function mergeWithDefaults(original: Partial, defaults: T): T { - const o: any = original; - const d: any = defaults; - const merge: any = {}; //shallowCopyOwnProperties(original); - - Object.getOwnPropertyNames(defaults).forEach((name) => { - merge[name] = Object.getOwnPropertyDescriptor(o, name) ? o[name] : d[name]; - }); - - return merge; -} diff --git a/scripts/src/utils/pascalCase.ts b/scripts/src/utils/pascalCase.ts deleted file mode 100644 index 715c1bcb2..000000000 --- a/scripts/src/utils/pascalCase.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { joinWords } from "./joinWords"; -import { capitalize } from "./capitalize"; - -/** - * PascalCase - * splits on spaces and capitalizes words in between - * @param string - string to pascalCase - */ -export function pascalCase(string: string): string { - string = joinWords(string); - return capitalize(string); -} diff --git a/scripts/src/utils/readFileJson.ts b/scripts/src/utils/readFileJson.ts deleted file mode 100644 index 39f722bc7..000000000 --- a/scripts/src/utils/readFileJson.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { readFileText } from "./readFileText"; - -/** - * Read a file that contains JSON and turn it into an object - * - * Note: no validation is done on the data. - * - * @param path - path to the JSON file - */ -export function readFileJson(path: string): T { - const data: string = readFileText(path); - const object: T = JSON.parse(data); - return object; -} diff --git a/scripts/src/utils/readFileList.ts b/scripts/src/utils/readFileList.ts deleted file mode 100644 index 05e5ce413..000000000 --- a/scripts/src/utils/readFileList.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { lineSplit } from "./lineSplit"; -import { listWithoutDuplicateElements } from "./listWithoutDuplicateElements"; -import { readFileText } from "./readFileText"; - -/** - * reads lines from a file and removes the ones that are whitespace. - * @param path - path to read the file from - */ -export function readFileList(path: string): string[] { - const data: string = readFileText(path); - return listWithoutDuplicateElements(lineSplit(data)); -} diff --git a/scripts/src/utils/readFileText.ts b/scripts/src/utils/readFileText.ts deleted file mode 100644 index a9060c643..000000000 --- a/scripts/src/utils/readFileText.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { standardizeNewlines } from "./standardizeNewlines"; -import { readFileSync } from "fs"; - -/** - * Read utf-8 file and transform to standard new lines. - * @param path - path of the file to read - */ -export function readFileText(path: string): string { - let string: string = readFileSync(path, "utf-8"); - - // remove the BOM - // https://en.wikipedia.org/wiki/Byte_order_mark - // The BOM is generally unexpected in text files and causes JSON.parse to fail. - // U+FEFF is the Byte Order Mark for UTF-8 - string = string.replace(/^\uFEFF/, ""); - - const clean = standardizeNewlines(string); - return clean; -} diff --git a/scripts/src/utils/standardizeNewlines.ts b/scripts/src/utils/standardizeNewlines.ts deleted file mode 100644 index 6bc516e82..000000000 --- a/scripts/src/utils/standardizeNewlines.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * standardize newlines to proper unix line endings - * @param string - string to standardize - */ -export function standardizeNewlines(string: string): string { - return string.replace(/\r/gm, ""); -} diff --git a/scripts/src/utils/writeFileJson.ts b/scripts/src/utils/writeFileJson.ts deleted file mode 100644 index 1b35c6cb4..000000000 --- a/scripts/src/utils/writeFileJson.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { writeFileText } from "./writeFileText"; - -/** - * Transform a data object to a string and write it to the specified path. - * @param path - path to write the file to - * @param object - object to transform to JSON and write - */ -export function writeFileJson(path: string, object: object): void { - const json: string = JSON.stringify(object, undefined, 4); - - // add new line at end of file if it doesn't exist - let data = json; - if (!data.endsWith("\n")) { - data += "\n"; - } - - // write file - writeFileText(path, data); -} diff --git a/scripts/src/utils/writeFileList.ts b/scripts/src/utils/writeFileList.ts deleted file mode 100644 index 317655174..000000000 --- a/scripts/src/utils/writeFileList.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { writeFileText } from "./writeFileText"; - -/** - * write a list to a file - * @param path - path to write the file to - * @param list - string list to write to the file - */ -export function writeFileList(path: string, list: readonly string[]): void { - const joined: string = list.join("\n"); - writeFileText(path, joined); -} diff --git a/scripts/src/utils/writeFileText.ts b/scripts/src/utils/writeFileText.ts deleted file mode 100644 index 7ca1fb6eb..000000000 --- a/scripts/src/utils/writeFileText.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { writeFileSync } from "fs"; -import { standardizeNewlines } from "./standardizeNewlines"; - -/** - * write data to path with standard newlines. - * @param path - file path - * @param data - string data to write - */ -export function writeFileText(path: string, string: string): void { - const clean = standardizeNewlines(string); - writeFileSync(path, clean); -} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json deleted file mode 100644 index 937ffabe1..000000000 --- a/scripts/tsconfig.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - "moduleResolution": "node", - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - //"jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */, - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "./", /* Redirect output structure to the directory. */ - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } -} \ No newline at end of file From f577e2cfb01bcd8e3fbbbf96782f221ec51a6973 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 25 Mar 2025 11:50:35 -0700 Subject: [PATCH 120/156] [All hosts] Convert jQuery to JavaScript (#971) * Convert jQuery to JavaScript * Run yarn script * Remove commented out function call --- .../conditional-formatting-basic.yaml | 4 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 8 +- .../test-xml-for-unique-namespace.yaml | 12 +- .../20-data-types/data-types-web-image.yaml | 12 +- .../excel/26-document/custom-properties.yaml | 8 +- .../26-document/get-file-in-slices-async.yaml | 12 +- samples/excel/42-range/range-find.yaml | 6 +- samples/excel/44-shape/shape-images.yaml | 4 +- .../excel/50-workbook/create-workbook.yaml | 4 +- .../workbook-insert-external-worksheets.yaml | 4 +- samples/excel/99-just-for-fun/gradient.yaml | 89 +-- .../99-just-for-fun/path-finder-game.yaml | 19 +- samples/excel/99-just-for-fun/patterns.yaml | 6 +- samples/excel/99-just-for-fun/tetrominos.yaml | 22 +- .../10-roaming-settings/roaming-settings.yaml | 8 +- .../load-set-get-save.yaml | 8 +- .../20-item-body/append-text-on-send.yaml | 2 +- .../20-item-body/prepend-text-on-send.yaml | 2 +- .../prepend-text-to-item-body.yaml | 2 +- .../20-item-body/replace-selected-text.yaml | 2 +- .../get-set-bcc-message-compose.yaml | 4 +- .../get-set-cc-message-compose.yaml | 4 +- ...ional-attendees-appointment-organizer.yaml | 4 +- ...uired-attendees-appointment-organizer.yaml | 4 +- .../get-set-to-message-compose.yaml | 4 +- .../35-notifications/add-getall-remove.yaml | 14 +- .../40-attachments/attachments-compose.yaml | 8 +- .../display-existing-appointment.yaml | 6 +- .../display-existing-message.yaml | 6 +- .../work-with-client-signatures.yaml | 4 +- .../set-displayed-body-subject.yaml | 8 +- .../document/create-presentation.yaml | 4 +- samples/powerpoint/images/insert-image.yaml | 2 +- samples/powerpoint/images/insert-svg.yaml | 2 +- .../scenarios/searches-wikipedia-api.yaml | 210 +++--- samples/powerpoint/shapes/get-set-shapes.yaml | 14 +- .../slide-management/add-slides.yaml | 4 +- .../slide-management/get-set-slides.yaml | 14 +- .../slide-management/insert-slides.yaml | 2 +- .../powerpoint/text/get-set-textrange.yaml | 5 +- ...-and-change-combo-box-content-control.yaml | 10 +- ...-change-dropdown-list-content-control.yaml | 10 +- samples/word/20-lists/manage-list-styles.yaml | 2 +- samples/word/25-paragraph/onadded-event.yaml | 2 +- .../word/25-paragraph/onchanged-event.yaml | 2 +- .../word/40-tables/manage-custom-style.yaml | 88 +-- .../word/50-document/compare-documents.yaml | 4 +- .../word/50-document/get-external-styles.yaml | 4 +- .../50-document/insert-external-document.yaml | 4 +- samples/word/50-document/manage-body.yaml | 4 +- .../50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 12 +- .../word/50-document/manage-footnotes.yaml | 14 +- samples/word/50-document/manage-settings.yaml | 10 +- samples/word/50-document/manage-styles.yaml | 18 +- samples/word/50-document/save-close.yaml | 4 +- .../correlated-objects-pattern.yaml | 5 +- .../insert-and-change-content-controls.yaml | 2 +- .../word/99-preview-apis/manage-comments.yaml | 12 +- snippet-extractor-output/snippets.yaml | 611 +++++++++--------- 60 files changed, 669 insertions(+), 708 deletions(-) diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 23f0d65e7..97ceb9f63 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -189,7 +189,9 @@ script: await context.sync(); - $(".conditional-formats").hide(); + document.querySelectorAll(".conditional-formats").forEach(element => { + element.style.display = "none"; + }); }); } diff --git a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index 09f9e3bed..dff02a2e5 100644 --- a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -24,7 +24,7 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; // Store the XML part's ID in a setting. const settings = context.workbook.settings; @@ -50,7 +50,7 @@ script: await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; await context.sync(); } }); @@ -71,14 +71,14 @@ script: await context.sync(); if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + document.getElementById("display-xml").textContent = `The XML part with the id ${xmlPartIDSetting.value} has been deleted.`; // Delete the unneeded setting too. xmlPartIDSetting.delete(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} has not been deleted:\n${readableXml}` - $("#display-xml").text(strangeMessage); + document.getElementById("display-xml").textContent = strangeMessage; } await context.sync(); diff --git a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index b1ca11906..6bf4d1544 100644 --- a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -14,7 +14,7 @@ script: async function createCustomXmlPart() { await Excel.run(async (context) => { - $("#display-xml").text(""); + document.getElementById("display-xml").textContent = ""; // You must have the xmlns attribute to populate the // CustomXml.namespaceUri property. @@ -26,7 +26,7 @@ script: // Make it a bit more readable. const readableXml = xmlBlob.value.replace(/>\n<"); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; await context.sync(); }); @@ -34,7 +34,7 @@ script: async function testForUniqueNamespace() { await Excel.run(async (context) => { - $("#display-xml").text(""); + document.getElementById("display-xml").textContent = ""; const contosoNamespace = "http://schemas.contoso.com/review/1.0"; const customXmlParts = context.workbook.customXmlParts; const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); @@ -51,8 +51,8 @@ script: // Make it a bit more readable. const readableXml = xmlBlob.value.replace(/>\n<"); - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: + ${readableXml}`; } else { console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); @@ -64,7 +64,7 @@ script: async function deleteAllCustomXmlParts() { await Excel.run(async (context) => { - $("#display-xml").text(""); + document.getElementById("display-xml").textContent = ""; const customXmlParts = context.workbook.customXmlParts; customXmlParts.load("items"); diff --git a/samples/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 9beed0017..68b7f2fd1 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -17,8 +17,8 @@ script: // This function inserts a web image into the currently selected cell. await Excel.run(async (context) => { // Retrieve image data from the task pane and then clear the input fields. - const imageUrl = $("#url").val() as string; - const imageAltText = $("#alt-text").val() as string; + const imageUrl = (document.getElementById("url") as HTMLInputElement).value; + const imageAltText = (document.getElementById("alt-text") as HTMLInputElement).value; clearForm(); // Load the active cell. @@ -65,8 +65,8 @@ script: } // Assign image data to corresponding input fields in the task pane. - $("#url").val(webImageUrl); - $("#alt-text").val(webImageAltText); + (document.getElementById("url") as HTMLInputElement).value = webImageUrl; + (document.getElementById("alt-text") as HTMLInputElement).value = webImageAltText; }); } @@ -95,8 +95,8 @@ script: async function clearForm() { // Clear the input fields in the task pane. - $("#url").val(""); - $("#alt-text").val(""); + (document.getElementById("url") as HTMLInputElement).value = ""; + (document.getElementById("alt-text") as HTMLInputElement).value = ""; } async function setup() { diff --git a/samples/excel/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index 90c3ab73d..12d02e8bf 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -19,8 +19,8 @@ script: async function setCustomDocProperty() { await Excel.run(async (context) => { // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); + const userKey = document.getElementById("key").textContent; + const userValue = document.getElementById("value").textContent; // Add the custom property. const customDocProperties = context.workbook.properties.custom; @@ -50,8 +50,8 @@ script: async function setCustomWorksheetProperty() { await Excel.run(async (context) => { // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); + const userKey = document.getElementById("key").textContent; + const userValue = document.getElementById("value").textContent; // Add the custom property. const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; diff --git a/samples/excel/26-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml index 3371746d2..414ccec06 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -35,7 +35,9 @@ script: console.log("Received the full contents of the file."); let base64string = base64js.fromByteArray(byteArray); - $('#file-contents').val(base64string).show(); + const fileContentsElement = document.getElementById("file-contents") as HTMLTextAreaElement; + fileContentsElement.value = base64string; + fileContentsElement.style.display = "block"; console.log("The Base64-encoded string that represents the current document has been written to the text box. To validate the string, use the \"Create workbook from string\" button."); } @@ -82,7 +84,9 @@ script: } async function newWorkbookFromFile() { - await Excel.createWorkbook($('#file-contents').text()).catch(function (error) { + const fileContentsElement = document.getElementById("file-contents"); + const fileContentsText = fileContentsElement.textContent; + await Excel.createWorkbook(fileContentsText).catch(function (error) { console.error(error); }); } @@ -169,8 +173,8 @@ template: Get file
    - +

    Create a new workbook

    diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 4b0c31b63..857401f22 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -26,7 +26,8 @@ script: // NOTE: If no match is found, an ItemNotFound error // is thrown when Range.find is evaluated. - const foundRange = searchRange.find($("#searchText").val().toString(), { + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.find(searchText, { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle @@ -45,7 +46,8 @@ script: const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); const searchRange = table.getRange(); - const foundRange = searchRange.findOrNullObject($("#searchText").val().toString(), { + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.findOrNullObject(searchText, { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index e931e3fd3..76da24989 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -8,13 +8,13 @@ api_set: script: content: |- document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - $("#selectedFile").on("change", () => tryCatch(readImageFromFile)); + document.getElementById("selectedFile").addEventListener("change", () => tryCatch(readImageFromFile)); document.getElementById("flipImage").addEventListener("click", () => tryCatch(flipImage)); document.getElementById("getImageFormat").addEventListener("click", () => tryCatch(getImageFormat)); document.getElementById("writeOutImageString").addEventListener("click", () => tryCatch(writeOutImageString)); async function readImageFromFile() { - const myFile = document.getElementById("selectedFile"); + const myFile = document.getElementById("selectedFile") as HTMLInputElement; const reader = new FileReader(); reader.onload = (event) => { diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index 5bb4f7f73..c5a6315ac 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -9,7 +9,7 @@ api_set: script: content: |- document.getElementById("create-new-blank-workbook").addEventListener("click", () => tryCatch(createBlankWorkbook)); - $("#file").on("change", () => tryCatch(createWorkbookFromExisting)); + document.getElementById("file").addEventListener("change", () => tryCatch(createWorkbookFromExisting)); async function createBlankWorkbook() { await Excel.run(async (context) => { @@ -18,7 +18,7 @@ script: } async function createWorkbookFromExisting() { - const myFile = document.getElementById("file"); + const myFile = document.getElementById("file") as HTMLInputElement; const reader = new FileReader(); reader.onload = ((event) => { diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 10fb58624..7af9e084f 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -7,14 +7,14 @@ api_set: ExcelAPI: '1.13' script: content: |- - $("#file").on("change", getBase64); + document.getElementById("file").addEventListener("change", getBase64); document.getElementById("insert-sheets").addEventListener("click", () => tryCatch(insertSheets)); let externalWorkbook; async function getBase64() { // Retrieve the file and set up an HTML FileReader element. - const myFile = document.getElementById("file"); + const myFile = document.getElementById("file") as HTMLInputElement; const reader = new FileReader(); reader.onload = (event) => { diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index 09b075b38..d4905cfa3 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -8,15 +8,14 @@ api_set: ExcelApi: '1.4' script: content: |- - initializeColorPickers(); - - // Set up the click handler: - const $drawButton = $("#draw-gradient").on("click", drawGradient); + // Set up the click handler. + document.getElementById("draw-gradient").addEventListener("click", drawGradient); document.getElementById("random").addEventListener("click", randomizeColors); - /** Click-handler for drawing the gradient */ + /** Click-handler for drawing the gradient. */ async function drawGradient() { - $drawButton.prop("disabled", true); + const drawButton = document.getElementById("draw-gradient") as HTMLButtonElement; + drawButton.disabled = true; try { await Excel.run(drawGradientHelper); @@ -24,10 +23,10 @@ script: console.log(error); } - $drawButton.prop("disabled", false); + drawButton.disabled = false; } - /** Helper function to do the actual gradient-drawing */ + /** Helper function to do the actual gradient-drawing. */ async function drawGradientHelper(context: Excel.RequestContext) { context.workbook.worksheets.getItemOrNullObject("Gradient").delete(); const sheet = context.workbook.worksheets.add("Gradient"); @@ -40,9 +39,21 @@ script: } }); - let originalSize = parseInt($("#size").val() as string); + let originalSize = parseInt((document.getElementById("size") as HTMLInputElement).value); const colors2D = createColorArray(originalSize); + // Retrieve color values from elements. + const topLeftColor = (document.getElementById("top-left") as HTMLInputElement).value; + const topRightColor = (document.getElementById("top-right") as HTMLInputElement).value; + const bottomLeftColor = (document.getElementById("bottom-left") as HTMLInputElement).value; + const bottomRightColor = (document.getElementById("bottom-right") as HTMLInputElement).value; + + // Convert HEX colors to RGB using TinyColor. + const topLeftRgb = tinycolor(topLeftColor).toRgb(); + const topRightRgb = tinycolor(topRightColor).toRgb(); + const bottomLeftRgb = tinycolor(bottomLeftColor).toRgb(); + const bottomRightRgb = tinycolor(bottomRightColor).toRgb(); + if (Office.context.requirements.isSetSupported("ExcelApi", "1.9")) { // ExcelApi 1.9 introduced the setCellProperties APIs to efficiently set different properties // across a range without needing to iterate cell-by-cell. @@ -73,21 +84,33 @@ script: } function createColorArray(size: number): string[][] { - // Create a 2D in-memory array to hold the colors + // Create a 2D in-memory array to hold the colors. let colors2D = Array(size); for (let row = 0; row < size; row++) { colors2D[row] = Array(size); } + // Get the color values from the color pickers. + const topLeftColor = (document.getElementById("top-left") as HTMLInputElement).value; + const topRightColor = (document.getElementById("top-right") as HTMLInputElement).value; + const bottomLeftColor = (document.getElementById("bottom-left") as HTMLInputElement).value; + const bottomRightColor = (document.getElementById("bottom-right") as HTMLInputElement).value; + + // Convert HEX to RGB using TinyColor. + const topLeftRgb = tinycolor(topLeftColor).toRgb(); + const topRightRgb = tinycolor(topRightColor).toRgb(); + const bottomLeftRgb = tinycolor(bottomLeftColor).toRgb(); + const bottomRightRgb = tinycolor(bottomRightColor).toRgb(); + const topColors = getColorsArray( - $("#top-left").spectrum("get").toRgb(), - $("#top-right").spectrum("get").toRgb(), + topLeftRgb, + topRightRgb, size ); const bottomColors = getColorsArray( - $("#bottom-left").spectrum("get").toRgb(), - $("#bottom-right").spectrum("get").toRgb(), + bottomLeftRgb, + bottomRightRgb, size ); @@ -101,9 +124,9 @@ script: return colors2D; } - /** Helper function to get an array of colors */ - function getColorsArray(color1: ColorFormats.RGB, color2: ColorFormats.RGB, count: number) { - const result = new Array(count); + /** Helper function to get an array of colors. */ + function getColorsArray(color1, color2, count: number) { + const result = new Array(count); for (let i = 0; i < count; i++) { const fraction = i / (count - 1); result[i] = { @@ -115,16 +138,14 @@ script: return result; } - function initializeColorPickers() { - $("#color-table input[type='text']").spectrum({ - preferredFormat: "rgb", - showInput: true - }); - } - function randomizeColors() { - $("#color-table input[type='text']").each((index, element) => { - $(element).spectrum("set", tinycolor.random().toHexString()); + // Select all color input elements. + const colorInputs = document.querySelectorAll("#color-table input[type='color']"); + + // Iterate through each color input and set a random color. + colorInputs.forEach((input) => { + const randomColor = tinycolor.random().toHexString(); + (input as HTMLInputElement).value = randomColor; }); } language: typescript @@ -138,12 +159,12 @@ template:
    Top left
    - - + + - - + +
    @@ -162,7 +183,7 @@ template:
    - Uses the Spectrum color picker, and the TinyColor libraries. + Uses the TinyColor library.
    @@ -212,9 +233,5 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://unpkg.com/tinycolor2@1.4.1/tinycolor.js - @types/tinycolor2 - https://unpkg.com/spectrum-colorpicker@1.8.0/spectrum.js - https://unpkg.com/spectrum-colorpicker@1.8.0/spectrum.css - @types/spectrum \ No newline at end of file + @types/tinycolor2 \ No newline at end of file diff --git a/samples/excel/99-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml index 6dd28e9a0..8ea6024a2 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -10,9 +10,8 @@ script: content: |- document.getElementById("setup").addEventListener("click", setup); document.getElementById("repeat").addEventListener("click", repeat); - - const $pruneTheGrid = $("#step-by-step").on("click", pruneTheGrid); - const $allAtOnce = $("#all-at-once").on("click", allAtOnce); + document.getElementById("step-by-step").addEventListener("click", pruneTheGrid); + document.getElementById("all-at-once").addEventListener("click", allAtOnce); const GRID_ROW_COUNT = 25; const GRID_COLUMN_COUNT = 30; @@ -20,7 +19,7 @@ script: let matrixPrevious: string[][] function setup() { - const density = parseInt($("#density").val() as string) / 100; + const density = parseInt((document.getElementById("density") as HTMLInputElement).value) / 100; const symbol = "\u25cf"; const matrix = new Array(GRID_ROW_COUNT); @@ -32,7 +31,7 @@ script: } matrixPrevious = matrix; - $("#repeat").show(); + document.getElementById("repeat").style.display = "block"; setupHelper(matrix); } @@ -71,7 +70,8 @@ script: } async function pruneTheGrid() { - $pruneTheGrid.attr("disabled", "true"); + const pruneTheGrid = document.getElementById("step-by-step") as HTMLButtonElement; + pruneTheGrid.disabled = true; await tryCatch(() => Excel.run(async (context) => { const grid = context.workbook.worksheets @@ -84,11 +84,12 @@ script: await context.sync(); })); - $pruneTheGrid.removeAttr("disabled"); + pruneTheGrid.disabled = false; } async function allAtOnce() { - $allAtOnce.attr("disabled", "true"); + const allAtOnce = document.getElementById("all-at-once") as HTMLButtonElement; + allAtOnce.disabled = true; let counter = 0; await tryCatch(() => Excel.run(async (context) => { @@ -111,7 +112,7 @@ script: })); console.log("Count of iterations: " + counter); - $allAtOnce.removeAttr("disabled"); + allAtOnce.disabled = false; } diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 8e0f74ec5..f946e71c8 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -20,7 +20,7 @@ script: sheet.activate(); formatBackground(sheet); - const size = parseInt($("#size").val() as string); + const size = parseInt((document.getElementById("size") as HTMLInputElement).value); for (let i = 0; i < size; i++) { const width = size * 2 - 2 * i; @@ -45,7 +45,7 @@ script: sheet.activate(); formatBackground(sheet); - const size = Math.floor(parseInt($("#size").val() as string) / 2); + const size = Math.floor(parseInt((document.getElementById("size") as HTMLInputElement).value) / 2); for (let i = 0; i < size - 1; i++) { @@ -106,7 +106,7 @@ script: sheet.activate(); formatBackground(sheet); - const size = Math.floor(parseInt($("#size").val() as string) / 2); + const size = Math.floor(parseInt((document.getElementById("size") as HTMLInputElement).value) / 2); for (let i = 0; i < size; i++) { const range1 = sheet.getCell(2 * i + 1, 2 * i + 1).getResizedRange(size - i, size - i); diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 20b36299b..556180e9d 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -8,18 +8,17 @@ api_set: ExcelApi: '1.9' script: content: |- - $("#run").on("click", () => { - $("#setup").hide(); + document.getElementById("run").addEventListener("click", () => { + document.getElementById("setup").style.display = "none"; tryCatch(run); }); - - $("#selectedFile").on("change", () => tryCatch(readImageFromFile)); + document.getElementById("selectedFile").addEventListener("change", () => tryCatch(readImageFromFile)); document.getElementById("focusButton").addEventListener("click", () => tryCatch(focus)); let backgroundPicture = getDefaultBackgroundPicture(); function readImageFromFile() { - const myFile = document.getElementById("selectedFile"); + const myFile = document.getElementById("selectedFile") as HTMLInputElement; const reader = new FileReader(); reader.onload = (event) => { @@ -33,7 +32,7 @@ script: } function focus() { - $("#container").focus(); + document.getElementById("container").focus(); } async function run() { @@ -621,10 +620,12 @@ script: } } - await run($("#container")[0], $("#sessionPane")[0]); + const container = document.getElementById("container"); + const sessionPane = document.getElementById("sessionPane"); + await run(container, sessionPane); - $("#container").focus(); - $("#focus").show(); + container.focus(); + document.getElementById("focus").style.display = "block"; }); } @@ -633,7 +634,7 @@ script: try { await callback(); } catch (error) { - $("#setup").show(); + document.getElementById("setup").style.display = "block"; // Note: In a production add-in, you'd want to notify the user through your add-in's UI. console.error(error); } @@ -790,5 +791,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js \ No newline at end of file diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 0e1bc28f1..1b15c078c 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -11,15 +11,15 @@ script: document.getElementById("save").addEventListener("click", save); function get() { - const settingName = $("#settingName").val(); + const settingName = (document.getElementById("settingName") as HTMLInputElement).value; const settingValue = Office.context.roamingSettings.get(settingName); - $("#settingValue").val(settingValue); + (document.getElementById("settingValue") as HTMLInputElement).value = settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); } function set() { - const settingName = $("#settingName").val(); - const settingValue = $("#settingValue").val(); + const settingName = (document.getElementById("settingName") as HTMLInputElement).value; + const settingValue = (document.getElementById("settingValue") as HTMLInputElement).value; Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); } diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index 8cd1a84f4..4ebc0f45c 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -28,7 +28,7 @@ script: } function get() { - const propertyName = $("#get-property-name").val(); + const propertyName = (document.getElementById("get-property-name") as HTMLInputElement).value; const propertyValue = customProps.get(propertyName); console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); } @@ -45,14 +45,14 @@ script: } function set() { - const propertyName = $("#set-property-name").val(); - const propertyValue = $("#property-value").val(); + const propertyName = (document.getElementById("set-property-name") as HTMLInputElement).value; + const propertyValue = (document.getElementById("property-value") as HTMLInputElement).value; customProps.set(propertyName, propertyValue); console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); } function remove() { - const propertyName = $("#remove-property-name").val(); + const propertyName = (document.getElementById("remove-property-name") as HTMLInputElement).value; customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); } diff --git a/samples/outlook/20-item-body/append-text-on-send.yaml b/samples/outlook/20-item-body/append-text-on-send.yaml index b077e266a..b571b4332 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -11,7 +11,7 @@ script: function appendOnSend() { // This snippet appends text to the end of the message or appointment's body once it's sent. - const text = $("#text-field").val(); + const text = (document.getElementById("text-field") as HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the options.coercionType parameter of the appendOnSendAsync call. Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { diff --git a/samples/outlook/20-item-body/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml index 32cb1a236..92a893f35 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -11,7 +11,7 @@ script: function prependOnSend() { // This snippet prepends text to the beginning of the message or appointment's body once it's sent. - const text = $("#text-field").val().toString(); + const text = (document.getElementById("text-field") as HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the options.coercionType parameter of the prependOnSendAsync call. Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index eae94ef5a..43c3bbc13 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -14,7 +14,7 @@ script: When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val().toString(); + const text = (document.getElementById("text-field") as HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the options.coercionType parameter of the prependAsync call. Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index cdd8b6b04..6ee568518 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -14,7 +14,7 @@ script: If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val().toString(); + const text = (document.getElementById("text-field") as HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the options.coercionType parameter of the prependAsync call. Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml index 1847b5e2c..372652cfa 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -25,9 +25,7 @@ script: } function setBcc() { - const email = $("#emailBcc") - .val() - .toString(); + const email = (document.getElementById("emailBcc") as HTMLInputElement).value; const emailArray = [email]; Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml index a550e0b14..48b2b66a6 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -25,9 +25,7 @@ script: } function setCc() { - const email = $("#emailCc") - .val() - .toString(); + const email = (document.getElementById("emailCc") as HTMLInputElement).value; const emailArray = [email]; Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml index e8f961373..dcf2c48f8 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -31,9 +31,7 @@ script: } function setOptionalAttendees() { - const email = $("#emailOptional") - .val() - .toString(); + const email = (document.getElementById("emailOptional") as HTMLInputElement).value; const emailArray = [email]; Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml index c7deebc20..5773f7fc4 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -31,9 +31,7 @@ script: } function setRequiredAttendees() { - const email = $("#emailRequired") - .val() - .toString(); + const email = (document.getElementById("emailRequired") as HTMLInputElement).value; const emailArray = [email]; Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { diff --git a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml index 3164d9d20..8ff0b7f56 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -25,9 +25,7 @@ script: } function setTo() { - const email = $("#emailTo") - .val() - .toString(); + const email = (document.getElementById("emailTo") as HTMLInputElement).value; const emailArray = [email]; Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 4b1d1bc4c..84cdf8208 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -17,7 +17,7 @@ script: function addProgress() { // Adds a progress indicator to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as HTMLInputElement).value; const details = { type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, @@ -28,7 +28,7 @@ script: function addInformational() { // Adds an informational notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as HTMLInputElement).value; const details = { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, @@ -41,7 +41,7 @@ script: function addInformationalPersisted() { // Adds a persistent information notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as HTMLInputElement).value; const details = { type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, @@ -54,7 +54,7 @@ script: function addInsight() { // Adds an informational message with actions to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as HTMLInputElement).value; const itemId = Office.context.mailbox.item.itemId; const details = { @@ -77,7 +77,7 @@ script: function addError() { // Adds an error notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as HTMLInputElement).value; const details = { type: Office.MailboxEnums.ItemNotificationMessageType.ErrorMessage, @@ -100,7 +100,7 @@ script: function replace() { // Replaces a notification message of a given key with another message. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -114,7 +114,7 @@ script: function remove() { // Removes a notification message from the current mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); } diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index 5479fdea7..4896c2b54 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -12,9 +12,7 @@ script: document.getElementById("remove").addEventListener("click", remove); function add() { - const attachmentUrl = $("#attachmentUrl") - .val() - .toString(); + const attachmentUrl = (document.getElementById("attachmentUrl") as HTMLInputElement).value; Office.context.mailbox.item.addFileAttachmentAsync( attachmentUrl, getFileName(attachmentUrl), @@ -85,9 +83,7 @@ script: function remove() { Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId") - .val() - .toString(), + (document.getElementById("attachmentId") as HTMLInputElement).value, (result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.error(result.error.message); diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index eede487cd..c3e0b1e82 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -8,18 +8,18 @@ api_set: script: content: |- // Pre-populate with current item ID. - $("#itemId").val(Office.context.mailbox.item.itemId); + (document.getElementById("itemId") as HTMLInputElement).value = Office.context.mailbox.item.itemId; document.getElementById("run").addEventListener("click", run); document.getElementById("run-async").addEventListener("click", runAsync); function run() { - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as HTMLInputElement).value; Office.context.mailbox.displayAppointmentForm(itemId); } function runAsync() { - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as HTMLInputElement).value; // The async version will return error 9049 if the item is not found. // The async version is only available starting with requirement set 1.9. diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index 555f667b5..80e96c502 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -8,18 +8,18 @@ api_set: script: content: |- // Pre-populate with current item ID. - $("#itemId").val(Office.context.mailbox.item.itemId); + (document.getElementById("itemId") as HTMLInputElement).value = Office.context.mailbox.item.itemId; document.getElementById("run").addEventListener("click", run); document.getElementById("run-async").addEventListener("click", runAsync); function run() { - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as HTMLInputElement).value; Office.context.mailbox.displayMessageForm(itemId); } function runAsync() { - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as HTMLInputElement).value; // The async version will return error 9049 if the item is not found. // The async version is only available starting with requirement set 1.9. diff --git a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml index 8e8612592..3177c168b 100644 --- a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml +++ b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -53,7 +53,7 @@ script: function setSignature() { // Set the signature for the current item. - const signature = $("#signature").val(); + const signature = (document.getElementById("signature") as HTMLInputElement).value; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync(signature, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -73,7 +73,7 @@ script: { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - const signature = $("#signature").val() + ""; + const signature = (document.getElementById("signature") as HTMLInputElement).value + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, diff --git a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml index ea9d44c15..cdac8aa8d 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -13,9 +13,7 @@ script: function setDisplayedBody() { // This snippet temporarily sets the content displayed in the body of a message in read mode. // The set content will remain visible until the user switches to a different message in the Reading Pane or closes the window of the current message. - const bodyText = $("#body-text-field") - .val() - .toString(); + const bodyText = (document.getElementById("body-text-field") as HTMLInputElement).value; Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { console.log(`Action failed with error: ${asyncResult.error.message}`); @@ -29,9 +27,7 @@ script: function setDisplayedSubject() { // This snippet temporarily sets the content displayed in the subject field of a message in read mode. // The set content will remain visible until the user switches to a different message in the Reading Pane or closes the window of the current message. - const subjectText = $("#subject-text-field") - .val() - .toString(); + const subjectText = (document.getElementById("subject-text-field") as HTMLInputElement).value; Office.context.mailbox.item.display.subject.setAsync(subjectText, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { console.log(`Action failed with error: ${asyncResult.error.message}`); diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index 6011dfb8b..678eb64d7 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -8,14 +8,14 @@ api_set: script: content: |- document.getElementById("create-new-blank-presentation").addEventListener("click", () => tryCatch(createBlankPresentation)); - $("#file").on("change", () => tryCatch(createPresentationFromExisting)); + document.getElementById("file").addEventListener("change", () => tryCatch(createPresentationFromExisting)); function createBlankPresentation() { PowerPoint.createPresentation(); } function createPresentationFromExisting() { - const myFile = document.getElementById("file"); + const myFile = document.getElementById("file") as HTMLInputElement; const reader = new FileReader(); reader.onload = (event) => { diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index a42fb4a33..f0677e897 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -7,7 +7,7 @@ host: POWERPOINT api_set: {} script: content: |- - $('#insert').on("click", run); + document.getElementById('insert').addEventListener("click", run); function run() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { diff --git a/samples/powerpoint/images/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml index ced98b544..4cbc8c87c 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -7,7 +7,7 @@ host: POWERPOINT api_set: {} script: content: |- - $('#insert').on("click", newImage); + document.getElementById('insert').addEventListener("click", newImage); function newImage() { Office.context.document.setSelectedDataAsync(getImageAsBase64String(), { diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index ec3f02bef..e2883fb55 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -12,114 +12,144 @@ script: */ declare let moment: any; + document.getElementById("search").addEventListener("click", run); async function run() { Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, {}, getSelectedText); } - /* Extract selected text and call SearchWiki */ + /* Extract selected text and call SearchWiki. */ function getSelectedText(result) { - $("#result").empty(); - $("#result").append('
      '); + const resultElement = document.getElementById("result"); + if (resultElement) { + resultElement.innerHTML = ""; + const listElement = document.createElement("ul"); + listElement.className = "ms-List"; + listElement.id = "ms-List"; // Ensure the list has an ID for later reference + resultElement.appendChild(listElement); + } + if (result.status === Office.AsyncResultStatus.Succeeded) { searchWiki(result.value); } else { console.error(result.error.message); - } + } } - /* Searching Wiki */ - + /* Searching Wiki. */ function searchWiki(pattern) { - let url = build_wiki_search_url(pattern); + const url = build_wiki_search_url(pattern); fetch(url) - .then((response) => { - return response.json(); - }) + .then((response) => response.json()) .then((data) => { - $.each(data.query.search, function(i, val) { - let date = moment(val.timestamp).format("YYYY-MM-DD hh:mm A"); - let listItem = build_list_item(val.title, val.pageid, val.snippet, date); - $(".ms-List").append(listItem); + data.query.search.forEach((val) => { + const date = moment(val.timestamp).format("YYYY-MM-DD hh:mm A"); + const listItem = build_list_item(val.title, val.pageid, val.snippet, date); + const listElement = document.getElementById("ms-List"); + if (listElement) { + const tempDiv = document.createElement("div"); + tempDiv.innerHTML = listItem; + const listItemNode = tempDiv.firstElementChild; + if (listItemNode) { + listElement.appendChild(listItemNode); + } + } }); + return data.query; }) - .then(function(data) { - $(".ms-ListItem").each(function(i, item) { - if ($(this).find(".listItem-link a").length === 0) { - getWikiLink($(this).data("pageid"), $(this)); + .then((data) => { + const listItems = document.querySelectorAll(".ms-ListItem"); + listItems.forEach((item) => { + const link = item.querySelector(".listItem-link a"); + if (!link || link.innerHTML.length === 0) { + const pageId = item instanceof HTMLElement ? item.dataset.pageid : undefined; + if (pageId) { + getWikiLink(pageId, item); + } } }); - }); + }) + .catch((error) => console.error("Error fetching Wikipedia data:", error)); } - // Search for Wiki Page link based on the given pageId - // Update itemHTML from the returned result - + // Search for Wiki Page link based on the given pageId. + // Update itemHTML from the returned result. function getWikiLink(pageid, itemHTML) { - let pageinfo = build_wiki_pageinfo(pageid); + const pageinfo = build_wiki_pageinfo(pageid); fetch(pageinfo) - .then((response) => { - return response.json(); - }) + .then((response) => response.json()) .then((data) => { - let itemUrl = data.query.pages[pageid].fullurl; - let images = data.query.pages[pageid].images; - let title = $(itemHTML) - .find(".listItem-link") - .html(); - $(itemHTML) - .find(".listItem-link") - .html('' + title + ""); - if (typeof images !== "undefined") { - $(itemHTML) - .find(".ms-ListItem-image") - .attr("data-image", images[0].title); + const itemUrl = data.query.pages[pageid].fullurl; + const images = data.query.pages[pageid].images; + const titleElement = itemHTML.querySelector(".listItem-link"); + const title = titleElement ? titleElement.innerHTML : ""; + + if (titleElement && itemUrl) { + titleElement.innerHTML = `${title}`; + } + + if (images && images.length > 0) { + const imageElement = itemHTML.querySelector(".ms-ListItem-image"); + if (imageElement) { + imageElement.setAttribute("data-image", images[0].title); + } } }) - .then((data) => { + .then(() => { getWikiImages(pageid, itemHTML); - }); + }) + .catch((error) => console.error("Error fetching Wiki link:", error)); } - // Search for Wiki image based on the given pageId, first image - // Update itemHTML from the returned result - + // Search for Wiki image based on the given pageId, first image. + // Update itemHTML from the returned result. function getWikiImages(pageid, itemHTML) { - let pageInfo = build_wiki_image_search(pageid); + const pageInfo = build_wiki_image_search(pageid); fetch(pageInfo) - .then((response) => { - return response.json(); - }) + .then((response) => response.json()) .then(async (data) => { - if (typeof data.query.pages[pageid].original !== "undefined") { - let img = data.query.pages[pageid].original.source; - $(itemHTML) - .find(".ms-ListItem-image") - .append(''); - return true; + const pageData = data.query.pages[pageid]; + if (pageData && pageData.original && pageData.original.source) { + const originalImage = pageData.original.source; + const imageElement = itemHTML.querySelector(".ms-ListItem-image"); + + if (originalImage && imageElement) { + const imgElement = document.createElement("img"); + imgElement.width = 70; // Set the width to 70px. + imgElement.src = originalImage; + imageElement.appendChild(imgElement); + return true; + } } else { - let img = $(itemHTML) - .find(".ms-ListItem-image") - .data("image"); - pageInfo = build_wiki_file_search(img); - let pageInfoResult = await fetch(pageInfo); - return pageInfoResult.json(); + const imageElement = itemHTML.querySelector(".ms-ListItem-image"); + const img = imageElement ? imageElement.dataset.image : undefined; + if (img) { + const pageInfoResult = await fetch(build_wiki_file_search(img)); + return pageInfoResult.json(); + } } }) .then((data) => { - if (typeof data.query !== "undefined") { - let key = Object.keys(data.query.pages)[0]; - if (data.query.pages[key].title !== "Undefined") { - let img = data.query.pages[key].thumbnail.source; - $(itemHTML) - .find(".ms-ListItem-image") - .append(''); + if (data && data.query) { + const key = Object.keys(data.query.pages)[0]; + const page = data.query.pages[key]; + if (page && page.thumbnail && page.thumbnail.source) { + const thumbnail = page.thumbnail.source; + const imageElement = itemHTML.querySelector(".ms-ListItem-image"); + + if (thumbnail && imageElement) { + const imgElement = document.createElement("img"); + imgElement.width = 70; // Set the width to 70px. + imgElement.src = thumbnail; + imageElement.appendChild(imgElement); + } } } - }); + }) + .catch((error) => console.error("Error fetching Wiki images:", error)); } /* Wikipedia API query */ @@ -131,52 +161,45 @@ script: /* Wikipedia Search Query pattern */ function build_wiki_search_url(pattern) { - let qry = "pageimages&list=search&srsearch="; + const qry = "pageimages&list=search&srsearch="; return wiki_base(qry + pattern); } /* Wikipedia Image Query pattern */ function build_wiki_image_search(pattern) { - let qry = "pageimages&piprop=original&pilicense=any&pageids="; + const qry = "pageimages&piprop=original&pilicense=any&pageids="; return wiki_base(qry + pattern); } /* Wikipedia File Query pattern */ function build_wiki_file_search(pattern) { - let qry = "pageimages|pageterms&pilicense=any&titles="; + const qry = "pageimages|pageterms&pilicense=any&titles="; return wiki_base(qry + pattern); } /* Wikipedia Page Info Query pattern */ function build_wiki_pageinfo(pattern) { - let qry = "info|images&inprop=url&pageids="; + const qry = "info|images&inprop=url&pageids="; return wiki_base(qry + pattern); } /* Render */ function build_list_item(title, pageid, summary, ts) { - return ( - '
    • ' + - '
      ' + - '' + - title + - "" + - "" + - summary + - "" + - '
      ' + - '
      ' + - '
      ' + - ' ' + - "
      " + - '
      ' + - ' ' + - "
      " + - "
      " + - "
    • " - ); + return ` +
    • +
      + ${title} + ${summary} +
      +
      +
      + +
      +
      + +
      +
      +
    • `; } language: typescript template: @@ -225,5 +248,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js \ No newline at end of file diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 3a6dc8d9f..6d472a567 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -31,8 +31,9 @@ script: finalTable += "" + index + "" + shape.id + ""; }); finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = ""; + outputSpan.innerHTML += finalTable; }); } @@ -134,8 +135,13 @@ script: rectangle.fill.foregroundColor = generateRandomHexColor(); } finalTable += "Done
      "; - $("#slide-tags").empty(); - $("#slide-tags").append(finalTable); + const slideTags = document.getElementById("slide-tags"); + if (slideTags) { + slideTags.innerHTML = ""; + slideTags.innerHTML += finalTable; + } else { + console.warn('Element with ID "slide-tags" not found.'); + } }); } diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 74e68bd1e..8a4027b13 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -11,8 +11,8 @@ script: document.getElementById("add-slide").addEventListener("click", () => tryCatch(addSlide)); async function addSlide() { - const chosenMaster = $("#master-id").val() as string; - const chosenLayout = $("#layout-id").val() as string; + const chosenMaster = (document.getElementById("master-id") as HTMLInputElement).value; + const chosenLayout = (document.getElementById("layout-id") as HTMLInputElement).value; await PowerPoint.run(async function(context) { // Create a new slide using an existing master slide and layout. diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index d797ed57b..b4a63000f 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -28,9 +28,11 @@ script: allSlidesList[slide.id] = `Slide ${index + 1}`; }); - if ($("#id-check-usenative").is(":checked")) { + const checkbox = document.getElementById("id-check-usenative") as HTMLInputElement; + if (checkbox && checkbox.checked) { context.presentation.load("tags"); } + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); @@ -42,8 +44,9 @@ script: finalTable += "" + index + " - " + allSlidesList[slide.id] + "" + slide.id + ""; }); finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = "" + outputSpan.innerHTML += finalTable; }); } async function deleteSlides() { @@ -105,8 +108,9 @@ script: savedSlideSelection.push(slide.id); }); finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = "" + outputSpan.innerHTML += finalTable; }); } diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index d247a007a..5ce708484 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -9,7 +9,7 @@ script: content: |- document.getElementById("insert-all-slides").addEventListener("click", () => tryCatch(insertAllSlides)); document.getElementById("insert-after-target-slide").addEventListener("click", () => tryCatch(insertAfterSelectedSlide)); - $("#file").on("change", () => tryCatch(storeFileAsBase64)); + document.getElementById("file").addEventListener("change", () => tryCatch(storeFileAsBase64)); let chosenFileBase64; diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index 2cfed52fb..b7391c145 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -44,8 +44,9 @@ script: finalTable += "Start" + textRange.start + ""; finalTable += "Length" + textRange.length + ""; finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = "" + outputSpan.innerHTML += finalTable; }); } diff --git a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml index a0fee9f6f..734cdc388 100644 --- a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -29,10 +29,7 @@ script: async function addItemToComboBoxContentControl() { // Adds the provided list item to the first combo box content control in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-add") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-add") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -99,10 +96,7 @@ script: async function deleteItemFromComboBoxContentControl() { // Deletes the provided list item from the first combo box content control in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-delete") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-delete") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ diff --git a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml index 36532629e..d18f95f5d 100644 --- a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -29,10 +29,7 @@ script: async function addItemToDropdownListContentControl() { // Adds the provided list item to the first dropdown list content control in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-add") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-add") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -99,10 +96,7 @@ script: async function deleteItemFromDropdownListContentControl() { // Deletes the provided list item from the first dropdown list content control in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-delete") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-delete") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ diff --git a/samples/word/20-lists/manage-list-styles.yaml b/samples/word/20-lists/manage-list-styles.yaml index 99e7eab68..915b657f9 100644 --- a/samples/word/20-lists/manage-list-styles.yaml +++ b/samples/word/20-lists/manage-list-styles.yaml @@ -32,7 +32,7 @@ script: async function getProperties() { // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index 170cee03f..e7f3d34c9 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -32,7 +32,7 @@ script: async function getParagraphById() { await Word.run(async (context) => { - const paragraphId = $("#paragraph-id").val() as string; + const paragraphId = (document.getElementById("paragraph-id") as HTMLInputElement).value; const paragraph: Word.Paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); paragraph.load(); await paragraph.context.sync(); diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index c6cccd41d..1b0cd1dd2 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -32,7 +32,7 @@ script: async function getParagraphById() { await Word.run(async (context) => { - const paragraphId = $("#paragraph-id").val() as string; + const paragraphId = (document.getElementById("paragraph-id") as HTMLInputElement).value; const paragraph: Word.Paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); paragraph.load(); await paragraph.context.sync(); diff --git a/samples/word/40-tables/manage-custom-style.yaml b/samples/word/40-tables/manage-custom-style.yaml index 866087b30..4968defdb 100644 --- a/samples/word/40-tables/manage-custom-style.yaml +++ b/samples/word/40-tables/manage-custom-style.yaml @@ -22,7 +22,7 @@ script: async function addStyle() { // Adds a new table style. - const newStyleName = $("#new-style-name").val() as string; + const newStyleName = (document.getElementById("new-style-name") as HTMLInputElement).value; if (newStyleName == "") { console.warn("Enter a style name to add."); return; @@ -49,7 +49,7 @@ script: async function applyStyle() { // Applies the specified style to a new table. - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to apply."); return; @@ -83,9 +83,7 @@ script: async function getTableStyle() { // Gets the table style properties and displays them in the form. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; @@ -102,30 +100,26 @@ script: } console.log(tableStyle); - $("#alignment").val(tableStyle.alignment); - $("#allow-break-across-page").val(tableStyle.allowBreakAcrossPage.toString()); - $("#top-cell-margin").val(tableStyle.topCellMargin); - $("#bottom-cell-margin").val(tableStyle.bottomCellMargin); - $("#left-cell-margin").val(tableStyle.leftCellMargin); - $("#right-cell-margin").val(tableStyle.rightCellMargin); - $("#cell-spacing").val(tableStyle.cellSpacing); + (document.getElementById("alignment") as HTMLInputElement).value = tableStyle.alignment; + (document.getElementById("allow-break-across-page") as HTMLInputElement).value = tableStyle.allowBreakAcrossPage.toString(); + (document.getElementById("top-cell-margin") as HTMLInputElement).value = tableStyle.topCellMargin; + (document.getElementById("bottom-cell-margin") as HTMLInputElement).value = tableStyle.bottomCellMargin; + (document.getElementById("left-cell-margin") as HTMLInputElement).value = tableStyle.leftCellMargin; + (document.getElementById("right-cell-margin") as HTMLInputElement).value = tableStyle.rightCellMargin; + (document.getElementById("cell-spacing") as HTMLInputElement).value = tableStyle.cellSpacing; }); } async function setAlignment() { // Sets the table alignment. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; } await Word.run(async (context) => { - const alignment = $("#alignment") - .val() - .toString(); + const alignment = (document.getElementById("alignment") as HTMLInputElement).value; const tableStyle: Word.TableStyle = context.document.getStyles().getByName(styleName).tableStyle; tableStyle.alignment = alignment as Word.Alignment; await context.sync(); @@ -138,16 +132,14 @@ script: async function setAllowBreakAcrossPage() { // Sets the allowBreakAcrossPage property. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; } await Word.run(async (context) => { - const allowBreakAcrossPage = $("#allow-break-across-page").val() as string; + const allowBreakAcrossPage = (document.getElementById("allow-break-across-page") as HTMLInputElement).value; const tableStyle: Word.TableStyle = context.document.getStyles().getByName(styleName).tableStyle; tableStyle.allowBreakAcrossPage = allowBreakAcrossPage === "true"; await context.sync(); @@ -160,20 +152,14 @@ script: async function setTopCellMargin() { // Sets the top cell margin. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; } await Word.run(async (context) => { - const topCellMargin = Number( - $("#top-cell-margin") - .val() - .toString() - ); + const topCellMargin = Number((document.getElementById("top-cell-margin") as HTMLInputElement).value); const tableStyle: Word.TableStyle = context.document.getStyles().getByName(styleName).tableStyle; tableStyle.topCellMargin = topCellMargin; await context.sync(); @@ -186,20 +172,14 @@ script: async function setBottomCellMargin() { // Sets the bottom cell margin. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; } await Word.run(async (context) => { - const bottomCellMargin = Number( - $("#bottom-cell-margin") - .val() - .toString() - ); + const bottomCellMargin = Number((document.getElementById("bottom-cell-margin") as HTMLInputElement).value); const tableStyle: Word.TableStyle = context.document.getStyles().getByName(styleName).tableStyle; tableStyle.bottomCellMargin = bottomCellMargin; await context.sync(); @@ -212,20 +192,14 @@ script: async function setLeftCellMargin() { // Sets the left cell margin. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; } await Word.run(async (context) => { - const leftCellMargin = Number( - $("#left-cell-margin") - .val() - .toString() - ); + const leftCellMargin = Number((document.getElementById("left-cell-margin") as HTMLInputElement).value); const tableStyle: Word.TableStyle = context.document.getStyles().getByName(styleName).tableStyle; tableStyle.leftCellMargin = leftCellMargin; await context.sync(); @@ -238,20 +212,14 @@ script: async function setRightCellMargin() { // Sets the right cell margin. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; } await Word.run(async (context) => { - const rightCellMargin = Number( - $("#right-cell-margin") - .val() - .toString() - ); + const rightCellMargin = Number((document.getElementById("right-cell-margin") as HTMLInputElement).value); const tableStyle: Word.TableStyle = context.document.getStyles().getByName(styleName).tableStyle; tableStyle.rightCellMargin = rightCellMargin; await context.sync(); @@ -264,20 +232,14 @@ script: async function setCellSpacing() { // Sets the cell spacing. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Please input a table style name."); return; } await Word.run(async (context) => { - const cellSpacing = Number( - $("#cell-spacing") - .val() - .toString() - ); + const cellSpacing = Number((document.getElementById("cell-spacing") as HTMLInputElement).value); const tableStyle: Word.TableStyle = context.document.getStyles().getByName(styleName).tableStyle; tableStyle.cellSpacing = cellSpacing; await context.sync(); @@ -290,7 +252,7 @@ script: async function deleteStyle() { // Deletes the custom style. - const styleName = $("#style-name-to-delete").val() as string; + const styleName = (document.getElementById("style-name-to-delete") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to delete."); return; diff --git a/samples/word/50-document/compare-documents.yaml b/samples/word/50-document/compare-documents.yaml index 5d5d3afaf..988b3488c 100644 --- a/samples/word/50-document/compare-documents.yaml +++ b/samples/word/50-document/compare-documents.yaml @@ -14,9 +14,7 @@ script: // Compares the current document with a specified external document. await Word.run(async (context) => { // Absolute path of an online or local document. - const filePath = $("#filePath") - .val() - .toString(); + const filePath = (document.getElementById("filePath") as HTMLInputElement).value; // Options that configure the compare operation. const options: Word.DocumentCompareOptions = { compareTarget: Word.CompareTarget.compareTargetCurrent, diff --git a/samples/word/50-document/get-external-styles.yaml b/samples/word/50-document/get-external-styles.yaml index 41677d3c8..63fad088e 100644 --- a/samples/word/50-document/get-external-styles.yaml +++ b/samples/word/50-document/get-external-styles.yaml @@ -7,7 +7,7 @@ api_set: WordApi: '1.5' script: content: |- - $("#file").on("change", getBase64); + document.getElementById("file").addEventListener("change", getBase64); document.getElementById("get-external-styles").addEventListener("click", () => tryCatch(getExternalStyles)); let externalDocument; @@ -24,7 +24,7 @@ script: function getBase64() { // Retrieve the file and set up an HTML FileReader element. - const myFile = document.getElementById("file"); + const myFile = document.getElementById("file") as HTMLInputElement; const reader = new FileReader(); reader.onload = (event) => { diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 2c8f00b6e..7e374a5f1 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -7,7 +7,7 @@ api_set: WordApi: '1.7' script: content: |- - $("#file").on("change", getBase64); + document.getElementById("file").addEventListener("change", getBase64); document.getElementById("insert-document").addEventListener("click", () => tryCatch(insertDocument)); document.getElementById("insert-document-with-settings").addEventListener("click", () => tryCatch(insertDocumentWithSettings)); @@ -57,7 +57,7 @@ script: function getBase64() { // Retrieve the file and set up an HTML FileReader element. - const myFile = document.getElementById("file"); + const myFile = document.getElementById("file") as HTMLInputElement; const reader = new FileReader(); reader.onload = (event) => { diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index 6f83be49a..18b7b14cd 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -14,7 +14,7 @@ script: document.getElementById("get-text").addEventListener("click", () => tryCatch(getText)); document.getElementById("insert-content-control").addEventListener("click", () => tryCatch(insertContentControl)); document.getElementById("insert-page-break").addEventListener("click", () => tryCatch(insertPageBreak)); - $("#file").on("change", getBase64); + document.getElementById("file").addEventListener("change", getBase64); document.getElementById("insert-external-body").addEventListener("click", () => tryCatch(insertExternalBody)); document.getElementById("insert-html").addEventListener("click", () => tryCatch(insertHTML)); document.getElementById("insert-image-inline").addEventListener("click", () => tryCatch(insertImageInline)); @@ -142,7 +142,7 @@ script: function getBase64() { // Retrieve the file and set up an HTML FileReader element. - const myFile = document.getElementById("file"); + const myFile = document.getElementById("file") as HTMLInputElement; const reader = new FileReader(); reader.onload = (event) => { diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 20fc5eadf..e26519071 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -32,7 +32,7 @@ script: async function setChangeTrackingMode() { // Sets the change tracking mode. await Word.run(async (context) => { - const mode = $("input[name='mode']:checked").val(); + const mode = (document.querySelector("input[name='mode']:checked") as HTMLInputElement).value; if (mode === "Track only my changes") { context.document.changeTrackingMode = Word.ChangeTrackingMode.trackMineOnly; } else if (mode === "Track everyone's changes") { diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 7593ebb46..420e05e77 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -21,9 +21,7 @@ script: async function insertComment() { // Sets a comment on the selected content. await Word.run(async (context) => { - const text = $("#comment-text") - .val() - .toString(); + const text = (document.getElementById("comment-text") as HTMLInputElement).value; const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. @@ -37,9 +35,7 @@ script: async function editFirstCommentInSelection() { // Edits the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#edit-comment-text") - .val() - .toString(); + const text = (document.getElementById("edit-comment-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -63,9 +59,7 @@ script: async function replyToFirstActiveCommentInSelection() { // Replies to the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#reply-text") - .val() - .toString(); + const text = (document.getElementById("reply-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 89ece99b7..b5ff910aa 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -21,9 +21,7 @@ script: async function insertFootnote() { // Sets a footnote on the selected content. await Word.run(async (context) => { - const text = $("#input-footnote") - .val() - .toString(); + const text = (document.getElementById("input-footnote") as HTMLInputElement).value; const footnote: Word.NoteItem = context.document.getSelection().insertFootnote(text); await context.sync(); @@ -37,7 +35,7 @@ script: footnotes.load("items/reference"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const item: Word.NoteItem = footnotes.items[mark]; const reference: Word.Range = item.reference; @@ -54,7 +52,7 @@ script: footnotes.load("items"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const item: Word.NoteItem = footnotes.items[mark]; console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); @@ -72,7 +70,7 @@ script: footnotes.load("items/body"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const footnoteBody: Word.Range = footnotes.items[mark].body.getRange(); footnoteBody.load("text"); @@ -88,7 +86,7 @@ script: footnotes.load("items/reference"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const reference: Word.Range = footnotes.items[mark].getNext().reference; reference.select(); @@ -102,7 +100,7 @@ script: footnotes.load("items"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; footnotes.items[mark].delete(); await context.sync(); diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index b80adc658..bdb6df93b 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -15,19 +15,13 @@ script: // Adds a new custom setting or // edits the value of an existing one. await Word.run(async (context) => { - const key = $("#key") - .val() - .toString(); - + const key = (document.getElementById("key") as HTMLInputElement).value; if (key == "") { console.error("Key shouldn't be empty."); return; } - const value = $("#value") - .val() - .toString(); - + const value = (document.getElementById("value") as HTMLInputElement).value; const settings: Word.SettingCollection = context.document.settings; const setting: Word.Setting = settings.add(key, value); setting.load(); diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index f798edc85..3549dee24 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -31,7 +31,7 @@ script: async function addStyle() { // Adds a new style. await Word.run(async (context) => { - const newStyleName = $("#new-style-name").val() as string; + const newStyleName = (document.getElementById("new-style-name") as HTMLInputElement).value; if (newStyleName == "") { console.warn("Enter a style name to add."); return; @@ -48,7 +48,7 @@ script: return; } - const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; + const newStyleType = ((document.getElementById("new-style-type") as HTMLSelectElement).value as unknown) as Word.StyleType; context.document.addStyle(newStyleName, newStyleType); await context.sync(); @@ -59,7 +59,7 @@ script: async function getProperties() { // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; @@ -84,7 +84,7 @@ script: async function applyStyle() { // Applies the specified style to a paragraph. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to apply."); return; @@ -115,7 +115,7 @@ script: async function setFontProperties() { // Updates font properties (e.g., color, size) of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update font properties."); return; @@ -139,7 +139,7 @@ script: async function setParagraphFormat() { // Sets certain aspects of the specified style's paragraph format e.g., the left indent size and the alignment. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update its paragraph format."); return; @@ -162,7 +162,7 @@ script: async function setBorderProperties() { // Updates border properties (e.g., type, width, color) of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -190,7 +190,7 @@ script: async function setShadingProperties() { // Updates shading properties (e.g., texture, pattern colors) of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update shading properties."); return; @@ -219,7 +219,7 @@ script: async function deleteStyle() { // Deletes the custom style. await Word.run(async (context) => { - const styleName = $("#style-name-to-delete").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to delete."); return; diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index be15a868d..41381c638 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -18,9 +18,7 @@ script: // Saves the document with the provided file name // if it hasn't been saved before. await Word.run(async (context) => { - const text = $("#fileName-text") - .val() - .toString(); + const text = (document.getElementById("fileName-text") as HTMLInputElement).value; context.document.save(Word.SaveBehavior.save, text); await context.sync(); }); diff --git a/samples/word/90-scenarios/correlated-objects-pattern.yaml b/samples/word/90-scenarios/correlated-objects-pattern.yaml index 5200d349a..a28f29013 100644 --- a/samples/word/90-scenarios/correlated-objects-pattern.yaml +++ b/samples/word/90-scenarios/correlated-objects-pattern.yaml @@ -8,7 +8,10 @@ api_set: WordApi: '1.4' script: content: |- - document.getElementById("replace-placeholders").on("click", () => tryCatch(replacePlaceholders)); $("#replace-placeholders-slow").on("click", () => tryCatch(replacePlaceholdersSlow)); $("#setup").on("click", () => tryCatch(setup)); $("#add-lots-of-text").addEventListener("click", () => tryCatch(addLotsOfText)); + document.getElementById("replace-placeholders").addEventListener("click", () => tryCatch(replacePlaceholders)); + document.getElementById("replace-placeholders-slow").addEventListener("click", () => tryCatch(replacePlaceholdersSlow)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-lots-of-text").addEventListener("click", () => tryCatch(addLotsOfText)); const jobMapping = [ { job: "{Coordinator}", person: "Sally" }, { job: "{Deputy}", person: "Bob" }, diff --git a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml index d74455158..96f9e8905 100644 --- a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml +++ b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -74,7 +74,7 @@ script: async function setState() { // Sets the state of the first content control. await Word.run(async (context) => { - const state = ($("#state-to-set").val() as unknown) as Word.ContentControlState; + const state = ((document.getElementById("state-to-set") as HTMLSelectElement).value as unknown) as Word.ContentControlState; let firstContentControl = context.document.contentControls.getFirstOrNullObject(); await context.sync(); diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index 679effec6..cae554af5 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -42,9 +42,7 @@ script: async function insertComment() { // Sets a comment on the selected content. await Word.run(async (context) => { - const text = $("#comment-text") - .val() - .toString(); + const text = (document.getElementById("comment-text") as HTMLInputElement).value; const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. @@ -58,9 +56,7 @@ script: async function editFirstCommentInSelection() { // Edits the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#edit-comment-text") - .val() - .toString(); + const text = (document.getElementById("edit-comment-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -84,9 +80,7 @@ script: async function replyToFirstActiveCommentInSelection() { // Replies to the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#reply-text") - .val() - .toString(); + const text = (document.getElementById("reply-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 07dbe8d11..0ce86d48e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2257,7 +2257,9 @@ await context.sync(); - $(".conditional-formats").hide(); + document.querySelectorAll(".conditional-formats").forEach(element => { + element.style.display = "none"; + }); }); 'Excel.ConditionalFormatCollection#getItemAt:member(1)': - >- @@ -2772,8 +2774,8 @@ await Excel.run(async (context) => { // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); + const userKey = document.getElementById("key").textContent; + const userValue = document.getElementById("value").textContent; // Add the custom property. const customDocProperties = context.workbook.properties.custom; @@ -2803,14 +2805,14 @@ await context.sync(); if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + document.getElementById("display-xml").textContent = `The XML part with the id ${xmlPartIDSetting.value} has been deleted.`; // Delete the unneeded setting too. xmlPartIDSetting.delete(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} has not been deleted:\n${readableXml}` - $("#display-xml").text(strangeMessage); + document.getElementById("display-xml").textContent = strangeMessage; } await context.sync(); @@ -2833,7 +2835,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; // Store the XML part's ID in a setting. const settings = context.workbook.settings; @@ -2858,7 +2860,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; // Store the XML part's ID in a setting. const settings = context.workbook.settings; @@ -2887,7 +2889,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; await context.sync(); } }); @@ -2908,7 +2910,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; // Store the XML part's ID in a setting. const settings = context.workbook.settings; @@ -2923,7 +2925,7 @@ await Excel.run(async (context) => { - $("#display-xml").text(""); + document.getElementById("display-xml").textContent = ""; const contosoNamespace = "http://schemas.contoso.com/review/1.0"; const customXmlParts = context.workbook.customXmlParts; const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); @@ -2940,8 +2942,8 @@ // Make it a bit more readable. const readableXml = xmlBlob.value.replace(/>\n<"); - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: + ${readableXml}`; } else { console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); @@ -2970,7 +2972,7 @@ await context.sync(); const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + document.getElementById("display-xml").textContent = readableXml; await context.sync(); } }); @@ -2981,7 +2983,7 @@ await Excel.run(async (context) => { - $("#display-xml").text(""); + document.getElementById("display-xml").textContent = ""; const contosoNamespace = "http://schemas.contoso.com/review/1.0"; const customXmlParts = context.workbook.customXmlParts; const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); @@ -2998,8 +3000,8 @@ // Make it a bit more readable. const readableXml = xmlBlob.value.replace(/>\n<"); - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: + ${readableXml}`; } else { console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); @@ -3027,14 +3029,14 @@ await context.sync(); if (customXmlPart.isNullObject) { - $("#display-xml").text(`The XML part with the id ${xmlPartIDSetting.value} has been deleted.`); + document.getElementById("display-xml").textContent = `The XML part with the id ${xmlPartIDSetting.value} has been deleted.`; // Delete the unneeded setting too. xmlPartIDSetting.delete(); } else { const readableXml = addLineBreaksToXML(xmlBlob.value); const strangeMessage = `This is strange. The XML part with the id ${xmlPartIDSetting.value} has not been deleted:\n${readableXml}` - $("#display-xml").text(strangeMessage); + document.getElementById("display-xml").textContent = strangeMessage; } await context.sync(); @@ -3047,7 +3049,7 @@ await Excel.run(async (context) => { - $("#display-xml").text(""); + document.getElementById("display-xml").textContent = ""; const contosoNamespace = "http://schemas.contoso.com/review/1.0"; const customXmlParts = context.workbook.customXmlParts; const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); @@ -3064,8 +3066,8 @@ // Make it a bit more readable. const readableXml = xmlBlob.value.replace(/>\n<"); - $("#display-xml").text(`The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`); + document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: + ${readableXml}`; } else { console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); @@ -4931,7 +4933,8 @@ // NOTE: If no match is found, an ItemNotFound error // is thrown when Range.find is evaluated. - const foundRange = searchRange.find($("#searchText").val().toString(), { + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.find(searchText, { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle @@ -4953,7 +4956,8 @@ const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); const searchRange = table.getRange(); - const foundRange = searchRange.findOrNullObject($("#searchText").val().toString(), { + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.findOrNullObject(searchText, { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle @@ -6343,7 +6347,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml - const myFile = document.getElementById("selectedFile"); + const myFile = document.getElementById("selectedFile") as HTMLInputElement; const reader = new FileReader(); @@ -7051,8 +7055,8 @@ await Excel.run(async (context) => { // Retrieve image data from the task pane and then clear the input fields. - const imageUrl = $("#url").val() as string; - const imageAltText = $("#alt-text").val() as string; + const imageUrl = (document.getElementById("url") as HTMLInputElement).value; + const imageAltText = (document.getElementById("alt-text") as HTMLInputElement).value; clearForm(); // Load the active cell. @@ -7123,7 +7127,7 @@ // Retrieve the file and set up an HTML FileReader element. - const myFile = document.getElementById("file"); + const myFile = document.getElementById("file") as HTMLInputElement; const reader = new FileReader(); @@ -7903,8 +7907,8 @@ await Excel.run(async (context) => { // Get the key/value pair from the task pane. - const userKey = $("#key").text(); - const userValue = $("#value").text(); + const userKey = document.getElementById("key").textContent; + const userValue = document.getElementById("value").textContent; // Add the custom property. const customWorksheetProperties = context.workbook.worksheets.getActiveWorksheet().customProperties; @@ -8124,9 +8128,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - const attachmentUrl = $("#attachmentUrl") - .val() - .toString(); + const attachmentUrl = (document.getElementById("attachmentUrl") as + HTMLInputElement).value; + Office.context.mailbox.item.addFileAttachmentAsync( attachmentUrl, getFileName(attachmentUrl), @@ -8167,7 +8171,7 @@ { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - const signature = $("#signature").val() + ""; + const signature = (document.getElementById("signature") as HTMLInputElement).value + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, @@ -8617,7 +8621,8 @@ // Adds a progress indicator to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -8633,7 +8638,8 @@ // Adds an informational notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -8651,7 +8657,8 @@ // Adds a persistent information notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -8686,7 +8693,8 @@ // Replaces a notification message of a given key with another message. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -8704,7 +8712,8 @@ // Removes a notification message from the current mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -8737,9 +8746,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml - const email = $("#emailOptional") - .val() - .toString(); + const email = (document.getElementById("emailOptional") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, @@ -8840,9 +8849,7 @@ Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId") - .val() - .toString(), + (document.getElementById("attachmentId") as HTMLInputElement).value, (result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.error(result.error.message); @@ -8881,9 +8888,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml - const email = $("#emailRequired") - .val() - .toString(); + const email = (document.getElementById("emailRequired") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, @@ -9566,7 +9573,8 @@ // Adds a progress indicator to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -9582,7 +9590,8 @@ // Adds an informational notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -9600,7 +9609,8 @@ // Adds a persistent information notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -9635,7 +9645,8 @@ // Replaces a notification message of a given key with another message. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -9653,7 +9664,8 @@ // Removes a notification message from the current mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -9817,7 +9829,8 @@ // This snippet appends text to the end of the message or appointment's body once it's sent. - const text = $("#text-field").val(); + const text = (document.getElementById("text-field") as + HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the @@ -9904,7 +9917,8 @@ When prepending a link in HTML markup to the body, you can disable the online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val().toString(); + const text = (document.getElementById("text-field") as + HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the @@ -9935,7 +9949,8 @@ // This snippet prepends text to the beginning of the message or appointment's body once it's sent. - const text = $("#text-field").val().toString(); + const text = (document.getElementById("text-field") as + HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the @@ -10005,7 +10020,8 @@ If you want to use a link in HTML markup as a value of the setSelectedDataAsync call's data parameter, you can disable online link preview by setting the anchor tag's id attribute to "LPNoLP". For example, 'Click here!'. */ - const text = $("#text-field").val().toString(); + const text = (document.getElementById("text-field") as + HTMLInputElement).value; // It's recommended to call getTypeAsync and pass its returned value to the @@ -10044,7 +10060,7 @@ { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - const signature = $("#signature").val() + ""; + const signature = (document.getElementById("signature") as HTMLInputElement).value + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, @@ -10065,7 +10081,8 @@ // Set the signature for the current item. - const signature = $("#signature").val(); + const signature = (document.getElementById("signature") as + HTMLInputElement).value; console.log(`Setting signature to "${signature}".`); @@ -10159,7 +10176,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#get-property-name").val(); + const propertyName = (document.getElementById("get-property-name") as + HTMLInputElement).value; const propertyValue = customProps.get(propertyName); @@ -10187,7 +10205,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#remove-property-name").val(); + const propertyName = (document.getElementById("remove-property-name") as + HTMLInputElement).value; customProps.remove(propertyName); @@ -10212,9 +10231,11 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - const propertyName = $("#set-property-name").val(); + const propertyName = (document.getElementById("set-property-name") as + HTMLInputElement).value; - const propertyValue = $("#property-value").val(); + const propertyValue = (document.getElementById("property-value") as + HTMLInputElement).value; customProps.set(propertyName, propertyValue); @@ -10312,9 +10333,9 @@ different message in the Reading Pane or closes the window of the current message. - const bodyText = $("#body-text-field") - .val() - .toString(); + const bodyText = (document.getElementById("body-text-field") as + HTMLInputElement).value; + Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -10337,9 +10358,9 @@ different message in the Reading Pane or closes the window of the current message. - const subjectText = $("#subject-text-field") - .val() - .toString(); + const subjectText = (document.getElementById("subject-text-field") as + HTMLInputElement).value; + Office.context.mailbox.item.display.subject.setAsync(subjectText, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -10362,9 +10383,9 @@ different message in the Reading Pane or closes the window of the current message. - const bodyText = $("#body-text-field") - .val() - .toString(); + const bodyText = (document.getElementById("body-text-field") as + HTMLInputElement).value; + Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -10387,9 +10408,9 @@ different message in the Reading Pane or closes the window of the current message. - const subjectText = $("#subject-text-field") - .val() - .toString(); + const subjectText = (document.getElementById("subject-text-field") as + HTMLInputElement).value; + Office.context.mailbox.item.display.subject.setAsync(subjectText, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -10703,7 +10724,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as + HTMLInputElement).value; Office.context.mailbox.displayAppointmentForm(itemId); 'Office.Mailbox#displayAppointmentFormAsync:member(1)': @@ -10712,7 +10734,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as + HTMLInputElement).value; // The async version will return error 9049 if the item is not found. @@ -10729,7 +10752,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as + HTMLInputElement).value; Office.context.mailbox.displayMessageForm(itemId); 'Office.Mailbox#displayMessageFormAsync:member(1)': @@ -10738,7 +10762,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml - const itemId = $("#itemId").val(); + const itemId = (document.getElementById("itemId") as + HTMLInputElement).value; // The async version will return error 9049 if the item is not found. @@ -11093,7 +11118,8 @@ // Adds an informational message with actions to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const itemId = Office.context.mailbox.item.itemId; @@ -11313,7 +11339,8 @@ // Adds an error notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -11809,9 +11836,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - const attachmentUrl = $("#attachmentUrl") - .val() - .toString(); + const attachmentUrl = (document.getElementById("attachmentUrl") as + HTMLInputElement).value; + Office.context.mailbox.item.addFileAttachmentAsync( attachmentUrl, getFileName(attachmentUrl), @@ -11826,9 +11853,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - const attachmentUrl = $("#attachmentUrl") - .val() - .toString(); + const attachmentUrl = (document.getElementById("attachmentUrl") as + HTMLInputElement).value; + Office.context.mailbox.item.addFileAttachmentAsync( attachmentUrl, getFileName(attachmentUrl), @@ -11869,7 +11896,7 @@ { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - const signature = $("#signature").val() + ""; + const signature = (document.getElementById("signature") as HTMLInputElement).value + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, @@ -11905,9 +11932,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml - const email = $("#emailBcc") - .val() - .toString(); + const email = (document.getElementById("emailBcc") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { @@ -12013,9 +12040,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml - const email = $("#emailCc") - .val() - .toString(); + const email = (document.getElementById("emailCc") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { @@ -12398,7 +12425,8 @@ // Adds a progress indicator to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -12414,7 +12442,8 @@ // Adds an informational notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -12432,7 +12461,8 @@ // Adds a persistent information notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -12467,7 +12497,8 @@ // Replaces a notification message of a given key with another message. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -12485,7 +12516,8 @@ // Removes a notification message from the current mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -12496,9 +12528,7 @@ Office.context.mailbox.item.removeAttachmentAsync( - $("#attachmentId") - .val() - .toString(), + (document.getElementById("attachmentId") as HTMLInputElement).value, (result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.error(result.error.message); @@ -12635,9 +12665,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml - const email = $("#emailTo") - .val() - .toString(); + const email = (document.getElementById("emailTo") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { @@ -12813,9 +12843,9 @@ different message in the Reading Pane or closes the window of the current message. - const bodyText = $("#body-text-field") - .val() - .toString(); + const bodyText = (document.getElementById("body-text-field") as + HTMLInputElement).value; + Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { @@ -13245,7 +13275,8 @@ // Adds a progress indicator to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -13261,7 +13292,8 @@ // Adds an informational notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -13279,7 +13311,8 @@ // Adds a persistent information notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -13314,7 +13347,8 @@ // Replaces a notification message of a given key with another message. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -13332,7 +13366,8 @@ // Removes a notification message from the current mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -13455,7 +13490,8 @@ // Adds an informational message with actions to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const itemId = Office.context.mailbox.item.itemId; @@ -13504,7 +13540,8 @@ // Adds a progress indicator to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -13520,7 +13557,8 @@ // Adds an informational notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -13538,7 +13576,8 @@ // Adds a persistent information notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -13556,7 +13595,8 @@ // Adds an error notification to the mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; const details = { @@ -13591,7 +13631,8 @@ // Removes a notification message from the current mail item. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -13603,7 +13644,8 @@ // Replaces a notification message of a given key with another message. - const id = $("#notificationId").val().toString(); + const id = (document.getElementById("notificationId") as + HTMLInputElement).value; Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -13729,9 +13771,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml - const email = $("#emailBcc") - .val() - .toString(); + const email = (document.getElementById("emailBcc") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { @@ -13746,9 +13788,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml - const email = $("#emailCc") - .val() - .toString(); + const email = (document.getElementById("emailCc") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { @@ -13763,9 +13805,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml - const email = $("#emailOptional") - .val() - .toString(); + const email = (document.getElementById("emailOptional") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, @@ -13781,9 +13823,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml - const email = $("#emailRequired") - .val() - .toString(); + const email = (document.getElementById("emailRequired") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, @@ -13799,9 +13841,9 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml - const email = $("#emailTo") - .val() - .toString(); + const email = (document.getElementById("emailTo") as + HTMLInputElement).value; + const emailArray = [email]; Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { @@ -13985,11 +14027,13 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml - const settingName = $("#settingName").val(); + const settingName = (document.getElementById("settingName") as + HTMLInputElement).value; const settingValue = Office.context.roamingSettings.get(settingName); - $("#settingValue").val(settingValue); + (document.getElementById("settingValue") as HTMLInputElement).value = + settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); 'Office.RoamingSettings#saveAsync:member(1)': @@ -14013,9 +14057,11 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml - const settingName = $("#settingName").val(); + const settingName = (document.getElementById("settingName") as + HTMLInputElement).value; - const settingValue = $("#settingValue").val(); + const settingValue = (document.getElementById("settingValue") as + HTMLInputElement).value; Office.context.roamingSettings.set(settingName, settingValue); @@ -14313,9 +14359,11 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml - const chosenMaster = $("#master-id").val() as string; + const chosenMaster = (document.getElementById("master-id") as + HTMLInputElement).value; - const chosenLayout = $("#layout-id").val() as string; + const chosenLayout = (document.getElementById("layout-id") as + HTMLInputElement).value; await PowerPoint.run(async function(context) { @@ -14531,8 +14579,9 @@ finalTable += "" + index + "" + shape.id + ""; }); finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = ""; + outputSpan.innerHTML += finalTable; }); - >- // Link to full sample: @@ -14581,9 +14630,11 @@ allSlidesList[slide.id] = `Slide ${index + 1}`; }); - if ($("#id-check-usenative").is(":checked")) { + const checkbox = document.getElementById("id-check-usenative") as HTMLInputElement; + if (checkbox && checkbox.checked) { context.presentation.load("tags"); } + const slides: PowerPoint.SlideScopedCollection = context.presentation.getSelectedSlides(); const slideCount = slides.getCount(); slides.load("items"); @@ -14595,8 +14646,9 @@ finalTable += "" + index + " - " + allSlidesList[slide.id] + "" + slide.id + ""; }); finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = "" + outputSpan.innerHTML += finalTable; }); - >- // Link to full sample: @@ -14624,8 +14676,9 @@ savedSlideSelection.push(slide.id); }); finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = "" + outputSpan.innerHTML += finalTable; }); 'PowerPoint.Presentation#getSelectedTextRange:member(1)': - >- @@ -14665,8 +14718,9 @@ finalTable += "Start" + textRange.start + ""; finalTable += "Length" + textRange.length + ""; finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = "" + outputSpan.innerHTML += finalTable; }); - >- // Link to full sample: @@ -15151,8 +15205,13 @@ rectangle.fill.foregroundColor = generateRandomHexColor(); } finalTable += "Done
      "; - $("#slide-tags").empty(); - $("#slide-tags").append(finalTable); + const slideTags = document.getElementById("slide-tags"); + if (slideTags) { + slideTags.innerHTML = ""; + slideTags.innerHTML += finalTable; + } else { + console.warn('Element with ID "slide-tags" not found.'); + } }); 'PowerPoint.ShapeFill#setSolidColor:member(1)': - >- @@ -15327,8 +15386,9 @@ finalTable += "" + index + "" + shape.id + ""; }); finalTable += ""; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = ""; + outputSpan.innerHTML += finalTable; }); 'PowerPoint.ShapeType:enum': - >- @@ -15427,9 +15487,11 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml - const chosenMaster = $("#master-id").val() as string; + const chosenMaster = (document.getElementById("master-id") as + HTMLInputElement).value; - const chosenLayout = $("#layout-id").val() as string; + const chosenLayout = (document.getElementById("layout-id") as + HTMLInputElement).value; await PowerPoint.run(async function(context) { @@ -15447,9 +15509,11 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml - const chosenMaster = $("#master-id").val() as string; + const chosenMaster = (document.getElementById("master-id") as + HTMLInputElement).value; - const chosenLayout = $("#layout-id").val() as string; + const chosenLayout = (document.getElementById("layout-id") as + HTMLInputElement).value; await PowerPoint.run(async function(context) { @@ -17245,7 +17309,7 @@ footnotes.load("items"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const item: Word.NoteItem = footnotes.items[mark]; console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); @@ -17269,7 +17333,7 @@ footnotes.load("items"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const item: Word.NoteItem = footnotes.items[mark]; console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); @@ -17289,7 +17353,7 @@ style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -17322,7 +17386,7 @@ style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -17355,7 +17419,7 @@ style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -17388,7 +17452,7 @@ style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -17421,7 +17485,7 @@ style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -17489,7 +17553,7 @@ style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -17715,10 +17779,7 @@ selection. await Word.run(async (context) => { - const listItemText = $("#item-to-add") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-add") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -17794,10 +17855,7 @@ in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-delete") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-delete") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -17845,9 +17903,7 @@ // Sets a comment on the selected content. await Word.run(async (context) => { - const text = $("#comment-text") - .val() - .toString(); + const text = (document.getElementById("comment-text") as HTMLInputElement).value; const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. @@ -17909,9 +17965,7 @@ // Replies to the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#reply-text") - .val() - .toString(); + const text = (document.getElementById("reply-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -17933,9 +17987,7 @@ // Edits the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#edit-comment-text") - .val() - .toString(); + const text = (document.getElementById("edit-comment-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -18074,9 +18126,7 @@ // Replies to the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#reply-text") - .val() - .toString(); + const text = (document.getElementById("reply-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -18122,9 +18172,7 @@ // Replies to the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#reply-text") - .val() - .toString(); + const text = (document.getElementById("reply-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -18237,9 +18285,7 @@ // Replies to the first active comment in the selected content. await Word.run(async (context) => { - const text = $("#reply-text") - .val() - .toString(); + const text = (document.getElementById("reply-text") as HTMLInputElement).value; const comments: Word.CommentCollection = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); @@ -18283,9 +18329,7 @@ await Word.run(async (context) => { // Absolute path of an online or local document. - const filePath = $("#filePath") - .val() - .toString(); + const filePath = (document.getElementById("filePath") as HTMLInputElement).value; // Options that configure the compare operation. const options: Word.DocumentCompareOptions = { compareTarget: Word.CompareTarget.compareTargetCurrent, @@ -18389,7 +18433,7 @@ // Sets the state of the first content control. await Word.run(async (context) => { - const state = ($("#state-to-set").val() as unknown) as Word.ContentControlState; + const state = ((document.getElementById("state-to-set") as HTMLSelectElement).value as unknown) as Word.ContentControlState; let firstContentControl = context.document.contentControls.getFirstOrNullObject(); await context.sync(); @@ -18458,10 +18502,7 @@ selection. await Word.run(async (context) => { - const listItemText = $("#item-to-add") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-add") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -18499,10 +18540,7 @@ the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-add") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-add") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -19036,10 +19074,7 @@ control in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-delete") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-delete") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -19088,10 +19123,7 @@ in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-delete") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-delete") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -19140,10 +19172,7 @@ control in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-delete") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-delete") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -19309,7 +19338,7 @@ // Sets the state of the first content control. await Word.run(async (context) => { - const state = ($("#state-to-set").val() as unknown) as Word.ContentControlState; + const state = ((document.getElementById("state-to-set") as HTMLSelectElement).value as unknown) as Word.ContentControlState; let firstContentControl = context.document.contentControls.getFirstOrNullObject(); await context.sync(); @@ -20339,7 +20368,7 @@ // Adds a new style. await Word.run(async (context) => { - const newStyleName = $("#new-style-name").val() as string; + const newStyleName = (document.getElementById("new-style-name") as HTMLInputElement).value; if (newStyleName == "") { console.warn("Enter a style name to add."); return; @@ -20356,7 +20385,7 @@ return; } - const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; + const newStyleType = ((document.getElementById("new-style-type") as HTMLSelectElement).value as unknown) as Word.StyleType; context.document.addStyle(newStyleName, newStyleType); await context.sync(); @@ -20385,9 +20414,7 @@ await Word.run(async (context) => { // Absolute path of an online or local document. - const filePath = $("#filePath") - .val() - .toString(); + const filePath = (document.getElementById("filePath") as HTMLInputElement).value; // Options that configure the compare operation. const options: Word.DocumentCompareOptions = { compareTarget: Word.CompareTarget.compareTargetCurrent, @@ -20461,7 +20488,7 @@ await Word.run(async (context) => { - const paragraphId = $("#paragraph-id").val() as string; + const paragraphId = (document.getElementById("paragraph-id") as HTMLInputElement).value; const paragraph: Word.Paragraph = context.document.getParagraphByUniqueLocalId(paragraphId); paragraph.load(); await paragraph.context.sync(); @@ -20890,9 +20917,7 @@ await Word.run(async (context) => { // Absolute path of an online or local document. - const filePath = $("#filePath") - .val() - .toString(); + const filePath = (document.getElementById("filePath") as HTMLInputElement).value; // Options that configure the compare operation. const options: Word.DocumentCompareOptions = { compareTarget: Word.CompareTarget.compareTargetCurrent, @@ -20986,10 +21011,7 @@ the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-add") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-add") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -21067,10 +21089,7 @@ control in the selection. await Word.run(async (context) => { - const listItemText = $("#item-to-delete") - .val() - .toString() - .trim(); + const listItemText = (document.getElementById("item-to-delete") as HTMLInputElement).value.trim(); const selectedRange: Word.Range = context.document.getSelection(); let selectedContentControl = selectedRange .getContentControls({ @@ -21897,7 +21916,7 @@ // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; @@ -22072,7 +22091,7 @@ // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; @@ -22108,7 +22127,7 @@ // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; @@ -22219,7 +22238,7 @@ // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; @@ -22283,7 +22302,7 @@ footnotes.load("items/body"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const footnoteBody: Word.Range = footnotes.items[mark].body.getRange(); footnoteBody.load("text"); @@ -22304,7 +22323,7 @@ footnotes.load("items"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; footnotes.items[mark].delete(); await context.sync(); @@ -22324,7 +22343,7 @@ footnotes.load("items/reference"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const reference: Word.Range = footnotes.items[mark].getNext().reference; reference.select(); @@ -22343,7 +22362,7 @@ footnotes.load("items/body"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const footnoteBody: Word.Range = footnotes.items[mark].body.getRange(); footnoteBody.load("text"); @@ -22364,7 +22383,7 @@ footnotes.load("items/reference"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const item: Word.NoteItem = footnotes.items[mark]; const reference: Word.Range = item.reference; @@ -22387,7 +22406,7 @@ footnotes.load("items"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const item: Word.NoteItem = footnotes.items[mark]; console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); @@ -22439,7 +22458,7 @@ footnotes.load("items"); await context.sync(); - const referenceNumber = $("#input-reference").val(); + const referenceNumber = (document.getElementById("input-reference") as HTMLInputElement).value; const mark = (referenceNumber as number) - 1; const item: Word.NoteItem = footnotes.items[mark]; console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); @@ -22812,7 +22831,7 @@ // Applies the specified style to a paragraph. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to apply."); return; @@ -23100,7 +23119,7 @@ left indent size and the alignment. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update its paragraph format."); return; @@ -23128,7 +23147,7 @@ left indent size and the alignment. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update its paragraph format."); return; @@ -23156,7 +23175,7 @@ left indent size and the alignment. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update its paragraph format."); return; @@ -23380,9 +23399,7 @@ // Sets a comment on the selected content. await Word.run(async (context) => { - const text = $("#comment-text") - .val() - .toString(); + const text = (document.getElementById("comment-text") as HTMLInputElement).value; const comment: Word.Comment = context.document.getSelection().insertComment(text); // Load object to log in the console. @@ -23456,9 +23473,7 @@ // Sets a footnote on the selected content. await Word.run(async (context) => { - const text = $("#input-footnote") - .val() - .toString(); + const text = (document.getElementById("input-footnote") as HTMLInputElement).value; const footnote: Word.NoteItem = context.document.getSelection().insertFootnote(text); await context.sync(); @@ -23685,19 +23700,13 @@ // edits the value of an existing one. await Word.run(async (context) => { - const key = $("#key") - .val() - .toString(); - + const key = (document.getElementById("key") as HTMLInputElement).value; if (key == "") { console.error("Key shouldn't be empty."); return; } - const value = $("#value") - .val() - .toString(); - + const value = (document.getElementById("value") as HTMLInputElement).value; const settings: Word.SettingCollection = context.document.settings; const setting: Word.Setting = settings.add(key, value); setting.load(); @@ -23716,19 +23725,13 @@ // edits the value of an existing one. await Word.run(async (context) => { - const key = $("#key") - .val() - .toString(); - + const key = (document.getElementById("key") as HTMLInputElement).value; if (key == "") { console.error("Key shouldn't be empty."); return; } - const value = $("#value") - .val() - .toString(); - + const value = (document.getElementById("value") as HTMLInputElement).value; const settings: Word.SettingCollection = context.document.settings; const setting: Word.Setting = settings.add(key, value); setting.load(); @@ -23747,19 +23750,13 @@ // edits the value of an existing one. await Word.run(async (context) => { - const key = $("#key") - .val() - .toString(); - + const key = (document.getElementById("key") as HTMLInputElement).value; if (key == "") { console.error("Key shouldn't be empty."); return; } - const value = $("#value") - .val() - .toString(); - + const value = (document.getElementById("value") as HTMLInputElement).value; const settings: Word.SettingCollection = context.document.settings; const setting: Word.Setting = settings.add(key, value); setting.load(); @@ -23792,19 +23789,13 @@ // edits the value of an existing one. await Word.run(async (context) => { - const key = $("#key") - .val() - .toString(); - + const key = (document.getElementById("key") as HTMLInputElement).value; if (key == "") { console.error("Key shouldn't be empty."); return; } - const value = $("#value") - .val() - .toString(); - + const value = (document.getElementById("value") as HTMLInputElement).value; const settings: Word.SettingCollection = context.document.settings; const setting: Word.Setting = settings.add(key, value); setting.load(); @@ -23844,7 +23835,7 @@ specified style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update shading properties."); return; @@ -23878,7 +23869,7 @@ specified style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update shading properties."); return; @@ -23911,7 +23902,7 @@ // Applies the specified style to a paragraph. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to apply."); return; @@ -23946,7 +23937,7 @@ // Deletes the custom style. await Word.run(async (context) => { - const styleName = $("#style-name-to-delete").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to delete."); return; @@ -23973,7 +23964,7 @@ style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update border properties."); return; @@ -24005,7 +23996,7 @@ // Updates font properties (e.g., color, size) of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update font properties."); return; @@ -24033,7 +24024,7 @@ // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; @@ -24069,7 +24060,7 @@ // Applies the specified style to a paragraph. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to apply."); return; @@ -24105,7 +24096,7 @@ left indent size and the alignment. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update its paragraph format."); return; @@ -24133,7 +24124,7 @@ specified style. await Word.run(async (context) => { - const styleName = $("#style-name").val() as string; + const styleName = (document.getElementById("style-name") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to update shading properties."); return; @@ -24181,7 +24172,7 @@ // Adds a new style. await Word.run(async (context) => { - const newStyleName = $("#new-style-name").val() as string; + const newStyleName = (document.getElementById("new-style-name") as HTMLInputElement).value; if (newStyleName == "") { console.warn("Enter a style name to add."); return; @@ -24198,7 +24189,7 @@ return; } - const newStyleType = ($("#new-style-type").val() as unknown) as Word.StyleType; + const newStyleType = ((document.getElementById("new-style-type") as HTMLSelectElement).value as unknown) as Word.StyleType; context.document.addStyle(newStyleName, newStyleType); await context.sync(); @@ -24228,7 +24219,7 @@ // Applies the specified style to a paragraph. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to apply."); return; @@ -24711,9 +24702,9 @@ // Gets the table style properties and displays them in the form. - const styleName = $("#style-name") - .val() - .toString(); + const styleName = (document.getElementById("style-name") as + HTMLInputElement).value; + if (styleName == "") { console.warn("Please input a table style name."); return; @@ -24731,13 +24722,13 @@ } console.log(tableStyle); - $("#alignment").val(tableStyle.alignment); - $("#allow-break-across-page").val(tableStyle.allowBreakAcrossPage.toString()); - $("#top-cell-margin").val(tableStyle.topCellMargin); - $("#bottom-cell-margin").val(tableStyle.bottomCellMargin); - $("#left-cell-margin").val(tableStyle.leftCellMargin); - $("#right-cell-margin").val(tableStyle.rightCellMargin); - $("#cell-spacing").val(tableStyle.cellSpacing); + (document.getElementById("alignment") as HTMLInputElement).value = tableStyle.alignment; + (document.getElementById("allow-break-across-page") as HTMLInputElement).value = tableStyle.allowBreakAcrossPage.toString(); + (document.getElementById("top-cell-margin") as HTMLInputElement).value = tableStyle.topCellMargin; + (document.getElementById("bottom-cell-margin") as HTMLInputElement).value = tableStyle.bottomCellMargin; + (document.getElementById("left-cell-margin") as HTMLInputElement).value = tableStyle.leftCellMargin; + (document.getElementById("right-cell-margin") as HTMLInputElement).value = tableStyle.rightCellMargin; + (document.getElementById("cell-spacing") as HTMLInputElement).value = tableStyle.cellSpacing; }); 'Word.TrackedChange:class': - >- @@ -24946,7 +24937,7 @@ // Gets the properties of the specified style. await Word.run(async (context) => { - const styleName = $("#style-name-to-use").val() as string; + const styleName = (document.getElementById("style-name-to-use") as HTMLInputElement).value; if (styleName == "") { console.warn("Enter a style name to get properties."); return; From 4954cac577762e60d69352524ff4db9504f90a11 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 3 Apr 2025 12:00:12 -0700 Subject: [PATCH 121/156] [Excel] (Range) Add cell control and notes snippets (#973) * [Excel] (Range) Add cell control snippet * [Excel] (Notes) Add Notes snippet * Refactor, move Notes sample to Comments folder * Add comments to note snippet * Add new snippets to excel.xlsx * Run yarn start * Incorporate code review feedback * Re-run yarn start * fix typo in excel.xlsx * whitespace change in excel.xlsx * Add new functionality to checkbox snippet * Run yarn start * Update excel.xlsx, re-run yarn start * Add CellControlType to excel.xlsx, adjust comment locations, run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate code review feedback, re-run yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 34 +- playlists/excel.yaml | 34 +- .../comment-basics.yaml | 0 .../comment-mentions.yaml | 0 .../comment-replies.yaml | 0 .../comment-resolution.yaml | 0 .../excel-note-basics.yaml | 162 ++++++++ .../excel/42-range/range-cell-control.yaml | 164 ++++++++ snippet-extractor-metadata/excel.xlsx | Bin 28252 -> 28977 bytes snippet-extractor-output/snippets.yaml | 383 +++++++++++++++++- view-prod/excel.json | 10 +- view/excel.json | 10 +- 12 files changed, 763 insertions(+), 34 deletions(-) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-basics.yaml (100%) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-mentions.yaml (100%) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-replies.yaml (100%) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-resolution.yaml (100%) create mode 100644 samples/excel/12-comments-and-notes/excel-note-basics.yaml create mode 100644 samples/excel/42-range/range-cell-control.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 9a3f0428b..3b67eee0d 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -173,8 +173,8 @@ fileName: comment-basics.yaml description: 'Adds, edits, and removes comments.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-mentions @@ -182,8 +182,8 @@ fileName: comment-mentions.yaml description: Mentions someone in a comment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml + group: Comments And Notes api_set: ExcelApi: '1.11' - id: excel-comment-replies @@ -191,8 +191,8 @@ fileName: comment-replies.yaml description: 'Adds, edits, and removes comment replies.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-resolution @@ -200,10 +200,19 @@ fileName: comment-resolution.yaml description: Resolves and reopens a comment thread. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-resolution.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' +- id: excel-note-basics + name: Notes + fileName: excel-note-basics.yaml + description: 'Adds, edits, and removes notes.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + group: Comments And Notes + api_set: + ExcelApi: '1.18' - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -896,6 +905,15 @@ group: Range api_set: ExcelAPI: '1.15' +- id: excel-cell-controls + name: Checkboxes + fileName: range-cell-control.yaml + description: This sample shows how to add and remove checkboxes from a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + group: Range + api_set: + ExcelApi: '1.18' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b10fa4406..2a8b5c90f 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -173,8 +173,8 @@ fileName: comment-basics.yaml description: 'Adds, edits, and removes comments.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-basics.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-mentions @@ -182,8 +182,8 @@ fileName: comment-mentions.yaml description: Mentions someone in a comment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-mentions.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-mentions.yaml + group: Comments And Notes api_set: ExcelApi: '1.11' - id: excel-comment-replies @@ -191,8 +191,8 @@ fileName: comment-replies.yaml description: 'Adds, edits, and removes comment replies.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-replies.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-resolution @@ -200,10 +200,19 @@ fileName: comment-resolution.yaml description: Resolves and reopens a comment thread. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-resolution.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-resolution.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' +- id: excel-note-basics + name: Notes + fileName: excel-note-basics.yaml + description: 'Adds, edits, and removes notes.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/excel-note-basics.yaml + group: Comments And Notes + api_set: + ExcelApi: '1.18' - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -896,6 +905,15 @@ group: Range api_set: ExcelAPI: '1.15' +- id: excel-cell-controls + name: Checkboxes + fileName: range-cell-control.yaml + description: This sample shows how to add and remove checkboxes from a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-cell-control.yaml + group: Range + api_set: + ExcelApi: '1.18' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml diff --git a/samples/excel/12-comment/comment-basics.yaml b/samples/excel/12-comments-and-notes/comment-basics.yaml similarity index 100% rename from samples/excel/12-comment/comment-basics.yaml rename to samples/excel/12-comments-and-notes/comment-basics.yaml diff --git a/samples/excel/12-comment/comment-mentions.yaml b/samples/excel/12-comments-and-notes/comment-mentions.yaml similarity index 100% rename from samples/excel/12-comment/comment-mentions.yaml rename to samples/excel/12-comments-and-notes/comment-mentions.yaml diff --git a/samples/excel/12-comment/comment-replies.yaml b/samples/excel/12-comments-and-notes/comment-replies.yaml similarity index 100% rename from samples/excel/12-comment/comment-replies.yaml rename to samples/excel/12-comments-and-notes/comment-replies.yaml diff --git a/samples/excel/12-comment/comment-resolution.yaml b/samples/excel/12-comments-and-notes/comment-resolution.yaml similarity index 100% rename from samples/excel/12-comment/comment-resolution.yaml rename to samples/excel/12-comments-and-notes/comment-resolution.yaml diff --git a/samples/excel/12-comments-and-notes/excel-note-basics.yaml b/samples/excel/12-comments-and-notes/excel-note-basics.yaml new file mode 100644 index 000000000..d8a65e187 --- /dev/null +++ b/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -0,0 +1,162 @@ +order: 5 +id: excel-note-basics +name: Notes +description: 'Adds, edits, and removes notes.' +host: EXCEL +api_set: + ExcelApi: '1.18' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-note-to-selected-cell").addEventListener("click", () => tryCatch(addNoteToSelectedCell)); + document.getElementById("add-note-to-cell").addEventListener("click", () => tryCatch(addNoteToCell)); + document.getElementById("change-note-visibility").addEventListener("click", () => tryCatch(changeNoteVisibility)); + document.getElementById("edit-note-content").addEventListener("click", () => tryCatch(editNoteContent)); + document.getElementById("edit-note-size").addEventListener("click", () => tryCatch(editNoteSize)); + document.getElementById("delete-note").addEventListener("click", () => tryCatch(deleteNote)); + + async function addNoteToSelectedCell() { + // This function adds a note to the selected cell. + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + + // Note that an InvalidArgument error is thrown if multiple cells are selected. + context.workbook.notes.add(selectedRange, "The first note."); + await context.sync(); + }); + } + + async function addNoteToCell() { + // This function adds a note to cell A2. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + + // Note that an InvalidArgument error is thrown if multiple cells are passed to `notes.add`. + sheet.notes.add("A2", "The second note."); + await context.sync(); + }); + } + + async function changeNoteVisibility() { + // This function sets the note on cell A1 to visible. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const firstNote = sheet.notes.getItem("A1"); + + firstNote.load(); + await context.sync(); + + firstNote.visible = true; + }); + } + + async function editNoteContent() { + // This function changes the content in the first note. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.content = "Changing the content of the first note."; + await context.sync(); + }); + } + + async function editNoteSize() { + // This function changes the height and width of the first note. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); + } + + async function deleteNote() { + // This function deletes the note from cell A2. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItem("A2"); + note.delete(); + + await context.sync(); + }); + } + + /** Set up Sample worksheet. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Notes").delete(); + const sheet = context.workbook.worksheets.add("Notes"); + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      +

      This sample shows how to work with notes: Add notes, edit content, size, and visibility, and remove notes.

      +
      +
      +

      Setup

      + +
      +
      +

      Try it out

      + +

      + +

      + +

      + +

      + +

      + +

      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml new file mode 100644 index 000000000..a207ebd8e --- /dev/null +++ b/samples/excel/42-range/range-cell-control.yaml @@ -0,0 +1,164 @@ +order: 23 +id: excel-cell-controls +name: Checkboxes +description: This sample shows how to add and remove checkboxes from a table. +host: EXCEL +api_set: + ExcelApi: '1.18' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); + document.getElementById("change-checkbox").addEventListener("click", () => tryCatch(changeCheckbox)); + document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); + document.getElementById("remove-content").addEventListener("click", () => tryCatch(removeContent)); + + async function addCheckboxes() { + // Add checkboxes to the table. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); + } + + async function changeCheckbox() { + // Change the value of the checkbox in B3. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B3"); + + range.values = [["TRUE"]]; + await context.sync(); + }); + } + + async function removeCheckboxes() { + // Remove checkboxes from the table. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the checkboxes back to boolean values. + range.control = { + type: Excel.CellControlType.empty + }; + await context.sync(); + }); + } + + async function removeContent() { + // Remove all content from the Analysis column. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Clear all the data from the second column. + range.clearOrResetContents(); + await context.sync(); + }); + } + + // Set up the sample content. + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const fruitTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); + fruitTable.name = "FruitTable"; + + fruitTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; + + fruitTable.rows.add(null /*add at the end*/, [ + ["Apple", "TRUE"], + ["Kale", "FALSE"], + ["Orange", "TRUE"], + ["Pear", "TRUE"], + ["Mango", "TRUE"], + ["Dog", "FALSE"], + ["Strawberry", "TRUE"], + ["Chair", "FALSE"], + ["Tomato", "UNKNOWN"] /* Only boolean values will render as checkboxes. */ + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      +

      This sample creates and table and then shows how to add, remove, and change checkboxes in the table. +

      +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      + +
      + +
      + +
      + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 0daeeb2d254f73ce314a6906e19ff6d3f47aba49..5c53016876e55a61f6216acce660344fec2b5531 100644 GIT binary patch delta 18636 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.CellControlType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); 'Excel.CellPropertiesFill#color:member': - >- // Link to full sample: @@ -1669,6 +1709,26 @@ chart.dataLabels.format.font.color = "black"; chart.title.text = "Bicycle Parts Quarterly Sales"; + await context.sync(); + }); +'Excel.CheckboxCellControl:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; await context.sync(); }); 'Excel.ClearApplyTo:enum': @@ -1732,7 +1792,7 @@ 'Excel.Comment#content:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1744,7 +1804,7 @@ 'Excel.Comment#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1754,7 +1814,7 @@ 'Excel.Comment#load:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1768,7 +1828,7 @@ 'Excel.Comment#resolved:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-resolution.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml await Excel.run(async (context) => { @@ -1779,7 +1839,7 @@ 'Excel.CommentCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1907,7 +1967,7 @@ 'Excel.CommentReply#content:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml await Excel.run(async (context) => { @@ -1925,7 +1985,7 @@ 'Excel.CommentReply#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml await Excel.run(async (context) => { @@ -1938,7 +1998,7 @@ 'Excel.CommentReplyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml await Excel.run(async (context) => { @@ -1951,7 +2011,7 @@ 'Excel.CommentRichContent#mentions:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml await Excel.run(async (context) => { @@ -2688,7 +2748,7 @@ 'Excel.ContentType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml await Excel.run(async (context) => { @@ -4145,6 +4205,158 @@ await context.sync(); }); +'Excel.Note:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the height and width of the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); +'Excel.Note#content:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the content in the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.content = "Changing the content of the first note."; + await context.sync(); + }); +'Excel.Note#height:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the height and width of the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); +'Excel.Note#visible:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function sets the note on cell A1 to visible. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const firstNote = sheet.notes.getItem("A1"); + + firstNote.load(); + await context.sync(); + + firstNote.visible = true; + }); +'Excel.Note#width:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the height and width of the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); +'Excel.Note#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function deletes the note from cell A2. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItem("A2"); + note.delete(); + + await context.sync(); + }); +'Excel.NoteCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function adds a note to the selected cell. + + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + + // Note that an InvalidArgument error is thrown if multiple cells are selected. + context.workbook.notes.add(selectedRange, "The first note."); + await context.sync(); + }); +'Excel.NoteCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function adds a note to the selected cell. + + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + + // Note that an InvalidArgument error is thrown if multiple cells are selected. + context.workbook.notes.add(selectedRange, "The first note."); + await context.sync(); + }); +'Excel.NoteCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function sets the note on cell A1 to visible. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const firstNote = sheet.notes.getItem("A1"); + + firstNote.load(); + await context.sync(); + + firstNote.visible = true; + }); +'Excel.NoteCollection#getItemAt:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the content in the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.content = "Changing the content of the first note."; + await context.sync(); + }); 'Excel.NumberFormatInfo#numberDecimalSeparator:member': - >- // Link to full sample: @@ -4904,6 +5116,24 @@ sumCell.format.autofitColumns(); await context.sync(); }); +'Excel.Range#clearOrResetContents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Remove all content from the Analysis column. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Clear all the data from the second column. + range.clearOrResetContents(); + await context.sync(); + }); 'Excel.Range#copyFrom:member(1)': - >- // Link to full sample: @@ -4920,6 +5150,26 @@ sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); await context.sync(); }); +'Excel.Range#control:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); 'Excel.Range#find:member(1)': - >- // Link to full sample: @@ -5669,6 +5919,21 @@ sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); await context.sync(); }); +'Excel.Range#values:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Change the value of the checkbox in B3. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B3"); + + range.values = [["TRUE"]]; + await context.sync(); + }); 'Excel.Range#valuesAsJson:member': - >- // Link to full sample: @@ -6907,6 +7172,46 @@ console.log("Worksheet Id : " + worksheet.name); }); } +'Excel.TableCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.TableCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Remove checkboxes from the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the checkboxes back to boolean values. + range.control = { + type: Excel.CellControlType.empty + }; + await context.sync(); + }); 'Excel.TableCollection#onChanged:member': - >- // Link to full sample: @@ -6920,6 +7225,64 @@ await context.sync(); console.log("A handler has been registered for the table collection onChanged event"); }); +'Excel.TableColumn#getDataBodyRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.TableColumnCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.TableColumnCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Remove all content from the Analysis column. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Clear all the data from the second column. + range.clearOrResetContents(); + await context.sync(); + }); 'Excel.TableSelectionChangedEventArgs#address:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 3ff4c77a9..b267d8b88 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -17,10 +17,11 @@ "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml", - "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml", - "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml", - "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml", - "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-resolution.yaml", + "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml", + "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml", + "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml", + "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml", + "excel-note-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-functions-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/basic-function.yaml", @@ -92,6 +93,7 @@ "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml", "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml", + "excel-cell-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml", "excel-shape-images": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml", "excel-shape-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml", diff --git a/view/excel.json b/view/excel.json index 7f9d59fff..c805307dd 100644 --- a/view/excel.json +++ b/view/excel.json @@ -17,10 +17,11 @@ "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml", - "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-basics.yaml", - "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-mentions.yaml", - "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-replies.yaml", - "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-resolution.yaml", + "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml", + "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-mentions.yaml", + "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml", + "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-resolution.yaml", + "excel-note-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/excel-note-basics.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-functions-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/basic-function.yaml", @@ -92,6 +93,7 @@ "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-get-range-edge.yaml", "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-direct-dependents.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-dependents.yaml", + "excel-cell-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-cell-control.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-create-and-delete.yaml", "excel-shape-images": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-images.yaml", "excel-shape-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-lines.yaml", From e24211a9e580c6a7af46897ca5e2e99977f75a98 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:58:56 -0700 Subject: [PATCH 122/156] Remapping cell control from a class to a type (#975) --- snippet-extractor-metadata/excel.xlsx | Bin 28977 -> 28959 bytes snippet-extractor-output/snippets.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 5c53016876e55a61f6216acce660344fec2b5531..65ff1a38bd7faa8505d474d5a72fba611935f418 100644 GIT binary patch delta 13107 zcmZ9zby!qy&_7H_$kHVtAWBF{hf<<+D#*f80s>2?z>)`Pq?DGF5TqoQ?pQ!Tx?_n& zN@7{0^S6HA=Y4+H`|dwyubFernYrgPanHF=6$&>8ghK1 zJhe4m!-b9D0DYEL8z5~;a(>8xh{nb7lvW0POaECt@7T#ZpB))K^_3^I?0fJx|GIf) zk@R{{?;CxiIHyanl25Dz@n;#rm$U>Uh7YTMSk}%5se*M0jur@9=5fmh;y#pq_upm` zrP0Ty)M@!`j|_R3Kalr#(@6E=P4FC_W=wKuUxa*}1>hQ<@!Zo@zekkE==FD+pgM^H zirv1tFibWG93dw~-Vf*STYnZV4IaOJ$OlBM13?y-Ib%Wv;2b_GDRi{0Ro{?8;zV%j zZeU^)p;J1a(Y9*x&&PJ98&3`R+46BxEc;LHR6C&JQonk3jaGdYpZoT=RtyI$>?3f_ zH#Gf<2Kf0CqR_01RIsPG7rc0?LOupH5Mf#b$_sGOoBaf@8opILC;l~Df9^{zX?a>T zY!%A3{Nnx{cDGHgxWw6`McRxi<|dmzL=&OEY=#%fmO7#1@gfS+wX^djxqUzJyUE|A zz8ANxWbu@_{fe=10SdDLWe6taG%IX8_D_-tE5A*$jFw1{e0t=n0KcrB2J1bl0Tl7U~goe8%y9jfeHK`LjJn zNY3NqYy9uW@Ykop?d3ibLIgd_8nqd@GS&qypEsXQgCX6WF)56S5S;)SK%1&T`9{K)EmDEiM82N&4hv{cU?s?5|2X4B-+m` z>B7N4`s*pRv->#Pfh^m?NOkWn%SW@y_IwptN|I`Cx!skWTr!3MRyh`5Wst2)1 zqdkWG{D19UJYYgoC2dp-sQr#WgrxL;tj|ceI%{L1LrjDNb#zWvAkL@3Tr&o2^1n`W zWw!)^FrP;MBsj)y7b<+6qrWrNw)?dw%ZOKjOs+)ht29B4`@^w2ZVVeAzP516T9iDo z_}R2Unv$@0r=~FCvF-QHtK$^!3q_h;>ddcyEM{WUXjvXkx2$e#eMQhXUieI?E6tEy z$SLwzFDa~Y_W~~NBx}=em8dg$imjdeIfw#=EB17P)t=9NIhwy!N_$L3E934LH1ho{ zfJbTW3!Qv-f_K-U=&uwFE$c+X=H+pxHW@M@y8c}`Be;>ByWHDUUW zzWTg}4=wsBMZNihdcGM(uh2mMd&%ID}G$4@6!@<)BDj? z*tm7-)~7!x>>rCQNxbzCoIZt5ru)t^k#6@9YWqN+620~C@`5;tN$V{x4$kc@7K699 zNm)B_oQ-awZf$TLA>#ZtL7G#J#<} z7y)iifcWLW+Z~r%Okexe(TUE&`GlbSt*6Xo#r5h722g>4rlA4w55roh|a#K_*=78 zhwj4vvfOq<&|y^}v`wLtX82w@Y!jKc325C+_XXCr*C1#Z<+WG)V)`g(ui{ABZw^9p zlw{?jS(~rQb@Ijs-#(A8ki+4EhN%ItE<|4T-Pb-ItZPHp3xe~yk!}J6N3yFkDjxy= z$t?<8BkRJ%APKC{vE3cpp%B< znP00UOB3zOrAWh-L&tT!dY9(wp2K3}20Y>)omH#%=RHv%mYsoU-q_A}Pe-RA#!7zW zdZW;=>w@ce%T~yI+?!FsENDd3t`e+Al|=QdKh8=tof1?;x)jgKGOnnrL!$5}2KSNa75R0z{7m&hLD$j%sHrEd*0DuWdsr?kt-48P3M1skX6bmx-Rw_z!vU zL`6#&+za)j1aQdDp1<&aCKsBBjt3_&VDGguPr%{3NBv98ejKjgA+S<po|rPkE!e#4-AT`(FaLJ~~hu?q`K$j*@aO46mXSd8{g3J%l|2a}**P|atYUN!% zzMSFgfj=>H%~(xh*JJKKS_lTfsqVyTP~M+n)h(P#79`8oksYtNbM?qoq>Y6$0Bd0k zQIJl#_YyAfeJRB}SsD-eUj1+-Z4kc$mqqg+f_#R0?@Z{~nqC4?p9w1#ZRWx9HNKo! zU*wC*ar(IaTE|@pqTo8yTmP;oEf*;#@_&i+%-ZE~fNITJ$X1e$8tZ)zpZ|0kc{w?% zm&d}U4DI&(f2e0NRvoQ0as+|uHEZ}jpX&biW_%y>n>-B{InH^^2N~7#q~D#wsYF2; zE^I&XSt{6MpIwkZbpv+H@VHAZ`HRCbM^-5Wizc7rDjg&~cuJ>s^r!!Z0J>yr+l*{U zWbgS_SjLE_2fSey`m1Re{||FwAETU4Mr-1rdp{z27PL?D&C?|Ugt zp#d_Q&~_%4kQ+a>&oM>Z6?Eo0dgd%-()Y)b9)G(FlTJLG0Q}UxV^J=K>+;Np{n>10 z?3QE};%vcq+L2T3P%f1tRMIpBn-{A3De7HV$NE%6j9XJ{uz6rwj(({o$W7&F;|Pf8 zc8)C2z7;Lz5jk+;vx`4%Ji)m?8Y(tMb4N$nPfo&Dl&$Kw9yKG{<1=o`;8o zgN0S7N*(o;88s_5SB!qJ4FuK211a&>1;1Jeyv8qhuJyo^Tl( zfXBUTT%XXzprdm}IemjwEt9LdKO@kjox{gV1SsL)boSs;fXxK71>ws{od0;Vp^?BX zUTmzUj$N0%kSS6Ya)z>MmhTIhh*>Mg=42~u67TKlYQ9nMRzz=z_0(5CUU?aDo2rP7 zd*4-w84y;?DCh@w?>Ca)q=xgEmwpe2T{!8mkf>$y(zpP>EJo>3kR1Jfd1W`m+72*| z{&wNQzbr3!(mNrFtqn{QT@itKGM}%6*cg}VJ`rcyo*1jCVpZ|yZ`r}rO6Tbdcnaz6 zM&4zLZBO&JMXLX?l#zX8w;IGjLW358$bY^%8>LX`Qhx9fwe%lv?cHh+1-+3B8~x+^ zY#sHx?_JbP{eMjnn2!*-UXB6^c$F?}U64!vq{$wb@3eduh1L#v!k{V<~g?m?s8vR2CqG+~F3? zYqiAl-(sx7#@S4-ikikh6ND<-rR7GcOVWJzZNXhSg#70~BI95}(pj3u-HyxR2m_p* z$%W2O9P1G~=|NhMAX9jOpxnj<-oYvf9o`P>ldg*|C)85sqZg0WqOcEgFfuIvuutr@ zSrpVnA@J3vKfy^afr`z85qH)@A-1bFMoIQww2g_J1~qn#?Cy0LVSI7O%fwv+6?ZI% zCHg2wMREX6T&#grRh3PYi&T!hm&-~sqh-V4GpGMbH zB}bJ52sQaXI_T1?YO84AO~Hu?WrlwxkfPZAA270`m8KTfqb9RKmWi*=;T#NDzdoTq zG2t(XP-K(!6iY_klT|9vOsSUFu(yx_WbqS!TWnGO8OS|Fw^4UeTNr~;{BJfKj7PA~!$AtB5X?5rziB#3C$w|G(XEm?cmEK3M zgT3O29Ji5Xkk_!DxbRpi*EAgx6Z$)U4clyJw+#e?jHjJcSAhS0MupU7bb zIwuhe_46OiL$~8We#)Wx2Ey~AmhT6?b4jiEFbcmox15<;3_n`|Odsy|x^>Jc?}KaF zP0rs^8#ol~%(R8y6NsQ9H@aKR#mpT3)VlN9-`ex8$&3IxwsK$L;eDa%3wGmm+is!i zF56tTE&1XU0;D6|MaM`jBA^|<`m`uL(D11V^~}qKtce%$IH%-&G0Q_OeJ&LivJkss zpW3{!E!`13FYse1a7Uo$8wupMkMPY;iIlp$x%GiP>a$$G_zOO3@s3=OfliNSfHKC4 zu7r$vK;2kC?2d`RRN;@r7c4KF@QI1mLSt`!)hr3+l?fTy5}z5dIvZ%dUH>ZhN}&i7#-CPAvz5lvWs;AIA2@k&>a-zV7|lym{>1b8@}jl^ATDBH++(zmRFUW<^&U`P z7`ms;H1tIF5%d1BRean6xkWb5il*n(eThrlD4$sThHSbm^dqrwGnt98wC}MbW-1+a ziPNEjU4C#}3Lw%5i6ZFmjE!$64TVg>|8Tkv)Nt9*|HveRbxhjRy~X)6=9cmBm$zAm z-DWwR8hv0ES%WAgwV@m%D}LOU7xX@bK@$??QQ2V`PTq5ES-nBwkrSWw-vNv z%qp|5PhZ|VJ}a}mt2aE9HT3SP(C_paH=naatLw%$O#j1o%*t6|tc{h|E#uebELGJc z)*kmP)molBdJm4#flP6bUp)=UV>r-i-9}%V)G@kAcniHbko@eKMTc6h-r)_mgMKTg zcPC{1O2r4LQq(gS3(J{XuSu?{cEuO2{(xB28rFP(KoKMu`?4_x)=$-|3&s*YGryiU zcW#>aP#f$`3RXZSO@dr-`IzPHO42zXuwaRmjOsrX$@&x-fvYF%l(3GEuz9ffd6g@n zQ^zClDBA{MuS>=ihn#uOnWL$>lrPw?OoRsXTQPkY&9jdsMHVi+jzcdeG=Lb99siXG$Wvb3G)L%ctfW^P8b(X36wQww&5;arWg1=o zNWGIfuAdW9tXVy-Iiy-6kf|6&R7Qzz@fKVB{Nl{+3isS-YEf~aOZ$!Mu}Z+>eF@eF zw|iO@!j@M<3_f>Du@Yw^Bv8Z0$!9~35!Z4m+~j#on{!4zA{NGa_d)l@lx55T4W(5H z98TrDU(B`TLw=&#!sB(~oYg`!PKc@EmebjuI_i~->E~wH{K2kjp`Z8=gdSBkAqa%l z&Klxf9n`+;gnzqE|6pq@6-nakPjq{eE%5RFPoPO-{>!acGGJGlP767Ul<1ri{0Mtc zNr`rt37R1D>~4oYP^34@BWnQ8OIn%!XwMo>`sY+qu?SW3azfwGu!AJW2xZJehra!= zjobdRuV2d0R(@H}^+#Hx%|*--OCKNKQW;M^^RI2_>vL>mL1YPjULKag5Cl$xEj$b9R*;5I5-a=p;bXo{2mQ9D%X<@qB$9<v{!A2CvtNO6Ue2Z@O0m=I-0;V;^kkq;`ZyrpB+2sN733j{0emhiF2fP*MaQ1!r zwk18v&bT3s+PiEY(aM+F+l*ojytM&GhUsg~@waGRmNVDs*&BO;J2FbYXtY4F@vL3( zKLWp(zv6W>_-5AvwO(_vsWqD~DSSf@{ze8v4DiModqC$omf)8D*u0=rEyTY!v&irJ z73jH6N=ZwxH`1Y(cL>+E>q>tBVMvu&k@S8`gE=*~Rs6!iz!U}DnG-)9ud5W~+&4T{ zK>Q(+ujkCW^Lk7y2v4I4a6Sv8x50$f+TpXh(xLTaDMwdbAEws)XeP-HIGuLXS?D@V zf+^DbsW0AOvgNoyoWK2qZ_506%Y5>@fc&|0FX@Z)i`c2)W)?BTaox^6;P&T}eur+C zn(?>yh&*lIGF4V%BIX~i2OzQ`cQO#6E(D+NvleRxx ztxLfjdaIDX+D@RqZ&1yFJMVuy&NvJBiNFWPjGUZM+>Wcan>aduGq&#_S*Jk;0LV+u zgCM#!J+Qbi+*QS?BfstiBVy357aQm(xpAd|MsDoQFwI_ zGYjL=N`8|!%mQ!LHRAR9!VBh|f1>m^6VJRA5ty<8~*zbpOy5X@iC%?1nA^(7bfKo_h zT^JD`rdzQ4;f+vW>vC$+GuAd2>dlnvAat>;>QF(gfQeBQ8#?a``eU;`^fv|l&&VR< zKMr2yPOCHOGM3ijy%s5ZZD{i6H<9}Eg0k?!*Yxz|{}5pxvxcNI0T|HrX6iTZ9n0*J z!XOU#tX0)aYp!OU)NGXlsBh)=$;n|(4(;{G?Axh{uh*>)_Z@ZaoaPg(!BK`o?X?1= zCQ&Xo-=Co9@g~Qw*{=LOInBZuzB;zu06sQYcLRh$+OB->eKrBA0wdJNG~Af ztO5F>yMZyd-OonnZcweryL@kL0SI6?0hv1j6oKQYwQgW=kDQ7%}iVpz=tr-vfKKAvW#$WAj z62Att-(79c8`I4QJpKqZvN9~9pSQO-nm6TLfviGam#T)X7GtvM*5Is$aNoT^@`+?- z)NA88SbeBWS9dOz{LT>g2%6Y4UA}?mCo8v?R>OkPQoWl`aA#vVv*`26+-l0r$m^Xn z5Dy;r%=f!)R(&ilm;vp@@EE=5+34Pxb}xW8JA%hyUED;K7S^KdNL7J4uR1veJbpIad$;Z&juQ(S>NO;&I$PfP zW$$*I#d&jetBUcE-ifdOvpI+dWxXsIp=&RR912YuWdX1GI6#3D?y{M zck0{dmQ-PT4Y%TuZ&@y_+Ysn{j74@u|ddu->TurVZ87cS_iurAMs1(3DGh4OQ@M`Oo z--b#%nfENooDw^c4ICFTX>qi)vQ!;)|Hb@7`N&)Tz)!NG##v@hNN0tchlU3=DPX4>0>RZ~MBPV;c0lA#G>Sxt14o zV6tFi#|NxiTsz9|I*Nd$`?x9bzTNSq#82n>V@(>wN3Xd5*)8 zXYfmfy7b$<}N5a?4xbpld~A#`q00L5Po`VkP3ykZvkq%l8Fj3z-tT(1IrSdxJD{G%?B$Za62DeV zG^vRBK$L(t#RV8V+Zhu!2qmDQIB-N2KizQ#K}}KFys;irS}?_kH$5&h`icbcf=`z0 zy_#p%;GK5^8*ud@eKw3YeSxV$iDs5@cyw2MSQ==u$JK29P&-d(^gWCMUuIm z-UqNfLMx|+<;v-NA_Li94Z@`Z8#e=8>tU zcXY0F>VR}K`rl&r%%@JM*6d9s{?;j!Ut~1y(fjaf;st17nG7}>46d;~ulJ}v$Sq}T z)iY|5mgiFcYID&npb13zX%jC~a34HljgyE3B|T41&DRSWEKXrj^Obz}NL^cBy>YZ={C)g2KRe*lb{Ja@ZEk10+^#*?m zmAqYjyglJv4&H@GU3!5Y8MBRn{MZoJccoAnGkouF#J!sbHS{O=Kv1lb6ID%;$#ksO zB3^$smvEz`0|a1&6%NB~*Qi9Fa*_skrVZ@xLM0WezZh|LLW$a^uqrg6%mZsqK-FXB zN=W8m*x4@&^U|l6X7M8hge^Y!y5J}=L2*jf&)9xRSG>4N=oA@5RPdGVy`(l!6nW|W z5vE+Sfo>MK3LuyP^|K*DFcjw@g(!59hNyVRvXjLDUxTlTH`q|f-N1yB;ypX68R?P- zav*G9=vqlV`;lYj-PsC$af1X(O;OvM8?L_uetrz=L=*Z?aE1?)IOy0EuPms&?Lh{& zA)su=SdnDPO`Q*^G2RC0cUW5uz^S`N{J#C@j6+#ZrJBNSow1!)W=3%!~JgaT^dDWkttG}NgIs*sD*mM$_cIl`H zS0I?(ZGF9h@DVXRFm6#*cLG27jSRZ<5D!B3xvO-?TPu3XmeJYV*wz_Jw|MfgcviU) zf?IL*%0?UP^-)vJ><*)aKhtaNhDyDSVaL>`ns)U&5>)u)O!2FbwW&ql`Y>Zb%+15? zaPMd6rr6pji;4nIz+jL#aFAp}yl=^Abyh>>;h-tMZj8UWf5%76T!ER#E|Na374ZlR zF4^5Ti=tv9mpDTX%|sK7s6Xm{RxdQqpXo1&?e|q_O+W8C5u2dz_}_Kj&&>}letPZ< z;(m*w;!~xi!;hz8t7o5fU;Jiug_NyjV@PRAmM~FemO4@f9IGDnqVxW31$v(jbuVj) zk5v9CuQcV~>^PUSj6S~aO<=stmR)I`3DuCfe9vaqN>>*xD_D6GJDaCo-Awlsfet*) zTABNNl75V?tGxMF3*D_|0yF|9aamg;5b*O#n?r1*1peDOF4L9MTSZ--ze2(5N*b{W zO1=fK8ty{I5@z2aBJx3j-ltBFVe{d&N?Bo9Sb$nOi1+W0Ku@p*d2Mkkcp0fxoAlRe zXu~@s*5%+@)x^)rMS52qlXKDG%@SaCc-i|$({M^`sB6O;f2m#MO(wZ;lWOI7UJQab)HPpT`oV_`T_mZeYUur*#`+c!}g zVS}66vRs+Aa&z>otRjrluJ84BTvNYp=9D)FY2`^QTwiO|kduY9@>0s|^^2Fog-G{7 zrJy?cS@1I|)c;CZjto4FR1`^il%!OeMKONKJH;btJ%XF{+# z-Qu85h?L&M?=S@RinoZp(f||;MMH;#8h~#j_e!Ir6Cu4SWnZ(du6WMjB&tI~Fk=Qn z(2v5j*78b^o>IJ(57jg>f1%$Q30*+l=ABxxyO&!Z&c0)ry^e=x&WMiXktg}s*0KYe z!IfZ4M3?Xp>{MiNb*BXoqg)>O#`)K5h@s)Fa5JppRnC~t-tbubn|tW0mlj&c3^${)N};!VeU#iuBZL-2v`LSf8RY9e~5$Wi6e(nX9n+uy!F# zbo;NPe{R@pVyI~c5+>dxLNQeTBfw;uzcU-(`Xs{Z-t)ii~SW`v(V#T*#9cqo;=b+#(A72B*)kelc)`Q8;^I$_$_nm@Aa{FH- zo>)e=%uNpjhG@s`wV>R;U0RkVkKQoN!{odBR7x1>+jq(TzljDd$vd!_hw@d_!&v!En*HT&W6c>l5ThnH zTm`Ob_JKeVp#8%exnKgxW`n1nreh*6P0c-!crDAi?9rkz@>4<>;e!UKW%0nC>qJXG zYTHcoF;+qy`vBj5o?|cCS<5Zb>w% z)GcPkhDycPMyr9JG{T#Skf`i|%zKx&0F=O_UDPaiv&_EB+Cr)YA1xWaReygCi5!bL zg$mM*$eBCzc3r~!FU%~8RUyYzY@Rgot(;8+7F3XolN3{}aSF_gS$&xEhrg8$UE1^{ zkJ6Tch*%Oab4Oq}<-Ur}h8FQvp|YlTuXm~RUW2S$CUM#fBuxZ8Bt`7*T094UyyYVa zj9J~lFNLE{E7%W-Wc3bq#mml#(I7Spl;k^K&t$MKv*k>*9~ljsg&MP1u9lxD`2Kik z?Z?3`6%% zsko5<4XQUs;Xa~uc)uMvh6_Am&O+Wa&hUSz=!3#pTKv4Pjdo%~!ycLL`;yAA@-h|` z>HlpRf8_9yAiKS@sC1hM3l$$PlWYTgqGv{+godK6 zW&Jc!sjYS6@ZYBB3;00{(xoy`Ulnr$CHWM z___&l4kZ?_%Xq=pC)ck)y7VsgNH?fIaIEjb+1AQbW>1>y{(@sp_7v?*)ukYk5a5}gz?3+g&%s`P1F z%8pJ~x!}`ySz$E5a(lg#4;L(V=p;R}Yf~+7a_C73^Kr@9A9_ny)x-O$Ljoe3$K%>T z@8|lkrtX~MCJGdz>fdi=O!R2Fm`j1794n{;0O$sA-SgUG{wq6O2Y{s2E zcN7Jh3Jv~FAnye>Au^^T_k%CLeBGpg`dl16oAA9xYKG3lc%6ogJ;6i@3<&sUUkIb# z)zzfCp}B#ZA2v^LH(Crl=8+b5%*Ted^hndig_H(9W1LfiFjapWPWTMJCw5wpPhJz1 zepkf5z0nh5w3fd1Zn@4x^hQ&%VY1A_J8e=~D~yaco0j%tHucW62v6?{G((i}ch1zf zV060AK6&bVB>zb{tUA=X9n7X0HCS^@~-ziVLA`lfZ6Y75cE=s54=l% z2nu+=J=>+G_*tE>#zi%Ml%C}YxIFKLmgb1(AX${_J1OtTJP1QJ+9QvxF3eA#OfaJj zwo_`mesw|XGgi|^R)T2F+kH}3huKxep@EMs56T5%azGhKK4koB?gs=>G@l;sdvUC7 z#_#fWwQf{n!-0i&lZo(2V-ZvM$v(7O2SEB_!{O4Bp{^l0#pn%WrJA{h_9F)_4@$fA z!SxsQt@Octa^^+buW1f+p=`s?(zf$I;BCWq@=sSCjO~hh;^=386AD;&Q?#Cc^Oi?x z2M}kIZHuR3jjq;MOnh;+T51v8jMnXhtE&%LdB07=+Nx^tT5V8SC;W6rzNP@sjz|7# z1S))Xv7NWFJZy!qpzNVk&HM$!_RDib&Azkl4J1NX=68V!d&1=?>rZ0=FSSNU!*HM%4M=6t)r7vi#96w&MN)S8YMi{*^}s%9xEb4YQqth^MXQuC zwTRqz_wkiQy8y`oqOt(pKqTe9)ffqTQ}5GtZEfS zXp;_>WiIVx% zFK*PS)>5PkuOHhZ0Qg1kb6prNR#D^VgioUB5Ymqa1I@m0{_fxd&EQ81xpYVj@;N$i z(xj~`J62&h%t0-U??6#s_T!eFa2NP1D$Dzs)8>>N+2!%-IJ_`uCIfcN#o8=$T(1A*|5-{o@pYlJ>?MLnVTM_+MmzMO$fu@!#kEl@6I3 zO@Y#xD|55PqRYs88_kG}xzN*qT_yj&#&XnuO*i&VkN&98{Vn`BKUj|Cc}*_rTH&ZR<-OhwFm`f7fB8--lTkvrMpF5K+ip-XD>utSynFT|%VXz9=uxx9H_C3C z8t@+Rd&~Zyv|bDg0A6YM9k)i$FpW=@^+}iXr?1NZ`2&J*YFb;Ua1`;)-)BMtX04+< zkBWE~t4>6-P;qm*N2nFKSxX@aEgEsPd)=GdX934YyaEIC9-bpfSUe+X#o*?0FEk^h`XIv0U z`>nrj#(f$q_aFk5J7tO*NnqVPr(Dqn^QV>Lh($(}1lrmWV1lm7&CihI^_Nz+B)dK! z7N1PrrhQz9(AT+THd2v3SpB=7#$Z?~$m0Vg!w4LELp>0)uQ12voqSL4(M>pYw%Mqt znDRb#nVM#za3G(K#Sp8vQA|Ec!W+%5(apbw1a94$1drI=2*#XZUs+ApPymkJ{$v820LsClMO6*m9 z%iwOrCr^hi)<2RX?Og{~BNJ>hg9}PNriX*WHtKD+_%_!>|J;)J$CVr|ZWoJx_kX`L zNgQ<4#_dgHauQ(v{~x8to@D-?-+7{?lM-%h;&-R#xJ-%LPS0?06FHm}aF-KpoHcMs z6RVwda03$YTwdX&nkKfI@+AT;ytvtkB`$Ap`4ewl6mWAB6N4-><2KE{~x|uVxOxlE>R+Z8y6v$<3HB_0jKot>STYi4#ccis+c{SIv1S0n(0PK%ET4+F!41OtNw0|VpZ$m#9!$>D>Givx#` zlVg>RliDg5_N$oPU+T*{Y~koDhW@#x@(5lAUSfY~2DdU9T)70P*y-1&NxRvEcPa#= zEM5UNpupUYtDEcDlJaWC8ei&F{3N_Mwhh7t{8OozZZpnPWP>hir!o8GOMF1|iXuSh z>3-XTeSWtqC6N%ODIiAI&^vnfdMHMq3Y0|d(x;^`&xN6Mvvr-bQ+1-3eO%&Y90y-& zQ6OU!CQTknU8#ugPaT`TUA+;)WXgka{git6h*Hg*5bTiQOD5FuMFk1_u7L3IGlGn+ z7Tp0>wf0Fj;xegZb$o~#%wGUuU`tgX_;^Amo+;(zW3d{{$}%{xFwZ>liyrk-XMCTV ze0Sk}GS~aHM$JB9gExLvTQIU0ph6s`>Uv#VZ%%hGDA; zS=|ZWoOH=6ZW(H}-(P#U%kqC9YJ{enPtlIPUroO%Zh+Bs_bea8W6cFD&>9p?>+=^D z)mLW2&9Oq3iuX@s>9y`Tn;W*C9(K^w+dim?BU`0+_=*Y$_BZR; z|CP(Y-jl^%hF$>e{dW)`J;YW$QEjW#u9|cjT5@0~^R8;4@K`s+HQe9!1OV$WEJyCaXw2qO|UCm$aN&Nf{B1%cCO?;nPc^K}&*0rx}n+ zT@Uibi)*<`6mAjK)C{A!&+khXGcgIPIH*Rf-!|gloeazJZ60z0T@*GB>Tt-olv9%E z<$djPP9V6Dr1SRMHM6$&7*{g68p)Kif5Cre-h2ZitCS4e>(^xbT8tq`oKEP0uvm)X z&*@@cyreqH7NYwxd{JuPof-5>d!w!!TP!Elka6JgnaW{L@7zB$i6?ho84EQKJ?Oek z^=I3f!QHUE!_vn;>^eM3-R#37jiN8D@p|97_vM^TH^|!EUT=0D`%gSynR-d!9f#}L zvYFX!K(NWM2>6Y2s623}uj(#^Hf%63`|8O!7}S8nDi?mlInooB>>b40m~oKZ`Bz;( z@yGR%W;RO3f|lP3ipfnUJ?HZE>j{!5;dEg7o~ifeGa7_?ktJRf5-c1maR@bPWVV@1 zpF74zrznpV6v>M1jD8t5eMzEa`sDfWF#CaXFLVXY773+#d{pqzYk`Z~70Ow4@5(er-#q7JRkE z!PZ+AO0V^>=n^UEK8Kn_LdEQe2^WFtFHL1LchphL?wGhB>cB$kI1>P`d|Mfnp5>Hg zS@`$!!t2kh&nfXmt*=x42=$EHNm=mz65*795_3jE)x{ga0PM6lE-jAtn-Ff=sd7-3 z%g~}=^iHj?E4BmDRB_dkKpmwkfG?vUYd6&{0j3)M_ZNX z5j>f%Y%jEP!{Xz@Af~69OvauNE!@8dL0%-#(E zA}7oh3_Z;9e<_t|q>c>cD__aA4J>kNB3H{;-k!?Lv}r3q5UMBU7_3By_y2O{Q86B> zM4?oI7RoXU6)Zf=U(90Dk zsEP9R`Uw>H@O1tHygb}Qf?iyN10Qat{@wtsn}L6CT6_LN(kV?}EuXdz@&d^dUu}Sv zzv-J#fB!B{)w~{7(ngSyfnjKAP}4DaxQ&N=rl+{_~dvqGI=W8 zS1n!#azO4zk@%*`q#GH!eUF82iL*O z-@3GQf%(^quyNaC;ZC!)aYg;j0t!)Ghn(8w!%Afetloo64?R{pq!=UCKlD%nP9MLM~NSVhZfz}JF zG#ae6uw;~oX|PhZ-Y8vIo41?8#!6E-p@V3i30&2}6jPqV=&(ZcEX(Iua4khdNWno_ z#~5f&?YQwSk;w;+&+eJlwc2ztSq`ZELVlYtNFG#V8|38uV@Pt9$gz-%DsLus?LBIt zZ}1OWN7$2x+Iuot$7uaofs(M8hu}mc9l%= z0OaE2X`!Ep@h|ZU2hR}sg^bRH)E4yTnvU)Yu=fo|_NapQ=B@Ea9>_Kxier&7x3E8+ zJE}+*S8y?IFb zYyN{IHRkQozCFxEInPRbofQU{9mOx@F}DfIk2&o6h4lMjooG5;!y@4;V^r&-EFfD-YrvjFuSrr2`t+ zizB}gStKo3s}R5&Y6ccbi#)V9y|DkV?%N12l@iQaX88b>?>{u%*KJ!Q6V#87`6sCug3Pm4!eqtXN?D?G3L`?^OtZ7KF-S96?JhoHrxJ_%N7D<^~{- z+%#Lc$QhEH7$(8}0vK0uq#uveo4(%BUQn54%A-OoIZ&ZaSXY%-Ax^(CBXOPd{}JN9X+zEBZyurn3@QNE8a3qtZz?j=WNh_(KJW)l8nWK2_E3Wxn9xXycFEzhzbE#V@v^m?-?_z z*eXw1#&@z=|3R#Dk1dWO6tLXm^>o=)ur@NTP``mEv_srXCluR|2Ce(Y>A=4h z?Xr{B6OezJ^hDnJ#_8nIVQZf`LzHxn6^v)#sp~Q7Bzpat`^Gp(!Uz-c0h6j@MQ0r`%>n20V6Z92R8W1{j6bg=-Y1D=Xc+!Fd zOq#ICQw(SyWr#RmZ__*tWuiJK!;!aDT63WGbKH%r1OPdY?}}Zz_#;q3g$Xx!4cug| z_wj+qfp<}|IXgCm428V{)dhm42Ql!jy|^LLSa543r$KL#CE+r9 zy+jirg*xY6JbqzQD=iJeTKA8zZBActVNMwO7JXnO)f^LOo0YvLi)aK)4?e-Wt~R}f z)|Jej1OJ%c*{Y+nmZ1F|MefAgQRPEkFDVZ$6z-Lr9O`U*)lS{LVILpak^c1kG^TzQ z#F;kEIXuCK?(frFit8jay`ERs7H}8?OfkUiRNBV=BKn!I4v`>%mfr770-)FJsAm(tLEc!m}1;PKY z^Y52`tU_=M$Mt0R>zlBA{U9Q;Yr7pp3&yT(klmcQhm>qahs85QRCHcZrzq#!JBUihc#||uKY)WBJY2&TD)_lFZfML(4c+e zU+#sL+d-I(nBRf$#9?@$C{@4G0@jWF?{Kc-BeIk(378fE-qZIMkAzx%MlyO(QM(3Y zOhK+Vryp^*q^5jC5md!EH&{@iVitzZKhMtuhp1=HttRNwK3j={L77Qa$Wg8BK`@

      D|Vb}SYRkQn5pa1fR8u}Qw@>5W0CVlGUCvMc7OHT z@3_m<3I9cy3($wjYH3;?nGtBM8gbb^5+C&&;YL?@m5mlfTW6* zOX)iITe3q z!X_)X1$5&dEYyYyd^@ievJ!OFp9^fF7?Mr?+{MU3y@J?qiKnUTtbFrdMsbQVsGU>A zFy?A+`W}xa^abQ-`NwEG^{je*e1HYkB{5e#Qt6PaCG6ueD*pEfFQ!SbyW1oLY`+sw zt%97d^6fyqj#cl+ITkz`qSYaccOxfEyoSG);wW>gRe1CZ7n-vaJsmj2QxibHp}d$KD^ z1YI+x`yo=U?1pDu2r@gEy$+pcO02n6A5V*E-sP&PMdqf$O)i9P|M~3BNQN%Ln|ru= ztBLa#x>6VwvKMI9NaU?g9B|hqEpl2MvuDfcJ|Xd3z{>S6*{|sQ?Dp>KT8SmDatz`dTlTXS5X`?wNCx9s*{xe1qF^b zp5Rs$O~-sEv)+En;C%n#gJm91?0y$AQUJocWEHdlq03{hJyuFUaqBztXQ!~{nkZNC z(TWI1%0dj`5xD$t`)}`yzM^}OYL~(F4C3B}PDUK0C{|c}1SuFN8hR_D&BLrcVe$kD z9FzAnN4&Gj&)d(8mL*aY9bHtQ_Qbiy6QH#sI_SHnt;BWWV;oN zC^?HcMvU7T1gMZ6yz;BGGf?>@>>A1rTrhen}oy75quYO%V(T6mJfCQ=H`byyI(m_wCR&?BL zn0j%N3g>`O!?gQVb&@QtqS|PLAI5UwZmv`YBdTDsA^qKtz;TP*DVQ39zb__X4b#VF zLT|5{H2Nx$1y85J#s>Ev__tuyDs`W~Zx&h>AYYNA3ep>bxzI*_B8pJi6U0p2T>m46 zh(_Q&@2VJLQeRsHR$$(>2^?Acr#fiUVu{6 zO5GOuP@;AF{I;_}h6fQYvS}u)hAlylF#~Q?^&^E$r9omEy3lHWzLr~;JKDBy(rnI* zX(zYPa=kM>=j6d`;~pJ4kAQbW0wjxY*HcmVm!mIm{zGavS#*%!n72oaj3_O8YN0zh zLEgZmp`Emx&a@R(hxQICkt6pr1Emt|Z}q`F5I2c@cyUX)0AL zu-sl*4w5VSCiHVYahDzKA@bbPE1IGFQ3mK9l=7JmjxWR$U@d#rwFj}14n`-?|R_HYHeWNC4rl7_qB1-C(%=%Im z`OV2j95tHQCa?C?=4!BRmhE~@Qf)e$hbo)}BYg_&%9n2+Qkt#!>4U}j^5OK6qTCw* zO9=Jpy@VW&nnEg=94&cDcI}}GJ8@rZkNsK3$QBULndVkYxgPBQ(-@sunwzh&h6So5 z3L(8KdfCIbBIU>m*R!uTlaf;B3q4Avw0|G69qAut=8FR|@Ky5tVDYpZlxI&etH*qZ z;=XY$MTf$nP|YmiKJicEc`aiSHq)Ebjwa!sko3>`i>N z)>84mz5IyXpc}l8tzX5}q!+EPyLBAQp=5=`mOH)Zf5r1wi@&m}R?YmveiRozU_(ps zr8vR$qiFOP<7&L`LW|$K7LH$y^e^>XkB)=$!kt))GVRD0Dp%xK!{_@5g)xE%ex$KR1StQ@bTyG zn_rCf`Bs5_jyD%Hi`#Bd^WgbVfAQehJ0Wn=m{k)NpYwA>DE=_$%RIyTeDJltU;q@B z)G0CF_oxcsCCylP*+2WXgqH)1kO`Ayg|+qd{B7r%g5c5z|Ls`qPZy48Xli{gU0Y~) zYVqkrkbIvs60+M2Ga!{vHaEVF0&*_E$N7tRFh}XjAZe*ORH#nTde z=L|Jj(2}PE9Ws{lumM@Ug6^e8q>%s{Qj93L$rd)n{d}iw3dJ>ubQ5S?dg)^vicR~x z#rVU`qO%3%%J~k@%RcyvxXJrZas$p%Dd+sXM&H@B8VH=w%rth0x9`vCzEw04$XYwY|ephVq-UcGiuS1T1QOm)(2EcvX?Gxuo)LibLq9B2E z;&dOi7|61w>Hjd)P@`twab}tIQ5zpN`zhObt*wy9<|s{i5tTAelD4n#fgT@lNpZ)Dku!+8?%viPGNGQKZcD@gwo0U_jWP4WnS9@>$+>zvb{ekBi zY7VNbW>zbu<&^LNJ9vtuW_wF-?}oVh47MG(21kKadnSW#E#XKkkRY}l?+LOE`i*4p zy`u$_L4Hd(QN`Bx2QOL*N4{?_qEz9#eMiFj+%isRdfI(v^W9&4q)}}w{HZAd0iI1# z|3$^yGNBEy3}!NEsnbl zCFk0)bMhZkY-aD&j+QH`Y7qR{vNkddT1k}u2;pW^8n?2@TY;tn=zyuor*KGjisp)% z%@CN|fViB03x~Oq4bx_a6#`q%X6jo}q)eDr@si--_eoFf)2(+*TO%`ov!;e0H}%V$ z-etapOOL+$0dGGF)TG|YIj*ZfW_Sou7twgT>dN)fumXsQzVB6BOQs2I`|}Vir`0uV zhsBahr`!Ub{d0B1Y>?gJDLQ&D)unqLXG@d(JewNykT9=1=yPDQqI!lk+5y5R1>fM^PIF9K$)ga0n0qh_^Fc8i{plh zMbubjqOsWyYvq16$H3a3myINEZqji;wV5ke|MylGMsBr=!t(uW@d+_ylB9pjQCBLu zexBM?1f_^(Ysu!vxXm@)iXB740-qA`h}xq?KYNS*l>quJ?rjB)e0ibm8b~hwZsWFI zgT*N!`fL{ou%n^2?9&Po=^s$Q0UdW~T-zj9&sFbDKl=L$vDo452!H99X?)`dxZg^J z*f458_Q=|4b08oa>lR`T){}b2I6m{aVR5UT8s)Kx{jJyP5+TzU$sRcf9Kab7@Un!ibFcr7a= zDusZs)-?R)c9+5`n-KQLW~vUp6MfI(!R#!`2x^R&Xp{}KeiHWl_D-ke&r_;TNsW?f zT|m5P6)j<6*#}lxHJf;7P`Eds&Fz_I9?whlau`GPGScrutr5$D>(D`{?yywG&FM;^ z|FH--Sv)8j$4}OTVd*%u21n*Z=81Y(-sYcL(|p@|{N9(&H@(^mUn9uad6YYCE4Cja z7%(ra*OC?80j74mE6VDD0={Ni_-o+V%U8M&OH~}kIjpNHBd!Wa>>?H&^EoD`Yuae{ z1y4ub5oRH;mYGhP57T40*Jz_>r&-}o3b`{HV9BW@|bteu*qR!w^YGK#kCFfgD zK4qgGj#EOyI?-mnb5QRe#hDR%aE?VItX|Vo+KH^=Kx=a^!G}Rs;kI7Hb9z+G?BuC? z%bmcF*%XWc;Cm6Fbb~>cf$z<|o=Hu?IF7vp?}@r9TkjlbLZ(lSZa4Diy4^*2@Unqi z5>_{pD5|y=MB~iyq`P)^6>03RqB+sM$%Bk~Jl+;ruB^*_P^j1$3AXsw1SRS*-V0GA zSPbSE@;_|leOx7|DgKF-Z45slUaBX61uu5vd}_2ABj5Jn#~3*ah1)(udli#4E6FI7 z#Vu<~k%(TeVY-N6Vh4eRZ%d;$D{!HVf|<8aJEe@Kx18IXStA%UrD8q1Q5h}tAzL_q zEKhVIifeSA3A{*NQupB0Uz`l0`VB!>MBRf-GAz zvL4FyHL;yrH3$8{CTIC0xzSkG?Zfr8Q%)s=;jDd3S>m=dpF%c8=2o7kHQQ4xxPxY^2F z*|mchcVY+0%q+!$qFP^9DrU~3 zFf(I_YLo&{DK-f^Q>$F_)PSjddY^ejWsS4r5f`k)@)bds(jm~Xe5&ghjd!6;HDwRf zzt$vX9Y&Y^dzdm6b|QD8W%Ru}YJP&yBG+sjl7GTue7gA)wu+qiG^NOKPBxsUk~7c( zb~}T{8T}jwTH;NLGqJ-N|DOaCk8GJuSszm(-kdEiriSOAA&L-J0=l~=rdPKY8LYc& z-$U}&RS+|e$6agKT}|+xdyxdT><0n}3==7|Z@6}bb#++o76~S-KW|vr7@2=pm*pD4 z$l&IrOL<)V%0$cC@kAE86>T}Dd$|`NCK_N=-|;&Ihu!lA{XS=c@+_!or<{X{`CB;s zIikoRh*gJoVwKt89++m26{BI_m>|J}Rp;JYCyeME6r~S4kJR!c$6|at_y&&3DIHH` ztjybp_y!lNZAZDq)XUSxr|w3aa+BABE8DY2teDN;S6~a45uf3BLE}JrEkGPKx667! zytUV^o*Yql<3;5YcoCz`-GQ$20ZYbCEMQ78Iw$Yo0+Q=LAw!F7E-NFb-kPtKryh7(k3byk?zmOK|?1OC4EeU+0sv$Qx!nA0{wz)UOt zVv9%OB1KEVhfUf0A2C=(zIM1oZsRZx+6==Ojd|WZTq~RR3J7dj-N;?R!9xdzOJB5c ziP3h~F?@ht6jX^y$Hyn>wH~!W9##7Db*Jqv*0v3pKw65Q{xBCq zA(iFsjN$Cm-n$48aWtB4BM5_GomF=S`%mxa^T%>ef;BX{rXIgwC6Sl!WL_<1M0jXd z>lpVXtH?R{Ug=DDHQVDmw$APBc5U9B)uWd`qj|F7t6-f7ujx z?^_WK9y>$CTaUuOjlKTj1C-X)<8^Aqej<4d^pf`{Zhxm9u^BdFFM%x_ z17y5)*Ar1>TQBMrwz}9dI zW8}AO2eMWgM?0|}{QQ;E+*FS)ytRsX{5{aDh)DTef5(r07#Usb z{|v~tihF7NfHT^NV&kUiSap+nK12J1Fg00_?)bSioSpNZgh<_?OM8QYT$xmQPLj*&pH!ztO|0?TvOe4#vYXwG;3W$oxJg#;wTEx!NC=?jud8IAqczxU;(* zBglDRyW!w0o|4PXOqOvVJ3ydFcWAKXa^@rN0%GV;7rgIy6qNteJ-~1W9LK))H??kV z+QlBjH>lIt1M8dX(%aKN7h_@jW-W|01<`mmyPdvMIY8D0wF1cIlz#dzJM&7^uPaYt zJgrMkaeNZuy_$zBJ7#G6VMcG={q_Kzamo1+MVI?(ozS{FQFZ6BDJ^t> z?Ob|RJt3;pM1{x8sgM`t=s=MFvv@l1w@_13InH^bQV| za~UM)-~uz?W^x} z@Ypfb0Jx6dH16ywg>(tj<`m6D&@68ru2Wd%WW`f$qW8MUCPs{xs}2-J%GFPoA-H<1 zlFy7gjm=X48c$lcO4;DcFZngSR@Pi_h4%Q#fT+((Fg~>}h;5fvlV6NxXcKxha|=E{ zzp|53TsZDwsTo2IsjM9`aZ@Q{&W*~*wPVEqdfKBtx7_A<%vL;CZhb!x-n!Rm1Rclz zDl)K)4tG?Z(oJidyvu@Cz3nUaB?oeTNQNRb;Xdx~JHAxdW{|gZ&OF1$<9blJc0r1g z8=&VM$g&1F&`rO*bpONe<&~z=I$*CwLe5`=&B<7r@YK2){KB1uyZqS;I>=}+;RD?2 zO%FeXi;AI7ltr?$!)?w>So2bPvG&8&TsAT(1YHr#Mk-50dU*fE@bChJ1hOPz43l@pVCa|+MlF; z+z2smJ${5>i!kbdSRf2wBV7p$xH<&pLe@n(o-WA)x$HLdmFs~tUSg!b@D`KdYH0pU?!&A8@?X#xh`;?I{H1Hu zu5WBdWrDvZ?i_IGim4jZ(%bc*G=Z=^Xi8bBY|v>i+5}Uv8_%l+*l|W5f7u~!-cL!RmFqm0$*DghrjRk z0D)GwPVOr4u%HQnsB1^&`Ub9r)5^|=LYju91C&vQCqRn#1Y@+IWq8dJdIf<(q`!vv zgZ3hd4UgrIMB}VvYx~Q`zQ#HIG09fS1OsL1r5+Rpnk_?;rF7ibJXq$PqZ311Zm!~Z zU(_dFSmu)}GGAYJqFJLJD=x9qa!u=x7BL<0i4m0Ejv~xEx%iNxY&Xt_O{m_=c?4$= zi-PVr0WFhjJS5}Sn${e35qcv{!MZk#2>OetDjo4iU#AW4L8Qm8r=@;g^tG!2+n!3D zc0z|NZDw%3Pun}HSSB`fwLMu!XJC}GZmvFhiX<6(88yjGS!m*2;5u6$+?@aUyTkZg zk)uuc#JX@BwYZ?Tzsn}NgY1nf;1)S(v%u*GjGaNx1|I#vG#Ue-h;yRWW5rcNcbF5S z2j1POCf8yshmHYp{y$9kxjw4X^uCjoSmSh%kUXbJUwK9K;w! z2}d_iGWv(_CH7j%z-X*4nAP=Lyr6`tkLr@xr{dOiR=!Ma?9w+j&?Dl6SYm|1$s!0y zB!qIPwiDH}axg}$kQ=#zHs3A71o8^6wx*vrLvstm+s9u*1z{#{taiM9nDH^@ij`0{ z*^96X`YM^WKJ_1`wdoF-pm=w1>bQ12)G0w4H;i;vCq8M@W32^jLo30p@v3+uQQLfn znBTAK0dZ6O0!kEZ!pgRx%Sb-GC_r|FSmcV2cH-nNwMmUo5UCleQE?CCi zZv6D^$!XcIQ)H627A#LUneGhh#$de7h_`UD1T9wOd8EA~?m7f{T~z4G$yvgKfQPTni{bQ&OoDbTlq*YnE4`Y_&R^56K;J8rpg}qqL+=?_wMnXZH(8qlQ z3%78Uyk`}z!JtF3h0flbmozE-5P1~tP7cZM3BqNa{lwJ2Ip6T4_WephrjH%nHLp5= zLK}0mpjUcI_|_uZ@odYxF!y7JK}oSyTnA^I8-e%g+bAs5UOWF|)-{AF>vixuXuuez z-%vIH)<>#h@An!98 zo@dC9slQl_H-hUdZyL|Nyww^PEqP#plJ$LLCnOfXPgH^${;^~0x=z2oSb06&m7MAd z6L*3S?7t0Ky1@ zJ9=xcI+nDDB&rzI&4xC)xGOq=y!zw^T%6|vPxGQK-+V1uRfF$^w>&vJ3CkgOJ6mE) zpSbu{@c8VA1`ZhS18%N=#lKCfSSLWzwhGbe`1=fZ7K5IM2J9ndRH|^Ihi}>rRT(`% zdke7dCv&MTTB(-eef=pr$n$L~;6XUX4CbFsY?QMJX5K_t7#Q+Kb8Bi?K*eR1 z3q9f-{+1Gbo%H>wI(l%`2YKP^x(~2mFB_E-%lrnqsH&us#l)7GIRn3ycuG!F(V{YE z%p6YN(ZdgAgP$~F;6mb?(Vi4V&brO~3EqHFnj!DR=@Wu>WP#Tr{`U-{doXA%$okP~ zOw~owtCBXZeW$%S4EvMVrJp%1fmuPc)|qY(Y`gg18LQ7)(ildQId7&D` zugr|^oOFO%L}jrieKGd30(CDhXFkQh!{LRf5!S929_9ZYElF;7RD~T$Ms{K+{cqnq zEDSNUpZUM9$7FRU8QApXG$(Oby5vPCAy~9zTxSWmBZK68XS`%gLyY7DC+y_6M%ZZo zokW=Y%~=gLGWo(;9X3B%!bKOZ%ryDCDRXka3kxiN@~MjiY-KX1E8Blymu&7z06UrN k- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml From 4011ea049ad81e04de005154dc34580bf39b01e7 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 23 Apr 2025 15:48:23 -0700 Subject: [PATCH 123/156] [Word] Add snippets for APIs re pages, panes, windows (#974) * [Word] Add snippets for APIs re pages, panes, windows * Note some types * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback * remove jquery * map objects --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + samples/word/35-ranges/get-pages.yaml | 249 +++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 27526 -> 28077 bytes snippet-extractor-output/snippets.yaml | 420 +++++++++++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 689 insertions(+) create mode 100644 samples/word/35-ranges/get-pages.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 0a4b1d017..315c9303d 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -337,6 +337,15 @@ group: Ranges api_set: WordApi: '1.3' +- id: word-ranges-get-pages + name: 'Work with pages, panes, and windows' + fileName: get-pages.yaml + description: 'Shows how to work with pages, panes, and windows.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + group: Ranges + api_set: + WordApiDesktop: '1.2' - id: word-tables-table-cell-access name: Create and access a table fileName: table-cell-access.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index a934f0e69..be093b51c 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -337,6 +337,15 @@ group: Ranges api_set: WordApi: '1.3' +- id: word-ranges-get-pages + name: 'Work with pages, panes, and windows' + fileName: get-pages.yaml + description: 'Shows how to work with pages, panes, and windows.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/get-pages.yaml + group: Ranges + api_set: + WordApiDesktop: '1.2' - id: word-tables-table-cell-access name: Create and access a table fileName: table-cell-access.yaml diff --git a/samples/word/35-ranges/get-pages.yaml b/samples/word/35-ranges/get-pages.yaml new file mode 100644 index 000000000..3533307d5 --- /dev/null +++ b/samples/word/35-ranges/get-pages.yaml @@ -0,0 +1,249 @@ +order: 4 +id: word-ranges-get-pages +name: 'Work with pages, panes, and windows' +description: 'Shows how to work with pages, panes, and windows.' +author: yilin4 +host: WORD +api_set: + WordApiDesktop: '1.2' +script: + content: | + document.getElementById("get-pages-selected-range").addEventListener("click", () => tryCatch(getPagesOfSelectedRange)); + document.getElementById("get-pages-third-paragraph").addEventListener("click", () => tryCatch(getPagesOfThirdParagraph)); + document.getElementById("get-pages-enclosing-viewport").addEventListener("click", () => tryCatch(getPagesEnclosingViewport)); + document.getElementById("get-all-pages").addEventListener("click", () => tryCatch(getAllPages)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + async function getPagesOfSelectedRange() { + await Word.run(async (context) => { + // Gets pages of the selection. + const pages: Word.PageCollection = context.document.getSelection().pages; + pages.load(); + await context.sync(); + + // Log info for pages included in selection. + console.log(pages); + const pagesIndexes = []; + const pagesText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const range = page.getRange(); + range.load('text'); + pagesText.push(range); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Index info for page ${i + 1} in the selection: ${pagesIndexes[i].index}`); + console.log("Text of that page in the selection:", pagesText[i].text); + } + }); + } + + async function getPagesOfThirdParagraph() { + await Word.run(async (context) => { + // Gets the pages that contain the third paragraph. + const paragraphs: Word.ParagraphCollection = context.document.body.paragraphs; + paragraphs.load(); + await context.sync(); + + const paraThree = paragraphs.items[2]; + const rangeOfParagraph = paraThree.getRange(); + const pages: Word.PageCollection = rangeOfParagraph.pages; + pages.load(); + await context.sync(); + + // Log info for pages in range. + console.log(pages); + const pagesIndexes = []; + const pagesText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const range = page.getRange(); + range.load('text'); + pagesText.push(range); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Index of page ${i + 1} that contains the third paragraph: ${pagesIndexes[i].index}`); + console.log("Text of that page:", pagesText[i].text); + } + }); + } + + async function getPagesEnclosingViewport() { + await Word.run(async (context) => { + // Gets the pages enclosing the viewport. + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get pages enclosing the viewport. + const pages: Word.PageCollection = activePane.pagesEnclosingViewport; + pages.load(); + + await context.sync(); + + // Log the number of pages. + const pageCount = pages.items.length; + console.log(`Number of pages enclosing the viewport: ${pageCount}`); + + // Log index info of these pages. + const pagesIndexes = []; + for (let i = 0; i < pageCount; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + } + }); + } + + async function getAllPages() { + await Word.run(async (context) => { + // Gets the first paragraph of each page. + console.log("Getting first paragraph of each page..."); + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get all pages. + const pages: Word.PageCollection = activePane.pages; + pages.load(); + + await context.sync(); + + // Get page index and paragraphs of each page. + const pagesIndexes = []; + const pagesNumberOfParagraphs = []; + const pagesFirstParagraphText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const paragraphs = page.getRange().paragraphs; + paragraphs.load('items/length'); + pagesNumberOfParagraphs.push(paragraphs); + + const firstParagraph = paragraphs.getFirst(); + firstParagraph.load('text'); + pagesFirstParagraphText.push(firstParagraph); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + console.log(`Number of paragraphs: ${pagesNumberOfParagraphs[i].items.length}`); + console.log("First paragraph's text:", pagesFirstParagraphText[i].text); + } + }); + } + + async function setup() { + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + body.clear(); + body.insertBreak(Word.BreakType.page, Word.InsertLocation.end); + body.insertParagraph( + "Themes and styles also help keep your document coordinated. When you click design and choose a new Theme, the pictures, charts, and SmartArt graphics change to match your new theme. When you apply styles, your headings change to match the new theme.", + "End" + ); + body.insertText( + "Save time in Word with new buttons that show up where you need them. To change the way a picture fits in your document, click it and a button for layout options appears next to it. When you work on a table, click where you want to add a row or a column, and then click the plus sign.", + "Start" + ); + body.insertParagraph( + "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", + "Start" + ); + body.paragraphs + .getLast() + .insertText( + "Use add-in commands to extend the Word UI and launch task panes that run JavaScript that interacts with the content in a Word document. Any code that you can run in a browser can run in a Word add-in. Add-ins that interact with content in a Word document create requests to act on Word objects and synchronize object state.", + "Replace" + ); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +

      + This sample demonstrates how to work with pages, panes, and windows. +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      + + + + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 0867a4eb57643bd032635be3c3b3e2a946e57466..d614523682d32c83fb6646febcbced3a4eec439f 100644 GIT binary patch delta 20259 zcmX_nRajh2kZACM;1-+#26uwH!{DyLCAb9%IzVt|aF^h2!6gvf-QAtw!7u;bZ};WA zlysMLN%yIc1(?bem>LZv1iM|j{n`XwBofGm<1!njUrxgt#g%tD@9rn8JQR4&0*A8s zD&LCLUd%{Pj2%*-%G-UGgv7$7nwy02j=)3P#kugtZfm)mnM|;Gdkj`*UA)*y)Ir61 z@8QDBG-^BrUg!gzZZ_BZ?(SrKDHl3nawol<|LD;>jSkU4KG9HH+3Q3 zRIw0bYHQ7@=!PuBO3UO%YV9}50OeE26xih5nSp;`M>xB0D9O6Hx}JQe7TxS zGMfyPjrL}i?KU5_(~=ZOy;RIKbQ_juzr-D2PoLL(b%pH|ey%}_{45E(AXO4!5h&lO zrTxJ^OV(&N*8by;2lXL~?O%4#0=6q;z!hVnBIpgQ^-4Gbf%|hO^3xf%b-t%EZ z_1Dx`MQNm3f?0>>aA~EnFFhAqmJqFZdR@G{SyPgfcyLT&+k9i_fI;yvM+$-f&z?1_ z8N~cX zobrDcKSB$>n!kvZ=8%h4ZbY|UJQ$3nhcJA9?$Asj%q|Xd#jPE#9UmrQu`C$P9q~GO z!ZKbtq81f!qndMtZJR9IUs#6fjl2$BGKx=#> zvj4#f*?Wpjk830l;KnN37##4NQ1w+Zus{hJMp@R@*dDE^s0$`R6bZMU8Rau93hlnW z3oF-$56|HVHmE>|{eNyeu%W!{QS+QFNQ)_1LWf&9ZK!cVW=MPhi|?GdRP?*Z_uhac zH;X~DLT!+5|J>tVB!`vof{v4swtDLoK`s^iWj_u zV-dNC!kwJs7~*ei5NA;?vF%Fj1#u_LP*ky=)!!UB>mdk}-|;U;J+ul}vAVmTz(JoO zNeS;B9iu-gn$)~ZxEo+AJB%rn&ylwo(N<$=G!I<7LpSaV=*>`OO09hSyTjZ>S>aA2 z9=UqW=vEAq9$r2xAIj&x15SrGO&a=UEosepiMox2XFb331L2)d)3z_#COy3ie?hHq zKGISbjPwu%)`~+y{4Shi17m}>oA0#4fv;o;o@7YZea84wf5bSxj3U)9F%hn=$Mo2_ zH#N5@UW>T$(<5X%6-QW=pzwbj7~!2L5y@&seq=FrG^_}>D3>V-(ErUuLA~Z*mALF4 zbKi^ythYdm+cAqAIQ6Np5s|PsP+3T&kaK<{Y}$q(lTFsa%Yum>()FD79+z@m(wyny_!Yp{7iQv zbAbcNmKB1F9cQ1+CJaw00&_oN0FqCER?3*O>_irSCRNvEV}n~|8xC%ChKOMnZ9n%Vx_?KJ_C|?uhOVC{UZlT%`tafH?ZbbcM1!-KGhPRuq&{DN1^ug|SYu0nyPWfT z0z1S-qYUG(HQ;q&DANk4oG$$B+&<+<0-~2Jm)QIG5Zm?k`jj)V@%ntWkn{Fn^md&B zdA%}wx=ayyeQJU{tG?b|RExY`b*;RvY`ngRyj?szkwczd$ltMc_BO6!jUcc3!LKsi z$zAWbZ`DRk3ugy8ueT=?A}^IjFXioz`PIH<0=K`4+wWeBSp9|~!A4KX3s(@gv*PW= zJp+{Q+BH1_*EL;bIRAz{o#*{eh(Dv7yZ9^#2W`ljrY{i|7p~okzxo+D6ET& z3NWOu^mG!xp?{q2vZJ~gV{0Pa+azwdpaMNncQhoi0^Pw8@r)NHqGI$l?nlaIG=!CH6_B@zNm>7-Xw%=kdkh)v5iAgq3hsa>bOo(!Iw2{T&pR%FL&D zL$zt#H%=mn%CEx)hlKIb3<-Jv_BB~^p|t~E&~7s=5B__juQQxs6_Kqe^p5a3Yu31Pz=GP!F{ zxiwU+)YU3QpbV$H2Fg5`yJ4QNvA*Hf)`_j#>KXv-ENRhUz*xAdK(nJRoP#%Kk=De# z+z?}!#T|&gKO#cn*G~ysN&6fpyYT|mA!BQ9o^S*B6g+5xZkR`C&MH^LSBTmGr5CQ0 zAKsmOP%>W1T}yov9{5Bf=Ig55DV}C=r$n?j;;6U```|T9OlPN2$JS`DQJG!)x>11N z4=k7Z${J$WVGMz96}eNyUnqEA#28Sj?@{$8{!yXQYW{_s%7b#>Gv2R2NgfzN{~fWN z`$h5svGLSYO4QfRY{cARA`SZx~z3K64?Z7&eiix4J zh7MLd6ffMXMIgg$UQc0?rt$(d^meap$tskp0`d-L_zzAo99IE3KtE|4O?fjQ_whho z0@oA(Mr<~Z{H36>MPq(i68GON=yh7;jA~3R7xjlmR{k6nd<$~m`a5a_8~Eu9yXn03 zCq~1Pu1A``3-zT7hLjDA)u3bmU`_KO^^?FDGtJ^tWpbaarHJvjrL_A!0F3SC(Gx@p zHUzz#-KGAAlP9{HPHe?y4fnCnZ@z~1#)i&*{Ke5nE8pXnDsK6LFnQxVNy!7o#yiLik~ma8?E9D~GdS%>{Kv|t4N zmgri;(Gv6R9MK%-9vg|g%)vh4ud@Z=`R3z z1iEkc?{$eN>y|u0<6l4y!Li7Y%hrIfPXxMXP@)CcTlT{sQMLu`T+mRRsOeVE8_^HT8FbGhk5+$a3DR85H$}Hk|Wo*a}rr2#P; zZ4*8yyOboxKE`OS*WV|7WPH~&)~ObSj7y^<{p+KZ+jZL-ZNB1#`>AG%NM`#DS)MMM zps&2w!?;%vVd>e}KL6vl=~zh4BTZ-Z39ARw#;GA!;N^VZ9bmy`vvk2ral$KF!&;ep zYbuATqkm=EQm^~oEyHeceI>@J!k4;UQ_PgK?@>|fQ8+hNNbG*4f93AeVKC-yRsI>4 z!`$zg`%3K(l^a1sc^kBccf^iVej~IOtV(i@v2mq{*#bv41xQgZME` zSg}~UT}OcMW$k1fMytsl57=AkRn~{OgC~hEJG1nsvZ4CfUOi)=n6vrew{AZNk( zsX4Y$p1(^(xH9P0gW~OVzCDh&2c?@DB$AZrNhRmci#r2nkoIlKk9%XmV zT6iaJ>KnOnOvM6{-pye2ajDei@M`3IMfKBX(Av%3SQ@GzrN)0^qLr#~IeXriV4Rec z6DwHWj-em#gY3b$z+G{^b(rjT@1ytc(7!>lA(x~fzVyR|4R;Y2T}xxEVW6YTK( zuL+da0k6a3Ig6|L*|jQLtdOhL9u+`XbCK0(8#vELlQ`v|m&>i`og}Dzn}MiG`aL2m zvg7eO>)A(rQTJ%8l3MIPk$Vjd*vvIWh~}4d(}kS2*+x2TJUYZntIljL0G_Nit$6}Z zsVoFuO5gWj?QYsq+bR&g$8)9^kVrDQxwB)H4b}gwN*y$A_e z@e3F3Y&vr%Ob>v5X8j&nlZ=?%DOSMUMn~mz`s-bDj&bJNr+(2FueP&3hOY3BXwn3u z8RqDVImaVI4qDtPXLePFjcX{KV#(6ZkYvLRO4Rqf>KJE-A8694N2GH63hc|gB<`J+ zdv(G_cf{hJ`K`_qe|4H+P+XoYjh4h@xD?H`@v=}7(#n^Sv_U!gUsk59Um|x8)L@QY zr_n9%X?l+}Un8FIP59pPD2^_A^Mfw4fy4QBh2urizoOGupWD|-@4DvOzsnGpAV5cD zg+3PMr6DtW_hqf=4||`ZBHHx?Y8Gc$quag>E)k9zE$Uma2?n}P{5sh4$@~$b8A35T9>+;s3oPOT3^Gv5y+U6W{pvvws*mf?{ zkYG=z@X#_olbL|=1cCmK9Q=^d^AN?MJ%{7M){h+;A62*O{F1PsH^MaFM-H#jbA0g0 zPbwAzsvm(55`GjK|H|xb*NnfVFHhUf`Icm5TKu z4(QO;JFb{(JH<`n^_R><3{8-fG7iE1Fn8JBEaBehMJ%CHeZ|RY-5V10_HNtC(vic& zR=c626z-U4m5s9&916~hol&I@J9nE4r&ZY%f9tx|C~y1Gwej(ZSb%crX19P%qbspg zaRZu@oPl)lsKr;%Q&${@tH&p!8zdWg)eHR2AZG)Avmt*i?~PDaHh&4FN-J-l1< z0ug(gR|q`LheO_4DN%RKEEL1v4>Qj{U9prOI$<&fG;5)z#177_fR%qby6Tj`?R0ar zUM?vH<8Mm7y+YU5+*5v%yfSbTyht!-PFEd)(vFH#$gYZzYFSSz-5`6PiVAwH_rqF= zB6d`6BhilE_QjILdq+3O)2E_94PfDnw%P3-5mq)|w%qQPB%;~BNMDEdtWm}3?l zDUZlzGrPm#WoE%6eqHN&>>VbJezPhzT43I$S}_|)QVl#hS#p4VoL}f0hu<*@%CciM z^UAN*=ZD;uvP!rY7+O9{ZX_Ga@^mrq;rz#1mB{P2>W$lWncUZ~&;1?nmJjT!+HN_E zer~5iY_V>UsU4DlQLQNnqxdb%SS)jGhUFj2z2Q$W@^Z;&lJ*+Gc&_%Y;l8LgPgCW#U|y3hJL30h10q#B>1r zBkGDz8>V5!bIa2|^ArqdUrSe{Aj`tj)zOJnmao=~`jy9EoHz5)1kFpj z*RAzzcsWuuH>4$I&s7@*R{4R7q)IKwUO_knI>G)HC&B)fh^K665sCLssaIL{P6<+% z2M#(vgE~eNj2*QkD%-m--SimsDkH&vR7zPszd6ZcTr2MbI*N#@$$K-hNNUD9G?ZH^XsDZWMw)*VKXL*2b8~th-lkng1UQ0|U#mra;oD=z?C8Xi75}wHZT7SKS zP;4eJi*98fPR;jPnGQW6TASAk1Zt>yt0&c5KFhW_cp>b+r4is< zkbkong@B?#0h1?w5Zkv7PVthSyG9Muj67)4!(+Ru2d`~+sfRe zA;VXcWClk^_`ZDqo7nl&emcxYnS7^QjqQF#a8Q}Eqx@boA;Z!PVIlJ@r$H7+c%##+ zbwlVok0yjv47ck@dy0njB@{2^&oBS6NQ_^VeGHCCmx64uRj&lDum)*~r=WN^!vE?b zw9#Mg86uU^2kQ65@!k{TA@v}{#z0jUHw0ra8TLEkUDnK_fOPl>1u@N6A{8gTuOy@x z&)hLcN8fp6!iyGo}<8Kl&ucfv;Kp=1|ZwXcj$%S+!NE?rd27gYhF zd^#p$wwiLVKqUr;xs7(O2ln!kFbQE6$rhY@ z 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 VM&k8TgCu&A?EOT}l>7XL`5$ujG5Y`j delta 19693 zcmY&p5Fij-gS)#12^QSl3GVK?eE;sv-ps{R z)l_vqUHx{w(^aty6*>=9tqu=2AT6v^9fZvM6>D08WlL8|H4Y1{ zPnP9QBxTtCztAp+xnutj(Jq>;rSWp=uzX~DTEGul*F}hRyjA% z$T9LrcK^XpV5K%8%g!L?Q#jGLeUyBa5tB|s#)%7Jrxz=jvpeLbXVy`eO|{g4NlT33 z0A?K%Y@{0ECPfo}9JD&?{}3xGY!iVGQTK-xE7#<=K#uj`u(^g3uZ^(Iu996V#jF?; zg4R-NInd?9b3?{ZYTNV{3Lq~Vn=W&sp!6&KbCLIuAHM=zH%dUwNZY?pkO;VZzTb74iQQo4GaNCR+D+9Y3SE0!qe*>Ns z^Pj4v+xn@K>AZZSca!VrZVMZeNAMbz_$?dp$4^q5v|D9}!kiM?ghxzMc7xnoeQ#!k zEe7EG71h_Rgsc%1`3&18J^xk-Egu7nd8d8NUt1qD>oU9}BY1RQU>uNYhGP_1LAiV5~ff7o1!4&)Ht4+RmiQm zS{&@8D=&-lYc~4`dN${=CfoLN<3GD$cJ?<2he_ydLP-sI71EbB=f9CW70v^-i=n>a zu)kv;f^Hsl4@{bP2LmA&7wp~P4qF9y3;rmuU)NnuS~?w*Me6k#ECL5(Qt1K?-cn$c zi#6?_c}H8k>j zW?80tG35j$L2^FBt!ghT`mLX%N}Kb~iUu3e7f=Cp_oee4Rvgt+ID<<+gCJK_*r+Fn zYJP}f8i^a#%D$g+Y6Qf^Mi~yd2q)7h6fWf);|_}K_%>x5ziWrOg-D)WLr#Hae0s2U=B|6D)reY~kMKZW(ft7c>V+gm$JG4qGfI5{TnG@vrU`w;8Q ziC)-zm;e&ikK44kqdn^%IJX1zG1z9d z5sAm5Z>%`MYj}eF(tfZ_Z5TAXkkMo1r5*6k z6KWy}&qKS?+H^xG7Mht=H`exSQ!&9kIBy0yScYGbPA9Nt*aYr=E_;yFPmw#u`-6QN z@YR@~6^mIRp5YB0LDn7P2Mny=wihQF@lMn&?Tp43{zfS(2e7Fa)ZZLP`^vE=?O$$i zzh~&0A>BITqY(%MdVBldBOyaC`m{B+py`gwf=US{Pwv1wx{%VGryj+{(9XH zyuOkG+rZ26vIFqgIehyh^m+okbe;jP7e9g5{?6CO<>5DN;Az?DRVDk4?dz4%>%iOF zStp~zu+i)DI`A}{_2yLn+HU7pV`sE0yL`La=-0OV*U0W`t(}nFvUdaU!o%n8l?=UR zX1kT~dvRUisO;)&xxNs6Py7J~c&X^~<%SVL(lI;(5oXN=D8cDvUHoC|D_<`1k^JbQ zx4^l#Zl81GaD(|sHe%P$-3&*>us{QkLxJXRHnOu(bQH3_ytb7w|9i1!KIDLZZa!ch z?rFQ>%goV_mNr8pgXA}$K@Xo#I%Q0Iq;B|HUaeXQjb4&?B<1&d$8WmD_B_`cf1bDeG2n;d6gURIOOlA>a|9? zpHzUWaJXCjB=pGCM9e?@SjK=p;f5u=dfF$ZTVXI_AiYxG{t)*q>w>E*m=*PLQw%1u-LoOKD65xf)co*U_HL|u)y6CuCgRkdw zxRVfCN`Q@in&NA7J+r0H&yvKy$hddrSJbo|{%MnM7Y30Mt9!$sH9mjH+<3R@+;w); zbBH#@i$-YCF<(FpnBy96L$+l9V1W=_Gf5hZ>0CEbO$Z7M{_5|t;F%&971iVeUZBAz z;~GZ!4fQ_Qbs}WTYgh|}F((S_Z%t3AOC1+d0KOvqMo}z6_RXxv477D2;vndli$JJ< zOA>cR2U{)VpZa-T`jF$);YY<9c8GI-lrH+z;oK}KtQ&4L*n}JBdB2dA$myy~yLCmr zY}mthZ#ND4%8F!%eM2D7drj)QQrh4R2%*g(Tvp?rdl0UC|qT*kGSnFb#+(kHz(WSIqxyjIqJob7&aCx~PzH074PI@L0gd$muS zHF3F!l((%qu5KApDc^M6i)%;~@i;^n|jv4{Z2<4Li}ew6(hu*wYE4V4xqZ zru|PO-o6q)`Z|}UV4U2j72ebMa0+nF{X-~|Wh+M#KCC7aFQYsXS}^fRBzzFs`Fqz} z?T*Dj*Ii40@6;7U8Fy4?)Hl&?=!KM|cL7CcURbBG+}7q!eZV2wM1MbM1R8{4O4+TL zcF=6g?z||wo!Yssqfmol^QlUvuN;KdY>8-m&993oBAv2 z8c9pdcUzMs$160#w1)c?y$*C<+rdf<6IX- zsyLKxPH``?dW4tze8K}bfbLc#&ut;Q?gyy~onmv2MIPxF1uBl{*I+2G>z?!l9)8j8 zxuji&$7idbV^38w^u!x9A6~*3lF@Ge8Q6lz^KI>{&|yKh=lpzh)cQ#hSjc!EV6yc* z&rSt)_E?PfJlFo}QxH`INWmBfWz0Uc$cUQXPoq6n$*|s#Vp(NS0rruOjnE|bMs@=7 z0RfBrVJ$4%Z%ZKfYsMp^HcBVW=7m@Sqqf)2v$l1$+ zNVDQrJFZBqB(1&ffR^Yj!Gk6t(y)7f1EA&W!|8Y_RACcyqeS!jte$yD$E_+#8Dt1;}z zY@;UVQHfVHw=wmk7n{{Nb${irrUt-@SV?^04~4R|CWrC$2x>T|&y zjkkY^&wTZjKzNnrg}_AaJu#aEXm-5sO*XsE1e)fq9oyue?ax+-r>ig}HM)M15b|yt z#h_sWb6>NrTZQl9*VwFXSueCjUTBE_=~c0{RQ>0Bm376m|D;*zDgS`=;&;2tn~aq9 z;?W4nS143|P0hv!t%tKM!HRy@R8N#2RsF+;6m8`}q(1jC$;8yQS~rBlc>AaSg!e+S z5{4_k-(|Um#I{G*85ZiS{g6Kj6RNS*Ta^dSzv}TJj?5zrmTvTiamD_n4?VprQ{obM zVI6%{3nE=!8Wiu8ELMjTdgO@Bpbus0d~PA0ZkC-INF&OUrW9w7TeRFJ^YA*SR3k}`IR3xXWSS?_1Db5 zBL`@nEonim+O*5x6n@N1YiT{w4asR6WdVZ%Z9@P0HiL(%zHD6*>9c8h7(~XzaIH#A zuOj>>D;dBm>iavu;o>&mfUxYD4h+6wNDHbnWKY6crKP)gxM8368?NT7jM$v(h4`tT zZ?WedQ&ha(6loK*m@kI!{oOsBvF+5ECx_iuXn}K;hCl?hUJV$c^lj2j%2Qocn#3fz z2bMj@hdF&J@9fgu5<^EB0P*G&MtXl#Z7#bG0Bz#M`_}Kp z>>3}6^7p-Eu?y>-K({*my%iBO?clH#6e{nLNl*C$>m-Plqsq-(zC%h|4(caKl~s}- zluv`}%A?%zp3m@ZQx0MR?-|?~=A3HRPbKA&(YXZ7g>hZ5TpkU=A`W1(`Nr zaE$$fCFL%OXW!R4Jzl6BI8J+6*0;Kyjt~@)&2w!uT&F;J2fi!_5pJAWhc>w)ENxdcWZ+;)%qB=Rdrv{eO71lIGy|6VM4qHzU2{8dqu$8?Bf(G>XQ^ zxl8r?1PZ(}kCYK49p>EM7&dwA@>$rl?)byyav>GM@V@QT!N+(T3E$NLcP%|Ve-{*> zIi#@5(=qL@KgaixO+>D{GiG;53)(LDelO~PwH92gwwG+4>`x(FG(THPwn~DdYf`;y z;M}1g1D4xdYr9D?lhpsfKwGBI%D6NT$&P8|CGXPTOxcQajNYn9N>BBtP%fI^OzE#u zR@{Yi8$}tWmCeZ6)W-)se?KpPCJ~UEE;mdwe?#nIw$Wd$(egl3^%wV4f%>`fdGt_m zxlJah`4#KUo?I=mVKN7v6cbmy>!(~uZMFn4J5Xfjd-*!=lo!@Ay|h2k_7mZaZevo7 zZS*j~>UR4&nWHje!f@4vM$}U9Z)(QWv7)uZWlL-WS=C^n&iGPu86S<15Cwlh0Q`9I zQmvnQMlEMA-E_HP%kG%$?MD+TIDY3L_TjSlcHKhc`C}TS_t8>cjUznKZp88xF8;nU z1FDi%>sI9DlGL9kPp8Q(OUa@SW_D#n z9bY9D1}|9)X&P6jOPH4#7GtO6pL-3HOl3Se>D>$$l9CZ5O7@|oYECvvWh~g&@kyyz zu6~*rjk=9ql)W4W{?W{5vnzwBR|s^vhUVIsIS`WSV5%@pd$sx4 z-7BT7RUT2h61^EN(X1pq>HYy31W^$TOF)huWXNS3#8Ow{_WGfYd1859$Br*-{)gH>iGpf&QI{ADHPs2!pO*5|W22O1|RNwp*vQMhV31pIX~BgoJ* z!>dq8*^E+%M}tN9n^pyl*Oqi_CmUHUZK+B}ke3GG1MACi-Geq_#+uq$7q>D60ju+> zD6dO;l0_kb<#_RuyjD_KoS`On)*#;K>VCv!%}k_ieY32!b*sP-INOmA0;~duW;e{zMah{Hn_`mZ zWG#N$l;C9VwG*8=pUka9$J}c0YHrb^W+tU6ahwTpAaZ6Ii7EeFov)pk?odjsHv}d6 z9-LMYx;f7|v|=2NiBTPG(_M^P4Lf$9Mj94x+^}j~q$z{Hv6an=Ltz&!C4rh(l9FO#QUL08fZTecLaDqCCc>ZS5+d?sdtMlBpqf`i@I1PAehO;MLre1YlT`?8x60k}*Kwpbrc;uC+m=*h| z<3idIT!Z}WHEl|1TRSKsH~Sjh#@z-S@G1g!Pmo!0Rl~}$UKv*Bu@|L!bCWzprc%%{ zOik->e6?~7-E5n4C=?p~s+C8qX76K|1_i;il*IQRT+M2p5m(~@!VZHn8{cE*= z5KeKqs51*FWnsGxeHjwMA)-P4A5kU5lRZgMqG$TjjNt;E=86R$a+2ej`^_pBP9e<_z~MGvbeor=1W7!P{P^%UI*ww>OFo<9z#zJ$$nT$9O^Lp z9CqiE(~P;e?dchl(f}_ej$%X|1cYpMHowKq086Gg@9(Tb4L+?5>I?kI-%?Ey0&<<8 z!==VMI?wpl+8$Zn*!7NgX@Gv2{U5994Oei=>Auold1*J;2%pM{(qi*Fs`IG#MkdI9 zmn`ieXE%aHw#Si28N7U; z`p@?@uV_ z2wbaKyYIjtn0Bed_Zme;Tr{>GZe4N}C(O-mWXJSL-Mq*SiQN<_UMs0kj=lB0 zH4kOMLfXt}gpkmD-x495aqiu@=Q01{pcv5nkzAa(sPs2;NRTH;>AL%Ry@?SG;l##9 z7|emsLWawuf$L8OhJ_V;3JCZ`i}oE$mf&;9;V2|0_i|WW!wV3%60W{)V<^Exf^n`- zBkoY}M#xSoEN>=eZE$|R&gIqk@jr9?0n0k$G6 zBxvYH-}bw+r)VM!vqVJi@3~34ij`sD2+nmec0NQMKl-2OP*8dpG1z@jDnT*=AS z7c*OT3q1LE2d)))LZmTtnX(NJWDx65b{!)x&hHCvf=e3tS$hEi|_|r zbqx3S%oCq+HE${1dJQil=eDj;^ePs~zA*zKLA11d3aUZ}jkDq=5pg6!-BWR=j|92- zQn9aL`M5cPD@=Ry(6l>7VxmZKQ0yL(2v*WM#!x39Z3D!Df1rert?mtR5n1TR(4WO? z_=t#T3~CWD--8@!iC5c>m+tH$VW5jXC;A1lcFkGN>fPeRQEQ`_1%&+*rA0uPRFMJv z4H~&2YOV>_D6OUxl$O=#1rEM&@GqIt`HWbCrG442 z$u`^75)sy_5|Ih%057m|uoISSjN%|AL%^V#87P6{*=V(DoY&fp@zT_`WL$dsHdgZp97 zY$C3Et@5Izd}x|dLh$z!7kWnDWFw2-RSZAF8O9TR2MN1tR-7f7dPZ z)#&VC6lzV-(S`krOWqGyN0QY&Ic4qp3>qt$rlu9l&#dlKWyjuS^T&B<{sDSVg#;Hr zk3HqiyR7+&H}{p|42*e?yDwKROV!1O-OTxDHR{(c{0Z`+{NQ@olIy3?6(RP9)aUtr z9+C*%^x7Qvk914ufv=wv0Z;{}-3)|8SPrl1JmZcxI;a0)Vq~{)_|T+>sjU54Q`(7~ zW~o0+y|kfU8q}8%GL=X zTTz4XAhcp>?3zTAvWE2Jm(;j=2pATsm>RYVU`_A|x|BnL&TgdvTt!RqH}&rm+hZ?MXUk(8AW{gEZE^WGeg-Y&i`LF#iB6qM(BDd@;6yU5I9nRr(M* z&xA>47X>%N2B|=#MTJImx(~U(^XvIdLxe{lnGL@Jl~`7-zdqdz3F&|>9U}hO1Eq`s zJ76Y?p{R}xOBK%o&=7TYg_J%J48oC#Q^Hh+=^24>T9tdZ-bez9|Was03$X zEQwV)L&il?Ok#{9f*jMVgFqn|p~1P04S7^;>TuBq;gdsN`w0kXkO}xDvFvpFX9G!s z{zTF#jDVMmSAL8k1p;F9v=51ofm@7&l>JH+QCqF(iqTC#=)67RP3hz3xAG!xGTQKf zt(fp@BiY>tBc6X3MeZ|VJUrqzmq=uNv1YQ)A@8y8gdhfG|2n@%RT2q^Paj>h;(7~n zj#k^GM9zjF#JJe1d;N@COfE5pfM{k`rkrw6HJWHbSfkWfssE>76#}89;V(~@zz713 z)Oeu+90FwDwiVs4r^%&h5upP$ReW1iw3N8tOoKL%dEYSTZ#p6s$z&3UUx-4&^(j(w zAqX`5%)Us_Ed4V)FmVxBL$1(PQbO=1LD+F6vsy{_9V!Y+AjO69JD-k+Hb-kkX)=k# z|BMk8r3+~hx)H~b?Uc?7Oz~%BDhgv}WC02Ej-=@+^>ey8^kMCdji z4}@F<>{c}r>xNrlDzaM0WpBw4XP3j|HGZ24BCus$9CO+gtEz$BEQD}4CZPB#QUF8+ zPIUa)MN@e)#P>L#d&ypC;Lu7da_WYjj6*&Z3w2YJGbQjT@tQqr?S5oVW=V_wILw*E#|nvAbR7Wm)b;iNA`zzNBA z{$sC#X9HNy9!J~|*CIu0b`4A*;ehTeM*btI?y}udwH*eAnRB{2m5|*HG&E;^+KOEs zqF&wDQgU8Qj9eO)GZ`2T*4eXzMD!gh4hvx**R>+x0pBJ)argIQ(h71;<94KL7A>2e za`gE8SSz#b&}SKr_u9>-sN)M#c=z%C-lAygzuQf;D*uc|d2qnkK`Y=yJ6$g>LiOF@ zN+B`SaE@K$bIJqV7wT`#%dTp$;{Ub-=VQmNM0--nkYpirNFj&qkZ-W&akDP5`CfL( z^a-L-%us260Z7J%kl)nF(Lja}`8aY^fHJcNMqH*0gg)=1tN7r-F1FdwY;aFV;fH$jo<4lUs+3Xd=J+1u`3Lha`kPAcJL2Sy#6s8R zQNv&jvFJt-WN?;|M-wVzAent@QLj>SkqxVm96fkd(`%FdFaWsy8wtUTYn6eR!Aw)< zK#kr&H-P|fdCqKhyE*1y>7Qy%ugO0>? zfRX$e@#8tEYBag8+tOjaZZw}j1(IvgnkPc|YJL!j8vuvZGpS5eJco+eSk+Ye^TiPS zk9Qw2wBLSvLBcGA|ugDIaNwy8Tqb5Nb|bmDZJ8 z?)z%uIb6QEpdbl_&Q`5@R4a}9JT14CFf?jEy`%lC=@lI`PUF80ShHH?>IoND@K`z? z_XguC0(Uzl)?Fj;IRdH(pD4mNJY$cKUu8B<3!p-5>eb);OzK3o{tlxDrYUtFcVl2R z4H}^-__hbqzVSFl2d7)CcE>8Ovs7L~)iL!ZwV&U6| zj|lS5&bCJpRpqpj9ST)0d%He85^uN$iCb^zBgri8>!8-p#=?yz_K-V_!3m_{$s879 z0$~eBsAqQ!-s2vm+)Ta;zGMki_HQof4*rKW4p&r^U*bQdjFd+O3_X2$oxKoFr3J~% z#5x*yKJ9rlxnRtw=Z#y_^u~lJRMKgt$v*I_B~4nysttpz4Qi`mDqswV=WB@f zDe3!pRFsn)5^y-XAw#B-PW;lW0bj}q#>n>0a<0Fro-JIi6yn$hwZi?1_C0Wq>~1M6 z*-l7MfCfuI-DbZWS)Af#I=!~Ou}24`89k{W#17KYrHiX_cI+FPW2Skxy|T*#4Ipcq z!wb@?`GCXBpz_VnR|Zh-1tvr4>T44566y!rIi^?QQ~`9|0U&h`T?D$td^##ZQM<=4 zPFABUAxPU68$>YK#tk5KKscn{7Rz$>&oWN-r4#Ww9-6vb@q2VIqKG)z38EOqQl(|Q zBiEkX^`<1n9NDxVWS=fgh&ll}x03mlsuYMN%x8p{q4)Iz-9>N+FH6r=#eMF!#QGxq zKpORdyT2HF>q1Q-v(uxVF5ec@Bh@BV-oJ)=ev{^o>=B zpzxjoVR;+XDixFcMfwYSS{OWdG*XrT{_2ZmWE!Q7YZR=ypd&P zk$JK){m!m9xJW5%*Gl73GQw`NtqzT~ZDskMFRuXzPJii8(_xE!Cxlyrod0fh7gc6| z9B3;$Gy2q}xwgMMMOP9rGNOc>8Xm=}1ku_0Nx37VvbcFu^jRz$To8FWZr4$BGbP9W z&D7dCHK^tZB9M0)Yz_P%xo#7_=TzusONR}zpE>$K=9Z>Dk!KHTWygT${&Bx)Gcv0; zTj7lcyAU8ek>TybMyB(w&?9YGibW2E*pFvK-mx}BtjoP^KjHwo8}#)M2H$cBkb=EZ zbDm^zy8Nho4Q-$Kh($T=ICmb^_^kG6K}V|=q_VuY56L-KfGlR07nQfS^ASec=dqp( z3D0Ze_NQ&+pJ~A5M*&wu#C)Y#zXG|V9dj7Ux7@Rc?^9Cf=_|~{A|d*XRNJpTbL`&- z0-hY3t7V*sEx6FtGJ2n8c}ZYhi|i>ykE?0xQ22tZ94K3q?&N=Wz{Xr6ySh^OD`Z&w zo>bLP-{s@|1qjc0fMUWHahc&0)J-%@mh%aj7WHx-LsHc z(H4y}T_l;SE7>sx+yAJdyp0zoC`7Dx6U={z8)pBRLDPWelqs&A5Akc)$eR5V#g68h zr?|QT#`0O5{HaGpiI_JT@P#Al{_-=NKJPmRydkN}1e`oiGUDj^u#VH^->6RJiHOiM z6Cg?>4kb+%jCThrV|SR}ji2f+&N^^vdFKn|pT`w~4KWJ30#GfQyn(DF-Xjv)CeNG- zA{1#V_kQW`PdI}KCRxg-Mg6WK9({NNVqx1Mb3=j59fu0MXfZriHT8wI&xCKJIC6NCwQBKV>3IOwa%?&o6o8-nf3 zX`-!6CD~yn3o>akB$f`!F^Z@(p?ty4BAo)Ue8EAjeq;%>46U?15Kz_(#4=YY*zpTD zf;ChSsOi9OLgZl;!*kt+RB~ewKx-Zy%g-dpjWa_G7j2E77 zkk3Yx?XKR5V|ACdv>nrq4v6%EA70z`rSIksos7Omb$#Cno)~SGovMJ_C?<4X{ zn6be+GI}}*q6D?s{%>;xH#<-T4rY!tUh#zi9mPG`LziJ3ZT>_YlJ`Cz(U+OMN=ii= zAi}VgKI+Vy_#RDfs{JEN{@*wuxHO(XDcY!jxHb)0+bk~I_z*}XG#Tg!b*Mun46J?0 zrNi+-sogk~GDvyoF!l7#OAH&v%nt)*LF{#3Wjh8%?j3^gQ~rhK$B^&IFe$TrNH_|- ziXl37%87ZDO;a@zNr;BpvGH=dk+Nn2N)oAI9dicUGdjE4IJv||P=heYeyJMCgiJyH zyjJ-i`-c~^i-0(3*%5lRE~T(C{I+85W#1h@QgVW`Bgsi0jZ*%4G*m3ISFeuJhf-=e zTV>Q7Q4W%$XR@pL(!5qSIrD`W6USL#)+FkGr4$8_ysx)qen_kqvF9pp$T0#t{

      % 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 F^B+AwvPl2{ diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 6a70737a4..9fe9a88bc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -20925,6 +20925,56 @@ context.document.save(); await context.sync(); }); +'Word.Document#activeWindow:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the first paragraph of each page. + console.log("Getting first paragraph of each page..."); + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get all pages. + const pages: Word.PageCollection = activePane.pages; + pages.load(); + + await context.sync(); + + // Get page index and paragraphs of each page. + const pagesIndexes = []; + const pagesNumberOfParagraphs = []; + const pagesFirstParagraphText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const paragraphs = page.getRange().paragraphs; + paragraphs.load('items/length'); + pagesNumberOfParagraphs.push(paragraphs); + + const firstParagraph = paragraphs.getFirst(); + firstParagraph.load('text'); + pagesFirstParagraphText.push(firstParagraph); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + console.log(`Number of paragraphs: ${pagesNumberOfParagraphs[i].items.length}`); + console.log("First paragraph's text:", pagesFirstParagraphText[i].text); + } + }); 'Word.Document#changeTrackingMode:member': - >- // Link to full sample: @@ -22846,6 +22896,285 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); +'Word.Page:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets pages of the selection. + const pages: Word.PageCollection = context.document.getSelection().pages; + pages.load(); + await context.sync(); + + // Log info for pages included in selection. + console.log(pages); + const pagesIndexes = []; + const pagesText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const range = page.getRange(); + range.load('text'); + pagesText.push(range); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Index info for page ${i + 1} in the selection: ${pagesIndexes[i].index}`); + console.log("Text of that page in the selection:", pagesText[i].text); + } + }); +'Word.Page#getRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets pages of the selection. + const pages: Word.PageCollection = context.document.getSelection().pages; + pages.load(); + await context.sync(); + + // Log info for pages included in selection. + console.log(pages); + const pagesIndexes = []; + const pagesText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const range = page.getRange(); + range.load('text'); + pagesText.push(range); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Index info for page ${i + 1} in the selection: ${pagesIndexes[i].index}`); + console.log("Text of that page in the selection:", pagesText[i].text); + } + }); +'Word.Page#index:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the pages that contain the third paragraph. + const paragraphs: Word.ParagraphCollection = context.document.body.paragraphs; + paragraphs.load(); + await context.sync(); + + const paraThree = paragraphs.items[2]; + const rangeOfParagraph = paraThree.getRange(); + const pages: Word.PageCollection = rangeOfParagraph.pages; + pages.load(); + await context.sync(); + + // Log info for pages in range. + console.log(pages); + const pagesIndexes = []; + const pagesText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const range = page.getRange(); + range.load('text'); + pagesText.push(range); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Index of page ${i + 1} that contains the third paragraph: ${pagesIndexes[i].index}`); + console.log("Text of that page:", pagesText[i].text); + } + }); +'Word.PageCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets pages of the selection. + const pages: Word.PageCollection = context.document.getSelection().pages; + pages.load(); + await context.sync(); + + // Log info for pages included in selection. + console.log(pages); + const pagesIndexes = []; + const pagesText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const range = page.getRange(); + range.load('text'); + pagesText.push(range); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Index info for page ${i + 1} in the selection: ${pagesIndexes[i].index}`); + console.log("Text of that page in the selection:", pagesText[i].text); + } + }); +'Word.Pane:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the first paragraph of each page. + console.log("Getting first paragraph of each page..."); + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get all pages. + const pages: Word.PageCollection = activePane.pages; + pages.load(); + + await context.sync(); + + // Get page index and paragraphs of each page. + const pagesIndexes = []; + const pagesNumberOfParagraphs = []; + const pagesFirstParagraphText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const paragraphs = page.getRange().paragraphs; + paragraphs.load('items/length'); + pagesNumberOfParagraphs.push(paragraphs); + + const firstParagraph = paragraphs.getFirst(); + firstParagraph.load('text'); + pagesFirstParagraphText.push(firstParagraph); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + console.log(`Number of paragraphs: ${pagesNumberOfParagraphs[i].items.length}`); + console.log("First paragraph's text:", pagesFirstParagraphText[i].text); + } + }); +'Word.Pane#pages:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the first paragraph of each page. + console.log("Getting first paragraph of each page..."); + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get all pages. + const pages: Word.PageCollection = activePane.pages; + pages.load(); + + await context.sync(); + + // Get page index and paragraphs of each page. + const pagesIndexes = []; + const pagesNumberOfParagraphs = []; + const pagesFirstParagraphText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const paragraphs = page.getRange().paragraphs; + paragraphs.load('items/length'); + pagesNumberOfParagraphs.push(paragraphs); + + const firstParagraph = paragraphs.getFirst(); + firstParagraph.load('text'); + pagesFirstParagraphText.push(firstParagraph); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + console.log(`Number of paragraphs: ${pagesNumberOfParagraphs[i].items.length}`); + console.log("First paragraph's text:", pagesFirstParagraphText[i].text); + } + }); +'Word.Pane#pagesEnclosingViewport:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the pages enclosing the viewport. + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get pages enclosing the viewport. + const pages: Word.PageCollection = activePane.pagesEnclosingViewport; + pages.load(); + + await context.sync(); + + // Log the number of pages. + const pageCount = pages.items.length; + console.log(`Number of pages enclosing the viewport: ${pageCount}`); + + // Log index info of these pages. + const pagesIndexes = []; + for (let i = 0; i < pageCount; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + } + }); 'Word.Paragraph:class': - >- // Link to full sample: @@ -25344,3 +25673,94 @@ console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); +'Word.Window:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the first paragraph of each page. + console.log("Getting first paragraph of each page..."); + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get all pages. + const pages: Word.PageCollection = activePane.pages; + pages.load(); + + await context.sync(); + + // Get page index and paragraphs of each page. + const pagesIndexes = []; + const pagesNumberOfParagraphs = []; + const pagesFirstParagraphText = []; + for (let i = 0; i < pages.items.length; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + + const paragraphs = page.getRange().paragraphs; + paragraphs.load('items/length'); + pagesNumberOfParagraphs.push(paragraphs); + + const firstParagraph = paragraphs.getFirst(); + firstParagraph.load('text'); + pagesFirstParagraphText.push(firstParagraph); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + console.log(`Number of paragraphs: ${pagesNumberOfParagraphs[i].items.length}`); + console.log("First paragraph's text:", pagesFirstParagraphText[i].text); + } + }); +'Word.Window#activePane:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the pages enclosing the viewport. + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load(); + + // Get the active pane. + const activePane: Word.Pane = activeWindow.activePane; + activePane.load(); + + // Get pages enclosing the viewport. + const pages: Word.PageCollection = activePane.pagesEnclosingViewport; + pages.load(); + + await context.sync(); + + // Log the number of pages. + const pageCount = pages.items.length; + console.log(`Number of pages enclosing the viewport: ${pageCount}`); + + // Log index info of these pages. + const pagesIndexes = []; + for (let i = 0; i < pageCount; i++) { + const page = pages.items[i]; + page.load('index'); + pagesIndexes.push(page); + } + + await context.sync(); + + for (let i = 0; i < pagesIndexes.length; i++) { + console.log(`Page index: ${pagesIndexes[i].index}`); + } + }); diff --git a/view-prod/word.json b/view-prod/word.json index 91af0634e..72709dc7b 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -34,6 +34,7 @@ "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml", "word-ranges-split-words-of-first-paragraph": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml", "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml", + "word-ranges-get-pages": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml", diff --git a/view/word.json b/view/word.json index 3d5b2bafa..1bcd2b652 100644 --- a/view/word.json +++ b/view/word.json @@ -34,6 +34,7 @@ "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/scroll-to-range.yaml", "word-ranges-split-words-of-first-paragraph": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/split-words-of-first-paragraph.yaml", "word-ranges-compare-location": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/compare-location.yaml", + "word-ranges-get-pages": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/get-pages.yaml", "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml", "word-tables-manage-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-formatting.yaml", "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-custom-style.yaml", From 71a685d0a840b5b995c8263c046550875ef9ae75 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 25 Apr 2025 09:17:15 -0700 Subject: [PATCH 124/156] [Word] (preview) Update to next set (#976) --- playlists-prod/word.yaml | 4 ++-- playlists/word.yaml | 4 ++-- .../insert-and-change-content-controls.yaml | 11 ++++++----- samples/word/99-preview-apis/manage-comments.yaml | 2 +- snippet-extractor-output/snippets.yaml | 8 +++++--- 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 315c9303d..801f6e431 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -579,7 +579,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml group: Preview APIs api_set: - WordApi: '1.9' + WordApi: '1.10' - id: word-manage-comments name: Manage comments fileName: manage-comments.yaml @@ -590,4 +590,4 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml group: Preview APIs api_set: - WordApi: '1.9' \ No newline at end of file + WordApi: '1.10' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index be093b51c..edca57ca8 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -579,7 +579,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml group: Preview APIs api_set: - WordApi: '1.9' + WordApi: '1.10' - id: word-manage-comments name: Manage comments fileName: manage-comments.yaml @@ -590,4 +590,4 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml group: Preview APIs api_set: - WordApi: '1.9' + WordApi: '1.10' diff --git a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml index 96f9e8905..81d9a9ecb 100644 --- a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml +++ b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -4,9 +4,9 @@ description: 'Inserts, updates, and retrieves content controls.' author: OfficeDev host: WORD api_set: - WordApi: '1.9' + WordApi: '1.10' script: - content: |- + content: | document.getElementById("insert-controls").addEventListener("click", () => tryCatch(insertContentControls)); document.getElementById("change-controls").addEventListener("click", () => tryCatch(modifyContentControls)); document.getElementById("set-state").addEventListener("click", () => tryCatch(setState)); @@ -74,7 +74,8 @@ script: async function setState() { // Sets the state of the first content control. await Word.run(async (context) => { - const state = ((document.getElementById("state-to-set") as HTMLSelectElement).value as unknown) as Word.ContentControlState; + const state = ((document.getElementById("state-to-set") as HTMLSelectElement) + .value as unknown) as Word.ContentControlState; let firstContentControl = context.document.contentControls.getFirstOrNullObject(); await context.sync(); @@ -101,7 +102,7 @@ script: console.warn("There are no content controls in this document."); return; } - + firstContentControl.resetState(); firstContentControl.load("id"); await context.sync(); @@ -161,7 +162,7 @@ template: -

      +

      Preview features

      Set state of first content control.
      diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index cae554af5..c050ead75 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -3,7 +3,7 @@ name: Manage comments description: 'This sample shows how to perform operations on comments (including insert, reply, get, edit, resolve, and delete) and use comment events.' host: WORD api_set: - WordApi: '1.9' + WordApi: '1.10' script: content: |- document.getElementById("register-event-handlers").addEventListener("click", () => tryCatch(registerEventHandlers)); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 9fe9a88bc..392723f9d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -18740,7 +18740,7 @@ console.warn("There are no content controls in this document."); return; } - + firstContentControl.resetState(); firstContentControl.load("id"); await context.sync(); @@ -18796,7 +18796,8 @@ // Sets the state of the first content control. await Word.run(async (context) => { - const state = ((document.getElementById("state-to-set") as HTMLSelectElement).value as unknown) as Word.ContentControlState; + const state = ((document.getElementById("state-to-set") as HTMLSelectElement) + .value as unknown) as Word.ContentControlState; let firstContentControl = context.document.contentControls.getFirstOrNullObject(); await context.sync(); @@ -19701,7 +19702,8 @@ // Sets the state of the first content control. await Word.run(async (context) => { - const state = ((document.getElementById("state-to-set") as HTMLSelectElement).value as unknown) as Word.ContentControlState; + const state = ((document.getElementById("state-to-set") as HTMLSelectElement) + .value as unknown) as Word.ContentControlState; let firstContentControl = context.document.contentControls.getFirstOrNullObject(); await context.sync(); From 762fe34369937117e687d3088ada1fb024a14bf6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 28 Apr 2025 09:28:14 -0700 Subject: [PATCH 125/156] [Word] (Shapes) Work with text boxes (#977) * [Word] (Shapes) Work with text boxes * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback and add API mappings --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + .../50-document/manage-shapes-text-boxes.yaml | 290 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 28077 -> 28566 bytes snippet-extractor-output/snippets.yaml | 264 ++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 574 insertions(+) create mode 100644 samples/word/50-document/manage-shapes-text-boxes.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 801f6e431..9def75438 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -544,6 +544,15 @@ group: Document api_set: WordApiDesktop: '1.1' +- id: word-document-manage-shapes-text-boxes + name: Work with shapes and text boxes + fileName: manage-shapes-text-boxes.yaml + description: Shows how to work with shapes and text boxes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + group: Document + api_set: + WordApiDesktop: '1.2' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index edca57ca8..cb7a87af1 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -544,6 +544,15 @@ group: Document api_set: WordApiDesktop: '1.1' +- id: word-document-manage-shapes-text-boxes + name: Work with shapes and text boxes + fileName: manage-shapes-text-boxes.yaml + description: Shows how to work with shapes and text boxes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-shapes-text-boxes.yaml + group: Document + api_set: + WordApiDesktop: '1.2' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/samples/word/50-document/manage-shapes-text-boxes.yaml b/samples/word/50-document/manage-shapes-text-boxes.yaml new file mode 100644 index 000000000..0052c6c77 --- /dev/null +++ b/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -0,0 +1,290 @@ +order: 17 +id: word-document-manage-shapes-text-boxes +name: Work with shapes and text boxes +description: Shows how to work with shapes and text boxes. +author: yilin4 +host: WORD +api_set: + WordApiDesktop: '1.2' +script: + content: | + document + .getElementById("insert-text-box-into-current-selection") + .addEventListener("click", () => tryCatch(insertTextBoxIntoCurrentSelection)); + document.getElementById("get-text-boxes-in-main-doc").addEventListener("click", () => tryCatch(getTextBoxesInMainDoc)); + document.getElementById("set-text-box-properties").addEventListener("click", () => tryCatch(setTextBoxProperties)); + document + .getElementById("insert-content-control-into-text-box") + .addEventListener("click", () => tryCatch(insertContentControlIntoTextBox)); + document + .getElementById("get-content-controls-in-text-box") + .addEventListener("click", () => tryCatch(getContentControlsInTextBox)); + document + .getElementById("insert-picture-at-start-of-text-box") + .addEventListener("click", () => tryCatch(insertPictureAtStartOfTextBox)); + document.getElementById("delete-first-text-box").addEventListener("click", () => tryCatch(deleteFirstTextBox)); + document + .getElementById("insert-text-box-in-header-at-first-paragraph") + .addEventListener("click", () => tryCatch(insertTextBoxInHeaderAtFirstParagraph)); + document.getElementById("get-text-box-in-header").addEventListener("click", () => tryCatch(getTextBoxInHeader)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + async function insertTextBoxIntoCurrentSelection() { + await Word.run(async (context) => { + // Inserts a text box at the beginning of the selection. + const range: Word.Range = context.document.getSelection(); + const insertShapeOptions: Word.InsertShapeOptions = { + top: 0, + left: 0, + height: 100, + width: 100 + }; + + const newTextBox: Word.Shape = range.insertTextBox("placeholder text", insertShapeOptions); + await context.sync(); + + console.log("Inserted a text box at the beginning of the current selection."); + }); + } + + async function getTextBoxesInMainDoc() { + await Word.run(async (context) => { + // Gets text boxes in main document. + const shapes: Word.ShapeCollection = context.document.body.shapes; + shapes.load(); + await context.sync(); + + if (shapes.items.length > 0) { + shapes.items.forEach(function(shape, index) { + if (shape.type === Word.ShapeType.textBox) { + console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); + } + }); + } else { + console.log("No shapes found in main document."); + } + }); + } + + async function setTextBoxProperties() { + await Word.run(async (context) => { + // Sets the properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.top = 115; + firstShapeWithTextBox.left = 0; + firstShapeWithTextBox.width = 50; + firstShapeWithTextBox.height = 50; + await context.sync(); + + console.log("The first text box's properties were updated:", firstShapeWithTextBox); + }); + } + + async function insertContentControlIntoTextBox() { + await Word.run(async (context) => { + // Inserts a content control into the first paragraph in the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.load("type/body"); + await context.sync(); + + const firstParagraphInTextBox: Word.Paragraph = firstShapeWithTextBox.body.paragraphs.getFirst(); + const newControl: Word.ContentControl = firstParagraphInTextBox.insertContentControl(); + newControl.load(); + await context.sync(); + + console.log("New content control properties:", newControl); + }); + } + + async function getContentControlsInTextBox() { + await Word.run(async (context) => { + // Gets the content controls in the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.load("type/body"); + await context.sync(); + + const contentControlsInTextBox: Word.ContentControlCollection = firstShapeWithTextBox.body.contentControls; + contentControlsInTextBox.load(); + await context.sync(); + + console.log(`There are ${contentControlsInTextBox.items.length} content controls in total.`); + }); + } + + async function insertPictureAtStartOfTextBox() { + await Word.run(async (context) => { + // Inserts a picture at the start of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.load("type/body"); + await context.sync(); + + const startRange: Word.Range = firstShapeWithTextBox.body.getRange(Word.RangeLocation.start); + const newPic: Word.InlinePicture = startRange.insertInlinePictureFromBase64( + getPictureBase64(), + Word.InsertLocation.start + ); + newPic.load(); + await context.sync(); + + console.log("New inline picture properties:", newPic); + }); + } + + async function deleteFirstTextBox() { + await Word.run(async (context) => { + // Deletes the first text box. + context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst() + .delete(); + await context.sync(); + + console.log("The first text box in document was deleted."); + }); + } + + async function insertTextBoxInHeaderAtFirstParagraph() { + await Word.run(async (context) => { + // Inserts a text box at the beginning of the first paragraph in header. + const headerFooterBody: Word.Body = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); + headerFooterBody.load("paragraphs"); + const firstParagraph: Word.Paragraph = headerFooterBody.paragraphs.getFirst(); + const insertShapeOptions: Word.InsertShapeOptions = { + top: 0, + left: 0, + height: 100, + width: 100 + }; + const newTextBox: Word.Shape = firstParagraph.insertTextBox("placeholder text", insertShapeOptions); + newTextBox.select(); + await context.sync(); + + console.log("Inserted a text box at the beginning of the first paragraph in the header."); + }); + } + + async function getTextBoxInHeader() { + await Word.run(async (context) => { + // Gets text boxes in header. + const shapes: Word.ShapeCollection = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary) + .shapes; + shapes.load(); + await context.sync(); + + if (shapes.items.length > 0) { + shapes.items.forEach(function(shape, index) { + if (shape.type === Word.ShapeType.textBox) { + console.log(`Shape ${index} in header has a text box. Properties:`, shape); + } + }); + } else { + console.log("No shapes found in header."); + } + }); + } + + async function setup() { + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + body.clear(); + body.insertParagraph( + "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", + "Start" + ); + body.paragraphs + .getLast() + .insertText( + "Use add-in commands to extend the Word UI and launch task panes that run JavaScript that interacts with the content in a Word document. Any code that you can run in a browser can run in a Word add-in. Add-ins that interact with content in a Word document create requests to act on Word objects and synchronize object state.", + "Replace" + ); + }); + } + + function getPictureBase64(): string { + // Returns Base64-encoded image data for a sample picture. + const pictureBase64 = + "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"; + return pictureBase64; + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      + This sample demonstrates how to work with shapes and text boxes. +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      +

      Main document

      + + + + + + + +

      Header

      + + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index d614523682d32c83fb6646febcbced3a4eec439f..223f0a5f460e3363fae93087e4f92f9e6ea5e75a 100644 GIT binary patch delta 20105 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 Count: " + length); }); }); +'Word.Body#shapes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets text boxes in main document. + const shapes: Word.ShapeCollection = context.document.body.shapes; + shapes.load(); + await context.sync(); + + if (shapes.items.length > 0) { + shapes.items.forEach(function(shape, index) { + if (shape.type === Word.ShapeType.textBox) { + console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); + } + }); + } else { + console.log("No shapes found in main document."); + } + }); 'Word.Body#tables:member': - >- // Link to full sample: @@ -22108,6 +22130,27 @@ console.log("Inserted section without an associated page break."); }); +'Word.InsertShapeOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Inserts a text box at the beginning of the selection. + const range: Word.Range = context.document.getSelection(); + const insertShapeOptions: Word.InsertShapeOptions = { + top: 0, + left: 0, + height: 100, + width: 100 + }; + + const newTextBox: Word.Shape = range.insertTextBox("placeholder text", insertShapeOptions); + await context.sync(); + + console.log("Inserted a text box at the beginning of the current selection."); + }); 'Word.List:class': - >- // Link to full sample: @@ -23332,6 +23375,29 @@ await context.sync(); }); +'Word.Paragraph#insertTextBox:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Inserts a text box at the beginning of the first paragraph in header. + const headerFooterBody: Word.Body = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); + headerFooterBody.load("paragraphs"); + const firstParagraph: Word.Paragraph = headerFooterBody.paragraphs.getFirst(); + const insertShapeOptions: Word.InsertShapeOptions = { + top: 0, + left: 0, + height: 100, + width: 100 + }; + const newTextBox: Word.Shape = firstParagraph.insertTextBox("placeholder text", insertShapeOptions); + newTextBox.select(); + await context.sync(); + + console.log("Inserted a text box at the beginning of the first paragraph in the header."); + }); 'Word.Paragraph#select:member(1)': - >- // Link to full sample: @@ -24173,6 +24239,63 @@ console.log("Inserted footnote."); }); +'Word.Range#insertInlinePictureFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Inserts a picture at the start of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.load("type/body"); + await context.sync(); + + const startRange: Word.Range = firstShapeWithTextBox.body.getRange(Word.RangeLocation.start); + const newPic: Word.InlinePicture = startRange.insertInlinePictureFromBase64( + getPictureBase64(), + Word.InsertLocation.start + ); + newPic.load(); + await context.sync(); + + console.log("New inline picture properties:", newPic); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + // Returns Base64-encoded image data for a sample picture. + + const pictureBase64 = + + "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"; + + return pictureBase64; +'Word.Range#insertTextBox:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Inserts a text box at the beginning of the selection. + const range: Word.Range = context.document.getSelection(); + const insertShapeOptions: Word.InsertShapeOptions = { + top: 0, + left: 0, + height: 100, + width: 100 + }; + + const newTextBox: Word.Shape = range.insertTextBox("placeholder text", insertShapeOptions); + await context.sync(); + + console.log("Inserted a text box at the beginning of the current selection."); + }); 'Word.Range#footnotes:member': - >- // Link to full sample: @@ -24587,6 +24710,147 @@ console.log("Updated shading."); } }); +'Word.Shape:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets the properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.top = 115; + firstShapeWithTextBox.left = 0; + firstShapeWithTextBox.width = 50; + firstShapeWithTextBox.height = 50; + await context.sync(); + + console.log("The first text box's properties were updated:", firstShapeWithTextBox); + }); +'Word.Shape#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Deletes the first text box. + context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst() + .delete(); + await context.sync(); + + console.log("The first text box in document was deleted."); + }); +'Word.Shape#type:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets text boxes in main document. + const shapes: Word.ShapeCollection = context.document.body.shapes; + shapes.load(); + await context.sync(); + + if (shapes.items.length > 0) { + shapes.items.forEach(function(shape, index) { + if (shape.type === Word.ShapeType.textBox) { + console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); + } + }); + } else { + console.log("No shapes found in main document."); + } + }); +'Word.ShapeCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets text boxes in main document. + const shapes: Word.ShapeCollection = context.document.body.shapes; + shapes.load(); + await context.sync(); + + if (shapes.items.length > 0) { + shapes.items.forEach(function(shape, index) { + if (shape.type === Word.ShapeType.textBox) { + console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); + } + }); + } else { + console.log("No shapes found in main document."); + } + }); +'Word.ShapeCollection#getByTypes:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets the properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.top = 115; + firstShapeWithTextBox.left = 0; + firstShapeWithTextBox.width = 50; + firstShapeWithTextBox.height = 50; + await context.sync(); + + console.log("The first text box's properties were updated:", firstShapeWithTextBox); + }); +'Word.ShapeCollection#getFirst:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Inserts a content control into the first paragraph in the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.load("type/body"); + await context.sync(); + + const firstParagraphInTextBox: Word.Paragraph = firstShapeWithTextBox.body.paragraphs.getFirst(); + const newControl: Word.ContentControl = firstParagraphInTextBox.insertContentControl(); + newControl.load(); + await context.sync(); + + console.log("New content control properties:", newControl); + }); +'Word.ShapeType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets text boxes in main document. + const shapes: Word.ShapeCollection = context.document.body.shapes; + shapes.load(); + await context.sync(); + + if (shapes.items.length > 0) { + shapes.items.forEach(function(shape, index) { + if (shape.type === Word.ShapeType.textBox) { + console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); + } + }); + } else { + console.log("No shapes found in main document."); + } + }); 'Word.Style:class': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 72709dc7b..a6f3f7244 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -54,6 +54,7 @@ "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml", + "word-document-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", "word-scenarios-correlated-objects-pattern": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/correlated-objects-pattern.yaml", diff --git a/view/word.json b/view/word.json index 1bcd2b652..1e2ed094d 100644 --- a/view/word.json +++ b/view/word.json @@ -54,6 +54,7 @@ "word-document-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.yaml", "word-document-manage-annotations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-annotations.yaml", "word-document-compare-documents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/compare-documents.yaml", + "word-document-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-shapes-text-boxes.yaml", "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", "word-scenarios-correlated-objects-pattern": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/correlated-objects-pattern.yaml", From ddf187a9e086aaac43c9f95e8f271bb261bd7b35 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 May 2025 13:10:33 -0700 Subject: [PATCH 126/156] [PowerPoint] Add group-ungroup-shapes snippet (#982) * [PowerPoint] Add group-ungroup-shapes snippet * Add API mapping --- playlists-prod/powerpoint.yaml | 9 + playlists/powerpoint.yaml | 9 + .../shapes/group-ungroup-shapes.yaml | 165 ++++++++++++++++++ snippet-extractor-metadata/powerpoint.xlsx | Bin 14220 -> 14411 bytes snippet-extractor-output/snippets.yaml | 135 ++++++++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 7 files changed, 320 insertions(+) create mode 100644 samples/powerpoint/shapes/group-ungroup-shapes.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 543434d41..aae374492 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -89,6 +89,15 @@ group: Shapes api_set: PowerPointApi: '1.4' +- id: powerpoint-shapes-group-ungroup-shapes + name: Group and ungroup shapes + fileName: group-ungroup-shapes.yaml + description: Shows how to create two shapes then group and ungroup them. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 72f4c2f59..4d09312d4 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -89,6 +89,15 @@ group: Shapes api_set: PowerPointApi: '1.4' +- id: powerpoint-shapes-group-ungroup-shapes + name: Group and ungroup shapes + fileName: group-ungroup-shapes.yaml + description: Shows how to create two shapes then group and ungroup them. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/group-ungroup-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml diff --git a/samples/powerpoint/shapes/group-ungroup-shapes.yaml b/samples/powerpoint/shapes/group-ungroup-shapes.yaml new file mode 100644 index 000000000..9ab621906 --- /dev/null +++ b/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -0,0 +1,165 @@ +order: 6 +id: powerpoint-shapes-group-ungroup-shapes +name: Group and ungroup shapes +description: Shows how to create two shapes then group and ungroup them. +author: aafvstam +host: POWERPOINT +api_set: + PowerPointApi: '1.8' +script: + content: | + document.getElementById("group-shapes").addEventListener("click", () => tryCatch(groupShapes)); + document.getElementById("ungroup-shapes").addEventListener("click", () => tryCatch(ungroupShapes)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + async function groupShapes() { + await PowerPoint.run(async (context) => { + // Groups the geometric shapes on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Group the geometric shapes. + const shapesToGroup = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); + console.log(`Number of shapes to group: ${shapesToGroup.length}`); + const group = shapes.addGroup(shapesToGroup); + group.load("id"); + await context.sync(); + + console.log(`Grouped shapes. Group ID: ${group.id}`); + }); + } + + async function ungroupShapes() { + await PowerPoint.run(async (context) => { + // Ungroups the first shape group on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Ungroup the first grouped shapes. + const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); + if (shapeGroups.length == 0) { + console.warn("No shape groups on the current slide so nothing to ungroup."); + return; + } + + const firstGroupId = shapeGroups[0].id; + const shapeGroupToUngroup = shapes.getItem(firstGroupId); + shapeGroupToUngroup.group.ungroup(); + await context.sync(); + + console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); + }); + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Adds a new slide with two shapes. + const slideCountResult = context.presentation.slides.getCount(); + context.presentation.slides.add(); + await context.sync(); + + const newSlide = context.presentation.slides.getItemAt(slideCountResult.value); + newSlide.load("id"); + + // Create two shapes. + const shape1 = newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + shape1.left = 100; + shape1.top = 100; + shape1.width = 150; + shape1.height = 100; + shape1.fill.foregroundColor = "darkred"; + + const shape2 = newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.ellipse); + shape2.left = 300; + shape2.top = 100; + shape2.width = 150; + shape2.height = 100; + shape2.fill.foregroundColor = "darkblue"; + + await context.sync(); + + console.log(`Added slide - ID: ${newSlide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([newSlide.id]); + await context.sync(); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      +

      Shows how to group then ungroup shapes.

      +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      + + +
      + language: html +style: + content: | + section.samples { + margin-top: 20px; + } + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + .content { + padding: 0 18px; + /* display: none; */ + overflow: hidden; + background-color: #f1f1f1; + max-height: 0; + transition: max-height 0.2s ease-out; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 4c6d50cb6874357cbe9580841f63e005de69da1a..bd9539d1c32f638e3911527b849450b60d4de632 100644 GIT binary patch delta 6532 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 RorM=+F2wvumj7Rn{{pT}Hm3jp delta 6315 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml + + + await PowerPoint.run(async (context) => { + // Ungroups the first shape group on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Ungroup the first grouped shapes. + const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); + if (shapeGroups.length == 0) { + console.warn("No shape groups on the current slide so nothing to ungroup."); + return; + } + + const firstGroupId = shapeGroups[0].id; + const shapeGroupToUngroup = shapes.getItem(firstGroupId); + shapeGroupToUngroup.group.ungroup(); + await context.sync(); + + console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); + }); 'PowerPoint.Shape#height:member': - >- // Link to full sample: @@ -15427,6 +15462,36 @@ await context.sync(); }); +'PowerPoint.ShapeCollection#addGroup:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml + + + await PowerPoint.run(async (context) => { + // Groups the geometric shapes on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Group the geometric shapes. + const shapesToGroup = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); + console.log(`Number of shapes to group: ${shapesToGroup.length}`); + const group = shapes.addGroup(shapesToGroup); + group.load("id"); + await context.sync(); + + console.log(`Grouped shapes. Group ID: ${group.id}`); + }); 'PowerPoint.ShapeCollection#addLine:member(1)': - >- // Link to full sample: @@ -15642,6 +15707,76 @@ textRange.font.color = "green"; await context.sync(); }); +'PowerPoint.ShapeGroup:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml + + + await PowerPoint.run(async (context) => { + // Ungroups the first shape group on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Ungroup the first grouped shapes. + const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); + if (shapeGroups.length == 0) { + console.warn("No shape groups on the current slide so nothing to ungroup."); + return; + } + + const firstGroupId = shapeGroups[0].id; + const shapeGroupToUngroup = shapes.getItem(firstGroupId); + shapeGroupToUngroup.group.ungroup(); + await context.sync(); + + console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); + }); +'PowerPoint.ShapeGroup#ungroup:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml + + + await PowerPoint.run(async (context) => { + // Ungroups the first shape group on the current slide. + + // Get the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + + // Get the shapes. + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Ungroup the first grouped shapes. + const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); + if (shapeGroups.length == 0) { + console.warn("No shape groups on the current slide so nothing to ungroup."); + return; + } + + const firstGroupId = shapeGroups[0].id; + const shapeGroupToUngroup = shapes.getItem(firstGroupId); + shapeGroupToUngroup.group.ungroup(); + await context.sync(); + + console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); + }); 'PowerPoint.ShapeLineDashStyle:enum': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 6563b54a1..937983a3a 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -9,6 +9,7 @@ "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", + "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml", "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index 7f1b28742..af639f65f 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -9,6 +9,7 @@ "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", + "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/group-ungroup-shapes.yaml", "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", From 8b38053503c4a0f9d1747a0f4629fe2bce213781 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 May 2025 14:30:21 -0700 Subject: [PATCH 127/156] [PowerPoint] (shapes) Add 'Move group' to group-ungroup snippet (#983) * [PowerPoint] (shapes) Add 'Move group' to group-ungroup snippet * Fix typo --- .../shapes/group-ungroup-shapes.yaml | 43 ++++++++++++++++--- snippet-extractor-output/snippets.yaml | 16 ++----- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/samples/powerpoint/shapes/group-ungroup-shapes.yaml b/samples/powerpoint/shapes/group-ungroup-shapes.yaml index 9ab621906..9af73fa46 100644 --- a/samples/powerpoint/shapes/group-ungroup-shapes.yaml +++ b/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -9,6 +9,7 @@ api_set: script: content: | document.getElementById("group-shapes").addEventListener("click", () => tryCatch(groupShapes)); + document.getElementById("move-group").addEventListener("click", () => tryCatch(moveGroup)); document.getElementById("ungroup-shapes").addEventListener("click", () => tryCatch(ungroupShapes)); document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); @@ -16,11 +17,9 @@ script: await PowerPoint.run(async (context) => { // Groups the geometric shapes on the current slide. - // Get the current slide. + // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - - // Get the shapes. slide.load("shapes"); await context.sync(); @@ -39,15 +38,44 @@ script: }); } + async function moveGroup() { + await PowerPoint.run(async (context) => { + // Move the first shape group to the top-left of the current slide. + + // Get the shapes on the current slide. + context.presentation.load("slides"); + const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); + slide.load("shapes"); + await context.sync(); + + const shapes: PowerPoint.ShapeCollection = slide.shapes; + shapes.load("items/type,items/id"); + await context.sync(); + + // Move the first grouped shapes. + const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); + if (shapeGroups.length == 0) { + console.warn("No shape groups on the current slide so nothing to move."); + return; + } + + const firstGroupId = shapeGroups[0].id; + const shapeGroupToMove = shapes.getItem(firstGroupId); + shapeGroupToMove.top = 0; + shapeGroupToMove.left = 0; + await context.sync(); + + console.log(`Moved shape group with group ID: ${firstGroupId}`); + }); + } + async function ungroupShapes() { await PowerPoint.run(async (context) => { // Ungroups the first shape group on the current slide. - // Get the current slide. + // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - - // Get the shapes. slide.load("shapes"); await context.sync(); @@ -132,6 +160,9 @@ template: + diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 1f2e01d6d..654620a2d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15230,11 +15230,9 @@ await PowerPoint.run(async (context) => { // Ungroups the first shape group on the current slide. - // Get the current slide. + // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - - // Get the shapes. slide.load("shapes"); await context.sync(); @@ -15471,11 +15469,9 @@ await PowerPoint.run(async (context) => { // Groups the geometric shapes on the current slide. - // Get the current slide. + // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - - // Get the shapes. slide.load("shapes"); await context.sync(); @@ -15716,11 +15712,9 @@ await PowerPoint.run(async (context) => { // Ungroups the first shape group on the current slide. - // Get the current slide. + // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - - // Get the shapes. slide.load("shapes"); await context.sync(); @@ -15751,11 +15745,9 @@ await PowerPoint.run(async (context) => { // Ungroups the first shape group on the current slide. - // Get the current slide. + // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - - // Get the shapes. slide.load("shapes"); await context.sync(); From 80ee730820676f3d22e79af36afbe1b42152e30e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 6 May 2025 16:50:36 -0700 Subject: [PATCH 128/156] [PowerPoint] Add export-import-slide snippet (#978) * [PowerPoint] Add export-import-slide snippet * Updates based on suggestions * API mappings * Apply suggestions from code review Co-authored-by: David Chesnut --------- Co-authored-by: David Chesnut --- playlists-prod/powerpoint.yaml | 9 + playlists/powerpoint.yaml | 9 + .../slide-management/export-import-slide.yaml | 306 ++++++++++++++++++ snippet-extractor-metadata/powerpoint.xlsx | Bin 14411 -> 14467 bytes snippet-extractor-output/snippets.yaml | 42 +++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 7 files changed, 368 insertions(+) create mode 100644 samples/powerpoint/slide-management/export-import-slide.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index aae374492..799327b7c 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -142,6 +142,15 @@ group: Slide Management api_set: PowerPointApi: '1.5' +- id: powerpoint-slide-management-export-import-slide + name: Export and import slide + fileName: export-import-slide.yaml + description: Shows how to export and import a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + group: Slide Management + api_set: + PowerPointApi: '1.8' - id: powerpoint-tags name: Work with tags fileName: tags.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 4d09312d4..873c655ff 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -142,6 +142,15 @@ group: Slide Management api_set: PowerPointApi: '1.5' +- id: powerpoint-slide-management-export-import-slide + name: Export and import slide + fileName: export-import-slide.yaml + description: Shows how to export and import a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/export-import-slide.yaml + group: Slide Management + api_set: + PowerPointApi: '1.8' - id: powerpoint-tags name: Work with tags fileName: tags.yaml diff --git a/samples/powerpoint/slide-management/export-import-slide.yaml b/samples/powerpoint/slide-management/export-import-slide.yaml new file mode 100644 index 000000000..36711aca3 --- /dev/null +++ b/samples/powerpoint/slide-management/export-import-slide.yaml @@ -0,0 +1,306 @@ +order: 5 +id: powerpoint-slide-management-export-import-slide +name: Export and import slide +description: Shows how to export and import a slide. +host: POWERPOINT +api_set: + PowerPointApi: '1.8' +script: + content: | + document.getElementById("export-slide-button").addEventListener("click", () => tryCatch(exportSlide)); + document.getElementById("clear-exported-slide-button").addEventListener("click", () => tryCatch(clearExportedSlide)); + document.getElementById("import-slide-button").addEventListener("click", () => tryCatch(importSlide)); + document.getElementById("slide-image-button").addEventListener("click", () => tryCatch(addSlideImageToNewSlide)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + async function exportSlide() { + // Exports current slide. + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); + } + + function clearExportedSlide() { + // Clears exported slide. + localStorage.removeItem("exportedSlide"); + localStorage.removeItem("exportedSlideImage"); + updateSlideImage(""); + console.log("Exported slide was cleared."); + } + + async function importSlide() { + // Imports the slide that was most recently exported. + const slideBase64Data = localStorage.getItem("exportedSlide"); + if (slideBase64Data === null) { + console.warn("Unable to import. You must first export a slide."); + return; + } + + await PowerPoint.run(async (context) => { + const currentSlide = context.presentation.getSelectedSlides().getItemAt(0); + currentSlide.load("id"); + await context.sync(); + + context.presentation.insertSlidesFromBase64(slideBase64Data, { targetSlideId: currentSlide.id }); + }); + } + + async function getSlideImage(options?: PowerPoint.SlideGetImageOptions): Promise { + // Gets slide image. + return PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const imageBase64Result = slide.getImageAsBase64(options); + await context.sync(); + + return imageBase64Result.value; + }); + } + + async function getImageDimensions(base64Data: string): Promise<{ width: number; height: number }> { + // Gets image dimensions. + return new Promise((resolve, reject) => { + const image = new Image(); + image.onerror = () => { + reject(); + }; + image.onload = () => { + resolve({ width: image.width, height: image.height }); + }; + image.src = `data:image/png;base64,${base64Data}`; + }); + } + + async function addSlideWithImage(imageBase64): Promise { + // Adds a new slide including an image. + return PowerPoint.run(async (context) => { + const presentation = context.presentation; + const currentSlide = presentation.getSelectedSlides().getItemAt(0); + const slideCountResult = context.presentation.slides.getCount(); + + currentSlide.layout.load(); + await context.sync(); + + const slideCount = slideCountResult.value; + + console.log(`Adding slide using layout ${currentSlide.layout.id}`); + + // Add a new slide at the end of the presentation. + context.presentation.slides.add({ layoutId: currentSlide.layout.id }); + try { + await context.sync(); + } catch (err) { + console.error(`Unable to add slide (with layout from current slide). ${err}`); + + // Try adding without specifying the layout. + context.presentation.slides.add(); + + try { + await context.sync(); + } catch (err) { + console.error(`Unable to add slide. ${err}`); + throw err; + } + } + + console.log("Slide added"); + + // Get added slide. + const slide = context.presentation.slides.getItemAt(slideCount); + + slide.load(["id"]); + + await context.sync(); + + console.log(`Added slide id: ${slide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([slide.id]); + try { + await context.sync(); + } catch (err) { + console.error(`Unable to switch to the new slide. ${err}`); + throw err; + } + + console.log("Switched to the added slide."); + + const activeSlide = context.presentation.getSelectedSlides().getItemAt(0); + activeSlide.load(["id"]); + await context.sync(); + + console.log(`Active slide id: ${activeSlide.id}`); + + const imageDimensions = await getImageDimensions(imageBase64); + const shapeAddOptions = { + height: imageDimensions.height, + width: imageDimensions.width + }; + + let shape; + + shape = await addImageToCurrentSlide(imageBase64); + shape.load(["id"]); + await context.sync(); + + // Select the added image. + activeSlide.setSelectedShapes([shape.id]); + await context.sync(); + }); + } + + async function addImageToCurrentSlide( + imageBase64: string, + options?: PowerPoint.ShapeAddOptions + ): Promise { + // Adds an image to the current slide. + const setSelectedDataOptions: Office.SetSelectedDataOptions = { + coercionType: Office.CoercionType.Image + }; + if (options) { + if (options.height) { + setSelectedDataOptions.imageHeight = options.height; + } + if (options.left) { + setSelectedDataOptions.imageLeft = options.left; + } + if (options.top) { + setSelectedDataOptions.imageTop = options.top; + } + if (options.width) { + setSelectedDataOptions.imageWidth = options.width; + } + } + + return new Promise((resolve, reject) => { + Office.context.document.setSelectedDataAsync( + imageBase64, + setSelectedDataOptions, + async (result: Office.AsyncResult) => { + if (result.error) { + console.error(`ERROR in setSelectedDataAsync(): ${result.error}`); + reject(result.error); + } else { + const shape = await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + slide.shapes.load(); + await context.sync(); + + return slide.shapes.items[slide.shapes.items.length - 1]; + }); + resolve(shape); + } + } + ); + }); + } + + async function addSlideImageToNewSlide() { + // Adds an image of current slide to the new slide. + const imageBase64 = await getSlideImage({ height: 500 }); + + await addSlideWithImage(imageBase64); + } + + function updateSlideImage(imageBase64: string) { + const slideImageElement = document.getElementById("slide-image") as HTMLImageElement; + slideImageElement.src = imageBase64 ? `data:image/png;base64,${imageBase64}` : ""; + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Adds a new slide with some content. + const slideCountResult = context.presentation.slides.getCount(); + context.presentation.slides.add(); + await context.sync(); + + const newSlide = context.presentation.slides.getItemAt(slideCountResult.value); + newSlide.load("id"); + newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon); + await context.sync(); + + console.log(`Added slide - ID: ${newSlide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([newSlide.id]); + await context.sync(); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      + This sample demonstrates how to export and import a slide. +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      + + + +

      Once a slide has been exported, click the Import slide button to insert into the presentation.

      +

      To add it to a different presentation, open that presentation and select a slide. It will be inserted after the + selected slide.

      +
      +

      Click the following button to capture an image of the current slide and add it to a new slide at the end of the presentation.

      + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + + img { + border: 5px solid #555; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js \ No newline at end of file diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index bd9539d1c32f638e3911527b849450b60d4de632..a99d06f28514d92448bf5bef91277979840e4da9 100644 GIT binary patch delta 6616 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 delta 6566 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 654620a2d..43ac4f917 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15935,6 +15935,48 @@ slide.delete(); }); }); +'PowerPoint.Slide#exportAsBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); +'PowerPoint.Slide#getImageAsBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); 'PowerPoint.Slide#setSelectedShapes:member(1)': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 937983a3a..c612b45b2 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -15,6 +15,7 @@ "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml", "powerpoint-slide-management-get-set-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml", + "powerpoint-slide-management-export-import-slide": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml", "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml", "powerpoint-text-get-set-textrange": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index af639f65f..06b407359 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -15,6 +15,7 @@ "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml", "powerpoint-slide-management-get-set-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-set-slides.yaml", + "powerpoint-slide-management-export-import-slide": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/export-import-slide.yaml", "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/tags/tags.yaml", "powerpoint-text-get-set-textrange": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/text/get-set-textrange.yaml" } \ No newline at end of file From cb9dea08dd23948bf6d087ff43b5dd9b8fd3a1ef Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 7 May 2025 10:41:14 -0700 Subject: [PATCH 129/156] [PowerPoint] Add add-modify-tables snippet (#979) * [PowerPoint] Add add-modify-tables snippet * Update how to update table values * Update based on feedback and add API mapping --- playlists-prod/powerpoint.yaml | 27 +- playlists/powerpoint.yaml | 27 +- .../powerpoint/shapes/add-modify-tables.yaml | 366 +++++ samples/powerpoint/shapes/shapes.yaml | 1 + snippet-extractor-metadata/powerpoint.xlsx | Bin 14467 -> 16114 bytes snippet-extractor-output/snippets.yaml | 1449 +++++++++++++++++ view-prod/powerpoint.json | 3 +- view/powerpoint.json | 3 +- 8 files changed, 1856 insertions(+), 20 deletions(-) create mode 100644 samples/powerpoint/shapes/add-modify-tables.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 799327b7c..f427754c4 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -71,6 +71,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios api_set: {} +- id: powerpoint-shapes + name: 'Insert shape, line, and text box' + fileName: shapes.yaml + description: 'Inserts geometric shapes, lines, and text boxes to a slide.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.4' - id: powerpoint-shapes-get-set-shapes name: 'Get, set, load, and save shapes' fileName: get-set-shapes.yaml @@ -89,6 +98,15 @@ group: Shapes api_set: PowerPointApi: '1.4' +- id: powerpoint-shapes-add-modify-tables + name: Add and modify tables + fileName: add-modify-tables.yaml + description: Shows how to add and modify tables in a presentation. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes-group-ungroup-shapes name: Group and ungroup shapes fileName: group-ungroup-shapes.yaml @@ -98,15 +116,6 @@ group: Shapes api_set: PowerPointApi: '1.8' -- id: powerpoint-shapes - name: 'Insert shape, line, and text box' - fileName: shapes.yaml - description: 'Inserts geometric shapes, lines, and text boxes to a slide.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml - group: Shapes - api_set: - PowerPointApi: '1.4' - id: powerpoint-add-slides name: Add slides to a presentation fileName: add-slides.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 873c655ff..7030c5a3d 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -71,6 +71,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios api_set: {} +- id: powerpoint-shapes + name: 'Insert shape, line, and text box' + fileName: shapes.yaml + description: 'Inserts geometric shapes, lines, and text boxes to a slide.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.4' - id: powerpoint-shapes-get-set-shapes name: 'Get, set, load, and save shapes' fileName: get-set-shapes.yaml @@ -89,6 +98,15 @@ group: Shapes api_set: PowerPointApi: '1.4' +- id: powerpoint-shapes-add-modify-tables + name: Add and modify tables + fileName: add-modify-tables.yaml + description: Shows how to add and modify tables in a presentation. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/add-modify-tables.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes-group-ungroup-shapes name: Group and ungroup shapes fileName: group-ungroup-shapes.yaml @@ -98,15 +116,6 @@ group: Shapes api_set: PowerPointApi: '1.8' -- id: powerpoint-shapes - name: 'Insert shape, line, and text box' - fileName: shapes.yaml - description: 'Inserts geometric shapes, lines, and text boxes to a slide.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml - group: Shapes - api_set: - PowerPointApi: '1.4' - id: powerpoint-add-slides name: Add slides to a presentation fileName: add-slides.yaml diff --git a/samples/powerpoint/shapes/add-modify-tables.yaml b/samples/powerpoint/shapes/add-modify-tables.yaml new file mode 100644 index 000000000..e3626ba35 --- /dev/null +++ b/samples/powerpoint/shapes/add-modify-tables.yaml @@ -0,0 +1,366 @@ +order: 4 +id: powerpoint-shapes-add-modify-tables +name: Add and modify tables +description: Shows how to add and modify tables in a presentation. +host: POWERPOINT +api_set: + PowerPointApi: '1.8' +script: + content: | + document.getElementById("add-basic-table").addEventListener("click", () => tryCatch(addBasicTable)); + document.getElementById("table-width-height").addEventListener("click", () => tryCatch(tableWidthHeight)); + document + .getElementById("table-column-widths-row-heights") + .addEventListener("click", () => tryCatch(tableColumnWidthsRowHeights)); + document.getElementById("table-values").addEventListener("click", () => tryCatch(tableValues)); + document.getElementById("table-merge-areas").addEventListener("click", () => tryCatch(tableMergeAreas)); + document.getElementById("table-cell-fill-font").addEventListener("click", () => tryCatch(tableCellFillFont)); + document.getElementById("table-borders").addEventListener("click", () => tryCatch(tableBorders)); + document.getElementById("table-indent-margin").addEventListener("click", () => tryCatch(tableIndentMargin)); + document.getElementById("table-cell-alignment").addEventListener("click", () => tryCatch(tableCellAlignment)); + document.getElementById("table-from-shape").addEventListener("click", () => tryCatch(getTableFromShape)); + document.getElementById("update-table-values").addEventListener("click", () => tryCatch(updateTableValues)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + async function addBasicTable() { + // Adds a basic table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a simple table, specifying the row and column count. + shapes.addTable(3, 4); + await context.sync(); + }); + } + + async function tableWidthHeight() { + // Specifies the width and height of a table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying the width and height. + shapes.addTable(3, 4, { + width: 600, + height: 400 + }); + await context.sync(); + }); + } + + async function tableColumnWidthsRowHeights() { + // Specifies the column widths and row heights of a table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying column widths and row heights + shapes.addTable(3, 4, { + columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], + rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] + }); + await context.sync(); + }); + } + + async function tableValues() { + // Specifies a table's values. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying cell values. + const shape = shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ] + }); + await context.sync(); + }); + } + + async function tableMergeAreas() { + // Specifies the merge areas of a table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying one 2x2 merged area. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "", "HHHH"], + ["1", "", "", "1234"] + ], + mergedAreas: [{ rowIndex: 1, columnIndex: 1, rowCount: 2, columnCount: 2 }] + }); + await context.sync(); + }); + } + + async function tableCellFillFont() { + // Specifies the font formatting and fill colors of the cells in a table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); + } + + async function tableBorders() { + // Specifies a table's borders. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); + } + + async function tableIndentMargin() { + // Specifying the indents for a table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying the indent level for cells. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [{ indentLevel: 0 }, { indentLevel: 1 }, { indentLevel: 2 }, { indentLevel: 3 }], + [{ indentLevel: 0 }, { indentLevel: 1 }, { indentLevel: 2 }, { indentLevel: 3 }], + [{ indentLevel: 0 }, { indentLevel: 1 }, { indentLevel: 2 }, { indentLevel: 3 }] + ] + }); + await context.sync(); + }); + } + + async function tableCellAlignment() { + // Specifies the horizontal and vertical alignments of the cells in a table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying horizontal and vertical alignment. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + horizontalAlignment: PowerPoint.ParagraphHorizontalAlignment.justify, + verticalAlignment: PowerPoint.TextVerticalAlignment.middle + } + }); + await context.sync(); + }); + } + + async function getTableFromShape() { + // Gets the table from a shape. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + + if (shapeCount.value > 0) { + const shape = shapes.getItemAt(0); + shape.load("type"); + await context.sync(); + + // The shape type can indicate whether the shape is a table. + const isTable = shape.type === PowerPoint.ShapeType.table; + + if (isTable) { + // Get the Table object for the Shape which is a table. + const table = shape.getTable(); + table.load(); + await context.sync(); + + // Get the Table row and column count. + console.log("Table RowCount:" + table.rowCount + " and columnCount: " + table.columnCount); + } else console.log("Selected shape isn't table."); + } else console.log("No shape selected."); + }); + } + + async function updateTableValues() { + // Updates a table's values. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table (which is a type of Shape). + const shape = shapes.addTable(4, 3); + let table = shape.getTable(); + table.load(); + await context.sync(); + + // Update values in the table. + for (let rowIndex = 0; rowIndex < table.rowCount; rowIndex++) { + for (let columnIndex = 0; columnIndex < table.columnCount; columnIndex++) { + const cell = table.getCellOrNullObject(rowIndex, columnIndex); + cell.text = generateRandomString(); + } + } + }); + } + + function generateRandomString(length: number = 5): string { + // Generates a random string. + const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + let result = ""; + + while (result.length < length) { + const randomIndex = Math.floor(Math.random() * characters.length); + result += characters.charAt(randomIndex); + } + + return result; + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Adds a new slide with some content. + const slideCountResult = context.presentation.slides.getCount(); + context.presentation.slides.add(); + await context.sync(); + + const newSlide = context.presentation.slides.getItemAt(slideCountResult.value); + newSlide.load("id"); + newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon); + await context.sync(); + + console.log(`Added slide - ID: ${newSlide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([newSlide.id]); + await context.sync(); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      +

      This sample shows how to add and modify tables.

      +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      + + + + + + + + + + + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js \ No newline at end of file diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 8685c527e..80a1cc305 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -1,3 +1,4 @@ +order: 1 id: powerpoint-shapes name: 'Insert shape, line, and text box' description: 'Inserts geometric shapes, lines, and text boxes to a slide.' diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index a99d06f28514d92448bf5bef91277979840e4da9..12fb77cb995698fceb2ed97a90a6d80ceefd2153 100644 GIT binary patch delta 7425 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 UGEx$XYRZS~m1MyT6#Pf$Kbqgp- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.BorderProperties#color:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.BorderProperties#dashStyle:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.BorderProperties#weight:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); 'PowerPoint.ConnectorType:enum': - >- // Link to full sample: @@ -14764,6 +14880,375 @@ }); line.name = "StraightLine"; + await context.sync(); + }); +'PowerPoint.FillProperties:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FillProperties#color:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FontProperties:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FontProperties#color:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FontProperties#doubleStrikethrough:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FontProperties#name:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FontProperties#strikethrough:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FontProperties#subscript:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.FontProperties#superscript:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); await context.sync(); }); 'PowerPoint.GeometricShapeType:enum': @@ -14871,6 +15356,31 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); +'PowerPoint.ParagraphHorizontalAlignment:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the horizontal and vertical alignments of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying horizontal and vertical alignment. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + horizontalAlignment: PowerPoint.ParagraphHorizontalAlignment.justify, + verticalAlignment: PowerPoint.TextVerticalAlignment.middle + } + }); + await context.sync(); + }); 'PowerPoint.Presentation:class': - >- // Link to full sample: @@ -15203,6 +15713,39 @@ await context.sync(); }); +'PowerPoint.Shape#getTable:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Gets the table from a shape. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + + if (shapeCount.value > 0) { + const shape = shapes.getItemAt(0); + shape.load("type"); + await context.sync(); + + // The shape type can indicate whether the shape is a table. + const isTable = shape.type === PowerPoint.ShapeType.table; + + if (isTable) { + // Get the Table object for the Shape which is a table. + const table = shape.getTable(); + table.load(); + await context.sync(); + + // Get the Table row and column count. + console.log("Table RowCount:" + table.rowCount + " and columnCount: " + table.columnCount); + } else console.log("Selected shape isn't table."); + } else console.log("No shape selected."); + }); 'PowerPoint.Shape#fill:member': - >- // Link to full sample: @@ -15514,6 +16057,21 @@ }); line.name = "StraightLine"; + await context.sync(); + }); +'PowerPoint.ShapeCollection#addTable:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Adds a basic table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a simple table, specifying the row and column count. + shapes.addTable(3, 4); await context.sync(); }); 'PowerPoint.ShapeCollection#addTextBox:member(1)': @@ -15541,6 +16099,39 @@ return context.sync(); }); +'PowerPoint.ShapeCollection#getCount:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Gets the table from a shape. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + + if (shapeCount.value > 0) { + const shape = shapes.getItemAt(0); + shape.load("type"); + await context.sync(); + + // The shape type can indicate whether the shape is a table. + const isTable = shape.type === PowerPoint.ShapeType.table; + + if (isTable) { + // Get the Table object for the Shape which is a table. + const table = shape.getTable(); + table.load(); + await context.sync(); + + // Get the Table row and column count. + console.log("Table RowCount:" + table.rowCount + " and columnCount: " + table.columnCount); + } else console.log("Selected shape isn't table."); + } else console.log("No shape selected."); + }); 'PowerPoint.ShapeCollection#getItemAt:member(1)': - >- // Link to full sample: @@ -16295,6 +16886,864 @@ savedShapeSelection.push(shape.id); }); }); +'PowerPoint.Table:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Updates a table's values. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table (which is a type of Shape). + const shape = shapes.addTable(4, 3); + let table = shape.getTable(); + table.load(); + await context.sync(); + + // Update values in the table. + for (let rowIndex = 0; rowIndex < table.rowCount; rowIndex++) { + for (let columnIndex = 0; columnIndex < table.columnCount; columnIndex++) { + const cell = table.getCellOrNullObject(rowIndex, columnIndex); + cell.text = generateRandomString(); + } + } + }); +'PowerPoint.Table#getCellOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Updates a table's values. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table (which is a type of Shape). + const shape = shapes.addTable(4, 3); + let table = shape.getTable(); + table.load(); + await context.sync(); + + // Update values in the table. + for (let rowIndex = 0; rowIndex < table.rowCount; rowIndex++) { + for (let columnIndex = 0; columnIndex < table.columnCount; columnIndex++) { + const cell = table.getCellOrNullObject(rowIndex, columnIndex); + cell.text = generateRandomString(); + } + } + }); +'PowerPoint.TableAddOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the width and height of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying the width and height. + shapes.addTable(3, 4, { + width: 600, + height: 400 + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#columns:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the column widths and row heights of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying column widths and row heights + shapes.addTable(3, 4, { + columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], + rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#height:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the width and height of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying the width and height. + shapes.addTable(3, 4, { + width: 600, + height: 400 + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#mergedAreas:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the merge areas of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying one 2x2 merged area. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "", "HHHH"], + ["1", "", "", "1234"] + ], + mergedAreas: [{ rowIndex: 1, columnIndex: 1, rowCount: 2, columnCount: 2 }] + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#rows:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the column widths and row heights of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying column widths and row heights + shapes.addTable(3, 4, { + columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], + rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#specificCellProperties:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#uniformCellProperties:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#values:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's values. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying cell values. + const shape = shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ] + }); + await context.sync(); + }); +'PowerPoint.TableAddOptions#width:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the width and height of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying the width and height. + shapes.addTable(3, 4, { + width: 600, + height: 400 + }); + await context.sync(); + }); +'PowerPoint.TableCell:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Updates a table's values. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table (which is a type of Shape). + const shape = shapes.addTable(4, 3); + let table = shape.getTable(); + table.load(); + await context.sync(); + + // Update values in the table. + for (let rowIndex = 0; rowIndex < table.rowCount; rowIndex++) { + for (let columnIndex = 0; columnIndex < table.columnCount; columnIndex++) { + const cell = table.getCellOrNullObject(rowIndex, columnIndex); + cell.text = generateRandomString(); + } + } + }); +'PowerPoint.TableCell#text:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Updates a table's values. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table (which is a type of Shape). + const shape = shapes.addTable(4, 3); + let table = shape.getTable(); + table.load(); + await context.sync(); + + // Update values in the table. + for (let rowIndex = 0; rowIndex < table.rowCount; rowIndex++) { + for (let columnIndex = 0; columnIndex < table.columnCount; columnIndex++) { + const cell = table.getCellOrNullObject(rowIndex, columnIndex); + cell.text = generateRandomString(); + } + } + }); +'PowerPoint.TableCellBorders:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.TableCellBorders#bottom:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.TableCellBorders#left:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.TableCellBorders#right:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.TableCellBorders#top:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.TableCellProperties:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.TableCellProperties#borders:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies a table's borders. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying border styles + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + borders: { + left: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + right: { color: "blue", dashStyle: PowerPoint.ShapeLineDashStyle.solid, weight: 4 }, + top: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 }, + bottom: { color: "red", dashStyle: PowerPoint.ShapeLineDashStyle.longDashDotDot, weight: 2 } + } + } + }); + await context.sync(); + }); +'PowerPoint.TableCellProperties#fill:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.TableCellProperties#font:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the font formatting and fill colors of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying font formatting and fill colors + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [ + { fill: { color: "red" }, font: { color: "yellow", name: "Calibri" } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", name: "Coolvetica" } }, + { fill: { color: "red" }, font: { color: "yellow", italic: true } }, + { fill: { color: "red" }, font: { color: "#9966cc", strikethrough: true } } + ], + [ + { fill: { color: "#fbceb1" }, font: { color: "yellow", doubleStrikethrough: true } }, + { fill: { color: "red" }, font: { color: "yellow", subscript: true } }, + { fill: { color: "#0048ba" }, font: { color: "yellow", superscript: true } }, + { fill: { color: "red" }, font: { color: "yellow" } } + ], + [ + { fill: { color: "red" }, font: { color: "#b0bf1a" } }, + { fill: { color: "#9966cc" }, font: { color: "yellow" } }, + { fill: { color: "#b0bf1a" }, font: { color: "yellow" } }, + { fill: { color: "red" }, font: { color: "#fbceb1" } } + ] + ] + }); + await context.sync(); + }); +'PowerPoint.TableCellProperties#horizontalAlignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the horizontal and vertical alignments of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying horizontal and vertical alignment. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + horizontalAlignment: PowerPoint.ParagraphHorizontalAlignment.justify, + verticalAlignment: PowerPoint.TextVerticalAlignment.middle + } + }); + await context.sync(); + }); +'PowerPoint.TableCellProperties#indentLevel:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifying the indents for a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying the indent level for cells. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + specificCellProperties: [ + [{ indentLevel: 0 }, { indentLevel: 1 }, { indentLevel: 2 }, { indentLevel: 3 }], + [{ indentLevel: 0 }, { indentLevel: 1 }, { indentLevel: 2 }, { indentLevel: 3 }], + [{ indentLevel: 0 }, { indentLevel: 1 }, { indentLevel: 2 }, { indentLevel: 3 }] + ] + }); + await context.sync(); + }); +'PowerPoint.TableCellProperties#verticalAlignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the horizontal and vertical alignments of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying horizontal and vertical alignment. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "GGG", "HHHH"], + ["1", "12", "123", "1234"] + ], + uniformCellProperties: { + horizontalAlignment: PowerPoint.ParagraphHorizontalAlignment.justify, + verticalAlignment: PowerPoint.TextVerticalAlignment.middle + } + }); + await context.sync(); + }); +'PowerPoint.TableColumnProperties:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the column widths and row heights of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying column widths and row heights + shapes.addTable(3, 4, { + columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], + rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] + }); + await context.sync(); + }); +'PowerPoint.TableColumnProperties#columnWidth:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the column widths and row heights of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying column widths and row heights + shapes.addTable(3, 4, { + columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], + rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] + }); + await context.sync(); + }); +'PowerPoint.TableMergedAreaProperties:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the merge areas of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying one 2x2 merged area. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "", "HHHH"], + ["1", "", "", "1234"] + ], + mergedAreas: [{ rowIndex: 1, columnIndex: 1, rowCount: 2, columnCount: 2 }] + }); + await context.sync(); + }); +'PowerPoint.TableMergedAreaProperties#columnCount:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the merge areas of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying one 2x2 merged area. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "", "HHHH"], + ["1", "", "", "1234"] + ], + mergedAreas: [{ rowIndex: 1, columnIndex: 1, rowCount: 2, columnCount: 2 }] + }); + await context.sync(); + }); +'PowerPoint.TableMergedAreaProperties#columnIndex:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the merge areas of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying one 2x2 merged area. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "", "HHHH"], + ["1", "", "", "1234"] + ], + mergedAreas: [{ rowIndex: 1, columnIndex: 1, rowCount: 2, columnCount: 2 }] + }); + await context.sync(); + }); +'PowerPoint.TableMergedAreaProperties#rowCount:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the merge areas of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying one 2x2 merged area. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "", "HHHH"], + ["1", "", "", "1234"] + ], + mergedAreas: [{ rowIndex: 1, columnIndex: 1, rowCount: 2, columnCount: 2 }] + }); + await context.sync(); + }); +'PowerPoint.TableMergedAreaProperties#rowIndex:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the merge areas of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying one 2x2 merged area. + shapes.addTable(3, 4, { + values: [ + ["A", "BB", "CCC", "DDDD"], + ["E", "FF", "", "HHHH"], + ["1", "", "", "1234"] + ], + mergedAreas: [{ rowIndex: 1, columnIndex: 1, rowCount: 2, columnCount: 2 }] + }); + await context.sync(); + }); +'PowerPoint.TableRowProperties:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the column widths and row heights of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying column widths and row heights + shapes.addTable(3, 4, { + columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], + rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] + }); + await context.sync(); + }); +'PowerPoint.TableRowProperties#rowHeight:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the column widths and row heights of a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying column widths and row heights + shapes.addTable(3, 4, { + columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], + rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] + }); + await context.sync(); + }); 'PowerPoint.Tag:class': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index c612b45b2..0c40ce1b7 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -7,10 +7,11 @@ "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", + "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", + "powerpoint-shapes-add-modify-tables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml", "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml", - "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index 06b407359..f70fe3e3a 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -7,10 +7,11 @@ "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-image.yaml", "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml", "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml", + "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml", "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", + "powerpoint-shapes-add-modify-tables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/add-modify-tables.yaml", "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/group-ungroup-shapes.yaml", - "powerpoint-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml", From bbba85e6dc56ca5b75bb58d8a0db537168c5670a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 7 May 2025 14:20:13 -0700 Subject: [PATCH 130/156] [PowerPoint] Fix get-set-shapes snippet (#981) * [PowerPoint] Fix get-set-shapes snippet * Tweak group-ungroup snippet * Link to contributor on task pane * Tweak --- samples/powerpoint/shapes/get-set-shapes.yaml | 27 ++++---- .../shapes/group-ungroup-shapes.yaml | 33 ++++----- snippet-extractor-output/snippets.yaml | 68 +++++++++---------- 3 files changed, 60 insertions(+), 68 deletions(-) diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 6d472a567..41790cdec 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -6,7 +6,7 @@ host: POWERPOINT api_set: PowerPointApi: '1.5' script: - content: |- + content: | document.getElementById("getSelectedShapes").addEventListener("click", () => tryCatch(getSelectedShapes)); document.getElementById("setSelectedShapes").addEventListener("click", () => tryCatch(setSelectedShapes)); document.getElementById("changeFill").addEventListener("click", () => tryCatch(changeFill)); @@ -43,14 +43,17 @@ script: context.presentation.load("slides"); await context.sync(); const slide1 = context.presentation.slides.getItemAt(0); - slide1.load("shapes"); + slide1.load("shapes/items/type"); await context.sync(); - const shapes: PowerPoint.ShapeCollection = slide1.shapes; - const shape1: PowerPoint.Shape = shapes.getItemAt(0); - const shape2: PowerPoint.Shape = shapes.getItemAt(1); + + const shapes = slide1.shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); + const shape1: PowerPoint.Shape = shapes[0]; + const shape2: PowerPoint.Shape = shapes[1]; shape1.load("id"); shape2.load("id"); await context.sync(); + + console.log(`IDs: ${shape1.id}, ${shape2.id}`) slide1.setSelectedShapes([shape1.id, shape2.id]); await context.sync(); }); @@ -127,7 +130,9 @@ script: const minNewShapeWidth = 50; const minNewShapeHeight = 50; for (let i = 0; i < 20; i++) { - const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape( + PowerPoint.GeometricShapeType.rectangle + ); rectangle.height = getRandomBetween(minNewShapeWidth, maxNewShapeWidth); rectangle.width = getRandomBetween(minNewShapeHeight, maxNewShapeHeight); rectangle.left = getRandomBetween(0, slideWidth - rectangle.width); @@ -135,13 +140,9 @@ script: rectangle.fill.foregroundColor = generateRandomHexColor(); } finalTable += "Done
      "; - const slideTags = document.getElementById("slide-tags"); - if (slideTags) { - slideTags.innerHTML = ""; - slideTags.innerHTML += finalTable; - } else { - console.warn('Element with ID "slide-tags" not found.'); - } + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = ""; + outputSpan.innerHTML += finalTable; }); } diff --git a/samples/powerpoint/shapes/group-ungroup-shapes.yaml b/samples/powerpoint/shapes/group-ungroup-shapes.yaml index 9af73fa46..17592fc3b 100644 --- a/samples/powerpoint/shapes/group-ungroup-shapes.yaml +++ b/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -20,15 +20,17 @@ script: // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - slide.load("shapes"); + slide.load("shapes/items/type,shapes/items/id"); await context.sync(); const shapes: PowerPoint.ShapeCollection = slide.shapes; - shapes.load("items/type,items/id"); - await context.sync(); + const shapesToGroup = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); + if (shapesToGroup.length === 0) { + console.warn("No shapes on the current slide, so nothing to group."); + return; + } // Group the geometric shapes. - const shapesToGroup = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); console.log(`Number of shapes to group: ${shapesToGroup.length}`); const group = shapes.addGroup(shapesToGroup); group.load("id"); @@ -45,20 +47,17 @@ script: // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - slide.load("shapes"); + slide.load("shapes/items/type,shapes/items/id"); await context.sync(); const shapes: PowerPoint.ShapeCollection = slide.shapes; - shapes.load("items/type,items/id"); - await context.sync(); - - // Move the first grouped shapes. const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); - if (shapeGroups.length == 0) { - console.warn("No shape groups on the current slide so nothing to move."); + if (shapeGroups.length === 0) { + console.warn("No shape groups on the current slide, so nothing to move."); return; } + // Move the first grouped shapes. const firstGroupId = shapeGroups[0].id; const shapeGroupToMove = shapes.getItem(firstGroupId); shapeGroupToMove.top = 0; @@ -76,20 +75,17 @@ script: // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - slide.load("shapes"); + slide.load("shapes/items/type,shapes/items/id"); await context.sync(); const shapes: PowerPoint.ShapeCollection = slide.shapes; - shapes.load("items/type,items/id"); - await context.sync(); - - // Ungroup the first grouped shapes. const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); - if (shapeGroups.length == 0) { - console.warn("No shape groups on the current slide so nothing to ungroup."); + if (shapeGroups.length === 0) { + console.warn("No shape groups on the current slide, so nothing to ungroup."); return; } + // Ungroup the first grouped shapes. const firstGroupId = shapeGroups[0].id; const shapeGroupToUngroup = shapes.getItem(firstGroupId); shapeGroupToUngroup.group.ungroup(); @@ -148,6 +144,7 @@ template: content: |-

      Shows how to group then ungroup shapes.

      +

      Code sample based on community contribution from Maarten van Stam.

      Set up

      diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ae29b25cf..78fca06c5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15776,20 +15776,17 @@ // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - slide.load("shapes"); + slide.load("shapes/items/type,shapes/items/id"); await context.sync(); const shapes: PowerPoint.ShapeCollection = slide.shapes; - shapes.load("items/type,items/id"); - await context.sync(); - - // Ungroup the first grouped shapes. const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); - if (shapeGroups.length == 0) { - console.warn("No shape groups on the current slide so nothing to ungroup."); + if (shapeGroups.length === 0) { + console.warn("No shape groups on the current slide, so nothing to ungroup."); return; } + // Ungroup the first grouped shapes. const firstGroupId = shapeGroups[0].id; const shapeGroupToUngroup = shapes.getItem(firstGroupId); shapeGroupToUngroup.group.ungroup(); @@ -16015,15 +16012,17 @@ // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - slide.load("shapes"); + slide.load("shapes/items/type,shapes/items/id"); await context.sync(); const shapes: PowerPoint.ShapeCollection = slide.shapes; - shapes.load("items/type,items/id"); - await context.sync(); + const shapesToGroup = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); + if (shapesToGroup.length === 0) { + console.warn("No shapes on the current slide, so nothing to group."); + return; + } // Group the geometric shapes. - const shapesToGroup = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); console.log(`Number of shapes to group: ${shapesToGroup.length}`); const group = shapes.addGroup(shapesToGroup); group.load("id"); @@ -16212,7 +16211,9 @@ const minNewShapeWidth = 50; const minNewShapeHeight = 50; for (let i = 0; i < 20; i++) { - const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle); + const rectangle: PowerPoint.Shape = currentSlide.shapes.addGeometricShape( + PowerPoint.GeometricShapeType.rectangle + ); rectangle.height = getRandomBetween(minNewShapeWidth, maxNewShapeWidth); rectangle.width = getRandomBetween(minNewShapeHeight, maxNewShapeHeight); rectangle.left = getRandomBetween(0, slideWidth - rectangle.width); @@ -16220,13 +16221,9 @@ rectangle.fill.foregroundColor = generateRandomHexColor(); } finalTable += "Done
      "; - const slideTags = document.getElementById("slide-tags"); - if (slideTags) { - slideTags.innerHTML = ""; - slideTags.innerHTML += finalTable; - } else { - console.warn('Element with ID "slide-tags" not found.'); - } + const outputSpan = document.getElementById("outputSpan"); + outputSpan.innerHTML = ""; + outputSpan.innerHTML += finalTable; }); 'PowerPoint.ShapeFill#setSolidColor:member(1)': - >- @@ -16306,20 +16303,17 @@ // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - slide.load("shapes"); + slide.load("shapes/items/type,shapes/items/id"); await context.sync(); const shapes: PowerPoint.ShapeCollection = slide.shapes; - shapes.load("items/type,items/id"); - await context.sync(); - - // Ungroup the first grouped shapes. const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); - if (shapeGroups.length == 0) { - console.warn("No shape groups on the current slide so nothing to ungroup."); + if (shapeGroups.length === 0) { + console.warn("No shape groups on the current slide, so nothing to ungroup."); return; } + // Ungroup the first grouped shapes. const firstGroupId = shapeGroups[0].id; const shapeGroupToUngroup = shapes.getItem(firstGroupId); shapeGroupToUngroup.group.ungroup(); @@ -16339,20 +16333,17 @@ // Get the shapes on the current slide. context.presentation.load("slides"); const slide: PowerPoint.Slide = context.presentation.getSelectedSlides().getItemAt(0); - slide.load("shapes"); + slide.load("shapes/items/type,shapes/items/id"); await context.sync(); const shapes: PowerPoint.ShapeCollection = slide.shapes; - shapes.load("items/type,items/id"); - await context.sync(); - - // Ungroup the first grouped shapes. const shapeGroups = shapes.items.filter((item) => item.type === PowerPoint.ShapeType.group); - if (shapeGroups.length == 0) { - console.warn("No shape groups on the current slide so nothing to ungroup."); + if (shapeGroups.length === 0) { + console.warn("No shape groups on the current slide, so nothing to ungroup."); return; } + // Ungroup the first grouped shapes. const firstGroupId = shapeGroups[0].id; const shapeGroupToUngroup = shapes.getItem(firstGroupId); shapeGroupToUngroup.group.ungroup(); @@ -16593,14 +16584,17 @@ context.presentation.load("slides"); await context.sync(); const slide1 = context.presentation.slides.getItemAt(0); - slide1.load("shapes"); + slide1.load("shapes/items/type"); await context.sync(); - const shapes: PowerPoint.ShapeCollection = slide1.shapes; - const shape1: PowerPoint.Shape = shapes.getItemAt(0); - const shape2: PowerPoint.Shape = shapes.getItemAt(1); + + const shapes = slide1.shapes.items.filter((item) => item.type === PowerPoint.ShapeType.geometricShape); + const shape1: PowerPoint.Shape = shapes[0]; + const shape2: PowerPoint.Shape = shapes[1]; shape1.load("id"); shape2.load("id"); await context.sync(); + + console.log(`IDs: ${shape1.id}, ${shape2.id}`) slide1.setSelectedShapes([shape1.id, shape2.id]); await context.sync(); }); From 5706df44d20ac86cfabed149f4489a2788b2b5e6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 7 May 2025 14:21:10 -0700 Subject: [PATCH 131/156] [PowerPoint] Add binding-to-shapes snippet (#980) * [PowerPoint] Add binding-to-shapes snippet * Apply suggestions from code review Co-authored-by: David Chesnut * Updates based on feedback * Add API mappings * Remove API mapping * Update images * Re-add API mapping --------- Co-authored-by: David Chesnut --- playlists-prod/powerpoint.yaml | 9 + playlists/powerpoint.yaml | 9 + .../powerpoint/shapes/binding-to-shapes.yaml | 370 +++++++++++++++ snippet-extractor-metadata/powerpoint.xlsx | Bin 16114 -> 16593 bytes snippet-extractor-output/snippets.yaml | 427 +++++++++++++++++- view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 7 files changed, 799 insertions(+), 18 deletions(-) create mode 100644 samples/powerpoint/shapes/binding-to-shapes.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index f427754c4..edea496ed 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -107,6 +107,15 @@ group: Shapes api_set: PowerPointApi: '1.8' +- id: powerpoint-shapes-binding-to-shapes + name: Binding to shapes + fileName: binding-to-shapes.yaml + description: Shows how to create binding references for images and work with z-order. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes-group-ungroup-shapes name: Group and ungroup shapes fileName: group-ungroup-shapes.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 7030c5a3d..efc61d962 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -107,6 +107,15 @@ group: Shapes api_set: PowerPointApi: '1.8' +- id: powerpoint-shapes-binding-to-shapes + name: Binding to shapes + fileName: binding-to-shapes.yaml + description: Shows how to create binding references for images and work with z-order. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/binding-to-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.8' - id: powerpoint-shapes-group-ungroup-shapes name: Group and ungroup shapes fileName: group-ungroup-shapes.yaml diff --git a/samples/powerpoint/shapes/binding-to-shapes.yaml b/samples/powerpoint/shapes/binding-to-shapes.yaml new file mode 100644 index 000000000..10e205150 --- /dev/null +++ b/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -0,0 +1,370 @@ +order: 5 +id: powerpoint-shapes-binding-to-shapes +name: Binding to shapes +description: Shows how to create binding references for images and work with z-order. +host: POWERPOINT +api_set: + PowerPointApi: '1.8' +script: + content: | + document + .getElementById("insert-image-and-create-binding") + .addEventListener("click", () => tryCatch(insertImageWithBinding)); + document.getElementById("replace-binding1").addEventListener("click", () => + tryCatch(() => { + replaceBinding(1); + }) + ); + document.getElementById("replace-binding2").addEventListener("click", () => + tryCatch(() => { + replaceBinding(2); + }) + ); + document.getElementById("replace-binding3").addEventListener("click", () => + tryCatch(() => { + replaceBinding(3); + }) + ); + document.getElementById("load-bindings").addEventListener("click", () => tryCatch(loadBindings)); + document.getElementById("bring-to-front").addEventListener("click", () => tryCatch(bringToFront)); + document.getElementById("bring-forward").addEventListener("click", () => tryCatch(bringForward)); + document.getElementById("send-backward").addEventListener("click", () => tryCatch(sendBackward)); + document.getElementById("send-to-back").addEventListener("click", () => tryCatch(sendToBack)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + const flowerImage = getImageAsBase64String(); + + const greenery1 = returnGreenery1AsBase64(); + + const greenery2 = returnGreenery2AsBase64(); + + const greenery3 = returnGreenery3AsBase64(); + + async function insertImageWithBinding() { + // Inserts an image with binding. + await PowerPoint.run(async (context) => { + const bindingId = (document.getElementById("temp-binding-id") as HTMLInputElement).value; + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const myShape = slide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle, { + top: 100, + left: 30, + width: 200, + height: 200 + }); + + myShape.fill.setImage(flowerImage); + context.presentation.bindings.add(myShape, PowerPoint.BindingType.shape, bindingId); + await context.sync(); + + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + + const option = new Option(`Binding ${bindingId}`, bindingId); + + // When a binding ID already exists, the binding is updated to refer to the new shape + // so select the existing item rather than add a new one. + const foundIndex = findDropdownItem(bindingsDropdown, option.text); + if (foundIndex < 0) { + bindingsDropdown.add(option); + bindingsDropdown.selectedIndex = bindingsDropdown.options.length - 1; + } else { + bindingsDropdown.selectedIndex = foundIndex; + } + }); + } + + async function replaceBinding(greenery) { + // Update image in binding with selected replacement image. + await PowerPoint.run(async (context) => { + if (greenery === 1) + context.presentation.bindings + .getItem((document.getElementById("bindings-dropdown") as HTMLSelectElement).value) + .getShape() + .fill.setImage(greenery1); + else if (greenery === 2) + context.presentation.bindings + .getItem((document.getElementById("bindings-dropdown") as HTMLSelectElement).value) + .getShape() + .fill.setImage(greenery2); + else + context.presentation.bindings + .getItem((document.getElementById("bindings-dropdown") as HTMLSelectElement).value) + .getShape() + .fill.setImage(greenery3); + + await context.sync(); + }); + } + + async function getShapeForBindingId(bindingId: string): Promise { + // Gets shape associated with binding ID. + return PowerPoint.run(async (context) => { + const binding = context.presentation.bindings.getItem(bindingId); + const shape = binding.getShape(); + return shape; + }); + } + + async function loadBindings() { + // Loads bindings. + await PowerPoint.run(async (context) => { + const bindings = context.presentation.bindings; + bindings.load("items"); + await context.sync(); + + const bindingCount = bindings.items.length; + if (bindingCount === 0) { + console.log(`There are no bindings.`); + } else if (bindingCount === 1) { + console.log("There's 1 binding."); + } else { + console.log(`There are ${bindingCount} bindings.`); + } + + bindings.items.forEach((binding) => { + getShapeForBindingId(binding.id).then((shape) => { + if (shape) { + console.log(`Binding ID: ${binding.id} refers to shape ID ${shape.id}`); + } else { + console.log(`Binding ID: ${binding.id} doesn't refers to shape.`); + } + }); + }); + + populateBindingsDropdown(bindings.items); + }); + } + + function findDropdownItem(dropdown: HTMLSelectElement, text: string): number { + // Finds dropdown items. + for (let index = 0; index < dropdown.options.length; ++index) { + if (dropdown.options[index].text === text) { + return index; + } + } + + return -1; + } + + async function populateBindingsDropdown(bindings: PowerPoint.Binding[]) { + // Populates bindings dropdown list. + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + bindingsDropdown.options.length = 0; + bindings.forEach((binding) => { + const option = new Option(`Binding ${binding.id}`, binding.id); + bindingsDropdown.add(option); + }); + + bindingsDropdown.selectedIndex = 0; + } + + function bringToFront() { + // Brings the shape to the front. + changeZOrder(PowerPoint.ShapeZOrder.bringToFront); + } + + function bringForward() { + // Brings the shape forward. + changeZOrder(PowerPoint.ShapeZOrder.bringForward); + } + + function sendBackward() { + // Sends the shape backward. + changeZOrder(PowerPoint.ShapeZOrder.sendBackward); + } + + function sendToBack() { + // Sends the shape to the back. + changeZOrder(PowerPoint.ShapeZOrder.sendToBack); + } + + async function changeZOrder(operation: PowerPoint.ShapeZOrder) { + // Changes the z-order position of the selected shapes. + return PowerPoint.run(async (context) => { + const selectedShapes = context.presentation.getSelectedShapes(); + selectedShapes.load(); + await context.sync(); + + if (selectedShapes.items.length === 0) { + console.log("No shapes are selected."); + } else { + let direction = 1; // Start with bottom-most (lowest number). + + // Start with top-most when sending to back or bringing forward. + + switch (operation) { + case PowerPoint.ShapeZOrder.bringForward: + + case PowerPoint.ShapeZOrder.sendToBack: + direction = -1; // Reverse direction. + + break; + } + + // Change the z-order position for each of the selected shapes, + + // starting with the bottom-most when bringing to front or sending backward, + + // or top-most when sending to back or bringing forward, + + // so the selected shapes retain their relative z-order positions after they're changed. + + selectedShapes.items + .sort((a, b) => (a.zOrderPosition - b.zOrderPosition) * direction) + .forEach((shape) => { + try { + const originalZOrderPosition = shape.zOrderPosition; + shape.setZOrder(operation); + + console.log(`Changed z-order of shape ${shape.id}.`); + } catch (err) { + console.log(`Unable to change z-order of shape ${shape.id}. ${err.message}`); + } + }); + + await context.sync(); + } + }); + } + + function logSelectedShapesZOrder(selectedShapes: PowerPoint.ShapeScopedCollection) { + // Logs the z-order position of the selected shapes. + console.log(`Selected shapes:`); + + selectedShapes.items.forEach((shape, index) => { + console.log(` [${index}] shape ID ${shape.id}, z-order position: ${shape.zOrderPosition}`); + }); + } + + function getImageAsBase64String() { + // A production add-in code could get an image from an + + // online source and pass it to a library function that + + // converts to Base64. + + return "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"; + } + + function returnGreenery1AsBase64() { + return "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCACmAPoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4r0LWZNPM1xavBbwt92IyAEKechjxz71m+IfEdnrslvZ20jPbli1y6HKrgcfNj5ueT2roPGfhvT7PVbKGEwgzITLGEVoyM/KcevUcVwfiq2ks7q8stHlKW9vGu4RgDjHzrnrwTXxOEp0sTUVeO717eWvfyPy3BRoYmpGtHSTV1fS3TXu76r7yTRtdfRQ3miSeF8usinkZ/Qg12GheJ9Pmt5bh5GshHhmt2Ybs/Q+vtXjtrpdxezRW8RJVQWlUOQFHbPv7V19gjwrsvbN55HXakluQRIRxyDyPevQxmDo1N3q+3+R6uOwNGSvf3n2/y/rv3INY+IFyb++NrG0LStnfO4JVccYFQ+E7RdYiMU05ESEzyscFvLAxxnqc547ZrO8ReEbuzuhLeHy57gFlTH3SOikfTvUHgQzSa2IjxEsbl3IzsU8Nj3PQD1xXeqdKGHbpaWX5Ho+xoLCSnhmlZb+mn/DHrQ8OXd9ZyJokOywjTJ3XRVk9wxOM+2MVxl3pt/p95LCLSKUFQ7XE0wVTn1J6nr0r07wLqvkK9uIJzDAOhYZdX459MYzXRal4Wt9QWSGfTY4EhkEjJOgLOjgcq38OeDwT1r5OWZfVqrhON1/Wu58NHM54OtKnVjePfr89df8Ag6nzp/ZNzDqkMt7AUt5ZRuuY3/dL327lPB4711HiTUJdQ1AIhS3s7RRBCLUAPIwUZJYdcE9a0vFWu2GmafLounuXEkmCVOTsDZXdjue31PrXPWvi3T7a5awuUjgaNjsl5KcgblJ7HI+nNfRxlOvFVeXVbenc+ojUq4qMa3s9Ve3pprb8D0bR/E5014bTULOaN7hcTgKPlcDhgc459OvNbGu6lZahFGt3KqI6qltGCPMfb1Zh2HJ/xrzi5+I2nFGtriCS8mPLtblWT2OcjBrn5dS0/XLiBVsJLUKxWOK3AZnyf4jxz7CvGhlsnP2jTj6ao8KOUSqT9rOLh5rX7tb+XoaPjO+tv7T0yK2+extxtll2h0c78/L7qDUms6PJZaexZEuLcgusgcEue2fQms/Ubae8SC1gt4IfJZtsMlwu+RiR97HA6AAf41es9Q1G3igtL+yluZ2iIaOaLYE5PJZsdBj/ABr15c0YQ5Htvqe3yyp06fI17t7q+r63/rQ43TdW+wmZriyYxsy7AeGBwc1JquurcQFI4GUMMbmIH8q3Nb8KX0ljLfWvl39tGTLcLESDCCcAjPUAnkjirsXw4+2abPJ5riaNgoDg/NkdQoH3fcmu1VaLtUbPSeKwiarTfW3XyOR017jy0jsvN3S9Ah+8f5V6B4O0eTULQubmO5v4JCDzu8sEdRngntntj3rktF0AeHbtl1ZTEZg0cb9k6ZbA7HkfjW3tl0aRLy2kMSoeJ4jkY+ornxl6icKbs3s7bnPjpKteFF77O2/lf8D2HwE8mmX0kl5IX2golw6hgePmQ/hz9Kk8eahZJpr3EUFhJNOY/LtrcsVkPR+vUAEnd61wcXiXU45wkixToMNMgTAmHbBB44IOap6l8QE06RDHpEqRStxvlEjyMvRSxGQBnoPWvkY4GvKsprXyTsv6/rTp8THLa1TEKqld9k0lp9z+5fd04zxN4LvdU8US3Lb1t7qMXIdl+YDO3bjvgjGa6zwh8LrXUtHldbSG8WMMWaVT5jY9gciotY1XXNfe31GG2ZJ7SMr5UBz5aEkhdvU9ST9as+EviKtjBOn2eYXOCQsKsQSevT+R/Cvoa9XF+yj7JXtbRH0uJrY+eFUaL1jZWT29bfn+BxGo+HJNH1py0UsNrtGxlO7bIRwp/H1rd0DX2sbFbLUomubdP9XIOXUHsR3HWtdPEMGsSTFbCazkZsyzzAoT8wYkKKyPE2mWj5eCUv5gDRyZIwM8rn3rf2n1iKp11r/Wp0Os8Ry0cTGz019Ov9P5HQ6F4njtVP2UfatJaQiSMKVaKRcHKj3z0rtv+FoaFqEEyXD3UMTg/IysMk8kew9hXlOhSjwzYPIYDP577Vt2Y8kDls9e+K39c+G9/r4tWGotb7ufsyw5SNz1+YHJx0yR2rxMRhMK616zsuj799LP7/1PDxeCwU6ydeTiukr7230Sevnp95neLfFRiUy6cvl6ZApUrdDcJHZuw6r+HvWbB4i8SXGnvHFK9vDIQ8flSNvjUdAD3Hsa7PTPApvwbQRrc2sEeXt2mEpf1OMcdCSQScVS8X6ReeHdNuUsrNbSW1jV45PLL7lyBjDE888V0U6+HbjRjFN93/W510cThbxw8Ipyvu/1877779jBubfVNXtP7Q1W/v70XGQbbdtR9pwCccBc54A5Ndd4Z0SK3stM1Gx8vzEkElwGZVbdnDISegxwPwrirPxzf2UPlXO2/sTzG7Ha6dyM4x1zwRVnRtbtdZvZ7O7RbNZcPFJI+A3+y3b0IrTE0K8qbW0V22t2tpt+hricPiZU3FpKK7bW2tbTZfkez+Ib7+0bN7WR5pSysQJBsQKR/Ge5FcQukuAANRlA98ZrldfifT3WCW9mIRN0dsk5JPpgZ4HSugtPCkL2kLTWKtMUUuSE5bHPXnr68149PCxw1NN1NH5f8E8OlhIYOkrVNH5L9WZOta0upazGtjOY7WJDuu5FzIcLjIz0AAAH4158NQn1Fo7W2DmSZhuc8E4OeP55ru/FPh5dOtUIhd7K4cRsAwRxkZHI6j2xXEQaLqVh4gJit5bkW4D8Db8jDj2BINfVYF0lSvT7aX8v+D/wD67L/Yeybg1otL+Xf5v07Gp4atrjRbq5liMVyHbewGV8scjdkjnr0r0fTLFp4mnW0SKUnbE/+syeucD7o5zXJ3Piu2sLqDzNOfeqhBGIxtdh6nPXpxXpdnrkUujW17DcRxQ7fNZVUbkZh83OfvZ4wfQYrycZ7ao+eUP+CeFmlWs+Wo4ay6/pp/kcnqngXVfEczxX+ohtQijwsyxbYUZuVJ53HPTpx6VxnhJo/Bt2RPbi8MqkTyKeY8McbfXpznrmu18TeNleBodLuA97d4WSQoxaBADkkkDLEk8YwPwrhpNct9KY6RcWv214CUaeFtrHk4zkHP8AOu/Dxq1KHs6kd+mx24FYqpQlSqx91291Kzt1fTS+y/p9rL4w0tJUubO5njuYhkRRxMCw6kHtj68VtWfjbSJ7NryTUJkljTMdihdFz3ATJAJ6cHFeMS+JUtrxJLSE2vltkyO3mNjpgjgYPcV02leJNMmhMkmnzyPjpaFWUt2+8QV/EHFcuIyuHKtH96+70FiMojGCfLL71f022+Zi6vZXOm3ga2gDS3aecrngQbiflHbI7Gtj4R+C77U/HluslrDttozKy3v3GB+UEepyc1T0vxEt54pU3bxxOclNrZSFtu1FB9h39Sa9En0c6e8TQNM16pLqyzEfKRzt2nqM812YnGSw9qU1rJbnVjcXVoUnh5K0px3/AKfT/gj/ABX8PUuvFgiM1tHvhbz0xhwR9xmA5UZJGT+tZ+s/D0eArC21mW5jdEmEcu1uY0YEb1GOT7de9aXh6/0jwjoOsXGoXkstxdM5nkkYvM/zY5J+9j/GvNPEGtxavrbWtlfXM2lrEWZXkYx8f3VJ4PGPrV01Opon7q303PKwUMVWn7JTfs4aNuOkklr6PXTfp6HS6ZYJY6zFKMfccxuOgbadpB/l+Fb0miCSxntrhi3m4kEclyFORljng4OO3HWuT8OSy2mn2MgRpYxclzCxzhFxhQe3LE/lXTweJ7bSklhtdhklkVy1/GAobOf9Zuzn2715OKhV51ya2/R/gXiY1ef3Hdr9H+BT13UbXw/okSRGV4byIAwEZK5O1yT3GBx659qpad4qs9PvxJDqX2nzioMRQuenOBkEHj6YrT1/+zv7Evbi/wBWS6uZlL+QAHMj9toU/Lj17CvPhpU+lRxNHJukWTLkttLrnIOfTaR0rsw9OnXpNT3/AD/D+vy6cJRo4ik1O9238/vXTv8A0rHijULi8m89FkkswWbY4+bk9QaxIruG5LW8n7kyYZJGOBn0btg+vY12Ws7bzS0iAmyF587CIuB13d/oK5m70My+UXKWibNyu+SzZ6DA7e9enQqxlCz0PZwlSn7NRatb+vmd34R1u2Wyay1KG5F5DGVjeGBpd6jpnHQjpnp0rldR8QzXniGOERTWOnorwqjDDoepkb3yOcdAMV2vg/wxPp+jJFcFhMzEurAkKTgKM5/QevGar3/htItYjnmmbEcZEweElSuCGbd14BHboK8iFfDqtNRV9/v8l0PDp18LDE1Gle97evkvP+tC7pkxstJihiktbiJ5FL3Mb7WwO5PrmsC1ijv2+wmVJI2uXjkkg+VWIkIDY+mKwNSbS7SW4jto5opo3KyPJlEjI68HkmrnhiG4tY7u8yTmQCNAeC+ASx9OMfn7V0qk4U3OUtel1Z/1qdCwvs4Sqp6vXVW1/Huemw6Jc6WIPsEVu1sWCiCRQQRn+8ecnqTmsbUPDt7qP2m1mnh1KBi2bTytmEzn5HwPmA598d66/wAJ6v8A2tp0T3BSAxu0cjHP7skgh+PYEA9snpWr4o1vS10yERXMdzrNumxWtmLpI2MKzNztA98kgV8lHFVqNdLlvK+r/W/6nyEcVXpVuTlvK+9vxv8ArdPzPF9K0E2OlxxtHJLcIWES54Vd5IdvUt6ele1eGHF7aFVOLeaFGjniHzEYy/PY7sL7AmvLpfE9rYXk9hrDLZajCQZJo1Lwy5UEOpHIyDnGKqaZ4ldbu5jXUHttPcjyJUjx5X+1jqM8816eLw9fGRcmrdVu079rf1uerjsNXx8XKSt1Ts2nftbf/K/U9Q8b6raeH7CxuYLdre4uAVEKcs0gGGLN0AGeT3q3rN3Za1olvE16/wAtrmaGA7iG28OMZxg459q4e+umvLG7lk1WPWpfsrRJCkisX3dPlHQZ5JOOleY6pr2vW9otjJqdz5boQYQdjIueA2OcegPpWOHwEsTGKUknF+f4af13OLB5O8TGCjO0ovd369rq+nn9/Q72f4a6ddalLdxO2ovJEDOqkptYD5uFPJ747VxN14fNhcva3jNG8aExSgZ3r/CpGc57A1L4A1LWLYXEllcF3gmWQ2R6SAggse/sce1bmp+K5tTkP9rWqw3TSFLaCOHK5xnJc/Svej9YoVXBy5kkvVfI+lisZhqzpSnzxSXqvl6fKxW8N+Ho9K1CzvHileWNt86sRg8fdA9Rwc+or0VNR8NMoLO4YjJDQNkH34rgLb4g292oS4s5be5fg/Z9pQn2BIxVeXV70SOBZXwGT1OD/KvMxGFrYmd69015o4sThK+LneveLXZo6dbO+8X3C3d7ssLG2VViso23ygn7oIOOSBnPYYrX/wCEHls7i0nS6mt4ZMlldP3jOP4jt6/j04AottYsn1G5khiQW28yyyQH5o2B6lScj7wGPfjNdvN4n0/WI1ms7qGKVV2/ZmyNx24AYHJH1Ga8jE4itSahCNo9u3rufO4nE4mk4xpwtHtbb8+vfU8c8fpJGczYLRSiJ5O8yEHDZPJIxwevNa3hvTr+W2ihtd5slhVri4RdoLYyxOPTGMe3vR8RLRb3xBBbF4biWWJ/NiiPCFsBeexGOD1rofhwsUGkW6xvJcPFCIZPLX5hICdzbe4J59xXp18TKGBhUitT06uIcMvhJLXt69fw09TMu/BV3dSEC7u0aMbt0tson2ngAFsgqT35x6c1wXibwPL4dtTqEUNxc2zMyyTy8vHJxyw6EcivXpvFmj6LcxSyX73Cl2PlRyO6hiAOcjIRcZxycn0rzvx94rudYRo4YWhsplZ4o24aYAjcfYnAAFVl2IxM6qUlaL+X9dzTLMRjZVoxtaD3urf13/pnHL4TjsdLJuw7TSIHDRsAqg8g992e/Su8s9CjksDAqx7EjAe2UBVC4wSfXnv7V53pU2vGGe6LPFpzOSN8Xmp7YB6DpzxXTar4ytp9OitLu1u74yKGXZLsiU56gdTg/wAJr1sVTxE5JRd9enT5Oy/E+gxlPE1JKKlza626bd7LT1ONt9I8zXoI3Gx1QSyIRjzNoJyD05wPzNd9b/EAvA9vqNodOhABee337s5Hpyo/OqNvB9r1K2e3tobWe3iVzPMS+0MTgYB5PPQe/pWT4v0rVLlonE4u7dmJEcZEaqw65yB68Z960qezxc4xraWXfZ+XT7zWo6eNqQhW0su+3p027lzxnJpGsR2aac0kxDs8mAQqAjpk8kk8/h71yPh6WPT9ekjvSzW5V4WMXJyORx35FSR6lqunXPlfZY4pz8ynbkY9Rzg/WptJ0cTs804MjiUHcp6HruJFehThGhS5G9PXU9OlTWGoOlKV4201u9TrbXxfY6TbyIv2S8gY5Ub2V0PqMDntwfSubk8VXOsyOpigSFH3fZQMK46ZJJyT+PGeKoa1EtpdSL9nUEqZBhiP0rHtM3LmUxgqhHyjofaqpYeklzpasMPgqKi6qWr6s7fSL2yWdFeyuGZjgxJIrgDuQcema6rVNJt9St5fsyvbxPtijhILKmQNpbOOff3NcMNRtoJIri3w0u4ERjKsvr/+uut1DxANP015bbUZZFkGUiUrvLdhgDIx3NeViY1OeLp6X/rzPHxVKp7SEqSab73/AOCcjfaVd2QtLS5uZptPWVkMcoxtdeqk9+351t2Gu2slisWoxnzo1CeYF3bgBgAjqD2rC1jVbvWYYllYwRgt+6Q9iBlm75PH5VjXLXUY2rKSqEAMR82ewzXqex9rBKej8j1Vh3iIJVWk/L1/q56/4a1q+8Q6WyWF39nkgby2Mqhm2DlT6H2OMjnmsbxR481Cz1F7G4ujMrRCN47aEIzg9ULEk898evSuW0nVpykk0ZubS4jXDSWZxuz26jGeeKu6boUs8SatNDcElmWGJGH8J5YsR6k/U5NeZHB06FSVSVrdFZXv6nkrA0aFWVSqlborK935/wBWKGseHNQ1iS+1Iqt1chw0kMGWZVHHYYOAAMZzXR+HtetNLtZ4riIvbyv5sc8Xzbc8FSPwH0xXoGgaFE3hQfZ76Swm8kOm3O1+AzdOSckZP+FeQ+LtJu7XV9TuoHRELeeYoyVYoR98L0weTjqKVOvDH3oT6CoYqGZOWFnoo7dO39dezNu/8TWn2mB9Ne4FzE2U+UovP45OfSugs/iVbGB4JtGmlvJOoglz5je+eR+tecaF4ckvLl4Lq5MEuwzvsXzDGgGctz15HHvW4nhnUbu0l/s66vppQNqmWMqh9cMMnOO1OvhsI7Qm7266/muhpiMHg9Kc3e3Vtr8V0MnxHqxv9buLqWzimllKl3UtsB24IGPTGPwqxpuv2XkLDf74GRdqzRpuVl7BgOQR681ly+Fb/SLaS8EscghGZY1yRjofY1Z8ItFf6vBJcRwpEN3lq4+V3A4zk9M9q9GUaXsm46qPbyPUnTo+w9x3jFdPJf15HoXhDRNPvYdRewYyRh41muJkMfUZ2qOp6g89eK6DVPA8hupDeBX2ERZuI0LKSDtYHuOOQe1ZXgy7m03Uru0kulgmmfeUmGGORyVzwc45B9BirvxDv7kW+nWtxfu8st2kSlMLuT3A6dByfevkKk60sZaL0f5W9D4atKvLGqEJaPru7WWu3kcwfh/dpqVjfxTCzuvm3CzDRiRcE7VI79u2aW78OzawTdte3EkkB8uMLJxEw7jPUngmvYb65gOhLaveLBOzOoTb++j4IUKByD7ivPNY1/TNIuhayXb3QkiWQz2sQdWZuHAPqCvJFLD5hicTqlqvLoLC5lisU9F7y0WnS/p/XoeR6tduk00M9oEnGcTI2Ebnrj/A1SW9vFUAXk4AGABK2B+tdj42n0qSKO306AeaJN7NzhVAOVPueOBXCgsR1A9q+3oNVKadrep+hYSSrUlJxt5M9W1G0m0fxtFcwoklzJZLvgzhbggEMvqCcAirWseOU8QWK2+naVJpZZNk0kk2T7jIA/M9KyrK5jnlk17UpjLFK29TNIvmMBwAFB68dB0qh4c126uLPVGZwCs4jVSoLxoSWwDjPYDPtXgqhFpVKkbygkr6r/h7eZ8v9WU0pzjeVNJXu0r7W87ef/AM+/1O4sz5dq8NuvB3lmZ39RuIHB9vzrcm8cWkbM0cFzaXAO5REV2KeuVbOcfhWze6BNc2xifUBIzKA8U6F4lJGdu48g+4FZ0XhoSWccel+U80PAFzCjrIw6jPOMn8K1WIw1RLm3Xr+Lsa+3wtWK51qvX8Xb/P1G6d8Q4J2cXulxXE2Mh45RErt+II/Kqflal4l1I3csGxIVBVchY40B4UEn3/ABJrKh0yxuJrO8uytsJHeIxuT5W/blfoM8EdORXYaLaSWM8qXAa4inTHlH5QSoJUKeg747c0Vo0sLedGNm1/w9tSq6o4W86MbSa637621t+XQ2dN0A3N3cyiTyraNQ0JtSJNo4CqRxxtri9U8K3XnyafAksF1/rYTGflmVum3Iyv59jXoA8R3uj2s80WnRtCISxZn2M4HPz9QOnbrx0zXm958R7q6v42haR7yfASdo9ghUcgIvOcc4z69K4cveIqTlLTl0/r/h/kcGAWMqTlKCVlbr27/jv8tTa8IabJpjLburXsqw5Oz5RIVJ2qvc/ePPoK7bULKzvLaX7dDBZ2dud0hdAPOXAywOMjB4+pry6PxpqN55UbWdq05YBJBlMnPHQ49q3bjxTYvYNKbW4k1XGwC4+cJgYGWPUD0xRicLiJ1VN7+X5/0tAxeDxE6qqS3fb8/L1tp9xj6pf6XI1tp0K7reNpJXlOCyDbwue/QEirPhieyvbCRLZlk8tvncsU2KTnGcVxOrEafN9njHlxhEaTdyWOAdv0z2p2lR2eoukQmNtLKwQpg4Gepz0xXuzwqnStdn0UsHF0NJO2/fzuzsNTjtNb1BvIt0CRghrhzlZBxkD2HPNeexy/Y5mEQBjYn5G6EZODXpFpaPIJbaxWGysohtcsm8sBxubPJJ9Bgc1leKfApuSstnI67F3yCdcYTuQQScDk4P51GHr0qX7qT0IweJpUZexnLR7X/U5G3uWecTxqo8skMnUe9aV9qUU0UcUEbxzONhdyBgn0I68d6YnhVoVaW3vo7gr12ZXHvg84pv8AZMt24kk3zkcbnbhfX6Yrvbpyd7nqylRnJST2LWiQx2txMLlWOE8xmBzuA4A+ua6zStBsdUtPtV5ZKqzFvKghkZPlHG5jnk5Bx06GsDT9LuIWkmnnVbAYj+Y7mJ4OFA6/j2NeneELPEtmjpvulgRUhZMqoZ8IWB6n5s47cV5GOr+yi5RevkeBmOIdNOcJa+V/69ex5lq0Vz4XuUmsVM1hP8rRSHcVYdiR9eD71Jp/i++Znht1aIqpZra4X5Tk4JHf8RXtv/CNTX8LtZ3CK8bsZprYBUOMBVbgc59q5DXdJtbK6tp5mAdopTNG/wB0EYCOAOm4nGBwcVyUcfTxC5Jx1/rocFHM6GJfsqkLz/q11b8Sp4W8cNp+myQNcQ6a8YYkT58qQN1PBzkdMdDxxWHqfjjTi17NDby6hdShws1woURgjaDjvgdAMDpXMX0usaoRi1hUEbvIjILEepyc4rMs7a7vdSitriNoIy4DLs29Ov1r0aWBowm6vXd6/wBM9alllCMpVpb7tJ/03953GhRt/wAJJdeQm9LpXTnAAVsMGJ6ADHNel6LpljqmhE/aERbKAyM4DHB3nOABnJHPT0rzLwJc22lSvd30jrBNm24XIQEbgcenGK7OLxTpWl3atZao7qSd9vDExG09zuA6fXNeDmNOpUqclNPS2q8jwMzp1KlTkpp6W1SdtN/8jb1Tw3LZXL3z3DJKGj8tJZRNHcq2MLjAA+Xkg9ga8GjTdeX0MNnJNYJPJ5TQADALHAGevb3r3TxPq+mXfh24uZNTS/jeIwpa7iGyeOB1UjqWP51xvhzwlBPBdI0S3UFgxiSN/usSSSxx17d6MvxDw9GU61+i2t/W48sxX1ajOpWT3S2tt9z6/i/Q4fQ7i6a8Wxa2a7aRz8jthkx1O7sAOufSuxvfDwuYzClq1vEp8xLhJCQjY6knGRkAZxx2pLnQ7u18U2V7ZxR2x8li8BbBdgCMYPJDDFeg+HNe0DWLX7PqIOkXSoFWKdB8vGDtZsbhke9dGKxcpShOitHvrs/P+vU1zDHyhy16Mbq2ttWn6L+u5w7+L9X8TfY9N1FoY4riPaxhHzzbOfmIPA4JwOuKl1PSbrStLg+yQQhl3sv+jg7UGeF5xkHJ5FUfFviGw0/xjGtpL5s9qU826tFARs5zx64Izjg810Hi3xpZJp9qLS+W5jkQEJvBZXJ+Yk9QMA8Go9jUhOmqVO0Xrbp/Vu/4GLhUg6PsKVoy1tbT+rW36djyPxDc3trcSQShg7OJneQ5aTPIJHb6Vn+eh62/Ps9XL7UbjxHqM1y6dPljUdNo6cnr3OferS+FdTKgm2jyR3lXNfWxlCnFKbsz7aMoUYRjVsn11LcVteTW/wBofRvJ8pf3kwiZe3JwTx9RW54S0EaYt2TvlMu0NFn7+4blVvoMMSOeQPWu5s9NLadJJazLNgbYvOUFcdd27suO3v71gv4t0nwvf3CqouWlw0iL/wAsnAxkMMgAjGVI7Cvl/rtTFKdKlHX5+X3Hyjx1TFRnSox17K/S299jsLc3C6TI5SCxuHwsl0+5iFA/gUA8t69se9UdUnj8OyQypA0l1dkCFY12RvMEU5OcYBJ546j3rlLv4m3lzeJ5NvNDaY/eyW53zp6ZBwOO645qeTXYNRmhur7XEvjarmGNVIYHrsCADBJ6n8zXJHBVYTTnGyfRa/19+x5kcBXg71o6PotfRaf57bHnms3016sDHCQLvj8s8/OfmZj7nj8sVU0e61C6uIXsIpC1s6yZMp8tD268CptbZobZYwBJJJIZG2chCeACR35PFdP4Z02GPTpIYRnyJSZ8DkggAOfxyPavqqk40qV7H29SrChh78t+3b5/1qWde1HWtcso4Li4to7IbVYQsqbiTwHweSD6cGlXwVFrLRxpeLELFWUTKpKbs5LZyD6dOmO9d9pvh2G6nR4I7c2ccYkDGJXL4GSST3znirFh4Ys47G6Yec8c67FSNh+6csORwOMH7pHavl3mcKS5Ka5bPou58c80jRjy0fdt2Xf9TwnXUu9LleC5k3hXMMgAG7cOchscg9atx+LriOEmQwXbYwHliPmE+rY4J+tL4ltZNcNxNGBHMkjOyM3DqAFBB9QB0965q1juZZTFGjuQP4Vya+thGNSCclqj7elTp16SdRK63G3V1JPcyyTsXkc7jn1NXNI029knjlgRd7naAW25B4HX1qO90qe0SJp4HjExwjnox7811Wlt9lXT72FUmSI72iI4B6Yb/gOK0qT5Y+6dFesoU1yW108js/CrM1xOBGlxJHGsjKwwsr7hkgf3R6fSuyTSJb8vCYyhmjWZZmCPHLESQSPT0xya86/4SbTrJVniujZzL9wOjbgfTKgg1sabeafrWnPLNrRg25doGk8kIe52DAz1+6Oa+OxFCo5e0s0vRs+AxVCpJ+1s0vRvX8v69BdbuNC0i5jmt44/PsywnkRQI5Om1cdC33hgdjz0rgLC5Or72ijEEQkdzHjhioBUEfr/AMBqj4yZZrpp7QMmmBhFGhJHIHLY7butYul6rJps25CwBOflPIPqK+loYflpLW78z6zCYFxw/MpNya6/l/Wx6rpVrBc6da+STLcQK3mxDlg24nfjvnI/Kup/4Siwing8yxkh1BX86IeWzB2HJAIIPNeNv4ja8kAjgRZGOA6Eqc+pxxmtbTFl1K2WdLiaXUYHJk3yEyLzkMM847exHvXn18Ap61H/AMC/6HlYnLeb3qzsv8/0PWJPHEDWka6UbmG5uiFkhlhAijywLMccMfw69hXj2qeJLu+upJLq5FyxcsFXkSMMgFj6DsOnoK6qTxHqSwstxFbwxKN8175WJAnfHONx6ZxnmuD0nSVu55Z7hnjRMERJjdyeFGeh/kKeBw0KClKSX5/iXluEpUFOpJL8399jqNBtMi+eQmSOyhDsjH5ZZ2IUFvUDPAPHyj1rZ0/StQ1Kz868FsLORisb3GEbcP7mBkDseg7Zqv4ftGtNK1C8FsrtOfLit2yyLt+859SM8DpnJ7CvSbK0ju7CBUtxdXUUXkmNuIYwE3YBHOec7jwxPArjxeKdOT5f+G0/zODGYp05vl11+7RX/E8klgn8Prcq0YuVK/vra5gcOgXksh9umR2zkYrIbxHDMF+zWf2RwwIuSxkZfbGAAPwNet3/AIeS3nmN6zyxzwmUxSSZMUmcKcjpnHtwTXA+EfDFjqGqXNpGx2REAb2wSPUkV10cTRnTlVmtjtoYyhOlKrUV+W239W+8m8O69519EsiWKy4LIdjZduwCH5Qc+v5V1PgC5a2u9Vgu2uJVwr79u4AkHsep749q4H4ieHrfw9qEYUmBZVO9Uy6I3Qc9Rkc4rQ8L6ze6Zb2moWUplKpseOQkggdUP8x9awxWHjXw7lSektvXfcxxWGhicK6lF6TWl+613PVvEUuiXFk7t5jLKq/vJztWFxgliWxg4zwPWvIfFdzd+LfFVy1nOEt7dzDbqAdp4GcKBnrySa1vEHiX/hJ77SY7m3WytJZmlKSSFsnGAxOBxnIFdV4L0OOa41CW9iwqsEHkqAx4JJPrzXm4dLLKXtKmsrbOztrb+vI8rDR/sml7apdys7J2dru2nRvT7vU8bmt7vQb+Q3HlOZMlt5JVsH3wQQfxrX0iCLXbmy+028Ucc1yq7U6KvGW57nPfpWn8RtEuJrtrlQSLWP5Y5Uw2wnO/34K/SuetbzyFfDAq5VwSeQcY/wDrV9RTqfWKKnHRs+shV+tUI1Y/E106f1/wD1Wz8IzX979lMiRWvlsREka52j+EZHX3NUH8Maejspt52IOCTcDn/wAdqfR9R1uSSaRrhFaxMY+SPLyMeDnPpgg+tdn/AMJ3p38axo3dRZA4PpnvXx9Wri6M7Q970v8Ajp1Ph6tbFUZ2j73+G/42XVNHkH9vWI8MKh1WSe3RiY7PcQT6Ar0H8q865uLwKOPMfoOmTXbR6Fpn2fyrgBk5xLbwYUN7NkFhXOPZR6Fr8aTnfDHKrFvVeob6dK+2oKnFS5NXufoGCdKm5qndt3eqOx023eSS12QmN3z5iP1VuuW9OMYq1qfg5bqSC4mVXiLffXKsOcDtyOa7DwZoscdna3FxcLsZi8pj+cvJk5LY9iMexre1GPQkE8gvYJhBFslRpVVkOclPL7np09a+WrY+pTrNQXl5nxlbM5U8Ry009Ox47r/h6Dw/fQrHITG4YSB/4MdefTBrM0q/kNm97GxS8D+Srxt1G3kkeuPz5q34xtrvWrywkdzH50rQqnYKSCCfXg/pWxYeHdO0oRxg3EkMrD94XAG/oGYEYxz69699VFGjFVXeTPpVVjTw8favmm/0Z2mkadcvBN5OoS2luCjJsPynC8HHcnNc94m+IGrXOot4chud8aICXtoi0kjHOQcfd69sUzXrnWbPTXtra8kmtYQSyWrhTGvcgkZI+lc34ctlWFvs7u0knmkuTh2bZlR7/wAePc15VDCQ96vUakumm3mzyMLhIS5sRWtLsrbPu9DeXSzLo0hh8sAAwtctH+7jYjkbieWA9AcVlaT4f2F/OaI20JLb0IdZGJ4OOMnHY4xXU+ETaMtjDcCMxpJICkxO0s4GxiB2DAA/hXYWunRWtq8lxHZmCR2gKSQgYk4wQqjPGRzWdbGyw7dNLczq46WHcqa1v/X9epwV1otu+muI5ZzcbS62twiGKUAZK4CjacZwf5V55qJGl3w+zs6RSIJY8McgHsSPQ5r3DxNpr2cMUi26NfwK7pBG2PNRR94A5HBz0649q8Z1uxuLqOO43LIuzAKDgIuBx9CeR75r0MtxHtY3k9D08pxHtruT0f8AX9fP5c/cXk9/do8js4DcbjnFdro+p6Xfsv2wi0mPDtglGPrx09x0rkJolghyqliB1H+NUlvXGNxyR3Awa9qpSVWNtvQ+kq4eOJhZaW7HSeM7yBD9ktZPMt1OVk2lRIe7AHnAAwMjmuWiR5XCopdjwABT2zcSFm6n3zium0LR7yNYZY7YyplXYsQoXofmJ6ZHSqvGjCxaccHSUb/eT6F4Ve7cWciyG5f5nCEYh9jwcnpwPXFaWq+FrzQ4ftyS+cIvvSwSBJFHvgnn/PNdLotq2lRN501vE9ypIcyAswJ6jHbrzWvc6B8hJuBCskJRo5o5IiysCFIyo+U9mHHFeDVx8o1d/dPlKuZTVbV+76b/AOXb8zya58W3GrXFul9NJLaRt90gcD1wAB/WtbRdQhs1eC4BaCR/MW5Rd+DjGTjkg8fSsnxJ4Qk0dZHjcyLC224g53RejZxyp9fp61j22LcqTkKR8204JBr2OSnWp+5sfQ+xoYil+6enl/X/AA56baeJ/sM1vaQm2vYbliTCScA47HgqSRiuo8P+I9HQG21CSfRxGd8MjSM4T2DKNw/3en415HYwMwWPymuomO6OWDllP0/mDXZ297dgIC1nqEhXAlmtzuT3Yngn6g14+JwdOStf53s/8vLVHz2MwNK3Knv1Ts/XqvLVGZ4v8TXaeIri3s7l2jlmWdAy4IDDow9SMZ+tdj4H1W0gEtzPPBC6n5oZiFVlJBHJ9Oa8v13T5dN1ISl2kuGlyQ5yxbrn3rZjY65YTRrFb2spQjzLg/u0x159fzxW1fCU6lGMFotNToxOEpVcPCEdI6XaNz4jeI9H8U6SU0y32XbTb5HDYXaCWORjg5xgD3qDwB4fuYLB7tZCfMGRbsMqw7MV/kf51l6DaS/2ddRNbi9AVnH2YFnQ45HTngfpXe+Ctf0+10m1t9bhWGKaFFFzjKALkBT744z7VxYyc8Ph3Soq6T9WzhxTlg8I8Ph02k/VvqeV+JNOli8VQ2NxdSTQTFHzIcFFJ5X0GDn0r0TT/Fc/gjS5oZrR7xAAysHAdBwMEnt0qT4mWfh6bRtQurPUDeXCBZIFYKNhBAODnOCOMd68/vh4l1HSAJLS4ltyu3eW3cY7jrnHrW8YxzCjD2trLRp6a91sdEHDNMPS9qkorRqXu3ejutjqfE/xYj8ReHpNPisVEzrtE0oDFAT83PXtjNebSXPkvGUQPIGDAE8DBqWa2u7G0jkuLKeGA4HmFcA+lUVDSS+Yq4UcYr2qFGlRhyUtj38FgqGEg4UFaN7731PXbHxTBpEpvrO7sZku4t0kF0WUqTz2Gcg56VQf4iWxck2sJOeoibB/Nq5Sw0nWorJytnC8EgLKLkqCD6rkgioPI1w/8u4X/ZFqCB7dK8/6nh3Ju6b9TyY5fhnJtyTfr/kj6Qu/DCXfhloJ7m3uVVQ5ET4VVOfmQED7uOcV4b4l8KTXSi9SZZYFjWMYUqwI4Ge3Pr0r6G161s9A0S51GN2mdY96LMoVVCpjc/zHnOQAo5rym78YaeukHTLGNb+eeIxtKiEIoYc9Rya+WymvXTvBXTfy8z43JsTiIuU6K5lf5Lv6fqeQtdalp2YEvbmBBwI0kZQcdsZ/Sun8Nyapp+kySNpseoQhjLtY/vIyR97PXmmeINFm1DUYvsjRuqRJ5kpbAR++T69Bx3rv9G0u5t7G4nCuSxEU42fuwQP4T6Cvq8XiKUIJyS1Ps8bjaaoRdld7rb8tTzp9f1LxdrFmttaxwvCwKBfuhhz8xPrivVdFsEnSQwsiQBszNIoO4EDCpu6jOR+Vcnp2n2Wn635lmv2q3jcT3gDYUqy4GD9SfbOK6y8+KVrpOnmO3ZoIyvlkLao20e+T7dq8nHe0r8sMNDS39X/Q8XMZTrclLCU9Lfdfvv8AL7xdSe0sEMcyw2LvukjiPDFAo3ZHQHJI2ivJG1C40oxw2bGK884DAPKYPGcdOcV1IurfV5pb681KC4CLgSKQqKPQL2+nWuNmv7eXWZLtiEjeT5Aev+yT+QNduAoOnFxlr39fmelluGdLmjK779r9tTuPC8huNRge8eItcvLbjadqRPtABJ9yevvXoqyXuiSIzz+bBGnzmSLPlgAjdkEHOMAnPIHtXk+mXMNzBKkpWNXkDSxZ+aGXoWx1KEenTj0p2vajaWdo4a9+0ogyIomYhvTrwBXHiME8RVS2Xpf/AIY4sVg5YmsorTpa1/8Ahv6Z3118Q/DV1JHdSSvLdpEFjSJGjTGOFG77qjv1PX1rgdT/ALPlht/sdwrRJ5kk8skZVFYqV2A/xZAH4kVyumy3l8sk8MMh3Md3lwb0HPai9vmcBLx5MI2TG33s/wC70Fejh8BDDO1Nv77nqUMshhp2pyd+ut/wt9xly6mTam38sDHG/uapeXvB6DHapljM8pJU5Yk7QPenXFqbYHcjJnjnI5r3Nj6mPLDRbsv6Tp0ZurdJxnLKzD0GRgH8xXp0CWbwrYymO3ngdl2OdqyZYkNu6E49fQYrzODWbeRFWcMjFdjsq5BHY+x4Fbya4rWgaZo5FVeHkUsp9wRyPoa8zFUpVbang46jVrNXuj0rQdZtNN8Q2CSwJLIUFrJGNrF4iwwQedpGAPcH1rufFGp2jaGsc1nNp0LBYwbiUyO2xtx2qAeDjpkAZrwnwbdw/wBqNd3oCQXYMCt2jHt7g4Nd9rqS6SPtE9+bqR4WSEef5pAYYz1OAOT7nFfK4zBf7RBa/j/w2nnc+OxuCUcRCF9fzfl6Pvcx/Ft3YT6bqOoMrRKbY28e8gGRtoVR7nufYV5Pp1ib28W33ttCl9q9foK1NfW41l5ZnnmuBDwGkJIX6Hp/KsmEXGkzLdQSKWTjcrZ69iPSvrMLR9jS5U9T7bAYb6vQcIy95/hpojudA8MXqWq38MG825YbWYL8vQgnueTXX6VDYzwxtDeW4SUb5EVst7nA5GDxXltn4o1C5WWNLlrK2A3zeUS2c8dD3OcVNodzBLegRxFkjwEaXG4nnHA+nTnrXHiMLUq3lKVrf1qedicDWq80qkrW7Lp5/PY2vFWgzXWs74JIzEqZZ2cKAMn5h6cVNpnhS8vIYN/kraMc+YJAq9cDG7GcDpjiq9up1LSI5pHLSGVhOxPV+q5H+7jH0Nd5qWnpqulWt3ZAOJFUCMdmGAU/A9vQiuatiZ4eMYN+Vzkr4meHhCk35Xt/W/QqPpF7Ja7bZ0smi/1NsJgjgdsepPXJ61l32rX1po/7qyhl3xs8qSJu2SglWJUdM4BweMk16PNotrBGlqYUuImXzzIpCMvyj7znkktngdMVl6t4avnvmndRJaT7GEbABgrYA98j8j+NePQxcZytNJrc8Kljaba9olbfX+vz/U+dfMuZrtIJXkYh+InJAz2GK938IXMNtcjTNSSNlkUSRyngbu6j39K5a88PyQa/cW8scTm2AeSZhlIFzgKu3nOenP8ALNajX2pXMscthdwXTWhMoV4tsw7H2ZcH616+YS+swVNaf59Oh72Z1VjYRhHRW+5vZ7fma/iyHSbC0ubdoBcTTFokkVcGQMPlUjGFPv7etcj4c8D2eo6TLdIhMtvKE8tX2scDO49eOePoaq+N/FV7e3NpJdNAlxG28pCck4HDOCTj0x9ah0jxzLBcwrp0ZN1IMNEQAmOpye470qVDE0sKlB+966f1Yxw+FxdLCfu5e89Xrpp+h6boHh1rjwyZrNY/NBKSQygSPgcAcjkY9B3rmW0+VWIOlSqR2SZ1UfQZ4HtXW+DbyW40xL2VPMbLrKkB2hTzxjI4wQfqK6VNL0REVZNMilkAw0jygsx7k+5rwo4mpTqTg+/9dT5d4yWGrVIz116f8Or/ADPOPF+o61d6VbXOrP5dvIu+OBIxGkrdFwB97k/lXnelQXGpyz20l43lQHaUMuwY7Dis+71nWbqFIbmQoV/dxFkCsR0xn/Cuo0P4dXUVxbMJFla5jJcj+6MltoHU8cZxX2NOlTwlO2i9EfbQo08uoOM5RTd7WWnf8jS8N29ta206X4URMmYlbO4MpPzYA5HJHOKvya9d3uk3sEkot0aYeWrx7mlx1fAOCO2T1966jw94Lj0rTWmkZkikypW4dJpCmMgZ7Cp/DelW11cGOGQxo6bjKBllC8bSfQAfrmvBrYqm5PmV2v8Ahz5itjqMpzqW5rNfh9/bzPJ7mO9a5R4bv7TtBXzFQxvCvfoPlH5isJtLn1C7iW4u5LlN+GdW3LjrjHUH6ivZfE2i3mn3D3GlzpMPuXL2/wAjlc8hhgZAPesPVNPlS4sprW1WbVHl8tnzw6YBIf6cc9ea76OPjNe7b+vyPbwuZppOCWq8tPXRW/rQx08PXDaWojv0jmU7fsfl/uV/2Semfwx71wWpacFu7iGT/RnTgpICSrdxn0r2zRlgs7aIKY5RcSMiJcqUMjY6KR9e5FYup+E10uX7TKZXt2Jaa1kIcs2RwM9j0z2xU4bH++4y+X9f16hhMz9nVlGfXbpf+vP7zz3SrDUr+Ao9tE8KcLdTttH0Vx1+nNFx4fuY7y3hm8kxvIuVQnDLuHfv+dek6ZoVvqjFBpsUSAYjTzHLIOoC84/SqmreGmtgUjVi4kBRMZYn0GOp+ldH1+Lly7f16nQs1i6vKtP69WT2Xhp1twywrKR8qo0oiRcfwoOpx0z/ADrF8U6Al0im42RPu8pDJy+48bC316E9j7V6HJA8drdXstlLdbz5UVshweMcc+nXiuA8cyzaldW8UKm3SJUkImfDF8Y5+n+Nefg8Q609zyMDiKtbEJ3su/8AT/Q87soM3BjYYkXgKfX1Na91YvtRDOlzE3yuqtkDPX6fWrsGlyG+uHnXISQhVH3RnqSR1HP45rrG0J7m3YhJfK2hjG8QK54wRjoPrXrVsXGnJXPpcRjYwkmeUT6ZJCwEilUJwrDB3fiKY1tn5AwUDk89a7nXNPhsYyrRxp9oUAIp43b+o9OhP51jpZm5K7lVtvTI712RrqUVI76eM548xnW2pXNnblFnwpPI2hg31BH6ir1tq9/eXAsyp8llOAqkBDnrk9B2p76Wv9oIsAQlVYOucYbHH41t6JqtlYQyLMAsmRhmGRjHf8f51lVmuXmjG7OetVhy80IXZu+HbG3fw9Cm5hJvbcAPlY+h/UfhVG60i1jimEkcJgEbMHiTbtUrnI4zxnoc1Z8La7ZQXBZ7pXtZCWRNh2bs8/NxjOBx04qj8QNVExiMNyskYnWR4YnBCp2BxxnIzivDpqt9ZcdbPU8GnGs8U6eqT1v/AF9xxMNpf6TcrL9mD5XEkT4IZT1DDP8A+qnfuoZfMtmZYnHzIxy8ffORwcEDBrsdL0WC+sXuZInMgJEYDFNpHc9881jt4VWNwY7hg/UKyAkezc17UcTTlJpvU92OMpzk1PRrT+t9iCDWHtXSaEBZZwBPAy5jcHnP9fUHpXWeHL29js7i7s5mgUTqr2+dy7lAYHB7+/sa5aXS3XZCvNzEPlQdXTqCPUjuPTBrU0XXTY3Ujp5ZM4C3FnM2zeR0ZWPQ/wCJHINY4imqlN8quzlxNONWm/Zq/wDX9WZ6PeeIbDWMX63SaXfsq/aI+N28d0BByD/s+prAb4ordXUkVlZ3H2gNgea+8jbxux0B4zyTis681+wtXe4WzlE0OAEnlRgr4yOFz6dTge3aqOl6Ys+n28ruD9pzNI7HJc7jgH6Y/M149LCUqUeapF+V3/lv8zxKeCoU4c1WL8rv/Ldept+GJpb+HUDKnmSyvEXKjgAZ/riuqvtBstI8kLapNcOgZ2mYgKGB+UAEdjnJrLttLhsDo0auiwOVmdslQ5Y8liPQce3NejWlvBqGrhbizltrk/J553DaNxX5G6bgArEkHIPavIxeJam5Q0T/AE0PHxdd+156ekdfwsjw/wAT+EtPvL6WFIZ4JCcx3UgHPHIYYBK575zWfN4JfQI0uvLle6s51hmkibID4zgDGCvUc9a9Z8V6ppuj6VdQalqMMssoRox5glkT5gdy4JPTIx3zVGK7tL/wteXa5Ms11HKhyCpCggZ9xkfrXtYPGTnTTmny+fU9TD5lX9lHmT5dtev/AA/bY5t73VdPje1sJFgkcDNtJLGMN75BIP0x9a4SW4vIZXjmW4EyEq48x/vDr29a9e0uxtItTiXy1m3lU+dc8HqapytdNK5XT9PVSxwPsqnA+p5p0sVCDa5biw2OhSk1yLWzvs/1OW8XeD7fzYHiRra1kYq+xciNx04PK5/pVHTdW1TT5l0+MtJexzeXFgkOz54wemPf06123jrWpbOwh0q3tz5mRJPNcMAEjUjaSfc9vavMI59Vsbr7bFfB5kfcHikJK85+6ccfhXVgHUr0E63yv+Z24F1MVhv31n2u9+zf9bWO20+PWNY1WA6ncCS3U7yLWE+XG2D8xwAGx19K7fwPp9vY21pMsht4pizyoHAlJBwM5IzlcHI4yfaue8J+IY9bt1MQMGpyqsUEEceUjIxuYZ4298H9aq+J/FT2fiGxgaO0iZiXkYKWEWG/u5woPpivMr0qmJ5sOo8q8ttDxa8K2Jm8Mo8tui8r9Ovr3R3ep3sl5Nc20BmuIYIGiW4lZSxLDCLkZyBnnOa8u/fatqE1vFqO25s7ktFlwhKL9x19eQ2fetlvEetGwuLW20yFGmXK3duWaML3ZOdv454rz7WoUk1KK2iiW+2RrGoAILYyXYHsoJIyeuM1pl+DlTjLmaXbr82duW4OUHJNpdtn83/w6/A9O0i8utVUQNfQkxyETSWCjcfQMRx3zwBXJ+LdfltNfnmiuDdJHHtuoWwFZQeFXspAweO/41gwzTaDaSypJLZgDHm2E2Tg/wALgEEjPftmse51aK4tmjtFmbeP3s0qY98Dk+3Jr0aGBjCbnuvRHq4bLkqrmtY7bK3nt/Wx61oes23ixLRLPUCbGLCTRKCjBiTjePcDA6itrTrO8S/gMkKRW6vgwxxgEEg4Gev1OeleL+DWlsEuZIZCkgkQb0ODggjkV6f4d8c6ppevoTLLcxz2rIUbnqDyPTGD0ry8dgqkOZUWmuz9P61PGzHAToznGg042e+/d/PXc6mLULmdn02yJDSzARxSHIOGJVhu9RxWPeStrttdNeSyK/71mkj+YDax4GM7uv1xzxWn4X1qx+wac1zZTRbrmSWeaAEyLEN3OT8rNyc5/vH0FcTqfxS0exsJbHTzeT2rTtIrpIIlII5GOT0OMfjXkYbD1pVXGnT1T3/4PyWh5WHwtadRxo07tPf8Hr8tjJ8QCfSGsr1ZFWGVvssolQLiTaWQ5HHbGfbkVHqXibVra1dmjhtpAgBfB/e56ALn8eKxNY8Ry+NLm3g2LZWUe51UfO3Tkse5wAB0AzUJtjGITGst1tIRftIyuO4yOQBX2Kw8bR9qlzH2tPCpRgsQlzLp+Wu39eRkandXE95HJKzSTTLksf4Oo4HYVo6Tqg0e1kE0cryx8oMZGPqelX7rw/JJay3Za2udo3PEsRUlRwdpPpWZa+HzJOyzXLQwiT91GvzyyYPZcjgd2JAGDXZzU5ws9j01Uo1qfI3ov6/ryNCKe1W1BZJfPm/eFRyyE9Mk+lUJtOvxt2zxEv0E64k574Gc10UWlCczSwJLdYbc5jTIGevPc57CizjEbTFSyOXIeQghwPTnpWXtYxWjOFYhQu4/iZVrBfeHtLzeWTXNmnzeZD1jz/eBwQDVjw9e2utX0i28PkKgDx+ZgsX6ZGOOPT3zXXwWkNhaGeWKVONo2Rb3bPUsW4Uduck1yniXSFWG1uLV9sL/ACr5KBNx7HaOAeCDj0965I1Y1rrZvr/wDnp4iGJcotWb662+7Y6bQYIrBp7S6mIMjO26Vdy4xkdeuCCSOvQ84p2uy2mmQPOjtfRSKuFgT54+uc5xgHGBn2rzyLULyw1W1l86aUwruUMS4HXqv5g+xrs/EnjmLxBpllAsAhuVCgqGBabDAqigDIGepauaWEqRrRlunv8A1uc9XBVY14SXvRe/T/g/icaY7jVLp7oyzW8jgEQ2/JRR0+p96o+dqPmvH9ouLiJOjjJP0PfvXd+CoZrhdQiKxx3cspLMH+Xb2G7p1J+vFdBH4LaSGW4vAu6IlJNkmBGfQ8ctXZLGwpTdOS9DrqZlTw03TmlZWt/wPy3PJIr0WzlUgkcSYEkfQZHcHsa3dP1V9MWOII89rOciCYbSpzjKsCcHP4e1beq6DHc65Na2knmmPapWI/xYyS36fiax9S0y50qP7PcwBhKR5aODlGPfIx6V0e0hW0aOn6xSxCUbb626nQ6H4hLm5sZLZrm1RS620suHQ5+YowH4kY7Gu70LxVa31gLG81OawkkTy9skreTJxjt0JHUHg9vSvIrfU7WG4gmlLwSJtKXMMmDu7AnGPx/OtbxJ4pOn2wkt0t4XBx5ix4kY+3px1IArysRgY15cqVr/AJ/iePicB7eahFNX/P8AH8js9X0ey1IQ2ieRNaWwZTIRt3sx5KnggDjH41ymi6LDpGu6lZxX8txaJGA8RORuY/KM+oweawbTxrBBC8nmTu2DshI3KGxxk5GRmrfw71KBLyVruX95cOJZJH6ZDAfrk10LDyo0pRV7L8TdYTE4WhNuV10Vut731+fzPSNPJspStxmR0xtdB/qucgH14NO+23KfKsQKjgHcR/St7TI4Jrj7N5XmyOzvG+Pkc8kfj7fhWNNpF40zkyS5LEn5TXybqrmbelz4720alSTqKz/rax5v9tXV7VbnUmupbmZjI0G4DeOisWA4HXCgep70TR2dxGkS2skDE4Uh94I9jgHNdt4Lu0isrOzEZhWWJTuUDzC4JBBYdcEYx0FaWpeHI5JlkvbK4wW2eakflIfQswHX8q+lljY0ZNWsl/Wx708fGjVdNxsltZ/ktjhdA15vCF4HbTJjHGcK7yfcz9BjnA61xXjO+ubjV5J5xGRLynk5ClTyMe/rnvXqnjjRLPwzoLvah1EimKWJm3hiRlWH0wa8m1edX1G2BIkSGNRlOctyT+RP6V6OCqRrL20Vue1lU6WIm8VCO+l/T8tSqBqOnwhFkuIYnGSschCnPqAa6vQtLluWlDq6QNta4uADl1HARSeuSR7flWh4X8NuEN5OFla2UObcqSFYkBS/bAJ5H0Fdtp1kLa0e6vpvPMjrGsO7AYnpux0AxnA9KzxWLSTjDoZ4/MoxTjBXfl3/AK67HO6t4cs4rYTL5skWAphLYJz6OB264xWNP4YtrbS3uLKR4xAu94pGBJGeSDgc89DXtRsWt7KBU8rZDCJd6A4XOcZ5/wB3AAznJzXlfjK6zbaxa2lqU2zmQ5IAMIIbAHY9/pXk4DFVK8uXp38jxcBjqleSpxfVelr2/rqcTNcPpM0V5BgecrpJE3COOP8AH8CK6bSfHul281vNJb3XlwkEj5WKAja4B7jBJxiuCvL1725IYoqxjy05wAPT3q5bWLxQJLIVKPkLGARux1J9vpX0dSjCcbTPsK2EpVIJVt/60+49D8Y+MdN06xSz0bUDeySRZP2eRvJQkYJfpk47D8a85hspHhwlurRkZHmYDN9Of5VatNM+13QCKinbnGMLgd29h+tbE+iWrWhAuJBOxwJZMbGPuOoHvWMI08KuSL3OWjCjgYqnBtt7t6v8LHI2Rlsb9WiywBO5H646FT+deteGYZtQggijhleZI1XyVcpgnPp19fxrzWaCSCdnuYXilXMUkhHG4Hgmujl8aWtlHHKizLexLyqr8u7Hds8qaxxtOdeKUFr3HmFOeKjFU1d9/wCuh0Hiywl05Hhi2jIMTMud0ORzjPUdRXMaXBDbS3scr7p1lRJSGOdhyT+eBzVpfiEdRtlN4jP1xbqoUOT1Yvkn/AdK5ex1G4/tee6uYWcOxSdUHQEjGPcY4p4ahUhScZ7mOFw1eFKVOro1+Lv/AF/Vz1iCzt4oJJQgleNlEUJJCIp6N79vrnmtKw0r7Xf2hurVZpJWAYooGEBA6Z+ZueAPWuL0XVr4XK2lrJ5kahiRKg+RR94HPb2rvPB0M+p3IfzI7eaBvtCzOikMqjmPn1APTn8q8LGU50oybZ8zjIToJylL87l1p20/W59PnuH+xRSvNs34aUk55zkFRyAPUCs7xV4V05bJLsTPbxTKu61uiNybv4kC++T0rpp9MisluNc1qRreGZAtspcuQcg4YE5/D/8AVWfrtzbeILyK6dxcTPiKB8lpJlVeSy/w88Y968jDzlGalHa2r8zyKVaUakZwv5tbN/116eh5odBuLC5vYIY47i8DBpLhyAqR4+TrwC3X8sVnWtvb2moRSalGbJkcq0qxnYwZSN3AxkccjqCa9MfTg95LFazpNHbRRRsGTzV3gZYgZ5U8qCOm0461Hqmi2wht47Z3mglTMkUqkptJPB9O/PavXWOSm4S/4O39af8ADnuxzKz5J9e2+33ei/4c5rS/EGkaPMthPKiSXEqvHLChkjKdASfY/wAznFdRrWq3i6XIyxPbQyiUteEgquwE5Ckfezjk5rynxTplvBBFbWzgyx3EjqzN8yxEALn0LdfoM0ugeINXvbm30nUtRuH0a1zdPby4KuEHyjPUjOBiu+WAp1Wq+/e/6HdUy2FaKxEHtdtPfTql320ehTjN5prx6gbOUvyxnfcGOepzT9b8W3uqW8UbxrhFBS5PLnn9COldFeaK8TGWe+uIdQPzSeWu5YyedpOcnr07dKwLvw5M90DJPbW4ZcxkSBUkBPJAI6E9uMc16VOrTm7/AOZ6tKrQqyU5pXWz1/D+vkYzaIkcqCSTa20HG3AJIz1/riq81lGdxAYbeqE5/Wu4t9IliCTT/vmlyirasGGBx155x2rMvLcu0wl3oYCCHxiTBP3QT/kVpTxHM7HTTxjlK17nKyWoRER4GjUnh8EVc0W9jguo4ZQ6JzExA3Hk8H8DitOTSV1SNxbW6q6qW8ySViVHqWPFaOm2JE4tIJljAUFmjBHPuepOa1nWik0/6/M2qYmHI1Lf8vzNCa/uoLB7e9lC26lRvMmPlz1HPP4iuTk8RASMIxeNGCdrfaSMjtxjiui8TaM5hBu5DqCjBRwqiWNyQMNg5KkVTj0LUJI1eIERsAVGMcduMcVjTcGuZdThw8qEYc7tr8kdx8PtNuYhNFFc4zHuQMOEZuSR3Hyg/ifxr1dtNl0+2BcxSxOhiZuRIMkrlT06+oP4UUV8Fmsm8VY/Os2nJ4mz/rY88+JUTHUtP0uQKbd1EkhDElm5T8hyR9a8sh0NRqccKlWeSQJHu+6rZIyfxHH1oor6jLW44dJdkfV5ROUcLFRf2b/iz0rTNAk02YXJ1GaWRwyyKyLskzgMGHcHPr71meJ/EcmhSQR2llAIrtDIVlkZxwOmOxzyCDRRXFg28RiHGpqjiy//AGvEWra6enfsbml69PeadDqt/wCWhsolieO3iz8vXKkkEnnufxrn/EFz/bPhnV/EdrBHbQ3LtbQQPyyjZlnYjA3Y547n2oorvw1OMJtRWzt8jbDUoRry5VtNL5X2PKYoB5JbAIBwc9Sa6rS9Bee0iN1KBFa72YRHLGPG7AyOuc/nRRXr15OMbo+uxs5RptpnRadosV1aJNxB9rPlJHEOFAYdSeeuPrW1deHLG8MOnrCEd2ZI7jcdxZeu72ODwOmaKK+YrVaim7Pa58ZXrVI1HaW1/wADA13wytnaSalbvho9pmikO9XBwP8AINYM+gQnWLewZjtLsMj+7nKj8OaKK9nDVJOndvv+R6+Er1HTbctub8ErD9c0MorRpNhBlkYr8ybQCQPqDWZDbfZ7WTyp5WcHezPjvxRRW9OcnFXO+hVnKnFNm/pV+LK4hmMe+UFgwzxKu3DBvQ7e/qBxXqvg62tpbO5iljNwkJScK4xlXUBfxGenTk80UV5WP0ipLf8A4KPm85ilTbX9ar/NmF8Ttb1Sa9bw4tzHHDb7HlmEeZJdpyil88qDnjHOBmvLdc8Ra5BcT6a2oFImyrCEBdwbGVJABxRRXbgYQcV7q2vt1PYyWnTdGmnFfDfZbvqdX4FhvotPlksJ44bizj8qYSLujkXqMAg5P5Vy/wAQdTvbPV30xruZmhAM7LIQryHngDsAQBxRRSw6UsVK6OnBJTx8+Zd/0/zJfDGlC5ksreRyBIDI7dfUn6nArbuI7aW9hNvAsNusqsoydxUMDhj3JA+lFFXXk/a2v0/zMcROTxDV+n6s76C2hvtPn1GaFJ3uJJMLIMqo3cnA6nmueudNtfKSRLKAEMylGLFceo54NFFfN4ecnUkr9T5ehOSnJJ6J2NXRNAjg0ueeBIvLkfb5U4MixsB8xHrkEYz0964PxcRbz20mD5bSNA43ZPOCMew4P50UV6uE1xLv/Wh6WWylPFS5nf8A4ZkWjzGXTTGeAt2qnHcEED8sH869Ij8MIbvybJYrcBhuJUFpFBAILYzk0UVhmU5QmlF9/wBCc0nKnUSi+/6FS8sIbwNAYIfszybJIiv3uf73XPvXGyWrwyPGrttQlR++ccD8aKK1wEnKLTY8FJ6xvof/2Q=="; + } + + function returnGreenery2AsBase64() { + return "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"; + } + + function returnGreenery3AsBase64() { + return "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"; + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Adds a new slide with some content. + const slideCountResult = context.presentation.slides.getCount(); + context.presentation.slides.add(); + await context.sync(); + + const newSlide = context.presentation.slides.getItemAt(slideCountResult.value); + newSlide.load("id"); + newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon); + await context.sync(); + + console.log(`Added slide - ID: ${newSlide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([newSlide.id]); + await context.sync(); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
      +

      This sample shows how to create binding references for images.

      +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      +

      Insert image with binding

      +

      Try adding a few images. Enter an ID, then select the button. A binding with that ID will be created which refers + to the shape.

      +

      Binding ID: + +

      + +

      Show the bindings in the document

      +

      The console will show the bindings in the document.

      + +

      Update an image using its binding

      +

      Select a binding ID from the dropdown list then pick a replacement picture.

      +

      Choose the binding for the image you want to update:

      + +

      +

      Select the replacement image:

      + + + +

      +

      After adding a few images, try z-Order APIs

      +

      Click on or select the image you want to act on.

      + + + + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js \ No newline at end of file diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 12fb77cb995698fceb2ed97a90a6d80ceefd2153..98705550277c308d80465a4c5b62cbf37aaa94f4 100644 GIT binary patch delta 8678 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

      BD; z@b}-31GXoI(-_Hx4~OW)pvt4xn9I!w2UYK@6in6wL! zZe6R0z%%!HxSjQ?G-*gb>)j<6pX{Q^I<*Ep2G?6xyUP?3Bj)?CDK(AG968`lYM4`K zhw3(kl2h~+`nm|df1w!U_(vT!Qt%lf{huEm z{6)0jXkn8gY-Im6kY8ovYgP5%(1j6-$^v&OU?!qq^8dg1`fr*$7?vwaMgE`k1ON#B zd-{5p#{`pPB!r!cvH;()!*bq$VUl7jKrarMqnHr+zp3!GsC#);t^e;bWKLM0m?Th+ x2L>4U2=3#zp^`@jsqXEL;Ep delta 8215 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 78fca06c5..d45a6bb43 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14738,6 +14738,157 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); +'PowerPoint.Binding:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function getShapeForBindingId(bindingId: string): + Promise { + // Gets shape associated with binding ID. + return PowerPoint.run(async (context) => { + const binding = context.presentation.bindings.getItem(bindingId); + const shape = binding.getShape(); + return shape; + }); + } +'PowerPoint.Binding#getShape:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function getShapeForBindingId(bindingId: string): + Promise { + // Gets shape associated with binding ID. + return PowerPoint.run(async (context) => { + const binding = context.presentation.bindings.getItem(bindingId); + const shape = binding.getShape(); + return shape; + }); + } +'PowerPoint.BindingCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Loads bindings. + + await PowerPoint.run(async (context) => { + const bindings = context.presentation.bindings; + bindings.load("items"); + await context.sync(); + + const bindingCount = bindings.items.length; + if (bindingCount === 0) { + console.log(`There are no bindings.`); + } else if (bindingCount === 1) { + console.log("There's 1 binding."); + } else { + console.log(`There are ${bindingCount} bindings.`); + } + + bindings.items.forEach((binding) => { + getShapeForBindingId(binding.id).then((shape) => { + if (shape) { + console.log(`Binding ID: ${binding.id} refers to shape ID ${shape.id}`); + } else { + console.log(`Binding ID: ${binding.id} doesn't refers to shape.`); + } + }); + }); + + populateBindingsDropdown(bindings.items); + }); +'PowerPoint.BindingCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Inserts an image with binding. + + await PowerPoint.run(async (context) => { + const bindingId = (document.getElementById("temp-binding-id") as HTMLInputElement).value; + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const myShape = slide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle, { + top: 100, + left: 30, + width: 200, + height: 200 + }); + + myShape.fill.setImage(flowerImage); + context.presentation.bindings.add(myShape, PowerPoint.BindingType.shape, bindingId); + await context.sync(); + + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + + const option = new Option(`Binding ${bindingId}`, bindingId); + + // When a binding ID already exists, the binding is updated to refer to the new shape + // so select the existing item rather than add a new one. + const foundIndex = findDropdownItem(bindingsDropdown, option.text); + if (foundIndex < 0) { + bindingsDropdown.add(option); + bindingsDropdown.selectedIndex = bindingsDropdown.options.length - 1; + } else { + bindingsDropdown.selectedIndex = foundIndex; + } + }); +'PowerPoint.BindingCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function getShapeForBindingId(bindingId: string): + Promise { + // Gets shape associated with binding ID. + return PowerPoint.run(async (context) => { + const binding = context.presentation.bindings.getItem(bindingId); + const shape = binding.getShape(); + return shape; + }); + } +'PowerPoint.BindingType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Inserts an image with binding. + + await PowerPoint.run(async (context) => { + const bindingId = (document.getElementById("temp-binding-id") as HTMLInputElement).value; + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const myShape = slide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle, { + top: 100, + left: 30, + width: 200, + height: 200 + }); + + myShape.fill.setImage(flowerImage); + context.presentation.bindings.add(myShape, PowerPoint.BindingType.shape, bindingId); + await context.sync(); + + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + + const option = new Option(`Binding ${bindingId}`, bindingId); + + // When a binding ID already exists, the binding is updated to refer to the new shape + // so select the existing item rather than add a new one. + const foundIndex = findDropdownItem(bindingsDropdown, option.text); + if (foundIndex < 0) { + bindingsDropdown.add(option); + bindingsDropdown.selectedIndex = bindingsDropdown.options.length - 1; + } else { + bindingsDropdown.selectedIndex = foundIndex; + } + }); 'PowerPoint.BorderProperties:interface': - >- // Link to full sample: @@ -15668,6 +15819,40 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); +'PowerPoint.Presentation#bindings:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Loads bindings. + + await PowerPoint.run(async (context) => { + const bindings = context.presentation.bindings; + bindings.load("items"); + await context.sync(); + + const bindingCount = bindings.items.length; + if (bindingCount === 0) { + console.log(`There are no bindings.`); + } else if (bindingCount === 1) { + console.log("There's 1 binding."); + } else { + console.log(`There are ${bindingCount} bindings.`); + } + + bindings.items.forEach((binding) => { + getShapeForBindingId(binding.id).then((shape) => { + if (shape) { + console.log(`Binding ID: ${binding.id} refers to shape ID ${shape.id}`); + } else { + console.log(`Binding ID: ${binding.id} doesn't refers to shape.`); + } + }); + }); + + populateBindingsDropdown(bindings.items); + }); 'PowerPoint.Shape:class': - >- // Link to full sample: @@ -15746,6 +15931,60 @@ } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); +'PowerPoint.Shape#setZOrder:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function changeZOrder(operation: PowerPoint.ShapeZOrder) { + // Changes the z-order position of the selected shapes. + return PowerPoint.run(async (context) => { + const selectedShapes = context.presentation.getSelectedShapes(); + selectedShapes.load(); + await context.sync(); + + if (selectedShapes.items.length === 0) { + console.log("No shapes are selected."); + } else { + let direction = 1; // Start with bottom-most (lowest number). + + // Start with top-most when sending to back or bringing forward. + + switch (operation) { + case PowerPoint.ShapeZOrder.bringForward: + + case PowerPoint.ShapeZOrder.sendToBack: + direction = -1; // Reverse direction. + + break; + } + + // Change the z-order position for each of the selected shapes, + + // starting with the bottom-most when bringing to front or sending backward, + + // or top-most when sending to back or bringing forward, + + // so the selected shapes retain their relative z-order positions after they're changed. + + selectedShapes.items + .sort((a, b) => (a.zOrderPosition - b.zOrderPosition) * direction) + .forEach((shape) => { + try { + const originalZOrderPosition = shape.zOrderPosition; + shape.setZOrder(operation); + + console.log(`Changed z-order of shape ${shape.id}.`); + } catch (err) { + console.log(`Unable to change z-order of shape ${shape.id}. ${err.message}`); + } + }); + + await context.sync(); + } + }); + } 'PowerPoint.Shape#fill:member': - >- // Link to full sample: @@ -15928,6 +16167,60 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); +'PowerPoint.Shape#zOrderPosition:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function changeZOrder(operation: PowerPoint.ShapeZOrder) { + // Changes the z-order position of the selected shapes. + return PowerPoint.run(async (context) => { + const selectedShapes = context.presentation.getSelectedShapes(); + selectedShapes.load(); + await context.sync(); + + if (selectedShapes.items.length === 0) { + console.log("No shapes are selected."); + } else { + let direction = 1; // Start with bottom-most (lowest number). + + // Start with top-most when sending to back or bringing forward. + + switch (operation) { + case PowerPoint.ShapeZOrder.bringForward: + + case PowerPoint.ShapeZOrder.sendToBack: + direction = -1; // Reverse direction. + + break; + } + + // Change the z-order position for each of the selected shapes, + + // starting with the bottom-most when bringing to front or sending backward, + + // or top-most when sending to back or bringing forward, + + // so the selected shapes retain their relative z-order positions after they're changed. + + selectedShapes.items + .sort((a, b) => (a.zOrderPosition - b.zOrderPosition) * direction) + .forEach((shape) => { + try { + const originalZOrderPosition = shape.zOrderPosition; + shape.setZOrder(operation); + + console.log(`Changed z-order of shape ${shape.id}.`); + } catch (err) { + console.log(`Unable to change z-order of shape ${shape.id}. ${err.message}`); + } + }); + + await context.sync(); + } + }); + } 'PowerPoint.ShapeAddOptions:interface': - >- // Link to full sample: @@ -16195,6 +16488,60 @@ }); await context.sync(); }); +'PowerPoint.ShapeFill#setImage:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Inserts an image with binding. + + await PowerPoint.run(async (context) => { + const bindingId = (document.getElementById("temp-binding-id") as HTMLInputElement).value; + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const myShape = slide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle, { + top: 100, + left: 30, + width: 200, + height: 200 + }); + + myShape.fill.setImage(flowerImage); + context.presentation.bindings.add(myShape, PowerPoint.BindingType.shape, bindingId); + await context.sync(); + + const bindingsDropdown = document.getElementById("bindings-dropdown") as HTMLSelectElement; + + const option = new Option(`Binding ${bindingId}`, bindingId); + + // When a binding ID already exists, the binding is updated to refer to the new shape + // so select the existing item rather than add a new one. + const foundIndex = findDropdownItem(bindingsDropdown, option.text); + if (foundIndex < 0) { + bindingsDropdown.add(option); + bindingsDropdown.selectedIndex = bindingsDropdown.options.length - 1; + } else { + bindingsDropdown.selectedIndex = foundIndex; + } + }); +'PowerPoint.ShapeFill#setSolidColor:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + + + // Changes the selected shapes fill color to red. + + await PowerPoint.run(async (context) => { + const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + shape.fill.setSolidColor("red"); + }); + await context.sync(); + }); 'PowerPoint.ShapeFill#foregroundColor:member': - >- // Link to full sample: @@ -16225,24 +16572,6 @@ outputSpan.innerHTML = ""; outputSpan.innerHTML += finalTable; }); -'PowerPoint.ShapeFill#setSolidColor:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml - - - // Changes the selected shapes fill color to red. - - await PowerPoint.run(async (context) => { - const shapes: PowerPoint.ShapeScopedCollection = context.presentation.getSelectedShapes(); - const shapeCount = shapes.getCount(); - shapes.load("items"); - await context.sync(); - shapes.items.map((shape) => { - shape.fill.setSolidColor("red"); - }); - await context.sync(); - }); 'PowerPoint.ShapeFill#transparency:member': - >- // Link to full sample: @@ -16484,6 +16813,68 @@ }); await context.sync(); }); +'PowerPoint.ShapeZOrder:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + // Sends the shape to the back. + + changeZOrder(PowerPoint.ShapeZOrder.sendToBack); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml + + + async function changeZOrder(operation: PowerPoint.ShapeZOrder) { + // Changes the z-order position of the selected shapes. + return PowerPoint.run(async (context) => { + const selectedShapes = context.presentation.getSelectedShapes(); + selectedShapes.load(); + await context.sync(); + + if (selectedShapes.items.length === 0) { + console.log("No shapes are selected."); + } else { + let direction = 1; // Start with bottom-most (lowest number). + + // Start with top-most when sending to back or bringing forward. + + switch (operation) { + case PowerPoint.ShapeZOrder.bringForward: + + case PowerPoint.ShapeZOrder.sendToBack: + direction = -1; // Reverse direction. + + break; + } + + // Change the z-order position for each of the selected shapes, + + // starting with the bottom-most when bringing to front or sending backward, + + // or top-most when sending to back or bringing forward, + + // so the selected shapes retain their relative z-order positions after they're changed. + + selectedShapes.items + .sort((a, b) => (a.zOrderPosition - b.zOrderPosition) * direction) + .forEach((shape) => { + try { + const originalZOrderPosition = shape.zOrderPosition; + shape.setZOrder(operation); + + console.log(`Changed z-order of shape ${shape.id}.`); + } catch (err) { + console.log(`Unable to change z-order of shape ${shape.id}. ${err.message}`); + } + }); + + await context.sync(); + } + }); + } 'PowerPoint.Slide:class': - >- // Link to full sample: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 0c40ce1b7..3174b1a57 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -11,6 +11,7 @@ "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml", "powerpoint-shapes-add-modify-tables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml", + "powerpoint-shapes-binding-to-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml", "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", diff --git a/view/powerpoint.json b/view/powerpoint.json index f70fe3e3a..76e7bddc5 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -11,6 +11,7 @@ "powerpoint-shapes-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml", "powerpoint-shapes-get-shapes-by-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml", "powerpoint-shapes-add-modify-tables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/add-modify-tables.yaml", + "powerpoint-shapes-binding-to-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/binding-to-shapes.yaml", "powerpoint-shapes-group-ungroup-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/group-ungroup-shapes.yaml", "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/add-slides.yaml", "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", From 5736240e0464d3a26c3a44ce1be1073c5b431ddf Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 19 May 2025 13:50:43 -0700 Subject: [PATCH 132/156] [Outlook] (attachments) Update snippet for getAttachmentContentAsync method [Outlook] (attachments) Update snippet for getAttachmentContentAsync method --- .../get-attachment-content.yaml | 18 ++++------ snippet-extractor-output/snippets.yaml | 36 +++++++------------ 2 files changed, 18 insertions(+), 36 deletions(-) diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index 5e62a33dd..beee2236a 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -9,15 +9,9 @@ script: document.getElementById("attachment-content-compose").addEventListener("click", getAttachmentContentCompose); document.getElementById("attachment-content-read").addEventListener("click", getAttachmentContentRead); - const item = Office.context.mailbox.item; - function getAttachmentContentCompose() { - // Gets the attachments of the current message or appointment in compose mode. - const options = { asyncContext: { currentItem: item } }; - // The getAttachmentsAsync call can only be used in compose mode. - item.getAttachmentsAsync(options, callback); - - function callback(result) { + // Gets the attachments of the current message or appointment in compose mode. The getAttachmentsAsync call can only be used in compose mode. + Office.context.mailbox.item.getAttachmentsAsync((result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.log(result.error.message); return; @@ -30,14 +24,14 @@ script: for (let i = 0; i < result.value.length; i++) { // Log the attachment type and its contents to the console. - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); + Office.context.mailbox.item.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } - } + }); } function getAttachmentContentRead() { - // Gets the attachments of the current message or appointment in read mode. - // The item.attachments call can only be used in read mode. + // Gets the attachments of the current message or appointment in read mode. The item.attachments call can only be used in read mode. + const item = Office.context.mailbox.item; const attachments = item.attachments; if (attachments.length <= 0) { console.log("Mail item has no attachments."); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d45a6bb43..f2aa9a717 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8757,16 +8757,9 @@ // Gets the attachments of the current message or appointment in compose - mode. + mode. The getAttachmentsAsync call can only be used in compose mode. - const options = { asyncContext: { currentItem: item } }; - - // The getAttachmentsAsync call can only be used in compose mode. - - item.getAttachmentsAsync(options, callback); - - - function callback(result) { + Office.context.mailbox.item.getAttachmentsAsync((result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.log(result.error.message); return; @@ -8779,9 +8772,9 @@ for (let i = 0; i < result.value.length; i++) { // Log the attachment type and its contents to the console. - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); + Office.context.mailbox.item.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } - } + }); 'Office.AppointmentCompose#getAttachmentsAsync:member(1)': - >- // Link to full sample: @@ -9812,8 +9805,9 @@ // Gets the attachments of the current message or appointment in read mode. + The item.attachments call can only be used in read mode. - // The item.attachments call can only be used in read mode. + const item = Office.context.mailbox.item; const attachments = item.attachments; @@ -12515,16 +12509,9 @@ // Gets the attachments of the current message or appointment in compose - mode. + mode. The getAttachmentsAsync call can only be used in compose mode. - const options = { asyncContext: { currentItem: item } }; - - // The getAttachmentsAsync call can only be used in compose mode. - - item.getAttachmentsAsync(options, callback); - - - function callback(result) { + Office.context.mailbox.item.getAttachmentsAsync((result) => { if (result.status === Office.AsyncResultStatus.Failed) { console.log(result.error.message); return; @@ -12537,9 +12524,9 @@ for (let i = 0; i < result.value.length; i++) { // Log the attachment type and its contents to the console. - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); + Office.context.mailbox.item.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } - } + }); 'Office.MessageCompose#getAttachmentsAsync:member(1)': - >- // Link to full sample: @@ -13506,8 +13493,9 @@ // Gets the attachments of the current message or appointment in read mode. + The item.attachments call can only be used in read mode. - // The item.attachments call can only be used in read mode. + const item = Office.context.mailbox.item; const attachments = item.attachments; From df2a6d260b5465eac3ee0ffff62d126bc01b8815 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 21 May 2025 12:06:56 -0700 Subject: [PATCH 133/156] [PowerPoint] (tables) Add missing sync statement (#985) --- samples/powerpoint/shapes/add-modify-tables.yaml | 4 +++- snippet-extractor-output/snippets.yaml | 12 ++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/samples/powerpoint/shapes/add-modify-tables.yaml b/samples/powerpoint/shapes/add-modify-tables.yaml index e3626ba35..d398f0862 100644 --- a/samples/powerpoint/shapes/add-modify-tables.yaml +++ b/samples/powerpoint/shapes/add-modify-tables.yaml @@ -224,7 +224,7 @@ script: await context.sync(); // Get the Table row and column count. - console.log("Table RowCount:" + table.rowCount + " and columnCount: " + table.columnCount); + console.log("Table RowCount: " + table.rowCount + " and columnCount: " + table.columnCount); } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); @@ -248,6 +248,8 @@ script: cell.text = generateRandomString(); } } + + await context.sync(); }); } diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index f2aa9a717..7dc91f8b0 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15915,7 +15915,7 @@ await context.sync(); // Get the Table row and column count. - console.log("Table RowCount:" + table.rowCount + " and columnCount: " + table.columnCount); + console.log("Table RowCount: " + table.rowCount + " and columnCount: " + table.columnCount); } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); @@ -16408,7 +16408,7 @@ await context.sync(); // Get the Table row and column count. - console.log("Table RowCount:" + table.rowCount + " and columnCount: " + table.columnCount); + console.log("Table RowCount: " + table.rowCount + " and columnCount: " + table.columnCount); } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); @@ -17283,6 +17283,8 @@ cell.text = generateRandomString(); } } + + await context.sync(); }); 'PowerPoint.Table#getCellOrNullObject:member(1)': - >- @@ -17308,6 +17310,8 @@ cell.text = generateRandomString(); } } + + await context.sync(); }); 'PowerPoint.TableAddOptions:interface': - >- @@ -17536,6 +17540,8 @@ cell.text = generateRandomString(); } } + + await context.sync(); }); 'PowerPoint.TableCell#text:member': - >- @@ -17561,6 +17567,8 @@ cell.text = generateRandomString(); } } + + await context.sync(); }); 'PowerPoint.TableCellBorders:interface': - >- From 63576485654260cd649b138b2bd90067fcb60d0d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 23 Jun 2025 18:24:58 -0700 Subject: [PATCH 134/156] [PowerPoint] (tables) Work with text runs (#986) * [PowerPoint] (tables) Work with text runs * Add HTML * Update based on feedback * Updates based on feedback --- .../powerpoint/shapes/add-modify-tables.yaml | 55 +++++- snippet-extractor-metadata/powerpoint.xlsx | Bin 16593 -> 16658 bytes snippet-extractor-output/snippets.yaml | 158 ++++++++++++++---- 3 files changed, 180 insertions(+), 33 deletions(-) diff --git a/samples/powerpoint/shapes/add-modify-tables.yaml b/samples/powerpoint/shapes/add-modify-tables.yaml index d398f0862..c0b652d34 100644 --- a/samples/powerpoint/shapes/add-modify-tables.yaml +++ b/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18,6 +18,7 @@ script: document.getElementById("table-borders").addEventListener("click", () => tryCatch(tableBorders)); document.getElementById("table-indent-margin").addEventListener("click", () => tryCatch(tableIndentMargin)); document.getElementById("table-cell-alignment").addEventListener("click", () => tryCatch(tableCellAlignment)); + document.getElementById("table-text-runs").addEventListener("click", () => tryCatch(tableTextRuns)); document.getElementById("table-from-shape").addEventListener("click", () => tryCatch(getTableFromShape)); document.getElementById("update-table-values").addEventListener("click", () => tryCatch(updateTableValues)); document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); @@ -52,7 +53,7 @@ script: await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying column widths and row heights + // Add a table, specifying column widths and row heights. shapes.addTable(3, 4, { columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] @@ -101,7 +102,7 @@ script: await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -138,7 +139,7 @@ script: await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -201,6 +202,51 @@ script: }); } + async function tableTextRuns() { + // Specifies the text runs of the cells in a table. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying text runs. + shapes.addTable(3, 4, { + specificCellProperties: [ + [ + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } } + ], + [ + { text: "Bold text", font: { bold: true } }, + { + textRuns: [ + { text: "Text runs with " }, + { text: "Underlined text", font: { underline: PowerPoint.ShapeFontUnderlineStyle.double } }, + { text: " and plain text" } + ] + }, + { text: "Italicized text", font: { italic: true } }, + { text: "Plain text" } + ], + [ + { text: "Bold text", font: { bold: true } }, + { text: "Underlined text", font: { underline: PowerPoint.ShapeFontUnderlineStyle.dotted } }, + { + font: { bold: true }, + textRuns: [ + { text: "Text runs with " }, + { text: "italicized text", font: { italic: true } }, + { text: " and (inherited) bold text" } + ] + }, + { text: "Italicized text", font: { italic: true } } + ] + ] + }); + await context.sync(); + }); + } + async function getTableFromShape() { // Gets the table from a shape. await PowerPoint.run(async (context) => { @@ -336,6 +382,9 @@ template: + diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 98705550277c308d80465a4c5b62cbf37aaa94f4..0c93174817338a9e487c2870a4cf4bce763b78ad 100644 GIT binary patch delta 8707 zcmZ8nWl&s8u-?Vp-GaNjvjhu^EgIZ4I3Yl=#ofX}a0woq;O-WJI|O%^us}k9$G!FH z-KsY~rl$I|%}n>y*E4527?>Oatkpq9Rmbfd zB$h@Ij4U`IPYWh2Dha`+z@~@R5cj<-~O>`+F*co>|gj}Y^V;R~>+QFG+yU){X z!?3=-$$=#=3d*9gPs4Xl(ynr2&jb#P5CQKp@?U>tZsN=!ZlJ%85oth~%#4j;6^)5! zqLfwU#)N`(bqy1oQS}t`nD+r_VnKVIWB$b~K4O0V8o_P-t@vM(4huDk!E7R;Z05f8?e+#d%O<*`(~jU9A=ESJ`ayDYwknOs<(H1{tx; zkX~7>_T8Icw2e{uV~y4$t?`-k3vl53C+oTmVL;b=Y9A-<$%^J3nId)r2*zdJzn`-1 zuw@DmRbHf3`xUCwrp3e$rk|&`i`hrV*c!RJ$&qasZ?IwV$zkoI`^Ic1wt<0YPE6b! za`wh6C>NxtzF5RHFZIUH2k%st*TX-cneZy<$%qN-zB_XR5H9fz@im^;Q~4rsN7P!W zI3biTP&{J2&!j~5T>_Q2t?v<0CYM^;eqYvaGL6|{N_n0n0sH}SmMV5rtNAJPYuZ}O zMeiAG8mD2du?>5wv&F=(cio?R?+W^-O&)s=O}lIqUd5k(nitz(85s~(4ex*0>GGET zW=x!)NLXHnmAt&C2=Z=AI>r1|1WOg?n3(EP$=y%iWi7jXv^bf|Rkn0$@21vbjlITRT zFLf!(jI$6i>QNm1*`fg~s!(Mt5#=p=g0sqNRq5u6jaymJ;@IdC}q4=ZkaygWvEk z)g5*a!x3hdPp=4YDY!AGojk73PTmR9ohAAFc zJE}@xB8)df1kT1tDE?}Jbp=9e-Vq+^0Xd-AWz`{~ShM-I1$5LFB@w*V1{gRhquxS- zC84Zk>Aip9dJTW%D}Lh{kI&6kQ@a~9N9o6c(+fihYWC|N)EJ13-s<1c6~y_WhIf0naP(UzttL>xqpMxmd!JkhcX*`6!wc{jTzjtO|r$044KF$ax^&V@_y1Kz_%_K#TaH_Z_ zN)a=Vuh*4lL$BU<3F*RII(h3jSqo>->A^NniSqFREow;{4Ez1W__X{DrDMk`*4ay1 zu_^D1U^7Hl__ZJt&5ojEKce`)HCH_JQzP6ht!Gp3>n@MIF$s72_@vhJhjUtLFXBO~ zlxI)f7E(?+(Zx&OfO5M%?(xuT4A$jpezV;t!l>~DX0?ErNQY8)J*u>PF;hg&2@NN8 zW4)0cXbs7&_zqFMoHs=QuaU8WbTK}*cGfIKg8`hS*PBA+aoP`FnGgcoWVMIht=);j zhpjTz`NKNs2C60KR-VyN6^GwZBb}j#bOc-en2esjwWN43_{=0&*NR(IB!%p(L5@pm z*GcBgqh8D9s)S?w>KOq5czy=_)1~B`Bv7?thnv~(;o>#7xtL(Cf|}Y6q_BoTfzBk3 zRw$_gP(rS2K+Sq2FNQ@955ohCmMqmX`S@D6Y%CK{tG}?JCk3 zXo?j|!x{01qi0y4*8=QT<{W?{r5`4rXo}TOsfIoHw%|dO=zWNy^U3U?>=$>ynyN_0 z#9gjqfm@-{SVCF9i*jv+bAXqWzOaOjuTBWk?EFl=RcX!q)$@L9eiPi`CVxsaXoak* zpR8AYd{!GQH`2P1tAPS5oSasq*IzZ3Q9w2U0GmR47CyXb=9b}IH>x8 zmzcuybiiI?>cuGvDSZ-w95cVUrzuL+v3GjZ`M<0R2C_}mGZY$yZ=(g@%4k}608Ftb zDdWR2Ez(rMbmqEEWA?!~wH9IkGkMG&{ZW9|s5PT3x)2aLC2L*V!jp&tP16!F(s!aLrovbv$p?1le59>h~iE@qX-= zVL%0!p$1`OAlBkQIsbrBYE_sSFu-LPL7$ha{{{*1>+hywnWw2LBBel(0mS^M=J8l0 zAD9rAm|#$Y8_ga z$wCxFErc33=EMZBu#j7_fqeoTKo9`)OJqy$0Da$4D0*yQV9bG!K<-)LGk0dEMYR{= z0(Vv%ifAOo%bXfzG`D8_NU#B`zvN7KjbPKz7kNYg7fbsL;B$NfpK$$JMQ~2ljaVVj zaK{{>M?B!0GLVdeoC1@)k0#@PwJ?8eSl1IyuWdxf5%;j)H8t^N?d|8GSZo8c^llQ==6AN;TY!{8y-w#OT$c zq%r?wt|qef%PM2Yq+@jdN;h*Yx;oM1dCOajL$D1CqahCDZKN-Fim`Y;jjtRCaF%(T z&Z6Na?~e0Le+>ud-1q9-$3qjzHZ_04xetbyn7ZTg(_hO1Up~xnJI#BNb+6mkk<&g= zC_So?$4^tB{!&T&*V5G$Vs7c*OG($jQTs%;IT}#7nJfFv5GtM<>#(0I9;3EmQp1q! zrLWFN?_BxtvCop29|N^Ns8en!PBG(kJi@=0&#VGFKV83v8e4i~2y7P%-R_{yT_frX zBW|FL;V0L5Sqj;OfgP#bj;5EZ=WB^&mFJea2tJhj6=P5~+zCQw3<)b%n)G-ly};;` ze|jH$K9MbBC#dX5g%=ir7t&E^-aIuAx8Lp|jNP?Et4WlhjMO{cm-B}M#brgW&qH(m z*d1K=!&Y&jp2w#F`*Fe!@u8x(Wz-(1PVLxxcLG8MUZem|FP+_NO}dw*FH%ZHpWslx zUBNR>gDrpVCg3(*9D9=>mO=$eRdsbt{NP%fI*utNku@n+$YZ!e%c*~1g9j9X-cm|( z5H9(u@`EjLQjs9>=pJ;o>fOD186Ztj)z5LZ_VLiibO13kh{x8n9l!B}Q`0WTgg@qs z5Kg*$%vR8uB}`EM>;`#GWrmY{aEby|_4OcN_1p4MY^|wc|EOXb^3eBI>p9tfB5HaK zLu?7$L{fH0Rgf@Yz)z9?qU7e#fE(?$Y#k4YT@JZSM2DZ_k)Zkp#03j2lXuFF$p54U zmBWL-PQ?ePumXbEW!LSJ-Xsv>Uw&;1a&z~3qoPRqvXS1WntNz-E_M|MpN@wRKXmjK zHw)VA_7QwX&Ic!<($1(2qod!?1%wAvk9S&!$vaXZ)hVSiK>R>DQn;aL4CK-GVhO$` z0)GmGZqX5lLqOgVcpT#NXbkam7Ot+)7TYi-M=HpvW^q(3zL%rE6fRre$Pk{)!Kn%B zTST_f#~rs`6AmT>0YnHs7dy ziqIS@=m~|9Dy2ivWqbBvv$H)7s&4AaY|t{}mJ^P4BtC zIIT-x;J8=_2W=Z7hjx4D!h_UTf65(vu1;_JuOai0(=gtn=~z{Kkc~MIj-sa+SNVku z*!CSfzj{m*{GK>tJXn0iXZ%gViw)&OLuOQ`y=zX0SRBJK?=t_&%hWRfT!UEQ9Omd4 z@l4}({t~Yp#>%1=M4_~yOdH8!=EgBnf2%L;O$$?#cLk)9$(icH!3c+gxn6)&N{xob zU%)9B8#zO(u{RM5qG+TfUPr#5Gl`r_&TZ7PF-8XRCI~;ElZ+Wv(~m8^Y@i5Q{X)cQ zf{+2$ioM}Y;?!XnfLtl$S{oveBh?Le<<+f=fRoLl&h!>k2cT)egae&mNTQM^x2O&8 z1C)(hm`1!YO+r(wJ@^7%CbrQY8 zO?iuM<8U0}A9K;>_{E}Dut^|nmhwhQH0R{hGcVce>j|5okz(fywzEN)q=Ch4F3CZA zf&a3`TPr9jQSfSoh%#NF+0G5olw;>-jcWkrA+o|tTXO$!mn_Mt{mcCQvUfR*S2nQE zDj6TwkCi5<+Di^W$7;rJVST>vJms?{x?dSV&`S(L#PBN*-R{GVgSk5)Hgo+n<*51X zKRic3OE)x53R6J%IvI3TK>X#n*>?g1zYyda_cYQp5}M`&Z0F)5SGj{wFx#baMa_+O zh5le9dQw+4oD$_7B~`k%m11aw$84RS9+-V0YKPHQ!wpwlkA95XUeC9ACtL5OXyV*0 z1n#0?78|NzisAVEE?b!0HVF49=oC;$(N>iEX{3~$WLaxbo(=Ui=C&hTn6_~jQ6-;; zsDE*ymBb)y=w0Tt6jGhTp8p;svi;CG|LAx)4*zHNZ4Vs&v;pl5J>rdzEU>CuB8 z``4)%g1lcItB>>^GMs$giC#dQqzb_x#1Efm0=*yiy5A9F*RN0WPiY}QP-{P>s3C!!n3a=|~ zirp_1*mVDX8<^)oCoLYp_#Dd`#e&Qm53PA);E>9)A)UERk?w7mI5!eR$QabQZRn^Z zqb!GKmYt z)|qb=dm9?E(cr!A#8LIfIz-#2%-#F;Fw$<>Eq|_<-9WF83gT-7rq^Y!A86!9UxY5> zPWN{n6P(5t$G5sJBDA1@~w0k6WMBPr-V#rg42E|lvrvqA@b z5tw+xXEYIKd8)l|_3V0B$kDAXJitfMEy=bPttyly-=jl7{Qd)|CW*H%Ta+J#`HrNg zP?WBecezl*N@i2uFHyU^#WuRak$}c6H?h|zcbn#tlKP~lNn zjosx+8BN80CD!WB?(t_c);_Vdn4ok}4k^oVDI354cIH1}P|x|`OKGtt{;jCwlJ4|c zc{IL-+m^1H6dSljCEpUX2Wj*}}VJGFY3Yu2<>x z0+L3RLxw(w;mIb5{8E7gvF94c1X#HNDtuotzAhy__8{|5y;={U=0!sX+{YqnLd<equ!Ag?6MV(_otpA8RG*=Dt>+hWHLdD4jRkj1S`b=+YjdME zt0rN;$56)d2Ys?=%fPzNU|2Td`~t3WupzVnaqhSirv7In(L7u)zWfLJW?Ol=zU-^n zoK}G}A|*ypAa(MqR#P{gTfJ@qHcz2Wt0sTZcn&7DP>jY@=3XFPBU}0g7;a*Fi^eVq zwJ&!6g}8=~L-4BI!I-sLkRKvGV$AYMe#+EJS#(UO{v9!X+=Z{ZIkHJ3s#GuSo!+4# zjZ{|Yf{H7L^mOV5vF`PV_53bwOz~ecokty=VJZS^(&5Q zUV(V=SU)E$C=S4ByowLItCDvGg8L2pP`pChllVuW@`wv#a>T07Lre^gOz6!YSB
      HuV4U874}FUR;7z?}g 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 WhYwmIAp)$1{+6Iem=O7A{C@z-&muhl diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7dc91f8b0..92f257ebe 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14888,7 +14888,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -14917,7 +14917,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -14946,7 +14946,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -14975,7 +14975,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15032,7 +15032,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15073,7 +15073,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15114,7 +15114,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15155,7 +15155,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15196,7 +15196,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15237,7 +15237,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15278,7 +15278,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15319,7 +15319,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -15360,7 +15360,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17342,7 +17342,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying column widths and row heights + // Add a table, specifying column widths and row heights. shapes.addTable(3, 4, { columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] @@ -17400,7 +17400,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying column widths and row heights + // Add a table, specifying column widths and row heights. shapes.addTable(3, 4, { columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] @@ -17418,7 +17418,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17459,7 +17459,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17581,7 +17581,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17610,7 +17610,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17639,7 +17639,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17668,7 +17668,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17697,7 +17697,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17726,7 +17726,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17767,7 +17767,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying border styles + // Add a table, specifying border styles. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17796,7 +17796,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17837,7 +17837,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying font formatting and fill colors + // Add a table, specifying font formatting and fill colors. shapes.addTable(3, 4, { values: [ ["A", "BB", "CCC", "DDDD"], @@ -17918,6 +17918,55 @@ }); await context.sync(); }); +'PowerPoint.TableCellProperties#textRuns:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the text runs of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying text runs. + shapes.addTable(3, 4, { + specificCellProperties: [ + [ + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } } + ], + [ + { text: "Bold text", font: { bold: true } }, + { + textRuns: [ + { text: "Text runs with " }, + { text: "Underlined text", font: { underline: PowerPoint.ShapeFontUnderlineStyle.double } }, + { text: " and plain text" } + ] + }, + { text: "Italicized text", font: { italic: true } }, + { text: "Plain text" } + ], + [ + { text: "Bold text", font: { bold: true } }, + { text: "Underlined text", font: { underline: PowerPoint.ShapeFontUnderlineStyle.dotted } }, + { + font: { bold: true }, + textRuns: [ + { text: "Text runs with " }, + { text: "italicized text", font: { italic: true } }, + { text: " and (inherited) bold text" } + ] + }, + { text: "Italicized text", font: { italic: true } } + ] + ] + }); + await context.sync(); + }); 'PowerPoint.TableCellProperties#verticalAlignment:member': - >- // Link to full sample: @@ -17954,7 +18003,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying column widths and row heights + // Add a table, specifying column widths and row heights. shapes.addTable(3, 4, { columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] @@ -17972,7 +18021,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying column widths and row heights + // Add a table, specifying column widths and row heights. shapes.addTable(3, 4, { columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] @@ -18100,7 +18149,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying column widths and row heights + // Add a table, specifying column widths and row heights. shapes.addTable(3, 4, { columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] @@ -18118,7 +18167,7 @@ await PowerPoint.run(async (context) => { const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; - // Add a table, specifying column widths and row heights + // Add a table, specifying column widths and row heights. shapes.addTable(3, 4, { columns: [{ columnWidth: 100 }, { columnWidth: 200 }, { columnWidth: 100 }, { columnWidth: 200 }], rows: [{ rowHeight: 60 }, { rowHeight: 120 }, { rowHeight: 180 }] @@ -18337,6 +18386,55 @@ textRange.setSelected(); await context.sync(); }); +'PowerPoint.TextRun:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml + + + // Specifies the text runs of the cells in a table. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedSlides().getItemAt(0).shapes; + + // Add a table, specifying text runs. + shapes.addTable(3, 4, { + specificCellProperties: [ + [ + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } }, + { text: "Title text", font: { bold: true } } + ], + [ + { text: "Bold text", font: { bold: true } }, + { + textRuns: [ + { text: "Text runs with " }, + { text: "Underlined text", font: { underline: PowerPoint.ShapeFontUnderlineStyle.double } }, + { text: " and plain text" } + ] + }, + { text: "Italicized text", font: { italic: true } }, + { text: "Plain text" } + ], + [ + { text: "Bold text", font: { bold: true } }, + { text: "Underlined text", font: { underline: PowerPoint.ShapeFontUnderlineStyle.dotted } }, + { + font: { bold: true }, + textRuns: [ + { text: "Text runs with " }, + { text: "italicized text", font: { italic: true } }, + { text: " and (inherited) bold text" } + ] + }, + { text: "Italicized text", font: { italic: true } } + ] + ] + }); + await context.sync(); + }); 'PowerPoint.TextVerticalAlignment:enum': - >- // Link to full sample: From 69d116c5edfb9804b81b781f71e05c7fbb2cb85e Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 24 Jun 2025 16:34:19 -0700 Subject: [PATCH 135/156] [Excel] (Custom functions) Switch formatted numbers to doubles (#987) * [Excel] (Custom functions) Switch formatted numbers to doubles * Run yarn start * Adjust title to emphasize purpose of sample --- playlists-prod/excel.yaml | 6 +- playlists/excel.yaml | 6 +- .../data-types-custom-functions.yaml | 2 +- .../data-types-formatted-number.yaml | 36 +++--- snippet-extractor-metadata/excel.xlsx | Bin 28959 -> 28994 bytes snippet-extractor-output/snippets.yaml | 114 +++++++++--------- view-prod/excel.json | 2 +- view/excel.json | 2 +- 8 files changed, 84 insertions(+), 84 deletions(-) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 3b67eee0d..97ca04c5c 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -305,12 +305,12 @@ group: Custom XML Parts api_set: ExcelApi: '1.5' -- id: excel-data-types-formatted-number +- id: excel-data-types-doubles name: 'Data types: Formatted numbers' fileName: data-types-formatted-number.yaml description: >- - This sample shows how to set and get data types using the formatted number - properties. + This sample shows how to set and get formatted numbers using double data + types. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml group: Data Types diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 2a8b5c90f..3c4620a92 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -305,12 +305,12 @@ group: Custom XML Parts api_set: ExcelApi: '1.5' -- id: excel-data-types-formatted-number +- id: excel-data-types-doubles name: 'Data types: Formatted numbers' fileName: data-types-formatted-number.yaml description: >- - This sample shows how to set and get data types using the formatted number - properties. + This sample shows how to set and get formatted numbers using double data + types. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-formatted-number.yaml group: Data Types diff --git a/samples/excel/16-custom-functions/data-types-custom-functions.yaml b/samples/excel/16-custom-functions/data-types-custom-functions.yaml index a5ebdbab6..8d6745ff6 100644 --- a/samples/excel/16-custom-functions/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -66,7 +66,7 @@ script: }, // Add Unit Price as a formatted number. "Unit Price": { - type: "FormattedNumber", + type: "Double", basicValue: product.unitPrice, numberFormat: "$* #,##0.00" }, diff --git a/samples/excel/20-data-types/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml index dd362a38a..12770b416 100644 --- a/samples/excel/20-data-types/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -1,19 +1,19 @@ order: 1 -id: excel-data-types-formatted-number +id: excel-data-types-doubles name: 'Data types: Formatted numbers' -description: This sample shows how to set and get data types using the formatted number properties. +description: This sample shows how to set and get formatted numbers using double data types. host: EXCEL api_set: ExcelApi: '1.16' script: content: |- document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - document.getElementById("set-formatted-number-date").addEventListener("click", () => tryCatch(setFormattedNumberDate)); - document.getElementById("set-formatted-number-currency").addEventListener("click", () => tryCatch(setFormattedNumberCurrency)); - document.getElementById("get-formatted-number").addEventListener("click", () => tryCatch(getFormattedNumber)); + document.getElementById("set-double-as-date").addEventListener("click", () => tryCatch(setDoubleAsDate)); + document.getElementById("set-double-as-currency").addEventListener("click", () => tryCatch(setDoubleAsCurrency)); + document.getElementById("get-double").addEventListener("click", () => tryCatch(getDouble)); - async function setFormattedNumberDate() { - // This function creates a formatted number data type, + async function setDoubleAsDate() { + // This function creates a double data type, // and sets the format of this data type as a date. await Excel.run(async (context) => { // Get the Sample worksheet and a range on that sheet. @@ -24,7 +24,7 @@ script: dateRange.valuesAsJson = [ [ { - type: Excel.CellValueType.formattedNumber, + type: Excel.CellValueType.double, basicValue: 32889.0, numberFormat: "m/d/yyyy" } @@ -34,8 +34,8 @@ script: }); } - async function setFormattedNumberCurrency() { - // This function creates a formatted number data type, + async function setDoubleAsCurrency() { + // This function creates a double data type, // and sets the format of this data type as a currency. await Excel.run(async (context) => { // Get the Sample worksheet and a range on that sheet. @@ -46,7 +46,7 @@ script: currencyRange.valuesAsJson = [ [ { - type: Excel.CellValueType.formattedNumber, + type: Excel.CellValueType.double, basicValue: 12.34, numberFormat: "$* #,##0.00" } @@ -57,7 +57,7 @@ script: }); } - async function getFormattedNumber() { + async function getDouble() { // This function prints information about data types // in cells A1 and A2 to the console. await Excel.run(async (context) => { @@ -79,13 +79,13 @@ script: console.log(" Type: " + dateValues.type); console.log(" Basic value: " + dateValues.basicValue); console.log(" Basic type: " + dateValues.basicType); - console.log(" Number format: " + (dateValues as Excel.FormattedNumberCellValue).numberFormat); + console.log(" Number format: " + (dateValues as Excel.DoubleCellValue).numberFormat); console.log("Currency"); console.log(" Type: " + currencyValues.type); console.log(" Basic value: " + currencyValues.basicValue); console.log(" Basic type: " + currencyValues.basicType); - console.log(" Number format: " + (currencyValues as Excel.FormattedNumberCellValue).numberFormat); + console.log(" Number format: " + (currencyValues as Excel.DoubleCellValue).numberFormat); }); } @@ -111,7 +111,7 @@ script: template: content: |-

      -

      This sample shows how to work with the formatted number data type.

      +

      This sample shows how to work with double data types to create formatted numbers.

      Set up

      @@ -119,13 +119,13 @@ template: Add worksheet

      Try it out

      - - -
      diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 65ff1a38bd7faa8505d474d5a72fba611935f418..31be28054d89ed85cbacbdf06dc15ac7c0d3b533 100644 GIT binary patch delta 14343 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 delta 14305 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml + + + // This function creates a double data type, + + // and sets the format of this data type as a currency. + + await Excel.run(async (context) => { + // Get the Sample worksheet and a range on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const currencyRange = sheet.getRange("A2"); + + // Write a number formatted as currency to cell A2. + currencyRange.valuesAsJson = [ + [ + { + type: Excel.CellValueType.double, + basicValue: 12.34, + numberFormat: "$* #,##0.00" + } + ] + ]; + + await context.sync(); + }); +'Excel.DoubleCellValue#type:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml + + + // This function creates a double data type, + + // and sets the format of this data type as a date. + + await Excel.run(async (context) => { + // Get the Sample worksheet and a range on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const dateRange = sheet.getRange("A1"); + + // Write a number formatted as a date to cell A1. + dateRange.valuesAsJson = [ + [ + { + type: Excel.CellValueType.double, + basicValue: 32889.0, + numberFormat: "m/d/yyyy" + } + ] + ]; + await context.sync(); + }); 'Excel.DynamicFilterCriteria:enum': - >- // Link to full sample: @@ -3688,61 +3743,6 @@ }; filterField.applyFilter({ dateFilter: dateFilter }); - await context.sync(); - }); -'Excel.FormattedNumberCellValue#numberFormat:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml - - - // This function creates a formatted number data type, - - // and sets the format of this data type as a currency. - - await Excel.run(async (context) => { - // Get the Sample worksheet and a range on that sheet. - const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); - const currencyRange = sheet.getRange("A2"); - - // Write a number formatted as currency to cell A2. - currencyRange.valuesAsJson = [ - [ - { - type: Excel.CellValueType.formattedNumber, - basicValue: 12.34, - numberFormat: "$* #,##0.00" - } - ] - ]; - - await context.sync(); - }); -'Excel.FormattedNumberCellValue#type:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml - - - // This function creates a formatted number data type, - - // and sets the format of this data type as a date. - - await Excel.run(async (context) => { - // Get the Sample worksheet and a range on that sheet. - const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); - const dateRange = sheet.getRange("A1"); - - // Write a number formatted as a date to cell A1. - dateRange.valuesAsJson = [ - [ - { - type: Excel.CellValueType.formattedNumber, - basicValue: 32889.0, - numberFormat: "m/d/yyyy" - } - ] - ]; await context.sync(); }); 'Excel.Functions:class': @@ -5940,7 +5940,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml - // This function creates a formatted number data type, + // This function creates a double data type, // and sets the format of this data type as a date. @@ -5953,7 +5953,7 @@ dateRange.valuesAsJson = [ [ { - type: Excel.CellValueType.formattedNumber, + type: Excel.CellValueType.double, basicValue: 32889.0, numberFormat: "m/d/yyyy" } diff --git a/view-prod/excel.json b/view-prod/excel.json index b267d8b88..004d1fba2 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -33,7 +33,7 @@ "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml", "excel-custom-xml-parts-test-xml-for-unique-namespace": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/private-samples/excel/20-chart/chart-title-ts.yaml", - "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml", + "excel-data-types-doubles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml", "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml", diff --git a/view/excel.json b/view/excel.json index c805307dd..7a5a11333 100644 --- a/view/excel.json +++ b/view/excel.json @@ -33,7 +33,7 @@ "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml", "excel-custom-xml-parts-test-xml-for-unique-namespace": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/private-samples/excel/20-chart/chart-title-ts.yaml", - "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-formatted-number.yaml", + "excel-data-types-doubles": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-web-image.yaml", "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-error-values.yaml", From 1e6cac62dd1afb8cb45940001efd3fd88195a4ad Mon Sep 17 00:00:00 2001 From: donlvMSFT <42738188+donlvMSFT@users.noreply.github.com> Date: Thu, 26 Jun 2025 04:37:48 +0800 Subject: [PATCH 136/156] [Excel] (Custom Functions) Sample for using custom enum in custom function (#988) * sample for using custom enum in custom function * resolve comments * resolve comment --- playlists-prod/excel.yaml | 11 +++ playlists/excel.yaml | 11 +++ .../16-custom-functions/custom-enum.yaml | 87 +++++++++++++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 5 files changed, 111 insertions(+) create mode 100644 samples/excel/16-custom-functions/custom-enum.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 97ca04c5c..236c569b4 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -287,6 +287,17 @@ group: Custom Functions api_set: CustomFunctionsRuntime: 1.4 +- id: excel-custom-functions-custom-enum + name: Function with custom enum parameters + fileName: custom-enum.yaml + description: >- + Use custom enum as parameters in a custom function that searches for + flights. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/custom-enum.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: '1.5' - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 3c4620a92..910e9ac77 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -287,6 +287,17 @@ group: Custom Functions api_set: CustomFunctionsRuntime: 1.4 +- id: excel-custom-functions-custom-enum + name: Function with custom enum parameters + fileName: custom-enum.yaml + description: >- + Use custom enum as parameters in a custom function that searches for + flights. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/custom-enum.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: '1.5' - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml diff --git a/samples/excel/16-custom-functions/custom-enum.yaml b/samples/excel/16-custom-functions/custom-enum.yaml new file mode 100644 index 000000000..3bff6245f --- /dev/null +++ b/samples/excel/16-custom-functions/custom-enum.yaml @@ -0,0 +1,87 @@ +order: 7 +id: excel-custom-functions-custom-enum +name: Function with custom enum parameters +description: Use custom enum as parameters in a custom function that searches for flights. +host: EXCEL +api_set: + CustomFunctionsRuntime: '1.5' +script: + content: | + /** + * A custom enum representing different airports. + * @customenum {string} + */ + enum Airports { + // Beijing is the capital of China. + Beijing = "PEK", + + // Shanghai is a major financial hub in China. + Shanghai = "PVG", + + // Seattle is known for its tech industry and the Space Needle. + Seattle = "SEA", + + // San Francisco is famous for the Golden Gate Bridge and tech startups. + SanFrancisco = "SFO", + + // Tokyo is the capital of Japan and known for its modern architecture and culture. + Tokyo = "HND" + } + + /** + * A custom enum representing the days of the week. + * @customenum {number} + */ + enum DayOfWeek { + Monday = 1, + Tuesday = 2, + Wednesday = 3, + Thursday = 4, + Friday = 5, + Saturday = 6, + Sunday = 7 + } + + /** + * A function that shows how to use custom enums to get a flight schedule. + * @customfunction + * @param {Airports} departure Where the flight departs. + * @param {Airports} destination Where the flight arrives. + * @param {DayOfWeek[]} day Days of the week when the flight is available. + * @returns The available flight schedule. + */ + function fetchFlightSchedule(departure: Airports, destination: Airports, day: DayOfWeek[]): string[][] { + const flights: string[][] = []; + flights.push(["Flights from " + departure + " to " + destination, "", "", "", ""]); + flights.push(["Day", "Flight Number", "Departure Time", "Arrival Time", "Price"]); + const daysOfWeek = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; + + day.forEach((d) => { + const dayName = daysOfWeek[d - 1]; + const numberOfFlights = Math.floor(Math.random() * 3) + 1; // 1 to 3 flights + + for (let i = 0; i < numberOfFlights; i++) { + const flightNumber = `AA${Math.floor(Math.random() * 900) + 100}`; + const departureTime = `${Math.floor(Math.random() * 12) + 1}:00 ${Math.random() > 0.5 ? "AM" : "PM"}`; + const arrivalTime = `${Math.floor(Math.random() * 12) + 1}:00 ${Math.random() > 0.5 ? "AM" : "PM"}`; + const price = `$${Math.floor(Math.random() * 500) + 100}`; + + flights.push([dayName, flightNumber, departureTime, arrivalTime, price]); + } + }); + + return flights; + } + language: typescript +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js + + jquery@3.1.1 + @types/jquery@3.3.1 \ No newline at end of file diff --git a/view-prod/excel.json b/view-prod/excel.json index 004d1fba2..cca1f36aa 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -30,6 +30,7 @@ "excel-custom-functions-web-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/web-call-function.yaml", "excel-custom-functions-errors": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/custom-functions-errors.yaml", "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/data-types-custom-functions.yaml", + "excel-custom-functions-custom-enum": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/custom-enum.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml", "excel-custom-xml-parts-test-xml-for-unique-namespace": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/private-samples/excel/20-chart/chart-title-ts.yaml", diff --git a/view/excel.json b/view/excel.json index 7a5a11333..4524a7769 100644 --- a/view/excel.json +++ b/view/excel.json @@ -30,6 +30,7 @@ "excel-custom-functions-web-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/web-call-function.yaml", "excel-custom-functions-errors": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/custom-functions-errors.yaml", "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/data-types-custom-functions.yaml", + "excel-custom-functions-custom-enum": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/custom-enum.yaml", "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml", "excel-custom-xml-parts-test-xml-for-unique-namespace": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml", "excel-chart-chart-title-ts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/private-samples/excel/20-chart/chart-title-ts.yaml", From fde0f6e410191593e060c6ea771ae04d6001cbbd Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 26 Jun 2025 13:33:43 -0700 Subject: [PATCH 137/156] [Excel] (Custom functions) Tweak sample submitted by PM (#989) --- playlists-prod/excel.yaml | 6 +++--- playlists/excel.yaml | 6 +++--- samples/excel/16-custom-functions/custom-enum.yaml | 9 ++++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 236c569b4..3b1b669a1 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -288,16 +288,16 @@ api_set: CustomFunctionsRuntime: 1.4 - id: excel-custom-functions-custom-enum - name: Function with custom enum parameters + name: Function with custom enums fileName: custom-enum.yaml description: >- - Use custom enum as parameters in a custom function that searches for + Use custom enums as parameters in a custom function that searches for flights. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/custom-enum.yaml group: Custom Functions api_set: - CustomFunctionsRuntime: '1.5' + CustomFunctionsRuntime: 1.5 - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 910e9ac77..c6a91b5fa 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -288,16 +288,16 @@ api_set: CustomFunctionsRuntime: 1.4 - id: excel-custom-functions-custom-enum - name: Function with custom enum parameters + name: Function with custom enums fileName: custom-enum.yaml description: >- - Use custom enum as parameters in a custom function that searches for + Use custom enums as parameters in a custom function that searches for flights. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/custom-enum.yaml group: Custom Functions api_set: - CustomFunctionsRuntime: '1.5' + CustomFunctionsRuntime: 1.5 - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml diff --git a/samples/excel/16-custom-functions/custom-enum.yaml b/samples/excel/16-custom-functions/custom-enum.yaml index 3bff6245f..010b64081 100644 --- a/samples/excel/16-custom-functions/custom-enum.yaml +++ b/samples/excel/16-custom-functions/custom-enum.yaml @@ -1,10 +1,10 @@ order: 7 id: excel-custom-functions-custom-enum -name: Function with custom enum parameters -description: Use custom enum as parameters in a custom function that searches for flights. +name: Function with custom enums +description: Use custom enums as parameters in a custom function that searches for flights. host: EXCEL api_set: - CustomFunctionsRuntime: '1.5' + CustomFunctionsRuntime: 1.5 script: content: | /** @@ -52,7 +52,10 @@ script: */ function fetchFlightSchedule(departure: Airports, destination: Airports, day: DayOfWeek[]): string[][] { const flights: string[][] = []; + + // Use the `Airports` enum for both the `departure` and `destination` parameters. flights.push(["Flights from " + departure + " to " + destination, "", "", "", ""]); + flights.push(["Day", "Flight Number", "Departure Time", "Arrival Time", "Price"]); const daysOfWeek = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; From f2d08d4ba40b41b182b62de6bfea83fafe625022 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 8 Jul 2025 11:21:07 -0700 Subject: [PATCH 138/156] [Outlook] (roaming settings) Update sample (#991) * Update roaming settings sample * Apply suggestion from review Co-authored-by: Elizabeth Samuel * Run script --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 2 +- playlists/outlook.yaml | 2 +- .../10-roaming-settings/roaming-settings.yaml | 17 ++++++++++++++--- snippet-extractor-metadata/outlook.xlsx | Bin 24519 -> 24576 bytes snippet-extractor-output/snippets.yaml | 14 ++++++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 5a6387387..0a11cfd8e 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, and saves add-in roaming settings' + description: 'Gets, sets, saves, and removes add-in roaming settings.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 264640e55..00c0262b1 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, and saves add-in roaming settings' + description: 'Gets, sets, saves, and removes add-in roaming settings.' rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 1b15c078c..5834cfab5 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -1,6 +1,6 @@ id: outlook-roaming-settings-roaming-settings name: Use add-in settings -description: 'Gets, sets, and saves add-in roaming settings' +description: 'Gets, sets, saves, and removes add-in roaming settings.' host: OUTLOOK api_set: Mailbox: '1.1' @@ -9,6 +9,7 @@ script: document.getElementById("get").addEventListener("click", get); document.getElementById("set").addEventListener("click", set); document.getElementById("save").addEventListener("click", save); + document.getElementById("remove").addEventListener("click", remove); function get() { const settingName = (document.getElementById("settingName") as HTMLInputElement).value; @@ -16,14 +17,14 @@ script: (document.getElementById("settingValue") as HTMLInputElement).value = settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); } - + function set() { const settingName = (document.getElementById("settingName") as HTMLInputElement).value; const settingValue = (document.getElementById("settingValue") as HTMLInputElement).value; Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); } - + function save() { // Save settings in the mailbox to make it available in future sessions. Office.context.roamingSettings.saveAsync(function(result) { @@ -34,6 +35,13 @@ script: } }); } + + function remove() { + // Remove the specified setting from the mailbox. + const settingName = (document.getElementById("settingName") as HTMLInputElement).value; + Office.context.roamingSettings.remove(settingName); + console.log(`The "${settingName}" setting has been removed.`); + } language: typescript template: content: |- @@ -59,6 +67,9 @@ template: +
      language: html style: diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 82e39008fa08ab7a41be90ee12292607226ba1d8..fad79065637fb701a81f59c9354dfdba8f6ea385 100644 GIT binary patch delta 5657 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�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 YH144R>LWrDRE?TMa1)N0{%7sK05^fASpWb4 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 5f815d65d..fc5410f5a 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14387,6 +14387,20 @@ settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); +'Office.RoamingSettings#remove:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml + + + // Remove the specified setting from the mailbox. + + const settingName = (document.getElementById("settingName") as + HTMLInputElement).value; + + Office.context.roamingSettings.remove(settingName); + + console.log(`The "${settingName}" setting has been removed.`); 'Office.RoamingSettings#saveAsync:member(1)': - >- // Link to full sample: From 8d006029dfb82800dabe4d47315df72a6e557170 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Sun, 20 Jul 2025 21:57:33 -0700 Subject: [PATCH 139/156] [Excel] (Chart) Add chart data labels snippet (#990) * [Excel] Add chart, data types, and shape snippets * Active shape: Remove jQuery, adjust HTML * Switch from jQuery to JS, reformat html sections * Match sample to naming conventions of repo, align to style guide, reorder methods to follow logical order * Run yarn start, move other snippets to new branches * Re-run yarn start * [Excel] (Shape) Add get active shape image snippet * Remove unrelated snippet * Incorporate Copilot reviewer feedback * Incorporate Copilot feedback * Re-run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Code review feedback, re-run yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .gitignore | 4 +- playlists-prod/excel.yaml | 9 + playlists/excel.yaml | 9 + samples/excel/10-chart/chart-data-labels.yaml | 278 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 28994 -> 29116 bytes snippet-extractor-output/snippets.yaml | 127 ++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + yarn.lock | 222 ++++++++------ 9 files changed, 563 insertions(+), 88 deletions(-) create mode 100644 samples/excel/10-chart/chart-data-labels.yaml diff --git a/.gitignore b/.gitignore index a133b9391..2d2f29ea5 100644 --- a/.gitignore +++ b/.gitignore @@ -64,4 +64,6 @@ npm-debug.log* ~$* # Used to ignore "playlists", but having those checked-in for diffing purposes is very useful, so undoing the ignore: -# playlists/** \ No newline at end of file +# playlists/** + +package-lock.json \ No newline at end of file diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 3b1b669a1..8b3dc1932 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -168,6 +168,15 @@ group: Chart api_set: ExcelApi: '1.7' +- id: excel-chart-data-labels + name: Data labels + fileName: chart-data-labels.yaml + description: Add and style data labels for your charts. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml + group: Chart + api_set: + ExcelApi: '1.19' - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index c6a91b5fa..3e6e594e8 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -168,6 +168,15 @@ group: Chart api_set: ExcelApi: '1.7' +- id: excel-chart-data-labels + name: Data labels + fileName: chart-data-labels.yaml + description: Add and style data labels for your charts. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-labels.yaml + group: Chart + api_set: + ExcelApi: '1.19' - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml diff --git a/samples/excel/10-chart/chart-data-labels.yaml b/samples/excel/10-chart/chart-data-labels.yaml new file mode 100644 index 000000000..43f109f55 --- /dev/null +++ b/samples/excel/10-chart/chart-data-labels.yaml @@ -0,0 +1,278 @@ +order: 16 +id: excel-chart-data-labels +name: Data labels +description: Add and style data labels for your charts. +host: EXCEL +api_set: + ExcelApi: '1.19' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-data-labels").addEventListener("click", () => tryCatch(addDataLabels)); + document.getElementById("style-data-label-substrings").addEventListener("click", () => tryCatch(styleDataLabelSubstrings)); + document.getElementById("change-label-to-round-rectangle").addEventListener("click", () => tryCatch(changeLabelShapesToRoundRectangle)); + document.getElementById("change-label-to-assorted").addEventListener("click", () => tryCatch(changeLabelShapesToAssorted)); + + // Define the worksheet name for the sample. + const sheetName = "Sample"; + + async function addDataLabels() { + // This function adds data labels to specific chart points + // and sets their text and position. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + await context.sync(); + + const series = chart.series.getItemAt(0); + series.points.load("dataLabel"); + await context.sync(); + + // Define properties for data label positioning and shape. + const labelProperties = [ + { + top: 70, + geometricShapeType: Excel.GeometricShapeType.rectangle + }, + { + top: 200, + geometricShapeType: Excel.GeometricShapeType.rectangle + } + ]; + + // Add data labels to specific chart points and set their text and properties. + for (let i = 0; i < dataLabelInfo.length; i++) { + const point = series.points.getItemAt(dataLabelInfo[i].index); + point.hasDataLabel = true; + + const dataLabel = point.dataLabel; + dataLabel.text = dataLabelInfo[i].news; + dataLabel.set(labelProperties[i]); + } + await context.sync(); + }); + } + + async function styleDataLabelSubstrings() { + // This function styles substrings within data label text using font formatting. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + await context.sync(); + + const series = chart.series.getItemAt(0); + series.load("points"); + await context.sync(); + + series.points.load("items"); + await context.sync(); + + // Style a substring in the first data label. + let searchString = "sports"; + let dataLabel = series.points.getItemAt(dataLabelInfo[0].index).dataLabel.load("text"); + await context.sync(); + let substringStart = dataLabel.text.indexOf(searchString); + let subLabel = dataLabel.getSubstring(substringStart, searchString.length); + subLabel.font.size = 13; + subLabel.font.bold = true; + + // Style a substring in the second data label. + searchString = "'Titanic'"; + dataLabel = series.points.getItemAt(dataLabelInfo[1].index).dataLabel.load("text"); + await context.sync(); + + substringStart = dataLabel.text.indexOf(searchString); + subLabel = dataLabel.getSubstring(substringStart, searchString.length); + subLabel.font.name = "Calibri"; + subLabel.font.size = 13; + subLabel.font.italic = true; + subLabel.font.color = "blue"; + await context.sync(); + }); + } + + async function changeLabelShapesToRoundRectangle() { + // This function changes the geometric shape of data labels to round rectangles. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + await context.sync(); + + const series = chart.series.getItemAt(0); + series.load("*"); + await context.sync(); + + series.points.load("*"); + await context.sync(); + + // Set both data labels to round rectangle shape. + let dataLabel = series.points.getItemAt(dataLabelInfo[0].index).dataLabel; + dataLabel.geometricShapeType = Excel.GeometricShapeType.roundRectangle; + + dataLabel = series.points.getItemAt(dataLabelInfo[1].index).dataLabel; + dataLabel.geometricShapeType = Excel.GeometricShapeType.roundRectangle; + await context.sync(); + }); + } + + async function changeLabelShapesToAssorted() { + // This function changes data labels to different geometric shapes with custom formatting. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + await context.sync(); + + const series = chart.series.getItemAt(0); + + // Set first data label to snip1Rectangle shape. + let dataLabel = series.points.getItemAt(dataLabelInfo[0].index).dataLabel; + dataLabel.geometricShapeType = Excel.GeometricShapeType.snip1Rectangle; + + // Set second data label to snip2DiagonalRectangle shape with light green fill. + dataLabel = series.points.getItemAt(dataLabelInfo[1].index).dataLabel; + dataLabel.geometricShapeType = Excel.GeometricShapeType.snip2DiagonalRectangle; + dataLabel.format.fill.setSolidColor("90EE90"); + await context.sync(); + }); + } + + /** Create sample data and a line chart for the data labels demo. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject(sheetName).delete(); + const sheet = context.workbook.worksheets.add(sheetName); + + // Add sample data to the worksheet. + const dataRange = sheet.getRange("A1:B32"); + dataRange.values = sampleData; + + sheet.activate(); + await context.sync(); + + // Create a line chart with markers. + const chart = sheet.charts.add(Excel.ChartType.lineMarkers, dataRange); + + // Position and format the chart. + chart.setPosition("D4", "Q25"); + chart.legend.visible = false; + chart.title.text = "Product price"; + chart.title.format.font.size = 20; + chart.axes.valueAxis.minimum = 80; + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + + // Save chart data labels as an object for use throughout the sample. + const dataLabelInfo = [ + { + index: 11, + date: "7/12/2023", + news: "The city holds a sports event." + }, + { + index: 20, + date: "7/21/2023", + news: "The movie 'Titanic' returns to the cinema." + } + ]; + + // Sample data for the chart. + const sampleData = [ + ["Date", "Price"], + ["7/1/2023", 100], + ["7/2/2023", 96.71], + ["7/3/2023", 103.24], + ["7/4/2023", 109.09], + ["7/5/2023", 113.68], + ["7/6/2023", 118.68], + ["7/7/2023", 123.2], + ["7/8/2023", 135.05], + ["7/9/2023", 138.68], + ["7/10/2023", 129.63], + ["7/11/2023", 130.85], + ["7/12/2023", 135.71], + ["7/13/2023", 124.83], + ["7/14/2023", 118.94], + ["7/15/2023", 119.63], + ["7/16/2023", 127.2], + ["7/17/2023", 113.98], + ["7/18/2023", 110.32], + ["7/19/2023", 119.3], + ["7/20/2023", 120.36], + ["7/21/2023", 111.88], + ["7/22/2023", 118.88], + ["7/23/2023", 124.37], + ["7/24/2023", 119.53], + ["7/25/2023", 133.42], + ["7/26/2023", 125.67], + ["7/27/2023", 135.82], + ["7/28/2023", 137.87], + ["7/29/2023", 138.9], + ["7/30/2023", 139.36], + ["7/31/2023", 138.75] + ]; + language: typescript +template: + content: |- +

      +

      This sample shows how to create data labels for charts and adjust the font and appearance of those labels.

      +
      +
      +

      Set up

      + +
      +
      +

      Add data labels to the chart

      + +
      +
      +

      Style data labels

      + +
      +
      + +
      +
      + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 31be28054d89ed85cbacbdf06dc15ac7c0d3b533..0680b101fa125759b7760e893eeb148c321ee041 100644 GIT binary patch delta 18429 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Μ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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml + + + // This function styles substrings within data label text using font + formatting. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + await context.sync(); + + const series = chart.series.getItemAt(0); + series.load("points"); + await context.sync(); + + series.points.load("items"); + await context.sync(); + + // Style a substring in the first data label. + let searchString = "sports"; + let dataLabel = series.points.getItemAt(dataLabelInfo[0].index).dataLabel.load("text"); + await context.sync(); + let substringStart = dataLabel.text.indexOf(searchString); + let subLabel = dataLabel.getSubstring(substringStart, searchString.length); + subLabel.font.size = 13; + subLabel.font.bold = true; + + // Style a substring in the second data label. + searchString = "'Titanic'"; + dataLabel = series.points.getItemAt(dataLabelInfo[1].index).dataLabel.load("text"); + await context.sync(); + + substringStart = dataLabel.text.indexOf(searchString); + subLabel = dataLabel.getSubstring(substringStart, searchString.length); + subLabel.font.name = "Calibri"; + subLabel.font.size = 13; + subLabel.font.italic = true; + subLabel.font.color = "blue"; + await context.sync(); + }); 'Excel.ChartDataTable#format:member': - >- // Link to full sample: @@ -1238,6 +1281,90 @@ await context.sync(); }); +'Excel.ChartPoint:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml + + + // This function adds data labels to specific chart points + + // and sets their text and position. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + await context.sync(); + + const series = chart.series.getItemAt(0); + series.points.load("dataLabel"); + await context.sync(); + + // Define properties for data label positioning and shape. + const labelProperties = [ + { + top: 70, + geometricShapeType: Excel.GeometricShapeType.rectangle + }, + { + top: 200, + geometricShapeType: Excel.GeometricShapeType.rectangle + } + ]; + + // Add data labels to specific chart points and set their text and properties. + for (let i = 0; i < dataLabelInfo.length; i++) { + const point = series.points.getItemAt(dataLabelInfo[i].index); + point.hasDataLabel = true; + + const dataLabel = point.dataLabel; + dataLabel.text = dataLabelInfo[i].news; + dataLabel.set(labelProperties[i]); + } + await context.sync(); + }); +'Excel.ChartPointsCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml + + + // This function adds data labels to specific chart points + + // and sets their text and position. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + await context.sync(); + + const series = chart.series.getItemAt(0); + series.points.load("dataLabel"); + await context.sync(); + + // Define properties for data label positioning and shape. + const labelProperties = [ + { + top: 70, + geometricShapeType: Excel.GeometricShapeType.rectangle + }, + { + top: 200, + geometricShapeType: Excel.GeometricShapeType.rectangle + } + ]; + + // Add data labels to specific chart points and set their text and properties. + for (let i = 0; i < dataLabelInfo.length; i++) { + const point = series.points.getItemAt(dataLabelInfo[i].index); + point.hasDataLabel = true; + + const dataLabel = point.dataLabel; + dataLabel.text = dataLabelInfo[i].news; + dataLabel.set(labelProperties[i]); + } + await context.sync(); + }); 'Excel.ChartSeries#delete:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index cca1f36aa..0a775b890 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -17,6 +17,7 @@ "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml", + "excel-chart-data-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml", "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml", "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml", diff --git a/view/excel.json b/view/excel.json index 4524a7769..156b0e45e 100644 --- a/view/excel.json +++ b/view/excel.json @@ -17,6 +17,7 @@ "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml", + "excel-chart-data-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-labels.yaml", "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-mentions.yaml", "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml", diff --git a/yarn.lock b/yarn.lock index c24d793c0..2f5433b0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,12 +51,12 @@ "@types/chalk@0.4.31": version "0.4.31" resolved "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz" - integrity sha1-ox10JBprHtu5c8822XooloNKUfk= + integrity sha1-ox10JBprHtu5c8822XooloNKUfk= sha512-nF0fisEPYMIyfrFgabFimsz9Lnuu9MwkNrrlATm2E4E46afKDyeelT+8bXfw1VSc7sLBxMxRgT7PxTC2JcqN4Q== "@types/fs-extra@3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY= + integrity sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY= sha512-99ywH5BUw32J7pX3Nqo5xDw7KtvWUogKXLNGAlfSKvMGnCLq6/5Ufk+EuPNEMsKmSYJW1VityGHA9Lo+NEgCKg== dependencies: "@types/node" "*" @@ -83,12 +83,7 @@ resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== -"@types/node@*": - version "16.10.3" - resolved "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz" - integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== - -"@types/node@^11.10.5": +"@types/node@*", "@types/node@^11.10.5": version "11.15.54" resolved "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz" integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== @@ -109,12 +104,12 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== ansi-styles@^3.2.1: version "3.2.1" @@ -161,7 +156,7 @@ argparse@^1.0.7: async@^3.2.0: version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== balanced-match@^1.0.0: @@ -182,7 +177,7 @@ big-integer@^1.6.17: binary@~0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== dependencies: buffers "~0.1.1" chainsaw "~0.1.0" @@ -199,7 +194,7 @@ bl@^4.0.3: bluebird@~3.4.1: version "3.4.7" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== brace-expansion@^1.1.7: version "1.1.11" @@ -212,7 +207,7 @@ brace-expansion@^1.1.7: buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: version "0.2.13" resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-indexof-polyfill@~1.0.0: version "1.0.2" @@ -230,32 +225,30 @@ buffer@^5.5.0: buffers@~0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== dependencies: traverse ">=0.3.0 <0.4" -chalk@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" -chalk@^2.0.0, chalk@^2.3.0: +chalk@^2.3.0: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -264,24 +257,35 @@ chalk@^2.0.0, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + charm@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz" - integrity sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0= + integrity sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0= sha512-mBB1orFlZvYF8PcQNtO446LbWmgZEIOvq6n0CY68csh9JN0Rk1rrqWPQpfLImQO7EhpibXUVDF2PTTaYIfTeRA== dependencies: inherits "^2.0.1" cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A== dependencies: restore-cursor "^1.0.1" cli-spinners@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz" - integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= + integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= sha512-1sdlgy47mFLr4OfiKC/raeqJ4Jt6oZskLs51esqe/rFqcR23DNF++CbsDpv3hsvwGWHA/+lnxf4xdDtZZtkPBA== color-convert@^1.9.0: version "1.9.3" @@ -293,12 +297,12 @@ color-convert@^1.9.0: color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== colors@1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== commander@^2.12.1: version "2.20.3" @@ -318,7 +322,7 @@ compress-commons@^4.1.0: concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== core-util-is@~1.0.0: version "1.0.3" @@ -354,7 +358,7 @@ diff@^4.0.1: duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== dependencies: readable-stream "^2.0.2" @@ -365,10 +369,15 @@ end-of-stream@^1.4.1: dependencies: once "^1.4.0" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" @@ -398,7 +407,7 @@ exceljs@^4.3.0: exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg== exit-on-epipe@~1.0.1: version "1.0.1" @@ -421,7 +430,7 @@ fs-constants@^1.0.0: fs-extra@3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= + integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== dependencies: graceful-fs "^4.1.2" jsonfile "^3.0.0" @@ -430,7 +439,7 @@ fs-extra@3.0.1: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fstream@^1.0.12: version "1.0.12" @@ -467,14 +476,14 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has@^1.0.3: version "1.0.3" @@ -491,17 +500,17 @@ ieee754@^1.1.13: immediate@~3.0.5: version "3.0.6" resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -521,7 +530,7 @@ is-core-module@^2.2.0: isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== js-tokens@^4.0.0: version "4.0.0" @@ -539,13 +548,13 @@ js-yaml@^3.13.1: jsonfile@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz" - integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w== optionalDependencies: graceful-fs "^4.1.6" jszip@^3.5.0: version "3.10.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz" integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: lie "~3.3.0" @@ -556,7 +565,7 @@ jszip@^3.5.0: lazystream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= sha512-/330KFbmC/zKdtZoVDRwvkJ8snrJyBPfoZ39zsJl2O24HOE1CTNiEbeZmHXmjBVxTSSv7JlJEXPYhU83DhA2yg== dependencies: readable-stream "^2.0.5" @@ -570,42 +579,42 @@ lie@~3.3.0: listenercount@~1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.difference@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.groupby@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz" - integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= + integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== lodash.isfunction@^3.0.9: version "3.0.9" @@ -615,27 +624,27 @@ lodash.isfunction@^3.0.9: lodash.isnil@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz" - integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= + integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng== lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isundefined@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz" - integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= + integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA== lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@^4.17.21: version "4.17.21" @@ -644,17 +653,17 @@ lodash@^4.17.21: minimatch@^3.0.4: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.5: version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -"mkdirp@>=0.5 0", mkdirp@^0.5.3: +mkdirp@^0.5.3, "mkdirp@>=0.5 0": version "0.5.5" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -664,7 +673,7 @@ minimist@^1.2.5: node-status@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz" - integrity sha1-eQanxHplh9A0lr907GNKuqA/joA= + integrity sha1-eQanxHplh9A0lr907GNKuqA/joA= sha512-vYKQTNACHKZRIV64kLuZ3mO2rrwoHUL7GMgEOmUFm4fSntm+guwAlFAhzlNdcMVtyppyR4MnHhaLqTNTHnFawg== dependencies: charm "1.0.1" cli-cursor "^1.0.2" @@ -679,14 +688,14 @@ normalize-path@^3.0.0: once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== pako@~1.0.2: version "1.0.11" @@ -696,7 +705,7 @@ pako@~1.0.2: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-parse@^1.0.6: version "1.0.7" @@ -713,7 +722,33 @@ process-nextick-args@~2.0.0: resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6: +readable-stream@^2.0.0: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^2.0.2: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^2.0.5: version "2.3.7" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -735,6 +770,19 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readdir-glob@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz" @@ -745,7 +793,7 @@ readdir-glob@^1.0.0: rechoir@^0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" @@ -760,18 +808,11 @@ resolve@^1.1.6, resolve@^1.3.2: restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw== dependencies: exit-hook "^1.0.0" onetime "^1.0.0" -rimraf@2: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -779,6 +820,13 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" +rimraf@2: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" @@ -798,13 +846,13 @@ saxes@^5.0.1: semver@^5.3.0: version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== shelljs@^0.8.5: version "0.8.5" @@ -818,7 +866,7 @@ shelljs@^0.8.5: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== string_decoder@^1.1.1: version "1.3.0" @@ -837,14 +885,14 @@ string_decoder@~1.1.1: strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^5.3.0: version "5.5.0" @@ -874,7 +922,7 @@ tmp@^0.2.0: "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== tslib@^1.13.0, tslib@^1.8.1: version "1.14.1" @@ -907,7 +955,7 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -typescript@^3.3.3333: +typescript@^3.3.3333, "typescript@>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev", "typescript@>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev": version "3.9.10" resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz" integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== @@ -936,7 +984,7 @@ unzipper@^0.10.11: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^8.3.0: version "8.3.2" @@ -946,7 +994,7 @@ uuid@^8.3.0: wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== xmlchars@^2.2.0: version "2.2.0" From 58684e4787d38c7884ff71d8be18291f344f4401 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 21 Jul 2025 09:49:08 -0700 Subject: [PATCH 140/156] [Excel] (Shape) Add get active shape image snippet (#993) * [Excel] (Shape) Add get active shape image snippet * Copilot reviewer feedback * Code review feedback * Update excel.xlsx, run yarn start --- playlists-prod/excel.yaml | 9 + playlists/excel.yaml | 9 + samples/excel/44-shape/shape-get-active.yaml | 175 +++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 29116 -> 29172 bytes snippet-extractor-output/snippets.yaml | 28 +++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 223 insertions(+) create mode 100644 samples/excel/44-shape/shape-get-active.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 8b3dc1932..0e7a71c76 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -990,6 +990,15 @@ group: Shape api_set: ExcelApi: '1.9' +- id: excel-shape-get-active + name: Get active shape image + fileName: shape-get-active.yaml + description: Get an image of the active shape in your workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-get-active.yaml + group: Shape + api_set: + ExcelApi: '1.19' - id: excel-table-add-rows-and-columns-to-a-table name: Add rows and columns fileName: add-rows-and-columns-to-a-table.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 3e6e594e8..78224139a 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -990,6 +990,15 @@ group: Shape api_set: ExcelApi: '1.9' +- id: excel-shape-get-active + name: Get active shape image + fileName: shape-get-active.yaml + description: Get an image of the active shape in your workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-get-active.yaml + group: Shape + api_set: + ExcelApi: '1.19' - id: excel-table-add-rows-and-columns-to-a-table name: Add rows and columns fileName: add-rows-and-columns-to-a-table.yaml diff --git a/samples/excel/44-shape/shape-get-active.yaml b/samples/excel/44-shape/shape-get-active.yaml new file mode 100644 index 000000000..c51fb0d3e --- /dev/null +++ b/samples/excel/44-shape/shape-get-active.yaml @@ -0,0 +1,175 @@ +order: 7 +id: excel-shape-get-active +name: Get active shape image +description: Get an image of the active shape in your workbook. +host: EXCEL +api_set: + ExcelApi: '1.19' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-shape-over-chart").addEventListener("click", () => tryCatch(addShapeOverChart)); + document.getElementById("group-chart-shapes").addEventListener("click", () => tryCatch(groupChartShapes)); + document.getElementById("get-active-shape").addEventListener("click", () => tryCatch(getActiveShape)); + + const sheetName = "Sample"; + + async function addShapeOverChart() { + // This method adds a shape to use as a chart title. + // It positions the shape over the chart on the worksheet. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + + // Create a rectangle shape for the chart title. + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.rectangle); + shape.name = "ChartTitle"; + shape.height = 20; + shape.width = 90; + shape.textFrame.textRange.text = "Sales Quantity"; + shape.textFrame.textRange.font.size = 13; + + // Get chart positioning information to place the shape correctly. + const chart = sheet.charts.getItemAt(0); + chart.load("left, top"); + chart.plotArea.load("width"); + await context.sync(); + + // Position the shape above the chart. + shape.left = chart.left + chart.plotArea.width / 2.5; + shape.top = chart.top + 10; + + await context.sync(); + }); + } + + async function groupChartShapes() { + // This method groups the new chart title shape together with the existing chart. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + + // Get the shapes to group. + const titleShape = sheet.shapes.getItem("ChartTitle"); + const chartShape = sheet.shapes.getItem("SalesChart"); + + // Create a group from the two shapes. + const shapeGroup = sheet.shapes.addGroup([titleShape, chartShape]); + shapeGroup.name = "GroupChart"; + + await context.sync(); + }); + } + + async function getActiveShape() { + // This method gets the active shape and displays it as an image in the task pane. + await Excel.run(async (context) => { + // Get the currently active shape, if any. + const activeShape = context.workbook.getActiveShapeOrNullObject(); + + if (activeShape) { + // Convert the active shape to an image. + const shapeImage = activeShape.getAsImage(Excel.PictureFormat.png); + await context.sync(); + + // Display the image in the task pane. + const imageContainer = document.getElementById("image"); + imageContainer.innerHTML = ''; // Clear the container before adding a new image. + const imageElement = document.createElement("img"); + imageElement.src = "data:image/png;base64," + shapeImage.value; + imageContainer.appendChild(imageElement); + } else { + console.log("No active shape"); + } + }); + } + + /** Create sample data and a line chart. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject(sheetName).delete(); + const sheet = context.workbook.worksheets.add(sheetName); + + // Add sample data to the worksheet. + const dataRange = sheet.getRange("A1:C4"); + dataRange.values = sampleData; + + // Create a line chart with markers. + const chart = sheet.charts.add(Excel.ChartType.lineMarkers, dataRange); + chart.name = "SalesChart"; + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + + /** Sample data for the chart. */ + const sampleData = [ + ["Type", "Product A", "Product B"], + ["Q1", 15, 20], + ["Q2", 22, 15], + ["Q3", 33, 47] + ]; + language: typescript +template: + content: |- +
      +

      This sample shows how to add a shape over a chart, group that new shape together with the existing chart, and then return an image of the chart (the active shape) to this task pane.

      +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      +

      Add a shape to the workbook. This button adds a shape that covers the existing chart title with a new shape that contains text.

      + +
      +
      +

      Group the new chart title together with the existing chart.

      + +
      +
      +

      Get the active shape and display it as an image in this task pane. Make sure the chart is selected.

      + +
      +
      +

      Image of the active shape:

      +
      +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 0680b101fa125759b7760e893eeb148c321ee041..e9eadafdcf4b2966270f94f341fb736dde32b4b1 100644 GIT binary patch delta 8953 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 delta 8828 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 T?=B1|1CP2hAPzeH590p->SOZ@ diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c28a2bbd6..c03992d7d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -7596,6 +7596,34 @@ console.log("The active cell is " + activeCell.address); }); +'Excel.Workbook#getActiveShapeOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-get-active.yaml + + + // This method gets the active shape and displays it as an image in the task + pane. + + await Excel.run(async (context) => { + // Get the currently active shape, if any. + const activeShape = context.workbook.getActiveShapeOrNullObject(); + + if (activeShape) { + // Convert the active shape to an image. + const shapeImage = activeShape.getAsImage(Excel.PictureFormat.png); + await context.sync(); + + // Display the image in the task pane. + const imageContainer = document.getElementById("image"); + imageContainer.innerHTML = ''; // Clear the container before adding a new image. + const imageElement = document.createElement("img"); + imageElement.src = "data:image/png;base64," + shapeImage.value; + imageContainer.appendChild(imageElement); + } else { + console.log("No active shape"); + } + }); 'Excel.Workbook#getSelectedRanges:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 0a775b890..a1685f5b4 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -102,6 +102,7 @@ "excel-shape-move-and-order": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml", "excel-shape-groups": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml", "excel-shape-textboxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml", + "excel-shape-get-active": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-get-active.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml", "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/convert-range-to-table.yaml", "excel-table-create-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/create-table.yaml", diff --git a/view/excel.json b/view/excel.json index 156b0e45e..6ff03657f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -102,6 +102,7 @@ "excel-shape-move-and-order": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-move-and-order.yaml", "excel-shape-groups": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-groups.yaml", "excel-shape-textboxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-textboxes.yaml", + "excel-shape-get-active": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-get-active.yaml", "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml", "excel-table-convert-range-to-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/convert-range-to-table.yaml", "excel-table-create-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/create-table.yaml", From 8e1866566578267160c3c2b6a00d661ddc8fc2f3 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 21 Jul 2025 09:50:06 -0700 Subject: [PATCH 141/156] [Excel] (Data types) Add basic types with metadata snippet (#994) * [Excel] (Data types) Add basic types with metadata snippet * Fix a couple bugs * Code review feedback * Run yarn start --- playlists-prod/excel.yaml | 9 + playlists/excel.yaml | 9 + .../20-data-types/data-types-basic-types.yaml | 362 ++++++++++++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 5 files changed, 382 insertions(+) create mode 100644 samples/excel/20-data-types/data-types-basic-types.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 0e7a71c76..dcbbf01ac 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -403,6 +403,15 @@ group: Data Types api_set: ExcelApi: '1.16' +- id: excel-data-types-basic-types + name: Basic types with metadata + fileName: data-types-basic-types.yaml + description: This sample shows how to work with metadata on basic types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-basic-types.yaml + group: Data Types + api_set: + ExcelApi: '1.19' - id: excel-data-validation name: Data validation fileName: data-validation.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 78224139a..5892ba9e9 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -403,6 +403,15 @@ group: Data Types api_set: ExcelApi: '1.16' +- id: excel-data-types-basic-types + name: Basic types with metadata + fileName: data-types-basic-types.yaml + description: This sample shows how to work with metadata on basic types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-basic-types.yaml + group: Data Types + api_set: + ExcelApi: '1.19' - id: excel-data-validation name: Data validation fileName: data-validation.yaml diff --git a/samples/excel/20-data-types/data-types-basic-types.yaml b/samples/excel/20-data-types/data-types-basic-types.yaml new file mode 100644 index 000000000..8c74f2173 --- /dev/null +++ b/samples/excel/20-data-types/data-types-basic-types.yaml @@ -0,0 +1,362 @@ +order: 8 +id: excel-data-types-basic-types +name: Basic types with metadata +description: This sample shows how to work with metadata on basic types. +host: EXCEL +api_set: + ExcelApi: '1.19' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("set-basic-types-with-metadata").addEventListener("click", () => tryCatch(setBasicTypesWithMetadata)); + document.getElementById("set-referenced-values").addEventListener("click", () => tryCatch(setReferencedValues)); + document.getElementById("set-circular-reference-values").addEventListener("click", () => tryCatch(setCircularReferenceValues)); + document.getElementById("print-to-console").addEventListener("click", () => tryCatch(printToConsole)); + + const sheetName = "Sample"; + + /** Add basic types with metadata to the worksheet. */ + async function setBasicTypesWithMetadata() { + await Excel.run(async (context) => { + // Get the worksheet and target range. + const sheet = context.workbook.worksheets.getItem(sheetName); + const dataRange = sheet.getRange("A1:A4"); + + // Write a variety of basic types with metadata to the range. + dataRange.valuesAsJson = [ + [doubleWithFormatAndMetadata], + [doubleWithMetadata], + [stringWithMetadata], + [booleanWithMetadata] + ]; + + dataRange.format.autofitColumns(); + await context.sync(); + }); + } + + /** Set basic types with metadata that reference other basic types in the worksheet. */ + async function setReferencedValues() { + await Excel.run(async (context) => { + // Get the worksheet and target range. + const sheet = context.workbook.worksheets.getItem(sheetName); + const targetRange = sheet.getRange("A5"); + + // Write a string with metadata that references other values. + targetRange.valuesAsJson = [ + [stringWithReferencedValues] + ]; + targetRange.format.autofitColumns(); + + await context.sync(); + }); + } + + /** Set basic types with metadata that contain circular references. */ + async function setCircularReferenceValues() { + await Excel.run(async (context) => { + // Get the worksheet and target range. + const sheet = context.workbook.worksheets.getItem(sheetName); + const targetRange = sheet.getRange("A6"); + + // Write a string with metadata that contains circular references. + targetRange.valuesAsJson = [ + [stringWithCircularReferences] + ]; + targetRange.format.autofitColumns(); + + await context.sync(); + }); + } + + /** Get and log information about the basic types in the worksheet. */ + async function printToConsole() { + await Excel.run(async (context) => { + // Get the worksheet and target range. + const sheet = context.workbook.worksheets.getItem(sheetName); + const dataRange = sheet.getRange("A1:A6"); + + // Load the data type property of the range. + dataRange.load("valuesAsJson"); + await context.sync(); + + const dataValues = dataRange.valuesAsJson; + + // Print information about the data types to the console. + console.log("Basic types as an array:", dataValues); + }); + } + + /** Set up Sample worksheet. */ + async function setup() { + await Excel.run(async (context) => { + // Create a new worksheet and activate it. + context.workbook.worksheets.getItemOrNullObject(sheetName).delete(); + const sheet = context.workbook.worksheets.add(sheetName); + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + + /** Basic string value with metadata. */ + const basicStringValue: Excel.StringCellValue = { + type: Excel.CellValueType.string, + basicType: Excel.CellValueType.string, + basicValue: "This is a basic string value" + }; + + /** Basic double value with metadata. */ + const basicDoubleValue: Excel.DoubleCellValue = { + type: Excel.CellValueType.double, + basicType: Excel.CellValueType.double, + basicValue: 10 + }; + + /** Basic boolean value with metadata. */ + const basicBooleanValue: Excel.BooleanCellValue = { + type: Excel.CellValueType.boolean, + basicType: Excel.CellValueType.boolean, + basicValue: true + }; + + /** Web image cell value. */ + const imageCellValue: Excel.WebImageCellValue = { + type: "WebImage", + basicType: "Error", + basicValue: "#VALUE!", + address: "https://github.com/OfficeDev/office-js-snippets/blob/main/.github/images/microsoft-logo.png?raw=true", + }; + + /** Basic view layout with icon for card and compact views. */ + const basicViewLayoutWithIcon: Excel.BasicViewLayouts = { + card: { + title: "This is the title", + sections: [ + { + layout: "List", + properties: ["stringProperty", "booleanProperty", "doubleProperty"], + collapsed: false, + collapsible: true + } + ], + subTitle: { + property: "stringProperty" + }, + mainImage: { + property: "imageProperty" + } + }, + compact: { + icon: Excel.EntityCompactLayoutIcons.animalDog + } + }; + + /** Simple view layout without icon. */ + const basicViewLayoutSimple: Excel.BasicViewLayouts = { + card: { + title: "This is the title", + subTitle: { + property: "stringProperty" + } + } + }; + + /** Cell value provider attributes for data source attribution. */ + const cellValueProvider: Excel.CellValueProviderAttributes = { + description: "Microsoft Bing", + logoSourceAddress: "https://github.com/OfficeDev/office-js-snippets/blob/main/.github/images/microsoft-logo.png?raw=true", + logoTargetAddress: "http://microsoft.com" + }; + + /** Double value with formatting and metadata. */ + const doubleWithFormatAndMetadata: Excel.DoubleCellValue = { + type: Excel.CellValueType.double, + basicType: Excel.CellValueType.double, + basicValue: 300, + numberFormat: "$0.00", + properties: { + stringProperty: basicStringValue, + booleanProperty: basicBooleanValue, + doubleProperty: basicDoubleValue, + imageProperty: imageCellValue + }, + layouts: basicViewLayoutWithIcon, + provider: cellValueProvider + }; + + /** Double value with metadata but no special formatting. */ + const doubleWithMetadata: Excel.DoubleCellValue = { + type: Excel.CellValueType.double, + basicType: Excel.CellValueType.double, + basicValue: 123.45, + properties: { + stringProperty: basicStringValue, + booleanProperty: basicBooleanValue, + doubleProperty: basicDoubleValue, + imageProperty: imageCellValue + }, + layouts: basicViewLayoutSimple, + provider: cellValueProvider + }; + + /** String value with metadata. */ + const stringWithMetadata: Excel.StringCellValue = { + type: Excel.CellValueType.string, + basicType: Excel.CellValueType.string, + basicValue: "String with metadata", + properties: { + stringProperty: basicStringValue, + booleanProperty: basicBooleanValue, + doubleProperty: basicDoubleValue, + imageProperty: imageCellValue + }, + layouts: basicViewLayoutWithIcon, + provider: cellValueProvider + }; + + /** Boolean value with metadata. */ + const booleanWithMetadata: Excel.BooleanCellValue = { + type: Excel.CellValueType.boolean, + basicType: Excel.CellValueType.boolean, + basicValue: true, + properties: { + stringProperty: basicStringValue, + booleanProperty: basicBooleanValue, + doubleProperty: basicDoubleValue, + imageProperty: imageCellValue + }, + layouts: basicViewLayoutSimple, + provider: cellValueProvider + }; + + /** String with metadata that references other values. */ + const stringWithReferencedValues = { + type: Excel.CellValueType.string, + basicType: Excel.CellValueType.string, + basicValue: "String with referenced values", + properties: { + stringProperty: { + type: Excel.CellValueType.reference, + reference: 0 + }, + booleanProperty: { + type: Excel.CellValueType.reference, + reference: 1 + }, + doubleWithFormatProperty: { + type: Excel.CellValueType.reference, + reference: 2 + }, + doubleProperty: { + type: Excel.CellValueType.reference, + reference: 3 + } + }, + referencedValues: [stringWithMetadata, booleanWithMetadata, doubleWithFormatAndMetadata, doubleWithMetadata], + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.apple + } + } + }; + + /** String with metadata that contains circular references. */ + const stringWithCircularReferences = { + type: Excel.CellValueType.string, + basicType: Excel.CellValueType.string, + basicValue: "String with circular references", + properties: { + doubleProperty: { + type: Excel.CellValueType.double, + basicType: Excel.CellValueType.double, + basicValue: 10, + properties: { + stringProperty: basicStringValue, + doubleProperty: basicDoubleValue, + booleanProperty: basicBooleanValue, + rootProperty: { + type: Excel.CellValueType.reference, + reference: 0 + } + }, + referencedValues: [ + { + type: Excel.ReferenceValueType.root + } + ] + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.animalTurtle + } + } + }; + language: typescript +template: + content: |- +
      +

      This sample shows how to create basic types with metadata and then work with those basic types.

      +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      +

      Add basic types to the worksheet. Select the icon in each cell to see a data type card with metadata.

      + +
      +
      +

      Add a basic type with referenced values. Open the data type card to see other values in the worksheet that this basic type references—it references cells A1, A2, A3, and A4.

      + +
      +
      +

      Add a basic type with circular references. Open the data type card and select the doubleProperty to see the circular references.

      + +
      +
      +

      Print information about each of your basic types to the console.

      + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/view-prod/excel.json b/view-prod/excel.json index a1685f5b4..ae1ad8407 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -42,6 +42,7 @@ "excel-data-types-icons": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-icons.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml", "excel-data-types-references": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-references.yaml", + "excel-data-types-basic-types": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-basic-types.yaml", "excel-data-validation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/get-file-in-slices-async.yaml", "excel-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml", diff --git a/view/excel.json b/view/excel.json index 6ff03657f..993906cb7 100644 --- a/view/excel.json +++ b/view/excel.json @@ -42,6 +42,7 @@ "excel-data-types-icons": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-entity-icons.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-entity-attribution.yaml", "excel-data-types-references": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-references.yaml", + "excel-data-types-basic-types": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-basic-types.yaml", "excel-data-validation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/22-data-validation/data-validation.yaml", "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/26-document/get-file-in-slices-async.yaml", "excel-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/26-document/properties.yaml", From 5e7fc442e3eeca92a3ed4a2a76897644986d5aa1 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 12 Aug 2025 16:14:19 -0700 Subject: [PATCH 142/156] [Excel] (Chart) Add leader lines snippet (#992) * [Excel] (Chart) Add leader lines snippet * Fix minor bug * Adjust comments * Run yarn start * Update excel.xlsx and run yarn start * Incorporate copilot feedback * Code review feedback * run yarn start --- playlists-prod/excel.yaml | 9 + playlists/excel.yaml | 9 + .../excel/10-chart/chart-leader-lines.yaml | 185 ++ snippet-extractor-metadata/excel.xlsx | Bin 29172 -> 29305 bytes snippet-extractor-output/snippets.yaml | 2533 +++++++++-------- view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 1558 insertions(+), 1180 deletions(-) create mode 100644 samples/excel/10-chart/chart-leader-lines.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index dcbbf01ac..a1229c67b 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -177,6 +177,15 @@ group: Chart api_set: ExcelApi: '1.19' +- id: excel-chart-leader-lines + name: Leader lines + fileName: chart-leader-lines.yaml + description: Show and hide leader lines for chart labels. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + group: Chart + api_set: + ExcelApi: '1.19' - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 5892ba9e9..7e9d49ed6 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -177,6 +177,15 @@ group: Chart api_set: ExcelApi: '1.19' +- id: excel-chart-leader-lines + name: Leader lines + fileName: chart-leader-lines.yaml + description: Show and hide leader lines for chart labels. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-leader-lines.yaml + group: Chart + api_set: + ExcelApi: '1.19' - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml diff --git a/samples/excel/10-chart/chart-leader-lines.yaml b/samples/excel/10-chart/chart-leader-lines.yaml new file mode 100644 index 000000000..ad2ac18ea --- /dev/null +++ b/samples/excel/10-chart/chart-leader-lines.yaml @@ -0,0 +1,185 @@ +order: 17 +id: excel-chart-leader-lines +name: Leader lines +description: Show and hide leader lines for chart labels. +host: EXCEL +api_set: + ExcelApi: '1.19' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-data-labels").addEventListener("click", () => tryCatch(addDataLabels)); + document.getElementById("hide-chart-leader-lines").addEventListener("click", () => tryCatch(hideChartLeaderLines)); + document.getElementById("show-chart-leader-lines").addEventListener("click", () => tryCatch(showChartLeaderLines)); + document.getElementById("change-leader-line-format").addEventListener("click", () => tryCatch(changeLeaderLineFormat)); + + const sheetName = "Sample"; + + async function addDataLabels() { + // The following code adds data labels to the chart and positions them to demonstrate leader lines. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); + + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + + await context.sync(); + }); + } + + async function hideChartLeaderLines() { + // The following code disables leader lines for chart data labels. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + + // Disable leader lines. + dataLabels.showLeaderLines = false; + + await context.sync(); + }); + } + + async function showChartLeaderLines() { + // The following code enables leader lines for chart data labels. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + + // Enable leader lines. + dataLabels.showLeaderLines = true; + + await context.sync(); + }); + } + + async function changeLeaderLineFormat() { + // The following code changes the format of leader lines. It adjusts color, weight, and line style. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + const lineFormat = dataLabels.leaderLines.format; + + // Set leader line formatting properties. + lineFormat.line.color = "blue"; + lineFormat.line.weight = 2; + lineFormat.line.lineStyle = Excel.ChartLineStyle.dot; + + await context.sync(); + }); + } + + /** Create sample data and a line chart for the leader lines demo. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject(sheetName).delete(); + const sheet = context.workbook.worksheets.add(sheetName); + + // Add sample data to the worksheet. + const dataRange = sheet.getRange("A1:C4"); + dataRange.values = sampleData; + + // Create a line chart. + const chart = sheet.charts.add(Excel.ChartType.line, dataRange); + chart.title.text = "Sales Quantity"; + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + + /** Sample data for the chart. */ + const sampleData = [ + ["Type", "Product A", "Product B"], + ["Q1", 15, 20], + ["Q2", 22, 15], + ["Q3", 33, 47] + ]; + language: typescript +template: + content: |- +
      +

      This sample shows how to add leader lines for data labels on your charts.

      +
      +
      +

      Set up

      + +
      +
      +

      Try it out

      + +
      +
      + +
      +
      + +
      +
      + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index e9eadafdcf4b2966270f94f341fb736dde32b4b1..ab89b7460a3921f4fdf8d7f326b0467ec25cc7ac 100644 GIT binary patch delta 19502 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 M4S_MlA^$1)8~6pPhX4Qo delta 19384 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c03992d7d..d7d069fb7 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -16,15 +16,6 @@ await context.sync(); }); } -'Excel.Application#calculate:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml - - - await Excel.run(async (context) => { - context.application.calculate(Excel.CalculationType.full); - }); 'Excel.Application#decimalSeparator:member': - >- // Link to full sample: @@ -54,6 +45,15 @@ await context.sync(); }); +'Excel.Application#calculate:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml + + + await Excel.run(async (context) => { + context.application.calculate(Excel.CalculationType.full); + }); 'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': - >- // Link to full sample: @@ -1258,6 +1258,52 @@ await context.sync(); }); +'Excel.ChartLeaderLines:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + + // The following code changes the format of leader lines. It adjusts color, + weight, and line style. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + const lineFormat = dataLabels.leaderLines.format; + + // Set leader line formatting properties. + lineFormat.line.color = "blue"; + lineFormat.line.weight = 2; + lineFormat.line.lineStyle = Excel.ChartLineStyle.dot; + + await context.sync(); + }); +'Excel.ChartLeaderLinesFormat:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + + // The following code changes the format of leader lines. It adjusts color, + weight, and line style. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + const lineFormat = dataLabels.leaderLines.format; + + // Set leader line formatting properties. + lineFormat.line.color = "blue"; + lineFormat.line.weight = 2; + lineFormat.line.lineStyle = Excel.ChartLineStyle.dot; + + await context.sync(); + }); 'Excel.ChartLegendFormat#font:member': - >- // Link to full sample: @@ -1365,23 +1411,78 @@ } await context.sync(); }); -'Excel.ChartSeries#delete:member(1)': +'Excel.ChartSeries#getDimensionValues:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const seriesCollection = sheet.charts.getItemAt(0).series; - seriesCollection.load("count"); + + // The sample chart is of type `Excel.ChartType.bubble`. + const bubbleChart = sheet.charts.getItem("Product Chart"); + + // Get the first series in the chart. + const firstSeries = bubbleChart.series.getItemAt(0); + + // Get the values for the dimensions we're interested in. + const bubbleSize = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.bubbleSizes); + const xValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.xvalues); + const yValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.yvalues); + const category = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.categories); + await context.sync(); - if (seriesCollection.count > 0) { - const series = seriesCollection.getItemAt(0); + // Log the information. + console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); + }); +'Excel.ChartSeries#setBubbleSizes:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml - // Delete the first series. - series.delete(); + + await Excel.run(async (context) => { + /* + The table is expected to look like this: + Product, Inventory, Price, Current Market Share + Calamansi, 2000, $2.45, 10% + ... + + We want each bubble to represent a single row. + */ + + // Get the worksheet and table data. + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("Sales"); + const dataRange = table.getDataBodyRange(); + + // Get the table data without the row names. + const valueRange = dataRange.getOffsetRange(0, 1).getResizedRange(0, -1); + + // Create the chart. + const bubbleChart = sheet.charts.add(Excel.ChartType.bubble, valueRange); + bubbleChart.name = "Product Chart"; + + // Remove the default series, since we want a unique series for each row. + bubbleChart.series.getItemAt(0).delete(); + + // Load the data necessary to make a chart series. + dataRange.load(["rowCount", "values"]); + await context.sync(); + + // For each row, create a chart series (a bubble). + for (let i = 0; i < dataRange.rowCount; i++) { + const newSeries = bubbleChart.series.add(dataRange.values[i][0], i); + newSeries.setXAxisValues(dataRange.getCell(i, 1)); + newSeries.setValues(dataRange.getCell(i, 2)); + newSeries.setBubbleSizes(dataRange.getCell(i, 3)); + + // Show the product name and market share percentage. + newSeries.dataLabels.showSeriesName = true; + newSeries.dataLabels.showBubbleSize = true; + newSeries.dataLabels.showValue = false; } await context.sync(); @@ -1440,31 +1541,173 @@ console.log(series.name + " data source string: " + dataSourceString.value); console.log(series.name + " data source type: " + dataSourceType.value); }); -'Excel.ChartSeries#getDimensionValues:member(1)': +'Excel.ChartSeries:class': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + // The following code adds data labels to the chart and positions them to + demonstrate leader lines. await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); - // The sample chart is of type `Excel.ChartType.bubble`. - const bubbleChart = sheet.charts.getItem("Product Chart"); + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + + await context.sync(); + }); +'Excel.ChartSeries#hasDataLabels:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml - // Get the first series in the chart. - const firstSeries = bubbleChart.series.getItemAt(0); - // Get the values for the dimensions we're interested in. - const bubbleSize = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.bubbleSizes); - const xValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.xvalues); - const yValues = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.yvalues); - const category = firstSeries.getDimensionValues(Excel.ChartSeriesDimension.categories); + // The following code adds data labels to the chart and positions them to + demonstrate leader lines. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + await context.sync(); + }); +'Excel.ChartSeries#points:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml - // Log the information. - console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); + + // The following code adds data labels to the chart and positions them to + demonstrate leader lines. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + + // Enable data labels for the series. Leader lines are enabled by default. + series.hasDataLabels = true; + series.points.load("items"); + await context.sync(); + + // Load the top position for each data label. + series.points.items.forEach((point) => point.dataLabel.load("top")); + await context.sync(); + + // Move some data labels to create distance from their chart points. + const point1 = series.points.items[1]; + const point2 = series.points.items[2]; + point1.dataLabel.top -= 50; + point2.dataLabel.top += 50; + + // Format the data labels. + series.dataLabels.geometricShapeType = Excel.GeometricShapeType.rectangle; + series.dataLabels.showCategoryName = true; + series.dataLabels.format.border.weight = 1; + + await context.sync(); + }); +'Excel.ChartSeries#showLeaderLines:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml + + + // The following code disables leader lines for chart data labels. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem(sheetName); + const chart = sheet.charts.getItemAt(0); + const series = chart.series.getItemAt(0); + const dataLabels = series.dataLabels; + + // Disable leader lines. + dataLabels.showLeaderLines = false; + + await context.sync(); + }); +'Excel.ChartSeries#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const seriesCollection = sheet.charts.getItemAt(0).series; + seriesCollection.load("count"); + await context.sync(); + + if (seriesCollection.count > 0) { + const series = seriesCollection.getItemAt(0); + + // Delete the first series. + series.delete(); + } + + await context.sync(); + }); +'Excel.ChartSeries#setValues:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + let seriesCollection = sheet.charts.getItemAt(0); + let rangeSelection = sheet.getRange("C2:C7"); + let xRangeSelection = sheet.getRange("A1:A7"); + + // Add a series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); + + await context.sync(); }); 'Excel.ChartSeries#markerBackgroundColor:member': - >- @@ -1598,90 +1841,20 @@ await context.sync(); }); -'Excel.ChartSeries#setBubbleSizes:member(1)': +'Excel.ChartSeriesBy:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml await Excel.run(async (context) => { - /* - The table is expected to look like this: - Product, Inventory, Price, Current Market Share - Calamansi, 2000, $2.45, 10% - ... - - We want each bubble to represent a single row. - */ - - // Get the worksheet and table data. - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("Sales"); - const dataRange = table.getDataBodyRange(); - - // Get the table data without the row names. - const valueRange = dataRange.getOffsetRange(0, 1).getResizedRange(0, -1); - - // Create the chart. - const bubbleChart = sheet.charts.add(Excel.ChartType.bubble, valueRange); - bubbleChart.name = "Product Chart"; - - // Remove the default series, since we want a unique series for each row. - bubbleChart.series.getItemAt(0).delete(); - - // Load the data necessary to make a chart series. - dataRange.load(["rowCount", "values"]); - await context.sync(); - - // For each row, create a chart series (a bubble). - for (let i = 0; i < dataRange.rowCount; i++) { - const newSeries = bubbleChart.series.add(dataRange.values[i][0], i); - newSeries.setXAxisValues(dataRange.getCell(i, 1)); - newSeries.setValues(dataRange.getCell(i, 2)); - newSeries.setBubbleSizes(dataRange.getCell(i, 3)); - - // Show the product name and market share percentage. - newSeries.dataLabels.showSeriesName = true; - newSeries.dataLabels.showBubbleSize = true; - newSeries.dataLabels.showValue = false; - } - - await context.sync(); - }); -'Excel.ChartSeries#setValues:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - let seriesCollection = sheet.charts.getItemAt(0); - let rangeSelection = sheet.getRange("C2:C7"); - let xRangeSelection = sheet.getRange("A1:A7"); - - // Add a series. - let newSeries = seriesCollection.series.add("Qtr2"); - newSeries.setValues(rangeSelection); - newSeries.setXAxisValues(xRangeSelection); - - await context.sync(); - }); -'Excel.ChartSeriesBy:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml - - - await Excel.run(async (context) => { - // Create a new worksheet called "Sample" and activate it. - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); - - // Create an a table named SalesTable on the Sample worksheet. - let expensesTable = sheet.tables.add("A1:E1", true); - expensesTable.name = "SalesTable"; + // Create a new worksheet called "Sample" and activate it. + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + // Create an a table named SalesTable on the Sample worksheet. + let expensesTable = sheet.tables.add("A1:E1", true); + expensesTable.name = "SalesTable"; expensesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; expensesTable.rows.add(null, [ @@ -3103,39 +3276,6 @@ const settings = context.workbook.settings; settings.add("ContosoReviewXmlPartId", customXmlPart.id); - await context.sync(); - }); -'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml - - - await Excel.run(async (context) => { - document.getElementById("display-xml").textContent = ""; - const contosoNamespace = "http://schemas.contoso.com/review/1.0"; - const customXmlParts = context.workbook.customXmlParts; - const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); - const numberOfPartsInNamespace = filteredXmlParts.getCount(); - - await context.sync(); - - if (numberOfPartsInNamespace.value == 1) { - const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); - const xmlBlob = onlyXmlPartInNamespace.getXml(); - - await context.sync(); - - // Make it a bit more readable. - const readableXml = xmlBlob.value.replace(/>\n<"); - - document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: - ${readableXml}`; - - } else { - console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); - } - await context.sync(); }); 'Excel.CustomXmlPartCollection#getItem:member(1)': @@ -3163,7 +3303,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartScopedCollection#getCount:member(1)': +'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3229,7 +3369,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': +'Excel.CustomXmlPartScopedCollection#getCount:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3262,34 +3402,52 @@ await context.sync(); }); -'Excel.DataBarConditionalFormat#barDirection:member': +'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B8:E13"); - const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.dataBar); - conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; + document.getElementById("display-xml").textContent = ""; + const contosoNamespace = "http://schemas.contoso.com/review/1.0"; + const customXmlParts = context.workbook.customXmlParts; + const filteredXmlParts = customXmlParts.getByNamespace(contosoNamespace); + const numberOfPartsInNamespace = filteredXmlParts.getCount(); + + await context.sync(); + + if (numberOfPartsInNamespace.value == 1) { + const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); + const xmlBlob = onlyXmlPartInNamespace.getXml(); + + await context.sync(); + + // Make it a bit more readable. + const readableXml = xmlBlob.value.replace(/>\n<"); + + document.getElementById("display-xml").textContent = `The only XML part in the namespace ${contosoNamespace} is: + ${readableXml}`; + + } else { + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); + } await context.sync(); }); -'Excel.DataPivotHierarchy#name:member': +'Excel.DataBarConditionalFormat#barDirection:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml await Excel.run(async (context) => { - const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies - dataHierarchies.load("no-properties-needed"); - await context.sync(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B8:E13"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.dataBar); + conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; - dataHierarchies.items[0].name = "Farm Sales"; - dataHierarchies.items[1].name = "Wholesale"; await context.sync(); }); 'Excel.DataPivotHierarchy#showAs:member': @@ -3319,6 +3477,21 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); +'Excel.DataPivotHierarchy#name:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + + + await Excel.run(async (context) => { + const dataHierarchies = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales").dataHierarchies + dataHierarchies.load("no-properties-needed"); + await context.sync(); + + dataHierarchies.items[0].name = "Farm Sales"; + dataHierarchies.items[1].name = "Wholesale"; + await context.sync(); + }); 'Excel.DataValidation#errorAlert:member': - >- // Link to full sample: @@ -4819,6 +4992,28 @@ await context.sync(); }); +'Excel.PivotLayout#getDataBodyRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + + + await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // The layout controls the ranges used by the PivotTable. + const range = pivotTable.layout.getDataBodyRange(); + + // Get all the data hierarchy totals. + const grandTotalRange = range.getLastRow(); + grandTotalRange.load("address"); + await context.sync(); + + // Use the wholesale and farm sale totals to make a final sum. + const masterTotalRange = context.workbook.worksheets.getActiveWorksheet().getRange("B27:C27"); + masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; + await context.sync(); + }); 'Excel.PivotLayout#altTextDescription:member': - >- // Link to full sample: @@ -4889,28 +5084,6 @@ pivotLayout.fillEmptyCells = fillToSet; await context.sync(); }); -'Excel.PivotLayout#getDataBodyRange:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml - - - await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - - // The layout controls the ranges used by the PivotTable. - const range = pivotTable.layout.getDataBodyRange(); - - // Get all the data hierarchy totals. - const grandTotalRange = range.getLastRow(); - grandTotalRange.load("address"); - await context.sync(); - - // Use the wholesale and farm sale totals to make a final sum. - const masterTotalRange = context.workbook.worksheets.getActiveWorksheet().getRange("B27:C27"); - masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; - await context.sync(); - }); 'Excel.PivotLayout#layoutType:member': - >- // Link to full sample: @@ -5084,27 +5257,28 @@ await context.sync(); }); -'Excel.PivotTable#filterHierarchies:member': +'Excel.PivotTable#layout:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml - async function filter(functionType: Excel.AggregationFunction) { - await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - const filters = pivotTable.filterHierarchies; - const filter = filters.getItemOrNullObject("Classification"); - filter.load(); - await context.sync(); + await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.layout.load("layoutType"); + await context.sync(); - // Add the Classification hierarchy to the filter, if it's not already there. - if (filter.isNullObject) { - filters.add(pivotTable.hierarchies.getItem("Classification")); - await context.sync(); - } - }); - } + // Cycle between the three layout types. + if (pivotTable.layout.layoutType === "Compact") { + pivotTable.layout.layoutType = "Outline"; + } else if (pivotTable.layout.layoutType === "Outline") { + pivotTable.layout.layoutType = "Tabular"; + } else { + pivotTable.layout.layoutType = "Compact"; + } + await context.sync(); + console.log("Pivot layout is now " + pivotTable.layout.layoutType); + }); 'Excel.PivotTable#getDataSourceString:member(1)': - >- // Link to full sample: @@ -5147,28 +5321,27 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); -'Excel.PivotTable#layout:member': +'Excel.PivotTable#filterHierarchies:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml - await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - pivotTable.layout.load("layoutType"); - await context.sync(); + async function filter(functionType: Excel.AggregationFunction) { + await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + const filters = pivotTable.filterHierarchies; + const filter = filters.getItemOrNullObject("Classification"); + filter.load(); + await context.sync(); - // Cycle between the three layout types. - if (pivotTable.layout.layoutType === "Compact") { - pivotTable.layout.layoutType = "Outline"; - } else if (pivotTable.layout.layoutType === "Outline") { - pivotTable.layout.layoutType = "Tabular"; - } else { - pivotTable.layout.layoutType = "Compact"; - } - await context.sync(); - console.log("Pivot layout is now " + pivotTable.layout.layoutType); - }); + // Add the Classification hierarchy to the filter, if it's not already there. + if (filter.isNullObject) { + filters.add(pivotTable.hierarchies.getItem("Classification")); + await context.sync(); + } + }); + } 'Excel.PivotTable#refresh:member(1)': - >- // Link to full sample: @@ -5228,21 +5401,6 @@ await context.sync(); }); -'Excel.Range#autoFill:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const sumCell = sheet.getRange("P4"); - - // Copy everything. The formulas will be contextually updated based on their new locations. - sumCell.autoFill("P4:P7", Excel.AutoFillType.fillCopy); - sumCell.format.autofitColumns(); - await context.sync(); - }); 'Excel.Range#clearOrResetContents:member(1)': - >- // Link to full sample: @@ -5261,22 +5419,6 @@ range.clearOrResetContents(); await context.sync(); }); -'Excel.Range#copyFrom:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - // Place a label in front of the copied data. - sheet.getRange("F2").values = [["Copied Formula"]]; - - // Copy a range preserving the formulas. - // Note: non-formula values are copied over as is. - sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); - await context.sync(); - }); 'Excel.Range#control:member': - >- // Link to full sample: @@ -5297,113 +5439,46 @@ }; await context.sync(); }); -'Excel.Range#find:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); - - // NOTE: If no match is found, an ItemNotFound error - // is thrown when Range.find is evaluated. - const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; - const foundRange = searchRange.find(searchText, { - completeMatch: isCompleteMatchToggle, - matchCase: isMatchCaseToggle, - searchDirection: searchDirectionToggle - }); - - foundRange.load("address"); - await context.sync(); - - - console.log(foundRange.address); - }); -'Excel.Range#findOrNullObject:member(1)': +'Excel.Range#values:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); - const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; - const foundRange = searchRange.findOrNullObject(searchText, { - completeMatch: isCompleteMatchToggle, - matchCase: isMatchCaseToggle, - searchDirection: searchDirectionToggle - }); - - foundRange.load("address"); - await context.sync(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml - if (foundRange.isNullObject) { - console.log("Text not found"); - } else { - console.log(foundRange.address); - } - }); -'Excel.Range#getCellProperties:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + // Change the value of the checkbox in B3. await Excel.run(async (context) => { - const cell = context.workbook.getActiveCell(); - - // Define the cell properties to get by setting the matching LoadOptions to true. - const propertiesToGet = cell.getCellProperties({ - address: true, - format: { - fill: { - color: true - }, - font: { - color: true - } - }, - style: true - }); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B3"); - // Sync to get the data from the workbook. - await context.sync(); - const cellProperties = propertiesToGet.value[0][0]; - console.log( - `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); + range.values = [["TRUE"]]; + await context.sync(); }); -'Excel.Range#getDependents:member(1)': +'Excel.Range#valuesAsJson:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml - // This function highlights all the dependent cells of the active cell. + // This function creates a double data type, - // Dependent cells contain formulas that refer to other cells. + // and sets the format of this data type as a date. await Excel.run(async (context) => { - // Get addresses of the active cell's dependent cells. - const range = context.workbook.getActiveCell(); - const dependents = range.getDependents(); - range.load("address"); - dependents.areas.load("address"); - await context.sync(); - - console.log(`All dependent cells of ${range.address}:`); + // Get the Sample worksheet and a range on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const dateRange = sheet.getRange("A1"); - // Use the dependents API to loop through dependents of the active cell. - for (let i = 0; i < dependents.areas.items.length; i++) { - // Highlight and print out the address of each dependent cell. - dependents.areas.items[i].format.fill.color = "Orange"; - console.log(` ${dependents.areas.items[i].address}`); - } + // Write a number formatted as a date to cell A1. + dateRange.valuesAsJson = [ + [ + { + type: Excel.CellValueType.double, + basicValue: 32889.0, + numberFormat: "m/d/yyyy" + } + ] + ]; await context.sync(); }); 'Excel.Range#getDirectDependents:member(1)': @@ -5430,143 +5505,118 @@ } await context.sync(); }); -'Excel.Range#getDirectPrecedents:member(1)': +'Excel.Range#sort:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml - await Excel.run(async (context) => { - // Precedents are cells referenced by the formula in a cell. - // A "direct precedent" is a cell directly referenced by the selected formula. - let range = context.workbook.getActiveCell(); - let directPrecedents = range.getDirectPrecedents(); - range.load("address"); - directPrecedents.areas.load("address"); - await context.sync(); + async function sortTopToBottom(criteria: string) { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("A1:E5"); - console.log(`Direct precedent cells of ${range.address}:`); + // Find the column header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("columnIndex"); + await context.sync(); - // Use the direct precedents API to loop through precedents of the active cell. - for (let i = 0; i < directPrecedents.areas.items.length; i++) { - // Highlight and console the address of each precedent cell. - directPrecedents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directPrecedents.areas.items[i].address}`); - } - await context.sync(); - }); -'Excel.Range#getExtendedRange:member(1)': + range.sort.apply( + [ + { + key: header.columnIndex, + sortOn: Excel.SortOn.value + } + ], + false /*matchCase*/, + true /*hasHeaders*/, + Excel.SortOrientation.rows + ); + await context.sync(); + }); + } +'Excel.Range#getMergedAreasOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml await Excel.run(async (context) => { - // Get the selected range. - const range = context.workbook.getSelectedRange(); + // Retrieve the worksheet and the table in that worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const tableRange = sheet.getRange("B2:E6"); - // Specify the direction with the `KeyboardDirection` enum. - const direction = Excel.KeyboardDirection.down; + // Retrieve the merged range within the table and load its details. + const mergedAreas = tableRange.getMergedAreasOrNullObject(); + mergedAreas.load("address"); + mergedAreas.load("cellCount"); - // Get the active cell in the workbook. - const activeCell = context.workbook.getActiveCell(); + // Select the merged range. + const range = mergedAreas.areas.getItemAt(0); + range.select(); + await context.sync(); - // Get all the cells from the currently selected range to the bottom-most edge of the used range. - // This method acts like the Ctrl+Shift+Arrow key keyboard shortcut while a range is selected. - const extendedRange = range.getExtendedRange( - direction, - activeCell // If the selected range contains more than one cell, the active cell must be defined. - ); - extendedRange.select(); + // Print out the details of the `mergedAreas` range object. + console.log(`Address of the merged range: ${mergedAreas.address}`); + console.log(`Number of cells in the merged range: ${mergedAreas.cellCount}`); await context.sync(); }); -'Excel.Range#getIntersectionOrNullObject:member(1)': +'Excel.Range#merge:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); + // Retrieve the worksheet and the table in that worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const tableRange = sheet.getRange("B2:E6"); - // We want the most recent quarter that has data, so - // exclude quarters without data and get the last of - // the remaining columns. - const usedDataRange = dataRange.getUsedRange(true /* valuesOnly */); - const currentQuarterRange = usedDataRange.getLastColumn(); + // Create a merged range in the first row of the table. + const chartTitle = tableRange.getRow(0); + chartTitle.merge(true); - // Asian and European teams have separate contests. - const asianSalesRange = sheet.getRange("A2:E4"); - const europeanSalesRange = sheet.getRange("A5:E7"); + // Format the merged range. + chartTitle.format.horizontalAlignment = "Center"; - // The data for each chart is the intersection of the - // current quarter column and the rows for the continent. - const asianContestRange = asianSalesRange.getIntersectionOrNullObject(currentQuarterRange); - const europeanContestRange = europeanSalesRange.getIntersectionOrNullObject(currentQuarterRange); - - // Must sync before you can test the output of *OrNullObject - // method/property. - await context.sync(); + await context.sync(); + }); +'Excel.Range#group:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - if (asianContestRange.isNullObject) { - // See the declaration of this function for how to - // test this code path. - reportMissingData("Asian"); - } else { - createContinentChart( - sheet, - "Asian", - asianContestRange, - "A9", - "F24" - ); - } - if (europeanContestRange.isNullObject) { - // See the declaration of this function for how to - // test this code path. - reportMissingData("European"); - } else { - createContinentChart( - sheet, - "European", - europeanContestRange, - "A25", - "F40" - ); - } + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Group the larger, main level. Note that the outline controls + // will be on row 10, meaning 4-9 will collapse and expand. + sheet.getRange("4:9").group(Excel.GroupOption.byRows); + // Group the smaller, sublevels. Note that the outline controls + // will be on rows 6 and 9, meaning 4-5 and 7-8 will collapse and expand. + sheet.getRange("4:5").group(Excel.GroupOption.byRows); + sheet.getRange("7:8").group(Excel.GroupOption.byRows); await context.sync(); }); -'Excel.Range#getMergedAreasOrNullObject:member(1)': +'Excel.Range#ungroup:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml - - - await Excel.run(async (context) => { - // Retrieve the worksheet and the table in that worksheet. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const tableRange = sheet.getRange("B2:E6"); - - // Retrieve the merged range within the table and load its details. - const mergedAreas = tableRange.getMergedAreasOrNullObject(); - mergedAreas.load("address"); - mergedAreas.load("cellCount"); - - // Select the merged range. - const range = mergedAreas.areas.getItemAt(0); - range.select(); - await context.sync(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - // Print out the details of the `mergedAreas` range object. - console.log(`Address of the merged range: ${mergedAreas.address}`); - console.log(`Number of cells in the merged range: ${mergedAreas.cellCount}`); - await context.sync(); + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // This removes two levels of groups from the "A1-R10" range. + // Any groups at the same level on the same dimension will be removed by a single call. + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); + sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); + await context.sync(); }); 'Excel.Range#getPivotTables:member(1)': - >- @@ -5586,38 +5636,361 @@ fullyContainedPivotTables.load("name"); await context.sync(); - // Display the names in the console. - console.log("PivotTables in the current range:") - partiallyContainedPivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); - console.log("PivotTables completely contained in the current range:") - fullyContainedPivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); + // Display the names in the console. + console.log("PivotTables in the current range:") + partiallyContainedPivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + console.log("PivotTables completely contained in the current range:") + fullyContainedPivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + }); +'Excel.Range#getDirectPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + + + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + // A "direct precedent" is a cell directly referenced by the selected formula. + let range = context.workbook.getActiveCell(); + let directPrecedents = range.getDirectPrecedents(); + range.load("address"); + directPrecedents.areas.load("address"); + await context.sync(); + + console.log(`Direct precedent cells of ${range.address}:`); + + // Use the direct precedents API to loop through precedents of the active cell. + for (let i = 0; i < directPrecedents.areas.items.length; i++) { + // Highlight and console the address of each precedent cell. + directPrecedents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directPrecedents.areas.items[i].address}`); + } + await context.sync(); + }); +'Excel.Range#getPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + + + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + let range = context.workbook.getActiveCell(); + let precedents = range.getPrecedents(); + range.load("address"); + precedents.areas.load("address"); + await context.sync(); + + console.log(`All precedent cells of ${range.address}:`); + + // Use the precedents API to loop through precedents of the active cell. + for (let i = 0; i < precedents.areas.items.length; i++) { + // Highlight and console the address of each precedent cell. + precedents.areas.items[i].format.fill.color = "Orange"; + console.log(` ${precedents.areas.items[i].address}`); + } + await context.sync(); + }); +'Excel.Range#getSpecialCells:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + + + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const usedRange = sheet.getUsedRange(); + + // Find the ranges with either text or logical (boolean) values. + const formulaRanges = usedRange.getSpecialCells("Constants", "LogicalText"); + formulaRanges.format.fill.color = "orange"; + + return context.sync(); + }); +'Excel.Range#autoFill:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sumCell = sheet.getRange("P4"); + + // Copy everything. The formulas will be contextually updated based on their new locations. + sumCell.autoFill("P4:P7", Excel.AutoFillType.fillCopy); + sumCell.format.autofitColumns(); + await context.sync(); + }); +'Excel.Range#getCellProperties:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + + + await Excel.run(async (context) => { + const cell = context.workbook.getActiveCell(); + + // Define the cell properties to get by setting the matching LoadOptions to true. + const propertiesToGet = cell.getCellProperties({ + address: true, + format: { + fill: { + color: true + }, + font: { + color: true + } + }, + style: true + }); + + // Sync to get the data from the workbook. + await context.sync(); + const cellProperties = propertiesToGet.value[0][0]; + console.log( + `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); + }); +'Excel.Range#setCellProperties:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Creating the SettableCellProperties objects to use for the range. + // In your add-in, these should be created once, outside the function. + const topHeaderProps: Excel.SettableCellProperties = { + // The style property takes a string matching the name of an Excel style. + // Built-in style names are listed in the `BuiltInStyle` enum. + // Note that a style will overwrite any formatting, + // so do not use the format property with the style property. + style: "Heading1" + }; + + const headerProps: Excel.SettableCellProperties = { + // Any subproperties of format that are not set will not be changed when these cell properties are set. + format: { + fill: { + color: "Blue" + }, + font: { + color: "White", + bold: true + } + } + }; + + const nonApplicableProps: Excel.SettableCellProperties = { + format: { + fill: { + pattern: Excel.FillPattern.gray25 + }, + font: { + color: "Gray", + italic: true + } + } + }; + + const matchupScoreProps: Excel.SettableCellProperties = { + format: { + borders: { + bottom: { + style: Excel.BorderLineStyle.continuous + }, + left: { + style: Excel.BorderLineStyle.continuous + }, + right: { + style: Excel.BorderLineStyle.continuous + }, + top: { + style: Excel.BorderLineStyle.continuous + } + } + } + }; + + const range = sheet.getRange("A1:E5"); + + // You can use empty JSON objects to avoid changing a cell's properties. + range.setCellProperties([ + [topHeaderProps, {}, {}, {}, {}], + [{}, {}, headerProps, headerProps, headerProps], + [{}, headerProps, nonApplicableProps, matchupScoreProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, nonApplicableProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, matchupScoreProps, nonApplicableProps] + ]); + + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); + }); +'Excel.Range#copyFrom:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. + sheet.getRange("F2").values = [["Copied Formula"]]; + + // Copy a range preserving the formulas. + // Note: non-formula values are copied over as is. + sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); + await context.sync(); + }); +'Excel.Range#moveTo:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the moved data. + sheet.getRange("F12").values = [["Moved Range:"]]; + + // Move the range from A1:E1 to G12:K12. + sheet.getRange("A1:E1").moveTo("G12"); + await context.sync(); + }); +'Excel.Range#getDependents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml + + + // This function highlights all the dependent cells of the active cell. + + // Dependent cells contain formulas that refer to other cells. + + await Excel.run(async (context) => { + // Get addresses of the active cell's dependent cells. + const range = context.workbook.getActiveCell(); + const dependents = range.getDependents(); + range.load("address"); + dependents.areas.load("address"); + await context.sync(); + + console.log(`All dependent cells of ${range.address}:`); + + // Use the dependents API to loop through dependents of the active cell. + for (let i = 0; i < dependents.areas.items.length; i++) { + // Highlight and print out the address of each dependent cell. + dependents.areas.items[i].format.fill.color = "Orange"; + console.log(` ${dependents.areas.items[i].address}`); + } + await context.sync(); + }); +'Excel.Range#getSpillingToRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Set G4 to a formula that returns a dynamic array. + const targetCell = sheet.getRange("G4"); + targetCell.formulas = [["=A4:D4"]]; + + // Get the address of the cells that the dynamic array spilled into. + const spillRange = targetCell.getSpillingToRange(); + spillRange.load("address"); + + // Fit the columns for readability. + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); + + console.log(`Copying the table headers spilled into ${spillRange.address}.`); + }); +'Excel.Range#find:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("ExpensesTable"); + const searchRange = table.getRange(); + + // NOTE: If no match is found, an ItemNotFound error + // is thrown when Range.find is evaluated. + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.find(searchText, { + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle + }); + + foundRange.load("address"); + await context.sync(); + + + console.log(foundRange.address); + }); +'Excel.Range#findOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("ExpensesTable"); + const searchRange = table.getRange(); + const searchText = (document.getElementById("searchText") as HTMLTextAreaElement).value; + const foundRange = searchRange.findOrNullObject(searchText, { + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle + }); + + foundRange.load("address"); + await context.sync(); + + if (foundRange.isNullObject) { + console.log("Text not found"); + } else { + console.log(foundRange.address); + } }); -'Excel.Range#getPrecedents:member(1)': +'Excel.Range#getExtendedRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml await Excel.run(async (context) => { - // Precedents are cells referenced by the formula in a cell. - let range = context.workbook.getActiveCell(); - let precedents = range.getPrecedents(); - range.load("address"); - precedents.areas.load("address"); - await context.sync(); + // Get the selected range. + const range = context.workbook.getSelectedRange(); - console.log(`All precedent cells of ${range.address}:`); + // Specify the direction with the `KeyboardDirection` enum. + const direction = Excel.KeyboardDirection.down; + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get all the cells from the currently selected range to the bottom-most edge of the used range. + // This method acts like the Ctrl+Shift+Arrow key keyboard shortcut while a range is selected. + const extendedRange = range.getExtendedRange( + direction, + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + extendedRange.select(); - // Use the precedents API to loop through precedents of the active cell. - for (let i = 0; i < precedents.areas.items.length; i++) { - // Highlight and console the address of each precedent cell. - precedents.areas.items[i].format.fill.color = "Orange"; - console.log(` ${precedents.areas.items[i].address}`); - } await context.sync(); }); 'Excel.Range#getRangeEdge:member(1)': @@ -5646,47 +6019,37 @@ await context.sync(); }); -'Excel.Range#getSpecialCells:member(1)': +'Excel.Range#hyperlink:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Orders"); - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const usedRange = sheet.getUsedRange(); - - // Find the ranges with either text or logical (boolean) values. - const formulaRanges = usedRange.getSpecialCells("Constants", "LogicalText"); - formulaRanges.format.fill.color = "orange"; - - return context.sync(); - }); -'Excel.Range#getSpillingToRange:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); + let productsRange = sheet.getRange("A3:A5"); + productsRange.load("values"); - // Set G4 to a formula that returns a dynamic array. - const targetCell = sheet.getRange("G4"); - targetCell.formulas = [["=A4:D4"]]; + await context.sync(); - // Get the address of the cells that the dynamic array spilled into. - const spillRange = targetCell.getSpillingToRange(); - spillRange.load("address"); + // Create a hyperlink to a URL + // for each product name in the first table. + for (let i = 0; i < productsRange.values.length; i++) { + let cellRange = productsRange.getCell(i, 0); + let cellText = productsRange.values[i][0]; - // Fit the columns for readability. - sheet.getUsedRange().format.autofitColumns(); - await context.sync(); + let hyperlink = { + textToDisplay: cellText, + screenTip: "Search Bing for '" + cellText + "'", + address: "https://www.bing.com?q=" + cellText + } + cellRange.hyperlink = hyperlink; + } - console.log(`Copying the table headers spilled into ${spillRange.address}.`); + await context.sync(); }); -'Excel.Range#getUsedRange:member(1)': +'Excel.Range#getIntersectionOrNullObject:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml @@ -5746,272 +6109,83 @@ await context.sync(); }); -'Excel.Range#getUsedRangeOrNullObject:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - // Pass true so only cells with values count as used - const usedDataRange = dataRange.getUsedRangeOrNullObject( - true /* valuesOnly */ - ); - - //Must sync before reading value returned from *OrNullObject method/property. - await context.sync(); - - if (usedDataRange.isNullObject) { - console.log("Need Data to Make Chart"); - console.log("To create a meaningful chart, press 'Fill the table' (or add names to the Product column and numbers to some of the other cells). Then press 'Try to create chart' again."); - } else { - const chart = sheet.charts.add( - Excel.ChartType.columnClustered, - dataRange, - "Columns" - ); - chart.setPosition("A15", "F30"); - chart.title.text = "Quarterly sales chart"; - chart.legend.position = "Right"; - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - } - - await context.sync(); - }); -'Excel.Range#group:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - - - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Group the larger, main level. Note that the outline controls - // will be on row 10, meaning 4-9 will collapse and expand. - sheet.getRange("4:9").group(Excel.GroupOption.byRows); - - // Group the smaller, sublevels. Note that the outline controls - // will be on rows 6 and 9, meaning 4-5 and 7-8 will collapse and expand. - sheet.getRange("4:5").group(Excel.GroupOption.byRows); - sheet.getRange("7:8").group(Excel.GroupOption.byRows); - await context.sync(); - }); -'Excel.Range#hyperlink:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); - - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); - - await context.sync(); - - // Create a hyperlink to a URL - // for each product name in the first table. - for (let i = 0; i < productsRange.values.length; i++) { - let cellRange = productsRange.getCell(i, 0); - let cellText = productsRange.values[i][0]; - - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com?q=" + cellText - } - cellRange.hyperlink = hyperlink; - } - - await context.sync(); - }); -'Excel.Range#merge:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml - - - await Excel.run(async (context) => { - // Retrieve the worksheet and the table in that worksheet. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const tableRange = sheet.getRange("B2:E6"); - - // Create a merged range in the first row of the table. - const chartTitle = tableRange.getRow(0); - chartTitle.merge(true); - - // Format the merged range. - chartTitle.format.horizontalAlignment = "Center"; - - await context.sync(); - }); -'Excel.Range#moveTo:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - // Place a label in front of the moved data. - sheet.getRange("F12").values = [["Moved Range:"]]; - - // Move the range from A1:E1 to G12:K12. - sheet.getRange("A1:E1").moveTo("G12"); - await context.sync(); - }); -'Excel.Range#removeDuplicates:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:D11"); - - const deleteResult = range.removeDuplicates([0],true); - deleteResult.load(); - await context.sync(); - - console.log(deleteResult.removed + " entries with duplicate names removed."); - console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); - }); -'Excel.Range#set:member(2)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - - const sourceRange = sheet.getRange("B2:E2"); - sourceRange.load("format/fill/color, format/font/name, format/font/color"); - await context.sync(); - - // Set properties based on the loaded and synced - // source range. - const targetRange = sheet.getRange("B7:E7"); - targetRange.set(sourceRange); - targetRange.format.autofitColumns(); - await context.sync(); - }); -'Excel.Range#setCellProperties:member(1)': +'Excel.Range#getUsedRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - // Creating the SettableCellProperties objects to use for the range. - // In your add-in, these should be created once, outside the function. - const topHeaderProps: Excel.SettableCellProperties = { - // The style property takes a string matching the name of an Excel style. - // Built-in style names are listed in the `BuiltInStyle` enum. - // Note that a style will overwrite any formatting, - // so do not use the format property with the style property. - style: "Heading1" - }; + // We want the most recent quarter that has data, so + // exclude quarters without data and get the last of + // the remaining columns. + const usedDataRange = dataRange.getUsedRange(true /* valuesOnly */); + const currentQuarterRange = usedDataRange.getLastColumn(); - const headerProps: Excel.SettableCellProperties = { - // Any subproperties of format that are not set will not be changed when these cell properties are set. - format: { - fill: { - color: "Blue" - }, - font: { - color: "White", - bold: true - } - } - }; + // Asian and European teams have separate contests. + const asianSalesRange = sheet.getRange("A2:E4"); + const europeanSalesRange = sheet.getRange("A5:E7"); - const nonApplicableProps: Excel.SettableCellProperties = { - format: { - fill: { - pattern: Excel.FillPattern.gray25 - }, - font: { - color: "Gray", - italic: true - } - } - }; + // The data for each chart is the intersection of the + // current quarter column and the rows for the continent. + const asianContestRange = asianSalesRange.getIntersectionOrNullObject(currentQuarterRange); + const europeanContestRange = europeanSalesRange.getIntersectionOrNullObject(currentQuarterRange); - const matchupScoreProps: Excel.SettableCellProperties = { - format: { - borders: { - bottom: { - style: Excel.BorderLineStyle.continuous - }, - left: { - style: Excel.BorderLineStyle.continuous - }, - right: { - style: Excel.BorderLineStyle.continuous - }, - top: { - style: Excel.BorderLineStyle.continuous - } - } - } - }; + // Must sync before you can test the output of *OrNullObject + // method/property. + await context.sync(); - const range = sheet.getRange("A1:E5"); + if (asianContestRange.isNullObject) { + // See the declaration of this function for how to + // test this code path. + reportMissingData("Asian"); + } else { + createContinentChart( + sheet, + "Asian", + asianContestRange, + "A9", + "F24" + ); + } - // You can use empty JSON objects to avoid changing a cell's properties. - range.setCellProperties([ - [topHeaderProps, {}, {}, {}, {}], - [{}, {}, headerProps, headerProps, headerProps], - [{}, headerProps, nonApplicableProps, matchupScoreProps, matchupScoreProps], - [{}, headerProps, matchupScoreProps, nonApplicableProps, matchupScoreProps], - [{}, headerProps, matchupScoreProps, matchupScoreProps, nonApplicableProps] - ]); + if (europeanContestRange.isNullObject) { + // See the declaration of this function for how to + // test this code path. + reportMissingData("European"); + } else { + createContinentChart( + sheet, + "European", + europeanContestRange, + "A25", + "F40" + ); + } - sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Range#sort:member': +'Excel.Range#removeDuplicates:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml - async function sortTopToBottom(criteria: string) { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("A1:E5"); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); - // Find the column header that provides the sort criteria. - const header = range.find(criteria, {}); - header.load("columnIndex"); - await context.sync(); + const deleteResult = range.removeDuplicates([0],true); + deleteResult.load(); + await context.sync(); - range.sort.apply( - [ - { - key: header.columnIndex, - sortOn: Excel.SortOn.value - } - ], - false /*matchCase*/, - true /*hasHeaders*/, - Excel.SortOrientation.rows - ); - await context.sync(); - }); - } + console.log(deleteResult.removed + " entries with duplicate names removed."); + console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); + }); 'Excel.Range#style:member': - >- // Link to full sample: @@ -6029,64 +6203,63 @@ await context.sync(); }); -'Excel.Range#ungroup:member(1)': +'Excel.Range#getUsedRangeOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // This removes two levels of groups from the "A1-R10" range. - // Any groups at the same level on the same dimension will be removed by a single call. - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byRows); - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); - sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); - await context.sync(); - }); -'Excel.Range#values:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + // Pass true so only cells with values count as used + const usedDataRange = dataRange.getUsedRangeOrNullObject( + true /* valuesOnly */ + ); - // Change the value of the checkbox in B3. + //Must sync before reading value returned from *OrNullObject method/property. + await context.sync(); - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("B3"); + if (usedDataRange.isNullObject) { + console.log("Need Data to Make Chart"); + console.log("To create a meaningful chart, press 'Fill the table' (or add names to the Product column and numbers to some of the other cells). Then press 'Try to create chart' again."); + } else { + const chart = sheet.charts.add( + Excel.ChartType.columnClustered, + dataRange, + "Columns" + ); + chart.setPosition("A15", "F30"); + chart.title.text = "Quarterly sales chart"; + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + } - range.values = [["TRUE"]]; - await context.sync(); + await context.sync(); }); -'Excel.Range#valuesAsJson:member': +'Excel.Range#set:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml - - - // This function creates a double data type, + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml - // and sets the format of this data type as a date. await Excel.run(async (context) => { - // Get the Sample worksheet and a range on that sheet. - const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); - const dateRange = sheet.getRange("A1"); + const sheet = context.workbook.worksheets.getItem("Sample"); - // Write a number formatted as a date to cell A1. - dateRange.valuesAsJson = [ - [ - { - type: Excel.CellValueType.double, - basicValue: 32889.0, - numberFormat: "m/d/yyyy" - } - ] - ]; - await context.sync(); + const sourceRange = sheet.getRange("B2:E2"); + sourceRange.load("format/fill/color, format/font/name, format/font/color"); + await context.sync(); + + // Set properties based on the loaded and synced + // source range. + const targetRange = sheet.getRange("B7:E7"); + targetRange.set(sourceRange); + targetRange.format.autofitColumns(); + await context.sync(); }); 'Excel.RangeAreas#format:member': - >- @@ -6470,6 +6643,19 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + await Excel.run(async (context) => { + const settings = context.workbook.settings; + settings.onSettingsChanged.add(onChangedSetting); + + await context.sync(); + console.log("Settings changed handler registered."); + }); +'Excel.SettingCollection#onSettingsChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + await Excel.run(async (context) => { const settings = context.workbook.settings; settings.onSettingsChanged.add(onChangedSetting); @@ -6499,19 +6685,6 @@ await context.sync(); }); -'Excel.SettingCollection#onSettingsChanged:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); - - await context.sync(); - console.log("Settings changed handler registered."); - }); 'Excel.Shape#delete:member(1)': - >- // Link to full sample: @@ -6547,21 +6720,22 @@ shape.fill.foregroundColor = "yellow" await context.sync(); }); -'Excel.Shape#getAsImage:member(1)': +'Excel.Shape#rotation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Image"); - const result = shape.getAsImage(Excel.PictureFormat.png); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle); + shape.left = 100; + shape.top = 300; + shape.height = 150; + shape.width = 200; + shape.rotation = 45; + shape.fill.clear(); await context.sync(); - - const imageString = result.value; - // Your add-in would save this string as a .png file. - console.log("The image's Base64-encoded string: " + imageString); }); 'Excel.Shape#group:member': - >- @@ -6578,17 +6752,21 @@ await context.sync(); }); -'Excel.Shape#incrementLeft:member(1)': +'Excel.Shape#getAsImage:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Square") - shape.incrementLeft(-25); + const shape = sheet.shapes.getItem("Image"); + const result = shape.getAsImage(Excel.PictureFormat.png); await context.sync(); + + const imageString = result.value; + // Your add-in would save this string as a .png file. + console.log("The image's Base64-encoded string: " + imageString); }); 'Excel.Shape#incrementRotation:member(1)': - >- @@ -6602,18 +6780,6 @@ shape.incrementRotation(180); await context.sync(); }); -'Excel.Shape#incrementTop:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Pentagon") - shape.incrementTop(25); - await context.sync(); - }); 'Excel.Shape#line:member': - >- // Link to full sample: @@ -6633,7 +6799,7 @@ await context.sync(); }); -'Excel.Shape#lockAspectRatio:member': +'Excel.Shape#incrementLeft:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6641,26 +6807,33 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.lockAspectRatio = true; - shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); + const shape = sheet.shapes.getItem("Square") + shape.incrementLeft(-25); await context.sync(); }); -'Excel.Shape#rotation:member': +'Excel.Shape#incrementTop:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.triangle); - shape.left = 100; - shape.top = 300; - shape.height = 150; - shape.width = 200; - shape.rotation = 45; - shape.fill.clear(); + const shape = sheet.shapes.getItem("Pentagon") + shape.incrementTop(25); + await context.sync(); + }); +'Excel.Shape#lockAspectRatio:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.lockAspectRatio = true; + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); 'Excel.Shape#scaleHeight:member(1)': @@ -7571,30 +7744,118 @@ await context.sync(); }); -'Excel.Workbook#close:member(1)': +'Excel.Workbook#properties:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml await Excel.run(async (context) => { - context.workbook.close(Excel.CloseBehavior.save); + let titleValue = "Excel document properties API"; + let subjectValue = "Set and get document properties"; + let keywordsValue = "Set and get operations"; + let commentsValue = "This is an Excel document properties API code sample"; + let categoryValue = "Office Add-ins"; + let managerValue = "John"; + let companyValue = "Microsoft"; + + let docProperties = context.workbook.properties; + + // Set the writeable document properties. + docProperties.title = titleValue; + docProperties.subject = subjectValue; + docProperties.keywords = keywordsValue; + docProperties.comments = commentsValue; + docProperties.category = categoryValue; + docProperties.manager = managerValue; + docProperties.company = companyValue; + + await context.sync(); + + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#getActiveCell:member(1)': +'Excel.Workbook#onActivated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + + + async function workbookActivated(event: Excel.WorkbookActivatedEventArgs) { + await Excel.run(async (context) => { + // Callback function for when the workbook is activated. + console.log("The workbook was activated."); + }); + } + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml await Excel.run(async (context) => { + const workbook = context.workbook; - let myWorkbook = context.workbook; - let activeCell = myWorkbook.getActiveCell(); - activeCell.load("address"); + // Register the workbook activated event handler. + workbook.onActivated.add(workbookActivated); + + await context.sync(); + console.log("Added event handler for workbook activated."); + }); +'Excel.Workbook#pivotTables:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + + + await Excel.run(async (context) => { + // Get the names of all the PivotTables in the workbook. + const pivotTables = context.workbook.pivotTables; + pivotTables.load("name"); + await context.sync(); + + // Display the names in the console. + console.log("PivotTables in the workbook:") + pivotTables.items.forEach((pivotTable) => { + console.log(`\t${pivotTable.name}`); + }); + }); +'Excel.Workbook#getSelectedRanges:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + + + await Excel.run(async (context) => { + + const selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; await context.sync(); + }) +'Excel.Workbook#styles:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + + + await Excel.run(async (context) => { + let styles = context.workbook.styles; + + // Add a new style to the style collection. + // Styles is in the Home tab ribbon. + styles.add("Diagonal Orientation Style"); + + let newStyle = styles.getItem("Diagonal Orientation Style"); - console.log("The active cell is " + activeCell.address); + // The "Diagonal Orientation Style" properties. + newStyle.textOrientation = 38; + newStyle.autoIndent = true; + newStyle.includeProtection = true; + newStyle.shrinkToFit = true; + newStyle.locked = false; + + await context.sync(); + + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); 'Excel.Workbook#getActiveShapeOrNullObject:member(1)': - >- @@ -7624,19 +7885,22 @@ console.log("No active shape"); } }); -'Excel.Workbook#getSelectedRanges:member(1)': +'Excel.Workbook#getActiveCell:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml await Excel.run(async (context) => { - const selectedRanges = context.workbook.getSelectedRanges(); - selectedRanges.format.fill.color = "lightblue"; + let myWorkbook = context.workbook; + let activeCell = myWorkbook.getActiveCell(); + activeCell.load("address"); await context.sync(); - }) + + console.log("The active cell is " + activeCell.address); + }); 'Excel.Workbook#insertWorksheetsFromBase64:member(1)': - >- // Link to full sample: @@ -7663,132 +7927,41 @@ reader.readAsDataURL(myFile.files[0]); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml - - - await Excel.run(async (context) => { - // Retrieve the source workbook. - const workbook = context.workbook; - - // Set up the insert options. - const options = { - sheetNamesToInsert: [], // Insert all the worksheets from the source workbook. - positionType: Excel.WorksheetPositionType.after, // Insert after the `relativeTo` sheet. - relativeTo: "Sheet1" // The sheet relative to which the other worksheets will be inserted. Used with `positionType`. - }; - - // Insert the new worksheets. - workbook.insertWorksheetsFromBase64(externalWorkbook, options); - await context.sync(); - }); -'Excel.Workbook#onActivated:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml - - - async function workbookActivated(event: Excel.WorkbookActivatedEventArgs) { - await Excel.run(async (context) => { - // Callback function for when the workbook is activated. - console.log("The workbook was activated."); - }); - } - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml - - - await Excel.run(async (context) => { - const workbook = context.workbook; - - // Register the workbook activated event handler. - workbook.onActivated.add(workbookActivated); - - await context.sync(); - console.log("Added event handler for workbook activated."); - }); -'Excel.Workbook#pivotTables:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml - - - await Excel.run(async (context) => { - // Get the names of all the PivotTables in the workbook. - const pivotTables = context.workbook.pivotTables; - pivotTables.load("name"); - await context.sync(); - - // Display the names in the console. - console.log("PivotTables in the workbook:") - pivotTables.items.forEach((pivotTable) => { - console.log(`\t${pivotTable.name}`); - }); - }); -'Excel.Workbook#properties:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml await Excel.run(async (context) => { - let titleValue = "Excel document properties API"; - let subjectValue = "Set and get document properties"; - let keywordsValue = "Set and get operations"; - let commentsValue = "This is an Excel document properties API code sample"; - let categoryValue = "Office Add-ins"; - let managerValue = "John"; - let companyValue = "Microsoft"; - - let docProperties = context.workbook.properties; - - // Set the writeable document properties. - docProperties.title = titleValue; - docProperties.subject = subjectValue; - docProperties.keywords = keywordsValue; - docProperties.comments = commentsValue; - docProperties.category = categoryValue; - docProperties.manager = managerValue; - docProperties.company = companyValue; - + // Retrieve the source workbook. + const workbook = context.workbook; + + // Set up the insert options. + const options = { + sheetNamesToInsert: [], // Insert all the worksheets from the source workbook. + positionType: Excel.WorksheetPositionType.after, // Insert after the `relativeTo` sheet. + relativeTo: "Sheet1" // The sheet relative to which the other worksheets will be inserted. Used with `positionType`. + }; + + // Insert the new worksheets. + workbook.insertWorksheetsFromBase64(externalWorkbook, options); await context.sync(); - - console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#save:member(1)': +'Excel.Workbook#close:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); + context.workbook.close(Excel.CloseBehavior.save); }); -'Excel.Workbook#styles:member': +'Excel.Workbook#save:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml await Excel.run(async (context) => { - let styles = context.workbook.styles; - - // Add a new style to the style collection. - // Styles is in the Home tab ribbon. - styles.add("Diagonal Orientation Style"); - - let newStyle = styles.getItem("Diagonal Orientation Style"); - - // The "Diagonal Orientation Style" properties. - newStyle.textOrientation = 38; - newStyle.autoIndent = true; - newStyle.includeProtection = true; - newStyle.shrinkToFit = true; - newStyle.locked = false; - - await context.sync(); - - console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); + context.workbook.save(Excel.SaveBehavior.save); }); 'Excel.WorkbookProtection#protect:member(1)': - >- @@ -7849,48 +8022,6 @@ } await context.sync(); }); -'Excel.Worksheet#autoFilter:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - - - // This function adds a percentage AutoFilter to the active worksheet - - // and applies the filter to a column of the used range. - - await Excel.run(async (context) => { - // Retrieve the active worksheet and the used range on that worksheet. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const farmData = sheet.getUsedRange(); - - // Add a filter that will only show the rows with the top 50% of values in column 3. - sheet.autoFilter.apply(farmData, 3, { - criterion1: "50", - filterOn: Excel.FilterOn.topPercent - }); - - await context.sync(); - }); -'Excel.Worksheet#copy:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml - - - await Excel.run(async (context) => { - - let myWorkbook = context.workbook; - let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); - let copiedSheet = sampleSheet.copy("End") - - sampleSheet.load("name"); - copiedSheet.load("name"); - - await context.sync(); - - console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") - }); 'Excel.Worksheet#customProperties:member': - >- // Link to full sample: @@ -7909,124 +8040,46 @@ console.log(`${property.key}:${property.value}`); }); }); -'Excel.Worksheet#findAllOrNullObject:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml - - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const foundRanges = sheet.findAllOrNullObject("Complete", { - completeMatch: true, - matchCase: false - }); - - await context.sync(); - - if (foundRanges.isNullObject) { - console.log("No complete projects"); - } else { - foundRanges.format.fill.color = "green" - } - }); -'Excel.Worksheet#getNext:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml - - - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - - // We don't want to include the default worksheet that was created - // when the workbook was created, so our "firstSheet" will be the one - // after the literal first. Note chaining of navigation methods. - const firstSheet = sheets.getFirst().getNext(); - const lastSheet = sheets.getLast(); - const firstTaxRateRange = firstSheet.getRange("B2"); - const lastTaxRateRange = lastSheet.getRange("B2"); - - firstSheet.load("name"); - lastSheet.load("name"); - firstTaxRateRange.load("text"); - lastTaxRateRange.load("text"); - - await context.sync(); - - let firstYear = firstSheet.name.substr(5, 4); - let lastYear = lastSheet.name.substr(5, 4); - console.log(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) - - await context.sync(); - }); -'Excel.Worksheet#getPrevious:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml - - - await Excel.run(async (context) => { - const sheets = context.workbook.worksheets; - const currentSheet = sheets.getActiveWorksheet(); - const previousYearSheet = currentSheet.getPrevious(); - const currentTaxDueRange = currentSheet.getRange("C2"); - const previousTaxDueRange = previousYearSheet.getRange("C2"); - - currentSheet.load("name"); - previousYearSheet.load("name"); - currentTaxDueRange.load("text"); - previousTaxDueRange.load("text"); - - await context.sync(); - - let currentYear = currentSheet.name.substr(5, 4); - let previousYear = previousYearSheet.name.substr(5, 4); - console.log("Two Year Tax Due Comparison", `Tax due for ${currentYear} was ${currentTaxDueRange.text[0][0]}\nTax due for ${previousYear} was ${previousTaxDueRange.text[0][0]}`) - - await context.sync(); - }); -'Excel.Worksheet#getRanges:member(1)': +'Excel.Worksheet#onColumnSorted:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml await Excel.run(async (context) => { - + console.log("Adding column handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); - const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); - specifiedRanges.format.fill.color = "pink"; - - await context.sync(); - }) -'Excel.Worksheet#onChanged:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + // This will fire whenever a column has been moved as the result of a sort action. + sheet.onColumnSorted.add((event) => { + return Excel.run((context) => { + console.log("Column sorted: " + event.address); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - sheet.onChanged.add(onChange); - await context.sync(); + // Clear formatting for section, then highlight the sorted area. + sheet.getRange("A1:E5").format.fill.clear(); + if (event.address !== "") { + sheet.getRanges(event.address).format.fill.color = "yellow"; + } - console.log("Added a worksheet-level data-changed event handler."); + return context.sync(); + }); + }); }); -'Excel.Worksheet#onColumnSorted:member': +'Excel.Worksheet#onRowSorted:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml await Excel.run(async (context) => { - console.log("Adding column handler"); + console.log("Adding row handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); - // This will fire whenever a column has been moved as the result of a sort action. - sheet.onColumnSorted.add((event) => { + // This will fire whenever a row has been moved as the result of a sort action. + sheet.onRowSorted.add((event) => { return Excel.run((context) => { - console.log("Column sorted: " + event.address); + console.log("Row sorted: " + event.address); const sheet = context.workbook.worksheets.getActiveWorksheet(); // Clear formatting for section, then highlight the sorted area. @@ -8039,6 +8092,25 @@ }); }); }); +'Excel.Worksheet#onSingleClicked:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.onSingleClicked.add((event) => { + return Excel.run((context) => { + console.log(`Click detected at ${event.address} (pixel offset from upper-left cell corner: ${event.offsetX}, ${event.offsetY})`); + return context.sync(); + }); + }); + + console.log("The worksheet click handler is registered."); + + await context.sync(); + }); 'Excel.Worksheet#onFormulaChanged:member': - >- // Link to full sample: @@ -8076,6 +8148,19 @@ ); }); } +'Excel.Worksheet#onChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + + + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); + await context.sync(); + + console.log("Added a worksheet-level data-changed event handler."); + }); 'Excel.Worksheet#onProtectionChanged:member': - >- // Link to full sample: @@ -8114,49 +8199,32 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.Worksheet#onRowSorted:member': +'Excel.Worksheet#showOutlineLevels:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - await Excel.run(async (context) => { - console.log("Adding row handler"); + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // This will fire whenever a row has been moved as the result of a sort action. - sheet.onRowSorted.add((event) => { - return Excel.run((context) => { - console.log("Row sorted: " + event.address); - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Clear formatting for section, then highlight the sorted area. - sheet.getRange("A1:E5").format.fill.clear(); - if (event.address !== "") { - sheet.getRanges(event.address).format.fill.color = "yellow"; - } - - return context.sync(); - }); - }); + // This shows the top 3 outline levels; collapsing any additional sublevels. + sheet.showOutlineLevels(3, 3); + await context.sync(); }); -'Excel.Worksheet#onSingleClicked:member': +'Excel.Worksheet#slicers:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.onSingleClicked.add((event) => { - return Excel.run((context) => { - console.log(`Click detected at ${event.address} (pixel offset from upper-left cell corner: ${event.offsetX}, ${event.offsetY})`); - return context.sync(); - }); - }); - - console.log("The worksheet click handler is registered."); - + const sheet = context.workbook.worksheets.getItem("Pivot"); + const slicer = sheet.slicers.add( + "Farm Sales", /* The slicer data source. For PivotTables, this can be the PivotTable object reference or name. */ + "Type" /* The field in the data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ + ); + slicer.name = "Fruit Slicer"; await context.sync(); }); 'Excel.Worksheet#pivotTables:member': @@ -8177,6 +8245,83 @@ console.log(`\t${pivotTable.name}`); }); }); +'Excel.Worksheet#getRanges:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + + + await Excel.run(async (context) => { + + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; + + await context.sync(); + }) +'Excel.Worksheet#autoFilter:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + + + // This function adds a percentage AutoFilter to the active worksheet + + // and applies the filter to a column of the used range. + + await Excel.run(async (context) => { + // Retrieve the active worksheet and the used range on that worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const farmData = sheet.getUsedRange(); + + // Add a filter that will only show the rows with the top 50% of values in column 3. + sheet.autoFilter.apply(farmData, 3, { + criterion1: "50", + filterOn: Excel.FilterOn.topPercent + }); + + await context.sync(); + }); +'Excel.Worksheet#copy:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml + + + await Excel.run(async (context) => { + + let myWorkbook = context.workbook; + let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); + let copiedSheet = sampleSheet.copy("End") + + sampleSheet.load("name"); + copiedSheet.load("name"); + + await context.sync(); + + console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") + }); +'Excel.Worksheet#findAllOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const foundRanges = sheet.findAllOrNullObject("Complete", { + completeMatch: true, + matchCase: false + }); + + await context.sync(); + + if (foundRanges.isNullObject) { + console.log("No complete projects"); + } else { + foundRanges.format.fill.color = "green" + } + }); 'Excel.Worksheet#showGridlines:member': - >- // Link to full sample: @@ -8189,32 +8334,60 @@ await context.sync(); }); -'Excel.Worksheet#showOutlineLevels:member(1)': +'Excel.Worksheet#getNext:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + await Excel.run(async (context) => { + const sheets = context.workbook.worksheets; + + // We don't want to include the default worksheet that was created + // when the workbook was created, so our "firstSheet" will be the one + // after the literal first. Note chaining of navigation methods. + const firstSheet = sheets.getFirst().getNext(); + const lastSheet = sheets.getLast(); + const firstTaxRateRange = firstSheet.getRange("B2"); + const lastTaxRateRange = lastSheet.getRange("B2"); + + firstSheet.load("name"); + lastSheet.load("name"); + firstTaxRateRange.load("text"); + lastTaxRateRange.load("text"); + + await context.sync(); + + let firstYear = firstSheet.name.substr(5, 4); + let lastYear = lastSheet.name.substr(5, 4); + console.log(`Tax Rate change from ${firstYear} to ${lastYear}`, `Tax rate for ${firstYear}: ${firstTaxRateRange.text[0][0]}\nTax rate for ${lastYear}: ${lastTaxRateRange.text[0][0]}`) - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Worksheet#slicers:member': +'Excel.Worksheet#getPrevious:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Pivot"); - const slicer = sheet.slicers.add( - "Farm Sales", /* The slicer data source. For PivotTables, this can be the PivotTable object reference or name. */ - "Type" /* The field in the data source to filter by. For PivotTables, this can be a PivotField object reference or ID. */ - ); - slicer.name = "Fruit Slicer"; + const sheets = context.workbook.worksheets; + const currentSheet = sheets.getActiveWorksheet(); + const previousYearSheet = currentSheet.getPrevious(); + const currentTaxDueRange = currentSheet.getRange("C2"); + const previousTaxDueRange = previousYearSheet.getRange("C2"); + + currentSheet.load("name"); + previousYearSheet.load("name"); + currentTaxDueRange.load("text"); + previousTaxDueRange.load("text"); + + await context.sync(); + + let currentYear = currentSheet.name.substr(5, 4); + let previousYear = previousYearSheet.name.substr(5, 4); + console.log("Two Year Tax Due Comparison", `Tax due for ${currentYear} was ${currentTaxDueRange.text[0][0]}\nTax due for ${previousYear} was ${previousTaxDueRange.text[0][0]}`) + await context.sync(); }); 'Excel.Worksheet#tabColor:member': @@ -8318,6 +8491,45 @@ } }); } +'Excel.WorksheetCollection#onActivated:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + + await Excel.run(async (context) => { + let sheets = context.workbook.worksheets; + sheets.onActivated.add(onActivate); + + await context.sync(); + console.log("A handler has been registered for the OnActivate event."); + }); +'Excel.WorksheetCollection#onAdded:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets; + sheet.onAdded.add(onWorksheetAdd); + + await context.sync(); + console.log("A handler has been registered for the OnAdded event."); + }); +'Excel.WorksheetCollection#onDeactivated:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + + + await Excel.run(async (context) => { + let sheets = context.workbook.worksheets; + sheets.onDeactivated.add(onDeactivate); + + await context.sync(); + console.log("A handler has been registered for the OnDeactivate event."); + }); 'Excel.WorksheetCollection#getFirst:member(1)': - >- // Link to full sample: @@ -8378,45 +8590,6 @@ await context.sync(); }); -'Excel.WorksheetCollection#onActivated:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onActivated.add(onActivate); - - await context.sync(); - console.log("A handler has been registered for the OnActivate event."); - }); -'Excel.WorksheetCollection#onAdded:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets; - sheet.onAdded.add(onWorksheetAdd); - - await context.sync(); - console.log("A handler has been registered for the OnAdded event."); - }); -'Excel.WorksheetCollection#onDeactivated:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - - - await Excel.run(async (context) => { - let sheets = context.workbook.worksheets; - sheets.onDeactivated.add(onDeactivate); - - await context.sync(); - console.log("A handler has been registered for the OnDeactivate event."); - }); 'Excel.WorksheetCustomPropertyCollection#add:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index ae1ad8407..38e8b6628 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -18,6 +18,7 @@ "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml", "excel-chart-data-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml", + "excel-chart-leader-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml", "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml", "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml", diff --git a/view/excel.json b/view/excel.json index 993906cb7..6c50b9c80 100644 --- a/view/excel.json +++ b/view/excel.json @@ -18,6 +18,7 @@ "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml", "excel-chart-data-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-labels.yaml", + "excel-chart-leader-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-leader-lines.yaml", "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml", "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-mentions.yaml", "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml", From c35bfc2637a95bac2dd976a64bea46f2f4ffdb45 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 10 Sep 2025 12:37:14 -0700 Subject: [PATCH 143/156] [PowerPoint] Map for SlideGetImageOptions (#995) --- snippet-extractor-metadata/powerpoint.xlsx | Bin 16658 -> 16650 bytes snippet-extractor-output/snippets.yaml | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 0c93174817338a9e487c2870a4cf4bce763b78ad..d4a1aa15c7e22e0d62c5d7907c68075aec4eaf9b 100644 GIT binary patch delta 8641 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 HANYR&^hF4d delta 8666 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 bRtC2M$pZP{c_10!349gAiiRWe&+z{M5dshR diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d7d069fb7..a8df1a586 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -17390,6 +17390,27 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); +'PowerPoint.SlideGetImageOptions:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); 'PowerPoint.SlideLayout:class': - >- // Link to full sample: From f976b1b82482e870d2dc80a3ef7f7b580b587c74 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 17 Sep 2025 15:54:50 -0700 Subject: [PATCH 144/156] [Word] Update to use ImportedStylesConflictBehavior enum (#997) --- .../word/40-tables/manage-custom-style.yaml | 4 +++ snippet-extractor-metadata/word.xlsx | Bin 28566 -> 28680 bytes snippet-extractor-output/snippets.yaml | 27 ++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/samples/word/40-tables/manage-custom-style.yaml b/samples/word/40-tables/manage-custom-style.yaml index 4968defdb..8d3a60fcb 100644 --- a/samples/word/40-tables/manage-custom-style.yaml +++ b/samples/word/40-tables/manage-custom-style.yaml @@ -278,6 +278,10 @@ script: const str = '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; const styles = context.document.importStylesFromJson(str); + + // If you'd like to set how conflicting styles are handled, use the importedStylesConflictBehavior parameter that was introduced in the Desktop 1.1 requirement set. "Ignore" is the default. + ////const styles = context.document.importStylesFromJson(str, Word.ImportedStylesConflictBehavior.Ignore); + await context.sync(); console.log("Styles imported from JSON:", styles); }); diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 223f0a5f460e3363fae93087e4f92f9e6ea5e75a..a3ceb2436882c3cfa68823042b63a7257a648485 100644 GIT binary patch delta 20277 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 u*jMhtOn*B$ClgRaN#lHZ3b>@Zu delta 20144 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a8df1a586..ce67e62d4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -23369,6 +23369,10 @@ const str = '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; const styles = context.document.importStylesFromJson(str); + + // If you'd like to set how conflicting styles are handled, use the importedStylesConflictBehavior parameter that was introduced in the Desktop 1.1 requirement set. "Ignore" is the default. + ////const styles = context.document.importStylesFromJson(str, Word.ImportedStylesConflictBehavior.Ignore); + await context.sync(); console.log("Styles imported from JSON:", styles); }); @@ -24475,6 +24479,25 @@ await context.sync(); console.log(base64.value); }); +'Word.ImportedStylesConflictBehavior:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml + + + // Imports styles from JSON. + + await Word.run(async (context) => { + const str = + '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; + const styles = context.document.importStylesFromJson(str); + + // If you'd like to set how conflicting styles are handled, use the importedStylesConflictBehavior parameter that was introduced in the Desktop 1.1 requirement set. "Ignore" is the default. + ////const styles = context.document.importStylesFromJson(str, Word.ImportedStylesConflictBehavior.Ignore); + + await context.sync(); + console.log("Styles imported from JSON:", styles); + }); 'Word.InlinePicture#getBase64ImageSrc:member(1)': - >- // Link to full sample: @@ -25398,6 +25421,10 @@ const str = '{"styles":[{"baseStyle":"Default Paragraph Font","builtIn":false,"inUse":true,"linked":false,"nameLocal":"NewCharStyle","priority":2,"quickStyle":true,"type":"Character","unhideWhenUsed":false,"visibility":false,"paragraphFormat":null,"font":{"name":"DengXian Light","size":16.0,"bold":true,"italic":false,"color":"#F1A983","underline":"None","subscript":false,"superscript":true,"strikeThrough":true,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#FF0000"}},{"baseStyle":"Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewParaStyle","nameLocal":"NewParaStyle","priority":1,"quickStyle":true,"type":"Paragraph","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Centered","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":72.0,"lineSpacing":18.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":72.0,"spaceAfter":30.0,"spaceBefore":30.0,"widowControl":true},"font":{"name":"DengXian","size":14.0,"bold":true,"italic":true,"color":"#8DD873","underline":"Single","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":true,"highlightColor":null,"hidden":false},"shading":{"backgroundPatternColor":"#00FF00"}},{"baseStyle":"Table Normal","builtIn":false,"inUse":true,"linked":false,"nextParagraphStyle":"NewTableStyle","nameLocal":"NewTableStyle","priority":100,"type":"Table","unhideWhenUsed":false,"visibility":false,"paragraphFormat":{"alignment":"Left","firstLineIndent":0.0,"keepTogether":false,"keepWithNext":false,"leftIndent":0.0,"lineSpacing":12.0,"lineUnitAfter":0.0,"lineUnitBefore":0.0,"mirrorIndents":false,"outlineLevel":"OutlineLevelBodyText","rightIndent":0.0,"spaceAfter":0.0,"spaceBefore":0.0,"widowControl":true},"font":{"name":"DengXian","size":20.0,"bold":false,"italic":true,"color":"#D86DCB","underline":"None","subscript":false,"superscript":false,"strikeThrough":false,"doubleStrikeThrough":false,"highlightColor":null,"hidden":false},"tableStyle":{"allowBreakAcrossPage":true,"alignment":"Left","bottomCellMargin":0.0,"leftCellMargin":0.08,"rightCellMargin":0.08,"topCellMargin":0.0,"cellSpacing":0.0},"shading":{"backgroundPatternColor":"#60CAF3"}}]}'; const styles = context.document.importStylesFromJson(str); + + // If you'd like to set how conflicting styles are handled, use the importedStylesConflictBehavior parameter that was introduced in the Desktop 1.1 requirement set. "Ignore" is the default. + ////const styles = context.document.importStylesFromJson(str, Word.ImportedStylesConflictBehavior.Ignore); + await context.sync(); console.log("Styles imported from JSON:", styles); }); From 43b853ae093219d49a2894dc56472372f08084c7 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:44:46 -0700 Subject: [PATCH 145/156] [Outlook] Map code snippet to Office.AttachmentDetailsCompose (#996) --- snippet-extractor-metadata/outlook.xlsx | Bin 24576 -> 24557 bytes snippet-extractor-output/snippets.yaml | 48 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index fad79065637fb701a81f59c9354dfdba8f6ea385..d3bcea07da6e2dafcc5810793c747628bf50777e 100644 GIT binary patch delta 13833 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ce67e62d4..331186ec3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10469,6 +10469,54 @@ } else { console.log("This mail item doesn't contain any attachments."); } +'Office.AttachmentDetailsCompose:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + + + Office.context.mailbox.item.getAttachmentsAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + if (result.value.length > 0) { + for (let i = 0; i < result.value.length; i++) { + const attachment = result.value[i]; + let attachmentType; + switch (attachment.attachmentType) { + case Office.MailboxEnums.AttachmentType.Cloud: + attachmentType = "Attachment is stored in a cloud location"; + break; + case Office.MailboxEnums.AttachmentType.File: + attachmentType = "Attachment is a file"; + break; + case Office.MailboxEnums.AttachmentType.Item: + attachmentType = "Attachment is an Exchange item"; + break; + } + console.log( + "ID: " + + attachment.id + + "\n" + + "Type: " + + attachmentType + + "\n" + + "Name: " + + attachment.name + + "\n" + + "Size: " + + attachment.size + + "\n" + + "isInline: " + + attachment.isInline + ); + } + } else { + console.log("No attachments on this message."); + } + }); 'Office.Body:interface': - >- // Link to full sample: From a5c1f0bb6acd40a9736ca85d12d9eaa230ce7688 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 25 Sep 2025 08:33:50 -0700 Subject: [PATCH 146/156] [admin] Update packages and remove yarn references (#998) * Update packages and remove yarn references * Remove undefined author additions * Allow empty template and style sections for custom functions snippets * Update yaml package --- README.md | 9 +- config/build.documentation.ts | 4 +- config/build.ts | 14 +- config/helpers.ts | 23 +- config/snippet.helpers.ts | 4 +- config/status.ts | 2 +- package.json | 30 +- playlists-prod/excel.yaml | 26 +- playlists-prod/outlook.yaml | 16 +- playlists-prod/powerpoint.yaml | 14 +- playlists-prod/word.yaml | 16 +- playlists/excel.yaml | 26 +- playlists/outlook.yaml | 16 +- playlists/powerpoint.yaml | 14 +- playlists/word.yaml | 16 +- .../excel/20-chart/chart-title-ts.yaml | 2 +- .../excel/01-basics/basic-api-call-es5.yaml | 2 +- samples/excel/01-basics/basic-api-call.yaml | 2 +- .../01-basics/basic-common-api-call.yaml | 2 +- .../excel/10-chart/chart-axis-formatting.yaml | 2 +- samples/excel/10-chart/chart-axis.yaml | 2 +- .../excel/10-chart/chart-bubble-chart.yaml | 2 +- .../10-chart/chart-create-several-charts.yaml | 2 +- samples/excel/10-chart/chart-data-labels.yaml | 2 +- samples/excel/10-chart/chart-data-source.yaml | 2 +- samples/excel/10-chart/chart-data-table.yaml | 2 +- samples/excel/10-chart/chart-formatting.yaml | 2 +- .../excel/10-chart/chart-leader-lines.yaml | 2 +- samples/excel/10-chart/chart-legend.yaml | 2 +- .../excel/10-chart/chart-series-markers.yaml | 2 +- .../10-chart/chart-series-plotorder.yaml | 2 +- samples/excel/10-chart/chart-series.yaml | 2 +- samples/excel/10-chart/chart-trendlines.yaml | 2 +- .../12-comments-and-notes/comment-basics.yaml | 2 +- .../comment-mentions.yaml | 2 +- .../comment-replies.yaml | 2 +- .../comment-resolution.yaml | 2 +- .../excel-note-basics.yaml | 2 +- .../conditional-formatting-advanced.yaml | 2 +- .../conditional-formatting-basic.yaml | 2 +- .../16-custom-functions/custom-enum.yaml | 2 +- .../custom-functions-errors.yaml | 2 +- .../data-types-custom-functions.yaml | 2 +- .../streaming-function.yaml | 2 +- .../web-call-function.yaml | 2 +- ...e-set-get-and-delete-custom-xml-parts.yaml | 2 +- .../test-xml-for-unique-namespace.yaml | 2 +- .../20-data-types/data-types-basic-types.yaml | 2 +- .../data-types-entity-attribution.yaml | 2 +- .../data-types-entity-icons.yaml | 2 +- .../data-types-entity-values.yaml | 2 +- .../data-types-error-values.yaml | 2 +- .../data-types-formatted-number.yaml | 2 +- .../20-data-types/data-types-references.yaml | 2 +- .../20-data-types/data-types-web-image.yaml | 2 +- .../22-data-validation/data-validation.yaml | 2 +- .../excel/26-document/custom-properties.yaml | 2 +- .../26-document/get-file-in-slices-async.yaml | 2 +- samples/excel/26-document/properties.yaml | 2 +- .../30-events/data-change-event-details.yaml | 2 +- samples/excel/30-events/data-changed.yaml | 2 +- .../30-events/event-column-and-row-sort.yaml | 2 +- .../event-worksheet-single-click.yaml | 2 +- .../30-events/events-chart-activated.yaml | 2 +- ...vents-chartcollection-added-activated.yaml | 2 +- .../events-comment-event-handler.yaml | 2 +- .../30-events/events-disable-events.yaml | 2 +- .../30-events/events-formula-changed.yaml | 2 +- .../excel/30-events/events-table-changed.yaml | 2 +- .../events-tablecollection-changed.yaml | 2 +- .../30-events/events-workbook-activated.yaml | 2 +- ...nts-workbook-and-worksheet-collection.yaml | 2 +- .../events-worksheet-protection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- .../30-events/selection-changed-events.yaml | 2 +- .../create-and-remove-named-item.yaml | 4 +- .../34-named-item/update-named-item.yaml | 2 +- .../pivottable-calculations.yaml | 2 +- .../pivottable-create-and-modify.yaml | 2 +- .../pivottable-filters-and-summaries.yaml | 2 +- .../pivottable-get-pivottables.yaml | 2 +- .../pivottable-pivotfilters.yaml | 2 +- .../38-pivottable/pivottable-pivotlayout.yaml | 2 +- .../38-pivottable/pivottable-refresh.yaml | 2 +- .../38-pivottable/pivottable-slicer.yaml | 2 +- .../38-pivottable/pivottable-source-data.yaml | 2 +- samples/excel/42-range/cell-properties.yaml | 2 +- samples/excel/42-range/dynamic-arrays.yaml | 2 +- .../42-range/insert-delete-clear-range.yaml | 4 +- samples/excel/42-range/outline.yaml | 2 +- samples/excel/42-range/precedents.yaml | 2 +- samples/excel/42-range/range-areas.yaml | 2 +- samples/excel/42-range/range-auto-fill.yaml | 2 +- .../excel/42-range/range-cell-control.yaml | 2 +- samples/excel/42-range/range-copyfrom.yaml | 2 +- samples/excel/42-range/range-dependents.yaml | 2 +- .../42-range/range-direct-dependents.yaml | 2 +- samples/excel/42-range/range-find.yaml | 2 +- .../excel/42-range/range-get-range-edge.yaml | 2 +- samples/excel/42-range/range-hyperlink.yaml | 2 +- .../excel/42-range/range-merged-ranges.yaml | 2 +- .../excel/42-range/range-relationships.yaml | 2 +- .../42-range/range-remove-duplicates.yaml | 2 +- .../42-range/range-text-orientation.yaml | 2 +- samples/excel/42-range/selected-range.yaml | 2 +- samples/excel/42-range/set-get-values.yaml | 2 +- samples/excel/42-range/style.yaml | 2 +- samples/excel/42-range/used-range.yaml | 2 +- .../44-shape/shape-create-and-delete.yaml | 2 +- samples/excel/44-shape/shape-get-active.yaml | 2 +- samples/excel/44-shape/shape-groups.yaml | 2 +- samples/excel/44-shape/shape-images.yaml | 2 +- .../excel/44-shape/shape-move-and-order.yaml | 2 +- samples/excel/44-shape/shape-textboxes.yaml | 2 +- .../add-rows-and-columns-to-a-table.yaml | 2 +- samples/excel/46-table/create-table.yaml | 2 +- samples/excel/46-table/filter-data.yaml | 2 +- samples/excel/46-table/formatting.yaml | 2 +- .../excel/46-table/get-data-from-table.yaml | 2 +- ...get-visible-range-of-a-filtered-table.yaml | 2 +- samples/excel/46-table/import-json-data.yaml | 2 +- samples/excel/46-table/resize-table.yaml | 2 +- samples/excel/46-table/sort-data.yaml | 2 +- .../create-get-change-delete-settings.yaml | 2 +- .../excel/50-workbook/create-workbook.yaml | 2 +- .../50-workbook/culture-info-date-time.yaml | 2 +- samples/excel/50-workbook/culture-info.yaml | 2 +- .../excel/50-workbook/data-protection.yaml | 2 +- .../workbook-built-in-functions.yaml | 2 +- .../50-workbook/workbook-calculation.yaml | 2 +- .../50-workbook/workbook-get-active-cell.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../50-workbook/workbook-save-and-close.yaml | 2 +- .../add-delete-rename-move-worksheet.yaml | 4 +- samples/excel/54-worksheet/gridlines.yaml | 2 +- .../excel/54-worksheet/list-worksheets.yaml | 2 +- ...rence-worksheets-by-relative-position.yaml | 2 +- samples/excel/54-worksheet/tab-color.yaml | 2 +- .../54-worksheet/worksheet-auto-filter.yaml | 2 +- .../excel/54-worksheet/worksheet-copy.yaml | 2 +- .../54-worksheet/worksheet-find-all.yaml | 2 +- .../54-worksheet/worksheet-freeze-panes.yaml | 2 +- .../54-worksheet/worksheet-page-layout.yaml | 2 +- .../54-worksheet/worksheet-range-cell.yaml | 2 +- .../54-worksheet/worksheet-visibility.yaml | 2 +- .../90-scenarios/currency-converter.yaml | 2 +- .../90-scenarios/multiple-property-set.yaml | 2 +- .../performance-optimization.yaml | 2 +- .../excel/90-scenarios/report-generation.yaml | 2 +- .../90-scenarios/working-with-dates.yaml | 2 +- .../excel/99-just-for-fun/color-wheel.yaml | 2 +- samples/excel/99-just-for-fun/gradient.yaml | 2 +- .../99-just-for-fun/path-finder-game.yaml | 2 +- samples/excel/99-just-for-fun/patterns.yaml | 2 +- samples/excel/99-just-for-fun/tetrominos.yaml | 2 +- samples/excel/default.yaml | 2 +- samples/onenote/default.yaml | 2 +- .../10-roaming-settings/roaming-settings.yaml | 2 +- .../load-set-get-save.yaml | 2 +- .../20-item-body/add-inline-base64-image.yaml | 2 +- .../20-item-body/append-text-on-send.yaml | 2 +- .../outlook/20-item-body/get-body-format.yaml | 2 +- .../20-item-body/get-selected-data.yaml | 2 +- .../20-item-body/prepend-text-on-send.yaml | 2 +- .../prepend-text-to-item-body.yaml | 2 +- .../20-item-body/replace-selected-text.yaml | 2 +- .../25-item-save-and-close/close-async.yaml | 2 +- .../outlook/25-item-save-and-close/save.yaml | 2 +- .../get-all-attendees.yaml | 2 +- .../get-cc-message-read.yaml | 2 +- .../get-from-message-compose.yaml | 2 +- .../get-from-message-read.yaml | 2 +- ...tional-attendees-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-organizer.yaml | 2 +- ...quired-attendees-appointment-attendee.yaml | 2 +- .../get-sender-message-read.yaml | 2 +- .../get-set-bcc-message-compose.yaml | 2 +- .../get-set-cc-message-compose.yaml | 2 +- ...ional-attendees-appointment-organizer.yaml | 2 +- ...uired-attendees-appointment-organizer.yaml | 2 +- .../get-set-to-message-compose.yaml | 2 +- .../get-to-message-read.yaml | 2 +- .../35-notifications/add-getall-remove.yaml | 2 +- .../40-attachments/attachments-compose.yaml | 2 +- .../get-attachment-content.yaml | 2 +- .../40-attachments/get-attachments-read.yaml | 2 +- .../45-categories/work-with-categories.yaml | 2 +- .../work-with-master-categories.yaml | 2 +- .../50-recurrence/get-recurrence-read.yaml | 2 +- .../outlook/50-recurrence/get-series-id.yaml | 2 +- ...-set-recurrence-appointment-organizer.yaml | 2 +- .../display-existing-appointment.yaml | 2 +- .../display-existing-message.yaml | 2 +- .../display-new-appointment.yaml | 2 +- .../55-display-items/display-new-message.yaml | 2 +- .../55-display-items/display-reply-forms.yaml | 2 +- .../display-reply-with-attachments.yaml | 2 +- .../sensitivity-label.yaml | 2 +- .../sensitivity-labels-catalog.yaml | 2 +- .../get-shared-properties.yaml | 2 +- .../get-internet-headers-message-read.yaml | 2 +- ...stom-internet-headers-message-compose.yaml | 2 +- .../outlook/75-regex-matches/contextual.yaml | 2 +- .../get-icaluid-as-attendee.yaml | 2 +- .../get-icaluid-as-organizer.yaml | 2 +- .../ids-and-urls.yaml | 2 +- .../make-ews-request-async.yaml | 2 +- ...-message-using-make-ews-request-async.yaml | 2 +- .../user-callback-token.yaml | 2 +- .../user-identity-token.yaml | 2 +- .../delay-message-delivery.yaml | 2 +- ...d-remove-enhancedlocation-appointment.yaml | 2 +- .../get-conversation-id-message.yaml | 2 +- .../get-conversation-index.yaml | 2 +- .../get-date-time-created-read.yaml | 2 +- .../get-date-time-modified-read.yaml | 2 +- .../get-diagnostic-information.yaml | 2 +- .../90-other-item-apis/get-eml-format.yaml | 2 +- .../90-other-item-apis/get-end-read.yaml | 2 +- .../90-other-item-apis/get-in-reply-to.yaml | 2 +- .../get-internet-message-id-read.yaml | 2 +- .../get-item-class-async.yaml | 2 +- .../get-item-class-read.yaml | 2 +- .../90-other-item-apis/get-item-type.yaml | 2 +- .../get-loaded-message-properties.yaml | 2 +- .../90-other-item-apis/get-location-read.yaml | 2 +- .../get-message-properties.yaml | 2 +- .../get-normalized-subject-read.yaml | 2 +- .../get-set-end-appointment-organizer.yaml | 2 +- ...et-set-location-appointment-organizer.yaml | 2 +- .../get-set-sensitivity-level.yaml | 2 +- .../get-set-start-appointment-organizer.yaml | 2 +- .../get-set-subject-compose.yaml | 2 +- .../90-other-item-apis/get-start-read.yaml | 2 +- .../90-other-item-apis/get-subject-read.yaml | 2 +- .../90-other-item-apis/item-id-compose.yaml | 2 +- .../90-other-item-apis/send-async.yaml | 2 +- .../90-other-item-apis/session-data-apis.yaml | 2 +- .../90-other-item-apis/set-selected-data.yaml | 2 +- .../work-with-client-signatures.yaml | 2 +- .../get-set-isalldayevent.yaml | 2 +- .../set-displayed-body-subject.yaml | 2 +- .../powerpoint/basics/basic-api-call-js.yaml | 2 +- .../powerpoint/basics/basic-api-call-ts.yaml | 2 +- .../basics/basic-common-api-call.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- .../document/create-presentation.yaml | 2 +- .../hyperlinks/manage-hyperlinks.yaml | 2 +- samples/powerpoint/images/insert-image.yaml | 2 +- samples/powerpoint/images/insert-svg.yaml | 2 +- .../scenarios/searches-wikipedia-api.yaml | 2 +- .../powerpoint/shapes/add-modify-tables.yaml | 2 +- .../powerpoint/shapes/binding-to-shapes.yaml | 2 +- samples/powerpoint/shapes/get-set-shapes.yaml | 2 +- .../powerpoint/shapes/get-shapes-by-type.yaml | 2 +- .../shapes/group-ungroup-shapes.yaml | 2 +- samples/powerpoint/shapes/shapes.yaml | 4 +- .../slide-management/add-slides.yaml | 2 +- .../slide-management/export-import-slide.yaml | 2 +- .../slide-management/get-set-slides.yaml | 2 +- .../slide-management/get-slide-metadata.yaml | 2 +- .../slide-management/insert-slides.yaml | 2 +- samples/powerpoint/tags/tags.yaml | 2 +- .../powerpoint/text/get-set-textrange.yaml | 2 +- .../project/basics/basic-common-api-call.yaml | 2 +- samples/project/default.yaml | 2 +- .../word/01-basics/basic-api-call-es5.yaml | 2 +- samples/word/01-basics/basic-api-call.yaml | 2 +- .../word/01-basics/basic-common-api-call.yaml | 2 +- .../content-control-onadded-event.yaml | 2 +- .../content-control-ondatachanged-event.yaml | 2 +- .../content-control-ondeleted-event.yaml | 2 +- .../content-control-onentered-event.yaml | 2 +- .../content-control-onexited-event.yaml | 2 +- ...tent-control-onselectionchanged-event.yaml | 2 +- .../get-change-tracking-states.yaml | 2 +- ...t-and-change-checkbox-content-control.yaml | 2 +- ...-and-change-combo-box-content-control.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- ...-change-dropdown-list-content-control.yaml | 2 +- .../15-images/insert-and-get-pictures.yaml | 2 +- samples/word/20-lists/insert-list.yaml | 2 +- samples/word/20-lists/manage-list-styles.yaml | 2 +- samples/word/20-lists/organize-list.yaml | 2 +- .../get-paragraph-on-insertion-point.yaml | 2 +- samples/word/25-paragraph/get-text.yaml | 2 +- samples/word/25-paragraph/get-word-count.yaml | 2 +- .../25-paragraph/insert-formatted-text.yaml | 2 +- .../insert-header-and-footer.yaml | 2 +- .../insert-in-different-locations.yaml | 2 +- .../insert-line-and-page-breaks.yaml | 2 +- samples/word/25-paragraph/onadded-event.yaml | 2 +- .../word/25-paragraph/onchanged-event.yaml | 2 +- .../word/25-paragraph/ondeleted-event.yaml | 2 +- .../25-paragraph/paragraph-properties.yaml | 2 +- samples/word/25-paragraph/search.yaml | 2 +- .../get-built-in-properties.yaml | 2 +- ...read-write-custom-document-properties.yaml | 2 +- samples/word/35-ranges/compare-location.yaml | 2 +- samples/word/35-ranges/get-pages.yaml | 4 +- samples/word/35-ranges/scroll-to-range.yaml | 2 +- .../split-words-of-first-paragraph.yaml | 2 +- .../word/40-tables/manage-custom-style.yaml | 2 +- samples/word/40-tables/manage-formatting.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- .../word/50-document/compare-documents.yaml | 2 +- .../word/50-document/get-external-styles.yaml | 2 +- .../50-document/insert-external-document.yaml | 2 +- .../50-document/insert-section-breaks.yaml | 2 +- .../word/50-document/manage-annotations.yaml | 2 +- samples/word/50-document/manage-body.yaml | 2 +- .../50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- .../manage-custom-xml-part-ns.yaml | 2 +- .../50-document/manage-custom-xml-part.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 2 +- .../word/50-document/manage-footnotes.yaml | 2 +- samples/word/50-document/manage-settings.yaml | 2 +- .../50-document/manage-shapes-text-boxes.yaml | 2 +- samples/word/50-document/manage-styles.yaml | 2 +- .../50-document/manage-tracked-changes.yaml | 2 +- samples/word/50-document/save-close.yaml | 2 +- .../correlated-objects-pattern.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- .../90-scenarios/multiple-property-set.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- .../word/99-preview-apis/manage-comments.yaml | 2 +- samples/word/default.yaml | 2 +- snippet-extractor-output/snippets.yaml | 2232 ++++++++--------- tsconfig.json | 9 +- yarn.lock | 1016 -------- 332 files changed, 1554 insertions(+), 2571 deletions(-) delete mode 100644 yarn.lock diff --git a/README.md b/README.md index a0e9602b7..0fe20ada1 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 1. [Fork](https://help.github.com/articles/about-forks/) this project into your GitHub account. 1. Clone your fork to your development computer. 1. Ensure that you have Node, version 6.10+, installed. (To check the version run the command `node -v`.) -1. Install `yarn` as a global package `npm install yarn --global`. -1. Be sure your CLI is in the root of the office-js-snippets repo and run `yarn install`. (It's similar to `npm install`.) +1. Be sure your CLI is in the root of the office-js-snippets repo and run `npm install` to install all dependencies. 1. Set up the original \OfficeDev\office-js-snippets as the upstream repo for your local repo by following the steps in [Configuring a remote for a fork](https://help.github.com/articles/configuring-a-remote-for-a-fork/). 1. If you'll be using Visual Studio Code as your editor, install the [TSLint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) extension for Visual Studio Code. @@ -46,11 +45,11 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 1. Open one of the `.yaml` files already in the group folder. If it has an `order` property near the top, then the snippets in the group folder are ordered in a particular sequence in Script Lab. Add an `order` property to the top of your `.yaml` file and give it a number that is between the order numbers of the snippets between which you want it to appear. 1. Copy your `.yaml` file to the chosen group folder. -1. Run `yarn start`. If there are no problems, the output will end with a `Done!`. If there are errors, review the output to check what caused the build validation to fail, and fix as needed. See [**Known errors and fixes**](#known-errors-and-fixes-in-the-build-tool) for more information. +1. Run `npm start`. If there are no problems, the output will end with a `Done!`. If there are errors, review the output to check what caused the build validation to fail, and fix as needed. See [**Known errors and fixes**](#known-errors-and-fixes-in-the-build-tool) for more information. - > **Note**: The `yarn start` command adds an `id` property to the top of the file. + > **Note**: The `npm start` command adds an `id` property to the top of the file. -1. Re-run `yarn start`, and fix errors, until the build succeeds. +1. Re-run `npm start`, and fix errors, until the build succeeds. 1. Run `git status`. You should see that, in addition to your new `.yaml` file (or possibly new folder), a `playlist\{host}.yaml` file (where `{host}` is `excel`, `word`, etc.) has also been changed. This is expected. The build tool you just ran added a reference to your new snippet to this file. 1. Run the following two commands. The commit message should be a brief description of what the snippet demonstrates; for example, `"shows how to use getWhatever method"`. diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 72eb9099b..ee9d8f653 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -36,7 +36,7 @@ export async function buildReferenceDocSnippetExtracts( await rmRf('snippet-extractor-output'); await mkDir('snippet-extractor-output'); - const contents = snippetExtractsPerHost.map(extracts => jsyaml.safeDump(extracts)).join(''); + const contents = snippetExtractsPerHost.map(extracts => jsyaml.dump(extracts)).join(''); await writeFile(path.resolve(`snippet-extractor-output/snippets.yaml`), contents); } @@ -119,7 +119,7 @@ function getExtractedDataFromSnippet( const filename = snippetIdsToFilenames[row.snippetId]; if (filename) { try { - const script = (jsyaml.safeLoad(fs.readFileSync(filename).toString()) as ISnippet).script.content; + const script = (jsyaml.load(fs.readFileSync(filename).toString()) as ISnippet).script.content; const fullSnippetTextArray = script.split('\n') .map(line => line.replace(/\r/, '')); diff --git a/config/build.ts b/config/build.ts index 678cbe254..5d718ccc7 100644 --- a/config/build.ts +++ b/config/build.ts @@ -2,7 +2,8 @@ import * as path from 'path'; import { isNil, isString, isArray, isEmpty, sortBy, cloneDeep } from 'lodash'; -import * as chalk from 'chalk'; +import chalk from 'chalk'; +import escapeStringRegexp from 'escape-string-regexp'; import { status } from './status'; import { SnippetFileInput, SnippetProcessedData, @@ -14,7 +15,6 @@ import { getShareableYaml } from './snippet.helpers'; import { processLibraries } from './libraries.processor'; import { startCase, groupBy, map } from 'lodash'; import * as jsyaml from 'js-yaml'; -import escapeStringRegexp = require('escape-string-regexp'); import * as fsx from 'fs-extra'; @@ -84,7 +84,7 @@ async function processSnippets(processedSnippets: Dictionary{}; additionalFields.id = snippet.id; additionalFields.api_set = snippet.api_set; - additionalFields.author = snippet.author; + + // Only set author field if it has a value + if (snippet.author) { + additionalFields.author = snippet.author; + } if ((typeof (snippet as any).order) !== 'undefined') { // # for ordering, if present (used for samples only) @@ -537,7 +541,7 @@ async function generatePlaylists(processedSnippets: Dictionary { +export const banner = (title: string, message: string = null, chalkFn: any = null) => { if (!chalkFn) { chalkFn = chalk.bold; } @@ -55,7 +55,7 @@ export const banner = (title: string, message: string = null, chalkFn: chalk.Cha }; export function getPrintableDetails(item: any, indent: number) { - const details = jsyaml.safeDump(item, { + const details = jsyaml.dump(item, { indent: 4, lineWidth: -1, skipInvalid: true @@ -83,16 +83,11 @@ export const mkDir = (dir: string) => * Deletes a folder. * @param dir An absolute path to the directory. */ -export const rmRf = (dir: string) => - new Promise((resolve, reject) => { - const location = path.resolve(dir); - rimraf(location, (err) => { - if (err) { - return reject(err); - } - return resolve(location); - }); - }); +export const rmRf = async (dir: string): Promise => { + const location = path.resolve(dir); + await rimraf(location); + return location; +}; /** * Load all the files and folders in a given directory. diff --git a/config/snippet.helpers.ts b/config/snippet.helpers.ts index f2574957d..449e40d59 100644 --- a/config/snippet.helpers.ts +++ b/config/snippet.helpers.ts @@ -91,7 +91,7 @@ function scrubCarriageReturns(snippet: ISnippet) { export function getScrubbedSnippet(snippet: ISnippet, keep: SnippetFieldType): ISnippet { let copy = {}; forIn(snippetFields, (fieldType, fieldName) => { - if (fieldType & keep) { + if (fieldType & keep && snippet[fieldName] !== undefined) { copy[fieldName] = snippet[fieldName]; } }); @@ -103,7 +103,7 @@ export function getShareableYaml(rawSnippet: ISnippet, additionalFields: ISnippe const snippet = { ...getScrubbedSnippet(rawSnippet, SnippetFieldType.PUBLIC), ...additionalFields }; scrubCarriageReturns(snippet); - return jsyaml.safeDump(snippet, { + return jsyaml.dump(snippet, { indent: 4, lineWidth: -1, sortKeys: ((a, b) => snippetFieldSortingOrder[a] - snippetFieldSortingOrder[b]), diff --git a/config/status.ts b/config/status.ts index 44003309c..692b788ac 100644 --- a/config/status.ts +++ b/config/status.ts @@ -1,5 +1,5 @@ import * as nodeStatus from 'node-status'; -import * as chalk from 'chalk'; +import chalk from 'chalk'; import { isString, find, isNil, isArray } from 'lodash'; interface IStage { diff --git a/package.json b/package.json index 6628cb3e3..40974d9bf 100644 --- a/package.json +++ b/package.json @@ -23,25 +23,23 @@ }, "homepage": "https://github.com/OfficeDev/office-js-snippets#readme", "dependencies": { - "chalk": "1.1.3", - "escape-string-regexp": "^2.0.0", - "exceljs": "^4.3.0", - "fs-extra": "3.0.1", - "js-yaml": "^3.13.1", + "chalk": "^4.1.2", + "escape-string-regexp": "^4.0.0", + "exceljs": "^4.4.0", + "fs-extra": "11.3.2", + "js-yaml": "^4.1.0", "lodash": "^4.17.21", "node-status": "^1.0.0", - "rimraf": "^3.0.0", - "shelljs": "^0.8.5", - "yarn": "^1.22.19" + "rimraf": "^6.0.1", + "shelljs": "^0.10.0" }, "devDependencies": { - "@types/chalk": "0.4.31", - "@types/fs-extra": "3.0.1", - "@types/js-yaml": "^3.12.0", - "@types/lodash": "^4.14.175", - "@types/node": "^11.10.5", - "@types/shelljs": "^0.8.3", - "tslint": "^6.1.0", - "typescript": "^3.3.3333" + "@types/fs-extra": "^11.0.4", + "@types/js-yaml": "^4.0.9", + "@types/lodash": "^4.17.20", + "@types/node": "^24.5.2", + "@types/shelljs": "^0.8.17", + "tslint": "^6.1.3", + "typescript": "^5.9.2" } } diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index a1229c67b..059d3893b 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -30,7 +30,7 @@ - id: excel-chart-axis name: Axis details fileName: chart-axis.yaml - description: 'Gets, sets, and removes axis unit, label, and title in a chart.' + description: Gets, sets, and removes axis unit, label, and title in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml group: Chart @@ -162,7 +162,7 @@ - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml - description: 'Adds, gets, and formats trendlines in a chart.' + description: Adds, gets, and formats trendlines in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml group: Chart @@ -189,7 +189,7 @@ - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml - description: 'Adds, edits, and removes comments.' + description: Adds, edits, and removes comments. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml group: Comments And Notes @@ -207,7 +207,7 @@ - id: excel-comment-replies name: Comment replies fileName: comment-replies.yaml - description: 'Adds, edits, and removes comment replies.' + description: Adds, edits, and removes comment replies. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml group: Comments And Notes @@ -225,7 +225,7 @@ - id: excel-note-basics name: Notes fileName: excel-note-basics.yaml - description: 'Adds, edits, and removes notes.' + description: Adds, edits, and removes notes. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml group: Comments And Notes @@ -319,7 +319,7 @@ - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml - description: 'Creates, sets, gets, and deletes a custom XML part.' + description: Creates, sets, gets, and deletes a custom XML part. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml group: Custom XML Parts @@ -625,9 +625,9 @@ api_set: ExcelAPI: '1.14' - id: excel-named-item-create-and-remove-named-item - name: 'Create, access, and remove' + name: Create, access, and remove fileName: create-and-remove-named-item.yaml - description: 'Creates, accesses, and removes named items in a worksheet.' + description: Creates, accesses, and removes named items in a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item @@ -785,16 +785,16 @@ - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml - description: 'Creates, updates, and clears hyperlinks in a range.' + description: Creates, updates, and clears hyperlinks in a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml group: Range api_set: ExcelApi: '1.7' - id: excel-range-insert-delete-and-clear-range - name: 'Insert, delete, and clear' + name: Insert, delete, and clear fileName: insert-delete-clear-range.yaml - description: 'Inserts, deletes, and clears a range.' + description: Inserts, deletes, and clears a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/insert-delete-clear-range.yaml group: Range @@ -1217,9 +1217,9 @@ api_set: ExcelApi: '1.1' - id: excel-worksheet-add-delete-rename-move-worksheet - name: 'Add, delete, rename, and move worksheet' + name: Add, delete, rename, and move worksheet fileName: add-delete-rename-move-worksheet.yaml - description: 'Adds, deletes, renames, and moves a worksheet.' + description: Adds, deletes, renames, and moves a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml group: Worksheet diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 0a11cfd8e..d675b90a6 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, saves, and removes add-in roaming settings.' + description: Gets, sets, saves, and removes add-in roaming settings. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings @@ -295,7 +295,7 @@ - id: outlook-categories-work-with-categories name: Work with item categories fileName: work-with-categories.yaml - description: 'Gets, adds, and removes categories assigned to the item.' + description: Gets, adds, and removes categories assigned to the item. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml group: Categories @@ -304,7 +304,7 @@ - id: outlook-categories-work-with-master-categories name: Work with the categories master list fileName: work-with-master-categories.yaml - description: 'Gets, adds, and removes categories in the master list for the mailbox.' + description: Gets, adds, and removes categories in the master list for the mailbox. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml group: Categories @@ -447,7 +447,7 @@ api_set: Mailbox: '1.8' - id: outlook-regex-matches-contextual - name: 'Get regex matches (Item Read, contextual)' + name: Get regex matches (Item Read, contextual) fileName: contextual.yaml description: Gets regex matches when the add-in is opened as a contextual add-in. rawUrl: >- @@ -639,7 +639,7 @@ - id: outlook-other-item-apis-get-add-remove-enhancedlocation-appointment name: Manage the locations of an appointment fileName: get-add-remove-enhancedlocation-appointment.yaml - description: 'Gets, adds, and removes locations on an appointment (enhancedLocation API).' + description: Gets, adds, and removes locations on an appointment (enhancedLocation API). rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml group: Other Item APIs @@ -704,7 +704,7 @@ - id: outlook-other-item-apis-session-data-apis name: Work with session data APIs (Compose) fileName: session-data-apis.yaml - description: 'Sets, gets, gets all, removes, and clears session data in Compose mode.' + description: Sets, gets, gets all, removes, and clears session data in Compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml group: Other Item APIs @@ -720,7 +720,7 @@ api_set: Mailbox: '1.13' - id: outlook-other-item-apis-get-message-properties - name: 'Get properties of selected messages (Message Compose, Message Read)' + name: Get properties of selected messages (Message Compose, Message Read) fileName: get-message-properties.yaml description: Gets the properties of multiple selected messages. rawUrl: >- @@ -794,7 +794,7 @@ api_set: Mailbox: '1.15' - id: outlook-other-item-apis-get-loaded-message-properties - name: 'Get properties of a loaded message (Message Compose, Message Read)' + name: Get properties of a loaded message (Message Compose, Message Read) fileName: get-loaded-message-properties.yaml description: Gets the properties of the currently loaded message. rawUrl: >- diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index edea496ed..40ca88e0d 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -72,16 +72,16 @@ group: Scenarios api_set: {} - id: powerpoint-shapes - name: 'Insert shape, line, and text box' + name: Insert shape, line, and text box fileName: shapes.yaml - description: 'Inserts geometric shapes, lines, and text boxes to a slide.' + description: Inserts geometric shapes, lines, and text boxes to a slide. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml group: Shapes api_set: PowerPointApi: '1.4' - id: powerpoint-shapes-get-set-shapes - name: 'Get, set, load, and save shapes' + name: Get, set, load, and save shapes fileName: get-set-shapes.yaml description: Get and set one or more selected shapes. Load and save one or more shapes. rawUrl: >- @@ -92,7 +92,7 @@ - id: powerpoint-shapes-get-shapes-by-type name: Select shapes by type fileName: get-shapes-by-type.yaml - description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' + description: Gets shapes in a slide based on their type, such as GeometricShape or Line. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml group: Shapes @@ -146,13 +146,13 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slides.' + description: Gets the title, index, and ID of the selected slides. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management api_set: {} - id: powerpoint-slide-management-get-set-slides - name: 'Get, set, load, and save slides' + name: Get, set, load, and save slides fileName: get-set-slides.yaml description: Get and set one or more selected slides. Load and save one or more slides. rawUrl: >- @@ -181,7 +181,7 @@ - id: powerpoint-text-get-set-textrange name: Work with text range selections fileName: get-set-textrange.yaml - description: 'Get, set, load, and save text range selections.' + description: Get, set, load, and save text range selections. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml group: Text diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 9def75438..644cc25a5 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -30,7 +30,7 @@ - id: word-content-controls-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml group: Content Controls @@ -105,7 +105,7 @@ - id: word-content-controls-insert-and-change-checkbox-content-control name: Manage checkbox content controls fileName: insert-and-change-checkbox-content-control.yaml - description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' + description: Inserts, updates, retrieves, and deletes checkbox content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml group: Content Controls @@ -114,7 +114,7 @@ - id: word-content-controls-insert-and-change-combo-box-content-control name: Manage combo box content controls fileName: insert-and-change-combo-box-content-control.yaml - description: 'Inserts, updates, and deletes combo box content controls.' + description: Inserts, updates, and deletes combo box content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml group: Content Controls @@ -123,7 +123,7 @@ - id: word-content-controls-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls fileName: insert-and-change-dropdown-list-content-control.yaml - description: 'Inserts, updates, and deletes dropdown list content controls.' + description: Inserts, updates, and deletes dropdown list content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml group: Content Controls @@ -222,7 +222,7 @@ - id: word-paragraph-paragraph-properties name: Paragraph properties fileName: paragraph-properties.yaml - description: 'Sets indentation, space between paragraphs, and other paragraph properties.' + description: Sets indentation, space between paragraphs, and other paragraph properties. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph @@ -338,9 +338,9 @@ api_set: WordApi: '1.3' - id: word-ranges-get-pages - name: 'Work with pages, panes, and windows' + name: Work with pages, panes, and windows fileName: get-pages.yaml - description: 'Shows how to work with pages, panes, and windows.' + description: Shows how to work with pages, panes, and windows. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml group: Ranges @@ -583,7 +583,7 @@ - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml group: Preview APIs diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 7e9d49ed6..5aa863380 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -30,7 +30,7 @@ - id: excel-chart-axis name: Axis details fileName: chart-axis.yaml - description: 'Gets, sets, and removes axis unit, label, and title in a chart.' + description: Gets, sets, and removes axis unit, label, and title in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis.yaml group: Chart @@ -162,7 +162,7 @@ - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml - description: 'Adds, gets, and formats trendlines in a chart.' + description: Adds, gets, and formats trendlines in a chart. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml group: Chart @@ -189,7 +189,7 @@ - id: excel-comment-basics name: Comment basics fileName: comment-basics.yaml - description: 'Adds, edits, and removes comments.' + description: Adds, edits, and removes comments. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml group: Comments And Notes @@ -207,7 +207,7 @@ - id: excel-comment-replies name: Comment replies fileName: comment-replies.yaml - description: 'Adds, edits, and removes comment replies.' + description: Adds, edits, and removes comment replies. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml group: Comments And Notes @@ -225,7 +225,7 @@ - id: excel-note-basics name: Notes fileName: excel-note-basics.yaml - description: 'Adds, edits, and removes notes.' + description: Adds, edits, and removes notes. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/excel-note-basics.yaml group: Comments And Notes @@ -319,7 +319,7 @@ - id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts fileName: create-set-get-and-delete-custom-xml-parts.yaml - description: 'Creates, sets, gets, and deletes a custom XML part.' + description: Creates, sets, gets, and deletes a custom XML part. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml group: Custom XML Parts @@ -625,9 +625,9 @@ api_set: ExcelAPI: '1.14' - id: excel-named-item-create-and-remove-named-item - name: 'Create, access, and remove' + name: Create, access, and remove fileName: create-and-remove-named-item.yaml - description: 'Creates, accesses, and removes named items in a worksheet.' + description: Creates, accesses, and removes named items in a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item @@ -785,16 +785,16 @@ - id: excel-range-hyperlink name: Hyperlinks fileName: range-hyperlink.yaml - description: 'Creates, updates, and clears hyperlinks in a range.' + description: Creates, updates, and clears hyperlinks in a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-hyperlink.yaml group: Range api_set: ExcelApi: '1.7' - id: excel-range-insert-delete-and-clear-range - name: 'Insert, delete, and clear' + name: Insert, delete, and clear fileName: insert-delete-clear-range.yaml - description: 'Inserts, deletes, and clears a range.' + description: Inserts, deletes, and clears a range. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/insert-delete-clear-range.yaml group: Range @@ -1217,9 +1217,9 @@ api_set: ExcelApi: '1.1' - id: excel-worksheet-add-delete-rename-move-worksheet - name: 'Add, delete, rename, and move worksheet' + name: Add, delete, rename, and move worksheet fileName: add-delete-rename-move-worksheet.yaml - description: 'Adds, deletes, renames, and moves a worksheet.' + description: Adds, deletes, renames, and moves a worksheet. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml group: Worksheet diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 00c0262b1..ca772433b 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -1,7 +1,7 @@ - id: outlook-roaming-settings-roaming-settings name: Use add-in settings fileName: roaming-settings.yaml - description: 'Gets, sets, saves, and removes add-in roaming settings.' + description: Gets, sets, saves, and removes add-in roaming settings. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings @@ -295,7 +295,7 @@ - id: outlook-categories-work-with-categories name: Work with item categories fileName: work-with-categories.yaml - description: 'Gets, adds, and removes categories assigned to the item.' + description: Gets, adds, and removes categories assigned to the item. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-categories.yaml group: Categories @@ -304,7 +304,7 @@ - id: outlook-categories-work-with-master-categories name: Work with the categories master list fileName: work-with-master-categories.yaml - description: 'Gets, adds, and removes categories in the master list for the mailbox.' + description: Gets, adds, and removes categories in the master list for the mailbox. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-master-categories.yaml group: Categories @@ -447,7 +447,7 @@ api_set: Mailbox: '1.8' - id: outlook-regex-matches-contextual - name: 'Get regex matches (Item Read, contextual)' + name: Get regex matches (Item Read, contextual) fileName: contextual.yaml description: Gets regex matches when the add-in is opened as a contextual add-in. rawUrl: >- @@ -639,7 +639,7 @@ - id: outlook-other-item-apis-get-add-remove-enhancedlocation-appointment name: Manage the locations of an appointment fileName: get-add-remove-enhancedlocation-appointment.yaml - description: 'Gets, adds, and removes locations on an appointment (enhancedLocation API).' + description: Gets, adds, and removes locations on an appointment (enhancedLocation API). rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml group: Other Item APIs @@ -704,7 +704,7 @@ - id: outlook-other-item-apis-session-data-apis name: Work with session data APIs (Compose) fileName: session-data-apis.yaml - description: 'Sets, gets, gets all, removes, and clears session data in Compose mode.' + description: Sets, gets, gets all, removes, and clears session data in Compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/session-data-apis.yaml group: Other Item APIs @@ -720,7 +720,7 @@ api_set: Mailbox: '1.13' - id: outlook-other-item-apis-get-message-properties - name: 'Get properties of selected messages (Message Compose, Message Read)' + name: Get properties of selected messages (Message Compose, Message Read) fileName: get-message-properties.yaml description: Gets the properties of multiple selected messages. rawUrl: >- @@ -794,7 +794,7 @@ api_set: Mailbox: '1.15' - id: outlook-other-item-apis-get-loaded-message-properties - name: 'Get properties of a loaded message (Message Compose, Message Read)' + name: Get properties of a loaded message (Message Compose, Message Read) fileName: get-loaded-message-properties.yaml description: Gets the properties of the currently loaded message. rawUrl: >- diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index efc61d962..6d8cc0135 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -72,16 +72,16 @@ group: Scenarios api_set: {} - id: powerpoint-shapes - name: 'Insert shape, line, and text box' + name: Insert shape, line, and text box fileName: shapes.yaml - description: 'Inserts geometric shapes, lines, and text boxes to a slide.' + description: Inserts geometric shapes, lines, and text boxes to a slide. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/shapes.yaml group: Shapes api_set: PowerPointApi: '1.4' - id: powerpoint-shapes-get-set-shapes - name: 'Get, set, load, and save shapes' + name: Get, set, load, and save shapes fileName: get-set-shapes.yaml description: Get and set one or more selected shapes. Load and save one or more shapes. rawUrl: >- @@ -92,7 +92,7 @@ - id: powerpoint-shapes-get-shapes-by-type name: Select shapes by type fileName: get-shapes-by-type.yaml - description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' + description: Gets shapes in a slide based on their type, such as GeometricShape or Line. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml group: Shapes @@ -146,13 +146,13 @@ - id: powerpoint-basics-get-slide-metadata name: Get slide metadata fileName: get-slide-metadata.yaml - description: 'Gets the title, index, and ID of the selected slides.' + description: Gets the title, index, and ID of the selected slides. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml group: Slide Management api_set: {} - id: powerpoint-slide-management-get-set-slides - name: 'Get, set, load, and save slides' + name: Get, set, load, and save slides fileName: get-set-slides.yaml description: Get and set one or more selected slides. Load and save one or more slides. rawUrl: >- @@ -181,7 +181,7 @@ - id: powerpoint-text-get-set-textrange name: Work with text range selections fileName: get-set-textrange.yaml - description: 'Get, set, load, and save text range selections.' + description: Get, set, load, and save text range selections. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/text/get-set-textrange.yaml group: Text diff --git a/playlists/word.yaml b/playlists/word.yaml index cb7a87af1..8773282f5 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -30,7 +30,7 @@ - id: word-content-controls-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-content-controls.yaml group: Content Controls @@ -105,7 +105,7 @@ - id: word-content-controls-insert-and-change-checkbox-content-control name: Manage checkbox content controls fileName: insert-and-change-checkbox-content-control.yaml - description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' + description: Inserts, updates, retrieves, and deletes checkbox content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml group: Content Controls @@ -114,7 +114,7 @@ - id: word-content-controls-insert-and-change-combo-box-content-control name: Manage combo box content controls fileName: insert-and-change-combo-box-content-control.yaml - description: 'Inserts, updates, and deletes combo box content controls.' + description: Inserts, updates, and deletes combo box content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml group: Content Controls @@ -123,7 +123,7 @@ - id: word-content-controls-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls fileName: insert-and-change-dropdown-list-content-control.yaml - description: 'Inserts, updates, and deletes dropdown list content controls.' + description: Inserts, updates, and deletes dropdown list content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml group: Content Controls @@ -222,7 +222,7 @@ - id: word-paragraph-paragraph-properties name: Paragraph properties fileName: paragraph-properties.yaml - description: 'Sets indentation, space between paragraphs, and other paragraph properties.' + description: Sets indentation, space between paragraphs, and other paragraph properties. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph @@ -338,9 +338,9 @@ api_set: WordApi: '1.3' - id: word-ranges-get-pages - name: 'Work with pages, panes, and windows' + name: Work with pages, panes, and windows fileName: get-pages.yaml - description: 'Shows how to work with pages, panes, and windows.' + description: Shows how to work with pages, panes, and windows. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/get-pages.yaml group: Ranges @@ -583,7 +583,7 @@ - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml - description: 'Inserts, updates, and retrieves content controls.' + description: Inserts, updates, and retrieves content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml group: Preview APIs diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 25e06c787..40d3be036 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -143,4 +143,4 @@ libraries: | // IntelliSense: @types/library or node_modules paths or URL to d.ts files @types/office-js @types/core-js - @types/jquery@3.3.1 \ No newline at end of file + @types/jquery@3.3.1 diff --git a/samples/excel/01-basics/basic-api-call-es5.yaml b/samples/excel/01-basics/basic-api-call-es5.yaml index e2baf785a..b25de1525 100644 --- a/samples/excel/01-basics/basic-api-call-es5.yaml +++ b/samples/excel/01-basics/basic-api-call-es5.yaml @@ -63,4 +63,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 86ddf8c87..144e6d260 100644 --- a/samples/excel/01-basics/basic-api-call.yaml +++ b/samples/excel/01-basics/basic-api-call.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 539bee657..86b1df00e 100644 --- a/samples/excel/01-basics/basic-common-api-call.yaml +++ b/samples/excel/01-basics/basic-common-api-call.yaml @@ -55,4 +55,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index d82d312b1..b6f3b5d56 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -157,4 +157,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index a9c093176..103105274 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-chart-axis name: Axis details -description: 'Gets, sets, and removes axis unit, label, and title in a chart.' +description: Gets, sets, and removes axis unit, label, and title in a chart. host: EXCEL api_set: ExcelApi: '1.7' diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index a9aa558ab..84a38133e 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -157,4 +157,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index a8113bff5..078f6b308 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -1,7 +1,7 @@ order: 5 id: excel-chart-create-several-charts name: Create charts -description: 'Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts.' +description: Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/10-chart/chart-data-labels.yaml b/samples/excel/10-chart/chart-data-labels.yaml index 43f109f55..e70e8eac5 100644 --- a/samples/excel/10-chart/chart-data-labels.yaml +++ b/samples/excel/10-chart/chart-data-labels.yaml @@ -275,4 +275,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index d4bb53742..417b3e253 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -116,4 +116,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml index a48cae0f3..8e47b80eb 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -154,4 +154,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 5027e5948..6a6f00563 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -214,4 +214,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-leader-lines.yaml b/samples/excel/10-chart/chart-leader-lines.yaml index ad2ac18ea..dd096f4b5 100644 --- a/samples/excel/10-chart/chart-leader-lines.yaml +++ b/samples/excel/10-chart/chart-leader-lines.yaml @@ -182,4 +182,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index b9dbc32d9..b62f39f8a 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -134,4 +134,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 8405b89cd..5ad48cfad 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -115,4 +115,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 40ff375f7..5aac92606 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -126,4 +126,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 2eb2a4ef6..2010d02e3 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -142,4 +142,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index 5edbd97b9..c8755bb33 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -1,7 +1,7 @@ order: 14 id: excel-chart-trendlines name: Trendlines -description: 'Adds, gets, and formats trendlines in a chart.' +description: Adds, gets, and formats trendlines in a chart. host: EXCEL api_set: ExcelApi: '1.7' diff --git a/samples/excel/12-comments-and-notes/comment-basics.yaml b/samples/excel/12-comments-and-notes/comment-basics.yaml index f6f26b62f..ea27365f6 100644 --- a/samples/excel/12-comments-and-notes/comment-basics.yaml +++ b/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-comment-basics name: Comment basics -description: 'Adds, edits, and removes comments.' +description: Adds, edits, and removes comments. host: EXCEL api_set: ExcelApi: '1.10' diff --git a/samples/excel/12-comments-and-notes/comment-mentions.yaml b/samples/excel/12-comments-and-notes/comment-mentions.yaml index 0ec354dba..7b6a09088 100644 --- a/samples/excel/12-comments-and-notes/comment-mentions.yaml +++ b/samples/excel/12-comments-and-notes/comment-mentions.yaml @@ -93,4 +93,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/12-comments-and-notes/comment-replies.yaml b/samples/excel/12-comments-and-notes/comment-replies.yaml index beed1063c..e3f10b0b7 100644 --- a/samples/excel/12-comments-and-notes/comment-replies.yaml +++ b/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-comment-replies name: Comment replies -description: 'Adds, edits, and removes comment replies.' +description: Adds, edits, and removes comment replies. host: EXCEL api_set: ExcelApi: '1.10' diff --git a/samples/excel/12-comments-and-notes/comment-resolution.yaml b/samples/excel/12-comments-and-notes/comment-resolution.yaml index c77a480c3..2b7039fc3 100644 --- a/samples/excel/12-comments-and-notes/comment-resolution.yaml +++ b/samples/excel/12-comments-and-notes/comment-resolution.yaml @@ -104,4 +104,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/12-comments-and-notes/excel-note-basics.yaml b/samples/excel/12-comments-and-notes/excel-note-basics.yaml index d8a65e187..fc74c8521 100644 --- a/samples/excel/12-comments-and-notes/excel-note-basics.yaml +++ b/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -1,7 +1,7 @@ order: 5 id: excel-note-basics name: Notes -description: 'Adds, edits, and removes notes.' +description: Adds, edits, and removes notes. host: EXCEL api_set: ExcelApi: '1.18' diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index 09600d694..bae922ff7 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -227,4 +227,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 97ceb9f63..5ea7fceef 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -346,4 +346,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/16-custom-functions/custom-enum.yaml b/samples/excel/16-custom-functions/custom-enum.yaml index 010b64081..f2e3cbb4e 100644 --- a/samples/excel/16-custom-functions/custom-enum.yaml +++ b/samples/excel/16-custom-functions/custom-enum.yaml @@ -87,4 +87,4 @@ libraries: | @types/core-js jquery@3.1.1 - @types/jquery@3.3.1 \ No newline at end of file + @types/jquery@3.3.1 diff --git a/samples/excel/16-custom-functions/custom-functions-errors.yaml b/samples/excel/16-custom-functions/custom-functions-errors.yaml index e1f5582b1..98c38b020 100644 --- a/samples/excel/16-custom-functions/custom-functions-errors.yaml +++ b/samples/excel/16-custom-functions/custom-functions-errors.yaml @@ -35,4 +35,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js \ No newline at end of file + core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/data-types-custom-functions.yaml b/samples/excel/16-custom-functions/data-types-custom-functions.yaml index 8d6745ff6..34796ff56 100644 --- a/samples/excel/16-custom-functions/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -331,4 +331,4 @@ libraries: | @types/office-js core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index cdaf1ccb0..1e9740051 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -30,4 +30,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js \ No newline at end of file + core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/web-call-function.yaml b/samples/excel/16-custom-functions/web-call-function.yaml index faf57fbdb..6d25d23c8 100644 --- a/samples/excel/16-custom-functions/web-call-function.yaml +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -30,4 +30,4 @@ script: libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js - core-js@2.4.1/client/core.min.js \ No newline at end of file + core-js@2.4.1/client/core.min.js diff --git a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml index dff02a2e5..94f01a2ff 100644 --- a/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml +++ b/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts name: Using custom XML parts -description: 'Creates, sets, gets, and deletes a custom XML part.' +description: Creates, sets, gets, and deletes a custom XML part. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index 6bf4d1544..9df023ebf 100644 --- a/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml +++ b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -133,4 +133,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-basic-types.yaml b/samples/excel/20-data-types/data-types-basic-types.yaml index 8c74f2173..b72203a60 100644 --- a/samples/excel/20-data-types/data-types-basic-types.yaml +++ b/samples/excel/20-data-types/data-types-basic-types.yaml @@ -359,4 +359,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index 46adc2e94..93ceb5e26 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -225,4 +225,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-entity-icons.yaml b/samples/excel/20-data-types/data-types-entity-icons.yaml index 53cecd46b..704894f33 100644 --- a/samples/excel/20-data-types/data-types-entity-icons.yaml +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -111,4 +111,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-entity-values.yaml b/samples/excel/20-data-types/data-types-entity-values.yaml index 9383863f7..793b288d0 100644 --- a/samples/excel/20-data-types/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-data-types-entity-values name: 'Data types: Create entity cards from data in a table' -description: 'This sample shows how to create entity cards for each row in a table. An entity is a container for data types, similar to an object in object-oriented programming.' +description: This sample shows how to create entity cards for each row in a table. An entity is a container for data types, similar to an object in object-oriented programming. host: EXCEL api_set: ExcelApi: '1.16' diff --git a/samples/excel/20-data-types/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index bcf1d28f6..c5dfce56c 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -1,7 +1,7 @@ order: 4 id: excel-data-types-error-values name: 'Data types: Set and change error values' -description: 'This sample shows how to set a cell value to an error data type, and then update the value of cells that contain an error data type.' +description: This sample shows how to set a cell value to an error data type, and then update the value of cells that contain an error data type. host: EXCEL api_set: ExcelApi: '1.16' diff --git a/samples/excel/20-data-types/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml index 12770b416..9c5e243aa 100644 --- a/samples/excel/20-data-types/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/20-data-types/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml index 89a45c742..266750743 100644 --- a/samples/excel/20-data-types/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -1,7 +1,7 @@ order: 7 id: excel-data-types-references name: 'Data types: Entity values with references' -description: 'This sample shows how to create entity values with references to other entity values. An entity value is a container for data, and this container can reference (or contain) other entities within the original entity. One entity can contain multiple additional entities.' +description: This sample shows how to create entity values with references to other entity values. An entity value is a container for data, and this container can reference (or contain) other entities within the original entity. One entity can contain multiple additional entities. host: EXCEL api_set: ExcelApi: '1.16' diff --git a/samples/excel/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index 68b7f2fd1..fb64e6d37 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -186,4 +186,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index 23d6089f9..4d344d30b 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-data-validation name: Data validation -description: 'Sets data validation rules on ranges, prompts users to enter valid data, and displays messages when invalid data is entered.' +description: Sets data validation rules on ranges, prompts users to enter valid data, and displays messages when invalid data is entered. host: EXCEL api_set: ExcelApi: '1.8' diff --git a/samples/excel/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index 12d02e8bf..0901f91c1 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -133,4 +133,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/26-document/get-file-in-slices-async.yaml b/samples/excel/26-document/get-file-in-slices-async.yaml index 414ccec06..defcd7050 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -211,4 +211,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://unpkg.com/base64-js@1.2.1/base64js.min.js \ No newline at end of file + https://unpkg.com/base64-js@1.2.1/base64js.min.js diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index 41deb4f44..da1c1a4f3 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -172,4 +172,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index d395f6c0c..931b58c9b 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -106,4 +106,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 6bf0e7f7b..468506f12 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -109,4 +109,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/event-column-and-row-sort.yaml b/samples/excel/30-events/event-column-and-row-sort.yaml index 9dda33d2c..046886aff 100644 --- a/samples/excel/30-events/event-column-and-row-sort.yaml +++ b/samples/excel/30-events/event-column-and-row-sort.yaml @@ -197,4 +197,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml index b6b7c3c03..19f110f30 100644 --- a/samples/excel/30-events/event-worksheet-single-click.yaml +++ b/samples/excel/30-events/event-worksheet-single-click.yaml @@ -67,4 +67,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 6ac14fd45..a9378e940 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -171,4 +171,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 49c754f27..1c0c78280 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-events-chartcollection-added-activated name: Chart collection events -description: 'Registers event handlers on a worksheet''s chart collection that run when any chart within is activated or deactivated, as well as when charts are added to or deleted from the collection.' +description: Registers event handlers on a worksheet's chart collection that run when any chart within is activated or deactivated, as well as when charts are added to or deleted from the collection. host: EXCEL api_set: ExcelApi: '1.8' diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index fbf4d77d1..89be09ffb 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -1,7 +1,7 @@ order: 4 id: excel-events-comments name: Comment events -description: 'Registers event handlers to listen for comment additions, changes, and deletions.' +description: Registers event handlers to listen for comment additions, changes, and deletions. host: EXCEL api_set: ExcelAPI: '1.12' diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index d7711daf1..681294088 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -178,4 +178,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index 89e3f9d1f..e7c81a18d 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -122,4 +122,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index 4f686e1ce..e7896c2a1 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -158,4 +158,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index a382bcdf7..786274970 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -154,4 +154,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml index 72c944193..8f1f6ea6a 100644 --- a/samples/excel/30-events/events-workbook-activated.yaml +++ b/samples/excel/30-events/events-workbook-activated.yaml @@ -70,4 +70,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml index b158f3c05..bf85695b0 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -1,7 +1,7 @@ order: 14 id: excel-events-workbook-and-worksheet-collection name: Workbook and worksheet collection events -description: 'Registers event handlers that run when a worksheet is added, activated, or deactivated, or when the settings of a workbook are changed.' +description: Registers event handlers that run when a worksheet is added, activated, or deactivated, or when the settings of a workbook are changed. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index 132db9fe9..636bc2b52 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -102,4 +102,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index cbba6505e..ed4c09408 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -1,7 +1,7 @@ order: 15 id: excel-events-worksheet name: Worksheet events -description: 'Registers event handlers that run when data is changed in worksheet, the selected range changes in a worksheet, or the worksheet is recalculated.' +description: Registers event handlers that run when data is changed in worksheet, the selected range changes in a worksheet, or the worksheet is recalculated. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index 7e8108677..ab7203010 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -146,4 +146,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/34-named-item/create-and-remove-named-item.yaml b/samples/excel/34-named-item/create-and-remove-named-item.yaml index 5cf8f5325..eadc487fa 100644 --- a/samples/excel/34-named-item/create-and-remove-named-item.yaml +++ b/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-named-item-create-and-remove-named-item -name: 'Create, access, and remove' -description: 'Creates, accesses, and removes named items in a worksheet.' +name: Create, access, and remove +description: Creates, accesses, and removes named items in a worksheet. host: EXCEL api_set: ExcelApi: '1.4' diff --git a/samples/excel/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 73235255d..331a88f32 100644 --- a/samples/excel/34-named-item/update-named-item.yaml +++ b/samples/excel/34-named-item/update-named-item.yaml @@ -126,4 +126,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 8fb52a748..d66f74eb9 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -201,4 +201,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index b33e40bc4..ba7020057 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -265,4 +265,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index aec8fbdae..5948578ce 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -220,4 +220,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml index 1d986789a..5748fce28 100644 --- a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml +++ b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -187,4 +187,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index 61e561818..bb857275b 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -315,4 +315,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml index 2e45c708c..703c6bcc4 100644 --- a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -313,4 +313,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-refresh.yaml b/samples/excel/38-pivottable/pivottable-refresh.yaml index 45a15746e..13f6fb0b5 100644 --- a/samples/excel/38-pivottable/pivottable-refresh.yaml +++ b/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -130,4 +130,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 587b6562b..1b057f748 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -204,4 +204,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index 2da0cde5e..238b79392 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -124,4 +124,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index 700c067bf..bdf6baafb 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -183,4 +183,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/dynamic-arrays.yaml b/samples/excel/42-range/dynamic-arrays.yaml index 821802200..3d98c24ec 100644 --- a/samples/excel/42-range/dynamic-arrays.yaml +++ b/samples/excel/42-range/dynamic-arrays.yaml @@ -174,4 +174,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 7256c9820..2507db642 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -1,7 +1,7 @@ order: 8 id: excel-range-insert-delete-and-clear-range -name: 'Insert, delete, and clear' -description: 'Inserts, deletes, and clears a range.' +name: Insert, delete, and clear +description: Inserts, deletes, and clears a range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/42-range/outline.yaml b/samples/excel/42-range/outline.yaml index 206088be3..e4d261065 100644 --- a/samples/excel/42-range/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -229,4 +229,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 25e935188..0f694b5e1 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -206,4 +206,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index 4b08ddc0a..1b3297ce9 100644 --- a/samples/excel/42-range/range-areas.yaml +++ b/samples/excel/42-range/range-areas.yaml @@ -1,7 +1,7 @@ order: 3 id: excel-range-areas name: Discontiguous ranges (RangeAreas) and special cells -description: 'Creates and uses RangeAreas, which are sets of ranges that need not be contiguous, through user selection and programmatic selection of special cells.' +description: Creates and uses RangeAreas, which are sets of ranges that need not be contiguous, through user selection and programmatic selection of special cells. host: EXCEL api_set: ExcelApi: '1.9' diff --git a/samples/excel/42-range/range-auto-fill.yaml b/samples/excel/42-range/range-auto-fill.yaml index aefdda342..b0c331649 100644 --- a/samples/excel/42-range/range-auto-fill.yaml +++ b/samples/excel/42-range/range-auto-fill.yaml @@ -145,4 +145,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index a207ebd8e..ef4ee5a4d 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -161,4 +161,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 64c20d1da..391b6ef7a 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -216,4 +216,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-dependents.yaml b/samples/excel/42-range/range-dependents.yaml index b09070dd6..f798dd5e6 100644 --- a/samples/excel/42-range/range-dependents.yaml +++ b/samples/excel/42-range/range-dependents.yaml @@ -165,4 +165,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml index 339653430..8942430fe 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -158,4 +158,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 857401f22..1fde3e616 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -164,4 +164,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index 1f28f89a2..d4f020020 100644 --- a/samples/excel/42-range/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -1,7 +1,7 @@ order: 20 id: excel-range-get-range-edge name: Select used range edge -description: 'This sample shows how to select the edges of the used range, based on the currently selected range.' +description: This sample shows how to select the edges of the used range, based on the currently selected range. host: EXCEL api_set: ExcelAPI: '1.13' diff --git a/samples/excel/42-range/range-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index a8d0c18c2..035a8cb50 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -1,7 +1,7 @@ order: 7 id: excel-range-hyperlink name: Hyperlinks -description: 'Creates, updates, and clears hyperlinks in a range.' +description: Creates, updates, and clears hyperlinks in a range. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/42-range/range-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml index c43bd925a..62db7860f 100644 --- a/samples/excel/42-range/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -128,4 +128,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index f21fd7176..24dcea2e1 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -1,7 +1,7 @@ order: 10 id: excel-range-range-relationships name: Range relationships -description: 'Shows relationships between ranges, such as bounding rectangles and intersections.' +description: Shows relationships between ranges, such as bounding rectangles and intersections. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/42-range/range-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index f89dbda7c..c6fd18196 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -122,4 +122,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index d10058503..a24409415 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -116,4 +116,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 6ae16734d..5b3dda01b 100644 --- a/samples/excel/42-range/selected-range.yaml +++ b/samples/excel/42-range/selected-range.yaml @@ -77,4 +77,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 5e44ab46d..78c79eefd 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -230,4 +230,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index 67e2fdaaa..3254d3bb1 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -1,7 +1,7 @@ order: 14 id: excel-range-style name: Style -description: 'Creates a custom style, applies a custom and built-in styles to a range, gets style properties, and deletes the custom style.' +description: Creates a custom style, applies a custom and built-in styles to a range, gets style properties, and deletes the custom style. author: siewmoi host: EXCEL api_set: diff --git a/samples/excel/42-range/used-range.yaml b/samples/excel/42-range/used-range.yaml index d1761bbfe..643156e10 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -138,4 +138,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 2c07a8a7f..13f4500fb 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -133,4 +133,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-get-active.yaml b/samples/excel/44-shape/shape-get-active.yaml index c51fb0d3e..8b6ff0cd6 100644 --- a/samples/excel/44-shape/shape-get-active.yaml +++ b/samples/excel/44-shape/shape-get-active.yaml @@ -172,4 +172,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index aa3b2d605..6fd30d1ad 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index 76da24989..a880febde 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -132,4 +132,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index b674aded7..bab2c6c3b 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -163,4 +163,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 412051e0e..3193d3338 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -138,4 +138,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml index 4b5cf701f..c8a21f8e0 100644 --- a/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml +++ b/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml @@ -168,4 +168,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index 7c458bb57..bca2b65b2 100644 --- a/samples/excel/46-table/create-table.yaml +++ b/samples/excel/46-table/create-table.yaml @@ -80,4 +80,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index 781dc4ac6..d0efc48ee 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -125,4 +125,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 521c164d6..1e40a5350 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -101,4 +101,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 118e50b13..591ba0d07 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -114,4 +114,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml index 027847e85..23eb4f02c 100644 --- a/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml +++ b/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml @@ -137,4 +137,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 30e9bb971..70d69c39f 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -142,4 +142,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/resize-table.yaml b/samples/excel/46-table/resize-table.yaml index 1001e0bf0..2b15b90cd 100644 --- a/samples/excel/46-table/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index 46bc63d41..43b994cf8 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -108,4 +108,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/create-get-change-delete-settings.yaml b/samples/excel/50-workbook/create-get-change-delete-settings.yaml index 6c5dcc12d..3797bcda7 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-settings-create-get-change-delete-settings name: Add-in settings -description: 'Creates, gets, changes, and deletes settings that are unique to the specific workbook and add-in combination.' +description: Creates, gets, changes, and deletes settings that are unique to the specific workbook and add-in combination. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index c5a6315ac..bd56088c4 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -1,7 +1,7 @@ order: 4 id: excel-workbook-create-workbook name: Create workbook -description: 'Creates a new, empty workbook and creates a new workbook by copying an existing one.' +description: Creates a new, empty workbook and creates a new workbook by copying an existing one. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/50-workbook/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml index cde8c9289..036894f16 100644 --- a/samples/excel/50-workbook/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -136,4 +136,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml index 8de992922..1ba143d4a 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index e22d27213..a87a43384 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -254,4 +254,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-built-in-functions.yaml b/samples/excel/50-workbook/workbook-built-in-functions.yaml index 3490d043b..48e46b992 100644 --- a/samples/excel/50-workbook/workbook-built-in-functions.yaml +++ b/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -117,4 +117,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-calculation.yaml b/samples/excel/50-workbook/workbook-calculation.yaml index 2d3b8aaea..02235ae2e 100644 --- a/samples/excel/50-workbook/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -188,4 +188,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index 66b67a49c..10e5df770 100644 --- a/samples/excel/50-workbook/workbook-get-active-cell.yaml +++ b/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -63,4 +63,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 7af9e084f..561a7d875 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -91,4 +91,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/50-workbook/workbook-save-and-close.yaml b/samples/excel/50-workbook/workbook-save-and-close.yaml index 2e126d2c7..817908238 100644 --- a/samples/excel/50-workbook/workbook-save-and-close.yaml +++ b/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -85,4 +85,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml index 1c09d834a..1425fe93d 100644 --- a/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml +++ b/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-worksheet-add-delete-rename-move-worksheet -name: 'Add, delete, rename, and move worksheet' -description: 'Adds, deletes, renames, and moves a worksheet.' +name: Add, delete, rename, and move worksheet +description: Adds, deletes, renames, and moves a worksheet. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index bc359b69d..7a25135b1 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -75,4 +75,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index d179c4d50..180475d1d 100644 --- a/samples/excel/54-worksheet/list-worksheets.yaml +++ b/samples/excel/54-worksheet/list-worksheets.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml index 3bf6f0473..fc9fca872 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -159,4 +159,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index 11f1917e8..ab336da87 100644 --- a/samples/excel/54-worksheet/tab-color.yaml +++ b/samples/excel/54-worksheet/tab-color.yaml @@ -105,4 +105,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index a4e887a21..8434addeb 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -209,4 +209,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 1fe3d9318..7053c450a 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -100,4 +100,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index f47475263..6278ab9f6 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -144,4 +144,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index 015d907c2..d1c4f5dcb 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -1,7 +1,7 @@ order: 6 id: excel-worksheet-freeze-panes name: Frozen panes -description: 'Freezes columns, rows, and a range of cells. Gets the address of the frozen pane. Unfreezes frozen panes.' +description: Freezes columns, rows, and a range of cells. Gets the address of the frozen pane. Unfreezes frozen panes. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index 3d4a283ae..46beed753 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -207,4 +207,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index a26ccb9e3..95f7ff500 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -1,7 +1,7 @@ order: 7 id: excel-worksheet-worksheet-range-cell name: Get range or cell -description: 'Gets the used range, the entire range of a worksheet, the specified range, and the specified cell.' +description: Gets the used range, the entire range of a worksheet, the specified range, and the specified cell. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index 928d8a2fe..aeff5bbe7 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -120,4 +120,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml index a8ba2aa1b..1510dc666 100644 --- a/samples/excel/90-scenarios/currency-converter.yaml +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -184,4 +184,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css moment@2.18.1 - moment-msdate@0.2.2 \ No newline at end of file + moment-msdate@0.2.2 diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index e74a52b5c..9a48bb487 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -132,4 +132,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index 2ae8fed6f..f7af6e94a 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-performance-optimization name: Performance optimization -description: 'Optimizes performance by untracking ranges, turning off screen painting, and switching the calculation mode.' +description: Optimizes performance by untracking ranges, turning off screen painting, and switching the calculation mode. host: EXCEL api_set: ExcelApi: '1.9' diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 47027784b..88a83e495 100644 --- a/samples/excel/90-scenarios/report-generation.yaml +++ b/samples/excel/90-scenarios/report-generation.yaml @@ -1,7 +1,7 @@ order: 2 id: excel-scenarios-report-generation name: Report generation -description: 'Writes data to the workbook, reads and applies basic formatting, and adds a chart bound to that data.' +description: Writes data to the workbook, reads and applies basic formatting, and adds a chart bound to that data. author: OfficeDev host: EXCEL api_set: diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 7c8c816b6..531ca8299 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -136,4 +136,4 @@ libraries: |- moment@2.18.1 - moment-msdate@0.2.2 \ No newline at end of file + moment-msdate@0.2.2 diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index 456c044bc..f4a2d1692 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -148,4 +148,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index d4905cfa3..cf94c9c6d 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -234,4 +234,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css https://unpkg.com/tinycolor2@1.4.1/tinycolor.js - @types/tinycolor2 \ No newline at end of file + @types/tinycolor2 diff --git a/samples/excel/99-just-for-fun/path-finder-game.yaml b/samples/excel/99-just-for-fun/path-finder-game.yaml index 8ea6024a2..3388e0af9 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -224,4 +224,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index f946e71c8..723400183 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -189,4 +189,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 556180e9d..2ca35b401 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -791,4 +791,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js \ No newline at end of file + https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index c68f87b37..3198ff5da 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 603dd6062..0b94d1a3f 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 5834cfab5..0933e6d36 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -1,6 +1,6 @@ id: outlook-roaming-settings-roaming-settings name: Use add-in settings -description: 'Gets, sets, saves, and removes add-in roaming settings.' +description: Gets, sets, saves, and removes add-in roaming settings. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index 4ebc0f45c..b928ad2fa 100644 --- a/samples/outlook/15-item-custom-properties/load-set-get-save.yaml +++ b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -1,6 +1,6 @@ id: outlook-item-custom-properties-load-set-get-save name: Work with item custom properties -description: 'Gets the custom properties that the add-in placed on the current item, sets a new one, gets it, removes it, and saves all custom properties back to the item.' +description: Gets the custom properties that the add-in placed on the current item, sets a new one, gets it, removes it, and saves all custom properties back to the item. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/samples/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml index a8b5ad9e6..f2703f677 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/append-text-on-send.yaml b/samples/outlook/20-item-body/append-text-on-send.yaml index b571b4332..5c025a7ef 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/get-body-format.yaml b/samples/outlook/20-item-body/get-body-format.yaml index b1cbc7506..47d4cf236 100644 --- a/samples/outlook/20-item-body/get-body-format.yaml +++ b/samples/outlook/20-item-body/get-body-format.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml index 8334e9509..1a0e40c01 100644 --- a/samples/outlook/20-item-body/get-selected-data.yaml +++ b/samples/outlook/20-item-body/get-selected-data.yaml @@ -53,4 +53,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml index 92a893f35..3d282886b 100644 --- a/samples/outlook/20-item-body/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml index 43c3bbc13..d06c16a6d 100644 --- a/samples/outlook/20-item-body/prepend-text-to-item-body.yaml +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -71,4 +71,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index 6ee568518..34d024049 100644 --- a/samples/outlook/20-item-body/replace-selected-text.yaml +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -75,4 +75,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/25-item-save-and-close/close-async.yaml b/samples/outlook/25-item-save-and-close/close-async.yaml index 109be2bbd..3fe6ed8c0 100644 --- a/samples/outlook/25-item-save-and-close/close-async.yaml +++ b/samples/outlook/25-item-save-and-close/close-async.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml index 0acf244d8..46ee419e8 100644 --- a/samples/outlook/25-item-save-and-close/save.yaml +++ b/samples/outlook/25-item-save-and-close/save.yaml @@ -50,4 +50,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml index 0854d08d0..389395766 100644 --- a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -121,4 +121,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml index abcd7294b..3a740a408 100644 --- a/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml @@ -48,4 +48,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml index 2a87d7879..42763337a 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml index dd87d8298..518027c02 100644 --- a/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml @@ -46,4 +46,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml index 9fd59b1ec..4bbed2e4b 100644 --- a/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml index 0e6a7d54a..1dd835d97 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml @@ -45,4 +45,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml index 8cec1f366..26113821c 100644 --- a/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml index 2766205fe..3292f062d 100644 --- a/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml index ccabbe93a..4fe385b64 100644 --- a/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml @@ -45,4 +45,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml index 372652cfa..4b32e4907 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml index 48b2b66a6..b55dea048 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml index dcf2c48f8..bc9aba7ac 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -80,4 +80,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml index 5773f7fc4..8257b8c87 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -80,4 +80,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml index 8ff0b7f56..c390cf2ac 100644 --- a/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml index 37807769a..dbb6417e7 100644 --- a/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml +++ b/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -83,4 +83,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 84cdf8208..0748aa395 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -1,6 +1,6 @@ id: outlook-notifications-add-getall-remove name: Work with notification messages -description: 'Adds different kinds of notification messages, gets all notifications, and replaces and removes an individual notification message.' +description: Adds different kinds of notification messages, gets all notifications, and replaces and removes an individual notification message. host: OUTLOOK api_set: Mailbox: '1.10' diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index 4896c2b54..cb2133d03 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -1,6 +1,6 @@ id: outlook-attachments-attachments-compose name: Manipulate attachments (Item Compose) -description: 'Adds, gets, and removes attachments from a message or an appointment in Compose mode.' +description: Adds, gets, and removes attachments from a message or an appointment in Compose mode. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index beee2236a..1e1cc2b27 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -104,4 +104,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index e8c1b3872..005ae16ed 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -56,4 +56,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index 6fcbcedc6..5c8e29fc7 100644 --- a/samples/outlook/45-categories/work-with-categories.yaml +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-categories-work-with-categories name: Work with item categories -description: 'Gets, adds, and removes categories assigned to the item.' +description: Gets, adds, and removes categories assigned to the item. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index fbe2aec19..3fd458afd 100644 --- a/samples/outlook/45-categories/work-with-master-categories.yaml +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -1,7 +1,7 @@ order: 2 id: outlook-categories-work-with-master-categories name: Work with the categories master list -description: 'Gets, adds, and removes categories in the master list for the mailbox.' +description: Gets, adds, and removes categories in the master list for the mailbox. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index 00b300640..ea91e9dc3 100644 --- a/samples/outlook/50-recurrence/get-recurrence-read.yaml +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/50-recurrence/get-series-id.yaml b/samples/outlook/50-recurrence/get-series-id.yaml index a67e04c8a..f702e3b58 100644 --- a/samples/outlook/50-recurrence/get-series-id.yaml +++ b/samples/outlook/50-recurrence/get-series-id.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml index b6644d8a1..f8a417a86 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -96,4 +96,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index c3e0b1e82..0539b19ec 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index 80e96c502..7fb9f46e1 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 7b55e2860..770c12e9a 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -85,4 +85,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 7ec9c407c..5aca34788 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-display-items-display-new-message name: Create a new message -description: 'Opens a new message form with a sample content, recipients, and an inline image attachment' +description: Opens a new message form with a sample content, recipients, and an inline image attachment host: OUTLOOK api_set: Mailbox: '1.9' diff --git a/samples/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index 4f8dd7af6..1c8d46bfb 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -77,4 +77,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/55-display-items/display-reply-with-attachments.yaml b/samples/outlook/55-display-items/display-reply-with-attachments.yaml index f6a140f8e..a8c28a08d 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -206,4 +206,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml index 3eff3cfa4..8b0db6aaa 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -91,4 +91,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml index 6cc2ea515..beb6aef86 100644 --- a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -74,4 +74,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml index 7ebaf45f8..a38fcc94e 100644 --- a/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml +++ b/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -57,4 +57,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml index 2c6432fe6..12d2e2a8a 100644 --- a/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml +++ b/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -66,4 +66,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml index 9a82619a5..9869ae0e5 100644 --- a/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml +++ b/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -1,6 +1,6 @@ id: outlook-mime-headers-manage-custom-internet-headers-message-compose name: Work with custom internet headers -description: 'Sets, gets, and removes custom internet headers on a message in Compose mode.' +description: Sets, gets, and removes custom internet headers on a message in Compose mode. host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/75-regex-matches/contextual.yaml b/samples/outlook/75-regex-matches/contextual.yaml index f83c31234..4be7a3f0a 100644 --- a/samples/outlook/75-regex-matches/contextual.yaml +++ b/samples/outlook/75-regex-matches/contextual.yaml @@ -1,5 +1,5 @@ id: outlook-regex-matches-contextual -name: 'Get regex matches (Item Read, contextual)' +name: Get regex matches (Item Read, contextual) description: Gets regex matches when the add-in is opened as a contextual add-in. host: OUTLOOK api_set: diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml index c7cba1a0c..07a5a11d6 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -75,4 +75,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml index c0744d2be..57259939d 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml @@ -79,4 +79,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml index 7b05c488c..90a24f5f7 100644 --- a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-tokens-and-service-calls-ids-and-urls name: Endpoint URLs and item IDs -description: 'Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item IDs, and converts item IDs for different protocols.' +description: Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item IDs, and converts item IDs for different protocols. host: OUTLOOK api_set: Mailbox: '1.5' diff --git a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml index 1b023e5a6..a4fd49450 100644 --- a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml index e008862db..90feb4ccb 100644 --- a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml @@ -67,4 +67,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml index e7e7e9cb3..986a3bcbc 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -55,4 +55,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml index 4ccdc8fd4..b37f4f878 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml index 186e35414..c5861ddc6 100644 --- a/samples/outlook/90-other-item-apis/delay-message-delivery.yaml +++ b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -112,4 +112,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml index e03300997..31a6bfe6b 100644 --- a/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml +++ b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -1,7 +1,7 @@ order: 13 id: outlook-other-item-apis-get-add-remove-enhancedlocation-appointment name: Manage the locations of an appointment -description: 'Gets, adds, and removes locations on an appointment (enhancedLocation API).' +description: Gets, adds, and removes locations on an appointment (enhancedLocation API). host: OUTLOOK api_set: Mailbox: '1.8' diff --git a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml index 047455858..7b5fee263 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-conversation-index.yaml b/samples/outlook/90-other-item-apis/get-conversation-index.yaml index f3ed7d215..033a58ce8 100644 --- a/samples/outlook/90-other-item-apis/get-conversation-index.yaml +++ b/samples/outlook/90-other-item-apis/get-conversation-index.yaml @@ -58,4 +58,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml index 757d0bec4..da459a365 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml index da56959ec..dd97e6de5 100644 --- a/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml +++ b/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml index 35bfa5c04..dea58a0d0 100644 --- a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml +++ b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-eml-format.yaml b/samples/outlook/90-other-item-apis/get-eml-format.yaml index aae4995c2..6d06770a7 100644 --- a/samples/outlook/90-other-item-apis/get-eml-format.yaml +++ b/samples/outlook/90-other-item-apis/get-eml-format.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-end-read.yaml b/samples/outlook/90-other-item-apis/get-end-read.yaml index 63c196abe..e66f3af01 100644 --- a/samples/outlook/90-other-item-apis/get-end-read.yaml +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-in-reply-to.yaml b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml index 5128ab698..02a3b9d8a 100644 --- a/samples/outlook/90-other-item-apis/get-in-reply-to.yaml +++ b/samples/outlook/90-other-item-apis/get-in-reply-to.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml index cdf9a999b..37a258bd1 100644 --- a/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml +++ b/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-class-async.yaml b/samples/outlook/90-other-item-apis/get-item-class-async.yaml index 8d232618c..7c221cfce 100644 --- a/samples/outlook/90-other-item-apis/get-item-class-async.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-async.yaml @@ -53,4 +53,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-class-read.yaml b/samples/outlook/90-other-item-apis/get-item-class-read.yaml index 8638e4f3c..70e0759ba 100644 --- a/samples/outlook/90-other-item-apis/get-item-class-read.yaml +++ b/samples/outlook/90-other-item-apis/get-item-class-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-item-type.yaml b/samples/outlook/90-other-item-apis/get-item-type.yaml index fb9a71d53..806a76a70 100644 --- a/samples/outlook/90-other-item-apis/get-item-type.yaml +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml b/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml index 397604bbd..a568ae296 100644 --- a/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml +++ b/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml @@ -1,6 +1,6 @@ order: 31 id: outlook-other-item-apis-get-loaded-message-properties -name: 'Get properties of a loaded message (Message Compose, Message Read)' +name: Get properties of a loaded message (Message Compose, Message Read) description: Gets the properties of the currently loaded message. host: OUTLOOK api_set: diff --git a/samples/outlook/90-other-item-apis/get-location-read.yaml b/samples/outlook/90-other-item-apis/get-location-read.yaml index 77b04d4ad..8647470b2 100644 --- a/samples/outlook/90-other-item-apis/get-location-read.yaml +++ b/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-message-properties.yaml b/samples/outlook/90-other-item-apis/get-message-properties.yaml index 223509302..652c9e01b 100644 --- a/samples/outlook/90-other-item-apis/get-message-properties.yaml +++ b/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -1,6 +1,6 @@ order: 23 id: outlook-other-item-apis-get-message-properties -name: 'Get properties of selected messages (Message Compose, Message Read)' +name: Get properties of selected messages (Message Compose, Message Read) description: Gets the properties of multiple selected messages. host: OUTLOOK api_set: diff --git a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml index e531c0cfe..38c75c1e6 100644 --- a/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml index c54f8bf46..22f02f686 100644 --- a/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml @@ -73,4 +73,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml index 7d2617559..10abec6e5 100644 --- a/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml index 31735089f..bccf5570f 100644 --- a/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml +++ b/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -69,4 +69,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml index ad3713570..d58d33125 100644 --- a/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml +++ b/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -66,4 +66,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml index 7d8efcc66..1a00f3831 100644 --- a/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml +++ b/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -65,4 +65,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-start-read.yaml b/samples/outlook/90-other-item-apis/get-start-read.yaml index bee75989c..bc2cd169c 100644 --- a/samples/outlook/90-other-item-apis/get-start-read.yaml +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/get-subject-read.yaml b/samples/outlook/90-other-item-apis/get-subject-read.yaml index c9146810a..08f83b678 100644 --- a/samples/outlook/90-other-item-apis/get-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-subject-read.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/item-id-compose.yaml b/samples/outlook/90-other-item-apis/item-id-compose.yaml index 8e44d1b6e..b2407b014 100644 --- a/samples/outlook/90-other-item-apis/item-id-compose.yaml +++ b/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -52,4 +52,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/send-async.yaml b/samples/outlook/90-other-item-apis/send-async.yaml index da6d56dc9..41ef2e0a8 100644 --- a/samples/outlook/90-other-item-apis/send-async.yaml +++ b/samples/outlook/90-other-item-apis/send-async.yaml @@ -50,4 +50,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/session-data-apis.yaml b/samples/outlook/90-other-item-apis/session-data-apis.yaml index 213e66b38..d89b45d0c 100644 --- a/samples/outlook/90-other-item-apis/session-data-apis.yaml +++ b/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -1,7 +1,7 @@ order: 20 id: outlook-other-item-apis-session-data-apis name: Work with session data APIs (Compose) -description: 'Sets, gets, gets all, removes, and clears session data in Compose mode.' +description: Sets, gets, gets all, removes, and clears session data in Compose mode. host: OUTLOOK api_set: Mailbox: '1.11' diff --git a/samples/outlook/90-other-item-apis/set-selected-data.yaml b/samples/outlook/90-other-item-apis/set-selected-data.yaml index 8a0af7b5c..7d2be55ff 100644 --- a/samples/outlook/90-other-item-apis/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -51,4 +51,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml index 3177c168b..63cfa93df 100644 --- a/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml +++ b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -1,7 +1,7 @@ order: 19 id: outlook-other-item-apis-work-with-client-signatures name: Work with client signatures (Compose) -description: 'Checks if the client signature is enabled, disables the client signature, gets the compose type, and sets a signature in Compose mode.' +description: Checks if the client signature is enabled, disables the client signature, gets the compose type, and sets a signature in Compose mode. host: OUTLOOK api_set: Mailbox: '1.10' diff --git a/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml index 7cf1ad0a1..d9d8c44aa 100644 --- a/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml +++ b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -66,4 +66,4 @@ libraries: |- @types/office-js-preview https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml index cdac8aa8d..fcb27dd05 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -83,4 +83,4 @@ libraries: |- @types/office-js-preview https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index a07f9456e..903944372 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 2ca0fd607..9fce2f953 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index c3107a43e..304c0f1d5 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -44,4 +44,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index 0a15973de..cbf9fc811 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -42,4 +42,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index 678eb64d7..debc2bff0 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -1,6 +1,6 @@ id: powerpoint-create-presentation name: Create presentation -description: 'Creates a new, empty presentation and creates a new presentation by copying an existing one.' +description: Creates a new, empty presentation and creates a new presentation by copying an existing one. author: OfficeDev host: POWERPOINT api_set: diff --git a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index f8f486309..d10d316b4 100644 --- a/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml +++ b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -64,4 +64,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index f0677e897..bc432ec35 100644 --- a/samples/powerpoint/images/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -57,4 +57,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/images/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml index 4cbc8c87c..d3d66522e 100644 --- a/samples/powerpoint/images/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -61,4 +61,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index e2883fb55..79139a157 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -248,4 +248,4 @@ libraries: |- https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css - https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js \ No newline at end of file + https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js diff --git a/samples/powerpoint/shapes/add-modify-tables.yaml b/samples/powerpoint/shapes/add-modify-tables.yaml index c0b652d34..df292f525 100644 --- a/samples/powerpoint/shapes/add-modify-tables.yaml +++ b/samples/powerpoint/shapes/add-modify-tables.yaml @@ -414,4 +414,4 @@ libraries: |- office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/powerpoint/shapes/binding-to-shapes.yaml b/samples/powerpoint/shapes/binding-to-shapes.yaml index 10e205150..6059ca2ba 100644 --- a/samples/powerpoint/shapes/binding-to-shapes.yaml +++ b/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -367,4 +367,4 @@ libraries: | office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 41790cdec..4e24db0c5 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -1,6 +1,6 @@ order: 2 id: powerpoint-shapes-get-set-shapes -name: 'Get, set, load, and save shapes' +name: Get, set, load, and save shapes description: Get and set one or more selected shapes. Load and save one or more shapes. host: POWERPOINT api_set: diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 9bca1519a..747202762 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -1,7 +1,7 @@ order: 3 id: powerpoint-shapes-get-shapes-by-type name: Select shapes by type -description: 'Gets shapes in a slide based on their type, such as GeometricShape or Line.' +description: Gets shapes in a slide based on their type, such as GeometricShape or Line. host: POWERPOINT api_set: PowerPointApi: '1.4' diff --git a/samples/powerpoint/shapes/group-ungroup-shapes.yaml b/samples/powerpoint/shapes/group-ungroup-shapes.yaml index 17592fc3b..6d8e8f3fe 100644 --- a/samples/powerpoint/shapes/group-ungroup-shapes.yaml +++ b/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -190,4 +190,4 @@ libraries: |- @types/office-js https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 80a1cc305..da2850890 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -1,7 +1,7 @@ order: 1 id: powerpoint-shapes -name: 'Insert shape, line, and text box' -description: 'Inserts geometric shapes, lines, and text boxes to a slide.' +name: Insert shape, line, and text box +description: Inserts geometric shapes, lines, and text boxes to a slide. host: POWERPOINT api_set: PowerPointApi: '1.4' diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 8a4027b13..ab7faeaa3 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -101,4 +101,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/slide-management/export-import-slide.yaml b/samples/powerpoint/slide-management/export-import-slide.yaml index 36711aca3..20ba32a3a 100644 --- a/samples/powerpoint/slide-management/export-import-slide.yaml +++ b/samples/powerpoint/slide-management/export-import-slide.yaml @@ -303,4 +303,4 @@ libraries: |- office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js - @types/core-js \ No newline at end of file + @types/core-js diff --git a/samples/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index b4a63000f..9010a097e 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -1,6 +1,6 @@ order: 4 id: powerpoint-slide-management-get-set-slides -name: 'Get, set, load, and save slides' +name: Get, set, load, and save slides description: Get and set one or more selected slides. Load and save one or more slides. host: POWERPOINT api_set: diff --git a/samples/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index 1e86a7752..9a83ed396 100644 --- a/samples/powerpoint/slide-management/get-slide-metadata.yaml +++ b/samples/powerpoint/slide-management/get-slide-metadata.yaml @@ -1,7 +1,7 @@ order: 3 id: powerpoint-basics-get-slide-metadata name: Get slide metadata -description: 'Gets the title, index, and ID of the selected slides.' +description: Gets the title, index, and ID of the selected slides. author: OfficeDev host: POWERPOINT api_set: {} diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 5ce708484..399523abf 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -113,4 +113,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 94b85c9c3..45aa7828a 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -201,4 +201,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index b7391c145..fa6cb92f2 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -1,7 +1,7 @@ order: 1 id: powerpoint-text-get-set-textrange name: Work with text range selections -description: 'Get, set, load, and save text range selections.' +description: Get, set, load, and save text range selections. host: POWERPOINT api_set: PowerPointApi: '1.5' diff --git a/samples/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index f8d4d189a..9a1b68aa0 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -34,4 +34,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/project/default.yaml b/samples/project/default.yaml index c73af1eeb..11f70dd5e 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -42,4 +42,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index a9cdf506b..29b33f94a 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -60,4 +60,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index 6aab3ed8e..d399bdfd1 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -61,4 +61,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index d1b374d41..02de4d908 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -47,4 +47,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml index 2ee82194f..26ab14665 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -1,7 +1,7 @@ order: 2 id: word-content-controls-content-control-onadded-event name: On adding content controls -description: 'Registers, triggers, and deregisters onAdded event that tracks the addition of content controls.' +description: Registers, triggers, and deregisters onAdded event that tracks the addition of content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index 976769d1a..fbead0ddb 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -1,7 +1,7 @@ order: 5 id: word-content-controls-content-control-ondatachanged-event name: On changing data in content controls -description: 'Registers, triggers, and deregisters onDataChanged event that tracks when data is changed in content controls.' +description: Registers, triggers, and deregisters onDataChanged event that tracks when data is changed in content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index e98eec7af..1736cc338 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -1,7 +1,7 @@ order: 7 id: word-content-controls-content-control-ondeleted-event name: On deleting content controls -description: 'Registers, triggers, and deregisters onDeleted event that tracks the removal of content controls.' +description: Registers, triggers, and deregisters onDeleted event that tracks the removal of content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index 4c7128dc0..09874c1db 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -1,7 +1,7 @@ order: 3 id: word-content-controls-content-control-onentered-event name: On entering content controls -description: 'Registers, triggers, and deregisters onEntered event that tracks when the cursor is placed within content controls.' +description: Registers, triggers, and deregisters onEntered event that tracks when the cursor is placed within content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index c2e5b4eab..c12456e21 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -1,7 +1,7 @@ order: 6 id: word-content-controls-content-control-onexited-event name: On exiting content controls -description: 'Registers, triggers, and deregisters onExited event that tracks when the cursor is removed from within content controls.' +description: Registers, triggers, and deregisters onExited event that tracks when the cursor is removed from within content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 989a07ac1..531e7a23a 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -1,7 +1,7 @@ order: 4 id: word-content-controls-content-control-onselectionchanged-event name: On changing selection in content controls -description: 'Registers, triggers, and deregisters onSelectionChanged event that tracks when selections are changed in content controls.' +description: Registers, triggers, and deregisters onSelectionChanged event that tracks when selections are changed in content controls. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/10-content-controls/get-change-tracking-states.yaml b/samples/word/10-content-controls/get-change-tracking-states.yaml index b59d84146..b874d6b6d 100644 --- a/samples/word/10-content-controls/get-change-tracking-states.yaml +++ b/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -164,4 +164,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml index 2cda8dcd1..2904ffa23 100644 --- a/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -1,7 +1,7 @@ order: 8 id: word-content-controls-insert-and-change-checkbox-content-control name: Manage checkbox content controls -description: 'Inserts, updates, retrieves, and deletes checkbox content controls.' +description: Inserts, updates, retrieves, and deletes checkbox content controls. host: WORD api_set: WordApi: '1.7' diff --git a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml index 734cdc388..5dca81e43 100644 --- a/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -1,7 +1,7 @@ order: 9 id: word-content-controls-insert-and-change-combo-box-content-control name: Manage combo box content controls -description: 'Inserts, updates, and deletes combo box content controls.' +description: Inserts, updates, and deletes combo box content controls. host: WORD api_set: WordApi: '1.9' diff --git a/samples/word/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index 961b5d982..00f9ac93e 100644 --- a/samples/word/10-content-controls/insert-and-change-content-controls.yaml +++ b/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -1,7 +1,7 @@ order: 1 id: word-content-controls-insert-and-change-content-controls name: Content control basics -description: 'Inserts, updates, and retrieves content controls.' +description: Inserts, updates, and retrieves content controls. author: OfficeDev host: WORD api_set: diff --git a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml index d18f95f5d..ff1ef0479 100644 --- a/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml +++ b/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -1,7 +1,7 @@ order: 10 id: word-content-controls-insert-and-change-dropdown-list-content-control name: Manage dropdown list content controls -description: 'Inserts, updates, and deletes dropdown list content controls.' +description: Inserts, updates, and deletes dropdown list content controls. host: WORD api_set: WordApi: '1.9' diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index ee39795ab..a24cb7b69 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -109,4 +109,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index c899c16df..6444834ce 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -110,4 +110,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/20-lists/manage-list-styles.yaml b/samples/word/20-lists/manage-list-styles.yaml index 915b657f9..1fbd489f5 100644 --- a/samples/word/20-lists/manage-list-styles.yaml +++ b/samples/word/20-lists/manage-list-styles.yaml @@ -107,4 +107,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index ccfef74ef..5007a602d 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -138,4 +138,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml index e58e52ac5..536f169e4 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -118,4 +118,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index 06c427331..8190d75ae 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -1,7 +1,7 @@ order: 9 id: word-paragraph-get-text name: Get text -description: 'Shows how to get paragraph text, including hidden text and text marked for deletion.' +description: Shows how to get paragraph text, including hidden text and text marked for deletion. author: OfficeDev host: WORD api_set: diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 00d26a8e6..7ab14f35c 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -125,4 +125,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 66b2fe227..77dec94c7 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -110,4 +110,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index d54fd737a..61c5ce6bf 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -187,4 +187,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 128ac7a3b..962ff5897 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -153,4 +153,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml index 7a2593e30..2bb69dff1 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index e7f3d34c9..b5989162c 100644 --- a/samples/word/25-paragraph/onadded-event.yaml +++ b/samples/word/25-paragraph/onadded-event.yaml @@ -1,7 +1,7 @@ order: 10 id: word-paragraph-onadded-event name: On adding paragraphs -description: 'Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs.' +description: Registers, triggers, and deregisters the onParagraphAdded event that tracks the addition of paragraphs. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index 1b0cd1dd2..833138a41 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -1,7 +1,7 @@ order: 11 id: word-paragraph-onchanged-event name: On changing content in paragraphs -description: 'Registers, triggers, and deregisters the onParagraphChanged event that tracks when content is changed in paragraphs.' +description: Registers, triggers, and deregisters the onParagraphChanged event that tracks when content is changed in paragraphs. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index d1348fd36..28643099d 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -1,7 +1,7 @@ order: 12 id: word-paragraph-ondeleted-event name: On deleting paragraphs -description: 'Registers, triggers, and deregisters the onParagraphDeleted event that tracks the removal of paragraphs.' +description: Registers, triggers, and deregisters the onParagraphDeleted event that tracks the removal of paragraphs. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 86eda92fe..43493a296 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -1,7 +1,7 @@ order: 6 id: word-paragraph-paragraph-properties name: Paragraph properties -description: 'Sets indentation, space between paragraphs, and other paragraph properties.' +description: Sets indentation, space between paragraphs, and other paragraph properties. author: OfficeDev host: WORD api_set: diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 561af82e2..ea8337044 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -115,4 +115,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index e3306f39f..5eeb51d8d 100644 --- a/samples/word/30-properties/get-built-in-properties.yaml +++ b/samples/word/30-properties/get-built-in-properties.yaml @@ -61,4 +61,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/30-properties/read-write-custom-document-properties.yaml b/samples/word/30-properties/read-write-custom-document-properties.yaml index 4493dedf4..600c31687 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -88,4 +88,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml index 4bca6acb8..c93592309 100644 --- a/samples/word/35-ranges/compare-location.yaml +++ b/samples/word/35-ranges/compare-location.yaml @@ -122,4 +122,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/35-ranges/get-pages.yaml b/samples/word/35-ranges/get-pages.yaml index 3533307d5..ac6000b3d 100644 --- a/samples/word/35-ranges/get-pages.yaml +++ b/samples/word/35-ranges/get-pages.yaml @@ -1,7 +1,7 @@ order: 4 id: word-ranges-get-pages -name: 'Work with pages, panes, and windows' -description: 'Shows how to work with pages, panes, and windows.' +name: Work with pages, panes, and windows +description: Shows how to work with pages, panes, and windows. author: yilin4 host: WORD api_set: diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index bc4ec0029..0bea961dd 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -97,4 +97,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/35-ranges/split-words-of-first-paragraph.yaml b/samples/word/35-ranges/split-words-of-first-paragraph.yaml index ab281397b..8e23f4118 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -1,7 +1,7 @@ order: 2 id: word-ranges-split-words-of-first-paragraph name: Split a paragraph into ranges -description: 'Splits a paragraph into word ranges and then traverses all the ranges to format each word, producing a "karaoke" effect.' +description: Splits a paragraph into word ranges and then traverses all the ranges to format each word, producing a "karaoke" effect. author: OfficeDev host: WORD api_set: diff --git a/samples/word/40-tables/manage-custom-style.yaml b/samples/word/40-tables/manage-custom-style.yaml index 8d3a60fcb..9c6ab8360 100644 --- a/samples/word/40-tables/manage-custom-style.yaml +++ b/samples/word/40-tables/manage-custom-style.yaml @@ -432,4 +432,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index 303649fb2..4031cf690 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -1,7 +1,7 @@ order: 2 id: word-tables-manage-formatting name: Table formatting -description: 'Gets the formatting details of a table, a table row, and a table cell, including borders, alignment, and cell padding.' +description: Gets the formatting details of a table, a table row, and a table cell, including borders, alignment, and cell padding. author: OfficeDev host: WORD api_set: diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index ea3f037f8..283c41753 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -83,4 +83,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/compare-documents.yaml b/samples/word/50-document/compare-documents.yaml index 988b3488c..368c7dc05 100644 --- a/samples/word/50-document/compare-documents.yaml +++ b/samples/word/50-document/compare-documents.yaml @@ -71,4 +71,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/get-external-styles.yaml b/samples/word/50-document/get-external-styles.yaml index 63fad088e..86aa2117b 100644 --- a/samples/word/50-document/get-external-styles.yaml +++ b/samples/word/50-document/get-external-styles.yaml @@ -82,4 +82,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 7e374a5f1..126961451 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -1,7 +1,7 @@ order: 3 id: word-document-insert-external-document name: Insert an external document -description: 'Inserts the content (with or without settings) of an external document into the current document. Settings include formatting, change-tracking mode, custom properties, and XML parts.' +description: Inserts the content (with or without settings) of an external document into the current document. Settings include formatting, change-tracking mode, custom properties, and XML parts. host: WORD api_set: WordApi: '1.7' diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index a8e6f38d3..b870d7865 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -134,4 +134,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 79553d280..7fd3a5dab 100644 --- a/samples/word/50-document/manage-annotations.yaml +++ b/samples/word/50-document/manage-annotations.yaml @@ -358,4 +358,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index 18b7b14cd..c92791dab 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -412,4 +412,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index e26519071..fa7f17120 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -143,4 +143,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 420e05e77..3fb2d2b1d 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,7 +1,7 @@ order: 6 id: word-document-manage-comments name: Manage comments -description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' +description: This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 84d012fdb..4f9b9c5f4 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -1,7 +1,7 @@ order: 10 id: word-document-manage-custom-xml-part-ns name: Manage a CustomXmlPart with the namespace -description: 'This sample shows how to add, query, replace, edit, and delete a custom XML part in a document.' +description: This sample shows how to add, query, replace, edit, and delete a custom XML part in a document. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 64ef6b011..12f1de659 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -1,7 +1,7 @@ order: 11 id: word-document-manage-custom-xml-part name: Manage a CustomXmlPart without the namespace -description: 'This sample shows how to add, query, edit, and delete a custom XML part in a document.' +description: This sample shows how to add, query, edit, and delete a custom XML part in a document. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index 8a3499ac0..49a583f69 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,7 +1,7 @@ order: 8 id: word-document-manage-fields name: Manage fields -description: 'This sample shows how to perform basic operations on fields, including insert, get, and delete.' +description: This sample shows how to perform basic operations on fields, including insert, get, and delete. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index b5ff910aa..32007812f 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,7 +1,7 @@ order: 7 id: word-document-manage-footnotes name: Manage footnotes -description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' +description: This sample shows how to perform basic footnote operations, including insert, get, and delete. host: WORD api_set: WordApi: '1.5' diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index bdb6df93b..5c5b6a95d 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -1,7 +1,7 @@ order: 9 id: word-document-manage-settings name: Manage settings -description: 'This sample shows how to add, edit, get, and delete custom settings on a document.' +description: This sample shows how to add, edit, get, and delete custom settings on a document. host: WORD api_set: WordApi: '1.4' diff --git a/samples/word/50-document/manage-shapes-text-boxes.yaml b/samples/word/50-document/manage-shapes-text-boxes.yaml index 0052c6c77..6d8d0d900 100644 --- a/samples/word/50-document/manage-shapes-text-boxes.yaml +++ b/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -287,4 +287,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml index 3549dee24..4c0347195 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -339,4 +339,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index f692ef0e9..3099bf706 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -1,7 +1,7 @@ order: 5 id: word-document-manage-tracked-changes name: Manage tracked changes -description: 'This samples shows how to manage tracked changes, including accepting and rejecting changes.' +description: This samples shows how to manage tracked changes, including accepting and rejecting changes. host: WORD api_set: WordApi: '1.6' diff --git a/samples/word/50-document/save-close.yaml b/samples/word/50-document/save-close.yaml index 41381c638..67ec5b4c8 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -134,4 +134,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/90-scenarios/correlated-objects-pattern.yaml b/samples/word/90-scenarios/correlated-objects-pattern.yaml index a28f29013..7f2817061 100644 --- a/samples/word/90-scenarios/correlated-objects-pattern.yaml +++ b/samples/word/90-scenarios/correlated-objects-pattern.yaml @@ -163,4 +163,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 418095bbb..302701358 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -168,4 +168,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index f3a41cecb..144d2021a 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -109,4 +109,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml index 81d9a9ecb..70ace5471 100644 --- a/samples/word/99-preview-apis/insert-and-change-content-controls.yaml +++ b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -1,6 +1,6 @@ id: word-insert-and-change-content-controls name: Content control basics -description: 'Inserts, updates, and retrieves content controls.' +description: Inserts, updates, and retrieves content controls. author: OfficeDev host: WORD api_set: diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index c050ead75..bdff83be1 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -1,6 +1,6 @@ id: word-manage-comments name: Manage comments -description: 'This sample shows how to perform operations on comments (including insert, reply, get, edit, resolve, and delete) and use comment events.' +description: This sample shows how to perform operations on comments (including insert, reply, get, edit, resolve, and delete) and use comment events. host: WORD api_set: WordApi: '1.10' diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 9d45b151a..e7bc04740 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -54,4 +54,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 331186ec3..ee07a923e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,4 +1,4 @@ -'Excel.AggregationFunction:enum': +Excel.AggregationFunction:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -16,7 +16,7 @@ await context.sync(); }); } -'Excel.Application#decimalSeparator:member': +Excel.Application#decimalSeparator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml @@ -45,7 +45,7 @@ await context.sync(); }); -'Excel.Application#calculate:member(1)': +Excel.Application#calculate:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml @@ -54,7 +54,7 @@ await Excel.run(async (context) => { context.application.calculate(Excel.CalculationType.full); }); -'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': +Excel.Application#suspendScreenUpdatingUntilNextSync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml @@ -89,7 +89,7 @@ console.log(`Ending. Adding ${ROW_COUNT * COLUMN_COUNT} cells took ${Date.now() - startTime} milliseconds`); }); -'Excel.ArrowheadLength:enum': +Excel.ArrowheadLength:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -108,7 +108,7 @@ await context.sync(); }); -'Excel.ArrowheadStyle:enum': +Excel.ArrowheadStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -127,7 +127,7 @@ await context.sync(); }); -'Excel.ArrowheadWidth:enum': +Excel.ArrowheadWidth:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -146,7 +146,7 @@ await context.sync(); }); -'Excel.AutoFillType:enum': +Excel.AutoFillType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml @@ -161,7 +161,7 @@ sumCell.format.autofitColumns(); await context.sync(); }); -'Excel.AutoFilter#apply:member(1)': +Excel.AutoFilter#apply:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -184,7 +184,7 @@ await context.sync(); }); -'Excel.AutoFilter#clearColumnCriteria:member(1)': +Excel.AutoFilter#clearColumnCriteria:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -200,7 +200,7 @@ sheet.autoFilter.clearColumnCriteria(3); await context.sync(); }); -'Excel.AutoFilter#reapply:member(1)': +Excel.AutoFilter#reapply:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -217,7 +217,7 @@ sheet.autoFilter.reapply(); await context.sync(); }); -'Excel.AutoFilter#remove:member(1)': +Excel.AutoFilter#remove:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -233,7 +233,7 @@ sheet.autoFilter.remove(); await context.sync(); }); -'Excel.Binding#onDataChanged:member': +Excel.Binding#onDataChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-changed.yaml @@ -249,7 +249,7 @@ await context.sync(); }); -'Excel.BindingType:enum': +Excel.BindingType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml @@ -268,7 +268,7 @@ } await context.sync(); }); -'Excel.BorderLineStyle:enum': +Excel.BorderLineStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -345,7 +345,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.BuiltInStyle:enum': +Excel.BuiltInStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -422,7 +422,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CalculationMode:enum': +Excel.CalculationMode:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml @@ -435,7 +435,7 @@ console.log("Current calculation mode: " + context.application.calculationMode); }); -'Excel.CalculationType:enum': +Excel.CalculationType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml @@ -445,7 +445,7 @@ context.application.calculate(Excel.CalculationType.recalculate); await context.sync(); }); -'Excel.CellControl:type': +Excel.CellControl:type: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -465,7 +465,7 @@ }; await context.sync(); }); -'Excel.CellControlType:enum': +Excel.CellControlType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -485,7 +485,7 @@ }; await context.sync(); }); -'Excel.CellPropertiesFill#color:member': +Excel.CellPropertiesFill#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -562,7 +562,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFillLoadOptions#color:member': +Excel.CellPropertiesFillLoadOptions#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -591,7 +591,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.CellPropertiesFont#color:member': +Excel.CellPropertiesFont#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -668,7 +668,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFontLoadOptions#color:member': +Excel.CellPropertiesFontLoadOptions#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -697,7 +697,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.CellPropertiesLoadOptions#address:member': +Excel.CellPropertiesLoadOptions#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -726,7 +726,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.CellValueConditionalFormat#format:member': +Excel.CellValueConditionalFormat#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -742,7 +742,7 @@ await context.sync(); }); -'Excel.CellValueConditionalFormat#rule:member': +Excel.CellValueConditionalFormat#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -758,7 +758,7 @@ await context.sync(); }); -'Excel.CellValueType:enum': +Excel.CellValueType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml @@ -782,7 +782,7 @@ range.valuesAsJson = [[error]]; await context.sync(); }); -'Excel.Chart#getDataTableOrNullObject:member(1)': +Excel.Chart#getDataTableOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -801,7 +801,7 @@ chartDataTable.visible = true; await context.sync(); }); -'Excel.Chart#onActivated:member': +Excel.Chart#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -838,7 +838,7 @@ console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); }); } -'Excel.Chart#onDeactivated:member': +Excel.Chart#onDeactivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -867,7 +867,7 @@ console.log("The pie chart is NOT active."); }); } -'Excel.ChartAxis#displayUnit:member': +Excel.ChartAxis#displayUnit:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml @@ -887,7 +887,7 @@ console.log("The vertical axis display unit is: " + valueAxis.displayUnit); }); -'Excel.ChartAxis#showDisplayUnitLabel:member': +Excel.ChartAxis#showDisplayUnitLabel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml @@ -903,7 +903,7 @@ await context.sync(); }); -'Excel.ChartCollection#onActivated:member': +Excel.ChartCollection#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -940,7 +940,7 @@ console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); }); } -'Excel.ChartCollection#onDeactivated:member': +Excel.ChartCollection#onDeactivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml @@ -969,7 +969,7 @@ console.log("The pie chart is NOT active."); }); } -'Excel.ChartDataLabel:class': +Excel.ChartDataLabel:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml @@ -1012,7 +1012,7 @@ subLabel.font.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#format:member': +Excel.ChartDataTable#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1042,7 +1042,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showHorizontalBorder:member': +Excel.ChartDataTable#showHorizontalBorder:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1072,7 +1072,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showLegendKey:member': +Excel.ChartDataTable#showLegendKey:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1102,7 +1102,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showOutlineBorder:member': +Excel.ChartDataTable#showOutlineBorder:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1132,7 +1132,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showVerticalBorder:member': +Excel.ChartDataTable#showVerticalBorder:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1162,7 +1162,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#visible:member': +Excel.ChartDataTable#visible:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1181,7 +1181,7 @@ chartDataTable.visible = true; await context.sync(); }); -'Excel.ChartDataTableFormat#border:member': +Excel.ChartDataTableFormat#border:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1211,7 +1211,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTableFormat#font:member': +Excel.ChartDataTableFormat#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml @@ -1241,7 +1241,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartFill#setSolidColor:member(1)': +Excel.ChartFill#setSolidColor:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-point.yaml @@ -1258,7 +1258,7 @@ await context.sync(); }); -'Excel.ChartLeaderLines:class': +Excel.ChartLeaderLines:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1281,7 +1281,7 @@ await context.sync(); }); -'Excel.ChartLeaderLinesFormat:class': +Excel.ChartLeaderLinesFormat:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1304,7 +1304,7 @@ await context.sync(); }); -'Excel.ChartLegendFormat#font:member': +Excel.ChartLegendFormat#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-legend.yaml @@ -1327,7 +1327,7 @@ await context.sync(); }); -'Excel.ChartPoint:class': +Excel.ChartPoint:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml @@ -1369,7 +1369,7 @@ } await context.sync(); }); -'Excel.ChartPointsCollection:class': +Excel.ChartPointsCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-labels.yaml @@ -1411,7 +1411,7 @@ } await context.sync(); }); -'Excel.ChartSeries#getDimensionValues:member(1)': +Excel.ChartSeries#getDimensionValues:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1437,7 +1437,7 @@ // Log the information. console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); -'Excel.ChartSeries#setBubbleSizes:member(1)': +Excel.ChartSeries#setBubbleSizes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1487,7 +1487,7 @@ await context.sync(); }); -'Excel.ChartSeries#getDimensionDataSourceString:member(1)': +Excel.ChartSeries#getDimensionDataSourceString:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml @@ -1514,7 +1514,7 @@ console.log(series.name + " data source string: " + dataSourceString.value); console.log(series.name + " data source type: " + dataSourceType.value); }); -'Excel.ChartSeries#getDimensionDataSourceType:member(1)': +Excel.ChartSeries#getDimensionDataSourceType:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml @@ -1541,7 +1541,7 @@ console.log(series.name + " data source string: " + dataSourceString.value); console.log(series.name + " data source type: " + dataSourceType.value); }); -'Excel.ChartSeries:class': +Excel.ChartSeries:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1577,7 +1577,7 @@ await context.sync(); }); -'Excel.ChartSeries#hasDataLabels:member': +Excel.ChartSeries#hasDataLabels:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1613,7 +1613,7 @@ await context.sync(); }); -'Excel.ChartSeries#points:member': +Excel.ChartSeries#points:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1649,7 +1649,7 @@ await context.sync(); }); -'Excel.ChartSeries#showLeaderLines:member': +Excel.ChartSeries#showLeaderLines:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-leader-lines.yaml @@ -1668,7 +1668,7 @@ await context.sync(); }); -'Excel.ChartSeries#delete:member(1)': +Excel.ChartSeries#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml @@ -1689,7 +1689,7 @@ await context.sync(); }); -'Excel.ChartSeries#setValues:member(1)': +Excel.ChartSeries#setValues:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml @@ -1709,7 +1709,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerBackgroundColor:member': +Excel.ChartSeries#markerBackgroundColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1742,7 +1742,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerForegroundColor:member': +Excel.ChartSeries#markerForegroundColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1775,7 +1775,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerSize:member': +Excel.ChartSeries#markerSize:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1808,7 +1808,7 @@ await context.sync(); }); -'Excel.ChartSeries#markerStyle:member': +Excel.ChartSeries#markerStyle:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml @@ -1841,7 +1841,7 @@ await context.sync(); }); -'Excel.ChartSeriesBy:enum': +Excel.ChartSeriesBy:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml @@ -1881,7 +1881,7 @@ await context.sync(); }); -'Excel.ChartSeriesDimension:enum': +Excel.ChartSeriesDimension:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1907,7 +1907,7 @@ // Log the information. console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); -'Excel.ChartTitle#getSubstring:member(1)': +Excel.ChartTitle#getSubstring:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml @@ -1921,7 +1921,7 @@ chart.title.getSubstring(0, 7).font.color = "Yellow"; await context.sync(); }); -'Excel.ChartTitle#textOrientation:member': +Excel.ChartTitle#textOrientation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml @@ -1934,7 +1934,7 @@ await context.sync(); }); -'Excel.ChartTrendline#type:member': +Excel.ChartTrendline#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml @@ -1953,7 +1953,7 @@ console.log("The trendline type is:" + trendline.type); }); -'Excel.ChartTrendlineCollection#add:member(1)': +Excel.ChartTrendlineCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml @@ -1969,7 +1969,7 @@ await context.sync(); }); -'Excel.ChartTrendlineFormat#line:member': +Excel.ChartTrendlineFormat#line:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml @@ -1989,7 +1989,7 @@ console.log("The trendline color has been set to:" + line.color); }); -'Excel.ChartType:enum': +Excel.ChartType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-create-several-charts.yaml @@ -2011,7 +2011,7 @@ await context.sync(); }); -'Excel.CheckboxCellControl:interface': +Excel.CheckboxCellControl:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -2031,7 +2031,7 @@ }; await context.sync(); }); -'Excel.ClearApplyTo:enum': +Excel.ClearApplyTo:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -2060,7 +2060,7 @@ await context.sync(); }); -'Excel.CloseBehavior:enum': +Excel.CloseBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -2069,7 +2069,7 @@ await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.skipSave); }); -'Excel.ColorScaleConditionalFormat#criteria:member': +Excel.ColorScaleConditionalFormat#criteria:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2089,7 +2089,7 @@ await context.sync(); }); -'Excel.Comment#content:member': +Excel.Comment#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2101,7 +2101,7 @@ comment.content = "PLEASE add headers here."; await context.sync(); }); -'Excel.Comment#delete:member(1)': +Excel.Comment#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2111,7 +2111,7 @@ context.workbook.comments.getItemByCell("Comments!A2").delete(); await context.sync(); }); -'Excel.Comment#load:member(2)': +Excel.Comment#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2125,7 +2125,7 @@ console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); -'Excel.Comment#resolved:member': +Excel.Comment#resolved:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml @@ -2136,7 +2136,7 @@ sheet.comments.getItemAt(0).resolved = true; await context.sync(); }); -'Excel.CommentCollection#add:member(1)': +Excel.CommentCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -2149,7 +2149,7 @@ sheet.comments.add("A2", "TODO: add data."); await context.sync(); }); -'Excel.CommentCollection#onAdded:member': +Excel.CommentCollection#onAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml @@ -2191,7 +2191,7 @@ console.log(` Creation date:${addedComment.creationDate}`); }); } -'Excel.CommentCollection#onChanged:member': +Excel.CommentCollection#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml @@ -2233,7 +2233,7 @@ console.log(` Creation date: ${changedComment.creationDate}`); }); } -'Excel.CommentCollection#onDeleted:member': +Excel.CommentCollection#onDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml @@ -2264,7 +2264,7 @@ console.log(` ID: ${event.commentDetails[0].commentId}`); }); } -'Excel.CommentReply#content:member': +Excel.CommentReply#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -2282,7 +2282,7 @@ reply.content += " Please!"; await context.sync(); }); -'Excel.CommentReply#delete:member(1)': +Excel.CommentReply#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -2295,7 +2295,7 @@ comment.replies.getItemAt(0).delete(); await context.sync(); }); -'Excel.CommentReplyCollection#add:member(1)': +Excel.CommentReplyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -2308,7 +2308,7 @@ comment.replies.add("Add content to this worksheet."); await context.sync(); }); -'Excel.CommentRichContent#mentions:member': +Excel.CommentRichContent#mentions:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml @@ -2333,7 +2333,7 @@ sheet.comments.add("A1", commentBody, Excel.ContentType.mention); await context.sync(); }); -'Excel.ConditionalCellValueRule#formula1:member': +Excel.ConditionalCellValueRule#formula1:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2349,7 +2349,7 @@ await context.sync(); }); -'Excel.ConditionalCellValueRule#operator:member': +Excel.ConditionalCellValueRule#operator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2365,7 +2365,7 @@ await context.sync(); }); -'Excel.ConditionalDataBarDirection:enum': +Excel.ConditionalDataBarDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2380,7 +2380,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#cellValue:member': +Excel.ConditionalFormat#cellValue:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2396,7 +2396,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#colorScale:member': +Excel.ConditionalFormat#colorScale:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2416,7 +2416,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#custom:member': +Excel.ConditionalFormat#custom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2431,7 +2431,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#dataBar:member': +Excel.ConditionalFormat#dataBar:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2446,7 +2446,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#getRange:member(1)': +Excel.ConditionalFormat#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2477,7 +2477,7 @@ console.log("No conditional formats applied."); } }); -'Excel.ConditionalFormat#iconSet:member': +Excel.ConditionalFormat#iconSet:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2521,7 +2521,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#preset:member': +Excel.ConditionalFormat#preset:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2537,7 +2537,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#textComparison:member': +Excel.ConditionalFormat#textComparison:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2553,7 +2553,7 @@ await context.sync(); }); -'Excel.ConditionalFormat#type:member': +Excel.ConditionalFormat#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2584,7 +2584,7 @@ console.log("No conditional formats applied."); } }); -'Excel.ConditionalFormatCollection#add:member(1)': +Excel.ConditionalFormatCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2604,7 +2604,7 @@ await context.sync(); }); -'Excel.ConditionalFormatCollection#clearAll:member(1)': +Excel.ConditionalFormatCollection#clearAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2621,7 +2621,7 @@ element.style.display = "none"; }); }); -'Excel.ConditionalFormatCollection#getItemAt:member(1)': +Excel.ConditionalFormatCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2652,7 +2652,7 @@ console.log("No conditional formats applied."); } }); -'Excel.ConditionalFormatColorCriterionType:enum': +Excel.ConditionalFormatColorCriterionType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2672,7 +2672,7 @@ await context.sync(); }); -'Excel.ConditionalFormatIconRuleType:enum': +Excel.ConditionalFormatIconRuleType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2716,7 +2716,7 @@ await context.sync(); }); -'Excel.ConditionalFormatPresetCriterion:enum': +Excel.ConditionalFormatPresetCriterion:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -2755,7 +2755,7 @@ await context.sync(); }); -'Excel.ConditionalFormatRule#formula:member': +Excel.ConditionalFormatRule#formula:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2770,7 +2770,7 @@ await context.sync(); }); -'Excel.ConditionalFormatType:enum': +Excel.ConditionalFormatType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -2809,7 +2809,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterion#formula:member': +Excel.ConditionalIconCriterion#formula:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2853,7 +2853,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterion#operator:member': +Excel.ConditionalIconCriterion#operator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2897,7 +2897,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterion#type:member': +Excel.ConditionalIconCriterion#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2941,7 +2941,7 @@ await context.sync(); }); -'Excel.ConditionalIconCriterionOperator:enum': +Excel.ConditionalIconCriterionOperator:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -2985,7 +2985,7 @@ await context.sync(); }); -'Excel.ConditionalPresetCriteriaRule#criterion:member': +Excel.ConditionalPresetCriteriaRule#criterion:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3001,7 +3001,7 @@ await context.sync(); }); -'Excel.ConditionalTextComparisonRule#text:member': +Excel.ConditionalTextComparisonRule#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3017,7 +3017,7 @@ await context.sync(); }); -'Excel.ConditionalTextOperator:enum': +Excel.ConditionalTextOperator:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3033,7 +3033,7 @@ await context.sync(); }); -'Excel.ConnectorType:enum': +Excel.ConnectorType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -3045,7 +3045,7 @@ line.name = "StraightLine"; await context.sync(); }); -'Excel.ContentType:enum': +Excel.ContentType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml @@ -3070,7 +3070,7 @@ sheet.comments.add("A1", commentBody, Excel.ContentType.mention); await context.sync(); }); -'Excel.CultureInfo#datetimeFormat:member': +Excel.CultureInfo#datetimeFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info-date-time.yaml @@ -3111,7 +3111,7 @@ await context.sync(); }); -'Excel.CustomConditionalFormat#format:member': +Excel.CustomConditionalFormat#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3126,7 +3126,7 @@ await context.sync(); }); -'Excel.CustomPropertyCollection#add:member(1)': +Excel.CustomPropertyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -3145,7 +3145,7 @@ console.log(`Successfully set custom document property ${userKey}:${userValue}.`); }); -'Excel.CustomXmlPart#delete:member(1)': +Excel.CustomXmlPart#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3178,7 +3178,7 @@ await context.sync(); } }); -'Excel.CustomXmlPart#getXml:member(1)': +Excel.CustomXmlPart#getXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3203,7 +3203,7 @@ await context.sync(); }); -'Excel.CustomXmlPart#id:member': +Excel.CustomXmlPart#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3228,7 +3228,7 @@ await context.sync(); }); -'Excel.CustomXmlPart#setXml:member(1)': +Excel.CustomXmlPart#setXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3253,7 +3253,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartCollection#add:member(1)': +Excel.CustomXmlPartCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3278,7 +3278,7 @@ await context.sync(); }); -'Excel.CustomXmlPartCollection#getItem:member(1)': +Excel.CustomXmlPartCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3303,7 +3303,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartCollection#getByNamespace:member(1)': +Excel.CustomXmlPartCollection#getByNamespace:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3336,7 +3336,7 @@ await context.sync(); }); -'Excel.CustomXmlPartScopedCollection#getItemOrNullObject:member(1)': +Excel.CustomXmlPartScopedCollection#getItemOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml @@ -3369,7 +3369,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartScopedCollection#getCount:member(1)': +Excel.CustomXmlPartScopedCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3402,7 +3402,7 @@ await context.sync(); }); -'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': +Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml @@ -3435,7 +3435,7 @@ await context.sync(); }); -'Excel.DataBarConditionalFormat#barDirection:member': +Excel.DataBarConditionalFormat#barDirection:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -3450,7 +3450,7 @@ await context.sync(); }); -'Excel.DataPivotHierarchy#showAs:member': +Excel.DataPivotHierarchy#showAs:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -3477,7 +3477,7 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.DataPivotHierarchy#name:member': +Excel.DataPivotHierarchy#name:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -3492,7 +3492,7 @@ dataHierarchies.items[1].name = "Wholesale"; await context.sync(); }); -'Excel.DataValidation#errorAlert:member': +Excel.DataValidation#errorAlert:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3525,7 +3525,7 @@ await context.sync(); }); -'Excel.DataValidation#prompt:member': +Excel.DataValidation#prompt:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3562,7 +3562,7 @@ await context.sync(); }); -'Excel.DataValidation#rule:member': +Excel.DataValidation#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3589,7 +3589,7 @@ await context.sync(); }); -'Excel.DataValidationOperator:enum': +Excel.DataValidationOperator:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3626,7 +3626,7 @@ await context.sync(); }); -'Excel.DataValidationRule#list:member': +Excel.DataValidationRule#list:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3653,7 +3653,7 @@ await context.sync(); }); -'Excel.DataValidationRule#wholeNumber:member': +Excel.DataValidationRule#wholeNumber:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml @@ -3690,7 +3690,7 @@ await context.sync(); }); -'Excel.DateFilterCondition:enum': +Excel.DateFilterCondition:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -3723,7 +3723,7 @@ await context.sync(); }); -'Excel.DeleteShiftDirection:enum': +Excel.DeleteShiftDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -3737,7 +3737,7 @@ const range = sheet.getRange("A5:F5"); range.delete(Excel.DeleteShiftDirection.up); }); -'Excel.DocumentProperties#custom:member': +Excel.DocumentProperties#custom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -3755,7 +3755,7 @@ console.log(`${property.key}:${property.value}`); }); }); -'Excel.DoubleCellValue#numberFormat:member': +Excel.DoubleCellValue#numberFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -3783,7 +3783,7 @@ await context.sync(); }); -'Excel.DoubleCellValue#type:member': +Excel.DoubleCellValue#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -3810,7 +3810,7 @@ ]; await context.sync(); }); -'Excel.DynamicFilterCriteria:enum': +Excel.DynamicFilterCriteria:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/filter-data.yaml @@ -3835,7 +3835,7 @@ await context.sync(); }); -'Excel.EntityCompactLayoutIcons:enum': +Excel.EntityCompactLayoutIcons:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -3864,7 +3864,7 @@ }); return entities; } -'Excel.ErrorCellValue:type': +Excel.ErrorCellValue:type: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml @@ -3888,7 +3888,7 @@ range.valuesAsJson = [[error]]; await context.sync(); }); -'Excel.ErrorCellValueType:enum': +Excel.ErrorCellValueType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-error-values.yaml @@ -3912,7 +3912,7 @@ range.valuesAsJson = [[error]]; await context.sync(); }); -'Excel.FillPattern:enum': +Excel.FillPattern:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -3989,7 +3989,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.FilterCriteria#filterOn:member': +Excel.FilterCriteria#filterOn:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -4012,7 +4012,7 @@ await context.sync(); }); -'Excel.FilterDatetimeSpecificity:enum': +Excel.FilterDatetimeSpecificity:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4045,7 +4045,7 @@ await context.sync(); }); -'Excel.Functions:class': +Excel.Functions:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -4062,7 +4062,7 @@ await context.sync(); console.log(" Number of wrenches sold in November = " + unitSoldInNov.value); }); -'Excel.Functions#vlookup:member(1)': +Excel.Functions#vlookup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -4079,7 +4079,7 @@ await context.sync(); console.log(" Number of wrenches sold in November = " + unitSoldInNov.value); }); -'Excel.Functions#sum:member(1)': +Excel.Functions#sum:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-built-in-functions.yaml @@ -4102,7 +4102,7 @@ await context.sync(); console.log(" Number of wrenches sold in November, December, and January = " + sumOfTwoLookups.value); }); -'Excel.GeometricShapeType:enum': +Excel.GeometricShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -4117,7 +4117,7 @@ shape.width = 200; await context.sync(); }); -'Excel.GroupOption:enum': +Excel.GroupOption:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -4136,7 +4136,7 @@ sheet.getRange("7:8").group(Excel.GroupOption.byRows); await context.sync(); }); -'Excel.HorizontalAlignment:enum': +Excel.HorizontalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml @@ -4156,7 +4156,7 @@ await context.sync(); }); -'Excel.IconSet:enum': +Excel.IconSet:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4200,7 +4200,7 @@ await context.sync(); }); -'Excel.IconSetConditionalFormat#criteria:member': +Excel.IconSetConditionalFormat#criteria:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4244,7 +4244,7 @@ await context.sync(); }); -'Excel.IconSetConditionalFormat#style:member': +Excel.IconSetConditionalFormat#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -4288,7 +4288,7 @@ await context.sync(); }); -'Excel.Image#format:member': +Excel.Image#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -4303,7 +4303,7 @@ console.log("The image's format is: " + image.format); await context.sync(); }); -'Excel.InsertShiftDirection:enum': +Excel.InsertShiftDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/insert-delete-clear-range.yaml @@ -4317,7 +4317,7 @@ await context.sync(); }); -'Excel.KeyboardDirection:enum': +Excel.KeyboardDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml @@ -4343,7 +4343,7 @@ await context.sync(); }); -'Excel.LabelFilterCondition:enum': +Excel.LabelFilterCondition:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4370,7 +4370,7 @@ await context.sync(); }); -'Excel.Line#connectBeginShape:member(1)': +Excel.Line#connectBeginShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4383,7 +4383,7 @@ line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -'Excel.Line#connectEndShape:member(1)': +Excel.Line#connectEndShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4396,7 +4396,7 @@ line.connectEndShape(shapes.getItem("Right"), 0); await context.sync(); }); -'Excel.Line#disconnectBeginShape:member(1)': +Excel.Line#disconnectBeginShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4409,7 +4409,7 @@ line.disconnectEndShape(); await context.sync(); }); -'Excel.Line#disconnectEndShape:member(1)': +Excel.Line#disconnectEndShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -4422,7 +4422,7 @@ line.disconnectEndShape(); await context.sync(); }); -'Excel.NamedItem:class': +Excel.NamedItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -4442,7 +4442,7 @@ await context.sync(); }); -'Excel.NamedItem#delete:member(1)': +Excel.NamedItem#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -4465,7 +4465,7 @@ await context.sync(); }); -'Excel.NamedItem#formula:member': +Excel.NamedItem#formula:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/update-named-item.yaml @@ -4490,7 +4490,7 @@ console.log(`Just updated the named item "${myNamedItem.name}" -- it's now located here: ${myNamedItem.formula}`); } }); -'Excel.NamedItemCollection#add:member(1)': +Excel.NamedItemCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml @@ -4505,7 +4505,7 @@ await context.sync(); }); -'Excel.Note:class': +Excel.Note:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4520,7 +4520,7 @@ note.width = 400; await context.sync(); }); -'Excel.Note#content:member': +Excel.Note#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4534,7 +4534,7 @@ note.content = "Changing the content of the first note."; await context.sync(); }); -'Excel.Note#height:member': +Excel.Note#height:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4549,7 +4549,7 @@ note.width = 400; await context.sync(); }); -'Excel.Note#visible:member': +Excel.Note#visible:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4566,7 +4566,7 @@ firstNote.visible = true; }); -'Excel.Note#width:member': +Excel.Note#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4581,7 +4581,7 @@ note.width = 400; await context.sync(); }); -'Excel.Note#delete:member(1)': +Excel.Note#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4596,7 +4596,7 @@ await context.sync(); }); -'Excel.NoteCollection:class': +Excel.NoteCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4611,7 +4611,7 @@ context.workbook.notes.add(selectedRange, "The first note."); await context.sync(); }); -'Excel.NoteCollection#add:member(1)': +Excel.NoteCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4626,7 +4626,7 @@ context.workbook.notes.add(selectedRange, "The first note."); await context.sync(); }); -'Excel.NoteCollection#getItem:member(1)': +Excel.NoteCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4643,7 +4643,7 @@ firstNote.visible = true; }); -'Excel.NoteCollection#getItemAt:member(1)': +Excel.NoteCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -4657,7 +4657,7 @@ note.content = "Changing the content of the first note."; await context.sync(); }); -'Excel.NumberFormatInfo#numberDecimalSeparator:member': +Excel.NumberFormatInfo#numberDecimalSeparator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml @@ -4699,7 +4699,7 @@ await context.sync(); }); -'Excel.NumberFormatInfo#numberGroupSeparator:member': +Excel.NumberFormatInfo#numberGroupSeparator:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml @@ -4725,7 +4725,7 @@ resultRange.format.autofitColumns(); await context.sync(); }); -'Excel.PageBreakCollection#add:member(1)': +Excel.PageBreakCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4736,7 +4736,7 @@ farmSheet.horizontalPageBreaks.add("A21:E21"); await context.sync(); }); -'Excel.PageLayout#centerHorizontally:member': +Excel.PageLayout#centerHorizontally:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4748,7 +4748,7 @@ farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -'Excel.PageLayout#centerVertically:member': +Excel.PageLayout#centerVertically:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4760,7 +4760,7 @@ farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -'Excel.PageLayout#orientation:member': +Excel.PageLayout#orientation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4771,7 +4771,7 @@ farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -'Excel.PageLayout#setPrintArea:member(1)': +Excel.PageLayout#setPrintArea:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4782,7 +4782,7 @@ farmSheet.pageLayout.setPrintArea("A1:D41"); await context.sync(); }); -'Excel.PageLayout#setPrintTitleRows:member(1)': +Excel.PageLayout#setPrintTitleRows:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4793,7 +4793,7 @@ farmSheet.pageLayout.setPrintTitleRows("$1:$1"); await context.sync(); }); -'Excel.PageLayout#zoom:member': +Excel.PageLayout#zoom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4804,7 +4804,7 @@ farmSheet.pageLayout.zoom = { scale: 200 }; await context.sync(); }); -'Excel.PageOrientation:enum': +Excel.PageOrientation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -4815,7 +4815,7 @@ farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -'Excel.PictureFormat:enum': +Excel.PictureFormat:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -4831,7 +4831,7 @@ // Your add-in would save this string as a .png file. console.log("The image's Base64-encoded string: " + imageString); }); -'Excel.PivotField#clearAllFilters:member(1)': +Excel.PivotField#clearAllFilters:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4851,7 +4851,7 @@ }); await context.sync(); }); -'Excel.PivotFilters#dateFilter:member': +Excel.PivotFilters#dateFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4884,7 +4884,7 @@ await context.sync(); }); -'Excel.PivotFilters#labelFilter:member': +Excel.PivotFilters#labelFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4911,7 +4911,7 @@ await context.sync(); }); -'Excel.PivotFilters#manualFilter:member': +Excel.PivotFilters#manualFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4938,7 +4938,7 @@ await context.sync(); }); -'Excel.PivotFilters#valueFilter:member': +Excel.PivotFilters#valueFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4965,7 +4965,7 @@ await context.sync(); }); -'Excel.PivotHierarchy#fields:member': +Excel.PivotHierarchy#fields:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -4992,7 +4992,7 @@ await context.sync(); }); -'Excel.PivotLayout#getDataBodyRange:member(1)': +Excel.PivotLayout#getDataBodyRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -5014,7 +5014,7 @@ masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; await context.sync(); }); -'Excel.PivotLayout#altTextDescription:member': +Excel.PivotLayout#altTextDescription:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5031,7 +5031,7 @@ await context.sync(); }); -'Excel.PivotLayout#displayBlankLineAfterEachItem:member(1)': +Excel.PivotLayout#displayBlankLineAfterEachItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5047,7 +5047,7 @@ await context.sync(); }); -'Excel.PivotLayout#emptyCellText:member': +Excel.PivotLayout#emptyCellText:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5064,7 +5064,7 @@ pivotLayout.getDataBodyRange().format.horizontalAlignment = Excel.HorizontalAlignment.right; await context.sync(); }); -'Excel.PivotLayout#fillEmptyCells:member': +Excel.PivotLayout#fillEmptyCells:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5084,7 +5084,7 @@ pivotLayout.fillEmptyCells = fillToSet; await context.sync(); }); -'Excel.PivotLayout#layoutType:member': +Excel.PivotLayout#layoutType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5108,7 +5108,7 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); -'Excel.PivotLayout#preserveFormatting:member': +Excel.PivotLayout#preserveFormatting:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5128,7 +5128,7 @@ pivotLayout.preserveFormatting = preserveFormattingToSet; await context.sync(); }); -'Excel.PivotLayout#repeatAllItemLabels:member(1)': +Excel.PivotLayout#repeatAllItemLabels:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5144,7 +5144,7 @@ await context.sync(); }); -'Excel.PivotLayout#showColumnGrandTotals:member': +Excel.PivotLayout#showColumnGrandTotals:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5168,7 +5168,7 @@ await context.sync(); }); -'Excel.PivotLayout#showFieldHeaders:member': +Excel.PivotLayout#showFieldHeaders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5186,7 +5186,7 @@ pivotLayout.showFieldHeaders = showHeaders; await context.sync(); }); -'Excel.PivotLayout#showRowGrandTotals:member': +Excel.PivotLayout#showRowGrandTotals:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -5210,7 +5210,7 @@ await context.sync(); }); -'Excel.PivotTable#columnHierarchies:member': +Excel.PivotTable#columnHierarchies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5233,7 +5233,7 @@ await context.sync(); }); -'Excel.PivotTable#dataHierarchies:member': +Excel.PivotTable#dataHierarchies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5246,7 +5246,7 @@ await context.sync(); }); -'Excel.PivotTable#delete:member(1)': +Excel.PivotTable#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5257,7 +5257,7 @@ await context.sync(); }); -'Excel.PivotTable#layout:member': +Excel.PivotTable#layout:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5279,7 +5279,7 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); -'Excel.PivotTable#getDataSourceString:member(1)': +Excel.PivotTable#getDataSourceString:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -5300,7 +5300,7 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); -'Excel.PivotTable#getDataSourceType:member(1)': +Excel.PivotTable#getDataSourceType:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -5321,7 +5321,7 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); -'Excel.PivotTable#filterHierarchies:member': +Excel.PivotTable#filterHierarchies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -5342,7 +5342,7 @@ } }); } -'Excel.PivotTable#refresh:member(1)': +Excel.PivotTable#refresh:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -5357,7 +5357,7 @@ pivotTable.refresh(); await context.sync(); }); -'Excel.PivotTableCollection#add:member(1)': +Excel.PivotTableCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -5370,7 +5370,7 @@ await context.sync(); }); -'Excel.PivotTableCollection#getItem:member(1)': +Excel.PivotTableCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -5385,7 +5385,7 @@ pivotTable.refresh(); await context.sync(); }); -'Excel.PresetCriteriaConditionalFormat#rule:member': +Excel.PresetCriteriaConditionalFormat#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -5401,7 +5401,7 @@ await context.sync(); }); -'Excel.Range#clearOrResetContents:member(1)': +Excel.Range#clearOrResetContents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -5419,7 +5419,7 @@ range.clearOrResetContents(); await context.sync(); }); -'Excel.Range#control:member': +Excel.Range#control:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -5439,7 +5439,7 @@ }; await context.sync(); }); -'Excel.Range#values:member': +Excel.Range#values:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -5454,7 +5454,7 @@ range.values = [["TRUE"]]; await context.sync(); }); -'Excel.Range#valuesAsJson:member': +Excel.Range#valuesAsJson:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -5481,7 +5481,7 @@ ]; await context.sync(); }); -'Excel.Range#getDirectDependents:member(1)': +Excel.Range#getDirectDependents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.yaml @@ -5505,7 +5505,7 @@ } await context.sync(); }); -'Excel.Range#sort:member': +Excel.Range#sort:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -5535,7 +5535,7 @@ await context.sync(); }); } -'Excel.Range#getMergedAreasOrNullObject:member(1)': +Excel.Range#getMergedAreasOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml @@ -5562,7 +5562,7 @@ await context.sync(); }); -'Excel.Range#merge:member(1)': +Excel.Range#merge:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml @@ -5582,7 +5582,7 @@ await context.sync(); }); -'Excel.Range#group:member(1)': +Excel.Range#group:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -5601,7 +5601,7 @@ sheet.getRange("7:8").group(Excel.GroupOption.byRows); await context.sync(); }); -'Excel.Range#ungroup:member(1)': +Excel.Range#ungroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -5618,7 +5618,7 @@ sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); await context.sync(); }); -'Excel.Range#getPivotTables:member(1)': +Excel.Range#getPivotTables:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -5646,7 +5646,7 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Range#getDirectPrecedents:member(1)': +Excel.Range#getDirectPrecedents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml @@ -5671,7 +5671,7 @@ } await context.sync(); }); -'Excel.Range#getPrecedents:member(1)': +Excel.Range#getPrecedents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml @@ -5695,7 +5695,7 @@ } await context.sync(); }); -'Excel.Range#getSpecialCells:member(1)': +Excel.Range#getSpecialCells:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -5712,7 +5712,7 @@ return context.sync(); }); -'Excel.Range#autoFill:member(1)': +Excel.Range#autoFill:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml @@ -5727,7 +5727,7 @@ sumCell.format.autofitColumns(); await context.sync(); }); -'Excel.Range#getCellProperties:member(1)': +Excel.Range#getCellProperties:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -5756,7 +5756,7 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.Range#setCellProperties:member(1)': +Excel.Range#setCellProperties:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -5833,7 +5833,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Range#copyFrom:member(1)': +Excel.Range#copyFrom:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml @@ -5849,7 +5849,7 @@ sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); await context.sync(); }); -'Excel.Range#moveTo:member(1)': +Excel.Range#moveTo:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml @@ -5864,7 +5864,7 @@ sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); -'Excel.Range#getDependents:member(1)': +Excel.Range#getDependents:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml @@ -5892,7 +5892,7 @@ } await context.sync(); }); -'Excel.Range#getSpillingToRange:member(1)': +Excel.Range#getSpillingToRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml @@ -5915,7 +5915,7 @@ console.log(`Copying the table headers spilled into ${spillRange.address}.`); }); -'Excel.Range#find:member(1)': +Excel.Range#find:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml @@ -5941,7 +5941,7 @@ console.log(foundRange.address); }); -'Excel.Range#findOrNullObject:member(1)': +Excel.Range#findOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml @@ -5967,7 +5967,7 @@ console.log(foundRange.address); } }); -'Excel.Range#getExtendedRange:member(1)': +Excel.Range#getExtendedRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml @@ -5993,7 +5993,7 @@ await context.sync(); }); -'Excel.Range#getRangeEdge:member(1)': +Excel.Range#getRangeEdge:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml @@ -6019,7 +6019,7 @@ await context.sync(); }); -'Excel.Range#hyperlink:member': +Excel.Range#hyperlink:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6049,7 +6049,7 @@ await context.sync(); }); -'Excel.Range#getIntersectionOrNullObject:member(1)': +Excel.Range#getIntersectionOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml @@ -6109,7 +6109,7 @@ await context.sync(); }); -'Excel.Range#getUsedRange:member(1)': +Excel.Range#getUsedRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml @@ -6169,7 +6169,7 @@ await context.sync(); }); -'Excel.Range#removeDuplicates:member(1)': +Excel.Range#removeDuplicates:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml @@ -6186,7 +6186,7 @@ console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -'Excel.Range#style:member': +Excel.Range#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -6203,7 +6203,7 @@ await context.sync(); }); -'Excel.Range#getUsedRangeOrNullObject:member(1)': +Excel.Range#getUsedRangeOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml @@ -6241,7 +6241,7 @@ await context.sync(); }); -'Excel.Range#set:member(2)': +Excel.Range#set:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml @@ -6261,7 +6261,7 @@ targetRange.format.autofitColumns(); await context.sync(); }); -'Excel.RangeAreas#format:member': +Excel.RangeAreas#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -6278,7 +6278,7 @@ await context.sync(); }); -'Excel.RangeCopyType:enum': +Excel.RangeCopyType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml @@ -6294,7 +6294,7 @@ sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); await context.sync(); }); -'Excel.RangeFormat#textOrientation:member': +Excel.RangeFormat#textOrientation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-text-orientation.yaml @@ -6310,7 +6310,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#address:member': +Excel.RangeHyperlink#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6340,7 +6340,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#documentReference:member': +Excel.RangeHyperlink#documentReference:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6370,7 +6370,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#screenTip:member': +Excel.RangeHyperlink#screenTip:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6400,7 +6400,7 @@ await context.sync(); }); -'Excel.RangeHyperlink#textToDisplay:member': +Excel.RangeHyperlink#textToDisplay:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6430,7 +6430,7 @@ await context.sync(); }); -'Excel.RangeUnderlineStyle:enum': +Excel.RangeUnderlineStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml @@ -6459,7 +6459,7 @@ await context.sync(); }); -'Excel.ReadingOrder:enum': +Excel.ReadingOrder:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -6480,7 +6480,7 @@ console.log("Shrink to fit: " + style.shrinkToFit); console.log("Style locked: " + style.locked); }); -'Excel.RemoveDuplicatesResult#uniqueRemaining:member': +Excel.RemoveDuplicatesResult#uniqueRemaining:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml @@ -6497,7 +6497,7 @@ console.log(deleteResult.removed + " entries with duplicate names removed."); console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); }); -'Excel.Runtime#enableEvents:member': +Excel.Runtime#enableEvents:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml @@ -6518,7 +6518,7 @@ await context.sync(); }); -'Excel.SaveBehavior:enum': +Excel.SaveBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -6527,7 +6527,7 @@ await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.prompt); }); -'Excel.SearchDirection:enum': +Excel.SearchDirection:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml @@ -6538,7 +6538,7 @@ Excel.SearchDirection.forward; console.log("Search direction = " + searchDirectionToggle); -'Excel.SettableCellProperties#style:member': +Excel.SettableCellProperties#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -6615,7 +6615,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.Setting#delete:member(1)': +Excel.Setting#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -6637,7 +6637,7 @@ await context.sync(); }); -'Excel.SettingCollection#add:member(1)': +Excel.SettingCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -6650,7 +6650,7 @@ await context.sync(); console.log("Settings changed handler registered."); }); -'Excel.SettingCollection#onSettingsChanged:member': +Excel.SettingCollection#onSettingsChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -6663,7 +6663,7 @@ await context.sync(); console.log("Settings changed handler registered."); }); -'Excel.SettingCollection#getItemOrNullObject:member(1)': +Excel.SettingCollection#getItemOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -6685,7 +6685,7 @@ await context.sync(); }); -'Excel.Shape#delete:member(1)': +Excel.Shape#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6704,7 +6704,7 @@ shapes.items.forEach((shape) => shape.delete()); await context.sync(); }); -'Excel.Shape#fill:member': +Excel.Shape#fill:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6720,7 +6720,7 @@ shape.fill.foregroundColor = "yellow" await context.sync(); }); -'Excel.Shape#rotation:member': +Excel.Shape#rotation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6737,7 +6737,7 @@ shape.fill.clear(); await context.sync(); }); -'Excel.Shape#group:member': +Excel.Shape#group:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml @@ -6752,7 +6752,7 @@ await context.sync(); }); -'Excel.Shape#getAsImage:member(1)': +Excel.Shape#getAsImage:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -6768,7 +6768,7 @@ // Your add-in would save this string as a .png file. console.log("The image's Base64-encoded string: " + imageString); }); -'Excel.Shape#incrementRotation:member(1)': +Excel.Shape#incrementRotation:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -6780,7 +6780,7 @@ shape.incrementRotation(180); await context.sync(); }); -'Excel.Shape#line:member': +Excel.Shape#line:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -6799,7 +6799,7 @@ await context.sync(); }); -'Excel.Shape#incrementLeft:member(1)': +Excel.Shape#incrementLeft:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6811,7 +6811,7 @@ shape.incrementLeft(-25); await context.sync(); }); -'Excel.Shape#incrementTop:member(1)': +Excel.Shape#incrementTop:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6823,7 +6823,7 @@ shape.incrementTop(25); await context.sync(); }); -'Excel.Shape#lockAspectRatio:member': +Excel.Shape#lockAspectRatio:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6836,7 +6836,7 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Shape#scaleHeight:member(1)': +Excel.Shape#scaleHeight:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6849,7 +6849,7 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Shape#setZOrder:member(1)': +Excel.Shape#setZOrder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6861,7 +6861,7 @@ shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); }); -'Excel.ShapeAutoSize:enum': +Excel.ShapeAutoSize:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -6873,7 +6873,7 @@ textbox.textFrame.autoSizeSetting = Excel.ShapeAutoSize.autoSizeShapeToFitText; await context.sync(); }); -'Excel.ShapeCollection#addGeometricShape:member(1)': +Excel.ShapeCollection#addGeometricShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml @@ -6888,7 +6888,7 @@ shape.width = 200; await context.sync(); }); -'Excel.ShapeCollection#addGroup:member(1)': +Excel.ShapeCollection#addGroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml @@ -6906,7 +6906,7 @@ await context.sync(); }); -'Excel.ShapeCollection#addImage:member(1)': +Excel.ShapeCollection#addImage:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml @@ -6932,7 +6932,7 @@ // Read in the image file as a data URL. reader.readAsDataURL(myFile.files[0]); -'Excel.ShapeCollection#addLine:member(1)': +Excel.ShapeCollection#addLine:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml @@ -6944,7 +6944,7 @@ line.name = "StraightLine"; await context.sync(); }); -'Excel.ShapeCollection#addTextBox:member(1)': +Excel.ShapeCollection#addTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -6960,7 +6960,7 @@ textbox.name = "Textbox"; await context.sync(); }); -'Excel.ShapeGroup#ungroup:member(1)': +Excel.ShapeGroup#ungroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml @@ -6975,7 +6975,7 @@ await context.sync(); }); -'Excel.ShapeScaleType:enum': +Excel.ShapeScaleType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -6988,7 +6988,7 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.ShapeTextHorizontalAlignment:enum': +Excel.ShapeTextHorizontalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -7000,7 +7000,7 @@ textbox.textFrame.horizontalAlignment = Excel.ShapeTextHorizontalAlignment.center; await context.sync(); }); -'Excel.ShapeZOrder:enum': +Excel.ShapeZOrder:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml @@ -7012,7 +7012,7 @@ shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); }); -'Excel.SheetVisibility:enum': +Excel.SheetVisibility:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -7033,7 +7033,7 @@ console.log("Cannot hide the only visible worksheet"); } }); -'Excel.ShowAsCalculation:enum': +Excel.ShowAsCalculation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -7060,7 +7060,7 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.ShowAsRule#baseItem:member': +Excel.ShowAsRule#baseItem:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -7090,7 +7090,7 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.Slicer#clearFilters:member(1)': +Excel.Slicer#clearFilters:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7101,7 +7101,7 @@ slicer.clearFilters(); await context.sync(); }); -'Excel.Slicer#delete:member(1)': +Excel.Slicer#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7112,7 +7112,7 @@ sheet.slicers.getItemAt(0).delete(); await context.sync(); }); -'Excel.Slicer#selectItems:member(1)': +Excel.Slicer#selectItems:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7123,7 +7123,7 @@ slicer.selectItems(["Lemon", "Lime", "Orange"]); await context.sync(); }); -'Excel.Slicer#style:member': +Excel.Slicer#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7134,7 +7134,7 @@ slicer.style = "SlicerStyleLight6"; await context.sync(); }); -'Excel.SlicerCollection#add:member(1)': +Excel.SlicerCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7149,7 +7149,7 @@ slicer.name = "Fruit Slicer"; await context.sync(); }); -'Excel.SlicerCollection#getItem:member(1)': +Excel.SlicerCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -7164,7 +7164,7 @@ slicer.width = 150; await context.sync(); }); -'Excel.SortOn:enum': +Excel.SortOn:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -7194,7 +7194,7 @@ await context.sync(); }); } -'Excel.SortOrientation:enum': +Excel.SortOrientation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -7224,7 +7224,7 @@ await context.sync(); }); } -'CustomFunctions.StreamingInvocation#setResult:member': +CustomFunctions.StreamingInvocation#setResult:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/streaming-function.yaml @@ -7250,7 +7250,7 @@ clearInterval(timer); } } -'Excel.Style#delete:member(1)': +Excel.Style#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7267,7 +7267,7 @@ console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); -'Excel.Style#font:member': +Excel.Style#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7287,7 +7287,7 @@ console.log("Size: " + style.font.size); console.log("Fill color: " + style.fill.color); }); -'Excel.Style#horizontalAlignment:member': +Excel.Style#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7304,7 +7304,7 @@ await context.sync(); }); -'Excel.Style#load:member(1)': +Excel.Style#load:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7325,7 +7325,7 @@ console.log("Shrink to fit: " + style.shrinkToFit); console.log("Style locked: " + style.locked); }); -'Excel.StyleCollection#add:member(1)': +Excel.StyleCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7351,7 +7351,7 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.StyleCollection#getItem:member(1)': +Excel.StyleCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7377,7 +7377,7 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Table#onChanged:member': +Excel.Table#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml @@ -7390,7 +7390,7 @@ await context.sync(); console.log("A handler has been registered for the onChanged event"); }); -'Excel.Table#onSelectionChanged:member': +Excel.Table#onSelectionChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml @@ -7403,7 +7403,7 @@ await context.sync(); console.log("A handler has been registered for table onSelectionChanged event"); }); -'Excel.Table#resize:member(1)': +Excel.Table#resize:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/resize-table.yaml @@ -7419,7 +7419,7 @@ await context.sync(); }); -'Excel.TableChangedEventArgs#details:member': +Excel.TableChangedEventArgs#details:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-change-event-details.yaml @@ -7434,7 +7434,7 @@ + ` now is ${details.valueAfter}(${details.valueTypeAfter})`); }); } -'Excel.TableChangedEventArgs#tableId:member': +Excel.TableChangedEventArgs#tableId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml @@ -7453,7 +7453,7 @@ console.log("Worksheet Id : " + worksheet.name); }); } -'Excel.TableChangedEventArgs#worksheetId:member': +Excel.TableChangedEventArgs#worksheetId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml @@ -7472,7 +7472,7 @@ console.log("Worksheet Id : " + worksheet.name); }); } -'Excel.TableCollection:class': +Excel.TableCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7492,7 +7492,7 @@ }; await context.sync(); }); -'Excel.TableCollection#getItem:member(1)': +Excel.TableCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7512,7 +7512,7 @@ }; await context.sync(); }); -'Excel.TableCollection#onChanged:member': +Excel.TableCollection#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml @@ -7525,7 +7525,7 @@ await context.sync(); console.log("A handler has been registered for the table collection onChanged event"); }); -'Excel.TableColumn#getDataBodyRange:member(1)': +Excel.TableColumn#getDataBodyRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7545,7 +7545,7 @@ }; await context.sync(); }); -'Excel.TableColumnCollection:class': +Excel.TableColumnCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7565,7 +7565,7 @@ }; await context.sync(); }); -'Excel.TableColumnCollection#getItem:member(1)': +Excel.TableColumnCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml @@ -7583,7 +7583,7 @@ range.clearOrResetContents(); await context.sync(); }); -'Excel.TableSelectionChangedEventArgs#address:member': +Excel.TableSelectionChangedEventArgs#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml @@ -7594,7 +7594,7 @@ console.log("Handler for table onSelectionChanged event has been triggered. The new selection is: " + args.address); }); } -'Excel.TextConditionalFormat#format:member': +Excel.TextConditionalFormat#format:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -7610,7 +7610,7 @@ await context.sync(); }); -'Excel.TextConditionalFormat#rule:member': +Excel.TextConditionalFormat#rule:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -7626,7 +7626,7 @@ await context.sync(); }); -'Excel.TextFrame#deleteText:member(1)': +Excel.TextFrame#deleteText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml @@ -7638,7 +7638,7 @@ textbox.textFrame.deleteText(); await context.sync(); }); -'Excel.ValueFilterCondition:enum': +Excel.ValueFilterCondition:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -7665,7 +7665,7 @@ await context.sync(); }); -'Excel.VerticalAlignment:enum': +Excel.VerticalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7680,7 +7680,7 @@ await context.sync(); }); -'Excel.WebImageCellValue#address:member': +Excel.WebImageCellValue#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml @@ -7708,7 +7708,7 @@ // Open the image URL in a new browser tab. const tab = window.open(webImageData.address, "_blank"); }); -'Excel.WebImageCellValue#type:member': +Excel.WebImageCellValue#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml @@ -7744,7 +7744,7 @@ await context.sync(); }); -'Excel.Workbook#properties:member': +Excel.Workbook#properties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml @@ -7774,7 +7774,7 @@ console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#onActivated:member': +Excel.Workbook#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml @@ -7800,7 +7800,7 @@ await context.sync(); console.log("Added event handler for workbook activated."); }); -'Excel.Workbook#pivotTables:member': +Excel.Workbook#pivotTables:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -7818,7 +7818,7 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Workbook#getSelectedRanges:member(1)': +Excel.Workbook#getSelectedRanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -7831,7 +7831,7 @@ await context.sync(); }) -'Excel.Workbook#styles:member': +Excel.Workbook#styles:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml @@ -7857,7 +7857,7 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Workbook#getActiveShapeOrNullObject:member(1)': +Excel.Workbook#getActiveShapeOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-get-active.yaml @@ -7885,7 +7885,7 @@ console.log("No active shape"); } }); -'Excel.Workbook#getActiveCell:member(1)': +Excel.Workbook#getActiveCell:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml @@ -7901,7 +7901,7 @@ console.log("The active cell is " + activeCell.address); }); -'Excel.Workbook#insertWorksheetsFromBase64:member(1)': +Excel.Workbook#insertWorksheetsFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -7945,7 +7945,7 @@ workbook.insertWorksheetsFromBase64(externalWorkbook, options); await context.sync(); }); -'Excel.Workbook#close:member(1)': +Excel.Workbook#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -7954,7 +7954,7 @@ await Excel.run(async (context) => { context.workbook.close(Excel.CloseBehavior.save); }); -'Excel.Workbook#save:member(1)': +Excel.Workbook#save:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml @@ -7963,7 +7963,7 @@ await Excel.run(async (context) => { context.workbook.save(Excel.SaveBehavior.save); }); -'Excel.WorkbookProtection#protect:member(1)': +Excel.WorkbookProtection#protect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -7983,7 +7983,7 @@ workbook.protection.protect(password); } }); -'Excel.WorkbookProtection#unprotect:member(1)': +Excel.WorkbookProtection#unprotect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -7997,7 +7997,7 @@ let workbook = context.workbook; workbook.protection.unprotect(password); }); -'Excel.WorkbookRangeAreas#areas:member': +Excel.WorkbookRangeAreas#areas:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml @@ -8022,7 +8022,7 @@ } await context.sync(); }); -'Excel.Worksheet#customProperties:member': +Excel.Worksheet#customProperties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -8040,7 +8040,7 @@ console.log(`${property.key}:${property.value}`); }); }); -'Excel.Worksheet#onColumnSorted:member': +Excel.Worksheet#onColumnSorted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -8066,7 +8066,7 @@ }); }); }); -'Excel.Worksheet#onRowSorted:member': +Excel.Worksheet#onRowSorted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml @@ -8092,7 +8092,7 @@ }); }); }); -'Excel.Worksheet#onSingleClicked:member': +Excel.Worksheet#onSingleClicked:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml @@ -8111,7 +8111,7 @@ await context.sync(); }); -'Excel.Worksheet#onFormulaChanged:member': +Excel.Worksheet#onFormulaChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml @@ -8148,7 +8148,7 @@ ); }); } -'Excel.Worksheet#onChanged:member': +Excel.Worksheet#onChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -8161,7 +8161,7 @@ console.log("Added a worksheet-level data-changed event handler."); }); -'Excel.Worksheet#onProtectionChanged:member': +Excel.Worksheet#onProtectionChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8199,7 +8199,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.Worksheet#showOutlineLevels:member(1)': +Excel.Worksheet#showOutlineLevels:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml @@ -8212,7 +8212,7 @@ sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Worksheet#slicers:member': +Excel.Worksheet#slicers:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -8227,7 +8227,7 @@ slicer.name = "Fruit Slicer"; await context.sync(); }); -'Excel.Worksheet#pivotTables:member': +Excel.Worksheet#pivotTables:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -8245,7 +8245,7 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Worksheet#getRanges:member(1)': +Excel.Worksheet#getRanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -8259,7 +8259,7 @@ await context.sync(); }) -'Excel.Worksheet#autoFilter:member': +Excel.Worksheet#autoFilter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -8282,7 +8282,7 @@ await context.sync(); }); -'Excel.Worksheet#copy:member(1)': +Excel.Worksheet#copy:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml @@ -8301,7 +8301,7 @@ console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -'Excel.Worksheet#findAllOrNullObject:member(1)': +Excel.Worksheet#findAllOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -8322,7 +8322,7 @@ foundRanges.format.fill.color = "green" } }); -'Excel.Worksheet#showGridlines:member': +Excel.Worksheet#showGridlines:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/gridlines.yaml @@ -8334,7 +8334,7 @@ await context.sync(); }); -'Excel.Worksheet#getNext:member(1)': +Excel.Worksheet#getNext:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8364,7 +8364,7 @@ await context.sync(); }); -'Excel.Worksheet#getPrevious:member(1)': +Excel.Worksheet#getPrevious:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8390,7 +8390,7 @@ await context.sync(); }); -'Excel.Worksheet#tabColor:member': +Excel.Worksheet#tabColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml @@ -8402,7 +8402,7 @@ await context.sync(); }); -'Excel.WorksheetAddedEventArgs#worksheetId:member': +Excel.WorksheetAddedEventArgs#worksheetId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8416,7 +8416,7 @@ ); }); } -'Excel.WorksheetChangedEventArgs#changeDirectionState:member': +Excel.WorksheetChangedEventArgs#changeDirectionState:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -8460,7 +8460,7 @@ const range = sheet.getRange("A5:F5"); range.delete(Excel.DeleteShiftDirection.up); }); -'Excel.WorksheetChangedEventArgs#triggerSource:member': +Excel.WorksheetChangedEventArgs#triggerSource:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml @@ -8491,7 +8491,7 @@ } }); } -'Excel.WorksheetCollection#onActivated:member': +Excel.WorksheetCollection#onActivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8504,7 +8504,7 @@ await context.sync(); console.log("A handler has been registered for the OnActivate event."); }); -'Excel.WorksheetCollection#onAdded:member': +Excel.WorksheetCollection#onAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8517,7 +8517,7 @@ await context.sync(); console.log("A handler has been registered for the OnAdded event."); }); -'Excel.WorksheetCollection#onDeactivated:member': +Excel.WorksheetCollection#onDeactivated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -8530,7 +8530,7 @@ await context.sync(); console.log("A handler has been registered for the OnDeactivate event."); }); -'Excel.WorksheetCollection#getFirst:member(1)': +Excel.WorksheetCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8560,7 +8560,7 @@ await context.sync(); }); -'Excel.WorksheetCollection#getLast:member(1)': +Excel.WorksheetCollection#getLast:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -8590,7 +8590,7 @@ await context.sync(); }); -'Excel.WorksheetCustomPropertyCollection#add:member(1)': +Excel.WorksheetCustomPropertyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml @@ -8609,7 +8609,7 @@ console.log(`Successfully set custom worksheet property ${userKey}:${userValue}.`); }); -'Excel.WorksheetFreezePanes#freezeAt:member(1)': +Excel.WorksheetFreezePanes#freezeAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8623,7 +8623,7 @@ await context.sync(); }); -'Excel.WorksheetFreezePanes#freezeColumns:member(1)': +Excel.WorksheetFreezePanes#freezeColumns:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8637,7 +8637,7 @@ await context.sync(); }); -'Excel.WorksheetFreezePanes#freezeRows:member(1)': +Excel.WorksheetFreezePanes#freezeRows:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8651,7 +8651,7 @@ await context.sync(); }); -'Excel.WorksheetFreezePanes#getLocationOrNullObject:member(1)': +Excel.WorksheetFreezePanes#getLocationOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8670,7 +8670,7 @@ console.log(`The address of the frozen range (cells that are frozen in the top-and-left-most pane) is "${frozenRange.address}"`); } }); -'Excel.WorksheetFreezePanes#unfreeze:member(1)': +Excel.WorksheetFreezePanes#unfreeze:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -8682,7 +8682,7 @@ await context.sync(); }); -'Excel.WorksheetPositionType:enum': +Excel.WorksheetPositionType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -8703,7 +8703,7 @@ workbook.insertWorksheetsFromBase64(externalWorkbook, options); await context.sync(); }); -'Excel.WorksheetProtection#protect:member(1)': +Excel.WorksheetProtection#protect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -8723,7 +8723,7 @@ activeSheet.protection.protect(null, password); } }); -'Excel.WorksheetProtection#unprotect:member(1)': +Excel.WorksheetProtection#unprotect:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml @@ -8737,7 +8737,7 @@ let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); -'Excel.WorksheetProtectionChangedEventArgs#isProtected:member': +Excel.WorksheetProtectionChangedEventArgs#isProtected:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8756,7 +8756,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.WorksheetProtectionChangedEventArgs#source:member': +Excel.WorksheetProtectionChangedEventArgs#source:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8775,7 +8775,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.WorksheetProtectionChangedEventArgs#worksheetId:member': +Excel.WorksheetProtectionChangedEventArgs#worksheetId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml @@ -8794,7 +8794,7 @@ console.log(" Source of change event: " + source + "."); }); } -'Excel.WorksheetSingleClickedEventArgs#address:member': +Excel.WorksheetSingleClickedEventArgs#address:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml @@ -8813,7 +8813,7 @@ await context.sync(); }); -'Office.AppointmentCompose#addFileAttachmentAsync:member(1)': +Office.AppointmentCompose#addFileAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -8830,7 +8830,7 @@ console.log(result); } ); -'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': +Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -8876,7 +8876,7 @@ } } ); -'Office.AppointmentCompose#categories:member': +Office.AppointmentCompose#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -8950,14 +8950,14 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#close:member(1)': +Office.AppointmentCompose#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml Office.context.mailbox.item.close(); -'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': +Office.AppointmentCompose#disableClientSignatureAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -8973,7 +8973,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#end:member': +Office.AppointmentCompose#end:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml @@ -9007,7 +9007,7 @@ console.log(`Successfully set end date and time to ${end}`); }); }); -'Office.AppointmentCompose#enhancedLocation:member': +Office.AppointmentCompose#enhancedLocation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -9078,7 +9078,7 @@ console.error(`Failed to remove locations. Error message: ${result.error.message}`); } }); -'Office.AppointmentCompose#getAttachmentContentAsync:member(1)': +Office.AppointmentCompose#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -9103,7 +9103,7 @@ Office.context.mailbox.item.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } }); -'Office.AppointmentCompose#getAttachmentsAsync:member(1)': +Office.AppointmentCompose#getAttachmentsAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -9151,7 +9151,7 @@ console.log("No attachments on this message."); } }); -'Office.AppointmentCompose#getItemIdAsync:member(2)': +Office.AppointmentCompose#getItemIdAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -9165,7 +9165,7 @@ console.log(result.value); }); -'Office.AppointmentCompose#getSelectedDataAsync:member(2)': +Office.AppointmentCompose#getSelectedDataAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml @@ -9181,7 +9181,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': +Office.AppointmentCompose#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -9197,7 +9197,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.AppointmentCompose#isAllDayEvent:member': +Office.AppointmentCompose#isAllDayEvent:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -9223,7 +9223,7 @@ console.log("Appointment set to all-day event."); } }); -'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': +Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -9239,7 +9239,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#itemType:member': +Office.AppointmentCompose#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -9255,7 +9255,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.AppointmentCompose#loadCustomPropertiesAsync:member(1)': +Office.AppointmentCompose#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -9270,7 +9270,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.AppointmentCompose#location:member': +Office.AppointmentCompose#location:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -9297,7 +9297,7 @@ } console.log(`Successfully set location to ${location}`); }); -'Office.AppointmentCompose#notificationMessages:member': +Office.AppointmentCompose#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -9401,7 +9401,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.AppointmentCompose#optionalAttendees:member': +Office.AppointmentCompose#optionalAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml @@ -9443,7 +9443,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#organizer:member': +Office.AppointmentCompose#organizer:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -9457,7 +9457,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#recurrence:member': +Office.AppointmentCompose#recurrence:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -9526,7 +9526,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.AppointmentCompose#removeAttachmentAsync:member(1)': +Office.AppointmentCompose#removeAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -9543,7 +9543,7 @@ console.log(`Attachment removed successfully.`); } ); -'Office.AppointmentCompose#requiredAttendees:member': +Office.AppointmentCompose#requiredAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml @@ -9585,7 +9585,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#saveAsync:member(1)': +Office.AppointmentCompose#saveAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/save.yaml @@ -9599,7 +9599,7 @@ console.error(`saveAsync failed with message ${result.error.message}`); } }); -'Office.AppointmentCompose#sendAsync:member(2)': +Office.AppointmentCompose#sendAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml @@ -9613,7 +9613,7 @@ return; } }); -'Office.AppointmentCompose#sensitivity:member': +Office.AppointmentCompose#sensitivity:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -9641,7 +9641,7 @@ } } ); -'Office.AppointmentCompose#sensitivityLabel:member': +Office.AppointmentCompose#sensitivityLabel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -9662,7 +9662,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.AppointmentCompose#seriesId:member': +Office.AppointmentCompose#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -9678,7 +9678,7 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.AppointmentCompose#sessionData:member': +Office.AppointmentCompose#sessionData:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -9691,7 +9691,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.AppointmentCompose#setSelectedDataAsync:member(1)': +Office.AppointmentCompose#setSelectedDataAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -9705,7 +9705,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentCompose#start:member': +Office.AppointmentCompose#start:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -9734,7 +9734,7 @@ } console.log(`Successfully set start date and time to ${start}`); }); -'Office.AppointmentCompose#subject:member': +Office.AppointmentCompose#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -9761,7 +9761,7 @@ } console.log(`Successfully set subject to ${subject}`); }); -'Office.AppointmentRead#attachments:member': +Office.AppointmentRead#attachments:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -9782,7 +9782,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.AppointmentRead#categories:member': +Office.AppointmentRead#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -9856,7 +9856,7 @@ console.error(asyncResult.error); } }); -'Office.AppointmentRead#dateTimeCreated:member': +Office.AppointmentRead#dateTimeCreated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -9864,7 +9864,7 @@ console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); -'Office.AppointmentRead#dateTimeModified:member': +Office.AppointmentRead#dateTimeModified:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -9872,7 +9872,7 @@ console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); -'Office.AppointmentRead#displayReplyAllForm:member(1)': +Office.AppointmentRead#displayReplyAllForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -9924,7 +9924,7 @@ console.log("Created a reply-all form with attachments."); } }); -'Office.AppointmentRead#displayReplyAllFormAsync:member(1)': +Office.AppointmentRead#displayReplyAllFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -9984,7 +9984,7 @@ console.log("Created a reply-all form with attachments."); } ); -'Office.AppointmentRead#displayReplyForm:member(1)': +Office.AppointmentRead#displayReplyForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -10036,7 +10036,7 @@ console.log("Created a reply with attachments."); } }); -'Office.AppointmentRead#displayReplyFormAsync:member(1)': +Office.AppointmentRead#displayReplyFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -10096,14 +10096,14 @@ console.log("Created reply with attachments."); } ); -'Office.AppointmentRead#end:member': +Office.AppointmentRead#end:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); -'Office.AppointmentRead#enhancedLocation:member': +Office.AppointmentRead#enhancedLocation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -10126,7 +10126,7 @@ console.log("There are no locations."); } }); -'Office.AppointmentRead#getAttachmentContentAsync:member(1)': +Office.AppointmentRead#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -10149,7 +10149,7 @@ // Log the attachment type and its contents to the console. item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } -'Office.AppointmentRead#getRegExMatches:member(1)': +Office.AppointmentRead#getRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -10158,7 +10158,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); -'Office.AppointmentRead#getRegExMatchesByName:member(1)': +Office.AppointmentRead#getRegExMatchesByName:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -10167,7 +10167,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.AppointmentRead#getSelectedRegExMatches:member(1)': +Office.AppointmentRead#getSelectedRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -10180,7 +10180,7 @@ } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } -'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': +Office.AppointmentRead#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -10196,14 +10196,14 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.AppointmentRead#itemClass:member': +Office.AppointmentRead#itemClass:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); -'Office.AppointmentRead#itemType:member': +Office.AppointmentRead#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -10219,7 +10219,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.AppointmentRead#loadCustomPropertiesAsync:member(1)': +Office.AppointmentRead#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10234,7 +10234,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.AppointmentRead#location:member': +Office.AppointmentRead#location:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -10242,7 +10242,7 @@ console.log(`Appointment location: ${Office.context.mailbox.item.location}`); -'Office.AppointmentRead#normalizedSubject:member': +Office.AppointmentRead#normalizedSubject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -10250,7 +10250,7 @@ console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); -'Office.AppointmentRead#notificationMessages:member': +Office.AppointmentRead#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -10354,7 +10354,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.AppointmentRead#optionalAttendees:member': +Office.AppointmentRead#optionalAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml @@ -10373,7 +10373,7 @@ apptOptionalAttendees[i].appointmentResponse ); } -'Office.AppointmentRead#organizer:member': +Office.AppointmentRead#organizer:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml @@ -10383,7 +10383,7 @@ console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); -'Office.AppointmentRead#recurrence:member': +Office.AppointmentRead#recurrence:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -10399,7 +10399,7 @@ } else { console.log(JSON.stringify(recurrence)); } -'Office.AppointmentRead#requiredAttendees:member': +Office.AppointmentRead#requiredAttendees:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml @@ -10418,7 +10418,7 @@ apptRequiredAttendees[i].appointmentResponse ); } -'Office.AppointmentRead#seriesId:member': +Office.AppointmentRead#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -10434,21 +10434,21 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.AppointmentRead#start:member': +Office.AppointmentRead#start:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); -'Office.AppointmentRead#subject:member': +Office.AppointmentRead#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml console.log(`Subject: ${Office.context.mailbox.item.subject}`); -'Office.AttachmentDetails:interface': +Office.AttachmentDetails:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -10469,7 +10469,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.AttachmentDetailsCompose:interface': +Office.AttachmentDetailsCompose:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -10517,7 +10517,7 @@ console.log("No attachments on this message."); } }); -'Office.Body:interface': +Office.Body:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -10553,7 +10553,7 @@ }); }); }); -'Office.Body#appendOnSendAsync:member(1)': +Office.Body#appendOnSendAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/append-text-on-send.yaml @@ -10585,7 +10585,7 @@ console.log(`"${text}" will be appended to the body once the message or appointment is sent. Send the mail item to test this feature.`); }); }); -'Office.Body#getAsync:member(2)': +Office.Body#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -10621,7 +10621,7 @@ }); }); }); -'Office.Body#getTypeAsync:member(1)': +Office.Body#getTypeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-body-format.yaml @@ -10638,7 +10638,7 @@ console.log("Body format: " + asyncResult.value); }); -'Office.Body#prependAsync:member(1)': +Office.Body#prependAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -10673,7 +10673,7 @@ console.log(`"${text}" prepended to the body.`); }); }); -'Office.Body#prependOnSendAsync:member(1)': +Office.Body#prependOnSendAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -10705,7 +10705,7 @@ console.log(`"${text}" will be prepended to the body once the message or appointment is sent. Send the mail item to test this feature.`); }); }); -'Office.Body#setAsync:member(1)': +Office.Body#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -10741,7 +10741,7 @@ }); }); }); -'Office.Body#setSelectedDataAsync:member(1)': +Office.Body#setSelectedDataAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/replace-selected-text.yaml @@ -10776,7 +10776,7 @@ console.log(`Replaced selected text with "${text}".`); }); }); -'Office.Body#setSignatureAsync:member(1)': +Office.Body#setSignatureAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -10827,7 +10827,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#addAsync:member(1)': +Office.Categories#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -10858,7 +10858,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#getAsync:member(2)': +Office.Categories#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -10877,7 +10877,7 @@ console.error(asyncResult.error); } }); -'Office.Categories#removeAsync:member(1)': +Office.Categories#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -10903,7 +10903,7 @@ console.error(asyncResult.error); } }); -'Office.CustomProperties#get:member(1)': +Office.CustomProperties#get:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10916,7 +10916,7 @@ console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); -'Office.CustomProperties#getAll:member(1)': +Office.CustomProperties#getAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10932,7 +10932,7 @@ console.log(allCustomProps); -'Office.CustomProperties#remove:member(1)': +Office.CustomProperties#remove:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10944,7 +10944,7 @@ customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); -'Office.CustomProperties#saveAsync:member(1)': +Office.CustomProperties#saveAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10958,7 +10958,7 @@ console.log(`Custom properties saved with status: ${result.status}`); }); -'Office.CustomProperties#set:member(1)': +Office.CustomProperties#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -10974,7 +10974,7 @@ console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); -'Office.DelayDeliveryTime#getAsync:member(2)': +Office.DelayDeliveryTime#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -10996,7 +10996,7 @@ console.log(`Message delivery date and time: ${date.toString()}`); } }); -'Office.DelayDeliveryTime#setAsync:member(2)': +Office.DelayDeliveryTime#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -11020,7 +11020,7 @@ } }); } -'Office.Diagnostics:interface': +Office.Diagnostics:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -11053,7 +11053,7 @@ console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); break; } -'Office.Display#body:member': +Office.Display#body:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11078,7 +11078,7 @@ console.log("Temporarily set the content displayed in the body."); }); -'Office.Display#subject:member': +Office.Display#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11103,7 +11103,7 @@ console.log("Temporarily set the content displayed in the subject field."); }); -'Office.DisplayedBody#setAsync:member(2)': +Office.DisplayedBody#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11128,7 +11128,7 @@ console.log("Temporarily set the content displayed in the body."); }); -'Office.DisplayedSubject#setAsync:member(2)': +Office.DisplayedSubject#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -11153,7 +11153,7 @@ console.log("Temporarily set the content displayed in the subject field."); }); -'Office.EnhancedLocation#addAsync:member(1)': +Office.EnhancedLocation#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -11178,7 +11178,7 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); -'Office.EnhancedLocation#getAsync:member(1)': +Office.EnhancedLocation#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -11201,7 +11201,7 @@ console.log("There are no locations."); } }); -'Office.EnhancedLocation#removeAsync:member(1)': +Office.EnhancedLocation#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -11226,7 +11226,7 @@ console.error(`Failed to remove locations. Error message: ${result.error.message}`); } }); -'Office.From#getAsync:member(1)': +Office.From#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -11240,7 +11240,7 @@ console.error(asyncResult.error); } }); -'Office.InternetHeaders#getAsync:member(1)': +Office.InternetHeaders#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -11256,7 +11256,7 @@ } } ); -'Office.InternetHeaders#removeAsync:member(1)': +Office.InternetHeaders#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -11272,7 +11272,7 @@ } } ); -'Office.InternetHeaders#setAsync:member(1)': +Office.InternetHeaders#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -11289,7 +11289,7 @@ } ); -'Office.IsAllDayEvent#getAsync:member(2)': +Office.IsAllDayEvent#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -11302,7 +11302,7 @@ console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.IsAllDayEvent#setAsync:member(1)': +Office.IsAllDayEvent#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -11316,7 +11316,7 @@ console.log("Appointment set to all-day event."); } }); -'Office.Item:interface': +Office.Item:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -11332,7 +11332,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.Location#getAsync:member(2)': +Office.Location#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -11345,7 +11345,7 @@ } console.log(`Appointment location: ${result.value}`); }); -'Office.Location#setAsync:member(1)': +Office.Location#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml @@ -11360,7 +11360,7 @@ } console.log(`Successfully set location to ${location}`); }); -'Office.Mailbox#convertToEwsId:member(1)': +Office.Mailbox#convertToEwsId:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -11389,7 +11389,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#convertToRestId:member(1)': +Office.Mailbox#convertToRestId:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -11418,7 +11418,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#diagnostics:member': +Office.Mailbox#diagnostics:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -11451,7 +11451,7 @@ console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); break; } -'Office.Mailbox#displayAppointmentForm:member(1)': +Office.Mailbox#displayAppointmentForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -11461,7 +11461,7 @@ HTMLInputElement).value; Office.context.mailbox.displayAppointmentForm(itemId); -'Office.Mailbox#displayAppointmentFormAsync:member(1)': +Office.Mailbox#displayAppointmentFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -11479,7 +11479,7 @@ function(asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); -'Office.Mailbox#displayMessageForm:member(1)': +Office.Mailbox#displayMessageForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml @@ -11489,7 +11489,7 @@ HTMLInputElement).value; Office.context.mailbox.displayMessageForm(itemId); -'Office.Mailbox#displayMessageFormAsync:member(1)': +Office.Mailbox#displayMessageFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml @@ -11507,7 +11507,7 @@ (asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); -'Office.Mailbox#displayNewAppointmentForm:member(1)': +Office.Mailbox#displayNewAppointmentForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml @@ -11530,7 +11530,7 @@ resources: ["projector@contoso.com"], body: "Hello World!" }); -'Office.Mailbox#displayNewAppointmentFormAsync:member(1)': +Office.Mailbox#displayNewAppointmentFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml @@ -11562,7 +11562,7 @@ console.log(JSON.stringify(asyncResult)); } ); -'Office.Mailbox#displayNewMessageForm:member(1)': +Office.Mailbox#displayNewMessageForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml @@ -11582,7 +11582,7 @@ } ] }); -'Office.Mailbox#displayNewMessageFormAsync:member(1)': +Office.Mailbox#displayNewMessageFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml @@ -11611,7 +11611,7 @@ console.log(JSON.stringify(asyncResult)); } ); -'Office.Mailbox#ewsUrl:member': +Office.Mailbox#ewsUrl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -11640,7 +11640,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#getCallbackTokenAsync:member(2)': +Office.Mailbox#getCallbackTokenAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml @@ -11654,7 +11654,7 @@ console.log(result.value); }); -'Office.Mailbox#getSelectedItemsAsync:member(2)': +Office.Mailbox#getSelectedItemsAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -11678,7 +11678,7 @@ console.log(`Has attachment: ${message.hasAttachment}`); }); }); -'Office.Mailbox#getUserIdentityTokenAsync:member(1)': +Office.Mailbox#getUserIdentityTokenAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml @@ -11692,7 +11692,7 @@ console.log(result.value); }); -'Office.Mailbox#loadItemByIdAsync:member(1)': +Office.Mailbox#loadItemByIdAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-loaded-message-properties.yaml @@ -11723,7 +11723,7 @@ }); }); } -'Office.Mailbox#makeEwsRequestAsync:member(1)': +Office.Mailbox#makeEwsRequestAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -11787,7 +11787,7 @@ Office.context.mailbox.makeEwsRequestAsync(request, (result) => { console.log(result); }); -'Office.Mailbox#masterCategories:member': +Office.Mailbox#masterCategories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -11843,7 +11843,7 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MailboxEnums.ActionType:enum': +Office.MailboxEnums.ActionType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -11875,7 +11875,7 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.MailboxEnums.AppointmentSensitivityType:enum': +Office.MailboxEnums.AppointmentSensitivityType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -11891,7 +11891,7 @@ } } ); -'Office.MailboxEnums.AttachmentContentFormat:enum': +Office.MailboxEnums.AttachmentContentFormat:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -11922,7 +11922,7 @@ console.log(result.value.content); } -'Office.MailboxEnums.AttachmentType:enum': +Office.MailboxEnums.AttachmentType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -11970,7 +11970,7 @@ console.log("No attachments on this message."); } }); -'Office.MailboxEnums.CategoryColor:enum': +Office.MailboxEnums.CategoryColor:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -11992,7 +11992,7 @@ console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MailboxEnums.ComposeType:enum': +Office.MailboxEnums.ComposeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -12012,7 +12012,7 @@ console.error(asyncResult.error); } }); -'Office.MailboxEnums.Days:enum': +Office.MailboxEnums.Days:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12064,7 +12064,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.ItemNotificationMessageType:enum': +Office.MailboxEnums.ItemNotificationMessageType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -12082,7 +12082,7 @@ }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.MailboxEnums.ItemType:enum': +Office.MailboxEnums.ItemType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -12098,7 +12098,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.MailboxEnums.LocationType:enum': +Office.MailboxEnums.LocationType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml @@ -12123,7 +12123,7 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); -'Office.MailboxEnums.Month:enum': +Office.MailboxEnums.Month:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12175,7 +12175,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.OWAView:enum': +Office.MailboxEnums.OWAView:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -12208,7 +12208,7 @@ console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); break; } -'Office.MailboxEnums.RecipientType:enum': +Office.MailboxEnums.RecipientType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -12263,7 +12263,7 @@ console.log("Other Recipients:"); otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); } -'Office.MailboxEnums.RecurrenceTimeZone:enum': +Office.MailboxEnums.RecurrenceTimeZone:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12315,7 +12315,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.RecurrenceType:enum': +Office.MailboxEnums.RecurrenceType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12367,7 +12367,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MailboxEnums.ResponseType:enum': +Office.MailboxEnums.ResponseType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -12408,7 +12408,7 @@ console.log("No response: "); printAttendees(noResponse); } -'Office.MailboxEnums.RestVersion:enum': +Office.MailboxEnums.RestVersion:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml @@ -12437,7 +12437,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.MailboxEnums.SourceProperty:enum': +Office.MailboxEnums.SourceProperty:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml @@ -12453,7 +12453,7 @@ console.error(asyncResult.error); } }); -'Office.MailboxEnums.WeekNumber:enum': +Office.MailboxEnums.WeekNumber:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -12505,7 +12505,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.MasterCategories#addAsync:member(1)': +Office.MasterCategories#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -12527,7 +12527,7 @@ console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MasterCategories#getAsync:member(2)': +Office.MasterCategories#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -12546,7 +12546,7 @@ console.error(asyncResult.error); } }); -'Office.MasterCategories#removeAsync:member(1)': +Office.MasterCategories#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml @@ -12563,7 +12563,7 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MessageCompose:interface': +Office.MessageCompose:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12580,7 +12580,7 @@ console.log(result); } ); -'Office.MessageCompose#addFileAttachmentAsync:member(1)': +Office.MessageCompose#addFileAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12597,7 +12597,7 @@ console.log(result); } ); -'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': +Office.MessageCompose#addFileAttachmentFromBase64Async:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12643,7 +12643,7 @@ } } ); -'Office.MessageCompose#bcc:member': +Office.MessageCompose#bcc:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -12677,7 +12677,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#categories:member': +Office.MessageCompose#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -12751,7 +12751,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#cc:member': +Office.MessageCompose#cc:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml @@ -12785,14 +12785,14 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#close:member(1)': +Office.MessageCompose#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml Office.context.mailbox.item.close(); -'Office.MessageCompose#closeAsync:member(2)': +Office.MessageCompose#closeAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close-async.yaml @@ -12816,7 +12816,7 @@ return; } }); -'Office.MessageCompose#conversationId:member': +Office.MessageCompose#conversationId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -12824,7 +12824,7 @@ console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); -'Office.MessageCompose#delayDeliveryTime:member': +Office.MessageCompose#delayDeliveryTime:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -12848,7 +12848,7 @@ } }); } -'Office.MessageCompose#disableClientSignatureAsync:member(1)': +Office.MessageCompose#disableClientSignatureAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -12864,7 +12864,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#from:member': +Office.MessageCompose#from:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml @@ -12878,7 +12878,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#getAttachmentContentAsync:member(1)': +Office.MessageCompose#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -12903,7 +12903,7 @@ Office.context.mailbox.item.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } }); -'Office.MessageCompose#getAttachmentsAsync:member(1)': +Office.MessageCompose#getAttachmentsAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -12951,7 +12951,7 @@ console.log("No attachments on this message."); } }); -'Office.MessageCompose#getComposeTypeAsync:member(2)': +Office.MessageCompose#getComposeTypeAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -12971,7 +12971,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#getConversationIndexAsync:member(2)': +Office.MessageCompose#getConversationIndexAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-index.yaml @@ -12996,7 +12996,7 @@ console.log("The current message doesn't belong to a conversation thread."); } }); -'Office.MessageCompose#getItemClassAsync:member(2)': +Office.MessageCompose#getItemClassAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-async.yaml @@ -13015,7 +13015,7 @@ console.log("Item class of the current message: " + asyncResult.value); }); -'Office.MessageCompose#getItemIdAsync:member(2)': +Office.MessageCompose#getItemIdAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/item-id-compose.yaml @@ -13029,7 +13029,7 @@ console.log(result.value); }); -'Office.MessageCompose#getSelectedDataAsync:member(2)': +Office.MessageCompose#getSelectedDataAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml @@ -13045,7 +13045,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#getSharedPropertiesAsync:member(2)': +Office.MessageCompose#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -13061,7 +13061,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.MessageCompose#inReplyTo:member': +Office.MessageCompose#inReplyTo:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-in-reply-to.yaml @@ -13080,7 +13080,7 @@ } else { console.log("No InReplyTo property available for this message"); } -'Office.MessageCompose#internetHeaders:member': +Office.MessageCompose#internetHeaders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml @@ -13096,7 +13096,7 @@ } } ); -'Office.MessageCompose#isClientSignatureEnabledAsync:member(1)': +Office.MessageCompose#isClientSignatureEnabledAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -13112,7 +13112,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#itemType:member': +Office.MessageCompose#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -13128,7 +13128,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.MessageCompose#loadCustomPropertiesAsync:member(1)': +Office.MessageCompose#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -13143,7 +13143,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.MessageCompose#notificationMessages:member': +Office.MessageCompose#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -13247,7 +13247,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.MessageCompose#removeAttachmentAsync:member(1)': +Office.MessageCompose#removeAttachmentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml @@ -13264,7 +13264,7 @@ console.log(`Attachment removed successfully.`); } ); -'Office.MessageCompose#sendAsync:member(2)': +Office.MessageCompose#sendAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/send-async.yaml @@ -13278,7 +13278,7 @@ return; } }); -'Office.MessageCompose#sensitivityLabel:member': +Office.MessageCompose#sensitivityLabel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -13299,7 +13299,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.MessageCompose#seriesId:member': +Office.MessageCompose#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -13315,7 +13315,7 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.MessageCompose#sessionData:member': +Office.MessageCompose#sessionData:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -13328,7 +13328,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.MessageCompose#setSelectedDataAsync:member(1)': +Office.MessageCompose#setSelectedDataAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -13342,7 +13342,7 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#subject:member': +Office.MessageCompose#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml @@ -13369,7 +13369,7 @@ } console.log(`Successfully set subject to ${subject}`); }); -'Office.MessageCompose#to:member': +Office.MessageCompose#to:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml @@ -13403,7 +13403,7 @@ console.error(asyncResult.error); } }); -'Office.MessageRead:interface': +Office.MessageRead:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -13424,7 +13424,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.MessageRead#attachments:member': +Office.MessageRead#attachments:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml @@ -13445,7 +13445,7 @@ } else { console.log("This mail item doesn't contain any attachments."); } -'Office.MessageRead#categories:member': +Office.MessageRead#categories:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml @@ -13519,7 +13519,7 @@ console.error(asyncResult.error); } }); -'Office.MessageRead#cc:member': +Office.MessageRead#cc:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml @@ -13532,7 +13532,7 @@ for (let i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } -'Office.MessageRead#conversationId:member': +Office.MessageRead#conversationId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml @@ -13540,7 +13540,7 @@ console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); -'Office.MessageRead#dateTimeCreated:member': +Office.MessageRead#dateTimeCreated:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml @@ -13548,7 +13548,7 @@ console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); -'Office.MessageRead#dateTimeModified:member': +Office.MessageRead#dateTimeModified:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml @@ -13556,7 +13556,7 @@ console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); -'Office.MessageRead#display:member': +Office.MessageRead#display:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -13581,7 +13581,7 @@ console.log("Temporarily set the content displayed in the body."); }); -'Office.MessageRead#displayReplyAllForm:member(1)': +Office.MessageRead#displayReplyAllForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13633,7 +13633,7 @@ console.log("Created a reply-all form with attachments."); } }); -'Office.MessageRead#displayReplyAllFormAsync:member(1)': +Office.MessageRead#displayReplyAllFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13693,7 +13693,7 @@ console.log("Created a reply-all form with attachments."); } ); -'Office.MessageRead#displayReplyForm:member(1)': +Office.MessageRead#displayReplyForm:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13745,7 +13745,7 @@ console.log("Created a reply with attachments."); } }); -'Office.MessageRead#displayReplyFormAsync:member(1)': +Office.MessageRead#displayReplyFormAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml @@ -13805,14 +13805,14 @@ console.log("Created reply with attachments."); } ); -'Office.MessageRead#end:member': +Office.MessageRead#end:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); -'Office.MessageRead#from:member': +Office.MessageRead#from:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml @@ -13822,7 +13822,7 @@ console.log("Message received from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); -'Office.MessageRead#getAllInternetHeadersAsync:member(1)': +Office.MessageRead#getAllInternetHeadersAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml @@ -13848,7 +13848,7 @@ console.log("Error getting internet headers: " + JSON.stringify(asyncResult.error)); } }); -'Office.MessageRead#getAsFileAsync:member(2)': +Office.MessageRead#getAsFileAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-eml-format.yaml @@ -13862,7 +13862,7 @@ console.log(asyncResult.value); }); -'Office.MessageRead#getAttachmentContentAsync:member(1)': +Office.MessageRead#getAttachmentContentAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml @@ -13885,7 +13885,7 @@ // Log the attachment type and its contents to the console. item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } -'Office.MessageRead#getRegExMatches:member(1)': +Office.MessageRead#getRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -13894,7 +13894,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatches()); -'Office.MessageRead#getRegExMatchesByName:member(1)': +Office.MessageRead#getRegExMatchesByName:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -13903,7 +13903,7 @@ // This API only works when you click on the highlighted word "ScriptLab". console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.MessageRead#getSelectedRegExMatches:member(1)': +Office.MessageRead#getSelectedRegExMatches:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml @@ -13916,7 +13916,7 @@ } else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } -'Office.MessageRead#getSharedPropertiesAsync:member(2)': +Office.MessageRead#getSharedPropertiesAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -13932,7 +13932,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.MessageRead#internetMessageId:member': +Office.MessageRead#internetMessageId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml @@ -13940,14 +13940,14 @@ console.log(`Internet message ID: ${Office.context.mailbox.item.internetMessageId}`); -'Office.MessageRead#itemClass:member': +Office.MessageRead#itemClass:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); -'Office.MessageRead#itemType:member': +Office.MessageRead#itemType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -13963,7 +13963,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.MessageRead#loadCustomPropertiesAsync:member(1)': +Office.MessageRead#loadCustomPropertiesAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml @@ -13978,7 +13978,7 @@ customProps = result.value; console.log("Loaded the CustomProperties object."); }); -'Office.MessageRead#location:member': +Office.MessageRead#location:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -13986,7 +13986,7 @@ console.log(`Appointment location: ${Office.context.mailbox.item.location}`); -'Office.MessageRead#normalizedSubject:member': +Office.MessageRead#normalizedSubject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml @@ -13994,7 +13994,7 @@ console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); -'Office.MessageRead#notificationMessages:member': +Office.MessageRead#notificationMessages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14098,7 +14098,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.MessageRead#recurrence:member': +Office.MessageRead#recurrence:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -14114,7 +14114,7 @@ } else { console.log(JSON.stringify(recurrence)); } -'Office.MessageRead#sender:member': +Office.MessageRead#sender:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml @@ -14124,7 +14124,7 @@ console.log("Sender: " + msgSender.displayName + " (" + msgSender.emailAddress + ")"); -'Office.MessageRead#seriesId:member': +Office.MessageRead#seriesId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml @@ -14140,21 +14140,21 @@ } else { console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.MessageRead#start:member': +Office.MessageRead#start:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); -'Office.MessageRead#subject:member': +Office.MessageRead#subject:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml console.log(`Subject: ${Office.context.mailbox.item.subject}`); -'Office.MessageRead#to:member': +Office.MessageRead#to:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml @@ -14209,7 +14209,7 @@ console.log("Other Recipients:"); otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); } -'Office.NotificationMessageAction:interface': +Office.NotificationMessageAction:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14241,7 +14241,7 @@ Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.NotificationMessageDetails:interface': +Office.NotificationMessageDetails:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14259,7 +14259,7 @@ console.log(asyncResult.value); }); -'Office.NotificationMessages#addAsync:member(1)': +Office.NotificationMessages#addAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14332,7 +14332,7 @@ }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'Office.NotificationMessages#getAllAsync:member(1)': +Office.NotificationMessages#getAllAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14350,7 +14350,7 @@ console.log(asyncResult.value); }); -'Office.NotificationMessages#removeAsync:member(1)': +Office.NotificationMessages#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14363,7 +14363,7 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.NotificationMessages#replaceAsync:member(1)': +Office.NotificationMessages#replaceAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml @@ -14383,7 +14383,7 @@ persistent: false }, handleResult); -'Office.Organizer#getAsync:member(1)': +Office.Organizer#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml @@ -14397,7 +14397,7 @@ console.error(asyncResult.error); } }); -'Office.Recipients#getAsync:member(2)': +Office.Recipients#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -14492,7 +14492,7 @@ console.error(asyncResult.error); } }); -'Office.Recipients#setAsync:member(2)': +Office.Recipients#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml @@ -14580,7 +14580,7 @@ console.error(asyncResult.error); } }); -'Office.Recurrence#getAsync:member(1)': +Office.Recurrence#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -14598,7 +14598,7 @@ console.error(asyncResult.error); } }); -'Office.Recurrence#setAsync:member(1)': +Office.Recurrence#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -14650,7 +14650,7 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.ReplyFormAttachment:interface': +Office.ReplyFormAttachment:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -14699,7 +14699,7 @@ console.log("Created reply with attachments."); } ); -'Office.ReplyFormData:interface': +Office.ReplyFormData:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -14748,7 +14748,7 @@ console.log("Created reply with attachments."); } ); -'Office.RoamingSettings#get:member(1)': +Office.RoamingSettings#get:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14763,7 +14763,7 @@ settingValue; console.log(`The value of setting "${settingName}" is "${settingValue}".`); -'Office.RoamingSettings#remove:member(1)': +Office.RoamingSettings#remove:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14777,7 +14777,7 @@ Office.context.roamingSettings.remove(settingName); console.log(`The "${settingName}" setting has been removed.`); -'Office.RoamingSettings#saveAsync:member(1)': +Office.RoamingSettings#saveAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14792,7 +14792,7 @@ console.log(`Settings saved with status: ${result.status}`); } }); -'Office.RoamingSettings#set:member(1)': +Office.RoamingSettings#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -14807,7 +14807,7 @@ Office.context.roamingSettings.set(settingName, settingValue); console.log(`Setting "${settingName}" set to value "${settingValue}".`); -'Office.SelectedItemDetails:interface': +Office.SelectedItemDetails:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -14831,7 +14831,7 @@ console.log(`Has attachment: ${message.hasAttachment}`); }); }); -'Office.Sensitivity#getAsync:member(2)': +Office.Sensitivity#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -14844,7 +14844,7 @@ console.log("Failed to get sensitivity: " + JSON.stringify(asyncResult.error)); } }); -'Office.Sensitivity#setAsync:member(1)': +Office.Sensitivity#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-sensitivity-level.yaml @@ -14860,7 +14860,7 @@ } } ); -'Office.SensitivityLabel#getAsync:member(2)': +Office.SensitivityLabel#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -14881,7 +14881,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SensitivityLabel#setAsync:member(2)': +Office.SensitivityLabel#setAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -14915,7 +14915,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SensitivityLabelsCatalog#getAsync:member(2)': +Office.SensitivityLabelsCatalog#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -14938,7 +14938,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2)': +Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -14954,7 +14954,7 @@ console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SessionData#clearAsync:member(1)': +Office.SessionData#clearAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -14967,7 +14967,7 @@ console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#getAllAsync:member(1)': +Office.SessionData#getAllAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -14980,7 +14980,7 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#getAsync:member(1)': +Office.SessionData#getAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -14995,7 +14995,7 @@ console.log("Failed to get sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SessionData#removeAsync:member(1)': +Office.SessionData#removeAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -15011,7 +15011,7 @@ } } ); -'Office.SessionData#setAsync:member(1)': +Office.SessionData#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -15027,7 +15027,7 @@ console.log("Failed to set sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.SharedProperties:interface': +Office.SharedProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml @@ -15043,7 +15043,7 @@ console.log(`Permissions: ${sharedProperties.delegatePermissions}`); console.log(`Target mailbox: ${sharedProperties.targetMailbox}`); }); -'Office.Time#getAsync:member(2)': +Office.Time#getAsync:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -15056,7 +15056,7 @@ } console.log(`Appointment starts: ${result.value}`); }); -'Office.Time#setAsync:member(1)': +Office.Time#setAsync:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml @@ -15094,7 +15094,7 @@ console.log(`Successfully set end date and time to ${end}`); }); }); -'PowerPoint.AddSlideOptions:interface': +PowerPoint.AddSlideOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -15116,7 +15116,7 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); -'PowerPoint.Binding:class': +PowerPoint.Binding:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15131,7 +15131,7 @@ return shape; }); } -'PowerPoint.Binding#getShape:member(1)': +PowerPoint.Binding#getShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15146,7 +15146,7 @@ return shape; }); } -'PowerPoint.BindingCollection:class': +PowerPoint.BindingCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15180,7 +15180,7 @@ populateBindingsDropdown(bindings.items); }); -'PowerPoint.BindingCollection#add:member(1)': +PowerPoint.BindingCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15216,7 +15216,7 @@ bindingsDropdown.selectedIndex = foundIndex; } }); -'PowerPoint.BindingCollection#getItem:member(1)': +PowerPoint.BindingCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15231,7 +15231,7 @@ return shape; }); } -'PowerPoint.BindingType:enum': +PowerPoint.BindingType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -15267,7 +15267,7 @@ bindingsDropdown.selectedIndex = foundIndex; } }); -'PowerPoint.BorderProperties:interface': +PowerPoint.BorderProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15296,7 +15296,7 @@ }); await context.sync(); }); -'PowerPoint.BorderProperties#color:member': +PowerPoint.BorderProperties#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15325,7 +15325,7 @@ }); await context.sync(); }); -'PowerPoint.BorderProperties#dashStyle:member': +PowerPoint.BorderProperties#dashStyle:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15354,7 +15354,7 @@ }); await context.sync(); }); -'PowerPoint.BorderProperties#weight:member': +PowerPoint.BorderProperties#weight:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15383,7 +15383,7 @@ }); await context.sync(); }); -'PowerPoint.ConnectorType:enum': +PowerPoint.ConnectorType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -15411,7 +15411,7 @@ await context.sync(); }); -'PowerPoint.FillProperties:interface': +PowerPoint.FillProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15452,7 +15452,7 @@ }); await context.sync(); }); -'PowerPoint.FillProperties#color:member': +PowerPoint.FillProperties#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15493,7 +15493,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties:interface': +PowerPoint.FontProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15534,7 +15534,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#color:member': +PowerPoint.FontProperties#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15575,7 +15575,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#doubleStrikethrough:member': +PowerPoint.FontProperties#doubleStrikethrough:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15616,7 +15616,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#name:member': +PowerPoint.FontProperties#name:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15657,7 +15657,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#strikethrough:member': +PowerPoint.FontProperties#strikethrough:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15698,7 +15698,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#subscript:member': +PowerPoint.FontProperties#subscript:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15739,7 +15739,7 @@ }); await context.sync(); }); -'PowerPoint.FontProperties#superscript:member': +PowerPoint.FontProperties#superscript:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15780,7 +15780,7 @@ }); await context.sync(); }); -'PowerPoint.GeometricShapeType:enum': +PowerPoint.GeometricShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -15805,7 +15805,7 @@ await context.sync(); }); -'PowerPoint.Hyperlink:class': +PowerPoint.Hyperlink:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -15824,7 +15824,7 @@ console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); } }); -'PowerPoint.HyperlinkCollection:class': +PowerPoint.HyperlinkCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml @@ -15843,7 +15843,7 @@ console.log(`Address: "${link.address}" (Screen tip: "${link.screenTip}")`); } }); -'PowerPoint.InsertSlideFormatting:enum': +PowerPoint.InsertSlideFormatting:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -15864,7 +15864,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.InsertSlideOptions:interface': +PowerPoint.InsertSlideOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -15885,7 +15885,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.ParagraphHorizontalAlignment:enum': +PowerPoint.ParagraphHorizontalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -15910,7 +15910,7 @@ }); await context.sync(); }); -'PowerPoint.Presentation:class': +PowerPoint.Presentation:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -15931,7 +15931,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.Presentation#getSelectedShapes:member(1)': +PowerPoint.Presentation#getSelectedShapes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16011,7 +16011,7 @@ savedShapeSelection.push(shape.id); }); }); -'PowerPoint.Presentation#getSelectedSlides:member(1)': +PowerPoint.Presentation#getSelectedSlides:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -16082,7 +16082,7 @@ outputSpan.innerHTML = "" outputSpan.innerHTML += finalTable; }); -'PowerPoint.Presentation#getSelectedTextRange:member(1)': +PowerPoint.Presentation#getSelectedTextRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -16138,7 +16138,7 @@ textRange.setSelected(); await context.sync(); }); -'PowerPoint.Presentation#insertSlidesFromBase64:member(1)': +PowerPoint.Presentation#insertSlidesFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml @@ -16159,7 +16159,7 @@ presentation.insertSlidesFromBase64(chosenFileBase64, insertOptions); await context.sync(); }); -'PowerPoint.Presentation#setSelectedSlides:member(1)': +PowerPoint.Presentation#setSelectedSlides:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -16197,7 +16197,7 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); -'PowerPoint.Presentation#bindings:member': +PowerPoint.Presentation#bindings:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16231,7 +16231,7 @@ populateBindingsDropdown(bindings.items); }); -'PowerPoint.Shape:class': +PowerPoint.Shape:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16253,7 +16253,7 @@ }); await context.sync(); }); -'PowerPoint.Shape#delete:member(1)': +PowerPoint.Shape#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16276,7 +16276,7 @@ await context.sync(); }); -'PowerPoint.Shape#getTable:member(1)': +PowerPoint.Shape#getTable:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -16309,7 +16309,7 @@ } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); -'PowerPoint.Shape#setZOrder:member(1)': +PowerPoint.Shape#setZOrder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16363,7 +16363,7 @@ } }); } -'PowerPoint.Shape#fill:member': +PowerPoint.Shape#fill:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16381,7 +16381,7 @@ }); await context.sync(); }); -'PowerPoint.Shape#group:member': +PowerPoint.Shape#group:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -16411,7 +16411,7 @@ console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); }); -'PowerPoint.Shape#height:member': +PowerPoint.Shape#height:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16439,7 +16439,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#left:member': +PowerPoint.Shape#left:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16467,7 +16467,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#top:member': +PowerPoint.Shape#top:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16495,7 +16495,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#type:member': +PowerPoint.Shape#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16517,7 +16517,7 @@ }); await context.sync(); }); -'PowerPoint.Shape#width:member': +PowerPoint.Shape#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16545,7 +16545,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#zOrderPosition:member': +PowerPoint.Shape#zOrderPosition:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16599,7 +16599,7 @@ } }); } -'PowerPoint.ShapeAddOptions:interface': +PowerPoint.ShapeAddOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16624,7 +16624,7 @@ await context.sync(); }); -'PowerPoint.ShapeCollection:class': +PowerPoint.ShapeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16646,7 +16646,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeCollection#addGeometricShape:member(1)': +PowerPoint.ShapeCollection#addGeometricShape:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16671,7 +16671,7 @@ await context.sync(); }); -'PowerPoint.ShapeCollection#addGroup:member(1)': +PowerPoint.ShapeCollection#addGroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -16701,7 +16701,7 @@ console.log(`Grouped shapes. Group ID: ${group.id}`); }); -'PowerPoint.ShapeCollection#addLine:member(1)': +PowerPoint.ShapeCollection#addLine:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16729,7 +16729,7 @@ await context.sync(); }); -'PowerPoint.ShapeCollection#addTable:member(1)': +PowerPoint.ShapeCollection#addTable:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -16744,7 +16744,7 @@ shapes.addTable(3, 4); await context.sync(); }); -'PowerPoint.ShapeCollection#addTextBox:member(1)': +PowerPoint.ShapeCollection#addTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -16769,7 +16769,7 @@ return context.sync(); }); -'PowerPoint.ShapeCollection#getCount:member(1)': +PowerPoint.ShapeCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -16802,7 +16802,7 @@ } else console.log("Selected shape isn't table."); } else console.log("No shape selected."); }); -'PowerPoint.ShapeCollection#getItemAt:member(1)': +PowerPoint.ShapeCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -16822,7 +16822,7 @@ console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); }); -'PowerPoint.ShapeCollection#load:member(2)': +PowerPoint.ShapeCollection#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16844,7 +16844,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFill:class': +PowerPoint.ShapeFill:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16866,7 +16866,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFill#setImage:member(1)': +PowerPoint.ShapeFill#setImage:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -16902,7 +16902,7 @@ bindingsDropdown.selectedIndex = foundIndex; } }); -'PowerPoint.ShapeFill#setSolidColor:member(1)': +PowerPoint.ShapeFill#setSolidColor:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16920,7 +16920,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFill#foregroundColor:member': +PowerPoint.ShapeFill#foregroundColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -16950,7 +16950,7 @@ outputSpan.innerHTML = ""; outputSpan.innerHTML += finalTable; }); -'PowerPoint.ShapeFill#transparency:member': +PowerPoint.ShapeFill#transparency:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -16972,7 +16972,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeFont:class': +PowerPoint.ShapeFont:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -16985,7 +16985,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.ShapeFont#color:member': +PowerPoint.ShapeFont#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -16998,7 +16998,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.ShapeGroup:class': +PowerPoint.ShapeGroup:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -17028,7 +17028,7 @@ console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); }); -'PowerPoint.ShapeGroup#ungroup:member(1)': +PowerPoint.ShapeGroup#ungroup:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -17058,7 +17058,7 @@ console.log(`Ungrouped shapes with group ID: ${firstGroupId}`); }); -'PowerPoint.ShapeLineDashStyle:enum': +PowerPoint.ShapeLineDashStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17080,7 +17080,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeLineFormat:class': +PowerPoint.ShapeLineFormat:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17102,7 +17102,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeLineFormat#dashStyle:member': +PowerPoint.ShapeLineFormat#dashStyle:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17124,7 +17124,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeScopedCollection:class': +PowerPoint.ShapeScopedCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17142,7 +17142,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeScopedCollection#getCount:member(1)': +PowerPoint.ShapeScopedCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17169,7 +17169,7 @@ outputSpan.innerHTML = ""; outputSpan.innerHTML += finalTable; }); -'PowerPoint.ShapeType:enum': +PowerPoint.ShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -17191,7 +17191,7 @@ }); await context.sync(); }); -'PowerPoint.ShapeZOrder:enum': +PowerPoint.ShapeZOrder:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -17253,7 +17253,7 @@ } }); } -'PowerPoint.Slide:class': +PowerPoint.Slide:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17267,7 +17267,7 @@ slide1.setSelectedShapes(savedShapeSelection); await context.sync(); }); -'PowerPoint.Slide#delete:member(1)': +PowerPoint.Slide#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -17286,7 +17286,7 @@ slide.delete(); }); }); -'PowerPoint.Slide#exportAsBase64:member(1)': +PowerPoint.Slide#exportAsBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml @@ -17307,7 +17307,7 @@ console.log("Slide was exported."); }); -'PowerPoint.Slide#getImageAsBase64:member(1)': +PowerPoint.Slide#getImageAsBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml @@ -17328,7 +17328,7 @@ console.log("Slide was exported."); }); -'PowerPoint.Slide#setSelectedShapes:member(1)': +PowerPoint.Slide#setSelectedShapes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17367,7 +17367,7 @@ slide1.setSelectedShapes([shape1.id, shape2.id]); await context.sync(); }); -'PowerPoint.SlideCollection:class': +PowerPoint.SlideCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17389,7 +17389,7 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); -'PowerPoint.SlideCollection#add:member(1)': +PowerPoint.SlideCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17411,7 +17411,7 @@ context.presentation.slides.add(newSlideOptions); await context.sync(); }); -'PowerPoint.SlideCollection#getItemAt:member(1)': +PowerPoint.SlideCollection#getItemAt:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml @@ -17438,7 +17438,7 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); -'PowerPoint.SlideGetImageOptions:interface': +PowerPoint.SlideGetImageOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml @@ -17459,7 +17459,7 @@ console.log("Slide was exported."); }); -'PowerPoint.SlideLayout:class': +PowerPoint.SlideLayout:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17482,7 +17482,7 @@ } } }); -'PowerPoint.SlideLayout#id:member': +PowerPoint.SlideLayout#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17505,7 +17505,7 @@ } } }); -'PowerPoint.SlideLayoutCollection:class': +PowerPoint.SlideLayoutCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17528,7 +17528,7 @@ } } }); -'PowerPoint.SlideLayoutCollection#load:member(2)': +PowerPoint.SlideLayoutCollection#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17551,7 +17551,7 @@ } } }); -'PowerPoint.SlideMaster:class': +PowerPoint.SlideMaster:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17574,7 +17574,7 @@ } } }); -'PowerPoint.SlideMaster#id:member': +PowerPoint.SlideMaster#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17597,7 +17597,7 @@ } } }); -'PowerPoint.SlideMasterCollection:class': +PowerPoint.SlideMasterCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17620,7 +17620,7 @@ } } }); -'PowerPoint.SlideMasterCollection#load:member(2)': +PowerPoint.SlideMasterCollection#load:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/add-slides.yaml @@ -17643,7 +17643,7 @@ } } }); -'PowerPoint.SlideScopedCollection:class': +PowerPoint.SlideScopedCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml @@ -17670,7 +17670,7 @@ savedShapeSelection.push(shape.id); }); }); -'PowerPoint.Table:class': +PowerPoint.Table:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17697,7 +17697,7 @@ await context.sync(); }); -'PowerPoint.Table#getCellOrNullObject:member(1)': +PowerPoint.Table#getCellOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17724,7 +17724,7 @@ await context.sync(); }); -'PowerPoint.TableAddOptions:interface': +PowerPoint.TableAddOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17742,7 +17742,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#columns:member': +PowerPoint.TableAddOptions#columns:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17760,7 +17760,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#height:member': +PowerPoint.TableAddOptions#height:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17778,7 +17778,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#mergedAreas:member': +PowerPoint.TableAddOptions#mergedAreas:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17800,7 +17800,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#rows:member': +PowerPoint.TableAddOptions#rows:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17818,7 +17818,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#specificCellProperties:member': +PowerPoint.TableAddOptions#specificCellProperties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17859,7 +17859,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#uniformCellProperties:member': +PowerPoint.TableAddOptions#uniformCellProperties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17888,7 +17888,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#values:member': +PowerPoint.TableAddOptions#values:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17909,7 +17909,7 @@ }); await context.sync(); }); -'PowerPoint.TableAddOptions#width:member': +PowerPoint.TableAddOptions#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17927,7 +17927,7 @@ }); await context.sync(); }); -'PowerPoint.TableCell:class': +PowerPoint.TableCell:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17954,7 +17954,7 @@ await context.sync(); }); -'PowerPoint.TableCell#text:member': +PowerPoint.TableCell#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -17981,7 +17981,7 @@ await context.sync(); }); -'PowerPoint.TableCellBorders:interface': +PowerPoint.TableCellBorders:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18010,7 +18010,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#bottom:member': +PowerPoint.TableCellBorders#bottom:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18039,7 +18039,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#left:member': +PowerPoint.TableCellBorders#left:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18068,7 +18068,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#right:member': +PowerPoint.TableCellBorders#right:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18097,7 +18097,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellBorders#top:member': +PowerPoint.TableCellBorders#top:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18126,7 +18126,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties:interface': +PowerPoint.TableCellProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18167,7 +18167,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#borders:member': +PowerPoint.TableCellProperties#borders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18196,7 +18196,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#fill:member': +PowerPoint.TableCellProperties#fill:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18237,7 +18237,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#font:member': +PowerPoint.TableCellProperties#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18278,7 +18278,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#horizontalAlignment:member': +PowerPoint.TableCellProperties#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18303,7 +18303,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#indentLevel:member': +PowerPoint.TableCellProperties#indentLevel:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18329,7 +18329,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#textRuns:member': +PowerPoint.TableCellProperties#textRuns:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18378,7 +18378,7 @@ }); await context.sync(); }); -'PowerPoint.TableCellProperties#verticalAlignment:member': +PowerPoint.TableCellProperties#verticalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18403,7 +18403,7 @@ }); await context.sync(); }); -'PowerPoint.TableColumnProperties:interface': +PowerPoint.TableColumnProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18421,7 +18421,7 @@ }); await context.sync(); }); -'PowerPoint.TableColumnProperties#columnWidth:member': +PowerPoint.TableColumnProperties#columnWidth:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18439,7 +18439,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties:interface': +PowerPoint.TableMergedAreaProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18461,7 +18461,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#columnCount:member': +PowerPoint.TableMergedAreaProperties#columnCount:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18483,7 +18483,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#columnIndex:member': +PowerPoint.TableMergedAreaProperties#columnIndex:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18505,7 +18505,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#rowCount:member': +PowerPoint.TableMergedAreaProperties#rowCount:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18527,7 +18527,7 @@ }); await context.sync(); }); -'PowerPoint.TableMergedAreaProperties#rowIndex:member': +PowerPoint.TableMergedAreaProperties#rowIndex:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18549,7 +18549,7 @@ }); await context.sync(); }); -'PowerPoint.TableRowProperties:interface': +PowerPoint.TableRowProperties:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18567,7 +18567,7 @@ }); await context.sync(); }); -'PowerPoint.TableRowProperties#rowHeight:member': +PowerPoint.TableRowProperties#rowHeight:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18585,7 +18585,7 @@ }); await context.sync(); }); -'PowerPoint.Tag:class': +PowerPoint.Tag:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18604,7 +18604,7 @@ console.log("Added key " + JSON.stringify(tag.key) + " with value " + JSON.stringify(tag.value)); }); -'PowerPoint.TagCollection:class': +PowerPoint.TagCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18628,7 +18628,7 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); -'PowerPoint.TagCollection#add:member(1)': +PowerPoint.TagCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18650,7 +18650,7 @@ console.log("Added key " + JSON.stringify(slide.tags.items[i].key) + " with value " + JSON.stringify(slide.tags.items[i].value)); } }); -'PowerPoint.TagCollection#delete:member(1)': +PowerPoint.TagCollection#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18665,7 +18665,7 @@ console.log(JSON.stringify(presentationTags)); }); -'PowerPoint.TagCollection#getItem:member(1)': +PowerPoint.TagCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -18689,7 +18689,7 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); -'PowerPoint.TextFrame:class': +PowerPoint.TextFrame:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18723,7 +18723,7 @@ textRange10.setSelected(); await context.sync(); }); -'PowerPoint.TextRange:class': +PowerPoint.TextRange:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18736,7 +18736,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.TextRange#font:member': +PowerPoint.TextRange#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18749,7 +18749,7 @@ textRange.font.color = "green"; await context.sync(); }); -'PowerPoint.TextRange#setSelected:member(1)': +PowerPoint.TextRange#setSelected:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml @@ -18797,7 +18797,7 @@ textRange.setSelected(); await context.sync(); }); -'PowerPoint.TextRun:interface': +PowerPoint.TextRun:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/add-modify-tables.yaml @@ -18846,7 +18846,7 @@ }); await context.sync(); }); -'PowerPoint.TextVerticalAlignment:enum': +PowerPoint.TextVerticalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml @@ -18875,7 +18875,7 @@ return context.sync(); }); -'Word.Alignment:enum': +Word.Alignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -18897,7 +18897,7 @@ body.paragraphs.getFirst().alignment = "Left"; body.paragraphs.getLast().alignment = Word.Alignment.left; }); -'Word.Annotation:class': +Word.Annotation:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -18924,7 +18924,7 @@ } } }); -'Word.Annotation#delete:member(1)': +Word.Annotation#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -18951,7 +18951,7 @@ console.log("Annotations deleted:", ids); }); -'Word.Annotation#critiqueAnnotation:member': +Word.Annotation#critiqueAnnotation:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -18974,7 +18974,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.Annotation#id:member': +Word.Annotation#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19001,7 +19001,7 @@ } } }); -'Word.Annotation#state:member': +Word.Annotation#state:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19028,7 +19028,7 @@ } } }); -'Word.AnnotationClickedEventArgs:interface': +Word.AnnotationClickedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19065,7 +19065,7 @@ console.log(`AnnotationClicked: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.AnnotationCollection:class': +Word.AnnotationCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19088,7 +19088,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.AnnotationHoveredEventArgs:interface': +Word.AnnotationHoveredEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19125,7 +19125,7 @@ console.log(`AnnotationHovered: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.AnnotationInsertedEventArgs:interface': +Word.AnnotationInsertedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19169,7 +19169,7 @@ } }); } -'Word.AnnotationPopupActionEventArgs:interface': +Word.AnnotationPopupActionEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19209,7 +19209,7 @@ console.log(message); }); } -'Word.AnnotationRemovedEventArgs:interface': +Word.AnnotationRemovedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19243,7 +19243,7 @@ } }); } -'Word.AnnotationSet:interface': +Word.AnnotationSet:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19299,7 +19299,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.AnnotationState:enum': +Word.AnnotationState:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -19326,7 +19326,7 @@ } } }); -'Word.Application:class': +Word.Application:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -19355,7 +19355,7 @@ currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); await context.sync(); }); -'Word.Application#createDocument:member(1)': +Word.Application#createDocument:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -19384,7 +19384,7 @@ currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); await context.sync(); }); -'Word.Application#retrieveStylesFromBase64:member(1)': +Word.Application#retrieveStylesFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/get-external-styles.yaml @@ -19399,7 +19399,7 @@ console.log("Styles from the other document:", retrievedStyles.value); }); -'Word.Body#clear:member(1)': +Word.Body#clear:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19424,7 +19424,7 @@ clear the contents of a document. // https://aka.ms/sillystorywordaddin -'Word.Body#getComments:member(1)': +Word.Body#getComments:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -19441,7 +19441,7 @@ console.log("All comments:", comments); }); -'Word.Body#getHtml:member(1)': +Word.Body#getHtml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19463,7 +19463,7 @@ console.log("Body contents (HTML): " + bodyHTML.value); }); -'Word.Body#getOoxml:member(1)': +Word.Body#getOoxml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19485,7 +19485,7 @@ console.log("Body contents (OOXML): " + bodyOOXML.value); }); -'Word.Body#getTrackedChanges:member(1)': +Word.Body#getTrackedChanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -19501,7 +19501,7 @@ console.log(trackedChanges); }); -'Word.Body#insertBreak:member(1)': +Word.Body#insertBreak:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19523,7 +19523,7 @@ console.log("Added a page break at the start of the document body."); }); -'Word.Body#insertContentControl:member(1)': +Word.Body#insertContentControl:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19545,7 +19545,7 @@ console.log("Wrapped the body in a content control."); }); -'Word.Body#insertFileFromBase64:member(1)': +Word.Body#insertFileFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19568,7 +19568,7 @@ console.log("Added Base64-encoded text to the beginning of the document body."); }); -'Word.Body#insertHtml:member(1)': +Word.Body#insertHtml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19590,7 +19590,7 @@ console.log("HTML added to the beginning of the document body."); }); -'Word.Body#insertInlinePictureFromBase64:member(1)': +Word.Body#insertInlinePictureFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19616,7 +19616,7 @@ console.log("Added a Base64-encoded image to the beginning of the document body."); }); -'Word.Body#insertOoxml:member(1)': +Word.Body#insertOoxml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19654,7 +19654,7 @@ assemble a document. // https://github.com/OfficeDev/Word-Add-in-DocumentAssembly -'Word.Body#insertParagraph:member(1)': +Word.Body#insertParagraph:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml @@ -19676,7 +19676,7 @@ await context.sync(); }); -'Word.Body#insertTable:member(1)': +Word.Body#insertTable:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -19694,7 +19694,7 @@ await context.sync(); }); -'Word.Body#insertText:member(1)': +Word.Body#insertText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19716,7 +19716,7 @@ console.log("Text added to the beginning of the document body."); }); -'Word.Body#search:member(1)': +Word.Body#search:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml @@ -19759,7 +19759,7 @@ await context.sync(); }); -'Word.Body#select:member(1)': +Word.Body#select:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19779,7 +19779,7 @@ console.log("Selected the document body."); }); -'Word.Body#fields:member': +Word.Body#fields:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -19803,7 +19803,7 @@ } } }); -'Word.Body#font:member': +Word.Body#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -19837,7 +19837,7 @@ console.log(results); }); -'Word.Body#footnotes:member': +Word.Body#footnotes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -19852,7 +19852,7 @@ console.log("Number of footnotes in the document body: " + footnotes.items.length); }); -'Word.Body#inlinePictures:member': +Word.Body#inlinePictures:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -19872,7 +19872,7 @@ await context.sync(); console.log(base64.value); }); -'Word.Body#lists:member': +Word.Body#lists:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -19909,7 +19909,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.Body#onCommentAdded:member': +Word.Body#onCommentAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -19942,7 +19942,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#onCommentChanged:member': +Word.Body#onCommentChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -19976,7 +19976,7 @@ ); }); } -'Word.Body#onCommentDeleted:member': +Word.Body#onCommentDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -20009,7 +20009,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#onCommentDeselected:member': +Word.Body#onCommentDeselected:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -20042,7 +20042,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#onCommentSelected:member': +Word.Body#onCommentSelected:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -20075,7 +20075,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.Body#paragraphs:member': +Word.Body#paragraphs:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml @@ -20129,7 +20129,7 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); -'Word.Body#shapes:member': +Word.Body#shapes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -20151,7 +20151,7 @@ console.log("No shapes found in main document."); } }); -'Word.Body#tables:member': +Word.Body#tables:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -20166,7 +20166,7 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); -'Word.Body#text:member': +Word.Body#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-body.yaml @@ -20188,7 +20188,7 @@ console.log("Body contents (text): " + body.text); }); -'Word.Body#type:member': +Word.Body#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -20212,7 +20212,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.BodyType:enum': +Word.BodyType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -20236,7 +20236,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.Border:class': +Word.Border:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20269,7 +20269,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection:class': +Word.BorderCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20302,7 +20302,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection#outsideBorderColor:member': +Word.BorderCollection#outsideBorderColor:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20335,7 +20335,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection#outsideBorderType:member': +Word.BorderCollection#outsideBorderType:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20368,7 +20368,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderCollection#outsideBorderWidth:member': +Word.BorderCollection#outsideBorderWidth:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20401,7 +20401,7 @@ console.log("Updated outside borders."); } }); -'Word.BorderLocation:enum': +Word.BorderLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -20418,7 +20418,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.BorderType:enum': +Word.BorderType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -20436,7 +20436,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first cell:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.BorderWidth:enum': +Word.BorderWidth:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -20469,7 +20469,7 @@ console.log("Updated outside borders."); } }); -'Word.BreakType:enum': +Word.BreakType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -20481,7 +20481,7 @@ await context.sync(); console.log("success"); }); -'Word.BuiltInStyleName:enum': +Word.BuiltInStyleName:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml @@ -20498,7 +20498,7 @@ await context.sync(); }); -'Word.CellPaddingLocation:enum': +Word.CellPaddingLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -20516,7 +20516,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` ); }); -'Word.ChangeTrackingMode:enum': +Word.ChangeTrackingMode:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -20537,7 +20537,7 @@ console.log("No changes are being tracked."); } }); -'Word.ChangeTrackingState:enum': +Word.ChangeTrackingState:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -20565,7 +20565,7 @@ console.log(`Number of content controls in Deleted state: ${deletedContentControls.items.length}`); console.log(`Number of content controls in Normal state: ${normalContentControls.items.length}`); }); -'Word.ChangeTrackingVersion:enum': +Word.ChangeTrackingVersion:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -20582,7 +20582,7 @@ console.log("Reviewed text (before):", before.value, "Reviewed text (after):", after.value); }); -'Word.CheckboxContentControl:class': +Word.CheckboxContentControl:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -20636,7 +20636,7 @@ ); } }); -'Word.CloseBehavior:enum': +Word.CloseBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -20647,7 +20647,7 @@ await Word.run(async (context) => { context.document.close(Word.CloseBehavior.save); }); -'Word.ComboBoxContentControl:class': +Word.ComboBoxContentControl:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20662,7 +20662,7 @@ console.log("Combo box content control inserted at the end of the selection."); }); -'Word.ComboBoxContentControl#addListItem:member(1)': +Word.ComboBoxContentControl#addListItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20700,7 +20700,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ComboBoxContentControl#deleteAllListItems:member(1)': +Word.ComboBoxContentControl#deleteAllListItems:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20738,7 +20738,7 @@ console.log("Deleted the list from the combo box content control."); }); -'Word.ComboBoxContentControl#listItems:member': +Word.ComboBoxContentControl#listItems:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -20787,7 +20787,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.Comment:class': +Word.Comment:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20805,7 +20805,7 @@ console.log("Comment inserted:", comment); }); -'Word.Comment#delete:member(1)': +Word.Comment#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20825,7 +20825,7 @@ console.log("Comment deleted."); }); -'Word.Comment#getRange:member(1)': +Word.Comment#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20849,7 +20849,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.Comment#reply:member(1)': +Word.Comment#reply:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20871,7 +20871,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.Comment#content:member': +Word.Comment#content:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20899,7 +20899,7 @@ console.log("Comment content changed:", firstActiveComment); }); -'Word.Comment#contentRange:member': +Word.Comment#contentRange:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20923,7 +20923,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.Comment#replies:member': +Word.Comment#replies:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20944,7 +20944,7 @@ const replies: Word.CommentReplyCollection = comment.replies; console.log("Replies to the first comment:", replies); }); -'Word.Comment#resolved:member': +Word.Comment#resolved:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -20976,7 +20976,7 @@ console.log(`Comment Resolved status (after): ${comment.resolved}`); }); -'Word.CommentChangeType:enum': +Word.CommentChangeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -21010,7 +21010,7 @@ ); }); } -'Word.CommentCollection:class': +Word.CommentCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21032,7 +21032,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.CommentCollection#getFirstOrNullObject:member(1)': +Word.CommentCollection#getFirstOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21056,7 +21056,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.CommentCollection#items:member': +Word.CommentCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21078,7 +21078,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.CommentContentRange:class': +Word.CommentContentRange:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21102,7 +21102,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.CommentDetail:interface': +Word.CommentDetail:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -21135,7 +21135,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.CommentEventArgs:interface': +Word.CommentEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -21169,7 +21169,7 @@ ); }); } -'Word.CommentReply:class': +Word.CommentReply:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21191,7 +21191,7 @@ console.warn("No active comment was found in the selection, so couldn't reply."); } }); -'Word.CommentReplyCollection:class': +Word.CommentReplyCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -21212,7 +21212,7 @@ const replies: Word.CommentReplyCollection = comment.replies; console.log("Replies to the first comment:", replies); }); -'Word.CompareTarget:enum': +Word.CompareTarget:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml @@ -21235,7 +21235,7 @@ console.log("Differences shown in the current document."); }); -'Word.ContentControl#delete:member(1)': +Word.ContentControl#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -21254,7 +21254,7 @@ await context.sync(); } }); -'Word.ContentControl#resetState:member(1)': +Word.ContentControl#resetState:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -21277,7 +21277,7 @@ console.log(`Reset state of first content control with ID: ${firstContentControl.id}`); }); -'Word.ContentControl#set:member(1)': +Word.ContentControl#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -21317,7 +21317,7 @@ await context.sync(); }); -'Word.ContentControl#setState:member(1)': +Word.ContentControl#setState:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -21342,7 +21342,7 @@ console.log(`Set state of first content control with ID ${firstContentControl.id} to ${state}.`); }); -'Word.ContentControl#checkboxContentControl:member': +Word.ContentControl#checkboxContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -21386,7 +21386,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.ContentControl#comboBoxContentControl:member': +Word.ContentControl#comboBoxContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -21424,7 +21424,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControl#dropDownListContentControl:member': +Word.ContentControl#dropDownListContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -21462,7 +21462,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControl#onDataChanged:member': +Word.ContentControl#onDataChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -21498,7 +21498,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`, event.ids); }); } -'Word.ContentControl#onDeleted:member': +Word.ContentControl#onDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -21534,7 +21534,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } -'Word.ContentControl#onEntered:member': +Word.ContentControl#onEntered:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -21570,7 +21570,7 @@ console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); }); } -'Word.ContentControl#onExited:member': +Word.ContentControl#onExited:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -21606,7 +21606,7 @@ console.log(`${event.eventType} event detected. ID of content control that was exited: ${event.ids[0]}`); }); } -'Word.ContentControl#onSelectionChanged:member': +Word.ContentControl#onSelectionChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -21641,7 +21641,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } -'Word.ContentControl#tag:member': +Word.ContentControl#tag:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -21669,7 +21669,7 @@ await context.sync(); }); -'Word.ContentControlAddedEventArgs:interface': +Word.ContentControlAddedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -21694,7 +21694,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were added:`, event.ids); }); } -'Word.ContentControlAppearance:enum': +Word.ContentControlAppearance:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -21734,7 +21734,7 @@ await context.sync(); }); -'Word.ContentControlCollection:class': +Word.ContentControlCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -21752,7 +21752,7 @@ await context.sync(); }); -'Word.ContentControlCollection#getByTag:member(1)': +Word.ContentControlCollection#getByTag:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -21770,7 +21770,7 @@ await context.sync(); }); -'Word.ContentControlCollection#getFirstOrNullObject:member(1)': +Word.ContentControlCollection#getFirstOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -21814,7 +21814,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.ContentControlDataChangedEventArgs:interface': +Word.ContentControlDataChangedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -21850,7 +21850,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where data was changed:`, event.ids); }); } -'Word.ContentControlDeletedEventArgs:interface': +Word.ContentControlDeletedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -21886,7 +21886,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } -'Word.ContentControlEnteredEventArgs:interface': +Word.ContentControlEnteredEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -21922,7 +21922,7 @@ console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); }); } -'Word.ContentControlExitedEventArgs:interface': +Word.ContentControlExitedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -21958,7 +21958,7 @@ console.log(`${event.eventType} event detected. ID of content control that was exited: ${event.ids[0]}`); }); } -'Word.ContentControlListItem:class': +Word.ContentControlListItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -22007,7 +22007,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControlListItem#delete:member(1)': +Word.ContentControlListItem#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -22056,7 +22056,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControlListItem#displayText:member': +Word.ContentControlListItem#displayText:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -22105,7 +22105,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ContentControlListItemCollection:class': +Word.ContentControlListItemCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-combo-box-content-control.yaml @@ -22144,7 +22144,7 @@ const currentItems: Word.ContentControlListItemCollection = selectedComboBox.listItems; console.log(`The list from the combo box content control with ID ${selectedContentControl.id}:`, currentItems); }); -'Word.ContentControlOptions:interface': +Word.ContentControlOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -22188,7 +22188,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.ContentControlSelectionChangedEventArgs:interface': +Word.ContentControlSelectionChangedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -22223,7 +22223,7 @@ console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`, event.ids); }); } -'Word.ContentControlState:enum': +Word.ContentControlState:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml @@ -22248,7 +22248,7 @@ console.log(`Set state of first content control with ID ${firstContentControl.id} to ${state}.`); }); -'Word.ContentControlType:enum': +Word.ContentControlType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -22272,7 +22272,7 @@ await context.sync(); }); -'Word.Critique:interface': +Word.Critique:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22328,7 +22328,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.CritiqueAnnotation:class': +Word.CritiqueAnnotation:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22351,7 +22351,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.CritiqueAnnotation#accept:member(1)': +Word.CritiqueAnnotation#accept:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22378,7 +22378,7 @@ } } }); -'Word.CritiqueAnnotation#reject:member(1)': +Word.CritiqueAnnotation#reject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22405,7 +22405,7 @@ } } }); -'Word.CritiqueAnnotation#critique:member': +Word.CritiqueAnnotation#critique:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22428,7 +22428,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.CritiqueColorScheme:enum': +Word.CritiqueColorScheme:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22484,7 +22484,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.CritiquePopupOptions:interface': +Word.CritiquePopupOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -22540,7 +22540,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.CustomProperty:class': +Word.CustomProperty:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22554,7 +22554,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.CustomPropertyCollection:class': +Word.CustomPropertyCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22568,7 +22568,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.CustomPropertyCollection#add:member(1)': +Word.CustomPropertyCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22591,7 +22591,7 @@ await context.sync(); console.log("Property added"); }); -'Word.CustomPropertyCollection#items:member': +Word.CustomPropertyCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -22605,7 +22605,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.CustomXmlPart:class': +Word.CustomXmlPart:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml @@ -22631,7 +22631,7 @@ await context.sync(); }); -'Word.CustomXmlPart#delete:member(1)': +Word.CustomXmlPart#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml @@ -22713,7 +22713,7 @@ console.warn("Didn't find custom XML part to delete."); } }); -'Word.CustomXmlPart#getXml:member(1)': +Word.CustomXmlPart#getXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22767,7 +22767,7 @@ await context.sync(); }); -'Word.CustomXmlPart#insertAttribute:member(1)': +Word.CustomXmlPart#insertAttribute:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22833,7 +22833,7 @@ console.warn("Didn't find custom XML part to insert attribute into."); } }); -'Word.CustomXmlPart#insertElement:member(1)': +Word.CustomXmlPart#insertElement:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22904,7 +22904,7 @@ console.warn("Didn't find custom XML part to insert element into."); } }); -'Word.CustomXmlPart#query:member(1)': +Word.CustomXmlPart#query:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -22973,7 +22973,7 @@ console.warn("Didn't find custom XML part to query."); } }); -'Word.CustomXmlPart#setXml:member(1)': +Word.CustomXmlPart#setXml:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23011,7 +23011,7 @@ console.warn("Didn't find custom XML part to replace."); } }); -'Word.CustomXmlPart#id:member': +Word.CustomXmlPart#id:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml @@ -23037,7 +23037,7 @@ await context.sync(); }); -'Word.CustomXmlPart#namespaceUri:member': +Word.CustomXmlPart#namespaceUri:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23066,7 +23066,7 @@ console.warn("Didn't find custom XML part."); } }); -'Word.CustomXmlPartCollection#add:member(1)': +Word.CustomXmlPartCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23120,7 +23120,7 @@ await context.sync(); }); -'Word.CustomXmlPartCollection#getByNamespace:member(1)': +Word.CustomXmlPartCollection#getByNamespace:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23142,7 +23142,7 @@ console.log(`Number of custom XML parts found with this namespace: ${!scopedCustomXmlParts.items ? 0 : scopedCustomXmlParts.items.length}`); }); -'Word.CustomXmlPartCollection#getItem:member(1)': +Word.CustomXmlPartCollection#getItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23211,7 +23211,7 @@ console.warn("Didn't find custom XML part to query."); } }); -'Word.CustomXmlPartScopedCollection:class': +Word.CustomXmlPartScopedCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -23233,7 +23233,7 @@ console.log(`Number of custom XML parts found with this namespace: ${!scopedCustomXmlParts.items ? 0 : scopedCustomXmlParts.items.length}`); }); -'Word.Document:class': +Word.Document:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -23254,7 +23254,7 @@ console.log("No changes are being tracked."); } }); -'Word.Document#addStyle:member(1)': +Word.Document#addStyle:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -23286,7 +23286,7 @@ console.log(newStyleName + " has been added to the style list."); }); -'Word.Document#close:member(1)': +Word.Document#close:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -23299,7 +23299,7 @@ await Word.run(async (context) => { context.document.close(); }); -'Word.Document#compare:member(1)': +Word.Document#compare:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml @@ -23322,7 +23322,7 @@ console.log("Differences shown in the current document."); }); -'Word.Document#getContentControls:member(1)': +Word.Document#getContentControls:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -23376,7 +23376,7 @@ ); } }); -'Word.Document#getParagraphByUniqueLocalId:member(1)': +Word.Document#getParagraphByUniqueLocalId:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml @@ -23390,7 +23390,7 @@ console.log(paragraph); }); -'Word.Document#getStyles:member(1)': +Word.Document#getStyles:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -23405,7 +23405,7 @@ console.log(`Number of styles: ${count.value}`); }); -'Word.Document#importStylesFromJson:member(1)': +Word.Document#importStylesFromJson:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -23424,7 +23424,7 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); -'Word.Document#insertFileFromBase64:member(1)': +Word.Document#insertFileFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -23447,7 +23447,7 @@ }); await context.sync(); }); -'Word.Document#save:member(1)': +Word.Document#save:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -23461,7 +23461,7 @@ context.document.save(); await context.sync(); }); -'Word.Document#activeWindow:member': +Word.Document#activeWindow:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -23511,7 +23511,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Document#changeTrackingMode:member': +Word.Document#changeTrackingMode:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -23532,7 +23532,7 @@ console.log("No changes are being tracked."); } }); -'Word.Document#onAnnotationClicked:member': +Word.Document#onAnnotationClicked:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23569,7 +23569,7 @@ console.log(`AnnotationClicked: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.Document#onAnnotationHovered:member': +Word.Document#onAnnotationHovered:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23606,7 +23606,7 @@ console.log(`AnnotationHovered: ID ${args.id}:`, annotation.critiqueAnnotation.critique); }); } -'Word.Document#onAnnotationInserted:member': +Word.Document#onAnnotationInserted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23650,7 +23650,7 @@ } }); } -'Word.Document#onAnnotationPopupAction:member': +Word.Document#onAnnotationPopupAction:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23690,7 +23690,7 @@ console.log(message); }); } -'Word.Document#onAnnotationRemoved:member': +Word.Document#onAnnotationRemoved:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -23724,7 +23724,7 @@ } }); } -'Word.Document#onContentControlAdded:member': +Word.Document#onContentControlAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -23749,7 +23749,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were added:`, event.ids); }); } -'Word.Document#onParagraphAdded:member': +Word.Document#onParagraphAdded:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml @@ -23773,7 +23773,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were added:`, event.uniqueLocalIds); }); } -'Word.Document#onParagraphChanged:member': +Word.Document#onParagraphChanged:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml @@ -23797,7 +23797,7 @@ console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } -'Word.Document#onParagraphDeleted:member': +Word.Document#onParagraphDeleted:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml @@ -23821,7 +23821,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`, event.uniqueLocalIds); }); } -'Word.Document#properties:member': +Word.Document#properties:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml @@ -23834,7 +23834,7 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); -'Word.Document#settings:member': +Word.Document#settings:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -23856,7 +23856,7 @@ } } }); -'Word.DocumentCompareOptions:interface': +Word.DocumentCompareOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/compare-documents.yaml @@ -23879,7 +23879,7 @@ console.log("Differences shown in the current document."); }); -'Word.DocumentCreated:class': +Word.DocumentCreated:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -23908,7 +23908,7 @@ currentDocBody.insertText(externalDocBodyText, Word.InsertLocation.start); await context.sync(); }); -'Word.DocumentProperties:class': +Word.DocumentProperties:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml @@ -23921,7 +23921,7 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); -'Word.DocumentPropertyType:enum': +Word.DocumentPropertyType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -23935,7 +23935,7 @@ for (let i = 0; i < properties.items.length; i++) console.log("Property Name:" + properties.items[i].key + "; Type=" + properties.items[i].type + "; Property Value=" + properties.items[i].value); }); -'Word.DropDownListContentControl:class': +Word.DropDownListContentControl:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -23950,7 +23950,7 @@ console.log("Dropdown list content control inserted at the end of the selection."); }); -'Word.DropDownListContentControl#addListItem:member(1)': +Word.DropDownListContentControl#addListItem:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -23988,7 +23988,7 @@ console.log(`List item added to control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.DropDownListContentControl#deleteAllListItems:member(1)': +Word.DropDownListContentControl#deleteAllListItems:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -24028,7 +24028,7 @@ console.log("Deleted the list from the dropdown list content control."); }); -'Word.DropDownListContentControl#listItems:member': +Word.DropDownListContentControl#listItems:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -24077,7 +24077,7 @@ console.log(`List item deleted from control with ID ${selectedContentControl.id}: ${listItemText}`); }); -'Word.ErrorCodes:enum': +Word.ErrorCodes:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -24095,7 +24095,7 @@ } } } -'Word.EventSource:enum': +Word.EventSource:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml @@ -24128,7 +24128,7 @@ console.log(`${event.type} event detected. Event source: ${event.source}. Comment info:`, event.commentDetails); }); } -'Word.EventType:enum': +Word.EventType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -24140,7 +24140,7 @@ console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`, event.ids); }); } -'Word.Field:class': +Word.Field:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24160,7 +24160,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#delete:member(1)': +Word.Field#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24183,7 +24183,7 @@ console.log("The first field in the document was deleted."); } }); -'Word.Field#select:member(1)': +Word.Field#select:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24212,7 +24212,7 @@ console.log("After updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); } }); -'Word.Field#updateResult:member(1)': +Word.Field#updateResult:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24241,7 +24241,7 @@ console.log("After updating:", "Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result)); } }); -'Word.Field#code:member': +Word.Field#code:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24261,7 +24261,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#kind:member': +Word.Field#kind:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24281,7 +24281,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#locked:member': +Word.Field#locked:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24305,7 +24305,7 @@ console.log(`The first field in the selection is now ${field.locked ? "locked" : "unlocked"}.`); } }); -'Word.Field#parentBody:member': +Word.Field#parentBody:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24326,7 +24326,7 @@ console.log("Text of first field's parent body: " + JSON.stringify(parentBody.text)); } }); -'Word.Field#result:member': +Word.Field#result:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24346,7 +24346,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.Field#type:member': +Word.Field#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24366,7 +24366,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.FieldCollection:class': +Word.FieldCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24390,7 +24390,7 @@ } } }); -'Word.FieldCollection#getFirstOrNullObject:member(1)': +Word.FieldCollection#getFirstOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24410,7 +24410,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.FieldCollection#items:member': +Word.FieldCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24434,7 +24434,7 @@ } } }); -'Word.FieldKind:enum': +Word.FieldKind:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24454,7 +24454,7 @@ console.log("Code of first field: " + field.code, "Result of first field: " + JSON.stringify(field.result), "Type of first field: " + field.type, "Is the first field locked? " + field.locked, "Kind of the first field: " + field.kind); } }); -'Word.FieldType:enum': +Word.FieldType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -24476,7 +24476,7 @@ console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); -'Word.GetTextOptions:interface': +Word.GetTextOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-text.yaml @@ -24493,7 +24493,7 @@ console.log("Text:- " + text.value, "Including hidden text:- " + textIncludingHidden.value, "Including text marked as deleted:- " + textIncludingDeleted.value); }); -'Word.HeaderFooterType:enum': +Word.HeaderFooterType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -24507,7 +24507,7 @@ await context.sync(); }); -'Word.ImageFormat:enum': +Word.ImageFormat:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24527,7 +24527,7 @@ await context.sync(); console.log(base64.value); }); -'Word.ImportedStylesConflictBehavior:enum': +Word.ImportedStylesConflictBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -24546,7 +24546,7 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); -'Word.InlinePicture#getBase64ImageSrc:member(1)': +Word.InlinePicture#getBase64ImageSrc:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24566,7 +24566,7 @@ await context.sync(); console.log(base64.value); }); -'Word.InlinePicture:class': +Word.InlinePicture:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24582,7 +24582,7 @@ await context.sync(); }); -'Word.InlinePicture#imageFormat:member': +Word.InlinePicture#imageFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24602,7 +24602,7 @@ await context.sync(); console.log(base64.value); }); -'Word.InlinePictureCollection:class': +Word.InlinePictureCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -24622,7 +24622,7 @@ await context.sync(); console.log(base64.value); }); -'Word.InsertFileOptions:interface': +Word.InsertFileOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml @@ -24645,7 +24645,7 @@ }); await context.sync(); }); -'Word.InsertLocation:enum': +Word.InsertLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml @@ -24661,7 +24661,7 @@ console.log("Inserted section without an associated page break."); }); -'Word.InsertShapeOptions:interface': +Word.InsertShapeOptions:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -24682,7 +24682,7 @@ console.log("Inserted a text box at the beginning of the current selection."); }); -'Word.List:class': +Word.List:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -24714,7 +24714,7 @@ await context.sync(); }); -'Word.List#insertParagraph:member(1)': +Word.List#insertParagraph:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -24746,7 +24746,7 @@ await context.sync(); }); -'Word.List#setLevelBullet:member(1)': +Word.List#setLevelBullet:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24784,7 +24784,7 @@ await context.sync(); }); -'Word.List#setLevelNumbering:member(1)': +Word.List#setLevelNumbering:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24822,7 +24822,7 @@ await context.sync(); }); -'Word.List#levelExistences:member': +Word.List#levelExistences:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24859,7 +24859,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.List#levelTypes:member': +Word.List#levelTypes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24896,7 +24896,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.ListBuiltInNumberStyle:enum': +Word.ListBuiltInNumberStyle:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -24932,7 +24932,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.ListBullet:enum': +Word.ListBullet:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -24970,7 +24970,7 @@ await context.sync(); }); -'Word.ListCollection:class': +Word.ListCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -25007,7 +25007,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.ListItem:class': +Word.ListItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -25039,7 +25039,7 @@ await context.sync(); }); -'Word.ListItem#level:member': +Word.ListItem#level:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -25071,7 +25071,7 @@ await context.sync(); }); -'Word.ListLevel:class': +Word.ListLevel:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -25107,7 +25107,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.ListLevelCollection:class': +Word.ListLevelCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -25143,7 +25143,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.ListLevelType:enum': +Word.ListLevelType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -25180,7 +25180,7 @@ console.log(`- Level ${i + 1} (index ${i}): ${levelExistences[i]}`); } }); -'Word.ListNumbering:enum': +Word.ListNumbering:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml @@ -25218,7 +25218,7 @@ await context.sync(); }); -'Word.ListTemplate:class': +Word.ListTemplate:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -25254,7 +25254,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.LocationRelation:enum': +Word.LocationRelation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml @@ -25278,7 +25278,7 @@ const locationValue: Word.LocationRelation = comparedLocation.value; console.log(`Location of the first paragraph in relation to the second paragraph: ${locationValue}`); }); -'Word.NoteItem:class': +Word.NoteItem:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25299,7 +25299,7 @@ console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); }); -'Word.NoteItem#delete:member(1)': +Word.NoteItem#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25319,7 +25319,7 @@ console.log("Footnote deleted."); }); -'Word.NoteItem#getNext:member(1)': +Word.NoteItem#getNext:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25338,7 +25338,7 @@ reference.select(); console.log("Selected is the next footnote: " + (mark + 2)); }); -'Word.NoteItem#body:member': +Word.NoteItem#body:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25359,7 +25359,7 @@ console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); }); -'Word.NoteItem#reference:member': +Word.NoteItem#reference:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25381,7 +25381,7 @@ console.log(`Reference ${referenceNumber} is selected.`); }); -'Word.NoteItem#type:member': +Word.NoteItem#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25405,7 +25405,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.NoteItemCollection:class': +Word.NoteItemCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25419,7 +25419,7 @@ reference.select(); console.log("The first footnote is selected."); }); -'Word.NoteItemCollection#getFirst:member(1)': +Word.NoteItemCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25433,7 +25433,7 @@ reference.select(); console.log("The first footnote is selected."); }); -'Word.NoteItemType:enum': +Word.NoteItemType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -25457,7 +25457,7 @@ console.log(`Body type of note: ${item.body.type}`); }); -'Word.OutlineLevel:enum': +Word.OutlineLevel:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -25476,7 +25476,7 @@ await context.sync(); console.log("Styles imported from JSON:", styles); }); -'Word.Page:class': +Word.Page:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25509,7 +25509,7 @@ console.log("Text of that page in the selection:", pagesText[i].text); } }); -'Word.Page#getRange:member(1)': +Word.Page#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25542,7 +25542,7 @@ console.log("Text of that page in the selection:", pagesText[i].text); } }); -'Word.Page#index:member': +Word.Page#index:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25581,7 +25581,7 @@ console.log("Text of that page:", pagesText[i].text); } }); -'Word.PageCollection:class': +Word.PageCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25614,7 +25614,7 @@ console.log("Text of that page in the selection:", pagesText[i].text); } }); -'Word.Pane:class': +Word.Pane:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25664,7 +25664,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Pane#pages:member': +Word.Pane#pages:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25714,7 +25714,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Pane#pagesEnclosingViewport:member': +Word.Pane#pagesEnclosingViewport:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -25755,7 +25755,7 @@ console.log(`Page index: ${pagesIndexes[i].index}`); } }); -'Word.Paragraph:class': +Word.Paragraph:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -25769,7 +25769,7 @@ await context.sync(); console.log(paragraph.text); }); -'Word.Paragraph#getRange:member(1)': +Word.Paragraph#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -25800,7 +25800,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.Paragraph#insertAnnotations:member(1)': +Word.Paragraph#insertAnnotations:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -25856,7 +25856,7 @@ console.log("Annotations inserted:", annotationIds.value); }); -'Word.Paragraph#insertBreak:member(1)': +Word.Paragraph#insertBreak:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -25868,7 +25868,7 @@ await context.sync(); console.log("success"); }); -'Word.Paragraph#insertContentControl:member(1)': +Word.Paragraph#insertContentControl:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml @@ -25896,7 +25896,7 @@ await context.sync(); }); -'Word.Paragraph#insertText:member(1)': +Word.Paragraph#insertText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -25910,7 +25910,7 @@ await context.sync(); }); -'Word.Paragraph#insertTextBox:member(1)': +Word.Paragraph#insertTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -25933,7 +25933,7 @@ console.log("Inserted a text box at the beginning of the first paragraph in the header."); }); -'Word.Paragraph#select:member(1)': +Word.Paragraph#select:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml @@ -25956,7 +25956,7 @@ await context.sync(); }); -'Word.Paragraph#set:member(1)': +Word.Paragraph#set:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml @@ -25990,7 +25990,7 @@ await context.sync(); }); -'Word.Paragraph#split:member(1)': +Word.Paragraph#split:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -26013,7 +26013,7 @@ await pause(200); } }); -'Word.Paragraph#startNewList:member(1)': +Word.Paragraph#startNewList:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -26045,7 +26045,7 @@ await context.sync(); }); -'Word.Paragraph#alignment:member': +Word.Paragraph#alignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26057,7 +26057,7 @@ await context.sync(); }); -'Word.Paragraph#leftIndent:member': +Word.Paragraph#leftIndent:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26069,7 +26069,7 @@ return context.sync(); }); -'Word.Paragraph#lineSpacing:member': +Word.Paragraph#lineSpacing:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26081,7 +26081,7 @@ await context.sync(); }); -'Word.Paragraph#lineUnitAfter:member': +Word.Paragraph#lineUnitAfter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26093,7 +26093,7 @@ await context.sync(); }); -'Word.Paragraph#lineUnitBefore:member': +Word.Paragraph#lineUnitBefore:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26105,7 +26105,7 @@ await context.sync(); }); -'Word.Paragraph#spaceAfter:member': +Word.Paragraph#spaceAfter:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml @@ -26117,7 +26117,7 @@ await context.sync(); }); -'Word.Paragraph#style:member': +Word.Paragraph#style:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26152,7 +26152,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Paragraph#styleBuiltIn:member': +Word.Paragraph#styleBuiltIn:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -26187,7 +26187,7 @@ await context.sync(); }); -'Word.Paragraph#text:member': +Word.Paragraph#text:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26201,7 +26201,7 @@ await context.sync(); console.log(paragraph.text); }); -'Word.Paragraph#uniqueLocalId:member': +Word.Paragraph#uniqueLocalId:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -26245,7 +26245,7 @@ } }); } -'Word.ParagraphAddedEventArgs:interface': +Word.ParagraphAddedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onadded-event.yaml @@ -26269,7 +26269,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were added:`, event.uniqueLocalIds); }); } -'Word.ParagraphChangedEventArgs:interface': +Word.ParagraphChangedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/onchanged-event.yaml @@ -26293,7 +26293,7 @@ console.log(`${event.type} event detected. IDs of paragraphs where content was changed:`, event.uniqueLocalIds); }); } -'Word.ParagraphCollection:class': +Word.ParagraphCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -26309,7 +26309,7 @@ await context.sync(); }); -'Word.ParagraphCollection#getFirst:member(1)': +Word.ParagraphCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-annotations.yaml @@ -26332,7 +26332,7 @@ console.log(`ID ${annotation.id} - state '${annotation.state}':`, annotation.critiqueAnnotation.critique); } }); -'Word.ParagraphCollection#getLast:member(1)': +Word.ParagraphCollection#getLast:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml @@ -26348,7 +26348,7 @@ await context.sync(); }); -'Word.ParagraphCollection#items:member': +Word.ParagraphCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml @@ -26380,7 +26380,7 @@ await context.sync(); }); -'Word.ParagraphDeletedEventArgs:interface': +Word.ParagraphDeletedEventArgs:interface: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/ondeleted-event.yaml @@ -26404,7 +26404,7 @@ console.log(`${event.type} event detected. IDs of paragraphs that were deleted:`, event.uniqueLocalIds); }); } -'Word.ParagraphFormat:class': +Word.ParagraphFormat:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26432,7 +26432,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.ParagraphFormat#alignment:member': +Word.ParagraphFormat#alignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26460,7 +26460,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.ParagraphFormat#leftIndent:member': +Word.ParagraphFormat#leftIndent:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -26488,7 +26488,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.Range:class': +Word.Range:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -26512,7 +26512,7 @@ const contentRange: Word.CommentContentRange = comment.contentRange; console.log("Comment content range:", contentRange); }); -'Word.Range#compareLocationWith:member(1)': +Word.Range#compareLocationWith:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml @@ -26536,7 +26536,7 @@ const locationValue: Word.LocationRelation = comparedLocation.value; console.log(`Location of the first paragraph in relation to the second paragraph: ${locationValue}`); }); -'Word.Range#expandTo:member(1)': +Word.Range#expandTo:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26567,7 +26567,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.Range#getComments:member(1)': +Word.Range#getComments:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -26584,7 +26584,7 @@ console.log("Comments:", comments); }); -'Word.Range#getContentControls:member(1)': +Word.Range#getContentControls:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -26622,7 +26622,7 @@ console.log("Deleted checkbox content control."); }); -'Word.Range#getRange:member(1)': +Word.Range#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-dropdown-list-content-control.yaml @@ -26637,7 +26637,7 @@ console.log("Dropdown list content control inserted at the end of the selection."); }); -'Word.Range#getReviewedText:member(1)': +Word.Range#getReviewedText:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml @@ -26654,7 +26654,7 @@ console.log("Reviewed text (before):", before.value, "Reviewed text (after):", after.value); }); -'Word.Range#getTextRanges:member(1)': +Word.Range#getTextRanges:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26685,7 +26685,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.Range#insertComment:member(1)': +Word.Range#insertComment:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml @@ -26703,7 +26703,7 @@ console.log("Comment inserted:", comment); }); -'Word.Range#insertContentControl:member(1)': +Word.Range#insertContentControl:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -26737,7 +26737,7 @@ } await context.sync(); }); -'Word.Range#insertField:member(1)': +Word.Range#insertField:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml @@ -26759,7 +26759,7 @@ console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); -'Word.Range#insertFootnote:member(1)': +Word.Range#insertFootnote:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -26774,7 +26774,7 @@ console.log("Inserted footnote."); }); -'Word.Range#insertInlinePictureFromBase64:member(1)': +Word.Range#insertInlinePictureFromBase64:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -26810,7 +26810,7 @@ "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"; return pictureBase64; -'Word.Range#insertTextBox:member(1)': +Word.Range#insertTextBox:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -26831,7 +26831,7 @@ console.log("Inserted a text box at the beginning of the current selection."); }); -'Word.Range#footnotes:member': +Word.Range#footnotes:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml @@ -26846,7 +26846,7 @@ console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); -'Word.Range#parentContentControl:member': +Word.Range#parentContentControl:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-checkbox-content-control.yaml @@ -26890,7 +26890,7 @@ `id: ${selectedContentControl.id} ... isChecked: ${selectedContentControl.checkboxContentControl.isChecked}` ); }); -'Word.Range#styleBuiltIn:member': +Word.Range#styleBuiltIn:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml @@ -26903,7 +26903,7 @@ await context.sync(); }); -'Word.RangeCollection:class': +Word.RangeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml @@ -26924,7 +26924,7 @@ await context.sync(); }); -'Word.RangeLocation:enum': +Word.RangeLocation:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -26955,7 +26955,7 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); -'Word.SaveBehavior:enum': +Word.SaveBehavior:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml @@ -26969,7 +26969,7 @@ context.document.save(Word.SaveBehavior.prompt); await context.sync(); }); -'Word.Section#getFooter:member(2)': +Word.Section#getFooter:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -26983,7 +26983,7 @@ await context.sync(); }); -'Word.Section#getHeader:member(1)': +Word.Section#getHeader:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -26997,7 +26997,7 @@ await context.sync(); }); -'Word.Section:class': +Word.Section:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml @@ -27013,7 +27013,7 @@ console.log("Inserted section break on next page."); }); -'Word.SectionCollection:class': +Word.SectionCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml @@ -27029,7 +27029,7 @@ console.log("Inserted section break on next even page."); }); -'Word.SelectionMode:enum': +Word.SelectionMode:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml @@ -27041,7 +27041,7 @@ await context.sync(); }); -'Word.Setting:class': +Word.Setting:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27066,7 +27066,7 @@ console.log("Setting added or edited:", setting); }); -'Word.Setting#key:member': +Word.Setting#key:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27091,7 +27091,7 @@ console.log("Setting added or edited:", setting); }); -'Word.Setting#value:member': +Word.Setting#value:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27116,7 +27116,7 @@ console.log("Setting added or edited:", setting); }); -'Word.SettingCollection:class': +Word.SettingCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27130,7 +27130,7 @@ await context.sync(); console.log("All settings deleted."); }); -'Word.SettingCollection#add:member(1)': +Word.SettingCollection#add:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27155,7 +27155,7 @@ console.log("Setting added or edited:", setting); }); -'Word.SettingCollection#items:member': +Word.SettingCollection#items:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml @@ -27177,7 +27177,7 @@ } } }); -'Word.Shading:class': +Word.Shading:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27211,7 +27211,7 @@ console.log("Updated shading."); } }); -'Word.ShadingTextureType:enum': +Word.ShadingTextureType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27245,7 +27245,7 @@ console.log("Updated shading."); } }); -'Word.Shape:class': +Word.Shape:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27264,7 +27264,7 @@ console.log("The first text box's properties were updated:", firstShapeWithTextBox); }); -'Word.Shape#delete:member(1)': +Word.Shape#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27280,7 +27280,7 @@ console.log("The first text box in document was deleted."); }); -'Word.Shape#type:member': +Word.Shape#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27302,7 +27302,7 @@ console.log("No shapes found in main document."); } }); -'Word.ShapeCollection:class': +Word.ShapeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27324,7 +27324,7 @@ console.log("No shapes found in main document."); } }); -'Word.ShapeCollection#getByTypes:member(1)': +Word.ShapeCollection#getByTypes:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27343,7 +27343,7 @@ console.log("The first text box's properties were updated:", firstShapeWithTextBox); }); -'Word.ShapeCollection#getFirst:member(1)': +Word.ShapeCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27364,7 +27364,7 @@ console.log("New content control properties:", newControl); }); -'Word.ShapeType:enum': +Word.ShapeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -27386,7 +27386,7 @@ console.log("No shapes found in main document."); } }); -'Word.Style:class': +Word.Style:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27421,7 +27421,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Style#delete:member(1)': +Word.Style#delete:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27447,7 +27447,7 @@ console.log(`Successfully deleted custom style '${styleName}'.`); } }); -'Word.Style#borders:member': +Word.Style#borders:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27480,7 +27480,7 @@ console.log("Updated outside borders."); } }); -'Word.Style#font:member': +Word.Style#font:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27508,7 +27508,7 @@ console.log(`Successfully updated font properties of the '${styleName}' style.`); } }); -'Word.Style#listTemplate:member': +Word.Style#listTemplate:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -27544,7 +27544,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.Style#nameLocal:member': +Word.Style#nameLocal:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27579,7 +27579,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Style#paragraphFormat:member': +Word.Style#paragraphFormat:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27607,7 +27607,7 @@ console.log(`Successfully the paragraph format of the '${styleName}' style.`); } }); -'Word.Style#shading:member': +Word.Style#shading:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27641,7 +27641,7 @@ console.log("Updated shading."); } }); -'Word.StyleCollection:class': +Word.StyleCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27656,7 +27656,7 @@ console.log(`Number of styles: ${count.value}`); }); -'Word.StyleCollection#getByNameOrNullObject:member(1)': +Word.StyleCollection#getByNameOrNullObject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27688,7 +27688,7 @@ console.log(newStyleName + " has been added to the style list."); }); -'Word.StyleCollection#getCount:member(1)': +Word.StyleCollection#getCount:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27703,7 +27703,7 @@ console.log(`Number of styles: ${count.value}`); }); -'Word.StyleType:enum': +Word.StyleType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-styles.yaml @@ -27738,7 +27738,7 @@ console.log(`'${styleName}' style applied to first paragraph.`); } }); -'Word.Table#getBorder:member(1)': +Word.Table#getBorder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27755,7 +27755,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.Table#getCell:member(1)': +Word.Table#getCell:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -27770,7 +27770,7 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); -'Word.Table#getCellPadding:member(1)': +Word.Table#getCellPadding:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27788,7 +27788,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` ); }); -'Word.Table#alignment:member': +Word.Table#alignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27803,7 +27803,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.Table#horizontalAlignment:member': +Word.Table#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27818,7 +27818,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.Table#rows:member': +Word.Table#rows:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27835,7 +27835,7 @@ console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); -'Word.Table#verticalAlignment:member': +Word.Table#verticalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27850,7 +27850,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.Table:class': +Word.Table:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -27868,7 +27868,7 @@ await context.sync(); }); -'Word.TableBorder:class': +Word.TableBorder:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27885,7 +27885,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableBorder#color:member': +Word.TableBorder#color:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27902,7 +27902,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableBorder#type:member': +Word.TableBorder#type:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27919,7 +27919,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableBorder#width:member': +Word.TableBorder#width:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27936,7 +27936,7 @@ console.log(`Details about the ${borderLocation} border of the first table:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableCell:class': +Word.TableCell:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27954,7 +27954,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCell#getBorder:member(2)': +Word.TableCell#getBorder:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27972,7 +27972,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first cell:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableCell#getCellPadding:member(2)': +Word.TableCell#getCellPadding:member(2): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -27992,7 +27992,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table's first cell: ${cellPadding.value} points` ); }); -'Word.TableCell#horizontalAlignment:member': +Word.TableCell#horizontalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28010,7 +28010,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCell#verticalAlignment:member': +Word.TableCell#verticalAlignment:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28028,7 +28028,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCellCollection:class': +Word.TableCellCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28046,7 +28046,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableCollection:class': +Word.TableCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28061,7 +28061,7 @@ console.log(`Details about the alignment of the first table:`, `- Alignment of the table within the containing page column: ${firstTable.alignment}`, `- Horizontal alignment of every cell in the table: ${firstTable.horizontalAlignment}`, `- Vertical alignment of every cell in the table: ${firstTable.verticalAlignment}`); }); -'Word.TableCollection#getFirst:member(1)': +Word.TableCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml @@ -28076,7 +28076,7 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); -'Word.TableRow:class': +Word.TableRow:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28094,7 +28094,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableRow#getBorder:member(1)': +Word.TableRow#getBorder:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28113,7 +28113,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first row:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableRow#getCellPadding:member(1)': +Word.TableRow#getCellPadding:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28133,7 +28133,7 @@ `Cell padding details about the ${cellPaddingLocation} border of the first table's first row: ${cellPadding.value} points` ); }); -'Word.TableRow#cells:member': +Word.TableRow#cells:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28151,7 +28151,7 @@ console.log(`Details about the alignment of the first table's first cell:`, `- Horizontal alignment of the cell's content: ${firstCell.horizontalAlignment}`, `- Vertical alignment of the cell's content: ${firstCell.verticalAlignment}`); }); -'Word.TableRowCollection:class': +Word.TableRowCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28168,7 +28168,7 @@ console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); -'Word.TableRowCollection#getFirst:member(1)': +Word.TableRowCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28187,7 +28187,7 @@ console.log(`Details about the ${borderLocation} border of the first table's first row:`, `- Color: ${border.color}`, `- Type: ${border.type}`, `- Width: ${border.width} points`); }); -'Word.TableStyle:class': +Word.TableStyle:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml @@ -28223,7 +28223,7 @@ (document.getElementById("right-cell-margin") as HTMLInputElement).value = tableStyle.rightCellMargin; (document.getElementById("cell-spacing") as HTMLInputElement).value = tableStyle.cellSpacing; }); -'Word.TrackedChange:class': +Word.TrackedChange:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28247,7 +28247,7 @@ console.log(nextTrackedChange); }); -'Word.TrackedChange#accept:member(1)': +Word.TrackedChange#accept:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28266,7 +28266,7 @@ trackedChange.accept(); console.log("Accepted the first tracked change."); }); -'Word.TrackedChange#getNext:member(1)': +Word.TrackedChange#getNext:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28290,7 +28290,7 @@ console.log(nextTrackedChange); }); -'Word.TrackedChange#getRange:member(1)': +Word.TrackedChange#getRange:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28310,7 +28310,7 @@ console.log("range.text: " + range.text); }); -'Word.TrackedChange#reject:member(1)': +Word.TrackedChange#reject:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28329,7 +28329,7 @@ trackedChange.reject(); console.log("Rejected the first tracked change."); }); -'Word.TrackedChangeCollection:class': +Word.TrackedChangeCollection:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28349,7 +28349,7 @@ console.log("range.text: " + range.text); }); -'Word.TrackedChangeCollection#acceptAll:member(1)': +Word.TrackedChangeCollection#acceptAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28363,7 +28363,7 @@ trackedChanges.acceptAll(); console.log("Accepted all tracked changes."); }); -'Word.TrackedChangeCollection#getFirst:member(1)': +Word.TrackedChangeCollection#getFirst:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28383,7 +28383,7 @@ console.log("range.text: " + range.text); }); -'Word.TrackedChangeCollection#rejectAll:member(1)': +Word.TrackedChangeCollection#rejectAll:member(1): - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28397,7 +28397,7 @@ trackedChanges.rejectAll(); console.log("Rejected all tracked changes."); }); -'Word.TrackedChangeType:enum': +Word.TrackedChangeType:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-tracked-changes.yaml @@ -28421,7 +28421,7 @@ console.log(nextTrackedChange); }); -'Word.TrailingCharacter:enum': +Word.TrailingCharacter:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/manage-list-styles.yaml @@ -28457,7 +28457,7 @@ console.log(`List levels of the '${styleName}' style:`, listLevels); } }); -'Word.VerticalAlignment:enum': +Word.VerticalAlignment:enum: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml @@ -28474,7 +28474,7 @@ console.log(`Details about the alignment of the first table's first row:`, `- Horizontal alignment of every cell in the row: ${firstTableRow.horizontalAlignment}`, `- Vertical alignment of every cell in the row: ${firstTableRow.verticalAlignment}`); }); -'Word.Window:class': +Word.Window:class: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml @@ -28524,7 +28524,7 @@ console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); -'Word.Window#activePane:member': +Word.Window#activePane:member: - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml diff --git a/tsconfig.json b/tsconfig.json index 0fd566d63..a3ff66e69 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,13 @@ { "compilerOptions": { - "target": "es6", + "target": "es2018", "module": "commonjs", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, + "esModuleInterop": true, "removeComments": false, "noImplicitAny": false, "noEmitOnError": true, @@ -17,8 +18,10 @@ "rootDir": "config", "lib": [ "dom", - "es2015" + "es2018" ], - "pretty": true + "pretty": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 2f5433b0c..000000000 --- a/yarn.lock +++ /dev/null @@ -1,1016 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.15.8" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz" - integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/helper-validator-identifier@^7.14.5": - version "7.15.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@fast-csv/format@4.3.5": - version "4.3.5" - resolved "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz" - integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== - dependencies: - "@types/node" "^14.0.1" - lodash.escaperegexp "^4.1.2" - lodash.isboolean "^3.0.3" - lodash.isequal "^4.5.0" - lodash.isfunction "^3.0.9" - lodash.isnil "^4.0.0" - -"@fast-csv/parse@4.3.6": - version "4.3.6" - resolved "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz" - integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== - dependencies: - "@types/node" "^14.0.1" - lodash.escaperegexp "^4.1.2" - lodash.groupby "^4.6.0" - lodash.isfunction "^3.0.9" - lodash.isnil "^4.0.0" - lodash.isundefined "^3.0.1" - lodash.uniq "^4.5.0" - -"@types/chalk@0.4.31": - version "0.4.31" - resolved "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz" - integrity sha1-ox10JBprHtu5c8822XooloNKUfk= sha512-nF0fisEPYMIyfrFgabFimsz9Lnuu9MwkNrrlATm2E4E46afKDyeelT+8bXfw1VSc7sLBxMxRgT7PxTC2JcqN4Q== - -"@types/fs-extra@3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY= sha512-99ywH5BUw32J7pX3Nqo5xDw7KtvWUogKXLNGAlfSKvMGnCLq6/5Ufk+EuPNEMsKmSYJW1VityGHA9Lo+NEgCKg== - dependencies: - "@types/node" "*" - -"@types/glob@*": - version "7.1.4" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/js-yaml@^3.12.0": - version "3.12.7" - resolved "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz" - integrity sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ== - -"@types/lodash@^4.14.175": - version "4.14.175" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz" - integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== - -"@types/minimatch@*": - version "3.0.5" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/node@*", "@types/node@^11.10.5": - version "11.15.54" - resolved "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz" - integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== - -"@types/node@^14.0.1": - version "14.17.21" - resolved "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz" - integrity sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA== - -"@types/shelljs@^0.8.3": - version "0.8.9" - resolved "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz" - integrity sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw== - dependencies: - "@types/glob" "*" - "@types/node" "*" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^5.0.0: - version "5.3.0" - resolved "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz" - integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.0" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.0.0" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -async@^3.2.0: - version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -big-integer@^1.6.17: - version "1.6.49" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz" - integrity sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== - -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -charm@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz" - integrity sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0= sha512-mBB1orFlZvYF8PcQNtO446LbWmgZEIOvq6n0CY68csh9JN0Rk1rrqWPQpfLImQO7EhpibXUVDF2PTTaYIfTeRA== - dependencies: - inherits "^2.0.1" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A== - dependencies: - restore-cursor "^1.0.1" - -cli-spinners@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz" - integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= sha512-1sdlgy47mFLr4OfiKC/raeqJ4Jt6oZskLs51esqe/rFqcR23DNF++CbsDpv3hsvwGWHA/+lnxf4xdDtZZtkPBA== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -colors@1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== - -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -compress-commons@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz" - integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -crc-32@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz" - integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" - -crc32-stream@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz" - integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - -dayjs@^1.8.34: - version "1.10.7" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -exceljs@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz" - integrity sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w== - dependencies: - archiver "^5.0.0" - dayjs "^1.8.34" - fast-csv "^4.3.1" - jszip "^3.5.0" - readable-stream "^3.6.0" - saxes "^5.0.1" - tmp "^0.2.0" - unzipper "^0.10.11" - uuid "^8.3.0" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg== - -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - -fast-csv@^4.3.1: - version "4.3.6" - resolved "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz" - integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== - dependencies: - "@fast-csv/format" "4.3.5" - "@fast-csv/parse" "4.3.6" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.8" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@2: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -is-core-module@^2.2.0: - version "2.7.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== - dependencies: - has "^1.0.3" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz" - integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w== - optionalDependencies: - graceful-fs "^4.1.6" - -jszip@^3.5.0: - version "3.10.1" - resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz" - integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - setimmediate "^1.0.5" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= sha512-/330KFbmC/zKdtZoVDRwvkJ8snrJyBPfoZ39zsJl2O24HOE1CTNiEbeZmHXmjBVxTSSv7JlJEXPYhU83DhA2yg== - dependencies: - readable-stream "^2.0.5" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.groupby@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz" - integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.isfunction@^3.0.9: - version "3.0.9" - resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" - integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== - -lodash.isnil@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz" - integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isundefined@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz" - integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA== - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5: - version "1.2.7" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -mkdirp@^0.5.3, "mkdirp@>=0.5 0": - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -node-status@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz" - integrity sha1-eQanxHplh9A0lr907GNKuqA/joA= sha512-vYKQTNACHKZRIV64kLuZ3mO2rrwoHUL7GMgEOmUFm4fSntm+guwAlFAhzlNdcMVtyppyR4MnHhaLqTNTHnFawg== - dependencies: - charm "1.0.1" - cli-cursor "^1.0.2" - cli-spinners "0.2.0" - colors "1.1.2" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== - -pako@~1.0.2: - version "1.0.11" - resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -printj@~1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -readable-stream@^2.0.0: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.0.2: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.0.5: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-glob@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz" - integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== - dependencies: - minimatch "^3.0.4" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -resolve@^1.1.6, resolve@^1.3.2: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw== - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@2: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -semver@^5.3.0: - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -setimmediate@^1.0.5, setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -tar-stream@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tmp@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - -tslib@^1.13.0, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslint@^6.1.0: - version "6.1.3" - resolved "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" - integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.3" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.13.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -typescript@^3.3.3333, "typescript@>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev", "typescript@>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev": - version "3.9.10" - resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz" - integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unzipper@^0.10.11: - version "0.10.11" - resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz" - integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -yarn@^1.22.19: - version "1.22.19" - resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" - integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== - -zip-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz" - integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.1.0" - readable-stream "^3.6.0" From 70bec7afef72b9dc58e4613aade90af3b2b128bd Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 25 Sep 2025 10:34:10 -0700 Subject: [PATCH 147/156] Remove garbage characters in the terminal (#999) --- config/helpers.ts | 1 - config/status.ts | 51 ++++++++++++++++++++++++++++------------------- package.json | 1 - 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/config/helpers.ts b/config/helpers.ts index 69dff82e0..d0798f6bb 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -3,7 +3,6 @@ import * as fs from 'fs'; import * as os from 'os'; import chalk from 'chalk'; import * as jsyaml from 'js-yaml'; -import { console } from './status'; import { rimraf } from 'rimraf'; import { isObject, isNil, isString, isEmpty } from 'lodash'; diff --git a/config/status.ts b/config/status.ts index 692b788ac..2f953ee73 100644 --- a/config/status.ts +++ b/config/status.ts @@ -1,6 +1,5 @@ -import * as nodeStatus from 'node-status'; import chalk from 'chalk'; -import { isString, find, isNil, isArray } from 'lodash'; +import { isString, isNil, isArray } from 'lodash'; interface IStage { steps: any[]; @@ -13,16 +12,29 @@ export class Status { steps: { [step: string]: boolean } = {}; get console() { - return nodeStatus.console(); + // Return the global console object methods + return { + log: global.console.log.bind(global.console), + error: global.console.error.bind(global.console), + warn: global.console.warn.bind(global.console), + info: global.console.info.bind(global.console) + }; } constructor() { - /* Initialize the status library */ - this.stages = nodeStatus.addItem('stages', { - steps: [] - }); + /* Initialize the simple status system */ + this.stages = { + steps: [], + count: 0, + doneStep: this.doneStep.bind(this) + }; + } - nodeStatus.start(); + private doneStep(completed: boolean, message?: string): void { + const symbol = completed ? chalk.green('✓') : chalk.red('✗'); + if (message) { + global.console.log(`${symbol} ${message}`); + } } /** @@ -37,22 +49,18 @@ export class Status { success = success && additionalDetails.findIndex(item => item instanceof Error) < 0; const messageArray = getDetailsArray(); + const symbol = success ? chalk.green('✓') : chalk.red('✗'); - if (messageArray.length === 0) { - this.stages.doneStep(success); - } else { - // Add a newline before - messageArray.splice(0, 0, ''); - this.stages.doneStep(success, messageArray.join('\n * ') + '\n'); - //FIXME `${chalk.bold.red('WARNING: one of the messages above was an error')}`) - } - - this.steps[stage] = false; + // Log the completion with symbol + global.console.log(`${symbol} ${stage}`); - if (!find(this.steps as any, (item) => item === true)) { - nodeStatus.stop(); + if (messageArray.length > 0) { + messageArray.forEach(msg => { + global.console.log(` * ${msg}`); + }); } + this.steps[stage] = false; // Helper: function getDetailsArray() { @@ -82,12 +90,13 @@ export class Status { } /** - * Add a new stage and complete the previous stage. + * Add a new stage and mark it as started. * @param stage Name of the stage. */ add(stage: string) { this.stages.steps.push(stage); this.steps[stage] = true; + global.console.log(chalk.cyan(`○ ${stage}`)); } } diff --git a/package.json b/package.json index 40974d9bf..457b9471d 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "fs-extra": "11.3.2", "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "node-status": "^1.0.0", "rimraf": "^6.0.1", "shelljs": "^0.10.0" }, From 88b7fe2de1e3b3f7effa5b0837318458271c80f6 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 30 Sep 2025 10:12:52 -0700 Subject: [PATCH 148/156] [Outlook] (drag and drop) Create code snippet and map it to drag-and-drop APIs (#1001) --- playlists-prod/outlook.yaml | 11 ++ playlists/outlook.yaml | 11 ++ samples/outlook/80-events/drag-drop-item.yaml | 72 ++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 24557 -> 24926 bytes snippet-extractor-output/snippets.yaml | 135 ++++++++++++++++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 7 files changed, 231 insertions(+) create mode 100644 samples/outlook/80-events/drag-drop-item.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index d675b90a6..cdb4674f5 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -455,6 +455,17 @@ group: Regex Matches api_set: Mailbox: '1.6' +- id: outlook-events-drag-drop-item + name: Drag and drop an item into the task pane + fileName: drag-drop-item.yaml + description: >- + Handles the drag-and-drop event when a user drags and drops messages and + file attachments into the add-in task pane. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml + group: Events + api_set: + Mailbox: '1.5' - id: outlook-tokens-and-service-calls-ids-and-urls name: Endpoint URLs and item IDs fileName: ids-and-urls.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index ca772433b..66855bc23 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -455,6 +455,17 @@ group: Regex Matches api_set: Mailbox: '1.6' +- id: outlook-events-drag-drop-item + name: Drag and drop an item into the task pane + fileName: drag-drop-item.yaml + description: >- + Handles the drag-and-drop event when a user drags and drops messages and + file attachments into the add-in task pane. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/80-events/drag-drop-item.yaml + group: Events + api_set: + Mailbox: '1.5' - id: outlook-tokens-and-service-calls-ids-and-urls name: Endpoint URLs and item IDs fileName: ids-and-urls.yaml diff --git a/samples/outlook/80-events/drag-drop-item.yaml b/samples/outlook/80-events/drag-drop-item.yaml new file mode 100644 index 000000000..7fb596045 --- /dev/null +++ b/samples/outlook/80-events/drag-drop-item.yaml @@ -0,0 +1,72 @@ +id: outlook-events-drag-drop-item +name: Drag and drop an item into the task pane +description: Handles the drag-and-drop event when a user drags and drops messages and file attachments into the add-in task pane. +host: OUTLOOK +api_set: + Mailbox: '1.5' +script: + content: | + Office.onReady(() => { + dragAndDropEventHandler(event); + }); + + function dragAndDropEventHandler(event) { + Office.context.mailbox.addHandlerAsync(Office.EventType.DragAndDropEvent, (event) => { + console.log(`Event type: ${event.type}`); + + const eventData = event.dragAndDropEventData; + console.log(`x-coordinate: ${eventData.pageX}, y-coordinate: ${eventData.pageY}`); + + if (eventData.type == "drop") { + console.log("Items dropped into task pane."); + const files = eventData.dataTransfer.files; + files.forEach((file) => { + const content = file.fileContent; + const name = file.name; + const fileType = file.type; + console.log(`File name: ${name}`); + console.log(`File type: ${fileType}`); + console.log(`Contents: ${content.text().then((text) => { console.log(text); })}`); + }); + } + }); + } + language: typescript +template: + content: |- + +
      +

      Try it out

      +
        +
      1. Drag a message or file attachment from your mailbox to the task pane. As you drag the item across the task pane, the event name and the coordinates of your mouse pointer are displayed in the console.
      2. +
      3. Drop the message or file attachment into the task pane. The properties + of the dropped item are displayed in the console.
      4. +
      +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index d3bcea07da6e2dafcc5810793c747628bf50777e..ef99fbe2699190fd28de29aa670d30cf50b8d3c4 100644 GIT binary patch delta 14927 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 UP(uM|N$sRwLuz<)z5mMmf3!~PZ~y=R delta 14526 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 E2SE{?AOHXW diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ee07a923e..e4de5bfb1 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11153,6 +11153,141 @@ Office.DisplayedSubject#setAsync:member(2): console.log("Temporarily set the content displayed in the subject field."); }); +Office.DragAndDropEventArgs:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml + + + function dragAndDropEventHandler(event) { + Office.context.mailbox.addHandlerAsync(Office.EventType.DragAndDropEvent, (event) => { + console.log(`Event type: ${event.type}`); + + const eventData = event.dragAndDropEventData; + console.log(`x-coordinate: ${eventData.pageX}, y-coordinate: ${eventData.pageY}`); + + if (eventData.type == "drop") { + console.log("Items dropped into task pane."); + const files = eventData.dataTransfer.files; + files.forEach((file) => { + const content = file.fileContent; + const name = file.name; + const fileType = file.type; + console.log(`File name: ${name}`); + console.log(`File type: ${fileType}`); + console.log(`Contents: ${content.text().then((text) => { console.log(text); })}`); + }); + } + }); + } +Office.DragoverEventData:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml + + + function dragAndDropEventHandler(event) { + Office.context.mailbox.addHandlerAsync(Office.EventType.DragAndDropEvent, (event) => { + console.log(`Event type: ${event.type}`); + + const eventData = event.dragAndDropEventData; + console.log(`x-coordinate: ${eventData.pageX}, y-coordinate: ${eventData.pageY}`); + + if (eventData.type == "drop") { + console.log("Items dropped into task pane."); + const files = eventData.dataTransfer.files; + files.forEach((file) => { + const content = file.fileContent; + const name = file.name; + const fileType = file.type; + console.log(`File name: ${name}`); + console.log(`File type: ${fileType}`); + console.log(`Contents: ${content.text().then((text) => { console.log(text); })}`); + }); + } + }); + } +Office.DropEventData:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml + + + function dragAndDropEventHandler(event) { + Office.context.mailbox.addHandlerAsync(Office.EventType.DragAndDropEvent, (event) => { + console.log(`Event type: ${event.type}`); + + const eventData = event.dragAndDropEventData; + console.log(`x-coordinate: ${eventData.pageX}, y-coordinate: ${eventData.pageY}`); + + if (eventData.type == "drop") { + console.log("Items dropped into task pane."); + const files = eventData.dataTransfer.files; + files.forEach((file) => { + const content = file.fileContent; + const name = file.name; + const fileType = file.type; + console.log(`File name: ${name}`); + console.log(`File type: ${fileType}`); + console.log(`Contents: ${content.text().then((text) => { console.log(text); })}`); + }); + } + }); + } +Office.DroppedItems:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml + + + function dragAndDropEventHandler(event) { + Office.context.mailbox.addHandlerAsync(Office.EventType.DragAndDropEvent, (event) => { + console.log(`Event type: ${event.type}`); + + const eventData = event.dragAndDropEventData; + console.log(`x-coordinate: ${eventData.pageX}, y-coordinate: ${eventData.pageY}`); + + if (eventData.type == "drop") { + console.log("Items dropped into task pane."); + const files = eventData.dataTransfer.files; + files.forEach((file) => { + const content = file.fileContent; + const name = file.name; + const fileType = file.type; + console.log(`File name: ${name}`); + console.log(`File type: ${fileType}`); + console.log(`Contents: ${content.text().then((text) => { console.log(text); })}`); + }); + } + }); + } +Office.DroppedItemDetails:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml + + + function dragAndDropEventHandler(event) { + Office.context.mailbox.addHandlerAsync(Office.EventType.DragAndDropEvent, (event) => { + console.log(`Event type: ${event.type}`); + + const eventData = event.dragAndDropEventData; + console.log(`x-coordinate: ${eventData.pageX}, y-coordinate: ${eventData.pageY}`); + + if (eventData.type == "drop") { + console.log("Items dropped into task pane."); + const files = eventData.dataTransfer.files; + files.forEach((file) => { + const content = file.fileContent; + const name = file.name; + const fileType = file.type; + console.log(`File name: ${name}`); + console.log(`File type: ${fileType}`); + console.log(`Contents: ${content.text().then((text) => { console.log(text); })}`); + }); + } + }); + } Office.EnhancedLocation#addAsync:member(1): - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index d9564fc71..9b861d008 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -47,6 +47,7 @@ "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml", + "outlook-events-drag-drop-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", diff --git a/view/outlook.json b/view/outlook.json index bdd41f2b7..7d57d08cb 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -47,6 +47,7 @@ "outlook-mime-headers-get-internet-headers-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml", "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-regex-matches/contextual.yaml", + "outlook-events-drag-drop-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/80-events/drag-drop-item.yaml", "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", From 6e50798c0aa40ca4ed0776f0f01aad0f6f54ef52 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 2 Oct 2025 12:27:49 -0700 Subject: [PATCH 149/156] [Excel] Map existing snippets to ref docs (#1000) * [Excel] Map existing snippets to ref docs * Map CardLayoutSection to different snippet * Map EntityPropertyType and EntityViewLayouts to shorter snippet * Add explicit types as comments --- .../data-types-entity-attribution.yaml | 8 +- snippet-extractor-metadata/excel.xlsx | Bin 29305 -> 29716 bytes snippet-extractor-output/snippets.yaml | 346 ++++++++++++++++++ 3 files changed, 350 insertions(+), 4 deletions(-) diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index 93ceb5e26..984bb7ab7 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -50,7 +50,7 @@ script: const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, - properties: { + properties: { /* Excel.EntityPropertyType */ "Product ID": { type: Excel.CellValueType.string, basicValue: productID.toString() || "" @@ -70,10 +70,10 @@ script: numberFormat: "$* #,##0.00" } }, - layouts: { - card: { + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ title: { property: "Product Name" }, - sections: [ + sections: [ /* Excel.CardLayoutSection */ { layout: "List", properties: ["Product ID"] diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index ab89b7460a3921f4fdf8d7f326b0467ec25cc7ac..60920aee9bfe58d34f918f9d4850ad3d39f0759d 100644 GIT binary patch delta 20507 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 eVRi$2gH`bgJ%HL^6+9- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml + + + function makeProductEntity(productID: number, productName: string, product?: + any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { /* Excel.EntityPropertyType */ + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + } + }, + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ + title: { property: "Product Name" }, + sections: [ /* Excel.CardLayoutSection */ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + } + ] + } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. + } + }; + + return entity; + } +Excel.CellBorder:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Creating the SettableCellProperties objects to use for the range. + // In your add-in, these should be created once, outside the function. + const topHeaderProps: Excel.SettableCellProperties = { + // The style property takes a string matching the name of an Excel style. + // Built-in style names are listed in the `BuiltInStyle` enum. + // Note that a style will overwrite any formatting, + // so do not use the format property with the style property. + style: "Heading1" + }; + + const headerProps: Excel.SettableCellProperties = { + // Any subproperties of format that are not set will not be changed when these cell properties are set. + format: { + fill: { + color: "Blue" + }, + font: { + color: "White", + bold: true + } + } + }; + + const nonApplicableProps: Excel.SettableCellProperties = { + format: { + fill: { + pattern: Excel.FillPattern.gray25 + }, + font: { + color: "Gray", + italic: true + } + } + }; + + const matchupScoreProps: Excel.SettableCellProperties = { + format: { + borders: { + bottom: { + style: Excel.BorderLineStyle.continuous + }, + left: { + style: Excel.BorderLineStyle.continuous + }, + right: { + style: Excel.BorderLineStyle.continuous + }, + top: { + style: Excel.BorderLineStyle.continuous + } + } + } + }; + + const range = sheet.getRange("A1:E5"); + + // You can use empty JSON objects to avoid changing a cell's properties. + range.setCellProperties([ + [topHeaderProps, {}, {}, {}, {}], + [{}, {}, headerProps, headerProps, headerProps], + [{}, headerProps, nonApplicableProps, matchupScoreProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, nonApplicableProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, matchupScoreProps, nonApplicableProps] + ]); + + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); + }); Excel.CellControl:type: - >- // Link to full sample: @@ -3490,6 +3625,43 @@ Excel.DataPivotHierarchy#name:member: dataHierarchies.items[0].name = "Farm Sales"; dataHierarchies.items[1].name = "Wholesale"; + await context.sync(); + }); +Excel.DataValidationErrorAlert:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Decision"); + const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + rankingRange.dataValidation.clear(); + + let greaterThanZeroRule = { + wholeNumber: { + formula1: 0, + operator: Excel.DataValidationOperator.greaterThan + } + }; + rankingRange.dataValidation.rule = greaterThanZeroRule; + + rankingRange.dataValidation.prompt = { + message: "Please enter a positive number.", + showPrompt: true, + title: "Positive numbers only." + }; + + rankingRange.dataValidation.errorAlert = { + message: "Sorry, only positive numbers are allowed", + showAlert: true, + style: "Stop", + title: "Negative Number Entered" + }; + await context.sync(); }); Excel.DataValidation#errorAlert:member: @@ -3835,6 +4007,64 @@ Excel.DynamicFilterCriteria:enum: await context.sync(); }); +Excel.EntityCardLayout:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml + + + function makeProductEntity(productID: number, productName: string, product?: + any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { /* Excel.EntityPropertyType */ + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + } + }, + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ + title: { property: "Product Name" }, + sections: [ /* Excel.CardLayoutSection */ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + } + ] + } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. + } + }; + + return entity; + } Excel.EntityCompactLayoutIcons:enum: - >- // Link to full sample: @@ -3864,6 +4094,122 @@ Excel.EntityCompactLayoutIcons:enum: }); return entities; } +Excel.EntityPropertyType:type: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml + + + function makeProductEntity(productID: number, productName: string, product?: + any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { /* Excel.EntityPropertyType */ + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + } + }, + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ + title: { property: "Product Name" }, + sections: [ /* Excel.CardLayoutSection */ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + } + ] + } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. + } + }; + + return entity; + } +Excel.EntityViewLayouts:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml + + + function makeProductEntity(productID: number, productName: string, product?: + any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { /* Excel.EntityPropertyType */ + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + } + }, + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ + title: { property: "Product Name" }, + sections: [ /* Excel.CardLayoutSection */ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + } + ] + } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. + } + }; + + return entity; + } Excel.ErrorCellValue:type: - >- // Link to full sample: From f20c2c8ee5757f5238ca3c88483fa5da5a526c97 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 8 Oct 2025 16:56:29 -0700 Subject: [PATCH 150/156] [Word] (windows, panes) Add how to access collections (#1003) --- samples/word/35-ranges/get-pages.yaml | 59 +++++++++++++++---- snippet-extractor-metadata/word.xlsx | Bin 28680 -> 28768 bytes snippet-extractor-output/snippets.yaml | 77 ++++++++++++++++++------- 3 files changed, 104 insertions(+), 32 deletions(-) diff --git a/samples/word/35-ranges/get-pages.yaml b/samples/word/35-ranges/get-pages.yaml index ac6000b3d..c4b6584a3 100644 --- a/samples/word/35-ranges/get-pages.yaml +++ b/samples/word/35-ranges/get-pages.yaml @@ -9,9 +9,15 @@ api_set: script: content: | document.getElementById("get-pages-selected-range").addEventListener("click", () => tryCatch(getPagesOfSelectedRange)); - document.getElementById("get-pages-third-paragraph").addEventListener("click", () => tryCatch(getPagesOfThirdParagraph)); - document.getElementById("get-pages-enclosing-viewport").addEventListener("click", () => tryCatch(getPagesEnclosingViewport)); + document + .getElementById("get-pages-third-paragraph") + .addEventListener("click", () => tryCatch(getPagesOfThirdParagraph)); + document + .getElementById("get-pages-enclosing-viewport") + .addEventListener("click", () => tryCatch(getPagesEnclosingViewport)); document.getElementById("get-all-pages").addEventListener("click", () => tryCatch(getAllPages)); + document.getElementById("get-all-panes").addEventListener("click", () => tryCatch(getAllPanes)); + document.getElementById("get-all-windows").addEventListener("click", () => tryCatch(getAllWindows)); document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function getPagesOfSelectedRange() { @@ -27,11 +33,11 @@ script: const pagesText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const range = page.getRange(); - range.load('text'); + range.load("text"); pagesText.push(range); } @@ -63,11 +69,11 @@ script: const pagesText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const range = page.getRange(); - range.load('text'); + range.load("text"); pagesText.push(range); } @@ -106,7 +112,7 @@ script: const pagesIndexes = []; for (let i = 0; i < pageCount; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); } @@ -143,15 +149,15 @@ script: const pagesFirstParagraphText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const paragraphs = page.getRange().paragraphs; - paragraphs.load('items/length'); + paragraphs.load("items/length"); pagesNumberOfParagraphs.push(paragraphs); const firstParagraph = paragraphs.getFirst(); - firstParagraph.load('text'); + firstParagraph.load("text"); pagesFirstParagraphText.push(firstParagraph); } @@ -165,6 +171,33 @@ script: }); } + async function getAllPanes() { + await Word.run(async (context) => { + // Gets all the panes in the active document window. + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load("panes/items/length"); + + await context.sync(); + + const panes: Word.PaneCollection = activeWindow.panes; + console.log(`Number of panes in the current document window: ${panes.items.length}`); + }); + } + + async function getAllWindows() { + await Word.run(async (context) => { + // Gets the document windows. + const windows: Word.WindowCollection = context.document.windows; + windows.load("windows/items/length"); + + await context.sync(); + + console.log(`Number of windows for this document: ${windows.items.length}`); + }); + } + async function setup() { await Word.run(async (context) => { const body: Word.Body = context.document.body; @@ -226,6 +259,12 @@ template: + +
      +

      Drag and drop messages and file attachments into the add-in task pane.

      +

      To learn more about the drag-and-drop feature, see Drag and drop messages and + attachments into the task pane of an Outlook add-in.

      +

      Required mode: Compose or Read

      +

      Supported Outlook clients: Outlook on the web and the new Outlook on Windows

      +
      language: html style: diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index a3ceb2436882c3cfa68823042b63a7257a648485..129c0726370e26a4531d7a84fdeb4900947e4371 100644 GIT binary patch delta 19498 zcmX`S1yCJL6E1wP;Be63!8tg=-CYmv5E9&j23_Rf?(XgcP4Ga1LkRBf1PJbMdB6YO zzqV?tcAx3qp5B@1r?+>)*WuRJ;p(-J5osOJYm)Sk8G(;@r0{4J=XM4q4wbXDe$__K zK?FU6>9F#{mo6^GgSHN>mBOE~r`xAp?GL_5Beg8qITJBj+ChUzva#hFDMPkN`KGO= z%kN!C`l_PeR^p-xhQBdZ6$3K=rmTuGHM@iIZE=%HH3xF%ioZj=TnlW~1FdS@hA_#l z`t594zW}q_lIacqe4`QSwi_hnV0zuiQZ;j&1WG9_CFP?y(osRA`D@z^j&GVc{jiOO zu3BnVv{HD)g@+|GrLZHjIb-U0Qzjq31~duvW~=t`1-$!Fe=9}noD;%iQK?-ty9=M+ zNpsNnh`mWoG!S14VxhiET@R`L#QE?v!c?1tsut zgV*O@3HU4JJRn8Ypt&A{fJ|KQa?9<}!5IOPL z>l{_avLL_1n09UQBXCJV__V2M2RkveMD+#?Mv0^5Io%jzeA96CEX^g1@?zvJh$Hm) zv#z2$#2{A}2<2DpnpYy-73Rk12yxx5i=2HI(_do>>o`9)o`*&;vTN)&tlay<5Fa`b zrLDSnECmBsY?={+V4M2kG>4lr;osdb5C`10+tJ%Dby0 z4uS0}_N1HdX1(0Z7ln1Q3^7~NXr=s_K!*fIRvBqkMf*Rr?H4B#jZ|i*R0c&;^h|`E z4PY1LOp-RfsYgUj8QNc5^xl66t&`x~svu$V)r7ES0KdAucd`r+MvN0!o**dRUFL;_ ztY+n>X61!ovfW50I<1xvYei zuU~lTN5rLiO(KTl-(JRha;MF}_)SNaU{>sk|mepkQOFM_zU%M{^V<7hO zeZRzBV0$!@t^P#FtdpyHflXvNQn<*;hJ(m0c%g$UqR^k=06^gyM zDf53>v2x#gQ2A=ZL#d0BoWF(lh2L)_2uZ9V{T(&6`?zq9q_|F4uOzSFDxRk3kol9r z7oW1xk|4fMDdv-hfX+-_K|L2l=`R>rM3Ja<6ClWa|Gr4cq9#!#v>lP~9f849&~SzG z7>OU|)!H`U`o6g7=RLA4mw3(6h6On&J;)r32I|$2{`vZL%aXV3 zbNaj85Bw$w+$cnn=Dp)afp)pg-LRxKPd*Y&u>ukheJR9C^<4U!Gl6@!ioZ?2`AOpchj zdz3FZUp-BjWjj^Vr;c_uGJ(fA%Ysu%GZMe|F>HM_D*dYhH|)V5GT%^0lamtV8M$4$D&iZAd=J1XkRliy4*D-Mvks7 zd*gENzUFx9`={){397-DFBp}fbTY0R^6^o8e1!6iMJ0-U7u(-;VA{|(A>BH}Hxowk zJ)(Ec)#YmuZY)_{A~O@|mwgbCCHl=R=>=*k59T@0zZ8iDXFujM%h$z3e2R?E0^qy+ zf)$-+WkSjOoTh)^1SJ7uJZ{bOv5bqMl-qC`}DQz-3lVE*|%zV?``uha8iI=ut^f^l59V(Ljjtk^F* z=@OlM{F2Vs$Qh6h6Vr+7C^4Ydc^9MWC<0_a(N$mx9(g{O8B;V*0` zcDUC?0u5H>!hZ`V9>IaXnBwK#^_3vy4!!Zl_T67;&O3d&qwjcE11uZE2*zltQN*8D z{4Ga$Ogg{O?r|B*?gcV;-umu5f0^p8LY_Bc=}ounQ?GRDKG#3zbJZv3icML;P zpq;Z6Yb>zqI>%=*{`J;AJtJ1t z`!#NX@re9KRPn>wp@ELu-^=Dft4=LOW9D55?ISU#Ko^~458CbZ6BC?f*ch3>odUlI zGIC2MZ&ixI`^uK9(N_tDVWSJ;dfpXSZ(cf4d4 zPh$Chm;eS{Y^+X2f4!lU98S%=76*O6{N0#j-)o^y`_=g)2dE8pv)iTF<%!@Cy=O5> z*ZYU_+Z^1Rd3~>3Qd)DE*x&q@Oj^wsssvy*eRCGYYGgh3<=5;O2qk^SH62gt`Sk6> zlu$rr**qpa4qL5KBB$->u2*AXcK%_Ru5cpZU$MbQ>^KN zbeM13NK9N5Pw%hS=RuEcb4iQF#!mh7!g)IHzt0&xTW^=lp^P!DFSVMdop#7&CIFeM zzO|o#@yEWn2l}qM3wB+WwMP@4o~GGfvnX>+>xOm5nYlLx6_bJwuz~07MY~RiTqEXN zQKu?Wk0S>;{#n7qh2eZ#@?Q^_%zp1U`zi8|9A1y8Xh}5N+QJ$fN9~^0)1_LFcXuF3 z#TxSdxuFw6_Yp%Kdra~w36&-i;CuAd826Hb`K^JdZ@(3wy3%{a`%h2en2(%F{bvg62S|Ig|0NC)EiCinx;kk7l zuqIhL;l&Y5`%mF?T@elWSwPD|juJPRm>nNn5BXI7C%xn(*gH%?V;4<4eWs_sa45Eu z_uy(9cffl_L}VJ3CPLj&9pGg6B`xik-d^(xeS~4(c0+s*mbbk$9^Sg<21^jR*JpRt z?}{Fs@$CMzU;?<){Alf5l>Z<~P0JiClqa*>(5A8Wm`;}P%*iL_oB6zC>FkRIrfJ)e~L*@L<9A5R9{SZA(-491bpq@4B+1oJ+>c@xL>c-`%8Ul=ktm^-OFXzmYGjR(wH{Wcz+U? zYK236(e^&XzYSfyYHj0cG=GFkfX$Nacipqll99Qan!$9U1RqMU$1y)q%s1di^X?GAPoyWFAwjb?V{rvR{`Td48tau&!2I=9_vr4aIeSv}_w z|Ia?ZG1@=_%yZUW3C?eQ0ml}o$sPFc`UE+Y5zywxS4855H495x*HNSVhQcakH=z5w%lxCtY_;!M#y zLNiw4WuMO7hH97j_T~*+TnmGzLhrlpE$(WrTkY$ty#}vq9VSz=epMmL(s+V>1#t6* z%5~E-&-b*u-<+W`u&3(>O0ZW|M(}vh_4(gcllGBkJ2q1f3%Yeocxy)%+HM&lWw^C2 zi4uV*<%D4v(%%f zyWOXXn|kvrYi;vzaKTN&lp{#vlxzRo1go!Pq$$RVZ{;ReTw4T=i?Ca6Py=qQ(+3oI zV~KMxwuj|O%I8RNq^nI<6+<{XhQjClZfFy{|BId43R=c+%F8kcXqv)nBSWjRa2zjJ z_hhddJddZ0Qc)R=f9=|7ifvYY7v^c`J;g~){y`3J&0dwX>$vbS=R}r$%-E%VMA)^4 zZAq7yO5xNm(VV?1ZTE!9rW5n$f#c=ma*2sSQ4IdJ4~*Ty`P4Xbd)>2 zt1I(__Y@m4#LKP&fRT>p=q!l>IL&lZRA`#fu1ErVm4>A}z^M$yLLx~}uQ7jy;k5f2 zc_lh$RyKIIQ|?yn&CP1&_iELQk=$&5{jK}1zblxYqSP?@V4)Ly!)y0imoLMM@xRSo z^*yn^x062TiBSvF1^cMlXdq`Fva@E$1!#ICDSx7W2(M4X08Ruf*hb2dIt@e7Jr~qQ zug|B6M#ZTA(ggdQ=rOIQl8PR$GG@iB*;H@EbU{Tyb>^X8KVAy!A#r$o$jf-42iN}1D!#m z(2c(O7|V)I0A=ZxNM92k{7t9vjq_MM+JbHJyU%_%EiH(EG`}3&+Gi|KjZ3Upu(#9L z1giU3t$ed(!~ZX1sS{EhuiK*DN!V?)%hp;s+9_Q=pf%xn8UwXU5nmg5V`-QJSE5%@ z`+z!b>@?;)r34GL-}gZdj2+yl{aAIBzX33FlFmQO*=F?mx~sC|C^i(Fl27{%Z?;C2 z+^1SLy(P4%WA|sCXzesPR&#!q;UB)7WMI5*W6;jKZrGMTxA@3--9l_qV%%)&+oHmb zQ>ZaPUiz^vxQb^~B zVW(LRhk~*71`=zS(<)rEuFuN6!A9oB!O){+7A-O=^(k~(i|ul@0!oyoVLENh-^e-= zMEZ+@{=xd>)-@-^9UA3E7bt6s_CQ;8xLABpe&y!odo~K}>L5^*uK$!H$y<b;{>F$JiBX=PZXbNbWp^mc)B{1&3c1XG(*( zZ*?yO&ea6)@2skuia(X=*22P`=JdP67EQp13+HSLkTL0Fo zu@w(YbEl5z&{~x=F<_2KsclN&lsvHyw8^2%S8TpVCMbP+d++*Sd=ms|`3lY2#nu>uc|JcmpI%PAZVd-h`RT zLQn+T#PvLMR?L)g_ZEk6X5KwhwJ7ZVhl&ofVS6aiLZ(ix4yJ^^=JB=NU$wKv0WKRJvi(f6Q zVl=&>+n)9UMbHk~paP8o4>MUD5E{EMs^ppBohqL^L9JDTKG0D>!=P|ZDL+`Scf_odmeG2<=rQ>PT-funad}d3XNYPG0 z!9KFrtST}nvkU@i4u*g$>11##6Gbu(XSq3TSM9EG%_|6Q0dwt-g5ETD*u`pdJRXLh zP=lZ|e}}Y6-@Fuj=Szj2?Putrn2k>9(*J zQdyX<&uxv=ewW4F7fWJ~l%W(OCvivIj3lFupZqLw>=+3@A*Ryux8)ErI+iS5zJ9GW z(HhkfkoiO$156XPjLy4}`_W$DBgt1BFg!W>*R#TAg~EoN)dC735DOS7Bid3-i`<~@ zhT}*}h>kanR;EwT=F&9H2a(G$^`&V-EG-_k{TT7=f`8YQ=oCVgvAy@Rn>xCkYds+u3gZi$2*V%s`ut_3u!n#R#xVOqqRn}{(L(BGgrm~lB3O)S2} zty~e2*l~yqn(S#7q%m|!V?-N%S5e zV>g`R2O{WtLS!Vp9OZLP%D)P5r43NLdy96TDgcTsbcXgbp-Hj0@Hy=%o2q#)s(Xyv z(-}zabe9#}ufYtM9p*aavRf)4AcdI~=Z6>%w`AiOq2bGLOC}yICSRughZg65eYS=* zx_wF_lKQk6VGu|Z?6X;`wwzgoC2rPd3<6>`z}!;$mIN9lc9B__&ywgk{Rby9A{cTV z%c*Y77@%5ExJ7#3#VYRj=dG-oI+RdBX3V{`cyaUIxVcCf-=Np1g3!d;jZ8qeexd2B z0VSHPoxZuxhW-_q&9?uHawa(bSb>+aCN2u-H$5m=fAuO)yhAM4j@2|N zw|$1O`f|8h%O)=NhLVtSN&OltD>&SR8R)j^+%q9w!Cv1SDG zP)aWLB3|cs`-9tVK*OH)N3%6gxcptfV+4A3!C2(OtOF%~njsjKR}r5|(9$N)o^zw+ zugh<_$VkF0GgonUy)6#HJy`FU6gSmm(2iPC64{t`HtAeNl$LlmMGGwf-F?BoACP8% zWMQdKm>0@!^f=>B!%Is@%y<{jO%;$FBvnYNI>4zKS<8Xq>(F#^wPt(kY;b_#s^HT$ z`;`-9s`K=!)b<&#NKk$yeB6WFj!hK_%7!cvy4#SqcUlf(yBC*jXRAjk46Q~D$?t(m z0umm?DXa1`xAdDB#H{!WxU$)fS*y~Iq;e(}5*~&t8$JNH`DFsW+5Yna(B$xL>Q?=7MbB!Qzv60nTQ7#3b7rWhtcm|XH3n7xg-D*hYuZrioaXv%Qg z7|Mdl^C_r^1;-=& zf>UQg{dD;3^9BL;W42VtUj|7DaqdomyUNqwuj11BI~}&@>RL~oj|3+GB?Hr?PfMcA7@RW^oD3kqSIxE=W-A^^iT9+k=jIs<25tsGj*1Bj%PYJv zx~6}$H+s zssP)w1}LEZVpCozR!B)vZ+4-Ag`KC?(Y1apw(=Q!r=FaX@MD=2JP5CV60M#}vl3$b zI@vJPC!ge|zh+jQN(kk^is4H;wO+<7NhCYlb9VF0l{84o=>8H@l7T)k454!qd&`@C zSY*Ck3kfbS4V6+SiACt!fC{3yGFM} zMe&>2YC5f`0)uSkkiXfzljd&r11lz)?%@egO1UL#VP=}s(Avf0x5#mt!GZ`S-Lw!U zON#RC#f?Mvt)uMm7Xr`NxTNJg8H3x%Yoh-C5mwi=1v|n-GV_zgpQHt>%kp5j#Zn(p z@qm0cgjv+eAdcjBNaRQkFJNiYUK zw!Y8}lChX}s-X}YdDp<#;WR(Mh}6xlNrt_XT7?27<30RRJ(EOsgZ6%c>T@XSYXkoI zE#&!WQ7rrc1j2=8XHtkDcUdB}1Bb8+fK|a${KJTz3==tk(6s2#E2GyrfDPfVj+B-i zJ?ao&@o9EK1pyQs=Uu2TEx;%i`RT(+)gjBt$ltpSU8Hfv-vb^|)R7#kSd>l`sN_&L zQ1{Gq^~{N?CK;KVM;j?#5fdfF8KES&5Dusw(O z+?W+n@E$RIzfL%q|MEaom@VVkD~q{VP)f*{F8UgSDTe8+fP4O5QtC>LMp`-nC_g`i zeocTq%BuesEb_oOaS59?Qvk$8Yk6fp&L=!OWr`?BMH zEtWxfd$lwT;pV!xMm8B2^bE~NSDKYR!ont`lpLv!n_Gh>`uRZj`j|7 zV=bjJLzk2Q2iSV=3`{dTCKS|dsac{-*JKq(|EZoOnCwbNyZ7IO9->G_^Nbs(;O}NDvd}z&!Iufx6&pQYQoWe2vekdH#>U+;6d`Tf6(c z8{qk2FK@E@`P|35j4C7s({Bkka;%*ZUYr?mW4%@z%$?1mjEpXAw9+;;`r2i^dYJfvFBv zMqEYyX>k5FI4D0~8<<1*j~jy|Q6vJSEqs(w{`6CM#lMaj#QYdA3_%-7f-8QS9HO=m zubmsYI`FR*rhc98Wd@@&@B$k@3De0l4W!&9Y}LE0`afh;#|Y(4i1?!{QvX}EqhaRv z|2HuFSw%8&t9heDUrw}Gh!Ybv4va>otIGedRcQ05tNIOisi2s)tf>eqpZz>v$iVr$ zYWA*#URS&b@s)|Mf)RIM?N{xTJ(FLWV^${$1ZXW@6O?{HQUQ$8qy_(L>Fs8Spiu7_ z16QX)Pz==dNd6yLqR_&`jl={kEuw@3KH>&!!08)0JjcKx*K{*%G)K0*&j?ZLB$%TI zb!eJ;m=AbcX^Yx}S|y2MSb6pBk4I*II)@cqvN-qyl|esjYBTGf(4EL8t@Q>EI361)J&Q+NwB&2rn5= z0}R8Xm~~M4cPAyw!<#%#Rgw~P0xcR_bdZA{0=u5S$U}FlqQ|ew4$ZTcxGz=mD`(S4 zv1qEDDH3(4@H+s0t1a~kJhJjiyoneR1WBGQ)ZId3PEm%QR9Pad4e6UOv7>g8?`*6& zMza=HB1cgW{b)KZyZ0Vg3RU*|4;x^}2W{f(4`Qe@I8s8n7NxxU5@uR7?>NF}wRkUU zfJWK^YHf4m;TeR3HMK z3i-1KV*udm`0NI+De-)ElleZb$G?9~p(>XH5-j@GLBX-qQ*y8gZDEY9(Jw0lvs z`0Zc_gx%2ZZfKex3%{nwME3!%fPp6w*mjlgc=aYSBCbCeyklLJY$=w@zqK26WGhDb zuh=%X*`BianiIRC6Koq2AddC>ZHPSUwz#p|`lF^8nt9g(3$-Ef9+e7_WKCn8mVf@J zwS<5u`Fko;NC*=9g?4qSY{JlY>mL|Ng;YD~W2MKEM^T11Pr^`oH1WM+j8S*s(@x(0 zJ#OW9Z_c;GX=ktDMQSoF5JD#WZ+WimiHP|ZhXnqIHEQWVXbpC8ApsW!Qr})ONs(v_ zbPG@W4tq%9-#gr3ja=W=v9g0g+-~a_ zydm?d&1w%16r1T$DH5LWAP59lOSVN$V=Ttb*GY;!&#l_?IWd=;srgvjwP++PS@Dyq zIWyxw!jNk+zs33M3`B@_HV>tz7-JudcN{aCXmyKxMJ)<0+Qo=nL=q4RM-xZ}LrE~? z&DS=4i##=J9|}3aXnHuaYA42oWvZ+>z#%q~dDm5n@y}18Wtj0zK!F*a2bUy1K2MbV zov-LwVN$-QRLuu2C;GVSdg9kBYbo^rk!UcIMM&e{`#iNjnM`Qnf@aQ?7d2#t^2e6r z`zEmjZjSW--sydEpKwwW%W>gJc}W(T9ts-eW0c-C-14I;Xn#idgZPrNRkFC_G43ToG)KCX!6+d`2FMl#`(`!>;+>9H|9G+89Q;96Uy z@9I=dZ$xNal2qphsp4kXQ_3K>zMB{KQv^tQ{xk_$wnaalc~HxD2Q=lkUR`$b1@t(< z9Kvve4G-w@1Qoc^STEilkFBL$9i{2)Z5rXBuu28%U^<&i-dPmmBXsv>XZAoFaG?IE zEWgB6nt83qWymbksW1-~?0JvnuKV7dD!-r5qJhkaSK>guXHPjz-75~Y3hYp+a?@o# zwmpFe^H-MhmdjuTuS@z*LYCofrYYb|>76PiAxDCpn zRwE;9+g>B3Ch(IVEQknXk!<@IR&n2sI&Dw+#9ff`o;1`X#;+zH#yaHDG3 zmXkv;VMLH}@?fwwnMOkfT=N&yIsD+@w>o|j71R^K7yWk5lU&_tcbT@__#ZVz>IQFI z0oj{=8I3ltZ!1Vc09{1BD#8VPLC3_88;h>{inv)^E%`qBp|4n1h%zFV!5hhi6$WtG zN;q_RTXNHRhH*nP@XG2?!?;7`<{WY<65fjn$dnWMFu{~$`-_M0mDOu*raK+OLTR++ zDOgNdUZGe&|BLb`L72InrMNmq@|gAru;(NAnQvyk>9a|v397VI-c+nCq>jH>p9>+f zu;8G(>CK+k6eBda19jVOa=6+wg+{CD&6H8GWvI<%yziLh)TA{U%0D5%e9LRzwi&yj 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 KjI7;%d;bEEQ!V8H delta 19425 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 A2LJ#7 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 33f3fdacd..d95f50678 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -23972,15 +23972,15 @@ Word.Document#activeWindow:member: const pagesFirstParagraphText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const paragraphs = page.getRange().paragraphs; - paragraphs.load('items/length'); + paragraphs.load("items/length"); pagesNumberOfParagraphs.push(paragraphs); const firstParagraph = paragraphs.getFirst(); - firstParagraph.load('text'); + firstParagraph.load("text"); pagesFirstParagraphText.push(firstParagraph); } @@ -25975,11 +25975,11 @@ Word.Page:class: const pagesText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const range = page.getRange(); - range.load('text'); + range.load("text"); pagesText.push(range); } @@ -26008,11 +26008,11 @@ Word.Page#getRange:member(1): const pagesText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const range = page.getRange(); - range.load('text'); + range.load("text"); pagesText.push(range); } @@ -26047,11 +26047,11 @@ Word.Page#index:member: const pagesText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const range = page.getRange(); - range.load('text'); + range.load("text"); pagesText.push(range); } @@ -26080,11 +26080,11 @@ Word.PageCollection:class: const pagesText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const range = page.getRange(); - range.load('text'); + range.load("text"); pagesText.push(range); } @@ -26125,15 +26125,15 @@ Word.Pane:class: const pagesFirstParagraphText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const paragraphs = page.getRange().paragraphs; - paragraphs.load('items/length'); + paragraphs.load("items/length"); pagesNumberOfParagraphs.push(paragraphs); const firstParagraph = paragraphs.getFirst(); - firstParagraph.load('text'); + firstParagraph.load("text"); pagesFirstParagraphText.push(firstParagraph); } @@ -26175,15 +26175,15 @@ Word.Pane#pages:member: const pagesFirstParagraphText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const paragraphs = page.getRange().paragraphs; - paragraphs.load('items/length'); + paragraphs.load("items/length"); pagesNumberOfParagraphs.push(paragraphs); const firstParagraph = paragraphs.getFirst(); - firstParagraph.load('text'); + firstParagraph.load("text"); pagesFirstParagraphText.push(firstParagraph); } @@ -26226,7 +26226,7 @@ Word.Pane#pagesEnclosingViewport:member: const pagesIndexes = []; for (let i = 0; i < pageCount; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); } @@ -26236,6 +26236,24 @@ Word.Pane#pagesEnclosingViewport:member: console.log(`Page index: ${pagesIndexes[i].index}`); } }); +Word.PaneCollection:class: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets all the panes in the active document window. + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load("panes/items/length"); + + await context.sync(); + + const panes: Word.PaneCollection = activeWindow.panes; + console.log(`Number of panes in the current document window: ${panes.items.length}`); + }); Word.Paragraph:class: - >- // Link to full sample: @@ -28985,15 +29003,15 @@ Word.Window:class: const pagesFirstParagraphText = []; for (let i = 0; i < pages.items.length; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); const paragraphs = page.getRange().paragraphs; - paragraphs.load('items/length'); + paragraphs.load("items/length"); pagesNumberOfParagraphs.push(paragraphs); const firstParagraph = paragraphs.getFirst(); - firstParagraph.load('text'); + firstParagraph.load("text"); pagesFirstParagraphText.push(firstParagraph); } @@ -29036,7 +29054,7 @@ Word.Window#activePane:member: const pagesIndexes = []; for (let i = 0; i < pageCount; i++) { const page = pages.items[i]; - page.load('index'); + page.load("index"); pagesIndexes.push(page); } @@ -29046,3 +29064,18 @@ Word.Window#activePane:member: console.log(`Page index: ${pagesIndexes[i].index}`); } }); +Word.WindowCollection:class: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the document windows. + const windows: Word.WindowCollection = context.document.windows; + windows.load("windows/items/length"); + + await context.sync(); + + console.log(`Number of windows for this document: ${windows.items.length}`); + }); From db645c7d7098eb38ca468b7a289772c43911365e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 10 Oct 2025 07:41:27 -0700 Subject: [PATCH 151/156] [Word] (Windows, panes) Map to properties (#1004) --- snippet-extractor-metadata/word.xlsx | Bin 28768 -> 28813 bytes snippet-extractor-output/snippets.yaml | 33 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 129c0726370e26a4531d7a84fdeb4900947e4371..d6ce531b43aa2f2996e5f69b8f255e20493024d5 100644 GIT binary patch delta 19908 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ƼTBYx)2FW`so=DqI_ba)d8bsSgqc-&@Hv5h1SILK$9rDAi$%MP)wv#x__(fo+C>rhOHM>qIC2&xNzn?5OdOgL~JP~L^$xaAXeQkBG z7rkbr(ao*A1teAM7Q_Dy-_xdF>{r;|HH&__N{$9n2YPw(Unn2;Iro zay1D{0V?q%jHoo1=0;3fQTJm*I)f^LG^s+mL@ek0Du2mSjm}ccjL~eN_Y%KRFE=3`uz1!|13JOJEr(5(w4D8wA*h-ECV-n3d$A91WK9k)y{7r)NC%7&3Q znG(A9sGzmyteB!BZ$E=D>My@U(f)z%#MjF9GPQ84v}`f2EvPU^>tfdJXk=nYC17~P z`qi`nko^6}DO^vt=6;GHyDHzU+%M_|fFQC5VG9QTDB)&RGazG$+;jNbP?o1x`DVU{ zn2eu`)CW3_8s+I4f@X=|N+5|;g@ z_7+m=Bd1e5snL6^w$Z~+{#fTdcDtQ&GQL=(R}^$n*ctijnzA_CIs^@UUfD5JM+^8u zjt)!gO#HL#P)(>5&n7MjYRS2l#>j=`5c-TvS4PWK5h)?hwY^4yi3kM?Ce`|cEg1d8 zUnkc!Rh|6cRF(R*Ka)IAZyZfGKgK`ZIrNOlbxw?U;!GrlW3@ZhdzUnM#(v7?W+32B zSg-TSMX5t8#&`|I##n3tiNc+XYZ;GJq0EV|H%Y1;y@*kcfnX)@;m%+GO1y~Ll!8e& zw>U;;aC5f8K$zLLFb1vURQr#D&c-Cvk}T@D=8cr(O^YI481LMSz}e1gymj{v%LiEg z_>YH!8R<($h1LsvN^ytfoNIzjVJ?^#T@^D+-dR5bD^ckP#f^vW<>lWzYm!#H#2)^f zdon_oskOY>K0K~Ru_DqRRDHYk*xXN2^#Wg4F?EyB1auE14sE0@uri&A5$W+|Q{R%f zm>q);0kwc{1W(P8&(A;Q20J%PZPQt~j7e92U9p=>olux-v|m3^T9!Z2Zt-MyYPF6k z6?ip$)Z{);%E8c^@nckfQbFr0P~16Wb-U7!xi#UfM_nct!2CXk?<*V)6XZ^_%VFdQ z#XF|H0+7q})k&+Sq#AArBvD z85tusro+UWepKAh!=lK8g~D1;O6eEm;7Ac)F$P2CH3lQJAtM>MxSx^XMQX%G9DU|7 zuG1joLKH+O1B;QYk~-$3#$KlGHAW-gu(3d$dw2iq!6g5w~4eh#5Ek{RJ&`N#wis8LVs#f*5@G~_y=^Ar6 zH!96I*+R$gHX5bx94f4x+_yw^gJ19D74fnwqi!V~=XJ}GWo6xf=+AO&tx#82IMI|{ zk*K;iSvKQt`>|i#Bi=QWuDku-_Avas%r>%sld6JKuZ3a7&j8@0%gkem`Eo)25BtHH zdeT=PVwk`r5$TIg)i8U0FkoarxgM`FGCh_g-2CD`p~7zG zcYZSFS89zv?P^`$^WLH9#Z>k!lE;Y(W!_@!6aa||S#IdPv^jK;(F}d^K*z@Hx-k|M zdu{s2^p-0^2s&I)(%t}ZThyAlV^rw8^fZ1^6-M<~7(Uy#Olk z4hmtObU_FR*wmn*n%mI^^)U**nG1d%>SY<$9jQbG{bE|c@}k4D zW_7as;$Vuj=RAB0E&e@!V{PLmH#9r$$TuUkzL)rjpvD&8>yAdF3uQBr0sW4LiBkR3 zmr^bZhTTzDd}EgAWh9|r(80cMc{AD{^1X2w&^)I4r@z&)j+SKqlQ`RSGbZ7Mfj~HA z*mazxJ3aev=_oLW^%r;hZRWTLcXjX)uFoC8{{KY%cUBmV%7dHz|LNWDxFSx&Lm8rD zgOj)6!&P_)fgNzu9&+set}_S-6iE7C-1ocS7$@eb41qktd3y@~I}o@W&ub7qdt8I( VJ#Y!`_?LIaNqQm3qTK!|`VW)+Y2E+; delta 19924 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d95f50678..bd882ccb4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -24337,6 +24337,21 @@ Word.Document#settings:member: } } }); +Word.Document#windows:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets the document windows. + const windows: Word.WindowCollection = context.document.windows; + windows.load("windows/items/length"); + + await context.sync(); + + console.log(`Number of windows for this document: ${windows.items.length}`); + }); Word.DocumentCompareOptions:interface: - >- // Link to full sample: @@ -29064,6 +29079,24 @@ Word.Window#activePane:member: console.log(`Page index: ${pagesIndexes[i].index}`); } }); +Word.Window#panes:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/get-pages.yaml + + + await Word.run(async (context) => { + // Gets all the panes in the active document window. + + // Get the active window. + const activeWindow: Word.Window = context.document.activeWindow; + activeWindow.load("panes/items/length"); + + await context.sync(); + + const panes: Word.PaneCollection = activeWindow.panes; + console.log(`Number of panes in the current document window: ${panes.items.length}`); + }); Word.WindowCollection:class: - >- // Link to full sample: From cbf886844c0bab369929ec720449ae537593b375 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 16 Oct 2025 09:34:00 -0700 Subject: [PATCH 152/156] [PowerPoint] Fix typo (#1006) --- playlists-prod/powerpoint.yaml | 2 +- playlists/powerpoint.yaml | 2 +- samples/powerpoint/document/create-presentation.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 40ca88e0d..910edb0af 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -37,7 +37,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/document/create-presentation.yaml group: Document api_set: - PowerPoint: '1.1' + PowerPointApi: '1.1' - id: powerpoint-hyperlinks-manage-hyperlinks name: Get hyperlinks fileName: manage-hyperlinks.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 6d8cc0135..810bc5be0 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -37,7 +37,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/document/create-presentation.yaml group: Document api_set: - PowerPoint: '1.1' + PowerPointApi: '1.1' - id: powerpoint-hyperlinks-manage-hyperlinks name: Get hyperlinks fileName: manage-hyperlinks.yaml diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index debc2bff0..a2c0b605f 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -4,7 +4,7 @@ description: Creates a new, empty presentation and creates a new presentation by author: OfficeDev host: POWERPOINT api_set: - PowerPoint: '1.1' + PowerPointApi: '1.1' script: content: |- document.getElementById("create-new-blank-presentation").addEventListener("click", () => tryCatch(createBlankPresentation)); From 79ddaa20eb0d3bf26befc2008ad2a989fae5d66e Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:14:52 -0700 Subject: [PATCH 153/156] [Outlook] (legacy tokens) Update section and snippet names (#1005) --- config/build.ts | 14 +++- playlists-prod/outlook.yaml | 70 +++++++++++-------- playlists/outlook.yaml | 70 +++++++++++-------- .../get-icaluid-as-attendee.yaml | 4 +- .../get-icaluid-as-organizer.yaml | 4 +- .../ids-and-urls.yaml | 4 +- .../make-ews-request-async.yaml | 6 +- ...-message-using-make-ews-request-async.yaml | 4 +- .../user-callback-token.yaml | 4 +- .../user-identity-token.yaml | 4 +- snippet-extractor-output/snippets.yaml | 16 ++--- view-prod/outlook.json | 14 ++-- view/outlook.json | 14 ++-- 13 files changed, 127 insertions(+), 101 deletions(-) rename samples/outlook/{85-tokens-and-service-calls => 85-tokens-and-service-calls-for-exchange-on-premises-environments}/get-icaluid-as-attendee.yaml (93%) rename samples/outlook/{85-tokens-and-service-calls => 85-tokens-and-service-calls-for-exchange-on-premises-environments}/get-icaluid-as-organizer.yaml (93%) rename samples/outlook/{85-tokens-and-service-calls => 85-tokens-and-service-calls-for-exchange-on-premises-environments}/ids-and-urls.yaml (92%) rename samples/outlook/{85-tokens-and-service-calls => 85-tokens-and-service-calls-for-exchange-on-premises-environments}/make-ews-request-async.yaml (92%) rename samples/outlook/{85-tokens-and-service-calls => 85-tokens-and-service-calls-for-exchange-on-premises-environments}/send-message-using-make-ews-request-async.yaml (94%) rename samples/outlook/{85-tokens-and-service-calls => 85-tokens-and-service-calls-for-exchange-on-premises-environments}/user-callback-token.yaml (94%) rename samples/outlook/{85-tokens-and-service-calls => 85-tokens-and-service-calls-for-exchange-on-premises-environments}/user-identity-token.yaml (92%) diff --git a/config/build.ts b/config/build.ts index 5d718ccc7..fcd9e231c 100644 --- a/config/build.ts +++ b/config/build.ts @@ -134,11 +134,12 @@ async function processSnippets(processedSnippets: Dictionary dictionary[item] || item); return parts.join(' '); } diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index cdb4674f5..2b064ff8c 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -467,76 +467,84 @@ api_set: Mailbox: '1.5' - id: outlook-tokens-and-service-calls-ids-and-urls - name: Endpoint URLs and item IDs + name: Endpoint URLs and item IDs in Exchange on-premises environments fileName: ids-and-urls.yaml description: >- - Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item - IDs, and converts item IDs for different protocols. + Retrieves the Exchange Web Services (EWS) endpoint URL and item IDs and + converts item IDs for different protocols. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.5' - id: outlook-tokens-and-service-calls-user-identity-token - name: Get a user identity token + name: Get a user identity token in Exchange on-premises environments fileName: user-identity-token.yaml description: >- - Gets a user identity token to use for authentication flows in an Exchange + Gets a user identity token for authentication flows in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-user-callback-token - name: Get a callback token + name: Get a callback token in Exchange on-premises environments fileName: user-callback-token.yaml description: >- Gets a callback token to call Outlook services from an add-in's backend - service. + service in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-make-ews-request-async - name: Get a message using Exchange Web Services (EWS) + name: >- + Get a message using Exchange Web Services (EWS) in Exchange on-premises + environments fileName: make-ews-request-async.yaml - description: Gets a message using EWS without any back-end code. + description: >- + Uses EWS in an Exchange on-premises environment to get a message without any + backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async - name: Send a message using Exchange Web Services (EWS) + name: >- + Send a message using Exchange Web Services (EWS) in Exchange on-premises + environments fileName: send-message-using-make-ews-request-async.yaml - description: Sends a message using EWS without any back-end code. + description: >- + Uses EWS in an Exchange on-premises environment to send a message without + any backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-get-icaluid-as-organizer - name: Get an appointment's iCalUId as the organizer + name: Get an appointment's iCalUId as the organizer (Exchange on-premises only) fileName: get-icaluid-as-organizer.yaml description: >- - Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where - the user is the organizer. + Uses Exchange Web Services (EWS) in an Exchange on-premises environment to + get an appointment's iCalUId value where the user is the organizer. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.3' - id: outlook-tokens-and-service-calls-get-icaluid-as-attendee - name: Get an appointment's iCalUId as an attendee + name: Get an appointment's iCalUId as an attendee (Exchange on-premises only) fileName: get-icaluid-as-attendee.yaml description: >- - Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where - the user is an attendee. + Uses Exchange Web Services (EWS) in an Exchange on-premises environment to + get an appointment's iCalUId value where the user is an attendee. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-other-item-apis-get-subject-read diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 66855bc23..085249207 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -467,76 +467,84 @@ api_set: Mailbox: '1.5' - id: outlook-tokens-and-service-calls-ids-and-urls - name: Endpoint URLs and item IDs + name: Endpoint URLs and item IDs in Exchange on-premises environments fileName: ids-and-urls.yaml description: >- - Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item - IDs, and converts item IDs for different protocols. + Retrieves the Exchange Web Services (EWS) endpoint URL and item IDs and + converts item IDs for different protocols. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.5' - id: outlook-tokens-and-service-calls-user-identity-token - name: Get a user identity token + name: Get a user identity token in Exchange on-premises environments fileName: user-identity-token.yaml description: >- - Gets a user identity token to use for authentication flows in an Exchange + Gets a user identity token for authentication flows in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-user-callback-token - name: Get a callback token + name: Get a callback token in Exchange on-premises environments fileName: user-callback-token.yaml description: >- Gets a callback token to call Outlook services from an add-in's backend - service. + service in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-make-ews-request-async - name: Get a message using Exchange Web Services (EWS) + name: >- + Get a message using Exchange Web Services (EWS) in Exchange on-premises + environments fileName: make-ews-request-async.yaml - description: Gets a message using EWS without any back-end code. + description: >- + Uses EWS in an Exchange on-premises environment to get a message without any + backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async - name: Send a message using Exchange Web Services (EWS) + name: >- + Send a message using Exchange Web Services (EWS) in Exchange on-premises + environments fileName: send-message-using-make-ews-request-async.yaml - description: Sends a message using EWS without any back-end code. + description: >- + Uses EWS in an Exchange on-premises environment to send a message without + any backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-get-icaluid-as-organizer - name: Get an appointment's iCalUId as the organizer + name: Get an appointment's iCalUId as the organizer (Exchange on-premises only) fileName: get-icaluid-as-organizer.yaml description: >- - Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where - the user is the organizer. + Uses Exchange Web Services (EWS) in an Exchange on-premises environment to + get an appointment's iCalUId value where the user is the organizer. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.3' - id: outlook-tokens-and-service-calls-get-icaluid-as-attendee - name: Get an appointment's iCalUId as an attendee + name: Get an appointment's iCalUId as an attendee (Exchange on-premises only) fileName: get-icaluid-as-attendee.yaml description: >- - Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where - the user is an attendee. + Uses Exchange Web Services (EWS) in an Exchange on-premises environment to + get an appointment's iCalUId value where the user is an attendee. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml - group: Tokens And Service Calls + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml + group: Tokens And Service Calls For Exchange On-Premises Environments api_set: Mailbox: '1.1' - id: outlook-other-item-apis-get-subject-read diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml similarity index 93% rename from samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml rename to samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml index 07a5a11d6..00fc8499a 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml @@ -1,7 +1,7 @@ order: 9 id: outlook-tokens-and-service-calls-get-icaluid-as-attendee -name: Get an appointment's iCalUId as an attendee -description: Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where the user is an attendee. +name: Get an appointment's iCalUId as an attendee (Exchange on-premises only) +description: Uses Exchange Web Services (EWS) in an Exchange on-premises environment to get an appointment's iCalUId value where the user is an attendee. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml similarity index 93% rename from samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml rename to samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml index 57259939d..c782dc0a6 100644 --- a/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml @@ -1,7 +1,7 @@ order: 8 id: outlook-tokens-and-service-calls-get-icaluid-as-organizer -name: Get an appointment's iCalUId as the organizer -description: Uses Exchange Web Services (EWS) to get an appointment's iCalUId value where the user is the organizer. +name: Get an appointment's iCalUId as the organizer (Exchange on-premises only) +description: Uses Exchange Web Services (EWS) in an Exchange on-premises environment to get an appointment's iCalUId value where the user is the organizer. host: OUTLOOK api_set: Mailbox: '1.3' diff --git a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml similarity index 92% rename from samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml rename to samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml index 90a24f5f7..e31656ee1 100644 --- a/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml @@ -1,7 +1,7 @@ order: 1 id: outlook-tokens-and-service-calls-ids-and-urls -name: Endpoint URLs and item IDs -description: Retrieves and displays the Exchange Web Services (EWS) endpoint URL and item IDs, and converts item IDs for different protocols. +name: Endpoint URLs and item IDs in Exchange on-premises environments +description: Retrieves the Exchange Web Services (EWS) endpoint URL and item IDs and converts item IDs for different protocols. host: OUTLOOK api_set: Mailbox: '1.5' diff --git a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml similarity index 92% rename from samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml rename to samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml index a4fd49450..c15444a51 100644 --- a/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml @@ -1,7 +1,7 @@ order: 6 id: outlook-tokens-and-service-calls-make-ews-request-async -name: Get a message using Exchange Web Services (EWS) -description: Gets a message using EWS without any back-end code. +name: Get a message using Exchange Web Services (EWS) in Exchange on-premises environments +description: Uses EWS in an Exchange on-premises environment to get a message without any backend code. host: OUTLOOK api_set: Mailbox: '1.1' @@ -33,7 +33,7 @@ script: template: content: |-
      -

      This sample shows how to get a message using EWS, without any back-end code.

      +

      This sample shows how to get a message using EWS, without any backend code.

      Important: This API is only supported in Exchange on-premises environments. In Exchange Online environments, use nested app authentication (NAA) to get an access token. Then, use Microsoft Graph to get the message. diff --git a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml similarity index 94% rename from samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml rename to samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml index 90feb4ccb..c2cd39c56 100644 --- a/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml @@ -1,7 +1,7 @@ order: 7 id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async -name: Send a message using Exchange Web Services (EWS) -description: Sends a message using EWS without any back-end code. +name: Send a message using Exchange Web Services (EWS) in Exchange on-premises environments +description: Uses EWS in an Exchange on-premises environment to send a message without any backend code. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml similarity index 94% rename from samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml rename to samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml index 986a3bcbc..82cf1e8db 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml @@ -1,7 +1,7 @@ order: 4 id: outlook-tokens-and-service-calls-user-callback-token -name: Get a callback token -description: Gets a callback token to call Outlook services from an add-in's backend service. +name: Get a callback token in Exchange on-premises environments +description: Gets a callback token to call Outlook services from an add-in's backend service in an Exchange on-premises environment. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml similarity index 92% rename from samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml rename to samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml index b37f4f878..07e604373 100644 --- a/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml +++ b/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml @@ -1,7 +1,7 @@ order: 3 id: outlook-tokens-and-service-calls-user-identity-token -name: Get a user identity token -description: Gets a user identity token to use for authentication flows in an Exchange on-premises environment. +name: Get a user identity token in Exchange on-premises environments +description: Gets a user identity token for authentication flows in an Exchange on-premises environment. host: OUTLOOK api_set: Mailbox: '1.1' diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index bd882ccb4..ca7f8c873 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11844,7 +11844,7 @@ Office.Location#setAsync:member(1): Office.Mailbox#convertToEwsId:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml // Get the EWS URL and EWS item ID. @@ -11873,7 +11873,7 @@ Office.Mailbox#convertToEwsId:member(1): Office.Mailbox#convertToRestId:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml // Get the EWS URL and EWS item ID. @@ -12095,7 +12095,7 @@ Office.Mailbox#displayNewMessageFormAsync:member(1): Office.Mailbox#ewsUrl:member: - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml // Get the EWS URL and EWS item ID. @@ -12124,7 +12124,7 @@ Office.Mailbox#ewsUrl:member: Office.Mailbox#getCallbackTokenAsync:member(2): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml Office.context.mailbox.getCallbackTokenAsync((result) => { @@ -12162,7 +12162,7 @@ Office.Mailbox#getSelectedItemsAsync:member(2): Office.Mailbox#getUserIdentityTokenAsync:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml Office.context.mailbox.getUserIdentityTokenAsync((result) => { @@ -12207,7 +12207,7 @@ Office.Mailbox#loadItemByIdAsync:member(1): Office.Mailbox#makeEwsRequestAsync:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml const ewsId = Office.context.mailbox.item.itemId; @@ -12240,7 +12240,7 @@ Office.Mailbox#makeEwsRequestAsync:member(1): }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml const request = '- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml // Get the EWS URL and EWS item ID. diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 9b861d008..f8825fcac 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -48,13 +48,13 @@ "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml", "outlook-events-drag-drop-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml", - "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", - "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", - "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", - "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml", + "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml", + "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml", + "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml", + "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml", diff --git a/view/outlook.json b/view/outlook.json index 7d57d08cb..3a5582021 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -48,13 +48,13 @@ "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-regex-matches/contextual.yaml", "outlook-events-drag-drop-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/80-events/drag-drop-item.yaml", - "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml", - "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml", - "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml", - "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml", + "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml", + "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml", + "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml", + "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/set-selected-data.yaml", From 0fa3b03c8dce60ab318f471363a65b0580df16bb Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 16 Oct 2025 13:34:35 -0700 Subject: [PATCH 154/156] [Word] (Window) Add snippet for close method (#1007) --- playlists-prod/word.yaml | 9 +++ playlists/word.yaml | 9 +++ .../close-document-window.yaml | 61 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 28813 -> 28975 bytes snippet-extractor-output/snippets.yaml | 39 +++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 120 insertions(+) create mode 100644 samples/word/99-preview-apis/close-document-window.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 644cc25a5..fb94dce48 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -580,6 +580,15 @@ group: Scenarios api_set: WordApi: '1.4' +- id: word-close-document-window + name: Close document window + fileName: close-document-window.yaml + description: Shows how to close document window. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/close-document-window.yaml + group: Preview APIs + api_set: + WordApi: '1.10' - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 8773282f5..db9076c31 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -580,6 +580,15 @@ group: Scenarios api_set: WordApi: '1.4' +- id: word-close-document-window + name: Close document window + fileName: close-document-window.yaml + description: Shows how to close document window. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/close-document-window.yaml + group: Preview APIs + api_set: + WordApi: '1.10' - id: word-insert-and-change-content-controls name: Content control basics fileName: insert-and-change-content-controls.yaml diff --git a/samples/word/99-preview-apis/close-document-window.yaml b/samples/word/99-preview-apis/close-document-window.yaml new file mode 100644 index 000000000..a32de186a --- /dev/null +++ b/samples/word/99-preview-apis/close-document-window.yaml @@ -0,0 +1,61 @@ +id: word-close-document-window +name: Close document window +description: Shows how to close document window. +host: WORD +api_set: + WordApi: '1.10' +script: + content: | + document.getElementById("close-with-save-prompt").addEventListener("click", () => tryCatch(closeWithSavePrompt)); + + async function closeWithSavePrompt() { + await Word.run(async (context) => { + // Closes the document window, prompting to save if this is a new document. + const window: Word.Window = context.document.activeWindow; + const closeOptions: Word.WindowCloseOptions = { saveChanges: Word.SaveConfiguration.promptToSaveChanges }; + console.log("About to close the document window..."); + window.close(closeOptions); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +

      + This sample demonstrates how to close the document window. +
      +
      +

      Try it out

      + +
      + language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index d6ce531b43aa2f2996e5f69b8f255e20493024d5..781a1c0bd7750c91417125b4cb83389b8063ac58 100644 GIT binary patch delta 20059 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 Ai~s-t diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ca7f8c873..2dfd57dfa 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -27483,6 +27483,19 @@ Word.SaveBehavior:enum: context.document.save(Word.SaveBehavior.prompt); await context.sync(); }); +Word.SaveConfiguration:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/close-document-window.yaml + + + await Word.run(async (context) => { + // Closes the document window, prompting to save if this is a new document. + const window: Word.Window = context.document.activeWindow; + const closeOptions: Word.WindowCloseOptions = { saveChanges: Word.SaveConfiguration.promptToSaveChanges }; + console.log("About to close the document window..."); + window.close(closeOptions); + }); Word.Section#getFooter:member(2): - >- // Link to full sample: @@ -29038,6 +29051,19 @@ Word.Window:class: console.log("First paragraph's text:", pagesFirstParagraphText[i].text); } }); +Word.Window#close:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/close-document-window.yaml + + + await Word.run(async (context) => { + // Closes the document window, prompting to save if this is a new document. + const window: Word.Window = context.document.activeWindow; + const closeOptions: Word.WindowCloseOptions = { saveChanges: Word.SaveConfiguration.promptToSaveChanges }; + console.log("About to close the document window..."); + window.close(closeOptions); + }); Word.Window#activePane:member: - >- // Link to full sample: @@ -29097,6 +29123,19 @@ Word.Window#panes:member: const panes: Word.PaneCollection = activeWindow.panes; console.log(`Number of panes in the current document window: ${panes.items.length}`); }); +Word.WindowCloseOptions:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/close-document-window.yaml + + + await Word.run(async (context) => { + // Closes the document window, prompting to save if this is a new document. + const window: Word.Window = context.document.activeWindow; + const closeOptions: Word.WindowCloseOptions = { saveChanges: Word.SaveConfiguration.promptToSaveChanges }; + console.log("About to close the document window..."); + window.close(closeOptions); + }); Word.WindowCollection:class: - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index a6f3f7244..87a70604a 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -58,6 +58,7 @@ "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", "word-scenarios-correlated-objects-pattern": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/correlated-objects-pattern.yaml", + "word-close-document-window": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/close-document-window.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 1e2ed094d..9189eca77 100644 --- a/view/word.json +++ b/view/word.json @@ -58,6 +58,7 @@ "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml", "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", "word-scenarios-correlated-objects-pattern": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/correlated-objects-pattern.yaml", + "word-close-document-window": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/close-document-window.yaml", "word-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-and-change-content-controls.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml" } \ No newline at end of file From 505a8643bbc00cd841f78c404335beea313964e8 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 16 Oct 2025 15:01:05 -0700 Subject: [PATCH 155/156] [Word] (shapes) How to get text from text box (#1009) * [Word] (shapes) How to get text from text box * Remove setup section per review feedback --- .../50-document/manage-shapes-text-boxes.yaml | 63 ++++++++---------- snippet-extractor-metadata/word.xlsx | Bin 28975 -> 29026 bytes snippet-extractor-output/snippets.yaml | 56 +++++++++++++--- 3 files changed, 74 insertions(+), 45 deletions(-) diff --git a/samples/word/50-document/manage-shapes-text-boxes.yaml b/samples/word/50-document/manage-shapes-text-boxes.yaml index 6d8d0d900..024f6e6fe 100644 --- a/samples/word/50-document/manage-shapes-text-boxes.yaml +++ b/samples/word/50-document/manage-shapes-text-boxes.yaml @@ -11,6 +11,9 @@ script: document .getElementById("insert-text-box-into-current-selection") .addEventListener("click", () => tryCatch(insertTextBoxIntoCurrentSelection)); + document + .getElementById("get-text-from-text-box-in-main-doc") + .addEventListener("click", () => tryCatch(getTextFromTextBoxInMainDoc)); document.getElementById("get-text-boxes-in-main-doc").addEventListener("click", () => tryCatch(getTextBoxesInMainDoc)); document.getElementById("set-text-box-properties").addEventListener("click", () => tryCatch(setTextBoxProperties)); document @@ -27,7 +30,6 @@ script: .getElementById("insert-text-box-in-header-at-first-paragraph") .addEventListener("click", () => tryCatch(insertTextBoxInHeaderAtFirstParagraph)); document.getElementById("get-text-box-in-header").addEventListener("click", () => tryCatch(getTextBoxInHeader)); - document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertTextBoxIntoCurrentSelection() { await Word.run(async (context) => { @@ -47,6 +49,21 @@ script: }); } + async function getTextFromTextBoxInMainDoc() { + await Word.run(async (context) => { + // Gets text from first text box in main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("body/text"); + await context.sync(); + + console.log( + shape.isNullObject + ? "No shapes with text boxes found in main document." + : `Text in first text box: ${shape.body.text}`, + ); + }); + } + async function getTextBoxesInMainDoc() { await Word.run(async (context) => { // Gets text boxes in main document. @@ -55,7 +72,7 @@ script: await context.sync(); if (shapes.items.length > 0) { - shapes.items.forEach(function(shape, index) { + shapes.items.forEach(function (shape, index) { if (shape.type === Word.ShapeType.textBox) { console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); } @@ -141,10 +158,7 @@ script: async function deleteFirstTextBox() { await Word.run(async (context) => { // Deletes the first text box. - context.document.body.shapes - .getByTypes([Word.ShapeType.textBox]) - .getFirst() - .delete(); + context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirst().delete(); await context.sync(); console.log("The first text box in document was deleted."); @@ -174,13 +188,14 @@ script: async function getTextBoxInHeader() { await Word.run(async (context) => { // Gets text boxes in header. - const shapes: Word.ShapeCollection = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary) - .shapes; + const shapes: Word.ShapeCollection = context.document.sections + .getFirst() + .getHeader(Word.HeaderFooterType.primary).shapes; shapes.load(); await context.sync(); if (shapes.items.length > 0) { - shapes.items.forEach(function(shape, index) { + shapes.items.forEach(function (shape, index) { if (shape.type === Word.ShapeType.textBox) { console.log(`Shape ${index} in header has a text box. Properties:`, shape); } @@ -191,27 +206,10 @@ script: }); } - async function setup() { - await Word.run(async (context) => { - const body: Word.Body = context.document.body; - body.clear(); - body.insertParagraph( - "Do you want to create a solution that extends the functionality of Word? You can use the Office Add-ins platform to extend Word clients running on the web, on a Windows desktop, or on a Mac.", - "Start" - ); - body.paragraphs - .getLast() - .insertText( - "Use add-in commands to extend the Word UI and launch task panes that run JavaScript that interacts with the content in a Word document. Any code that you can run in a browser can run in a Word add-in. Add-ins that interact with content in a Word document create requests to act on Word objects and synchronize object state.", - "Replace" - ); - }); - } - function getPictureBase64(): string { // Returns Base64-encoded image data for a sample picture. const pictureBase64 = - "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"; + "iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAABblBMVEX+7tEYMFlyg5v8zHXVgof///+hrL77qRnIWmBEWXq6MDgAF0/i1b//8dP+79QKJ1MAIFL8yWpugZz/+O/VzLwzTXR+jaP/z3PHzdjNaWvuxrLFT1n8znmMj5fFTFP25OHlsa2wqqJGW3z7pgCbqsH936oAJlWnssRzdoLTd1HTfINbY3a7tar90IxJVG0AH1ecmJH//90gN14AFU/nxInHVFL80YQAD03qv3LUrm7cwJLWjoLenpPRdXTQgoj15sz+57/7szr93KPbiWjUvZj95LnwzLmMX3L8wmz7rib8xnP8vVz91JT8ukvTz8i8vsORkJKvsLIAD1YwPViWnKZVYHbKuqHjwo3ur2/Pa2O+OTvHVETfj1tybm9qdYlsYlnkmmC0DSPirpvAq4bj5uuono7tu5vgpannnX3ksbSKg5bv0tTclJNFSlyZgpPqwsW4go2giWdbWV+3mmuWgpRcbolURmReS2embHkiRHBcZ6c8AAALcElEQVR4nO3di1cTVx4H8AyThmC484ghFzSxEDRhIRBIMEFQA1qoVhAqYBVd3UXcri1dd7fLdv3vdybJZF73zr2TufPyzPccew49hc6H331nZkylkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQJ6wj2hH1JLKNo9p/sPB3X8rRUau/f2f56kML2k/n5+XFDSjzPQ7l95+swCqkfzDy1hnwvsLT9FRCF1I7Fpwt5Xt6PfRmF1LgNaBAqZdyNOVGwV9AkVMq4HOshR3iCAJqFalONr1HYRQGtQsXYvrONmjKj7xae0QnVuaO0/OiOlv3lfqI/1G4jgShhnzkIfzA/SNgAUoR9d0I9g/9wfjtsAiHocWZ8fIckLA1ad/SFB0jg+AGxhgNi9FvpU7TwGVHIl+QdtR9GfaTBCOdlIlA18vIzPqZC8kCjZT+mQnI31HInpkKqRqpGDhtADFpInCuGaUe9hBghrY+Xo7+xQgnn6Xth9EuIFNIPpDDsy6cISvg1tVGkkB4Y+ZlCjU34lBrIx6GCitAyyOzQ8mA7+nvfXixCigV33xf9tYwWg3B+/ICnAsbrKFwY8nae0figwnsUq3M34aCXZ3KphPa12+2SWjYZ8v0Pa1Jx4ikRSv1ga2Y8MIzH6aElAqFlRn/vQApRuB32FXoNSRiTad0hgkxI5E8piLlOStgX6DnfkBL7GhKFsS8iUfhN2FfoNWRh3ItIFsa9iBTCmBeRQhjz4ZRGGG8ilfB6jInEVVs/MTj5xUWwbSbUQNs2sZ2Kq9EilNup60qj3LUReT4mR2u2mIXyrtbx2nbjI/P+HpgTFoAYAQlU0rYJYXt3aASg+/zw8HBlkKWFuW5UkSbhsnH4RHxIKmtG8Lx2O5PJ1DhxkKqUW+hGk2gUyoJxhniE6Ivq3W0pAXQPVZ8ibHJ6qrl6JImmGppnecwn3XK7kBnEJOS4zlEUiUZh2zzLI4UQrv94GyPkOnMRJBqFyzghHKa0qfvsQk6KYF90bqUb93pZ72fz5Y+3DT6EsFqOtlC+bh1pXjSUtCq3tWTMsQm5VrSF/L6lkW7k1KsWM7jUjq3CXCFyRPOMb9hpLCtfb7TUvlWsYYUrVqG0Gm2hgbjfG2c61erxCRaYqS2J1o4YvQnDuvJeFtSV9zbfm+7hSTGD9ykpVq3ChagL1d1T/09PWLeOLdZYW2kchKbpfZMgrJ2K8RbyPKGEmRMp5kL40mURYyckFzHTjLkQrpPGmhMx3kIe/kRqp0Ux3kKlihlnY+2EE6MuhIYgiPxL25LbTMysSFEWQvjq8evs3Wu9nL15+4MdCdsvM47IWvG42q9j9c+RE4JXr29ms5pQzVtkHX9S94aG2JrquxVRqlZz7yN2Og5SW6rPJLz2BtkdlbTXN797qeS7zXX7YqdWq2VOTk7monTzBgDgPNsHmoTX3qBO2TRmP9hJpA7lRyESzafUe/c1n0V47S/EARa3YL1dh2He/Q26W2ruq9l6kL059FmFZ7giDoW41Zwq5PmwgClw/lf1+hWaEYcQXntFEMrPpzEpqBuv0EabvjCLikX4liA0n6zazpFhWLdIK8KzW0hgNmsW/sm5mcrbzsLQnjQBXWvj1HPmRshjgdpnAaFNGVhg9pYLofFDOIxQDunzVHAfX0QXwhIeOPw8J6TBBnRx3dAy1jgKzUfjGGEUi3hGKZSBA1D/TC6sngjSVEQHIfxQdMqq9p2hPbgHtvAN9YxCCD/mxwzJ54tF5R/617owtOUpuDGDLeMZSQhLRybg2LTaMi/G8nYhXwpvdQpupO3LtsFwc+YkhHBzzAzUel8RIQzzOQYAUnvnWw9mZlTUayvy7q2zM5QQ8ptlsy9/oQkv8nZhyE+3DW/zAfAtopaPrUJlR/jRUr+xsaI+hBYRwohshQX4mCyEGx+KeatvLF/ThYd5uzC8jmiKAO/esscoVMq3auepmkNdOI0QRuSRKaH0LSJd/TrhehnpUzQZXVhDCGFEHijadVyZwPUjjE/l6N+AGEvD2yVaglxkDoRww8FnLGINNZaGN+ebIqCAg506/9HJZ+iJ06gZPyqDKRLYE9qmdxSxOH1xMV1ErdqULEdAiNsmCDLkV4m+HilvqrNJGIHjbzD76dMsKn+D6+QCIsGREgJwf1HPw59/1r/4+4eRfBETgu7lYlrL4rdq4/yk/YtfRgSahaEuagDozuq+AVAjPhyRFyEhAHuzi0bgJ22IWfQGtAoBMv7zurNpo08R/qoJL70BLUJQL6Pi72226kdOZp5F6AloERZazQlbpqqnPgoV36XNZ26lnoAWIcdxUxWrsMk1/LuBUfXZeL0MgJ8Xf2Eo/E20EyvqHUadgj+9EqTuY3zp9GUP+OuDf4w6TdiF8H3/Dg0TsTK4hao+TIGdEewh2qehoX7+fLn4T49A42nivxqDO1AmKjYgJw2TqzJ6EMWpgH2i4vc2ypiE8J4GNBArtjvfuX6bZQF0LKAWj53QKNxoGAwTlUpF+TOBBHLiCgMhuEHhS3tuowbhsemGvuaUOk0gfeptRl3vQEILZVZCTQj/bb0B3CmSZyElkEEJB0J9lKHKsddWCnCTIPsS9oXw95YboOe7/SgrmH7IoIR94T1XFeQ6k96EYJYOmPY62Q+FJVc+ruPxMRtlmqADMmmkPeFv1gdpHJuo5PmZRUpfOs2ihKrwvUR2aRE7np8epu2EbEZSVfh7jt7XWimseQVSt1FGwrF3tBNhVWotMVh1g0vqRvofJsA8uQ9WG51WQ1wp11k8we+ihGwGmjH0ytPYMnPlgrqEYbQxpO+FaY97+0GwS88h8HiS7UkUPZCJcILYRptsT6HcNFIWwisisMX4MWHq5QwbIRnI/HkTFyMpCyHJx2QjaBG6KKH3AwziMMrlmL9UohukcIrYRpmcVpjiaqDxKqyQp3rWw0ywQvIo48djbQEKKRZrnMTa51boZeGdJ48yXMOHd9eMKLyqTDVFlyEDOebDzIjCqymqy3UfyY+XSNEdAxuFFc4fnpIOe59bIdWAP3o8n4l6F141/QSKvjwB7Ur4vZ8+LgI1/K/PQC4XstB3INfw4wVS9EL/gf50RGrhH/4DlWbq8dMJL0K/B5l+/HifBKXwf4EAlTmf9QafWkixamYSH17lRicMpo1yfmzxKYVBAZWxhnkzpRIGVkI/3qlIJQzMp3RE5ntgGmFQA6ka9u9UpBH+ERzQh9e3gm52BpMh3c2NPZ6FPhy2YZ9pzmYfBN5IfRGe4x9Nz84EPJL69B4whyL2iEF2Q39Wpnv4h+97RNt7gOMmVIZTh3aaDW5N2k9zjb1QqSL+/QLZmYeBApVlmy9HGeD8wU1MsotBDjT+vShafb/ADXT2XNygxSKiL8A+Ep1uwMLqgh890SlBC7ncasDErqt7eVmkVQ70L2sBddc11J8EaeRGWtNKTfVvpAnqmT3gfsJfG6ZbKEujGTunC6tz1tQ93g2G/qUtub/CJS0LR3WQKo/WysWqZE/reG5Uo4qZLNh+aXNlcYQS6B/7VhvS0Vqd/nZZchrHIx0aK7q5dxNThoiDX5r3raF0nKqzHKtEyf1JDgD1d1+m7A8Asrqk47VyR29o3n9nbtd1im/CzMMLR1u/SUdAb/ar5aa7By0QV+HuTBVMXtl8GGGzezraxXXMQ3+96bGOru6bAnNf7D608EUBgNXWKGW0nJ8BsOCtY4or1Ise5f+FKCBa2HtqBUwujWK0LqbBXMfThqVFO56CbgUNtAulwa0uYK2wkHM9WtiOecHkqRcj7UEAqH+ZwkVq5fS0ctzRcPxSNhtzC5yUc5NO03pFABQWRFc/w5jWC7oSpgr4TJoDLB0JdCfdBfH7VSbh0UPbSqnj5XvxK2aXP4P485IkSZIkSZIkSZIkSZIkSZIkSZIk8Tv/B3bBREdOWYS3AAAAAElFTkSuQmCC"; return pictureBase64; } @@ -230,18 +228,15 @@ template:
      This sample demonstrates how to work with shapes and text boxes.
      -
      -

      Set up

      - -

      Try it out

      Main document

      + @@ -287,4 +282,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 781a1c0bd7750c91417125b4cb83389b8063ac58..3d29ce38785b60ec83e2e9893b1348f64ea7e873 100644 GIT binary patch delta 17299 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2dfd57dfa..d1907e430 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -20623,7 +20623,7 @@ Word.Body#shapes:member: await context.sync(); if (shapes.items.length > 0) { - shapes.items.forEach(function(shape, index) { + shapes.items.forEach(function (shape, index) { if (shape.type === Word.ShapeType.textBox) { console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); } @@ -27320,9 +27320,7 @@ Word.Range#insertInlinePictureFromBase64:member(1): // Returns Base64-encoded image data for a sample picture. const pictureBase64 = - - "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"; - + "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"; return pictureBase64; Word.Range#insertTextBox:member(1): - >- @@ -27799,14 +27797,32 @@ Word.Shape#delete:member(1): await Word.run(async (context) => { // Deletes the first text box. - context.document.body.shapes - .getByTypes([Word.ShapeType.textBox]) - .getFirst() - .delete(); + context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirst().delete(); await context.sync(); console.log("The first text box in document was deleted."); }); +Word.Shape#body:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Inserts a content control into the first paragraph in the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirst(); + firstShapeWithTextBox.load("type/body"); + await context.sync(); + + const firstParagraphInTextBox: Word.Paragraph = firstShapeWithTextBox.body.paragraphs.getFirst(); + const newControl: Word.ContentControl = firstParagraphInTextBox.insertContentControl(); + newControl.load(); + await context.sync(); + + console.log("New content control properties:", newControl); + }); Word.Shape#type:member: - >- // Link to full sample: @@ -27820,7 +27836,7 @@ Word.Shape#type:member: await context.sync(); if (shapes.items.length > 0) { - shapes.items.forEach(function(shape, index) { + shapes.items.forEach(function (shape, index) { if (shape.type === Word.ShapeType.textBox) { console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); } @@ -27842,7 +27858,7 @@ Word.ShapeCollection:class: await context.sync(); if (shapes.items.length > 0) { - shapes.items.forEach(function(shape, index) { + shapes.items.forEach(function (shape, index) { if (shape.type === Word.ShapeType.textBox) { console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); } @@ -27891,6 +27907,24 @@ Word.ShapeCollection#getFirst:member(1): console.log("New content control properties:", newControl); }); +Word.ShapeCollection#getFirstOrNullObject:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets text from first text box in main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("body/text"); + await context.sync(); + + console.log( + shape.isNullObject + ? "No shapes with text boxes found in main document." + : `Text in first text box: ${shape.body.text}`, + ); + }); Word.ShapeType:enum: - >- // Link to full sample: @@ -27904,7 +27938,7 @@ Word.ShapeType:enum: await context.sync(); if (shapes.items.length > 0) { - shapes.items.forEach(function(shape, index) { + shapes.items.forEach(function (shape, index) { if (shape.type === Word.ShapeType.textBox) { console.log(`Shape ${index} in the main document has a text box. Properties:`, shape); } From 107fb5406ecc06f77cbb5e454a2476b3b47cd344 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 17 Oct 2025 15:16:58 -0700 Subject: [PATCH 156/156] [Outlook] (legacy tokens) Shorten section name (#1011) --- playlists-prod/outlook.yaml | 28 +++++++++---------- playlists/outlook.yaml | 28 +++++++++---------- .../get-icaluid-as-attendee.yaml | 0 .../get-icaluid-as-organizer.yaml | 0 .../ids-and-urls.yaml | 0 .../make-ews-request-async.yaml | 0 ...-message-using-make-ews-request-async.yaml | 0 .../user-callback-token.yaml | 0 .../user-identity-token.yaml | 0 snippet-extractor-output/snippets.yaml | 16 +++++------ view-prod/outlook.json | 14 +++++----- view/outlook.json | 14 +++++----- 12 files changed, 50 insertions(+), 50 deletions(-) rename samples/outlook/{85-tokens-and-service-calls-for-exchange-on-premises-environments => 85-tokens-for-exchange-on-premises}/get-icaluid-as-attendee.yaml (100%) rename samples/outlook/{85-tokens-and-service-calls-for-exchange-on-premises-environments => 85-tokens-for-exchange-on-premises}/get-icaluid-as-organizer.yaml (100%) rename samples/outlook/{85-tokens-and-service-calls-for-exchange-on-premises-environments => 85-tokens-for-exchange-on-premises}/ids-and-urls.yaml (100%) rename samples/outlook/{85-tokens-and-service-calls-for-exchange-on-premises-environments => 85-tokens-for-exchange-on-premises}/make-ews-request-async.yaml (100%) rename samples/outlook/{85-tokens-and-service-calls-for-exchange-on-premises-environments => 85-tokens-for-exchange-on-premises}/send-message-using-make-ews-request-async.yaml (100%) rename samples/outlook/{85-tokens-and-service-calls-for-exchange-on-premises-environments => 85-tokens-for-exchange-on-premises}/user-callback-token.yaml (100%) rename samples/outlook/{85-tokens-and-service-calls-for-exchange-on-premises-environments => 85-tokens-for-exchange-on-premises}/user-identity-token.yaml (100%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 2b064ff8c..9a1b827bc 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -473,8 +473,8 @@ Retrieves the Exchange Web Services (EWS) endpoint URL and item IDs and converts item IDs for different protocols. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.5' - id: outlook-tokens-and-service-calls-user-identity-token @@ -484,8 +484,8 @@ Gets a user identity token for authentication flows in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-user-callback-token @@ -495,8 +495,8 @@ Gets a callback token to call Outlook services from an add-in's backend service in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-make-ews-request-async @@ -508,8 +508,8 @@ Uses EWS in an Exchange on-premises environment to get a message without any backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async @@ -521,8 +521,8 @@ Uses EWS in an Exchange on-premises environment to send a message without any backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/send-message-using-make-ews-request-async.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-get-icaluid-as-organizer @@ -532,8 +532,8 @@ Uses Exchange Web Services (EWS) in an Exchange on-premises environment to get an appointment's iCalUId value where the user is the organizer. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.3' - id: outlook-tokens-and-service-calls-get-icaluid-as-attendee @@ -543,8 +543,8 @@ Uses Exchange Web Services (EWS) in an Exchange on-premises environment to get an appointment's iCalUId value where the user is an attendee. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-other-item-apis-get-subject-read diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 085249207..557b89f9a 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -473,8 +473,8 @@ Retrieves the Exchange Web Services (EWS) endpoint URL and item IDs and converts item IDs for different protocols. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.5' - id: outlook-tokens-and-service-calls-user-identity-token @@ -484,8 +484,8 @@ Gets a user identity token for authentication flows in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-user-callback-token @@ -495,8 +495,8 @@ Gets a callback token to call Outlook services from an add-in's backend service in an Exchange on-premises environment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-make-ews-request-async @@ -508,8 +508,8 @@ Uses EWS in an Exchange on-premises environment to get a message without any backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async @@ -521,8 +521,8 @@ Uses EWS in an Exchange on-premises environment to send a message without any backend code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/send-message-using-make-ews-request-async.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-tokens-and-service-calls-get-icaluid-as-organizer @@ -532,8 +532,8 @@ Uses Exchange Web Services (EWS) in an Exchange on-premises environment to get an appointment's iCalUId value where the user is the organizer. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.3' - id: outlook-tokens-and-service-calls-get-icaluid-as-attendee @@ -543,8 +543,8 @@ Uses Exchange Web Services (EWS) in an Exchange on-premises environment to get an appointment's iCalUId value where the user is an attendee. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml - group: Tokens And Service Calls For Exchange On-Premises Environments + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml + group: Tokens For Exchange On-Premises api_set: Mailbox: '1.1' - id: outlook-other-item-apis-get-subject-read diff --git a/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml similarity index 100% rename from samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml rename to samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml diff --git a/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml similarity index 100% rename from samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml rename to samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml diff --git a/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml similarity index 100% rename from samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml rename to samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml diff --git a/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml similarity index 100% rename from samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml rename to samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml diff --git a/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/send-message-using-make-ews-request-async.yaml similarity index 100% rename from samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml rename to samples/outlook/85-tokens-for-exchange-on-premises/send-message-using-make-ews-request-async.yaml diff --git a/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml similarity index 100% rename from samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml rename to samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml diff --git a/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml similarity index 100% rename from samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml rename to samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d1907e430..69f9fe20e 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11844,7 +11844,7 @@ Office.Location#setAsync:member(1): Office.Mailbox#convertToEwsId:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml // Get the EWS URL and EWS item ID. @@ -11873,7 +11873,7 @@ Office.Mailbox#convertToEwsId:member(1): Office.Mailbox#convertToRestId:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml // Get the EWS URL and EWS item ID. @@ -12095,7 +12095,7 @@ Office.Mailbox#displayNewMessageFormAsync:member(1): Office.Mailbox#ewsUrl:member: - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml // Get the EWS URL and EWS item ID. @@ -12124,7 +12124,7 @@ Office.Mailbox#ewsUrl:member: Office.Mailbox#getCallbackTokenAsync:member(2): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml Office.context.mailbox.getCallbackTokenAsync((result) => { @@ -12162,7 +12162,7 @@ Office.Mailbox#getSelectedItemsAsync:member(2): Office.Mailbox#getUserIdentityTokenAsync:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml Office.context.mailbox.getUserIdentityTokenAsync((result) => { @@ -12207,7 +12207,7 @@ Office.Mailbox#loadItemByIdAsync:member(1): Office.Mailbox#makeEwsRequestAsync:member(1): - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml const ewsId = Office.context.mailbox.item.itemId; @@ -12240,7 +12240,7 @@ Office.Mailbox#makeEwsRequestAsync:member(1): }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/send-message-using-make-ews-request-async.yaml const request = '- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml // Get the EWS URL and EWS item ID. diff --git a/view-prod/outlook.json b/view-prod/outlook.json index f8825fcac..3eeda67db 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -48,13 +48,13 @@ "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-regex-matches/contextual.yaml", "outlook-events-drag-drop-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/80-events/drag-drop-item.yaml", - "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml", - "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml", - "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml", - "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml", + "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml", + "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml", + "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml", + "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/send-message-using-make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml", diff --git a/view/outlook.json b/view/outlook.json index 3a5582021..6e7f14ee6 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -48,13 +48,13 @@ "outlook-mime-headers-manage-custom-internet-headers-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml", "outlook-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-regex-matches/contextual.yaml", "outlook-events-drag-drop-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/80-events/drag-drop-item.yaml", - "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/ids-and-urls.yaml", - "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-identity-token.yaml", - "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/user-callback-token.yaml", - "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/send-message-using-make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-organizer.yaml", - "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls-for-exchange-on-premises-environments/get-icaluid-as-attendee.yaml", + "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml", + "outlook-tokens-and-service-calls-user-identity-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml", + "outlook-tokens-and-service-calls-user-callback-token": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml", + "outlook-tokens-and-service-calls-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-send-message-using-make-ews-request-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/send-message-using-make-ews-request-async.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml", + "outlook-tokens-and-service-calls-get-icaluid-as-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml", "outlook-other-item-apis-get-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-subject-read.yaml", "outlook-other-item-apis-get-set-subject-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/set-selected-data.yaml",
      -

      This sample shows how to get extracted entities and regex matches.

      -

      Note: Entities and contextual add-ins only support the use of an XML manifest. These features aren't supported when your add-in uses a - Teams manifest for Office Add-ins (preview).

      -

      Required mode: Item Read, contextual add-in

      -
      -

      Try it out

      -
      - - +

      Try it out

      +

      First load the CustomProperties object of the mail item.

      + +
      + +
      -
      - - +
      + +
      - - - - +
      + + +
      + -

      This sample shows basic operations using footnotes.

      -

      Important: The WordApiOnline 1.1 requirement set is needed for this sample. See Word JavaScript - API requirement sets for supported Word clients.