Skip to content

Commit 830e306

Browse files
[Word] (ChangeTrackingState) Add snippet (OfficeDev#909)
* [Word] (ChangeTrackingState) Add snippet * Include order * Add snippet author * Updates based on feedback * Updates based on feedback
1 parent c2545c3 commit 830e306

File tree

7 files changed

+223
-0
lines changed

7 files changed

+223
-0
lines changed

playlists-prod/word.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,15 @@
111111
group: Content Controls
112112
api_set:
113113
WordApi: '1.7'
114+
- id: word-content-controls-get-change-tracking-states
115+
name: Get change tracking states of content controls
116+
fileName: get-change-tracking-states.yaml
117+
description: Gets change tracking states of content controls.
118+
rawUrl: >-
119+
https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml
120+
group: Content Controls
121+
api_set:
122+
WordApi: '1.5'
114123
- id: word-images-insert-and-get-pictures
115124
name: Use inline pictures
116125
fileName: insert-and-get-pictures.yaml

playlists/word.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,15 @@
111111
group: Content Controls
112112
api_set:
113113
WordApi: '1.7'
114+
- id: word-content-controls-get-change-tracking-states
115+
name: Get change tracking states of content controls
116+
fileName: get-change-tracking-states.yaml
117+
description: Gets change tracking states of content controls.
118+
rawUrl: >-
119+
https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/get-change-tracking-states.yaml
120+
group: Content Controls
121+
api_set:
122+
WordApi: '1.5'
114123
- id: word-images-insert-and-get-pictures
115124
name: Use inline pictures
116125
fileName: insert-and-get-pictures.yaml
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
order: 9
2+
id: word-content-controls-get-change-tracking-states
3+
name: Get change tracking states of content controls
4+
description: Gets change tracking states of content controls.
5+
author: xiruatms
6+
host: WORD
7+
api_set:
8+
WordApi: '1.5'
9+
script:
10+
content: |
11+
$("#turn-on-change-tracking").on("click", () => tryCatch(turnOnChangeTracking));
12+
$("#insert-content-control").on("click", () => tryCatch(insertContentControlOnLastParagraph));
13+
$("#delete-content-control").on("click", () => tryCatch(deleteFirstContentControl));
14+
$("#turn-off-change-tracking").on("click", () => tryCatch(turnOffChangeTracking));
15+
$("#log-change-tracking-states").on("click", () => tryCatch(logChangeTrackingStates));
16+
$("#setup").on("click", () => tryCatch(setup));
17+
18+
async function turnOnChangeTracking() {
19+
// Turns on change tracking.
20+
await Word.run(async (context) => {
21+
context.document.changeTrackingMode = Word.ChangeTrackingMode.trackAll;
22+
await context.sync();
23+
console.log("Turned on change tracking.");
24+
});
25+
}
26+
27+
async function insertContentControlOnLastParagraph() {
28+
// Inserts a content control on the last paragraph.
29+
await Word.run(async (context) => {
30+
let paragraphs = context.document.body.paragraphs;
31+
paragraphs.load();
32+
paragraphs.getLast().insertContentControl("RichText");
33+
await context.sync();
34+
console.log("Inserted content control on last paragraph.");
35+
});
36+
}
37+
38+
async function deleteFirstContentControl() {
39+
// Deletes the first content control found in the document body.
40+
await Word.run(async (context) => {
41+
context.document.body
42+
.getContentControls()
43+
.getFirst()
44+
.delete(false);
45+
await context.sync();
46+
console.log("Deleted the first content control.");
47+
});
48+
}
49+
50+
async function turnOffChangeTracking() {
51+
// Turns off change tracking.
52+
await Word.run(async (context) => {
53+
context.document.changeTrackingMode = Word.ChangeTrackingMode.off;
54+
await context.sync();
55+
console.log("Turned off change tracking.");
56+
});
57+
}
58+
59+
async function logChangeTrackingStates() {
60+
// Logs the current change tracking states of the content controls.
61+
await Word.run(async (context) => {
62+
let trackAddedArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.added];
63+
let trackDeletedArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.deleted];
64+
let trackNormalArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.normal];
65+
66+
let addedContentControls = context.document.body.getContentControls().getByChangeTrackingStates(trackAddedArray);
67+
let deletedContentControls = context.document.body
68+
.getContentControls()
69+
.getByChangeTrackingStates(trackDeletedArray);
70+
let normalContentControls = context.document.body.getContentControls().getByChangeTrackingStates(trackNormalArray);
71+
72+
addedContentControls.load();
73+
deletedContentControls.load();
74+
normalContentControls.load();
75+
await context.sync();
76+
77+
console.log(`Number of content controls in Added state: ${addedContentControls.items.length}`);
78+
console.log(`Number of content controls in Deleted state: ${deletedContentControls.items.length}`);
79+
console.log(`Number of content controls in Normal state: ${normalContentControls.items.length}`);
80+
});
81+
}
82+
83+
async function setup() {
84+
// Adds 4 paragraphs then inserts content controls on the first three paragraphs.
85+
await Word.run(async (context) => {
86+
const body: Word.Body = context.document.body;
87+
body.clear();
88+
body.insertParagraph("One more paragraph.", "Start");
89+
body.insertParagraph("Inserting another paragraph.", "Start");
90+
body.insertParagraph(
91+
"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.",
92+
"Start"
93+
);
94+
body.paragraphs
95+
.getLast()
96+
.insertText(
97+
"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.",
98+
"Replace"
99+
);
100+
body.paragraphs.load();
101+
await context.sync();
102+
body.paragraphs.items[0].insertContentControl("PlainText");
103+
body.paragraphs.items[1].insertContentControl("PlainText");
104+
body.paragraphs.items[2].insertContentControl("RichText");
105+
console.log("Inserted content controls on the first three paragraphs.");
106+
});
107+
}
108+
109+
// Default helper for invoking an action and handling errors.
110+
async function tryCatch(callback) {
111+
try {
112+
await callback();
113+
} catch (error) {
114+
// Note: In a production add-in, you'd want to notify the user through your add-in's UI.
115+
console.error(error);
116+
}
117+
}
118+
language: typescript
119+
template:
120+
content: |-
121+
<section class="ms-font-m">
122+
This sample demonstrates how to insert and delete control controls then get their change tracking state.
123+
</section>
124+
125+
<section class="setup ms-font-m">
126+
<h3>Set up</h3>
127+
<button id="setup" class="ms-Button">
128+
<span class="ms-Button-label">Setup</span>
129+
</button>
130+
</section>
131+
132+
<section class="samples ms-font-m">
133+
<h3>Try it out</h3>
134+
<button id="turn-on-change-tracking" class="ms-Button">
135+
<span class="ms-Button-label">Turn on change tracking</span>
136+
</button>
137+
<button id="insert-content-control" class="ms-Button">
138+
<span class="ms-Button-label">Insert content control on last paragraph</span>
139+
</button>
140+
<button id="delete-content-control" class="ms-Button">
141+
<span class="ms-Button-label">Delete first content control</span>
142+
</button>
143+
<button id="turn-off-change-tracking" class="ms-Button">
144+
<span class="ms-Button-label">Turn off change tracking</span>
145+
</button>
146+
<button id="log-change-tracking-states" class="ms-Button">
147+
<span class="ms-Button-label">Log change tracking states</span>
148+
</button>
149+
</section>
150+
language: html
151+
style:
152+
content: |-
153+
section.samples {
154+
margin-top: 20px;
155+
}
156+
157+
section.samples .ms-Button, section.setup .ms-Button {
158+
display: block;
159+
margin-bottom: 5px;
160+
margin-left: 20px;
161+
min-width: 80px;
162+
}
163+
language: css
164+
libraries: |-
165+
https://appsforoffice.microsoft.com/lib/1/hosted/office.js
166+
@types/office-js
167+
168+
[email protected]/dist/css/fabric.min.css
169+
[email protected]/dist/css/fabric.components.min.css
170+
171+
[email protected]/client/core.min.js
172+
@types/core-js
173+
174+
175+
44 Bytes
Binary file not shown.

