25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
166 |
167 |
168 |
169 |
170 |
171 |
--------------------------------------------------------------------------------
/apps-script/execute/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @license
3 | * Copyright Google Inc.
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * https://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 | // [START apps_script_api_execute]
18 | /**
19 | * Load the API and make an API call. Display the results on the screen.
20 | */
21 | function callScriptFunction() {
22 | const scriptId = '';
23 |
24 | // Call the Apps Script API run method
25 | // 'scriptId' is the URL parameter that states what script to run
26 | // 'resource' describes the run request body (with the function name
27 | // to execute)
28 | try {
29 | gapi.client.script.scripts.run({
30 | 'scriptId': scriptId,
31 | 'resource': {
32 | 'function': 'getFoldersUnderRoot',
33 | },
34 | }).then(function(resp) {
35 | const result = resp.result;
36 | if (result.error && result.error.status) {
37 | // The API encountered a problem before the script
38 | // started executing.
39 | appendPre('Error calling API:');
40 | appendPre(JSON.stringify(result, null, 2));
41 | } else if (result.error) {
42 | // The API executed, but the script returned an error.
43 |
44 | // Extract the first (and only) set of error details.
45 | // The values of this object are the script's 'errorMessage' and
46 | // 'errorType', and an array of stack trace elements.
47 | const error = result.error.details[0];
48 | appendPre('Script error message: ' + error.errorMessage);
49 |
50 | if (error.scriptStackTraceElements) {
51 | // There may not be a stacktrace if the script didn't start
52 | // executing.
53 | appendPre('Script error stacktrace:');
54 | for (let i = 0; i < error.scriptStackTraceElements.length; i++) {
55 | const trace = error.scriptStackTraceElements[i];
56 | appendPre('\t' + trace.function + ':' + trace.lineNumber);
57 | }
58 | }
59 | } else {
60 | // The structure of the result will depend upon what the Apps
61 | // Script function returns. Here, the function returns an Apps
62 | // Script Object with String keys and values, and so the result
63 | // is treated as a JavaScript object (folderSet).
64 |
65 | const folderSet = result.response.result;
66 | if (Object.keys(folderSet).length == 0) {
67 | appendPre('No folders returned!');
68 | } else {
69 | appendPre('Folders under your root folder:');
70 | Object.keys(folderSet).forEach(function(id) {
71 | appendPre('\t' + folderSet[id] + ' (' + id + ')');
72 | });
73 | }
74 | }
75 | });
76 | } catch (err) {
77 | document.getElementById('content').innerText = err.message;
78 | return;
79 | }
80 | }
81 |
82 | // [END apps_script_api_execute]
83 |
--------------------------------------------------------------------------------
/apps-script/quickstart/README.md:
--------------------------------------------------------------------------------
1 | # Google Apps Script API Browser Quickstart
2 |
3 | Complete the steps described in the [quickstart instructions](https://developers.google.com/apps-script/api/quickstart/js),
4 | and in about five minutes you'll have a simple browser application that makes requests to the
5 | Apps Script API.
6 |
7 | ## Run
8 |
9 | After following the quickstart instructions, run the sample:
10 |
11 | ```shell
12 | python3 -m http.server 8000
13 | ```
14 |
15 | And opening the web page:
16 |
17 | ```shell
18 | open http://localhost:8000
19 | ```
20 |
--------------------------------------------------------------------------------
/apps-script/quickstart/index.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 | Google Apps Script API Quickstart
21 |
22 |
23 |
24 |
Google Apps Script API Quickstart
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
172 |
173 |
174 |
175 |
176 |
177 |
--------------------------------------------------------------------------------
/calendar/quickstart/README.md:
--------------------------------------------------------------------------------
1 | # Google Calendar Web Quickstart
2 |
3 | Complete the steps described in the [Google Calendar Browser Quickstart](
4 | https://developers.google.com/calendar/quickstart/js), and in about five minutes
5 | you'll have a simple browser application that makes requests to the Google
6 | Calendar API.
7 |
8 | ## Run
9 |
10 | After following the quickstart instructions, run the sample:
11 |
12 | ```shell
13 | python3 -m http.server 8000
14 | ```
15 |
16 | And opening the web page:
17 |
18 | ```shell
19 | open http://localhost:8000
20 | ```
21 |
22 |
--------------------------------------------------------------------------------
/calendar/quickstart/index.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 | Google Calendar API Quickstart
21 |
22 |
23 |
24 |
Google Calendar API Quickstart
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
169 |
170 |
171 |
172 |
173 |
174 |
--------------------------------------------------------------------------------
/classroom/quickstart/README.md:
--------------------------------------------------------------------------------
1 | # Google Classroom Browser Quickstart
2 |
3 | Complete the steps described in the [quickstart instructions](
4 | https://developers.google.com/classroom/quickstart/js), and in about
5 | five minutes you'll have a simple browser application that makes requests to the
6 | classroom API.
7 |
8 | ## Run
9 |
10 | After following the quickstart instructions, run the sample:
11 |
12 | ```shell
13 | python3 -m http.server 8000
14 | ```
15 |
16 | And opening the web page:
17 |
18 | ```shell
19 | open http://localhost:8000
20 | ```
21 |
--------------------------------------------------------------------------------
/classroom/quickstart/index.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 | Classroom API Quickstart
21 |
22 |
23 |
24 |
Classroom API Quickstart
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
162 |
163 |
164 |
165 |
166 |
167 |
--------------------------------------------------------------------------------
/docs/quickstart/README.md:
--------------------------------------------------------------------------------
1 | # Docs API Browser Quickstart
2 |
3 | Complete the steps described in the [quickstart instructions](
4 | https://developers.google.com/docs/api/quickstart/js), and in about
5 | five minutes you'll have a simple browser application that makes requests to the
6 | Docs API.
7 |
8 | ## Run
9 |
10 | After following the quickstart instructions, run the sample:
11 |
12 | ```shell
13 | python3 -m http.server 8000
14 | ```
15 |
16 | And opening the web page:
17 |
18 | ```shell
19 | open http://localhost:8000
20 | ```
21 |
--------------------------------------------------------------------------------
/docs/quickstart/index.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 | Google Docs API Quickstart
21 |
22 |
23 |
24 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
189 |
190 |
191 |
192 |
193 |
194 |
--------------------------------------------------------------------------------
/slides/snippets/slides_copy_presentation.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_copy_presentation]
15 | function copyPresentation(presentationId, copyTitle, callback) {
16 | const request = {
17 | name: copyTitle,
18 | };
19 | try {
20 | gapi.client.drive.files.copy({
21 | fileId: presentationId,
22 | resource: request,
23 | }).then((driveResponse) => {
24 | const presentationCopyId = driveResponse.result.id;
25 | if (callback) callback(presentationCopyId);
26 | console.log('create copy_presentation with id', presentationCopyId);
27 | });
28 | } catch (err) {
29 | document.getElementById('content').innerText = err.message;
30 | return;
31 | }
32 | }
33 | // [END slides_copy_presentation]
34 |
--------------------------------------------------------------------------------
/slides/snippets/slides_create_bulleted_text.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | // [START slides_create_bulleted_text]
16 | function createBulletedText(presentationId, shapeId, callback) {
17 | // Add arrow-diamond-disc bullets to all text in the shape.
18 | const requests = [{
19 | createParagraphBullets: {
20 | objectId: shapeId,
21 | textRange: {
22 | type: 'ALL',
23 | },
24 | bulletPreset: 'BULLET_ARROW_DIAMOND_DISC',
25 | },
26 | }];
27 | // Execute the requests.
28 | try {
29 | gapi.client.slides.presentations.batchUpdate({
30 | presentationId: presentationId,
31 | requests: requests,
32 | }).then((batchUpdateResponse) => {
33 | console.log(`Added bullets to text in shape with ID: ${shapeId}`);
34 | if (callback) callback(batchUpdateResponse.result);
35 | });
36 | } catch (err) {
37 | document.getElementById('content').innerText = err.message;
38 | return;
39 | }
40 | }
41 | // [END slides_create_bulleted_text]
42 |
--------------------------------------------------------------------------------
/slides/snippets/slides_create_image.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_create_image]
15 | function createImage(presentationId, pageId, IMAGE_URL, callback) {
16 | const imageUrl = IMAGE_URL;
17 | // Create a new image, using the supplied object ID, with content downloaded from imageUrl.
18 | const requests = [];
19 | const imageId = 'MyImage_02';
20 | const emu4M = {
21 | magnitude: 4000000,
22 | unit: 'EMU',
23 | };
24 | requests.push({
25 | createImage: {
26 | objectId: imageId,
27 | url: imageUrl,
28 | elementProperties: {
29 | pageObjectId: pageId,
30 | size: {
31 | height: emu4M,
32 | width: emu4M,
33 | },
34 | transform: {
35 | scaleX: 1,
36 | scaleY: 1,
37 | translateX: 100000,
38 | translateY: 100000,
39 | unit: 'EMU',
40 | },
41 | },
42 | },
43 | });
44 | // Execute the request.
45 | try {
46 | gapi.client.slides.presentations.batchUpdate({
47 | presentationId: presentationId,
48 | requests: requests,
49 | }).then((response) => {
50 | const createImageResponse = response.result.replies;
51 | console.log(`Created image with ID: ${createImageResponse[0].createImage.objectId}`);
52 | if (callback) callback(createImageResponse);
53 | });
54 | } catch (err) {
55 | document.getElementById('content').innerText = err.message;
56 | return;
57 | }
58 | }
59 | // [END slides_create_image]
60 |
--------------------------------------------------------------------------------
/slides/snippets/slides_create_presentation.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_create_presentation]
15 | function createPresentation(title, callback) {
16 | try {
17 | gapi.client.slides.presentations.create({
18 | title: title,
19 | }).then((response) => {
20 | console.log(`Created presentation with ID: ${response.result.presentationId}`);
21 | if (callback) callback(response);
22 | });
23 | } catch (err) {
24 | document.getElementById('content').innerText = err.message;
25 | return;
26 | }
27 | }
28 | // [END slides_create_presentation]
29 |
--------------------------------------------------------------------------------
/slides/snippets/slides_create_sheets_chart.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_create_sheets_chart]
15 | function createSheetsChart(presentationId, pageId, shapeId, sheetChartId, callback) {
16 | // Embed a Sheets chart (indicated by the spreadsheetId and sheetChartId) onto
17 | // a page in the presentation. Setting the linking mode as "LINKED" allows the
18 | // chart to be refreshed if the Sheets version is updated.
19 | const emu4M = {
20 | magnitude: 4000000,
21 | unit: 'EMU',
22 | };
23 | const presentationChartId = 'MyEmbeddedChart';
24 | const requests = [{
25 | createSheetsChart: {
26 | objectId: presentationChartId,
27 | spreadsheetId: shapeId,
28 | chartId: sheetChartId,
29 | linkingMode: 'LINKED',
30 | elementProperties: {
31 | pageObjectId: pageId,
32 | size: {
33 | height: emu4M,
34 | width: emu4M,
35 | },
36 | transform: {
37 | scaleX: 1,
38 | scaleY: 1,
39 | translateX: 100000,
40 | translateY: 100000,
41 | unit: 'EMU',
42 | },
43 | },
44 | },
45 | }];
46 | // Execute the request.
47 | try {
48 | gapi.client.slides.presentations.batchUpdate({
49 | presentationId: presentationId,
50 | requests: requests,
51 | }).then((batchUpdateResponse) => {
52 | console.log(`Added a linked Sheets chart with ID: ${presentationChartId}`);
53 | if (callback) callback(batchUpdateResponse.result);
54 | });
55 | } catch (err) {
56 | document.getElementById('content').innerText = err.message;
57 | return;
58 | }
59 | }
60 | // [END slides_create_sheets_chart]
61 |
--------------------------------------------------------------------------------
/slides/snippets/slides_create_slide.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_create_slide]
15 | function createSlide(presentationId, pageId, callback) {
16 | const requests = [
17 | {
18 | createSlide: {
19 | objectId: pageId,
20 | insertionIndex: '1',
21 | slideLayoutReference: {
22 | predefinedLayout: 'TITLE_AND_TWO_COLUMNS',
23 | },
24 | },
25 | },
26 | ];
27 | // If you wish to populate the slide with elements, add element create requests here,
28 | // using the pageId.
29 | // Execute the request.
30 | try {
31 | gapi.client.slides.presentations
32 | .batchUpdate({
33 | presentationId: presentationId,
34 | requests: requests,
35 | })
36 | .then((createSlideResponse) => {
37 | const objectId =
38 | createSlideResponse.result.replies[0].createSlide.objectId;
39 | console.log(`Created slide with ID: ${objectId}`);
40 | if (callback) callback(createSlideResponse);
41 | });
42 | } catch (err) {
43 | document.getElementById('content').innerText = err.message;
44 | return;
45 | }
46 | }
47 | // [END slides_create_slide]
48 |
--------------------------------------------------------------------------------
/slides/snippets/slides_create_textbox_with_text.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_create_textbox_with_text]
15 | function createTextboxWithText(presentationId, pageId, callback) {
16 | // Create a new square textbox, using the supplied element ID.
17 | const elementId = 'MyTextBox_01';
18 | const pt350 = {
19 | magnitude: 350,
20 | unit: 'PT',
21 | };
22 | const requests = [{
23 | createShape: {
24 | objectId: elementId,
25 | shapeType: 'TEXT_BOX',
26 | elementProperties: {
27 | pageObjectId: pageId,
28 | size: {
29 | height: pt350,
30 | width: pt350,
31 | },
32 | transform: {
33 | scaleX: 1,
34 | scaleY: 1,
35 | translateX: 350,
36 | translateY: 100,
37 | unit: 'PT',
38 | },
39 | },
40 | },
41 | },
42 |
43 | // Insert text into the box, using the supplied element ID.
44 | {
45 | insertText: {
46 | objectId: elementId,
47 | insertionIndex: 0,
48 | text: 'New Box Text Inserted!',
49 | },
50 | }];
51 | // Execute the request.
52 | try {
53 | gapi.client.slides.presentations.batchUpdate({
54 | presentationId: presentationId,
55 | requests: requests,
56 | }).then((createTextboxWithTextResponse) => {
57 | const createShapeResponse = createTextboxWithTextResponse.result.replies[0].createShape;
58 | console.log(`Created textbox with ID: ${createShapeResponse.objectId}`);
59 | if (callback) callback(createTextboxWithTextResponse.result);
60 | });
61 | } catch (err) {
62 | document.getElementById('content').innerText = err.message;
63 | return;
64 | }
65 | }
66 | // [END slides_create_textbox_with_text]
67 |
--------------------------------------------------------------------------------
/slides/snippets/slides_image_merging.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_image_merging]
15 | function imageMerging(
16 | templatePresentationId,
17 | imageUrl,
18 | customerName,
19 | callback,
20 | ) {
21 | const logoUrl = imageUrl;
22 | const customerGraphicUrl = imageUrl;
23 |
24 | // Duplicate the template presentation using the Drive API.
25 | const copyTitle = customerName + ' presentation';
26 | try {
27 | gapi.client.drive.files
28 | .copy({
29 | fileId: templatePresentationId,
30 | resource: {
31 | name: copyTitle,
32 | },
33 | })
34 | .then((driveResponse) => {
35 | const presentationCopyId = driveResponse.result.id;
36 |
37 | // Create the image merge (replaceAllShapesWithImage) requests.
38 | const requests = [
39 | {
40 | replaceAllShapesWithImage: {
41 | imageUrl: logoUrl,
42 | replaceMethod: 'CENTER_INSIDE',
43 | containsText: {
44 | text: '{{company-logo}}',
45 | matchCase: true,
46 | },
47 | },
48 | },
49 | {
50 | replaceAllShapesWithImage: {
51 | imageUrl: customerGraphicUrl,
52 | replaceMethod: 'CENTER_INSIDE',
53 | containsText: {
54 | text: '{{customer-graphic}}',
55 | matchCase: true,
56 | },
57 | },
58 | },
59 | ];
60 | // Execute the requests for this presentation.
61 | gapi.client.slides.presentations
62 | .batchUpdate({
63 | presentationId: presentationCopyId,
64 | requests: requests,
65 | })
66 | .then((batchUpdateResponse) => {
67 | let numReplacements = 0;
68 | for (
69 | let i = 0;
70 | i < batchUpdateResponse.result.replies.length;
71 | ++i
72 | ) {
73 | numReplacements +=
74 | batchUpdateResponse.result.replies[i].replaceAllShapesWithImage
75 | .occurrencesChanged;
76 | }
77 | console.log(
78 | `Created merged presentation with ID: ${presentationCopyId}`,
79 | );
80 | console.log(`Replaced ${numReplacements} shapes with images.`);
81 | if (callback) callback(batchUpdateResponse.result);
82 | });
83 | });
84 | } catch (err) {
85 | document.getElementById('content').innerText = err.message;
86 | return;
87 | }
88 | }
89 | // [END slides_image_merging]
90 |
--------------------------------------------------------------------------------
/slides/snippets/slides_refresh_sheets_chart.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | // [START slides_refresh_sheets_chart]
16 | function refreshSheetsChart(presentationId, presentationChartId, callback) {
17 | const requests = [{
18 | refreshSheetsChart: {
19 | objectId: presentationChartId,
20 | },
21 | }];
22 | // Execute the request.
23 | try {
24 | gapi.client.slides.presentations.batchUpdate({
25 | presentationId: presentationId,
26 | requests: requests,
27 | }).then((batchUpdateResponse) => {
28 | console.log(`Refreshed a linked Sheets chart with ID: ${presentationChartId}`);
29 | if (callback) callback(batchUpdateResponse.result);
30 | });
31 | } catch (err) {
32 | document.getElementById('content').innerText = err.message;
33 | return;
34 | }
35 | }
36 | // [END slides_refresh_sheets_chart]
37 |
--------------------------------------------------------------------------------
/slides/snippets/slides_simple_text_replace.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_simple_text_replace]
15 | function simpleTextReplace(presentationId, shapeId, replacementText, callback) {
16 | // Remove existing text in the shape, then insert new text.
17 | const requests = [{
18 | deleteText: {
19 | objectId: shapeId,
20 | textRange: {
21 | type: 'ALL',
22 | },
23 | },
24 | }, {
25 | insertText: {
26 | objectId: shapeId,
27 | insertionIndex: 0,
28 | text: replacementText,
29 | },
30 | }];
31 | // Execute the requests.
32 | try {
33 | gapi.client.slides.presentations.batchUpdate({
34 | presentationId: presentationId,
35 | requests: requests,
36 | }).then((batchUpdateResponse) => {
37 | console.log(`Replaced text in shape with ID: ${shapeId}`);
38 | if (callback) callback(batchUpdateResponse.result);
39 | });
40 | } catch (err) {
41 | document.getElementById('content').innerText = err.message;
42 | return;
43 | }
44 | }
45 | // [END slides_simple_text_replace]
46 |
--------------------------------------------------------------------------------
/slides/snippets/slides_text_merging.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | // [START slides_text_merging]
15 | function textMerging(templatePresentationId, dataSpreadsheetId, callback) {
16 | // Use the Sheets API to load data, one record per row.
17 | const responses = [];
18 | const dataRangeNotation = 'Customers!A2:M6';
19 | try {
20 | gapi.client.sheets.spreadsheets.values.get({
21 | spreadsheetId: dataSpreadsheetId,
22 | range: dataRangeNotation,
23 | }).then((sheetsResponse) => {
24 | const values = sheetsResponse.result.values;
25 | // For each record, create a new merged presentation.
26 | for (let i = 0; i < values.length; ++i) {
27 | const row = values[i];
28 | const customerName = row[2]; // name in column 3
29 | const caseDescription = row[5]; // case description in column 6
30 | const totalPortfolio = row[11]; // total portfolio in column 12
31 |
32 | // Duplicate the template presentation using the Drive API.
33 | const copyTitle = customerName + ' presentation';
34 | const request = {
35 | name: copyTitle,
36 | };
37 | gapi.client.drive.files.copy({
38 | fileId: templatePresentationId,
39 | requests: request,
40 | }).then((driveResponse) => {
41 | const presentationCopyId = driveResponse.result.id;
42 |
43 | // Create the text merge (replaceAllText) requests for this presentation.
44 | const requests = [{
45 | replaceAllText: {
46 | containsText: {
47 | text: '{{customer-name}}',
48 | matchCase: true,
49 | },
50 | replaceText: customerName,
51 | },
52 | }, {
53 | replaceAllText: {
54 | containsText: {
55 | text: '{{case-description}}',
56 | matchCase: true,
57 | },
58 | replaceText: caseDescription,
59 | },
60 | }, {
61 | replaceAllText: {
62 | containsText: {
63 | text: '{{total-portfolio}}',
64 | matchCase: true,
65 | },
66 | replaceText: totalPortfolio,
67 | },
68 | }];
69 |
70 | // Execute the requests for this presentation.
71 | gapi.client.slides.presentations.batchUpdate({
72 | presentationId: presentationCopyId,
73 | requests: requests,
74 | }).then((batchUpdateResponse) => {
75 | const result = batchUpdateResponse.result;
76 | responses.push(result.replies);
77 | // Count the total number of replacements made.
78 | let numReplacements = 0;
79 | for (let i = 0; i < result.replies.length; ++i) {
80 | numReplacements += result.replies[i].replaceAllText.occurrencesChanged;
81 | }
82 | console.log(`Created presentation for ${customerName} with ID: ${presentationCopyId}`);
83 | console.log(`Replaced ${numReplacements} text instances`);
84 | if (responses.length === values.length) { // callback for the last value
85 | if (callback) callback(responses);
86 | }
87 | });
88 | });
89 | }
90 | });
91 | } catch (err) {
92 | document.getElementById('content').innerText = err.message;
93 | return;
94 | }
95 | }
96 | // [END slides_text_merging]
97 |
--------------------------------------------------------------------------------
/slides/snippets/slides_text_style_update.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | // [START slides_text_style_update]
16 | function textStyleUpdate(presentationId, shapeId, callback) {
17 | // Update the text style so that the first 5 characters are bolded
18 | // and italicized, the next 5 are displayed in blue 14 pt Times
19 | // New Roman font, and the next 5 are hyperlinked.
20 | const requests = [{
21 | updateTextStyle: {
22 | objectId: shapeId,
23 | textRange: {
24 | type: 'FIXED_RANGE',
25 | startIndex: 0,
26 | endIndex: 5,
27 | },
28 | style: {
29 | bold: true,
30 | italic: true,
31 | },
32 | fields: 'bold,italic',
33 | },
34 | }, {
35 | updateTextStyle: {
36 | objectId: shapeId,
37 | textRange: {
38 | type: 'FIXED_RANGE',
39 | startIndex: 5,
40 | endIndex: 10,
41 | },
42 | style: {
43 | fontFamily: 'Times New Roman',
44 | fontSize: {
45 | magnitude: 14,
46 | unit: 'PT',
47 | },
48 | foregroundColor: {
49 | opaqueColor: {
50 | rgbColor: {
51 | blue: 1.0,
52 | green: 0.0,
53 | red: 0.0,
54 | },
55 | },
56 | },
57 | },
58 | fields: 'foregroundColor,fontFamily,fontSize',
59 | },
60 | }, {
61 | updateTextStyle: {
62 | objectId: shapeId,
63 | textRange: {
64 | type: 'FIXED_RANGE',
65 | startIndex: 10,
66 | endIndex: 15,
67 | },
68 | style: {
69 | link: {
70 | url: 'www.example.com',
71 | },
72 | },
73 | fields: 'link',
74 | },
75 | }];
76 | // Execute the requests.
77 | try {
78 | gapi.client.slides.presentations.batchUpdate({
79 | presentationId: presentationId,
80 | requests: requests,
81 | }).then((batchUpdateResponse) => {
82 | console.log(`Updated the text style for shape with ID: ${shapeId}`);
83 | if (callback) callback(batchUpdateResponse.result);
84 | });
85 | } catch (err) {
86 | document.getElementById('content').innerText = err.message;
87 | return;
88 | }
89 | }
90 | // [END slides_text_style_update]
91 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_copy_presentation.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | function testCopyPresentation(done) {
15 | createTestPresentation(function(presentationId) {
16 | copyPresentation(presentationId, 'My Duplicate Presentation', function(copyId) {
17 | assert.isNotNull(copyId);
18 | done();
19 | // deleteFileOnCleanup(copyId);
20 | });
21 | });
22 | }
23 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_create_bulleted_text.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testCreateBulletedText(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 1, 'BLANK', function(pageIds) {
18 | const pageId = pageIds[0];
19 | createTestTextbox(presentationId, pageId, function(boxId) {
20 | createBulletedText(presentationId, boxId, function(response) {
21 | assert.equal(1, response.replies.length);
22 | done();
23 | });
24 | });
25 | });
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_create_image.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testCreateImage(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 1, 'BLANK', function(ids) {
18 | const pageId = ids[0];
19 | const IMAGE_URL =
20 | 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';
21 | createImage(presentationId, pageId, IMAGE_URL, function(response) {
22 | assert.equal(1, response.length);
23 | const imageId = response[0].createImage.objectId;
24 | assert.isNotNull(imageId);
25 | done();
26 | });
27 | });
28 | });
29 | }
30 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_create_presentation.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testCreatePresentation(done) {
16 | createPresentation('Title', function(presentation) {
17 | assert.isNotNull(presentation);
18 | done();
19 | // deleteFileOnCleanup(presentation.presentationId)
20 | });
21 | }
22 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_create_sheets_chart.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testCreateSheetsChart(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 1, 'BLANK', function(pageIds) {
18 | const pageId = pageIds[0];
19 | createSheetsChart(presentationId, pageId, DATA_SPREADSHEET_ID, CHART_ID, function(response) {
20 | assert.equal(1, response.replies.length);
21 | const chartId = response.replies[0].createSheetsChart.objectId;
22 | assert.isNotNull(chartId);
23 | done();
24 | });
25 | });
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_create_slide.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testCreateSlide(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 3, 'TITLE_AND_TWO_COLUMNS', function(ids) {
18 | const pageId = 'my_page_id';
19 | createSlide(presentationId, pageId, function(response) {
20 | assert.equal(pageId, response.result.replies[0].createSlide.objectId);
21 | done();
22 | });
23 | });
24 | });
25 | }
26 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_create_textbox_with_text.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testCreateTextboxWithText(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 1, 'BLANK', function(ids) {
18 | const pageId = ids[0];
19 | createTextboxWithText(presentationId, pageId, function(response) {
20 | assert.equal(2, response.replies.length);
21 | const boxId = response.replies[0].createShape.objectId;
22 | assert.isNotNull(boxId);
23 | done();
24 | });
25 | });
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_image_merging.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testImageMerging(done) {
16 | const TEMPLATE_PRESENTATION_ID =
17 | '1TWayqVbNxZ0ZjmfBg5nVhBDWSnQi7lgeglDDfIe41Sw';
18 | const IMAGE_URL =
19 | 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';
20 | const CUSTOMER_NAME = 'Fake Customer';
21 | imageMerging(
22 | TEMPLATE_PRESENTATION_ID,
23 | IMAGE_URL,
24 | CUSTOMER_NAME,
25 | function(response) {
26 | const presentationId = response.presentationId;
27 | assert.isNotNull(presentationId);
28 |
29 | assert.equal(2, response.replies.length);
30 | let numReplacements = 0;
31 | for (let i = 0; i < response.replies.length; ++i) {
32 | numReplacements +=
33 | response.replies[i].replaceAllShapesWithImage.occurrencesChanged;
34 | }
35 | done();
36 | },
37 | );
38 | }
39 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_refresh_sheets_chart.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testRefreshSheetsChart(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 1, 'BLANK', function(pageIds) {
18 | const pageId = pageIds[0];
19 | createTestSheetsChart(
20 | presentationId,
21 | pageId,
22 | DATA_SPREADSHEET_ID,
23 | CHART_ID,
24 | function(sheetChartId) {
25 | refreshSheetsChart(presentationId, sheetChartId, function(response) {
26 | assert.equal(1, response.replies.length);
27 | done();
28 | });
29 | },
30 | );
31 | });
32 | });
33 | }
34 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_simple_text_replace.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testSimpleTextReplace(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 1, 'BLANK', function(pageIds) {
18 | const pageId = pageIds[0];
19 | createTestTextbox(presentationId, pageId, function(boxId) {
20 | simpleTextReplace(presentationId, boxId, 'MY NEW TEXT', function(response) {
21 | assert.equal(2, response.replies.length);
22 | done();
23 | });
24 | });
25 | });
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_text_merging.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testTextMerging(done) {
16 | const TEMPLATE_PRESENTATION_ID = '1dsYAXBA6ms6eOK-fe3ai95Wa6vUR8mMrPT4Jb0B9Wfk';
17 | const DATA_SPREADSHEET_ID = '1eaI4xAqR2SpC3Ysf7ExOE0JBtXUkZ5YMIYUZ3sPx9_w';
18 | textMerging(TEMPLATE_PRESENTATION_ID, DATA_SPREADSHEET_ID, function(responses) {
19 | assert.equal(5, responses.length);
20 | responses.forEach(function(response) {
21 | let numReplacements = 0;
22 | for (let i = 0; i < response.length; ++i) {
23 | numReplacements += response[i].replaceAllText.occurrencesChanged;
24 | }
25 | });
26 | done();
27 | });
28 | }
29 |
--------------------------------------------------------------------------------
/slides/snippets/test_slides_text_style_update.js:
--------------------------------------------------------------------------------
1 | // Copyright 2022 Google LLC
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | function testTextStyleUpdate(done) {
16 | createTestPresentation(function(presentationId) {
17 | addSlides(presentationId, 1, 'BLANK', function(pageIds) {
18 | const pageId = pageIds[0];
19 | createTestTextbox(presentationId, pageId, function(boxId) {
20 | textStyleUpdate(presentationId, boxId, function(response) {
21 | assert.equal(3, response.replies.length);
22 | done();
23 | });
24 | });
25 | });
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/tasks/quickstart/README.md:
--------------------------------------------------------------------------------
1 | # Google Tasks API Browser Quickstart
2 |
3 | Complete the steps described in the [quickstart instructions](
4 | https://developers.google.com/google-apps/tasks/quickstart/js), and in about five
5 | minutes you'll have a simple browser application that makes requests to the
6 | Google Tasks API.
7 |
8 | ## Run
9 |
10 | After following the quickstart instructions, run the sample:
11 |
12 | ```shell
13 | python3 -m http.server 8000
14 | ```
15 |
16 | And opening the web page:
17 |
18 | ```shell
19 | open http://localhost:8000
20 | ```
21 |
22 |
23 |
--------------------------------------------------------------------------------
/tasks/quickstart/index.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 | Tasks API Quickstart
21 |
22 |
23 |
24 |