snippet-extractor-output/snippets.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16870,6 +16870,34 @@
1687016870
console.log("No changes are being tracked.");
1687116871
}
1687216872
});
16873+
'Word.ChangeTrackingState:enum':
16874+
- >-
16875+
// Link to full sample:
16876+
https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/get-change-tracking-states.yaml
16877+
16878+
16879+
// Logs the current change tracking states of the content controls.
16880+
16881+
await Word.run(async (context) => {
16882+
let trackAddedArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.added];
16883+
let trackDeletedArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.deleted];
16884+
let trackNormalArray: Word.ChangeTrackingState[] = [Word.ChangeTrackingState.normal];
16885+
16886+
let addedContentControls = context.document.body.getContentControls().getByChangeTrackingStates(trackAddedArray);
16887+
let deletedContentControls = context.document.body
16888+
.getContentControls()
16889+
.getByChangeTrackingStates(trackDeletedArray);
16890+
let normalContentControls = context.document.body.getContentControls().getByChangeTrackingStates(trackNormalArray);
16891+
16892+
addedContentControls.load();
16893+
deletedContentControls.load();
16894+
normalContentControls.load();
16895+
await context.sync();
16896+
16897+
console.log(`Number of content controls in Added state: ${addedContentControls.items.length}`);
16898+
console.log(`Number of content controls in Deleted state: ${deletedContentControls.items.length}`);
16899+
console.log(`Number of content controls in Normal state: ${normalContentControls.items.length}`);
16900+
});
1687316901
'Word.ChangeTrackingVersion:enum':
1687416902
- >-
1687516903
// Link to full sample:

view-prod/word.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"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",
1111
"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",
1212
"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",
13+
"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",
1314
"word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml",
1415
"word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml",
1516
"word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml",

view/word.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"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",
1111
"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",
1212
"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",
13+
"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",
1314
"word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/15-images/insert-and-get-pictures.yaml",
1415
"word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/insert-list.yaml",
1516
"word-lists-organize-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/organize-list.yaml",

0 commit comments

Comments
 (0)